{ "name": "wp-media/wp-rocket", "description": "Performance optimization plugin for WordPress", "keywords": [ "wordpress", "cache", "minification", "lazyload" ], "homepage": "https://wp-rocket.me", "license": "GPL-2.0-or-later", "authors": [ { "name": "WP Media", "email": "contact@wp-media.me", "homepage": "https://wp-media.me" } ], "type": "wordpress-plugin", "config": { "sort-packages": true, "preferred-install": { "wp-media/phpunit": "source" }, "process-timeout": 0, "allow-plugins": { "mnsami/composer-custom-directory-installer": true, "dealerdirect/phpcodesniffer-composer-installer": true } }, "support": { "issues": "https://github.com/wp-media/wp-rocket/issues", "source": "https://github.com/wp-media/wp-rocket" }, "repositories": [ { "type": "composer", "url": "https://wpackagist.org" } ], "require": { "php": ">=7.3", "cloudflare/cf-ip-rewrite": "^1.0", "monolog/monolog": "^1.0 || ^2.0" }, "require-dev": { "php": "^7 || ^8", "brain/monkey": "^2.0", "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "league/container": "^3.3", "mikey179/vfsstream": "1.6.11", "mnsami/composer-custom-directory-installer": "^2.0", "mobiledetect/mobiledetectlib": "^2.8", "phpcompatibility/phpcompatibility-wp": "^2.0", "phpstan/phpstan": "^1.8", "phpunit/phpunit": "^7.5 || ^8 || ^9", "psr/container": "1.0.0", "roave/security-advisories": "dev-master", "szepeviktor/phpstan-wordpress": "^1.3", "woocommerce/action-scheduler": "^3.4", "wp-coding-standards/wpcs": "^2", "wp-media/background-processing": "^1.3", "wp-media/phpunit": "^3", "wp-media/rocket-lazyload-common": "^3.0.11", "wp-media/wp-imagify-partner": "^1.0", "wpackagist-plugin/amp": "^1.1.4", "wpackagist-plugin/hummingbird-performance": "2.0.1", "wpackagist-plugin/jetpack": "9.3.2", "wpackagist-plugin/pdf-embedder": "^4.6", "wpackagist-plugin/simple-custom-css": "^4.0.3", "wpackagist-plugin/spinupwp": "^1.1", "wpackagist-plugin/woocommerce": "^7", "wpackagist-plugin/wp-smushit": "^3" }, "autoload": { "classmap": [ "inc/classes", "inc/vendors/classes", "inc/deprecated" ], "exclude-from-classmap": [ "inc/vendors/classes/class-rocket-mobile-detect.php", "inc/classes/class-wp-rocket-requirements-check.php" ], "psr-4": { "WP_Rocket\\": "inc/", "WPMedia\\Cloudflare\\": "inc/Addon/Cloudflare/" } }, "autoload-dev": { "psr-4": { "WP_Rocket\\Tests\\": "tests/" } }, "extra": { "installer-paths": { "./inc/Dependencies/ActionScheduler/": ["woocommerce/action-scheduler"], "vendor/{$vendor}/{$name}/": ["type:wordpress-plugin"] }, "mozart": { "dep_namespace": "WP_Rocket\\Dependencies\\", "dep_directory": "/inc/Dependencies/", "classmap_directory": "/inc/classes/dependencies/", "classmap_prefix": "WP_Rocket_", "packages": [ "mobiledetect/mobiledetectlib", "wp-media/background-processing", "wp-media/rocket-lazyload-common", "wp-media/wp-imagify-partner", "league/container" ] } }, "scripts": { "test-unit": "\"vendor/bin/phpunit\" --testsuite unit --colors=always --configuration tests/Unit/phpunit.xml.dist", "test-integration": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --exclude-group AdminOnly,BeaverBuilder,Elementor,Hummingbird,WithSmush,WithWoo,WithAmp,WithAmpAndCloudflare,WithSCCSS,Cloudways,Dreampress,Cloudflare,CloudflareAdmin,Multisite,WPEngine,SpinUpWP,WordPressCom,O2Switch,PDFEmbedder,PDFEmbedderPremium,PDFEmbedderSecure,Godaddy,LiteSpeed,RevolutionSlider,WordFence,ConvertPlug,Kinsta,Jetpack,RankMathSEO,AllInOneSeoPack,SEOPress,TheSEOFramework,OneCom,RocketLazyLoad,WPXCloud,TheEventsCalendar,Perfmatters,RapidLoad,ProIsp,TranslatePress,WPGeotargeting", "test-integration-adminonly": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group AdminOnly", "test-integration-bb": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group BeaverBuilder", "test-integration-cloudflare": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Cloudflare", "test-integration-cloudflareadmin": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group CloudflareAdmin", "test-integration-cloudways": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Cloudways", "test-integration-elementor": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Elementor", "test-integration-hummingbird": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Hummingbird", "test-integration-multisite": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Multisite", "test-integration-withsmush": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WithSmush", "test-integration-withamp": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WithAmp", "test-integration-withampcloudflare": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WithAmpAndCloudflare", "test-integration-withsccss": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WithSCCSS", "test-integration-withwoo": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WithWoo", "test-integration-wpengine": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WPEngine", "test-integration-spinupwp": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group SpinUpWP", "test-integration-wpcom": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WordPressCom", "test-integration-pdfembedder": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group PDFEmbedder", "test-integration-pdfembedderpremium": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group PDFEmbedderPremium", "test-integration-pdfembeddersecure": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group PDFEmbedderSecure", "test-integration-o2switch": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group O2Switch", "test-integration-dreampress": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Dreampress", "test-integration-godaddy": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Godaddy", "test-integration-revolutionslider": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group RevolutionSlider", "test-integration-litespeed": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group LiteSpeed", "test-integration-wordfence": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WordFence", "test-integration-kinsta": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Kinsta", "test-integration-convertplug": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group ConvertPlug", "test-integration-onecom": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group OneCom", "test-integration-jetpack": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Jetpack", "test-integration-rank-math-seo": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group RankMathSEO", "test-integration-all-in-seo-pack": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group AllInOneSeoPack", "test-integration-seopress": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group SEOPress", "test-integration-the-seo-framework": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group TheSEOFramework", "test-integration-rocket-lazy-load": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group RocketLazyLoad", "test-integration-the-events-calendar": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group TheEventsCalendar", "test-integration-wpxcloud": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WPXCloud", "test-integration-perfmatters": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Perfmatters", "test-integration-rapidload": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group RapidLoad", "test-integration-proisp": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group ProIsp", "test-integration-wp-geotargeting": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WPGeotargeting", "test-integration-translatepress": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group TranslatePress", "run-tests": [ "@test-unit", "@test-integration", "@test-integration-adminonly", "@test-integration-cloudflare", "@test-integration-cloudflareadmin", "@test-integration-bb", "@test-integration-elementor", "@test-integration-hummingbird", "@test-integration-withamp", "@test-integration-withampcloudflare", "@test-integration-withsccss", "@test-integration-withsmush", "@test-integration-withwoo", "@test-integration-pdfembedder", "@test-integration-pdfembedderpremium", "@test-integration-pdfembeddersecure", "@test-integration-multisite", "@test-integration-cloudways", "@test-integration-wpengine", "@test-integration-spinupwp", "@test-integration-wpcom", "@test-integration-o2switch", "@test-integration-dreampress", "@test-integration-godaddy", "@test-integration-revolutionslider", "@test-integration-litespeed", "@test-integration-wordfence", "@test-integration-kinsta", "@test-integration-convertplug", "@test-integration-onecom", "@test-integration-jetpack", "@test-integration-rank-math-seo", "@test-integration-all-in-seo-pack", "@test-integration-seopress", "@test-integration-the-events-calendar", "@test-integration-wpxcloud", "@test-integration-perfmatters", "@test-integration-rapidload", "@test-integration-proisp", "@test-integration-wp-geotargeting", "@test-integration-translatepress" ], "run-stan": "vendor/bin/phpstan analyze --memory-limit=2G --no-progress", "install-codestandards": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin::run", "phpcs": "phpcs --basepath=.", "phpcs-changed": "./bin/phpcs-changed.sh", "phpcs:fix": "phpcbf", "post-install-cmd": [ "\"vendor/bin/mozart\" compose", "composer dump-autoload" ], "post-update-cmd": [ "\"vendor/bin/mozart\" compose", "composer dump-autoload" ], "code-coverage": "\"vendor/bin/phpunit\" --testsuite unit --colors=always --configuration tests/Unit/phpunit.xml.dist --coverage-clover=tests/report/coverage.clover" } } /*! elementor - v0.7.1 - 18-08-2016 */ // Backbone.Radio v1.0.4 (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('underscore'), require('backbone')) : typeof define === 'function' && define.amd ? define(['underscore', 'backbone'], factory) : (global.Backbone = global.Backbone || {}, global.Backbone.Radio = factory(global._,global.Backbone)); }(this, function (_,Backbone) { 'use strict'; _ = 'default' in _ ? _['default'] : _; Backbone = 'default' in Backbone ? Backbone['default'] : Backbone; var babelHelpers = {}; babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; babelHelpers; var previousRadio = Backbone.Radio; var Radio = Backbone.Radio = {}; Radio.VERSION = '1.0.4'; // This allows you to run multiple instances of Radio on the same // webapp. After loading the new version, call `noConflict()` to // get a reference to it. At the same time the old version will be // returned to Backbone.Radio. Radio.noConflict = function () { Backbone.Radio = previousRadio; return this; }; // Whether or not we're in DEBUG mode or not. DEBUG mode helps you // get around the issues of lack of warnings when events are mis-typed. Radio.DEBUG = false; // Format debug text. Radio._debugText = function (warning, eventName, channelName) { return warning + (channelName ? ' on the ' + channelName + ' channel' : '') + ': "' + eventName + '"'; }; // This is the method that's called when an unregistered event was called. // By default, it logs warning to the console. By overriding this you could // make it throw an Error, for instance. This would make firing a nonexistent event // have the same consequence as firing a nonexistent method on an Object. Radio.debugLog = function (warning, eventName, channelName) { if (Radio.DEBUG && console && console.warn) { console.warn(Radio._debugText(warning, eventName, channelName)); } }; var eventSplitter = /\s+/; // An internal method used to handle Radio's method overloading for Requests. // It's borrowed from Backbone.Events. It differs from Backbone's overload // API (which is used in Backbone.Events) in that it doesn't support space-separated // event names. Radio._eventsApi = function (obj, action, name, rest) { if (!name) { return false; } var results = {}; // Handle event maps. if ((typeof name === 'undefined' ? 'undefined' : babelHelpers.typeof(name)) === 'object') { for (var key in name) { var result = obj[action].apply(obj, [key, name[key]].concat(rest)); eventSplitter.test(key) ? _.extend(results, result) : results[key] = result; } return results; } // Handle space separated event names. if (eventSplitter.test(name)) { var names = name.split(eventSplitter); for (var i = 0, l = names.length; i < l; i++) { results[names[i]] = obj[action].apply(obj, [names[i]].concat(rest)); } return results; } return false; }; // An optimized way to execute callbacks. Radio._callHandler = function (callback, context, args) { var a1 = args[0], a2 = args[1], a3 = args[2]; switch (args.length) { case 0: return callback.call(context); case 1: return callback.call(context, a1); case 2: return callback.call(context, a1, a2); case 3: return callback.call(context, a1, a2, a3); default: return callback.apply(context, args); } }; // A helper used by `off` methods to the handler from the store function removeHandler(store, name, callback, context) { var event = store[name]; if ((!callback || callback === event.callback || callback === event.callback._callback) && (!context || context === event.context)) { delete store[name]; return true; } } function removeHandlers(store, name, callback, context) { store || (store = {}); var names = name ? [name] : _.keys(store); var matched = false; for (var i = 0, length = names.length; i < length; i++) { name = names[i]; // If there's no event by this name, log it and continue // with the loop if (!store[name]) { continue; } if (removeHandler(store, name, callback, context)) { matched = true; } } return matched; } /* * tune-in * ------- * Get console logs of a channel's activity * */ var _logs = {}; // This is to produce an identical function in both tuneIn and tuneOut, // so that Backbone.Events unregisters it. function _partial(channelName) { return _logs[channelName] || (_logs[channelName] = _.partial(Radio.log, channelName)); } _.extend(Radio, { // Log information about the channel and event log: function log(channelName, eventName) { if (typeof console === 'undefined') { return; } var args = _.drop(arguments, 2); console.log('[' + channelName + '] "' + eventName + '"', args); }, // Logs all events on this channel to the console. It sets an // internal value on the channel telling it we're listening, // then sets a listener on the Backbone.Events tuneIn: function tuneIn(channelName) { var channel = Radio.channel(channelName); channel._tunedIn = true; channel.on('all', _partial(channelName)); return this; }, // Stop logging all of the activities on this channel to the console tuneOut: function tuneOut(channelName) { var channel = Radio.channel(channelName); channel._tunedIn = false; channel.off('all', _partial(channelName)); delete _logs[channelName]; return this; } }); /* * Backbone.Radio.Requests * ----------------------- * A messaging system for requesting data. * */ function makeCallback(callback) { return _.isFunction(callback) ? callback : function () { return callback; }; } Radio.Requests = { // Make a request request: function request(name) { var args = _.rest(arguments); var results = Radio._eventsApi(this, 'request', name, args); if (results) { return results; } var channelName = this.channelName; var requests = this._requests; // Check if we should log the request, and if so, do it if (channelName && this._tunedIn) { Radio.log.apply(this, [channelName, name].concat(args)); } // If the request isn't handled, log it in DEBUG mode and exit if (requests && (requests[name] || requests['default'])) { var handler = requests[name] || requests['default']; args = requests[name] ? args : arguments; return Radio._callHandler(handler.callback, handler.context, args); } else { Radio.debugLog('An unhandled request was fired', name, channelName); } }, // Set up a handler for a request reply: function reply(name, callback, context) { if (Radio._eventsApi(this, 'reply', name, [callback, context])) { return this; } this._requests || (this._requests = {}); if (this._requests[name]) { Radio.debugLog('A request was overwritten', name, this.channelName); } this._requests[name] = { callback: makeCallback(callback), context: context || this }; return this; }, // Set up a handler that can only be requested once replyOnce: function replyOnce(name, callback, context) { if (Radio._eventsApi(this, 'replyOnce', name, [callback, context])) { return this; } var self = this; var once = _.once(function () { self.stopReplying(name); return makeCallback(callback).apply(this, arguments); }); return this.reply(name, once, context); }, // Remove handler(s) stopReplying: function stopReplying(name, callback, context) { if (Radio._eventsApi(this, 'stopReplying', name)) { return this; } // Remove everything if there are no arguments passed if (!name && !callback && !context) { delete this._requests; } else if (!removeHandlers(this._requests, name, callback, context)) { Radio.debugLog('Attempted to remove the unregistered request', name, this.channelName); } return this; } }; /* * Backbone.Radio.channel * ---------------------- * Get a reference to a channel by name. * */ Radio._channels = {}; Radio.channel = function (channelName) { if (!channelName) { throw new Error('You must provide a name for the channel.'); } if (Radio._channels[channelName]) { return Radio._channels[channelName]; } else { return Radio._channels[channelName] = new Radio.Channel(channelName); } }; /* * Backbone.Radio.Channel * ---------------------- * A Channel is an object that extends from Backbone.Events, * and Radio.Requests. * */ Radio.Channel = function (channelName) { this.channelName = channelName; }; _.extend(Radio.Channel.prototype, Backbone.Events, Radio.Requests, { // Remove all handlers from the messaging systems of this channel reset: function reset() { this.off(); this.stopListening(); this.stopReplying(); return this; } }); /* * Top-level API * ------------- * Supplies the 'top-level API' for working with Channels directly * from Backbone.Radio. * */ var channel; var args; var systems = [Backbone.Events, Radio.Requests]; _.each(systems, function (system) { _.each(system, function (method, methodName) { Radio[methodName] = function (channelName) { args = _.rest(arguments); channel = this.channel(channelName); return channel[methodName].apply(channel, args); }; }); }); Radio.reset = function (channelName) { var channels = !channelName ? this._channels : [this._channels[channelName]]; _.invoke(channels, 'reset'); }; return Radio; }));/*! elementor - v3.30.0 - 09-07-2025 */ "use strict";(self.webpackChunkelementorFrontend=self.webpackChunkelementorFrontend||[]).push([[313],{4047:(e,t,n)=>{var r=n(6784);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n(2890));class _default extends elementorModules.ViewModule{constructor(){super(...arguments),this.documents={},this.initDocumentClasses(),this.attachDocumentsClasses()}getDefaultSettings(){return{selectors:{document:".elementor"}}}getDefaultElements(){const e=this.getSettings("selectors");return{$documents:jQuery(e.document)}}initDocumentClasses(){this.documentClasses={base:o.default},elementorFrontend.hooks.doAction("elementor/frontend/documents-manager/init-classes",this)}addDocumentClass(e,t){this.documentClasses[e]=t}attachDocumentsClasses(){this.elements.$documents.each(((e,t)=>this.attachDocumentClass(jQuery(t))))}attachDocumentClass(e){const t=e.data(),n=t.elementorId,r=t.elementorType,o=this.documentClasses[r]||this.documentClasses.base;this.documents[n]=new o({$element:e,id:n})}}t.default=_default},7248:(e,t,n)=>{var r=n(6784);n(4846),n(9655);var o=r(n(4970)),s=r(n(3678)),i=r(n(2126)),a=r(n(8891));e.exports=function(e){var t=this;const r={};this.elementsHandlers={"accordion.default":()=>n.e(131).then(n.bind(n,9675)),"alert.default":()=>n.e(707).then(n.bind(n,7243)),"counter.default":()=>n.e(457).then(n.bind(n,3905)),"progress.default":()=>n.e(234).then(n.bind(n,9754)),"tabs.default":()=>n.e(575).then(n.bind(n,3485)),"toggle.default":()=>n.e(775).then(n.bind(n,3049)),"video.default":()=>n.e(180).then(n.bind(n,3774)),"image-carousel.default":()=>n.e(177).then(n.bind(n,4315)),"text-editor.default":()=>n.e(212).then(n.bind(n,5362)),"wp-widget-media_audio.default":()=>n.e(211).then(n.bind(n,2793)),container:s.default,section:i.default,column:a.default},elementorFrontendConfig.experimentalFeatures["nested-elements"]&&(this.elementsHandlers["nested-tabs.default"]=()=>n.e(215).then(n.bind(n,4328))),elementorFrontendConfig.experimentalFeatures["nested-elements"]&&(this.elementsHandlers["nested-accordion.default"]=()=>n.e(915).then(n.bind(n,8216))),elementorFrontendConfig.experimentalFeatures.container&&(this.elementsHandlers["contact-buttons.default"]=()=>n.e(1).then(n.bind(n,6285)),this.elementsHandlers["floating-bars-var-1.default"]=()=>n.e(336).then(n.bind(n,5199)));const addElementsHandlers=()=>{e.each(this.elementsHandlers,((e,t)=>{const n=e.split(".");e=n[0];const r=n[1]||null;this.attachHandler(e,t,r)}))},isClassHandler=e=>e.prototype?.getUniqueHandlerID;this.addHandler=function(t,n){const o=n.$element.data("model-cid");let s;if(o){s=t.prototype.getConstructorID(),r[o]||(r[o]={});const e=r[o][s];e&&e.onDestroy()}const i=new t(n);elementorFrontend.hooks.doAction(`frontend/element_handler_ready/${n.elementName}`,n.$element,e),o&&(r[o][s]=i)},this.attachHandler=(e,n,r)=>{Array.isArray(n)||(n=[n]),n.forEach((n=>function(e,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default";r=r?"."+r:"";const o=e+r;elementorFrontend.hooks.addAction(`frontend/element_ready/${o}`,(e=>{if(isClassHandler(n))t.addHandler(n,{$element:e,elementName:o},!0);else{const r=n();if(!r)return;r instanceof Promise?r.then((n=>{let{default:r}=n;t.addHandler(r,{$element:e,elementName:o},!0)})):t.addHandler(r,{$element:e,elementName:o},!0)}}))}(e,n,r)))},this.getHandler=function(e){const t=this.elementsHandlers[e];return isClassHandler(t)?t:new Promise((e=>{t().then((t=>{let{default:n}=t;e(n)}))}))},this.getHandlers=function(e){return elementorDevTools.deprecation.deprecated("getHandlers","3.1.0","elementorFrontend.elementsHandler.getHandler"),e?this.getHandler(e):this.elementsHandlers},this.runReadyTrigger=function(t){const n=!!t.closest('[data-delay-child-handlers="true"]')&&0!==t.closest('[data-delay-child-handlers="true"]').length;if(elementorFrontend.config.is_static||n)return;const r=jQuery(t),o=r.attr("data-element_type");if(o&&(elementorFrontend.hooks.doAction("frontend/element_ready/global",r,e),elementorFrontend.hooks.doAction(`frontend/element_ready/${o}`,r,e),"widget"===o)){const t=r.attr("data-widget_type");elementorFrontend.hooks.doAction(`frontend/element_ready/${t}`,r,e)}},this.init=()=>{elementorFrontend.hooks.addAction("frontend/element_ready/global",o.default),addElementsHandlers()}}},7603:(e,t,n)=>{var r=n(6784);n(4846),n(6211),n(9655),n(8309);var o=r(n(4047)),s=r(n(8767)),i=r(n(5115)),a=r(n(5073)),l=r(n(3126)),d=r(n(8427)),c=r(n(3582)),u=r(n(4901)),h=r(n(4252)),m=r(n(8422)),f=r(n(5896)),g=r(n(4799)),p=r(n(7842)),v=r(n(607)),y=r(n(9807)),b=n(7672);const w=n(5956),_=n(7248);class Frontend extends elementorModules.ViewModule{constructor(){super(...arguments),this.config=elementorFrontendConfig,this.config.legacyMode={get elementWrappers(){return elementorFrontend.isEditMode()&&window.top.elementorDevTools.deprecation.deprecated("elementorFrontend.config.legacyMode.elementWrappers","3.1.0"),!1}},this.populateActiveBreakpointsConfig()}get Module(){return this.isEditMode()&&parent.elementorDevTools.deprecation.deprecated("elementorFrontend.Module","2.5.0","elementorModules.frontend.handlers.Base"),elementorModules.frontend.handlers.Base}getDefaultSettings(){return{selectors:{elementor:".elementor",adminBar:"#wpadminbar"}}}getDefaultElements(){const e={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"})};return e.$body.append(e.$deviceMode),e}bindEvents(){this.elements.$window.on("resize",(()=>this.setDeviceModeData()))}getElements(e){return this.getItems(this.elements,e)}getPageSettings(e){const t=this.isEditMode()?elementor.settings.page.model.attributes:this.config.settings.page;return this.getItems(t,e)}getGeneralSettings(e){return this.isEditMode()&&parent.elementorDevTools.deprecation.deprecated("getGeneralSettings()","3.0.0","getKitSettings() and remove the `elementor_` prefix"),this.getKitSettings(`elementor_${e}`)}getKitSettings(e){return this.getItems(this.config.kit,e)}getCurrentDeviceMode(){return getComputedStyle(this.elements.$deviceMode[0],":after").content.replace(/"/g,"")}getDeviceSetting(e,t,n){if("widescreen"===e)return this.getWidescreenSetting(t,n);const r=elementorFrontend.breakpoints.getActiveBreakpointsList({largeToSmall:!0,withDesktop:!0});let o=r.indexOf(e);for(;o>0;){const e=t[n+"_"+r[o]];if(e||0===e)return e;o--}return t[n]}getWidescreenSetting(e,t){const n=t+"_widescreen";let r;return r=e[n]?e[n]:e[t],r}getCurrentDeviceSetting(e,t){return this.getDeviceSetting(elementorFrontend.getCurrentDeviceMode(),e,t)}isEditMode(){return this.config.environmentMode.edit}isWPPreviewMode(){return this.config.environmentMode.wpPreview}initDialogsManager(){let e;this.getDialogsManager=()=>(e||(e=new DialogsManager.Instance),e)}initOnReadyComponents(){this.utils={youtube:new a.default,vimeo:new l.default,baseVideoLoader:new d.default,get lightbox(){return h.default.getLightbox()},urlActions:new c.default,swiper:u.default,environment:i.default,assetsLoader:new m.default,escapeHTML:b.escapeHTML,events:g.default,controls:new v.default,anchor_scroll_margin:new y.default},this.modules={StretchElement:elementorModules.frontend.tools.StretchElement,Masonry:elementorModules.utils.Masonry},this.elementsHandler.init(),this.isEditMode()?elementor.once("document:loaded",(()=>this.onDocumentLoaded())):this.onDocumentLoaded()}initOnReadyElements(){this.elements.$wpAdminBar=this.elements.$document.find(this.getSettings("selectors.adminBar"))}addUserAgentClasses(){for(const[e,t]of Object.entries(i.default))t&&this.elements.$body.addClass("e--ua-"+e)}setDeviceModeData(){this.elements.$body.attr("data-elementor-device-mode",this.getCurrentDeviceMode())}addListenerOnce(e,t,n,r){if(r||(r=this.elements.$window),this.isEditMode())if(this.removeListeners(e,t,r),r instanceof jQuery){const o=t+"."+e;r.on(o,n)}else r.on(t,n,e);else r.on(t,n)}removeListeners(e,t,n,r){if(r||(r=this.elements.$window),r instanceof jQuery){const o=t+"."+e;r.off(o,n)}else r.off(t,n,e)}debounce(e,t){let n;return function(){const r=this,o=arguments,s=!n;clearTimeout(n),n=setTimeout((()=>{n=null,e.apply(r,o)}),t),s&&e.apply(r,o)}}muteMigrationTraces(){jQuery.migrateMute=!0,jQuery.migrateTrace=!1}initModules(){const e={shapes:p.default};elementorFrontend.trigger("elementor/modules/init:before"),elementorFrontend.trigger("elementor/modules/init/before"),Object.entries(e).forEach((e=>{let[t,n]=e;this.modulesHandlers[t]=new n}))}populateActiveBreakpointsConfig(){this.config.responsive.activeBreakpoints={},Object.entries(this.config.responsive.breakpoints).forEach((e=>{let[t,n]=e;n.is_enabled&&(this.config.responsive.activeBreakpoints[t]=n)}))}init(){this.hooks=new w,this.breakpoints=new f.default(this.config.responsive),this.storage=new s.default,this.elementsHandler=new _(jQuery),this.modulesHandlers={},this.addUserAgentClasses(),this.setDeviceModeData(),this.initDialogsManager(),this.isEditMode()&&this.muteMigrationTraces(),g.default.dispatch(this.elements.$window,"elementor/frontend/init"),this.initModules(),this.initOnReadyElements(),this.initOnReadyComponents()}onDocumentLoaded(){this.documentsManager=new o.default,this.trigger("components:init"),new h.default}}window.elementorFrontend=new Frontend,elementorFrontend.isEditMode()||jQuery((()=>elementorFrontend.init()))},8891:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=[()=>n.e(557).then(n.bind(n,628))]},3678:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=n(3002);t.default=[()=>n.e(557).then(n.bind(n,628)),()=>n.e(557).then(n.bind(n,3031)),(0,r.createEditorHandler)((()=>n.e(396).then(n.bind(n,9956)))),(0,r.createEditorHandler)((()=>n.e(768).then(n.bind(n,8847)))),(0,r.createEditorHandler)((()=>n.e(768).then(n.bind(n,3323))))]},3002:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createEditorHandler=function createEditorHandler(e){return()=>new Promise((t=>{elementorFrontend.isEditMode()&&e().then(t)}))}},4970:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class GlobalHandler extends elementorModules.frontend.handlers.Base{getWidgetType(){return"global"}animate(){const e=this.$element,t=this.getAnimation();if("none"===t)return void e.removeClass("elementor-invisible");const n=this.getElementSettings(),r=n._animation_delay||n.animation_delay||0;e.removeClass(t),this.currentAnimation&&e.removeClass(this.currentAnimation),this.currentAnimation=t,setTimeout((()=>{e.removeClass("elementor-invisible").addClass("animated "+t)}),r)}getAnimation(){return this.getCurrentDeviceSetting("animation")||this.getCurrentDeviceSetting("_animation")}onInit(){if(super.onInit(...arguments),this.getAnimation()){const e=elementorModules.utils.Scroll.scrollObserver({callback:t=>{t.isInViewport&&(this.animate(),e.unobserve(this.$element[0]))}});e.observe(this.$element[0])}}onElementChange(e){/^_?animation/.test(e)&&this.animate()}}t.default=e=>{elementorFrontend.elementsHandler.addHandler(GlobalHandler,{$element:e})}},2126:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=n(3002);t.default=[()=>n.e(77).then(n.bind(n,2439)),()=>n.e(557).then(n.bind(n,628)),()=>n.e(557).then(n.bind(n,3031)),(0,r.createEditorHandler)((()=>n.e(396).then(n.bind(n,9956)))),(0,r.createEditorHandler)((()=>n.e(220).then(n.bind(n,3243))))]},9807:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,n(5724),n(4846),n(7458),n(9655);class _default extends elementorModules.ViewModule{getDefaultSettings(){return{selectors:{links:'.elementor-element a[href*="#"]',stickyElements:".elementor-element.elementor-sticky"}}}onInit(){this.observeStickyElements((()=>{this.initializeStickyAndAnchorTracking()}))}observeStickyElements(e){new MutationObserver((t=>{for(const n of t)("childList"===n.type||"attributes"===n.type&&n.target.classList.contains("elementor-sticky"))&&e()})).observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["class","style"]})}initializeStickyAndAnchorTracking(){const e=this.getAllAnchorLinks(),t=this.getAllStickyElements(),n=[];!t.length>0&&!e.length>0||(this.trackStickyElements(t,n),this.trackAnchorLinks(e,n),this.organizeStickyAndAnchors(n))}trackAnchorLinks(e,t){e.forEach((e=>{const n=this.getAnchorTarget(e),r=this.getScrollPosition(n);t.push({element:n,type:"anchor",scrollPosition:r})}))}trackStickyElements(e,t){e.forEach((e=>{const n=this.getElementSettings(e);if(!n||!n.sticky_anchor_link_offset)return;const{sticky_anchor_link_offset:r}=n;if(0===r)return;const o=this.getScrollPosition(e);t.push({scrollMarginTop:r,type:"sticky",scrollPosition:o})}))}organizeStickyAndAnchors(e){const t=this.filterAndSortElementsByType(e,"sticky"),n=this.filterAndSortElementsByType(e,"anchor");t.forEach(((e,r)=>{this.defineCurrentStickyRange(e,r,t,n)}))}defineCurrentStickyRange(e,t,n,r){const o=t+1{const n=t.scrollPosition>e.scrollPosition&&t.scrollPositiont===n.findIndex((t=>t.getAttribute("data-id")===e.getAttribute("data-id")))))}getAllAnchorLinks(){const e=document.querySelectorAll(this.getSettings("selectors.links"));return Array.from(e).filter(((e,t,n)=>t===n.findIndex((t=>t.getAttribute("href")===e.getAttribute("href")))))}filterAndSortElementsByType(e,t){return e.filter((e=>t===e.type)).sort(((e,t)=>e.scrollPosition-t.scrollPosition))}isValidSelector(e){return/^#[A-Za-z_][\w-]*$/.test(e)}getAnchorTarget(e){const t=e?.hash;return this.isValidSelector(t)?document.querySelector(t):null}getElementSettings(e){return JSON.parse(e.getAttribute("data-settings"))}}t.default=_default},8422:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class AssetsLoader{getScriptElement(e){const t=document.createElement("script");return t.src=e,t}getStyleElement(e){const t=document.createElement("link");return t.rel="stylesheet",t.href=e,t}load(e,t){const n=AssetsLoader.assets[e][t];return n.loader||(n.loader=this.isAssetLoaded(n,e)?Promise.resolve(!0):this.loadAsset(n,e)),n.loader}isAssetLoaded(e,t){const n="script"===t?`script[src="${e.src}"]`:`link[href="${e.src}"]`;return!!document.querySelectorAll(n)?.length}loadAsset(e,t){return new Promise((n=>{const r="style"===t?this.getStyleElement(e.src):this.getScriptElement(e.src);r.onload=()=>n(!0),this.appendAsset(e,r)}))}appendAsset(e,t){const n=document.querySelector(e.before);if(n)return void n.insertAdjacentElement("beforebegin",t);const r="head"===e.parent?e.parent:"body";document[r].appendChild(t)}}t.default=AssetsLoader;const n=elementorFrontendConfig.urls.assets,r=elementorFrontendConfig.environmentMode.isScriptDebug?"":".min",o=elementorFrontendConfig.version;AssetsLoader.assets={script:{dialog:{src:`${n}lib/dialog/dialog${r}.js?ver=4.9.3`},"share-link":{src:`${n}lib/share-link/share-link${r}.js?ver=${o}`},swiper:{src:`${n}lib/swiper/v8/swiper${r}.js?ver=8.4.5`}},style:{swiper:{src:`${n}lib/swiper/v8/css/swiper${r}.css?ver=8.4.5`,parent:"head"},"e-lightbox":{src:elementorFrontendConfig?.responsive?.hasCustomBreakpoints?`${elementorFrontendConfig.urls.uploadUrl}/elementor/css/custom-lightbox.min.css?ver=${o}`:`${n}css/conditionals/lightbox${r}.css?ver=${o}`},dialog:{src:`${n}css/conditionals/dialog${r}.css?ver=${o}`,parent:"head",before:"#elementor-frontend-css"}}}},607:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=class Controls{getControlValue(e,t,n){let r;return r="object"==typeof e[t]&&n?e[t][n]:e[t],r}getResponsiveControlValue(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";const r=(arguments.length>3&&void 0!==arguments[3]?arguments[3]:null)||elementorFrontend.getCurrentDeviceMode(),o=this.getControlValue(e,t,n);if("widescreen"===r){const r=this.getControlValue(e,`${t}_widescreen`,n);return r||0===r?r:o}const s=elementorFrontend.breakpoints.getActiveBreakpointsList({withDesktop:!0});let i=r,a=s.indexOf(r),l="";for(;a<=s.length;){if("desktop"===i){l=o;break}const r=`${t}_${i}`,d=this.getControlValue(e,r,n);if(d||0===d){l=d;break}a++,i=s[a]}return l}}},4252:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,n(4846),n(6211);class LightboxManager extends elementorModules.ViewModule{static getLightbox(){const e=new Promise((e=>{n.e(216).then(n.t.bind(n,3942,23)).then((t=>{let{default:n}=t;return e(new n)}))})),t=elementorFrontend.utils.assetsLoader.load("script","dialog"),r=elementorFrontend.utils.assetsLoader.load("style","dialog"),o=elementorFrontend.utils.assetsLoader.load("script","share-link"),s=elementorFrontend.utils.assetsLoader.load("style","swiper"),i=elementorFrontend.utils.assetsLoader.load("style","e-lightbox");return Promise.all([e,t,r,o,s,i]).then((()=>e))}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(e){if("a"===e.tagName.toLowerCase()&&(e.hasAttribute("download")||!/^[^?]+\.(png|jpe?g|gif|svg|webp|avif)(\?.*)?$/i.test(e.href))&&!e.dataset.elementorLightboxVideo)return!1;const t=elementorFrontend.getKitSettings("global_image_lightbox"),n=e.dataset.elementorOpenLightbox;return"yes"===n||t&&"no"!==n}isLightboxSlideshow(){return 0!==this.elements.$slideshow.length}async onLinkClick(e){const t=e.currentTarget,n=jQuery(e.target),r=elementorFrontend.isEditMode(),o=r&&elementor.$previewContents.find("body").hasClass("elementor-editor__ui-state__color-picker"),s=!!n.closest(".elementor-edit-area").length;if(!this.isLightboxLink(t))return void(r&&s&&e.preventDefault());if(e.preventDefault(),r&&!elementor.getPreferences("lightbox_in_editor"))return;if(o)return;(await LightboxManager.getLightbox()).createLightbox(t)}bindEvents(){elementorFrontend.elements.$document.on("click",this.getSettings("selectors.links"),(e=>this.onLinkClick(e)))}onInit(){super.onInit(...arguments),elementorFrontend.isEditMode()||this.maybeActivateLightboxOnLink()}maybeActivateLightboxOnLink(){this.elements.$links.each(((e,t)=>{if(this.isLightboxLink(t))return LightboxManager.getLightbox(),!1}))}}t.default=LightboxManager},4901:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,n(4846),n(9655);t.default=class SwiperHandler{constructor(e,t){return this.config=t,this.config.breakpoints&&(this.config=this.adjustConfig(t)),e instanceof jQuery&&(e=e[0]),e.closest(".elementor-widget-wrap")?.classList.add("e-swiper-container"),e.closest(".elementor-widget")?.classList.add("e-widget-swiper"),new Promise((t=>{"undefined"!=typeof Swiper?("function"==typeof Swiper&&void 0===window.Swiper&&(window.Swiper=Swiper),t(this.createSwiperInstance(e,this.config))):elementorFrontend.utils.assetsLoader.load("script","swiper").then((()=>t(this.createSwiperInstance(e,this.config))))}))}createSwiperInstance(e,t){const n=window.Swiper;return n.prototype.adjustConfig=this.adjustConfig,new n(e,t)}adjustConfig(e){if(!e.handleElementorBreakpoints)return e;const t=elementorFrontend.config.responsive.activeBreakpoints,n=elementorFrontend.breakpoints.getBreakpointValues();return Object.keys(e.breakpoints).forEach((r=>{const o=parseInt(r);let s;if(o===t.mobile.value||o+1===t.mobile.value)s=0;else if(!t.widescreen||o!==t.widescreen.value&&o+1!==t.widescreen.value){const e=n.findIndex((e=>o===e||o+1===e));s=n[e-1]}else s=o;e.breakpoints[s]=e.breakpoints[r],e.breakpoints[r]={slidesPerView:e.slidesPerView,slidesPerGroup:e.slidesPerGroup?e.slidesPerGroup:1}})),e}}},3582:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,n(6409);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 e=>{const t=await elementorFrontend.utils.lightbox;e.slideshow?t.openSlideshow(e.slideshow,e.url):(e.id&&(e.type="image"),t.showModal(e))}}}addAction(e,t){this.actions[e]=t}runAction(e){e=decodeURI(e);const t=(e=decodeURIComponent(e)).match(/action=(.+?)&/);if(!t)return;const n=this.actions[t[1]];if(!n)return;let r={};const o=e.match(/settings=(.+)/);o&&(r=JSON.parse(atob(o[1]))),r.previousEvent=event;for(var s=arguments.length,i=new Array(s>1?s-1:0),a=1;a{Object.defineProperty(t,"__esModule",{value:!0}),t.isScrollSnapActive=t.escapeHTML=void 0;t.escapeHTML=e=>{const t={"&":"&","<":"<",">":">","'":"'",'"':"""};return e.replace(/[&<>'"]/g,(e=>t[e]||e))};t.isScrollSnapActive=()=>"yes"===(elementorFrontend.isEditMode()?elementor.settings.page.model.attributes?.scroll_snap:elementorFrontend.config.settings.page?.scroll_snap)},8427:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class BaseLoader extends elementorModules.ViewModule{getDefaultSettings(){return{isInserted:!1,selectors:{firstScript:"script:first"}}}getDefaultElements(){return{$firstScript:jQuery(this.getSettings("selectors.firstScript"))}}insertAPI(){this.elements.$firstScript.before(jQuery("