!function(){"use strict";var e={d:function(t,n){for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{__privateDispatchReadyEvent:function(){return p},__privateFlushListeners:function(){return E},__privateIsRouteActive:function(){return b},__privateListenTo:function(){return h},__privateOpenRoute:function(){return u},__privateRegisterRoute:function(){return a},__privateRunCommand:function(){return o},__privateRunCommandSync:function(){return i},__privateSetReady:function(){return v},__privateUseIsRouteActive:function(){return j},__privateUseListenTo:function(){return P},__privateUseRouteStatus:function(){return A},blockCommand:function(){return L},changeEditMode:function(){return R},commandEndEvent:function(){return s},commandStartEvent:function(){return c},isExperimentActive:function(){return $},registerDataHook:function(){return D},routeCloseEvent:function(){return l},routeOpenEvent:function(){return d},undoable:function(){return M},useEditMode:function(){return O},v1ReadyEvent:function(){return m},windowEvent:function(){return f}});var n=window.React,r=window.elementorV2.utils;async function o(e,t,{internal:n=!1}={}){const r=i(e,t,{internal:n});return r instanceof Promise?r:(u=r)&&"object"==typeof u&&Object.hasOwn(u,"promise")&&Object.hasOwn(u,"then")&&Object.hasOwn(u,"fail")?(o=r,new Promise(((e,t)=>{o.then(e,t)}))):Promise.resolve(r);var o,u}function i(e,t,{internal:n=!1}={}){const r=window,o=n?r.$e?.internal:r.$e?.run;if(!o)throw new Error(`\`${n?"$e.internal":"$e.run"}()\` is not available`);return o(e,t)}function u(e){const t=window;if(!t.$e?.route)return Promise.reject("`$e.route()` is not available");try{return Promise.resolve(t.$e.route(e))}catch(e){return Promise.reject(e)}}function a(e){const t=window;if(!t.$e?.routes?.register)return Promise.reject("`$e.routes.register()` is not available");const n=e.split("/");if(n.length<2)return Promise.reject(`\`${e}\` is an invalid route`);const r=n.pop(),o=n.join("/");try{return Promise.resolve(t.$e.routes.register(o,r,(()=>null)))}catch(e){return Promise.reject(e)}}var c=e=>({type:"command",name:e,state:"before"}),s=e=>({type:"command",name:e,state:"after"}),d=e=>({type:"route",name:e,state:"open"}),l=e=>({type:"route",name:e,state:"close"}),f=e=>({type:"window-event",name:e}),m=()=>f("elementor/initialized"),w=!1;function v(e){w=e}function p(){return function(){const e=window.__elementorEditorV1LoadingPromise;return e||Promise.reject("Elementor Editor V1 is not loaded")}().then((()=>{v(!0),window.dispatchEvent(new CustomEvent("elementor/initialized"))}))}var y=new Map,g=new AbortController;function h(e,t){Array.isArray(e)||(e=[e]);const n=e.map((e=>{const{type:n,name:r}=e;switch(n){case"command":return function(e,t,n){return _(`elementor/commands/run/${t}`,(t=>{"command"===t.type&&t.command===e&&n(t)}))}(r,e.state,t);case"route":return function(e,t,n){return _(`elementor/routes/${t}`,(t=>{"route"===t.type&&t.route.startsWith(e)&&n(t)}))}(r,e.state,t);case"window-event":return _(r,t)}}));return()=>{n.forEach((e=>e()))}}function E(){g.abort(),y.clear(),v(!1),g=new AbortController}function _(e,t){return!y.has(e)&&(y.set(e,[]),function(e){window.addEventListener(e,function(e){return t=>{if(!w)return;const n=function(e){return e instanceof CustomEvent&&e.detail?.command?{type:"command",command:e.detail.command,args:e.detail.args,originalEvent:e}:e instanceof CustomEvent&&e.detail?.route?{type:"route",route:e.detail.route,originalEvent:e}:{type:"window-event",event:e.type,originalEvent:e}}(t);y.get(e)?.forEach((e=>{e(n)}))}}(e),{signal:g.signal})}(e)),y.get(e)?.push(t),()=>{const n=y.get(e);if(!n?.length)return;const r=n.filter((e=>e!==t));y.set(e,r)}}function b(e){const t=window;return!!t.$e?.routes?.isPartOf(e)}var $=e=>{const t=window;return!!t.elementorCommon?.config?.experimentalFeatures?.[e]};function P(e,t,r=[]){const[o,i]=(0,n.useState)((()=>t()));return(0,n.useEffect)((()=>{const n=()=>i(t());return n(),h(e,n)}),r),o}function j(e){return P([d(e),l(e)],(()=>b(e)),[e])}function O(){return P(f("elementor/edit-mode/change"),C)}function C(){return window.elementor.channels.dataEditMode.request("activeMode")}function R(e){return window.elementor.changeEditMode(e)}function A(e,{blockOnKitRoutes:t=!0,allowedEditModes:n=["edit"]}={}){const r=j(e),o=j("panel/global"),i=O(),u=!n.includes(i);return{isActive:r&&!u,isBlocked:u||t&&o}}var S=(0,r.createError)({code:"history_manager_not_available",message:"Cannot access History manager."});function M(e,t){return e.redo??=e.do,n=>{const r=n,o=e,i=function(){const e=window,t=e.elementor?.documents?.getCurrent?.()?.history;if(!t)throw new S;return t}();let u=o.do(r);return i.addItem({title:V(t.title)(r,u),subTitle:V(t.subtitle)(r,u),type:"",restore:(e,t)=>{t?u=o.redo(r,u):o.undo(r,u)}}),u}}function V(e){return"function"==typeof e?e:()=>e??""}var k=0;function D(e,t,n){const r=window,o=r.$e?.modules?.hookData,i={after:o?.After,dependency:o?.Dependency}[e];if(!i)throw new Error(`Data hook '${e}' is not available`);const u=++k,a=new class extends i{getCommand(){return t}getId(){return`${t}--data--${u}`}apply(e){return n(e)}};return a.register(),a}function L({command:e,condition:t}){return D("dependency",e,(e=>!t(e)))}(window.elementorV2=window.elementorV2||{}).editorV1Adapters=t}(),window.elementorV2.editorV1Adapters?.init?.();@import "../../modules/site-editor/assets/js/molecules/site-template.scss"; @import "../../modules/site-editor/assets/js/pages/add-new.scss"; @import "../../modules/site-editor/assets/js/pages/template-type.scss"; @import "../../modules/site-editor/assets/js/pages/conditions/conditions.scss"; @import "../../modules/site-editor/assets/js/molecules/back-button.scss"; @import "../../modules/site-editor/assets/js/atoms/indicator-bullet.scss"; @import "../../modules/site-editor/assets/js/atoms/preview-iframe.scss"; @import "../../modules/site-editor/assets/js/site-editor.scss"; .splitpanes{display:flex;height:100%;width:100%}.splitpanes--vertical{flex-direction:row}.splitpanes--horizontal{flex-direction:column}.splitpanes--dragging *{-webkit-user-select:none;-moz-user-select:none;user-select:none}.splitpanes__pane{height:100%;overflow:hidden;width:100%}.splitpanes--vertical .splitpanes__pane{transition:width .2s ease-out}.splitpanes--horizontal .splitpanes__pane{transition:height .2s ease-out}.splitpanes--dragging .splitpanes__pane{transition:none}.splitpanes__splitter{touch-action:none}.splitpanes--vertical>.splitpanes__splitter{cursor:col-resize;min-width:1px}.splitpanes--horizontal>.splitpanes__splitter{cursor:row-resize;min-height:1px}.splitpanes.default-theme .splitpanes__pane{background-color:#f2f2f2}.splitpanes.default-theme .splitpanes__splitter{background-color:#fff;box-sizing:border-box;flex-shrink:0;position:relative}.splitpanes.default-theme .splitpanes__splitter:after,.splitpanes.default-theme .splitpanes__splitter:before{background-color:#00000026;content:"";right:50%;position:absolute;top:50%;transition:background-color .3s}.splitpanes.default-theme .splitpanes__splitter:hover:after,.splitpanes.default-theme .splitpanes__splitter:hover:before{background-color:#00000040}.splitpanes.default-theme .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme .splitpanes--vertical>.splitpanes__splitter,.default-theme.splitpanes--vertical>.splitpanes__splitter{border-right:1px solid #eee;margin-right:-1px;width:7px}.default-theme .splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme.splitpanes--vertical>.splitpanes__splitter:before{height:30px;transform:translateY(-50%);width:1px}.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:before{margin-right:-2px}.default-theme .splitpanes--vertical>.splitpanes__splitter:after,.default-theme.splitpanes--vertical>.splitpanes__splitter:after{margin-right:1px}.default-theme .splitpanes--horizontal>.splitpanes__splitter,.default-theme.splitpanes--horizontal>.splitpanes__splitter{border-top:1px solid #eee;height:7px;margin-top:-1px}.default-theme .splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme.splitpanes--horizontal>.splitpanes__splitter:before{height:1px;transform:translate(50%);width:30px}.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme .splitpanes--horizontal>.splitpanes__splitter:after,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px} .v-row{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:left;margin-left:-15px}.v-row>[class*=v-col--]{box-sizing:border-box}.v-row .v-col--auto{width:100%}.v-row .v-col--100{padding-left:15px;width:100%}.v-row .v-col--100:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--100{width:100%}.v-row .v-col--95{padding-left:15px;width:95%}.v-row .v-col--95:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--95{width:95%}.v-row .v-col--90{padding-left:15px;width:90%}.v-row .v-col--90:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--90{width:90%}.v-row .v-col--85{padding-left:15px;width:85%}.v-row .v-col--85:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--85{width:85%}.v-row .v-col--80{padding-left:15px;width:80%}.v-row .v-col--80:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--80{width:80%}.v-row .v-col--75{padding-left:15px;width:75%}.v-row .v-col--75:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--75{width:75%}.v-row .v-col--70{padding-left:15px;width:70%}.v-row .v-col--70:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--70{width:70%}.v-row .v-col--66{padding-left:15px;width:66.66666666666666%}.v-row .v-col--66:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--66{width:66.66666666666666%}.v-row .v-col--65{padding-left:15px;width:65%}.v-row .v-col--65:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--65{width:65%}.v-row .v-col--60{padding-left:15px;width:60%}.v-row .v-col--60:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--60{width:60%}.v-row .v-col--55{padding-left:15px;width:55%}.v-row .v-col--55:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--55{width:55%}.v-row .v-col--50{padding-left:15px;width:50%}.v-row .v-col--50:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--50{width:50%}.v-row .v-col--45{padding-left:15px;width:45%}.v-row .v-col--45:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--45{width:45%}.v-row .v-col--40{padding-left:15px;width:40%}.v-row .v-col--40:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--40{width:40%}.v-row .v-col--35{padding-left:15px;width:35%}.v-row .v-col--35:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--35{width:35%}.v-row .v-col--33{padding-left:15px;width:33.333333333333336%}.v-row .v-col--33:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--33{width:33.333333333333336%}.v-row .v-col--30{padding-left:15px;width:30%}.v-row .v-col--30:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--30{width:30%}.v-row .v-col--25{padding-left:15px;width:25%}.v-row .v-col--25:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--25{width:25%}.v-row .v-col--20{padding-left:15px;width:20%}.v-row .v-col--20:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--20{width:20%}.v-row .v-col--15{padding-left:15px;width:15%}.v-row .v-col--15:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--15{width:15%}.v-row .v-col--10{padding-left:15px;width:10%}.v-row .v-col--10:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--10{width:10%}.v-row .v-col--5{padding-left:15px;width:5%}.v-row .v-col--5:last-child{padding-left:0}.v-row.v-row--no-gutter .v-col--5{width:5%}.v-row .v-col--auto:last-child,.v-row .v-col--auto:last-child~.v-col--auto{width:100%/1;width:100%}.v-row.v-row--no-gutter .v-col--auto:last-child,.v-row.v-row--no-gutter .v-col--auto:last-child~.v-col--auto{width:100%/1}.v-row .v-col--auto:nth-last-child(2),.v-row .v-col--auto:nth-last-child(2)~.v-col--auto{width:100%/2;width:calc(50% - 7.5px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(2),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(2)~.v-col--auto{width:100%/2}.v-row .v-col--auto:nth-last-child(3),.v-row .v-col--auto:nth-last-child(3)~.v-col--auto{width:100%/3;width:calc(33.33333% - 10px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(3),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(3)~.v-col--auto{width:100%/3}.v-row .v-col--auto:nth-last-child(4),.v-row .v-col--auto:nth-last-child(4)~.v-col--auto{width:100%/4;width:calc(25% - 11.25px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(4),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(4)~.v-col--auto{width:100%/4}.v-row .v-col--auto:nth-last-child(5),.v-row .v-col--auto:nth-last-child(5)~.v-col--auto{width:100%/5;width:calc(20% - 12px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(5),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(5)~.v-col--auto{width:100%/5}.v-row .v-col--auto:nth-last-child(6),.v-row .v-col--auto:nth-last-child(6)~.v-col--auto{width:100%/6;width:calc(16.66667% - 12.5px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(6),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(6)~.v-col--auto{width:100%/6}.v-row .v-col--auto:nth-last-child(7),.v-row .v-col--auto:nth-last-child(7)~.v-col--auto{width:100%/7;width:calc(14.28571% - 12.85714px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(7),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(7)~.v-col--auto{width:100%/7}.v-row .v-col--auto:nth-last-child(8),.v-row .v-col--auto:nth-last-child(8)~.v-col--auto{width:100%/8;width:calc(12.5% - 13.125px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(8),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(8)~.v-col--auto{width:100%/8}.v-row .v-col--auto:nth-last-child(9),.v-row .v-col--auto:nth-last-child(9)~.v-col--auto{width:100%/9;width:calc(11.11111% - 13.33333px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(9),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(9)~.v-col--auto{width:100%/9}.v-row .v-col--auto:nth-last-child(10),.v-row .v-col--auto:nth-last-child(10)~.v-col--auto{width:100%/10;width:calc(10% - 13.5px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(10),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(10)~.v-col--auto{width:100%/10}.v-row .v-col--auto:nth-last-child(11),.v-row .v-col--auto:nth-last-child(11)~.v-col--auto{width:100%/11;width:calc(9.09091% - 13.63636px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(11),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(11)~.v-col--auto{width:100%/11}.v-row .v-col--auto:nth-last-child(12),.v-row .v-col--auto:nth-last-child(12)~.v-col--auto{width:100%/12;width:calc(8.33333% - 13.75px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(12),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(12)~.v-col--auto{width:100%/12}.v-row .v-col--auto:nth-last-child(13),.v-row .v-col--auto:nth-last-child(13)~.v-col--auto{width:100%/13;width:calc(7.69231% - 13.84615px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(13),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(13)~.v-col--auto{width:100%/13}.v-row .v-col--auto:nth-last-child(14),.v-row .v-col--auto:nth-last-child(14)~.v-col--auto{width:100%/14;width:calc(7.14286% - 13.92857px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(14),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(14)~.v-col--auto{width:100%/14}.v-row .v-col--auto:nth-last-child(15),.v-row .v-col--auto:nth-last-child(15)~.v-col--auto{width:100%/15;width:calc(6.66667% - 14px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(15),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(15)~.v-col--auto{width:100%/15}.v-row .v-col--auto:nth-last-child(16),.v-row .v-col--auto:nth-last-child(16)~.v-col--auto{width:100%/16;width:calc(6.25% - 14.0625px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(16),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(16)~.v-col--auto{width:100%/16}.v-row .v-col--auto:nth-last-child(17),.v-row .v-col--auto:nth-last-child(17)~.v-col--auto{width:100%/17;width:calc(5.88235% - 14.11765px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(17),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(17)~.v-col--auto{width:100%/17}.v-row .v-col--auto:nth-last-child(18),.v-row .v-col--auto:nth-last-child(18)~.v-col--auto{width:100%/18;width:calc(5.55556% - 14.16667px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(18),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(18)~.v-col--auto{width:100%/18}.v-row .v-col--auto:nth-last-child(19),.v-row .v-col--auto:nth-last-child(19)~.v-col--auto{width:100%/19;width:calc(5.26316% - 14.21053px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(19),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(19)~.v-col--auto{width:100%/19}.v-row .v-col--auto:nth-last-child(20),.v-row .v-col--auto:nth-last-child(20)~.v-col--auto{width:100%/20;width:calc(5% - 14.25px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(20),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(20)~.v-col--auto{width:100%/20}.v-row .v-col--auto:nth-last-child(21),.v-row .v-col--auto:nth-last-child(21)~.v-col--auto{width:100%/21;width:calc(4.7619% - 14.28571px)}.v-row.v-row--no-gutter .v-col--auto:nth-last-child(21),.v-row.v-row--no-gutter .v-col--auto:nth-last-child(21)~.v-col--auto{width:100%/21}.default-theme.splitpanes .splitpanes__splitter{border-right:none}.splitpanes.default-theme .splitpanes__pane{background-color:transparent} /*! elementor - v3.26.0 - 22-12-2024 */ "use strict"; (self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["frontend"],{ /***/ "../assets/dev/js/frontend/documents-manager.js": /*!******************************************************!*\ !*** ../assets/dev/js/frontend/documents-manager.js ***! \******************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _document = _interopRequireDefault(__webpack_require__(/*! ./document */ "../assets/dev/js/frontend/document.js")); class _default extends elementorModules.ViewModule { constructor() { super(...arguments); this.documents = {}; this.initDocumentClasses(); this.attachDocumentsClasses(); } getDefaultSettings() { return { selectors: { document: '.elementor' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { $documents: jQuery(selectors.document) }; } initDocumentClasses() { this.documentClasses = { base: _document.default }; elementorFrontend.hooks.doAction('elementor/frontend/documents-manager/init-classes', this); } addDocumentClass(documentType, documentClass) { this.documentClasses[documentType] = documentClass; } attachDocumentsClasses() { this.elements.$documents.each((index, document) => this.attachDocumentClass(jQuery(document))); } attachDocumentClass($document) { const documentData = $document.data(), documentID = documentData.elementorId, documentType = documentData.elementorType, DocumentClass = this.documentClasses[documentType] || this.documentClasses.base; this.documents[documentID] = new DocumentClass({ $element: $document, id: documentID }); } } exports["default"] = _default; /***/ }), /***/ "../assets/dev/js/frontend/elements-handlers-manager.js": /*!**************************************************************!*\ !*** ../assets/dev/js/frontend/elements-handlers-manager.js ***! \**************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); __webpack_require__(/*! core-js/modules/es.array.push.js */ "../node_modules/core-js/modules/es.array.push.js"); var _global = _interopRequireDefault(__webpack_require__(/*! ./handlers/global */ "../assets/dev/js/frontend/handlers/global.js")); var _background = _interopRequireDefault(__webpack_require__(/*! ./handlers/background */ "../assets/dev/js/frontend/handlers/background.js")); var _container = _interopRequireDefault(__webpack_require__(/*! ./handlers/container/container */ "../assets/dev/js/frontend/handlers/container/container.js")); var _column = _interopRequireDefault(__webpack_require__(/*! ./handlers/column */ "../assets/dev/js/frontend/handlers/column.js")); var _handlesPosition = _interopRequireDefault(__webpack_require__(/*! ./handlers/section/handles-position */ "../assets/dev/js/frontend/handlers/section/handles-position.js")); var _stretchedSection = _interopRequireDefault(__webpack_require__(/*! ./handlers/section/stretched-section */ "../assets/dev/js/frontend/handlers/section/stretched-section.js")); var _shapes = _interopRequireDefault(__webpack_require__(/*! ./handlers/section/shapes */ "../assets/dev/js/frontend/handlers/section/shapes.js")); // Section handlers. /* global elementorFrontendConfig */ module.exports = function ($) { var _this = this; const handlersInstances = {}; this.elementsHandlers = { 'accordion.default': () => __webpack_require__.e(/*! import() | accordion */ "accordion").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/accordion */ "../assets/dev/js/frontend/handlers/accordion.js")), 'alert.default': () => __webpack_require__.e(/*! import() | alert */ "alert").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/alert */ "../assets/dev/js/frontend/handlers/alert.js")), 'counter.default': () => __webpack_require__.e(/*! import() | counter */ "counter").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/counter */ "../assets/dev/js/frontend/handlers/counter.js")), 'progress.default': () => __webpack_require__.e(/*! import() | progress */ "progress").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/progress */ "../assets/dev/js/frontend/handlers/progress.js")), 'tabs.default': () => __webpack_require__.e(/*! import() | tabs */ "tabs").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/tabs */ "../assets/dev/js/frontend/handlers/tabs.js")), 'toggle.default': () => __webpack_require__.e(/*! import() | toggle */ "toggle").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/toggle */ "../assets/dev/js/frontend/handlers/toggle.js")), 'video.default': () => __webpack_require__.e(/*! import() | video */ "video").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/video */ "../assets/dev/js/frontend/handlers/video.js")), '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")), '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")), '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")) }; if (elementorFrontendConfig.experimentalFeatures['nested-elements']) { 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")); } if (elementorFrontendConfig.experimentalFeatures['nested-elements']) { this.elementsHandlers['nested-accordion.default'] = () => __webpack_require__.e(/*! import() | nested-accordion */ "nested-accordion").then(__webpack_require__.bind(__webpack_require__, /*! elementor/modules/nested-accordion/assets/js/frontend/handlers/nested-accordion */ "../modules/nested-accordion/assets/js/frontend/handlers/nested-accordion.js")); } if (elementorFrontendConfig.experimentalFeatures.container) { this.elementsHandlers['contact-buttons.default'] = () => __webpack_require__.e(/*! import() | contact-buttons */ "contact-buttons").then(__webpack_require__.bind(__webpack_require__, /*! elementor/modules/floating-buttons/assets/js/floating-buttons/frontend/handlers/contact-buttons */ "../modules/floating-buttons/assets/js/floating-buttons/frontend/handlers/contact-buttons.js")); this.elementsHandlers['floating-bars-var-1.default'] = () => __webpack_require__.e(/*! import() | floating-bars */ "floating-bars").then(__webpack_require__.bind(__webpack_require__, /*! elementor/modules/floating-buttons/assets/js/floating-bars/frontend/handlers/floating-bars */ "../modules/floating-buttons/assets/js/floating-bars/frontend/handlers/floating-bars.js")); } const addGlobalHandlers = () => elementorFrontend.hooks.addAction('frontend/element_ready/global', _global.default); const addElementsHandlers = () => { this.elementsHandlers.section = [_stretchedSection.default, // Must run before background handlers to init the slideshow only after the stretch. ..._background.default, _handlesPosition.default, _shapes.default]; this.elementsHandlers.container = [..._background.default]; // Add editor-only handlers. if (elementorFrontend.isEditMode()) { this.elementsHandlers.container.push(..._container.default); } this.elementsHandlers.column = _column.default; $.each(this.elementsHandlers, (elementName, Handlers) => { const elementData = elementName.split('.'); elementName = elementData[0]; const skin = elementData[1] || null; this.attachHandler(elementName, Handlers, skin); }); }; const isClassHandler = Handler => Handler.prototype?.getUniqueHandlerID; const addHandlerWithHook = function (elementBaseName, Handler) { let skin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'default'; skin = skin ? '.' + skin : ''; const elementName = elementBaseName + skin; elementorFrontend.hooks.addAction(`frontend/element_ready/${elementName}`, $element => { if (isClassHandler(Handler)) { _this.addHandler(Handler, { $element, elementName }, true); } else { const handlerValue = Handler(); if (!handlerValue) { return; } if (handlerValue instanceof Promise) { handlerValue.then(_ref => { let { default: dynamicHandler } = _ref; _this.addHandler(dynamicHandler, { $element, elementName }, true); }); } else { _this.addHandler(handlerValue, { $element, elementName }, true); } } }); }; this.addHandler = function (HandlerClass, options) { const elementID = options.$element.data('model-cid'); let handlerID; // If element is in edit mode if (elementID) { handlerID = HandlerClass.prototype.getConstructorID(); if (!handlersInstances[elementID]) { handlersInstances[elementID] = {}; } const oldHandler = handlersInstances[elementID][handlerID]; if (oldHandler) { oldHandler.onDestroy(); } } const newHandler = new HandlerClass(options); elementorFrontend.hooks.doAction(`frontend/element_handler_ready/${options.elementName}`, options.$element, $); if (elementID) { handlersInstances[elementID][handlerID] = newHandler; } }; this.attachHandler = (elementName, Handlers, skin) => { if (!Array.isArray(Handlers)) { Handlers = [Handlers]; } Handlers.forEach(Handler => addHandlerWithHook(elementName, Handler, skin)); }; this.getHandler = function (handlerName) { const elementHandler = this.elementsHandlers[handlerName]; if (isClassHandler(elementHandler)) { return elementHandler; } return new Promise(res => { elementHandler().then(_ref2 => { let { default: dynamicHandler } = _ref2; res(dynamicHandler); }); }); }; /** * @param {string} handlerName * @deprecated since 3.1.0, use `elementorFrontend.elementsHandler.getHandler` instead. */ this.getHandlers = function (handlerName) { elementorDevTools.deprecation.deprecated('getHandlers', '3.1.0', 'elementorFrontend.elementsHandler.getHandler'); if (handlerName) { return this.getHandler(handlerName); } return this.elementsHandlers; }; this.runReadyTrigger = function (scope) { const isDelayChildHandlers = !!scope.closest('[data-delay-child-handlers="true"]') && 0 !== scope.closest('[data-delay-child-handlers="true"]').length; if (elementorFrontend.config.is_static || isDelayChildHandlers) { return; } // Initializing the `$scope` as frontend jQuery instance const $scope = jQuery(scope), elementType = $scope.attr('data-element_type'); if (!elementType) { return; } elementorFrontend.hooks.doAction('frontend/element_ready/global', $scope, $); elementorFrontend.hooks.doAction(`frontend/element_ready/${elementType}`, $scope, $); if ('widget' === elementType) { const widgetType = $scope.attr('data-widget_type'); elementorFrontend.hooks.doAction(`frontend/element_ready/${widgetType}`, $scope, $); } }; this.init = () => { addGlobalHandlers(); addElementsHandlers(); }; }; /***/ }), /***/ "../assets/dev/js/frontend/frontend.js": /*!*********************************************!*\ !*** ../assets/dev/js/frontend/frontend.js ***! \*********************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; __webpack_require__(/*! ../public-path */ "../assets/dev/js/public-path.js"); var _documentsManager = _interopRequireDefault(__webpack_require__(/*! ./documents-manager */ "../assets/dev/js/frontend/documents-manager.js")); var _storage = _interopRequireDefault(__webpack_require__(/*! elementor-common/utils/storage */ "../core/common/assets/js/utils/storage.js")); var _environment = _interopRequireDefault(__webpack_require__(/*! elementor-common/utils/environment */ "../core/common/assets/js/utils/environment.js")); var _youtubeLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/video-api/youtube-loader */ "../assets/dev/js/frontend/utils/video-api/youtube-loader.js")); var _vimeoLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/video-api/vimeo-loader */ "../assets/dev/js/frontend/utils/video-api/vimeo-loader.js")); var _baseLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/video-api/base-loader */ "../assets/dev/js/frontend/utils/video-api/base-loader.js")); var _urlActions = _interopRequireDefault(__webpack_require__(/*! ./utils/url-actions */ "../assets/dev/js/frontend/utils/url-actions.js")); var _swiper = _interopRequireDefault(__webpack_require__(/*! ./utils/swiper */ "../assets/dev/js/frontend/utils/swiper.js")); var _lightboxManager = _interopRequireDefault(__webpack_require__(/*! ./utils/lightbox/lightbox-manager */ "../assets/dev/js/frontend/utils/lightbox/lightbox-manager.js")); var _assetsLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/assets-loader */ "../assets/dev/js/frontend/utils/assets-loader.js")); var _breakpoints = _interopRequireDefault(__webpack_require__(/*! elementor-utils/breakpoints */ "../assets/dev/js/utils/breakpoints.js")); var _events = _interopRequireDefault(__webpack_require__(/*! elementor-utils/events */ "../assets/dev/js/utils/events.js")); var _frontend = _interopRequireDefault(__webpack_require__(/*! elementor/modules/shapes/assets/js/frontend/frontend */ "../modules/shapes/assets/js/frontend/frontend.js")); var _controls = _interopRequireDefault(__webpack_require__(/*! ./utils/controls */ "../assets/dev/js/frontend/utils/controls.js")); var _anchorScrollMargin = _interopRequireDefault(__webpack_require__(/*! ./utils/anchor-scroll-margin */ "../assets/dev/js/frontend/utils/anchor-scroll-margin.js")); var _utils = __webpack_require__(/*! elementor-frontend/utils/utils */ "../assets/dev/js/frontend/utils/utils.js"); /* global elementorFrontendConfig */ const EventManager = __webpack_require__(/*! elementor-utils/hooks */ "../assets/dev/js/utils/hooks.js"), ElementsHandler = __webpack_require__(/*! elementor-frontend/elements-handlers-manager */ "../assets/dev/js/frontend/elements-handlers-manager.js"), AnchorsModule = __webpack_require__(/*! elementor-frontend/utils/anchors */ "../assets/dev/js/frontend/utils/anchors.js"); // // TODO: Remove anchors.js file in v3.27.0 [ED-15717]. class Frontend extends elementorModules.ViewModule { constructor() { super(...arguments); this.config = elementorFrontendConfig; this.config.legacyMode = { /** * @deprecated since 3.1.0 */ get elementWrappers() { if (elementorFrontend.isEditMode()) { window.top.elementorDevTools.deprecation.deprecated('elementorFrontend.config.legacyMode.elementWrappers', '3.1.0'); } return false; } }; this.populateActiveBreakpointsConfig(); } /** * @deprecated since 2.5.0, use `elementorModules.frontend.handlers.Base` instead. */ get Module() { if (this.isEditMode()) { parent.elementorDevTools.deprecation.deprecated('elementorFrontend.Module', '2.5.0', 'elementorModules.frontend.handlers.Base'); } return elementorModules.frontend.handlers.Base; } getDefaultSettings() { return { selectors: { elementor: '.elementor', adminBar: '#wpadminbar' } }; } getDefaultElements() { const defaultElements = { window, $window: jQuery(window), $document: jQuery(document), $head: jQuery(document.head), $body: jQuery(document.body), $deviceMode: jQuery('', { id: 'elementor-device-mode', class: 'elementor-screen-only' }) }; defaultElements.$body.append(defaultElements.$deviceMode); return defaultElements; } bindEvents() { this.elements.$window.on('resize', () => this.setDeviceModeData()); } /** * @param {string} elementName * @deprecated since 2.4.0, use `this.elements` instead. */ getElements(elementName) { return this.getItems(this.elements, elementName); } /** * @param {string} settingName * @deprecated since 2.4.0, this method was never in use. */ getPageSettings(settingName) { const settingsObject = this.isEditMode() ? elementor.settings.page.model.attributes : this.config.settings.page; return this.getItems(settingsObject, settingName); } /** * @param {string} settingName * @deprecated since 3.0.0, use `getKitSettings()` instead and remove the `elementor_` prefix. */ getGeneralSettings(settingName) { if (this.isEditMode()) { parent.elementorDevTools.deprecation.deprecated('getGeneralSettings()', '3.0.0', 'getKitSettings() and remove the `elementor_` prefix'); } return this.getKitSettings(`elementor_${settingName}`); } getKitSettings(settingName) { // TODO: use Data API. return this.getItems(this.config.kit, settingName); } getCurrentDeviceMode() { return getComputedStyle(this.elements.$deviceMode[0], ':after').content.replace(/"/g, ''); } getDeviceSetting(deviceMode, settings, settingKey) { // Add specific handling for widescreen since it is larger than desktop. if ('widescreen' === deviceMode) { return this.getWidescreenSetting(settings, settingKey); } const devices = elementorFrontend.breakpoints.getActiveBreakpointsList({ largeToSmall: true, withDesktop: true }); let deviceIndex = devices.indexOf(deviceMode); while (deviceIndex > 0) { const currentDevice = devices[deviceIndex], fullSettingKey = settingKey + '_' + currentDevice, deviceValue = settings[fullSettingKey]; // Accept 0 as value. if (deviceValue || 0 === deviceValue) { return deviceValue; } deviceIndex--; } return settings[settingKey]; } getWidescreenSetting(settings, settingKey) { const deviceMode = 'widescreen', widescreenSettingKey = settingKey + '_' + deviceMode; let settingToReturn; // If the device mode is 'widescreen', and the setting exists - return it. if (settings[widescreenSettingKey]) { settingToReturn = settings[widescreenSettingKey]; } else { // Otherwise, return the desktop setting settingToReturn = settings[settingKey]; } return settingToReturn; } getCurrentDeviceSetting(settings, settingKey) { return this.getDeviceSetting(elementorFrontend.getCurrentDeviceMode(), settings, settingKey); } isEditMode() { return this.config.environmentMode.edit; } isWPPreviewMode() { return this.config.environmentMode.wpPreview; } initDialogsManager() { let dialogsManager; this.getDialogsManager = () => { if (!dialogsManager) { dialogsManager = new DialogsManager.Instance(); } return dialogsManager; }; } initOnReadyComponents() { this.utils = { youtube: new _youtubeLoader.default(), vimeo: new _vimeoLoader.default(), baseVideoLoader: new _baseLoader.default(), get lightbox() { return _lightboxManager.default.getLightbox(); }, urlActions: new _urlActions.default(), swiper: _swiper.default, environment: _environment.default, assetsLoader: new _assetsLoader.default(), escapeHTML: _utils.escapeHTML, events: _events.default, controls: new _controls.default() }; // TODO: Remove experiment in v3.27.0 [ED-15717]. if (this.config.experimentalFeatures.e_css_smooth_scroll) { this.utils.anchor_scroll_margin = new _anchorScrollMargin.default(); } else { this.utils.anchors = new AnchorsModule(); } // TODO: BC since 2.4.0 this.modules = { StretchElement: elementorModules.frontend.tools.StretchElement, Masonry: elementorModules.utils.Masonry }; this.elementsHandler.init(); if (this.isEditMode()) { elementor.once('document:loaded', () => this.onDocumentLoaded()); } else { this.onDocumentLoaded(); } } initOnReadyElements() { this.elements.$wpAdminBar = this.elements.$document.find(this.getSettings('selectors.adminBar')); } addUserAgentClasses() { for (const [key, value] of Object.entries(_environment.default)) { if (value) { this.elements.$body.addClass('e--ua-' + key); } } } setDeviceModeData() { this.elements.$body.attr('data-elementor-device-mode', this.getCurrentDeviceMode()); } addListenerOnce(listenerID, event, callback, to) { if (!to) { to = this.elements.$window; } if (!this.isEditMode()) { to.on(event, callback); return; } this.removeListeners(listenerID, event, to); if (to instanceof jQuery) { const eventNS = event + '.' + listenerID; to.on(eventNS, callback); } else { to.on(event, callback, listenerID); } } removeListeners(listenerID, event, callback, from) { if (!from) { from = this.elements.$window; } if (from instanceof jQuery) { const eventNS = event + '.' + listenerID; from.off(eventNS, callback); } else { from.off(event, callback, listenerID); } } // Based on underscore function debounce(func, wait) { let timeout; return function () { const context = this, args = arguments; const later = () => { timeout = null; func.apply(context, args); }; const callNow = !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) { func.apply(context, args); } }; } muteMigrationTraces() { jQuery.migrateMute = true; jQuery.migrateTrace = false; } /** * Initialize the modules' widgets handlers. */ initModules() { const handlers = { shapes: _frontend.default }; // TODO: BC - Deprecated since 3.5.0 elementorFrontend.trigger('elementor/modules/init:before'); // TODO: Use this instead. elementorFrontend.trigger('elementor/modules/init/before'); Object.entries(handlers).forEach(_ref => { let [moduleName, ModuleClass] = _ref; this.modulesHandlers[moduleName] = new ModuleClass(); }); } populateActiveBreakpointsConfig() { this.config.responsive.activeBreakpoints = {}; Object.entries(this.config.responsive.breakpoints).forEach(_ref2 => { let [breakpointKey, breakpointData] = _ref2; if (breakpointData.is_enabled) { this.config.responsive.activeBreakpoints[breakpointKey] = breakpointData; } }); } init() { this.hooks = new EventManager(); this.breakpoints = new _breakpoints.default(this.config.responsive); this.storage = new _storage.default(); this.elementsHandler = new ElementsHandler(jQuery); this.modulesHandlers = {}; this.addUserAgentClasses(); this.setDeviceModeData(); this.initDialogsManager(); if (this.isEditMode()) { this.muteMigrationTraces(); } // Keep this line before `initOnReadyComponents` call _events.default.dispatch(this.elements.$window, 'elementor/frontend/init'); this.initModules(); this.initOnReadyElements(); this.initOnReadyComponents(); } onDocumentLoaded() { this.documentsManager = new _documentsManager.default(); this.trigger('components:init'); new _lightboxManager.default(); } } exports["default"] = Frontend; window.elementorFrontend = new Frontend(); if (!elementorFrontend.isEditMode()) { jQuery(() => elementorFrontend.init()); } /***/ }), /***/ "../assets/dev/js/frontend/handlers/background-slideshow.js": /*!******************************************************************!*\ !*** ../assets/dev/js/frontend/handlers/background-slideshow.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class BackgroundSlideshow extends elementorModules.frontend.handlers.SwiperBase { getDefaultSettings() { return { classes: { swiperContainer: 'elementor-background-slideshow swiper', swiperWrapper: 'swiper-wrapper', swiperSlide: 'elementor-background-slideshow__slide swiper-slide', swiperPreloader: 'swiper-lazy-preloader', slideBackground: 'elementor-background-slideshow__slide__image', kenBurns: 'elementor-ken-burns', kenBurnsActive: 'elementor-ken-burns--active', kenBurnsIn: 'elementor-ken-burns--in', kenBurnsOut: 'elementor-ken-burns--out' } }; } getSwiperOptions() { const elementSettings = this.getElementSettings(), swiperOptions = { grabCursor: false, slidesPerView: 1, slidesPerGroup: 1, loop: 'yes' === elementSettings.background_slideshow_loop, speed: elementSettings.background_slideshow_transition_duration, autoplay: { delay: elementSettings.background_slideshow_slide_duration, stopOnLastSlide: !elementSettings.background_slideshow_loop }, handleElementorBreakpoints: true, on: { slideChange: () => { if (elementSettings.background_slideshow_ken_burns) { this.handleKenBurns(); } } } }; if ('yes' === elementSettings.background_slideshow_loop) { swiperOptions.loopedSlides = this.getSlidesCount(); } switch (elementSettings.background_slideshow_slide_transition) { case 'fade': swiperOptions.effect = 'fade'; swiperOptions.fadeEffect = { crossFade: true }; break; case 'slide_down': swiperOptions.autoplay.reverseDirection = true; swiperOptions.direction = 'vertical'; break; case 'slide_up': swiperOptions.direction = 'vertical'; break; } if ('yes' === elementSettings.background_slideshow_lazyload) { swiperOptions.lazy = { loadPrevNext: true, loadPrevNextAmount: 1 }; } return swiperOptions; } buildSwiperElements() { const classes = this.getSettings('classes'), elementSettings = this.getElementSettings(), direction = 'slide_left' === elementSettings.background_slideshow_slide_transition ? 'ltr' : 'rtl', $container = jQuery('
', { class: classes.swiperContainer, dir: direction }), $wrapper = jQuery('
', { class: classes.swiperWrapper }), kenBurnsActive = elementSettings.background_slideshow_ken_burns, lazyload = 'yes' === elementSettings.background_slideshow_lazyload; let slideInnerClass = classes.slideBackground; if (kenBurnsActive) { slideInnerClass += ' ' + classes.kenBurns; const kenBurnsDirection = 'in' === elementSettings.background_slideshow_ken_burns_zoom_direction ? 'kenBurnsIn' : 'kenBurnsOut'; slideInnerClass += ' ' + classes[kenBurnsDirection]; } if (lazyload) { slideInnerClass += ' swiper-lazy'; } this.elements.$slides = jQuery(); elementSettings.background_slideshow_gallery.forEach(slide => { const $slide = jQuery('
', { class: classes.swiperSlide }); let $slidebg; if (lazyload) { const $slideloader = jQuery('
', { class: classes.swiperPreloader }); $slidebg = jQuery('
', { class: slideInnerClass, 'data-background': slide.url }); $slidebg.append($slideloader); } else { $slidebg = jQuery('
', { class: slideInnerClass, style: 'background-image: url("' + slide.url + '");' }); } $slide.append($slidebg); $wrapper.append($slide); this.elements.$slides = this.elements.$slides.add($slide); }); $container.append($wrapper); this.$element.prepend($container); this.elements.$backgroundSlideShowContainer = $container; } async initSlider() { if (1 >= this.getSlidesCount()) { return; } const elementSettings = this.getElementSettings(); const Swiper = elementorFrontend.utils.swiper; this.swiper = await new Swiper(this.elements.$backgroundSlideShowContainer, this.getSwiperOptions()); // Expose the swiper instance in the frontend this.elements.$backgroundSlideShowContainer.data('swiper', this.swiper); if (elementSettings.background_slideshow_ken_burns) { this.handleKenBurns(); } } activate() { this.buildSwiperElements(); this.initSlider(); } deactivate() { if (this.swiper) { this.swiper.destroy(); this.elements.$backgroundSlideShowContainer.remove(); } } run() { if ('slideshow' === this.getElementSettings('background_background')) { this.activate(); } else { this.deactivate(); } } onInit() { super.onInit(); if (this.getElementSettings('background_slideshow_gallery')) { this.run(); } } onDestroy() { super.onDestroy(); this.deactivate(); } onElementChange(propertyName) { if ('background_background' === propertyName) { this.run(); } } } exports["default"] = BackgroundSlideshow; /***/ }), /***/ "../assets/dev/js/frontend/handlers/background-video.js": /*!**************************************************************!*\ !*** ../assets/dev/js/frontend/handlers/background-video.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class BackgroundVideo extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { backgroundVideoContainer: '.elementor-background-video-container', backgroundVideoEmbed: '.elementor-background-video-embed', backgroundVideoHosted: '.elementor-background-video-hosted' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'), elements = { $backgroundVideoContainer: this.$element.find(selectors.backgroundVideoContainer) }; elements.$backgroundVideoEmbed = elements.$backgroundVideoContainer.children(selectors.backgroundVideoEmbed); elements.$backgroundVideoHosted = elements.$backgroundVideoContainer.children(selectors.backgroundVideoHosted); return elements; } calcVideosSize($video) { let aspectRatioSetting = '16:9'; if ('vimeo' === this.videoType) { aspectRatioSetting = $video[0].width + ':' + $video[0].height; } const containerWidth = this.elements.$backgroundVideoContainer.outerWidth(), containerHeight = this.elements.$backgroundVideoContainer.outerHeight(), aspectRatioArray = aspectRatioSetting.split(':'), aspectRatio = aspectRatioArray[0] / aspectRatioArray[1], ratioWidth = containerWidth / aspectRatio, ratioHeight = containerHeight * aspectRatio, isWidthFixed = containerWidth / containerHeight > aspectRatio; return { width: isWidthFixed ? containerWidth : ratioHeight, height: isWidthFixed ? ratioWidth : containerHeight }; } changeVideoSize() { if (!('hosted' === this.videoType) && !this.player) { return; } let $video; if ('youtube' === this.videoType) { $video = jQuery(this.player.getIframe()); } else if ('vimeo' === this.videoType) { $video = jQuery(this.player.element); } else if ('hosted' === this.videoType) { $video = this.elements.$backgroundVideoHosted; } if (!$video) { return; } const size = this.calcVideosSize($video); $video.width(size.width).height(size.height); } startVideoLoop(firstTime) { // If the section has been removed if (!this.player.getIframe().contentWindow) { return; } const elementSettings = this.getElementSettings(), startPoint = elementSettings.background_video_start || 0, endPoint = elementSettings.background_video_end; if (elementSettings.background_play_once && !firstTime) { this.player.stopVideo(); return; } this.player.seekTo(startPoint); if (endPoint) { const durationToEnd = endPoint - startPoint + 1; setTimeout(() => { this.startVideoLoop(false); }, durationToEnd * 1000); } } prepareVimeoVideo(Vimeo, videoLink) { const elementSettings = this.getElementSettings(), videoSize = this.elements.$backgroundVideoContainer.outerWidth(), vimeoOptions = { url: videoLink, width: videoSize.width, autoplay: true, loop: !elementSettings.background_play_once, transparent: true, background: true, muted: true }; if (elementSettings.background_privacy_mode) { vimeoOptions.dnt = true; } this.player = new Vimeo.Player(this.elements.$backgroundVideoContainer, vimeoOptions); // Handle user-defined start/end times this.handleVimeoStartEndTimes(elementSettings); this.player.ready().then(() => { jQuery(this.player.element).addClass('elementor-background-video-embed'); this.changeVideoSize(); }); } handleVimeoStartEndTimes(elementSettings) { // If a start time is defined, set the start time if (elementSettings.background_video_start) { this.player.on('play', data => { if (0 === data.seconds) { this.player.setCurrentTime(elementSettings.background_video_start); } }); } this.player.on('timeupdate', data => { // If an end time is defined, handle ending the video if (elementSettings.background_video_end && elementSettings.background_video_end < data.seconds) { if (elementSettings.background_play_once) { // Stop at user-defined end time if not loop this.player.pause(); } else { // Go to start time if loop this.player.setCurrentTime(elementSettings.background_video_start); } } // If start time is defined but an end time is not, go to user-defined start time at video end. // Vimeo JS API has an 'ended' event, but it never fires when infinite loop is defined, so we // get the video duration (returns a promise) then use duration-0.5s as end time this.player.getDuration().then(duration => { if (elementSettings.background_video_start && !elementSettings.background_video_end && data.seconds > duration - 0.5) { this.player.setCurrentTime(elementSettings.background_video_start); } }); }); } prepareYTVideo(YT, videoID) { const $backgroundVideoContainer = this.elements.$backgroundVideoContainer, elementSettings = this.getElementSettings(); let startStateCode = YT.PlayerState.PLAYING; // Since version 67, Chrome doesn't fire the `PLAYING` state at start time if (window.chrome) { startStateCode = YT.PlayerState.UNSTARTED; } const playerOptions = { videoId: videoID, events: { onReady: () => { this.player.mute(); this.changeVideoSize(); this.startVideoLoop(true); this.player.playVideo(); }, onStateChange: event => { switch (event.data) { case startStateCode: $backgroundVideoContainer.removeClass('elementor-invisible elementor-loading'); break; case YT.PlayerState.ENDED: if ('function' === typeof this.player.seekTo) { this.player.seekTo(elementSettings.background_video_start || 0); } if (elementSettings.background_play_once) { this.player.destroy(); } } } }, playerVars: { controls: 0, rel: 0, playsinline: 1 } }; // To handle CORS issues, when the default host is changed, the origin parameter has to be set. if (elementSettings.background_privacy_mode) { playerOptions.host = 'https://www.youtube-nocookie.com'; playerOptions.origin = window.location.hostname; } $backgroundVideoContainer.addClass('elementor-loading elementor-invisible'); this.player = new YT.Player(this.elements.$backgroundVideoEmbed[0], playerOptions); } activate() { let videoLink = this.getElementSettings('background_video_link'), videoID; const playOnce = this.getElementSettings('background_play_once'); if (-1 !== videoLink.indexOf('vimeo.com')) { this.videoType = 'vimeo'; this.apiProvider = elementorFrontend.utils.vimeo; } else if (videoLink.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com)/)) { this.videoType = 'youtube'; this.apiProvider = elementorFrontend.utils.youtube; } if (this.apiProvider) { videoID = this.apiProvider.getVideoIDFromURL(videoLink); this.apiProvider.onApiReady(apiObject => { if ('youtube' === this.videoType) { this.prepareYTVideo(apiObject, videoID); } if ('vimeo' === this.videoType) { this.prepareVimeoVideo(apiObject, videoLink); } }); } else { this.videoType = 'hosted'; const startTime = this.getElementSettings('background_video_start'), endTime = this.getElementSettings('background_video_end'); if (startTime || endTime) { videoLink += '#t=' + (startTime || 0) + (endTime ? ',' + endTime : ''); } this.elements.$backgroundVideoHosted.attr('src', videoLink).one('canplay', this.changeVideoSize.bind(this)); if (playOnce) { this.elements.$backgroundVideoHosted.on('ended', () => { this.elements.$backgroundVideoHosted.hide(); }); } } elementorFrontend.elements.$window.on('resize elementor/bg-video/recalc', this.changeVideoSize); } deactivate() { if ('youtube' === this.videoType && this.player.getIframe() || 'vimeo' === this.videoType) { this.player.destroy(); } else { this.elements.$backgroundVideoHosted.removeAttr('src').off('ended'); } elementorFrontend.elements.$window.off('resize', this.changeVideoSize); } run() { const elementSettings = this.getElementSettings(); if (!elementSettings.background_play_on_mobile && 'mobile' === elementorFrontend.getCurrentDeviceMode()) { return; } if ('video' === elementSettings.background_background && elementSettings.background_video_link) { this.activate(); } else { this.deactivate(); } } onInit() { super.onInit(...arguments); this.changeVideoSize = this.changeVideoSize.bind(this); this.run(); } onElementChange(propertyName) { if ('background_background' === propertyName) { this.run(); } } } exports["default"] = BackgroundVideo; /***/ }), /***/ "../assets/dev/js/frontend/handlers/background.js": /*!********************************************************!*\ !*** ../assets/dev/js/frontend/handlers/background.js ***! \********************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _backgroundSlideshow = _interopRequireDefault(__webpack_require__(/*! ./background-slideshow */ "../assets/dev/js/frontend/handlers/background-slideshow.js")); var _backgroundVideo = _interopRequireDefault(__webpack_require__(/*! ./background-video */ "../assets/dev/js/frontend/handlers/background-video.js")); var _default = exports["default"] = [_backgroundSlideshow.default, _backgroundVideo.default]; /***/ }), /***/ "../assets/dev/js/frontend/handlers/column.js": /*!****************************************************!*\ !*** ../assets/dev/js/frontend/handlers/column.js ***! \****************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _backgroundSlideshow = _interopRequireDefault(__webpack_require__(/*! ./background-slideshow */ "../assets/dev/js/frontend/handlers/background-slideshow.js")); var _default = exports["default"] = [_backgroundSlideshow.default]; /***/ }), /***/ "../assets/dev/js/frontend/handlers/container/container.js": /*!*****************************************************************!*\ !*** ../assets/dev/js/frontend/handlers/container/container.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _default = exports["default"] = [() => __webpack_require__.e(/*! import() | container */ "container").then(__webpack_require__.bind(__webpack_require__, /*! ./handles-position */ "../assets/dev/js/frontend/handlers/container/handles-position.js")), () => __webpack_require__.e(/*! import() | container */ "container").then(__webpack_require__.bind(__webpack_require__, /*! ./shapes */ "../assets/dev/js/frontend/handlers/container/shapes.js")), () => __webpack_require__.e(/*! import() | container */ "container").then(__webpack_require__.bind(__webpack_require__, /*! ./grid-container */ "../assets/dev/js/frontend/handlers/container/grid-container.js"))]; /***/ }), /***/ "../assets/dev/js/frontend/handlers/global.js": /*!****************************************************!*\ !*** ../assets/dev/js/frontend/handlers/global.js ***! \****************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class GlobalHandler extends elementorModules.frontend.handlers.Base { getWidgetType() { return 'global'; } animate() { const $element = this.$element, animation = this.getAnimation(); if ('none' === animation) { $element.removeClass('elementor-invisible'); return; } const elementSettings = this.getElementSettings(), animationDelay = elementSettings._animation_delay || elementSettings.animation_delay || 0; $element.removeClass(animation); if (this.currentAnimation) { $element.removeClass(this.currentAnimation); } this.currentAnimation = animation; setTimeout(() => { $element.removeClass('elementor-invisible').addClass('animated ' + animation); }, animationDelay); } getAnimation() { return this.getCurrentDeviceSetting('animation') || this.getCurrentDeviceSetting('_animation'); } onInit() { super.onInit(...arguments); if (this.getAnimation()) { const observer = elementorModules.utils.Scroll.scrollObserver({ callback: event => { if (event.isInViewport) { this.animate(); observer.unobserve(this.$element[0]); } } }); observer.observe(this.$element[0]); } } onElementChange(propertyName) { if (/^_?animation/.test(propertyName)) { this.animate(); } } } var _default = $scope => { elementorFrontend.elementsHandler.addHandler(GlobalHandler, { $element: $scope }); }; exports["default"] = _default; /***/ }), /***/ "../assets/dev/js/frontend/handlers/section/handles-position.js": /*!**********************************************************************!*\ !*** ../assets/dev/js/frontend/handlers/section/handles-position.js ***! \**********************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class HandlesPosition extends elementorModules.frontend.handlers.Base { isActive() { return elementorFrontend.isEditMode(); } isFirstSection() { return this.$element[0] === document.querySelector('.elementor-edit-mode .elementor-top-section'); } isOverflowHidden() { return 'hidden' === this.$element.css('overflow'); } getOffset() { if ('body' === elementor.config.document.container) { return this.$element.offset().top; } const $container = jQuery(elementor.config.document.container); return this.$element.offset().top - $container.offset().top; } setHandlesPosition() { const document = elementor.documents.getCurrent(); if (!document || !document.container.isEditable()) { return; } const insideHandleClass = 'elementor-section--handles-inside'; if (elementor.settings.page.model.attributes.scroll_snap) { this.$element.addClass(insideHandleClass); return; } const isOverflowHidden = this.isOverflowHidden(); if (!isOverflowHidden && !this.isFirstSection()) { return; } const offset = isOverflowHidden ? 0 : this.getOffset(); if (offset < 25) { this.$element.addClass(insideHandleClass); const $handlesElement = this.$element.find('> .elementor-element-overlay > .elementor-editor-section-settings'); if (offset < -5) { $handlesElement.css('top', -offset); } else { $handlesElement.css('top', ''); } } else { this.$element.removeClass(insideHandleClass); } } onInit() { if (!this.isActive()) { return; } this.setHandlesPosition(); this.$element.on('mouseenter', this.setHandlesPosition.bind(this)); } } exports["default"] = HandlesPosition; /***/ }), /***/ "../assets/dev/js/frontend/handlers/section/shapes.js": /*!************************************************************!*\ !*** ../assets/dev/js/frontend/handlers/section/shapes.js ***! \************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class Shapes extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { container: '> .elementor-shape-%s' }, svgURL: elementorFrontend.config.urls.assets + 'shapes/' }; } getDefaultElements() { const elements = {}, selectors = this.getSettings('selectors'); elements.$topContainer = this.$element.find(selectors.container.replace('%s', 'top')); elements.$bottomContainer = this.$element.find(selectors.container.replace('%s', 'bottom')); return elements; } isActive() { return elementorFrontend.isEditMode(); } getSvgURL(shapeType, fileName) { let svgURL = this.getSettings('svgURL') + fileName + '.svg'; if (elementor.config.additional_shapes && shapeType in elementor.config.additional_shapes) { svgURL = elementor.config.additional_shapes[shapeType]; if (-1 < fileName.indexOf('-negative')) { svgURL = svgURL.replace('.svg', '-negative.svg'); } } return svgURL; } buildSVG(side) { const baseSettingKey = 'shape_divider_' + side, shapeType = this.getElementSettings(baseSettingKey), $svgContainer = this.elements['$' + side + 'Container']; $svgContainer.attr('data-shape', shapeType); if (!shapeType) { $svgContainer.empty(); // Shape-divider set to 'none' return; } let fileName = shapeType; if (this.getElementSettings(baseSettingKey + '_negative')) { fileName += '-negative'; } const svgURL = this.getSvgURL(shapeType, fileName); jQuery.get(svgURL, data => { $svgContainer.empty().append(data.childNodes[0]); }); this.setNegative(side); } setNegative(side) { this.elements['$' + side + 'Container'].attr('data-negative', !!this.getElementSettings('shape_divider_' + side + '_negative')); } onInit() { if (!this.isActive(this.getSettings())) { return; } super.onInit(...arguments); ['top', 'bottom'].forEach(side => { if (this.getElementSettings('shape_divider_' + side)) { this.buildSVG(side); } }); } onElementChange(propertyName) { const shapeChange = propertyName.match(/^shape_divider_(top|bottom)$/); if (shapeChange) { this.buildSVG(shapeChange[1]); return; } const negativeChange = propertyName.match(/^shape_divider_(top|bottom)_negative$/); if (negativeChange) { this.buildSVG(negativeChange[1]); this.setNegative(negativeChange[1]); } } } exports["default"] = Shapes; /***/ }), /***/ "../assets/dev/js/frontend/handlers/section/stretched-section.js": /*!***********************************************************************!*\ !*** ../assets/dev/js/frontend/handlers/section/stretched-section.js ***! \***********************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class StretchedSection extends elementorModules.frontend.handlers.StretchedElement { getStretchedClass() { return 'elementor-section-stretched'; } getStretchSettingName() { return 'stretch_section'; } getStretchActiveValue() { return 'section-stretched'; } } exports["default"] = StretchedSection; /***/ }), /***/ "../assets/dev/js/frontend/utils/anchor-scroll-margin.js": /*!***************************************************************!*\ !*** ../assets/dev/js/frontend/utils/anchor-scroll-margin.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; __webpack_require__(/*! core-js/modules/es.array.push.js */ "../node_modules/core-js/modules/es.array.push.js"); class _default extends elementorModules.ViewModule { getDefaultSettings() { return { selectors: { links: '.elementor-element a[href*="#"]', stickyElements: '.elementor-element.elementor-sticky' } }; } onInit() { this.observeStickyElements(() => { this.initializeStickyAndAnchorTracking(); }); } observeStickyElements(callback) { const observer = new MutationObserver(mutationsList => { for (const mutation of mutationsList) { if ('childList' === mutation.type || 'attributes' === mutation.type && mutation.target.classList.contains('elementor-sticky')) { callback(); } } }); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['class', 'style'] }); } initializeStickyAndAnchorTracking() { const anchorLinks = this.getAllAnchorLinks(); const stickyElements = this.getAllStickyElements(); const trackedElements = []; if (!stickyElements.length > 0 && !anchorLinks.length > 0) { return; } this.trackStickyElements(stickyElements, trackedElements); this.trackAnchorLinks(anchorLinks, trackedElements); this.organizeStickyAndAnchors(trackedElements); } trackAnchorLinks(anchorLinks, trackedElements) { anchorLinks.forEach(element => { const target = this.getAnchorTarget(element); const scrollPosition = this.getScrollPosition(target); trackedElements.push({ element: target, type: 'anchor', scrollPosition }); }); } trackStickyElements(stickyElements, trackedElements) { stickyElements.forEach(element => { const settings = this.getElementSettings(element); if (!settings || !settings.sticky_anchor_link_offset) { return; } const { sticky_anchor_link_offset: scrollMarginTop } = settings; if (0 === scrollMarginTop) { return; } const scrollPosition = this.getScrollPosition(element); trackedElements.push({ scrollMarginTop, type: 'sticky', scrollPosition }); }); } organizeStickyAndAnchors(elements) { const stickyList = this.filterAndSortElementsByType(elements, 'sticky'); const anchorList = this.filterAndSortElementsByType(elements, 'anchor'); stickyList.forEach((sticky, index) => { this.defineCurrentStickyRange(sticky, index, stickyList, anchorList); }); } defineCurrentStickyRange(sticky, index, stickyList, anchorList) { const nextStickyScrollPosition = index + 1 < stickyList.length ? stickyList[index + 1].scrollPosition : Infinity; sticky.anchor = anchorList.filter(anchor => { const withinRange = anchor.scrollPosition > sticky.scrollPosition && anchor.scrollPosition < nextStickyScrollPosition; if (withinRange) { anchor.element.style.scrollMarginTop = `${sticky.scrollMarginTop}px`; } return withinRange; }); } getScrollPosition(element) { let offsetTop = 0; while (element) { offsetTop += element.offsetTop; element = element.offsetParent; } return offsetTop; } getAllStickyElements() { const allStickyElements = document.querySelectorAll(this.getSettings('selectors.stickyElements')); return Array.from(allStickyElements).filter((anchor, index, self) => index === self.findIndex(t => t.getAttribute('data-id') === anchor.getAttribute('data-id'))); } getAllAnchorLinks() { const allAnchors = document.querySelectorAll(this.getSettings('selectors.links')); return Array.from(allAnchors).filter((anchor, index, self) => index === self.findIndex(t => t.getAttribute('href') === anchor.getAttribute('href'))); } filterAndSortElementsByType(elements, type) { return elements.filter(item => type === item.type).sort((a, b) => a.scrollPosition - b.scrollPosition); } isValidSelector(hash) { const validSelectorPattern = /^#[A-Za-z_][\w-]*$/; return validSelectorPattern.test(hash); } getAnchorTarget(element) { const hash = element?.hash; if (!this.isValidSelector(hash)) { return null; } return document.querySelector(hash); } getElementSettings(element) { return JSON.parse(element.getAttribute('data-settings')); } } exports["default"] = _default; /***/ }), /***/ "../assets/dev/js/frontend/utils/anchors.js": /*!**************************************************!*\ !*** ../assets/dev/js/frontend/utils/anchors.js ***! \**************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var _utils = __webpack_require__(/*! ./utils */ "../assets/dev/js/frontend/utils/utils.js"); module.exports = elementorModules.ViewModule.extend({ getDefaultSettings() { return { scrollDuration: 500, selectors: { links: 'a[href*="#"]', targets: '.elementor-element, .elementor-menu-anchor', scrollable: (0, _utils.isScrollSnapActive)() ? 'body' : 'html, body' } }; }, getDefaultElements() { var $ = jQuery, selectors = this.getSettings('selectors'); return { $scrollable: $(selectors.scrollable) }; }, bindEvents() { elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), this.handleAnchorLinks); }, handleAnchorLinks(event) { var clickedLink = event.currentTarget, isSamePathname = location.pathname === clickedLink.pathname, isSameHostname = location.hostname === clickedLink.hostname, $anchor; if (!isSameHostname || !isSamePathname || clickedLink.hash.length < 2) { return; } try { $anchor = jQuery(clickedLink.hash).filter(this.getSettings('selectors.targets')); } catch (e) { return; } if (!$anchor.length) { return; } var scrollTop = $anchor.offset().top, $wpAdminBar = elementorFrontend.elements.$wpAdminBar, $activeStickies = jQuery('.elementor-section.elementor-sticky--active:visible'), maxStickyHeight = 0; if ($wpAdminBar.length > 0) { scrollTop -= $wpAdminBar.height(); } // Offset height of tallest sticky if ($activeStickies.length > 0) { maxStickyHeight = Math.max.apply(null, $activeStickies.map(function () { return jQuery(this).outerHeight(); }).get()); scrollTop -= maxStickyHeight; } event.preventDefault(); scrollTop = elementorFrontend.hooks.applyFilters('frontend/handlers/menu_anchor/scroll_top_distance', scrollTop); // On scroll animation start: remove scroll-snap. if ((0, _utils.isScrollSnapActive)()) { elementorFrontend.elements.$body.css('scroll-snap-type', 'none'); } this.elements.$scrollable.animate({ scrollTop }, this.getSettings('scrollDuration'), 'linear', () => { // On scroll animation complete: add scroll-snap back. if ((0, _utils.isScrollSnapActive)()) { elementorFrontend.elements.$body.css('scroll-snap-type', ''); } }); }, onInit() { elementorModules.ViewModule.prototype.onInit.apply(this, arguments); } }); /***/ }), /***/ "../assets/dev/js/frontend/utils/assets-loader.js": /*!********************************************************!*\ !*** ../assets/dev/js/frontend/utils/assets-loader.js ***! \********************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class AssetsLoader { getScriptElement(src) { const scriptElement = document.createElement('script'); scriptElement.src = src; return scriptElement; } getStyleElement(src) { const styleElement = document.createElement('link'); styleElement.rel = 'stylesheet'; styleElement.href = src; return styleElement; } load(type, key) { const assetData = AssetsLoader.assets[type][key]; if (!assetData.loader) { assetData.loader = this.isAssetLoaded(assetData, type) ? Promise.resolve(true) : this.loadAsset(assetData, type); } return assetData.loader; } isAssetLoaded(assetData, assetType) { const filePath = 'script' === assetType ? `script[src="${assetData.src}"]` : `link[href="${assetData.src}"]`; return !!document.querySelectorAll(filePath)?.length; } loadAsset(assetData, assetType) { return new Promise(resolve => { const element = 'style' === assetType ? this.getStyleElement(assetData.src) : this.getScriptElement(assetData.src); element.onload = () => resolve(true); this.appendAsset(assetData, element); }); } appendAsset(assetData, element) { const beforeElement = document.querySelector(assetData.before); if (!!beforeElement) { beforeElement.insertAdjacentElement('beforebegin', element); return; } const parent = 'head' === assetData.parent ? assetData.parent : 'body'; document[parent].appendChild(element); } } exports["default"] = AssetsLoader; const assetsUrl = elementorFrontendConfig.urls.assets; const fileSuffix = elementorFrontendConfig.environmentMode.isScriptDebug ? '' : '.min'; const pluginVersion = elementorFrontendConfig.version; AssetsLoader.assets = { script: { dialog: { src: `${assetsUrl}lib/dialog/dialog${fileSuffix}.js?ver=4.9.3` }, 'share-link': { src: `${assetsUrl}lib/share-link/share-link${fileSuffix}.js?ver=${pluginVersion}` }, swiper: { src: `${assetsUrl}lib/swiper/v8/swiper${fileSuffix}.js?ver=8.4.5` } }, style: { // TODO: Remove 'swiper' in v3.28.0 [ED-16258]. swiper: { src: `${assetsUrl}lib/swiper/v8/css/swiper${fileSuffix}.css?ver=8.4.5`, parent: 'head' }, 'e-lightbox': { src: elementorFrontendConfig?.responsive?.hasCustomBreakpoints ? `${elementorFrontendConfig.urls.uploadUrl}/elementor/css/custom-lightbox.min.css?ver=${pluginVersion}` : `${assetsUrl}css/conditionals/lightbox${fileSuffix}.css?ver=${pluginVersion}` }, dialog: { src: `${assetsUrl}css/conditionals/dialog${fileSuffix}.css?ver=${pluginVersion}`, parent: 'head', before: '#elementor-frontend-css' } } }; /***/ }), /***/ "../assets/dev/js/frontend/utils/controls.js": /*!***************************************************!*\ !*** ../assets/dev/js/frontend/utils/controls.js ***! \***************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class Controls { /** * Get Control Value * * Retrieves a control value. * This function has been copied from `elementor/assets/dev/js/editor/utils/conditions.js`. * * @since 3.11.0 * * @param {{}} controlSettings A settings object (e.g. element settings - keys and values) * @param {string} controlKey The control key name * @param {string} controlSubKey A specific property of the control object. * @return {*} Control Value */ getControlValue(controlSettings, controlKey, controlSubKey) { let value; if ('object' === typeof controlSettings[controlKey] && controlSubKey) { value = controlSettings[controlKey][controlSubKey]; } else { value = controlSettings[controlKey]; } return value; } /** * Get the value of a responsive control. * * Retrieves the value of a responsive control for the current device or for this first parent device which has a control value. * * @since 3.11.0 * * @param {{}} controlSettings A settings object (e.g. element settings - keys and values) * @param {string} controlKey The control key name * @param {string} controlSubKey A specific property of the control object. * @param {string} device If we want to get a value for a specific device mode. * @return {*} Control Value */ getResponsiveControlValue(controlSettings, controlKey) { let controlSubKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; let device = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; const currentDeviceMode = device || elementorFrontend.getCurrentDeviceMode(), controlValueDesktop = this.getControlValue(controlSettings, controlKey, controlSubKey); // Set the control value for the current device mode. // First check the widescreen device mode. if ('widescreen' === currentDeviceMode) { const controlValueWidescreen = this.getControlValue(controlSettings, `${controlKey}_widescreen`, controlSubKey); return !!controlValueWidescreen || 0 === controlValueWidescreen ? controlValueWidescreen : controlValueDesktop; } // Loop through all responsive and desktop device modes. const activeBreakpoints = elementorFrontend.breakpoints.getActiveBreakpointsList({ withDesktop: true }); let parentDeviceMode = currentDeviceMode, deviceIndex = activeBreakpoints.indexOf(currentDeviceMode), controlValue = ''; while (deviceIndex <= activeBreakpoints.length) { if ('desktop' === parentDeviceMode) { controlValue = controlValueDesktop; break; } const responsiveControlKey = `${controlKey}_${parentDeviceMode}`, responsiveControlValue = this.getControlValue(controlSettings, responsiveControlKey, controlSubKey); if (!!responsiveControlValue || 0 === responsiveControlValue) { controlValue = responsiveControlValue; break; } // If no control value has been set for the current device mode, then check the parent device mode. deviceIndex++; parentDeviceMode = activeBreakpoints[deviceIndex]; } return controlValue; } } exports["default"] = Controls; /***/ }), /***/ "../assets/dev/js/frontend/utils/lightbox/lightbox-manager.js": /*!********************************************************************!*\ !*** ../assets/dev/js/frontend/utils/lightbox/lightbox-manager.js ***! \********************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class LightboxManager extends elementorModules.ViewModule { static getLightbox() { const lightboxPromise = new Promise(resolveLightbox => { __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 => { let { default: LightboxModule } = _ref; return resolveLightbox(new LightboxModule()); }); }), dialogScriptPromise = elementorFrontend.utils.assetsLoader.load('script', 'dialog'), dialogStylePromise = elementorFrontend.utils.assetsLoader.load('style', 'dialog'), shareLinkPromise = elementorFrontend.utils.assetsLoader.load('script', 'share-link'), swiperStylePromise = elementorFrontend.utils.assetsLoader.load('style', 'swiper'), // TODO: Remove in v3.28.0 [ED-16258]. lightboxStylePromise = elementorFrontend.utils.assetsLoader.load('style', 'e-lightbox'); return Promise.all([lightboxPromise, dialogScriptPromise, dialogStylePromise, shareLinkPromise, swiperStylePromise, lightboxStylePromise]).then(() => lightboxPromise); } getDefaultSettings() { return { selectors: { links: 'a, [data-elementor-lightbox]', slideshow: '[data-elementor-lightbox-slideshow]' } }; } getDefaultElements() { return { $links: jQuery(this.getSettings('selectors.links')), $slideshow: jQuery(this.getSettings('selectors.slideshow')) }; } isLightboxLink(element) { // Check for lowercase `a` to make sure it works also for links inside SVGs. if ('a' === element.tagName.toLowerCase() && (element.hasAttribute('download') || !/^[^?]+\.(png|jpe?g|gif|svg|webp)(\?.*)?$/i.test(element.href)) && !element.dataset.elementorLightboxVideo) { return false; } const generalOpenInLightbox = elementorFrontend.getKitSettings('global_image_lightbox'), currentLinkOpenInLightbox = element.dataset.elementorOpenLightbox; return 'yes' === currentLinkOpenInLightbox || generalOpenInLightbox && 'no' !== currentLinkOpenInLightbox; } isLightboxSlideshow() { return 0 !== this.elements.$slideshow.length; } async onLinkClick(event) { const element = event.currentTarget, $target = jQuery(event.target), editMode = elementorFrontend.isEditMode(), isColorPickingMode = editMode && elementor.$previewContents.find('body').hasClass('elementor-editor__ui-state__color-picker'), isClickInsideElementor = !!$target.closest('.elementor-edit-area').length; if (!this.isLightboxLink(element)) { if (editMode && isClickInsideElementor) { event.preventDefault(); } return; } event.preventDefault(); if (editMode && !elementor.getPreferences('lightbox_in_editor')) { return; } // Disable lightbox on color picking mode. if (isColorPickingMode) { return; } const lightbox = await LightboxManager.getLightbox(); lightbox.createLightbox(element); } bindEvents() { elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), event => this.onLinkClick(event)); } onInit() { super.onInit(...arguments); if (elementorFrontend.isEditMode()) { return; } this.maybeActivateLightboxOnLink(); } maybeActivateLightboxOnLink() { // Detecting lightbox links on init will reduce the time of waiting to the lightbox to be display on slow connections. this.elements.$links.each((index, element) => { if (this.isLightboxLink(element)) { LightboxManager.getLightbox(); // Breaking the iteration when the library loading has already been triggered. return false; } }); } } exports["default"] = LightboxManager; /***/ }), /***/ "../assets/dev/js/frontend/utils/swiper.js": /*!*************************************************!*\ !*** ../assets/dev/js/frontend/utils/swiper.js ***! \*************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class Swiper { constructor(container, config) { this.config = config; if (this.config.breakpoints) { // The config is passed as a param to allow adjustConfig to be called outside of this wrapper this.config = this.adjustConfig(config); } if (container instanceof jQuery) { container = container[0]; } // The Swiper will overlap the column width when applying custom margin values on the column. container.closest('.elementor-widget-wrap')?.classList.add('e-swiper-container'); container.closest('.elementor-widget')?.classList.add('e-widget-swiper'); return new Promise(resolve => { elementorFrontend.utils.assetsLoader.load('script', 'swiper').then(() => resolve(this.createSwiperInstance(container, this.config))); }); } createSwiperInstance(container, config) { const SwiperSource = window.Swiper; SwiperSource.prototype.adjustConfig = this.adjustConfig; return new SwiperSource(container, config); } // Backwards compatibility for Elementor Pro <2.9.0 (old Swiper version - <5.0.0) // In Swiper 5.0.0 and up, breakpoints changed from acting as max-width to acting as min-width adjustConfig(config) { // Only reverse the breakpoints if the handle param has been defined if (!config.handleElementorBreakpoints) { return config; } const elementorBreakpoints = elementorFrontend.config.responsive.activeBreakpoints, elementorBreakpointValues = elementorFrontend.breakpoints.getBreakpointValues(); Object.keys(config.breakpoints).forEach(configBPKey => { const configBPKeyInt = parseInt(configBPKey); let breakpointToUpdate; // The `configBPKeyInt + 1` is a BC Fix for Elementor Pro Carousels from 2.8.0-2.8.3 used with Elementor >= 2.9.0 if (configBPKeyInt === elementorBreakpoints.mobile.value || configBPKeyInt + 1 === elementorBreakpoints.mobile.value) { // This handles the mobile breakpoint. Elementor's default sm breakpoint is never actually used, // so the mobile breakpoint (md) needs to be handled separately and set to the 0 breakpoint (xs) breakpointToUpdate = 0; } else if (elementorBreakpoints.widescreen && (configBPKeyInt === elementorBreakpoints.widescreen.value || configBPKeyInt + 1 === elementorBreakpoints.widescreen.value)) { // Widescreen is a min-width breakpoint. Since in Swiper >5.0 the breakpoint system is min-width based, // the value we pass to the Swiper instance in this case is the breakpoint from the user, unchanged. breakpointToUpdate = configBPKeyInt; } else { // Find the index of the current config breakpoint in the Elementor Breakpoints array const currentBPIndexInElementorBPs = elementorBreakpointValues.findIndex(elementorBP => { // BC Fix for Elementor Pro Carousels from 2.8.0-2.8.3 used with Elementor >= 2.9.0 return configBPKeyInt === elementorBP || configBPKeyInt + 1 === elementorBP; }); // For all other Swiper config breakpoints, move them one breakpoint down on the breakpoint list, // according to the array of Elementor's global breakpoints breakpointToUpdate = elementorBreakpointValues[currentBPIndexInElementorBPs - 1]; } config.breakpoints[breakpointToUpdate] = config.breakpoints[configBPKey]; // Then reset the settings in the original breakpoint key to the default values config.breakpoints[configBPKey] = { slidesPerView: config.slidesPerView, slidesPerGroup: config.slidesPerGroup ? config.slidesPerGroup : 1 }; }); return config; } } exports["default"] = Swiper; /***/ }), /***/ "../assets/dev/js/frontend/utils/url-actions.js": /*!******************************************************!*\ !*** ../assets/dev/js/frontend/utils/url-actions.js ***! \******************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; __webpack_require__(/*! core-js/modules/web.dom-exception.stack.js */ "../node_modules/core-js/modules/web.dom-exception.stack.js"); class _default extends elementorModules.ViewModule { getDefaultSettings() { return { selectors: { links: 'a[href^="%23elementor-action"], a[href^="#elementor-action"]' } }; } bindEvents() { elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), this.runLinkAction.bind(this)); } initActions() { this.actions = { lightbox: async settings => { const lightbox = await elementorFrontend.utils.lightbox; if (settings.slideshow) { // Handle slideshow display lightbox.openSlideshow(settings.slideshow, settings.url); } else { // If the settings has an ID - the lightbox target content is an image - the ID is an attachment ID. if (settings.id) { settings.type = 'image'; } lightbox.showModal(settings); } } }; } addAction(name, callback) { this.actions[name] = callback; } runAction(url) { url = decodeURI(url); url = decodeURIComponent(url); const actionMatch = url.match(/action=(.+?)&/); if (!actionMatch) { return; } const action = this.actions[actionMatch[1]]; if (!action) { return; } let settings = {}; const settingsMatch = url.match(/settings=(.+)/); if (settingsMatch) { settings = JSON.parse(atob(settingsMatch[1])); } settings.previousEvent = event; for (var _len = arguments.length, restArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { restArgs[_key - 1] = arguments[_key]; } action(settings, ...restArgs); } runLinkAction(event) { event.preventDefault(); this.runAction(jQuery(event.currentTarget).attr('href'), event); } runHashAction() { if (!location.hash) { return; } // Only if an element with this action hash exists on the page do we allow running the action. const elementWithHash = document.querySelector(`[data-e-action-hash="${location.hash}"], a[href*="${location.hash}"]`); if (elementWithHash) { this.runAction(elementWithHash.getAttribute('data-e-action-hash')); } } createActionHash(action, settings) { // We need to encode the hash tag (#) here, in order to support share links for a variety of providers return encodeURIComponent(`#elementor-action:action=${action}&settings=${btoa(JSON.stringify(settings))}`); } onInit() { super.onInit(); this.initActions(); elementorFrontend.on('components:init', this.runHashAction.bind(this)); } } exports["default"] = _default; /***/ }), /***/ "../assets/dev/js/frontend/utils/utils.js": /*!************************************************!*\ !*** ../assets/dev/js/frontend/utils/utils.js ***! \************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isScrollSnapActive = exports.escapeHTML = void 0; // Escape HTML special chars to prevent XSS. const escapeHTML = str => { const specialChars = { '&': '&', '<': '<', '>': '>', "'": ''', '"': '"' }; return str.replace(/[&<>'"]/g, tag => specialChars[tag] || tag); }; // Check if Scroll-Snap is active. exports.escapeHTML = escapeHTML; const isScrollSnapActive = () => { const scrollSnapStatus = elementorFrontend.isEditMode() ? elementor.settings.page.model.attributes?.scroll_snap : elementorFrontend.config.settings.page?.scroll_snap; return 'yes' === scrollSnapStatus ? true : false; }; exports.isScrollSnapActive = isScrollSnapActive; /***/ }), /***/ "../assets/dev/js/frontend/utils/video-api/base-loader.js": /*!****************************************************************!*\ !*** ../assets/dev/js/frontend/utils/video-api/base-loader.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class BaseLoader extends elementorModules.ViewModule { getDefaultSettings() { return { isInserted: false, selectors: { firstScript: 'script:first' } }; } getDefaultElements() { return { $firstScript: jQuery(this.getSettings('selectors.firstScript')) }; } insertAPI() { this.elements.$firstScript.before(jQuery('