/*! elementor - v3.29.0 - 28-05-2025 */
:root{--e-is-device-mode:0}.e-is-device-mode{--e-is-device-mode:1}#elementor-responsive-bar{align-self:stretch;box-shadow:0 0 10px 2px rgba(0,0,0,.33),0 0 2px 1px rgba(0,0,0,.25),0 0 6px -3px hsla(0,0%,100%,.5);flex-shrink:0;height:calc(40px * var(--e-is-device-mode));left:0;opacity:var(--e-is-device-mode);position:sticky;top:0;transition:height .2s ease-in-out,opacity .1s;z-index:100}#elementor-responsive-bar:before{content:"";inset:0;position:absolute;transform:scaleX(var(--e-preview-scale,1));z-index:-1}.e-responsive-bar-switcher__option{border-radius:3px;cursor:pointer;font-size:16px;height:22px;line-height:22px;margin:0 4px;text-align:center;transition:var(--e-a-transition-hover);width:22px}.e-responsive-bar-switcher__option:hover{background-color:#310132;color:var(--e-a-color-primary-bold)}.e-responsive-bar-switcher__option[aria-selected=true]{background-color:#3f444b;color:#f9fafa}.e-responsive-bar-switcher__option input{display:none}.e-responsive-bar-switcher__option:not(:last-child){margin-inline-end:6px}.e-responsive-bar__button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:inherit;cursor:pointer}.e-responsive-bar__button:focus:not(:focus-visible){outline:none}.e-responsive-bar__button:hover{background-color:#3f444b;color:#f1f2f3}.e-responsive-bar--pipe{position:relative}.e-responsive-bar--pipe:before{background-color:#babfc5;content:"";display:block;height:20px;inset-inline-end:-5px;position:absolute;top:calc(50% - 10px);width:1px}.e-responsive-bar__input-size{background-color:transparent;border:1px solid #babfc5;color:#babfc5;font-size:12px;height:18px;line-height:16px;margin:auto 8px auto 4px;padding:0 3px;text-align:center;width:60px}.e-responsive-bar__input-size-separator{color:#babfc5}.e-responsive-bar__input-size[disabled]{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-color:transparent;color:#818a96;cursor:default}#e-responsive-bar{align-items:center;background-color:#1f2124;color:#babfc5;display:grid;grid-template-columns:auto 1fr;justify-content:space-between;margin-block-start:calc(-40px + 40px * var(--e-is-device-mode));transition:margin-block-start .2s ease-in-out;width:100%;z-index:1}#e-responsive-bar-scale,#e-responsive-bar-switcher,#e-responsive-bar__center,#e-responsive-bar__end{align-items:center;background-color:#1f2124;display:flex;font-size:13px;justify-content:center;padding:2px 0}#e-responsive-bar__end{justify-self:end}@media (min-width:1400px){#e-responsive-bar{grid-template-columns:1fr auto 1fr}#e-responsive-bar:before{content:""}}#e-responsive-bar__close-button,#e-responsive-bar__settings-button{border-radius:3px;font-size:16px;height:22px;margin:7px 5px;width:22px}#e-responsive-bar__size-inputs-wrapper{align-items:center;color:#babfc5;display:flex;margin-inline-end:8px}#e-responsive-bar-scale,#e-responsive-bar-switcher{padding:0 20px}#e-responsive-bar-scale__value-wrapper{margin:0 14px;min-width:32px;text-align:center}#e-responsive-bar-scale__minus,#e-responsive-bar-scale__plus,#e-responsive-bar-scale__reset{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:20px;justify-content:center;transition:all .3s;width:20px}#e-responsive-bar-scale__minus:hover,#e-responsive-bar-scale__plus:hover,#e-responsive-bar-scale__reset:hover{background-color:#3f444b;color:#f1f2f3}#e-responsive-bar-scale__minus:before{background-color:#babfc5;border-radius:3px;content:"";display:block;height:2px;width:13px}#e-responsive-bar-scale__minus:hover:before{background-color:#f1f2f3}#e-responsive-bar-scale__reset{margin:0 8px}var litespeed_docref=sessionStorage.getItem("litespeed_docref");litespeed_docref&&(Object.defineProperty(document,"referrer",{get:function(){return litespeed_docref}}),sessionStorage.removeItem("litespeed_docref"));.redux-container-border .select2-container { float: left; display: block; margin-right: 10px; }
.redux-container-border .select_wrapper { float: left; width: inherit; }
.redux-container-border .select_wrapper select { width: 80px; float: left; }
.redux-container-border .field-border-input { margin-right: 10px; margin-bottom: 7px; }
@media screen and (max-width: 782px) { .redux-container-border .field-border-input input { display: inline-block !important; width: 100px !important; }
.redux-container-border .field-border-input .add-on { padding: 7px 4px; font-size: 16px; line-height: 1.5; }
.redux-container-border .select_wrapper { margin-top: 6px; } }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtYm9yZGVyLmNzcyIsInNvdXJjZXMiOlsicmVkdXgtYm9yZGVyLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQUFDSSx1QkFEbUIsQ0FDbkIsa0JBQWtCLENBQUMsRUFDZixLQUFLLEVBQUUsSUFBSSxFQUNYLE9BQU8sRUFBRSxLQUFLLEVBQ2QsWUFBWSxFQUFFLElBQUksR0FDckI7O0FBTEwsQUFPSSx1QkFQbUIsQ0FPbkIsZUFBZSxDQUFDLEVBQ1osS0FBSyxFQUFFLElBQUksRUFNWCxLQUFLLEVBQUUsT0FBTyxHQUNqQjs7QUFmTCxBQVNRLHVCQVRlLENBT25CLGVBQWUsQ0FFWCxNQUFNLENBQUMsRUFDSCxLQUFLLEVBQUUsSUFBSSxFQUNYLEtBQUssRUFBRSxJQUFJLEdBRWQ7O0FBYlQsQUFpQkksdUJBakJtQixDQWlCbkIsbUJBQW1CLENBQUMsRUFDaEIsWUFBWSxFQUFFLElBQUksRUFDbEIsYUFBYSxFQUFFLEdBQUcsR0FDckI7O0FBR0wsTUFBTSxDQUFDLE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSyxJQUMvQixBQUVRLHVCQUZlLENBQ25CLG1CQUFtQixDQUNmLEtBQUssQ0FBQyxFQUNGLE9BQU8sRUFBRSx1QkFBdUIsRUFDaEMsS0FBSyxFQUFFLGdCQUFnQixHQUMxQjtDQUxULEFBT1EsdUJBUGUsQ0FDbkIsbUJBQW1CLENBTWYsT0FBTyxDQUFDLEVBQ0osT0FBTyxFQUFFLE9BQU8sRUFDaEIsU0FBUyxFQUFFLElBQUksRUFDZixXQUFXLEVBQUUsR0FBRyxHQUNuQjtDQVhULEFBY0ksdUJBZG1CLENBY25CLGVBQWUsQ0FBQyxFQUNaLFVBQVUsRUFBRSxHQUFHLEdBQ2xCIn0= */
/*# sourceMappingURL=redux-border.css.map */
=== Premium Addons for Elementor ===
Contributors: Leap13, Rimoun
Tags: elementor, elementor addons, widgets, elementor elements, elementor templates
Donate Link: https://premiumaddons.com/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme
Requires at least: 5.0
Tested Up To: 6.7
Requires PHP: 7.0
Stable Tag: 4.10.63
License: GPL v3.0
License URI: https://opensource.org/licenses/GPL-3.0
90+ Elementor widgets and 580+ templates. It includes elements like Nav Mega Menu, Carousel and Blog, WooCommerce widgets, Display Conditions.
== Description ==
Supercharge your [Elementor Page Builder](https://wordpress.org/plugins/elementor/) with 90+ highly customizable addons and widgets, 550+ premade templates that will give you the ability to build sophisticated websites in less time with no coding required. Both Elementor and Premium Addons plugins take your WordPress website to the next level.
[**Check The Widgets & Addons Demo Pages**](https://premiumaddons.com/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme)
### Useful Links
[Support](https://my.leap13.com/contact-support/) | [Docs](https://premiumaddons.com/docs/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) | [Video Tutorials](https://www.youtube.com/channel/UCXcJ9BeO2sKKHor7Q9VglTQ) | [Facebook Group](https://facebook.com/groups/premiumAddons) | [Upgrade to Pro](https://premiumaddons.com/pro/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme)
### New: WooCommerce Mini-Cart and Categories Listing Widgets
This powerful widget allows your customers to view the products in their shopping cart, change the quantity, remove items and check the total amount without leaving the page. We have also released Woo Categories widget to showcase your Woo categories in four neat skins. Check from [here](https://premiumaddons.com/elementor-woocommerce-mini-cart-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) and [here](https://premiumaddons.com/elementor-woocommerce-categories-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme).
### New: Mobile Nav Menu Widget
Create a neat mobile menu on your website with just few click with this powerful widget. You can set the click action of each menu item to a link or to open an off-canvas content. [Check it out now!](https://premiumaddons.com/elementor-mobile-menu-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme).
### New: AJAX Search Form Widget
The ultimate solution to add a search form widget on Elementor websites. Customize the search results, add pagination or carousel and select between three different neat skins. [Check it out now!](https://premiumaddons.com/elementor-ajax-search-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme).
### Animated Shape Divider Addon
Add animated shape dividers for Elementor flexbox containers. You can select between 40+ shape dividers or use a custom SVG code to add your own divider. [Check it out now!](https://premiumaddons.com/elementor-animated-shape-divider-addon/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme).
### Advanced Media Carousel Widget
You can now create carousel using images, videos, Elementor templates to create the carousel you want. Select between four animations and dozens of customization options. [Check it out now!](https://premiumaddons.com/elementor-advanced-carousel-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme).
### New: Magazine Bundle
Smart Post Listing, Weather, World Clock, News Ticker, Tags Cloud and Recent Posts Notification widgets newly added to create the magazine website you ever dreamed. [Check it out now!](https://premiumaddons.com/elementor-news-magazine-widgets-bundle/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme).
### Elementor Navigation/Mega Menu Widget
Now, you build outstanding navigation menus and mega menus using Premium Navigation/Mega Menu Widget which allows you to select between four different layouts with dozens of options to create a responsive menu. [Check it out now!](https://premiumaddons.com/elementor-mega-menu-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme).
### Display Conditions
Premium Addons is proudly offering you a professional way to manage your website content with specific conditions which is perfect for marketers and eCommerce websites. You can show/hide content dynamically based on location, browser, operating system, user role, URL parameters, device type, Woocommerce display conditions such as WooCommerce product and WooCommerce shopping cart data, ACF fields, etc. [Check the demo page](https://premiumaddons.com/elementor-display-conditions/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme)
### WooCommerce Products Listing widget
Show off your products in an elegant way using Premium Woo Products Widget that comes with unlimited customization options. [Check the demo page](https://premiumaddons.com/elementor-woocommerce-products/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme)
### Equal Height Feature
Now, you can make your columns, widgets or any selector you want the same height with just ONE click using [Equal Height feature](https://premiumaddons.com/docs/elementor-column-equal-height/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) in container settings -> Advanced tab.
### Pre-made Container and Page Templates
NEW: Ever-growing [Container/Page Templates Library](https://premiumaddons.com/premium-elementor-templates-library/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) Available on both Premium Addons Free and PRO versions. Browse, preview, and insert the template you like in your page/post with just ONE click. You can also select to insert the templates without media files (images, videos, etc.) to prevent overloading your WordPress Media Library with large files.
### Lottie Animations Integration
You can now use [Lottie Animations in ALL our widgets](https://premiumaddons.com/elementor-lottie-animations-section-addon/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme). Whatever widget that have an image or icon option now have also the option to add a Lottie animation. Lottie animations are open source, lightweight and available for free, Use them now to make your Elementor pages more eye-catching.
### Cross-Domain Copy N’ Paste
Now, you will have the ability to copy and paste any content from a website to another with just 2 clicks, copy from here and paste there, woohoo that’s it!. Check the documentation article from [here](https://premiumaddons.com/docs/how-to-copy-elementor-content-from-site-to-another-using-pa-copy-paste-feature/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme).
### Post and Page Duplicator
Duplicate any post, page or template on your website with just ONE click. Check the documentation article from [here](https://premiumaddons.com/docs/how-to-use-pa-duplicator/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme).
### Modular & Lightweight
Premium Addons for Elementor is fully modular. You can enable/disable specific elements to prevent overloading your website with code you will not actually use which helps your website have a blazing fast performance.
### WPML Ready
You can use Premium Addons to build multilingual websites easily as our plugin is 100% compatible with WPML.
### Fully Responsive & Cross Browser Ready
Each widget and addon has been tested on different screen sizes, mobile devices, and tablets keeping in mind to add special responsive controls for the tricky widgets and addons we create. We always test Premium Addons on [BrowserStack](https://www.browserstack.com) to make sure that everything is stable.
### Editor Panel Not Loading
[How to resolve Elementor editor panel loading issue when Premium Addons is active](https://premiumaddons.com/docs/fix-elementor-editor-panel-loading-issues/).
## Widgets & Addons Included
### Content Widgets
* [**Carousel Widget**](https://premiumaddons.com/elementor-carousel-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Create a slider of any Elementor content.
* [**Blog Widget**](https://premiumaddons.com/blog-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Showcase posts or any custom post type in 5 neat skins.
* [**AJAX Search Widget**](https://premiumaddons.com/elementor-ajax-search-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Add search form to your website with custom search query.
* [**Smart Post Listing Widget**](https://premiumaddons.com/elementor-smart-post-listing-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create any posts layout you want using this widget. You can use it to create any grid layout to show your posts or any custom post type on your website.
* [**World Clock Widget**](https://premiumaddons.com/elementor-world-clock-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: This widget helps you to show time from any place. You can use it to show analog/digital clock.
* [**Weather Widget**](https://premiumaddons.com/elementor-weather-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Weather widget is useful for showing weather forecast data by city name or custom coordinates. You can select between three neat layouts with dozens of customization options.
* [**News Ticker Widget**](https://premiumaddons.com/elementor-news-ticker-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Show your posts in an attractive way using this news ticker widget. Select between four different layouts. You can also use the widget to show Gold, Stock and Currencies prices.
* [**Tags Cloud Widget**](https://premiumaddons.com/elementor-tags-cloud-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Showcase tags and categories as cloud, sphere, labeled.
* [**Recent Posts Notification Widget**](https://premiumaddons.com/elementor-recent-posts-notification-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: This widget helps you to show a notification icon on your website to show the latest posts that your website users have not seen yet.
* [**Google Maps Widget**](https://premiumaddons.com/google-maps-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Advanced Google Maps Widget comes with features like adding multiple markers, custom skins, and much more options.
* [**Team Members Widget**](https://premiumaddons.com/persons-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Very good widget to list team members, co-workers, etc. Team Members Widget comes with many customization options.
* [**Tabs Widget**](https://premiumaddons.com/elementor-tabs-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create both Vertical and Horizontal tabs with tons of styling features.
* [**Content Switcher**](https://premiumaddons.com/content-switcher-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Present multiple content in a smart way.
* [**Animated Text Widget**](https://premiumaddons.com/elementor-animated-text-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: The animated Fancy Text Widget comes with very useful options to help you create attractive marketing messages.
* [**Heading Widget**](https://premiumaddons.com/heading-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Heading Widget has many customization options and ready-made heading styles.
* [**Dual Heading Widget**](https://premiumaddons.com/dual-header-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Create a headeline with 2 different unique styles.
### Image & Video Widgets
* [**Site Logo Widget**](https://premiumaddons.com/elementor-site-logo-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create an attractive logo for your brand using an image, SVG shape, or Lottie Animation with tens of customization options.
* [**Media Gallery Widget**](https://premiumaddons.com/elementor-grid-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Highly customizable gallery widget that can be used for creating attractive looking image galleries and portfolios.
* [**Advanced Media Carousel Widget**](https://premiumaddons.com/elementor-advanced-carousel-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Create advanced carousel using images, videos or Elementor templates.
* [**Image Scroll Widget**](https://premiumaddons.com/elementor-image-scroll-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Allows you to represent your images in a brand new yet attractive way.
* [**Image Comparison Widget**](https://premiumaddons.com/image-comparison-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create vertical or horizontal image comparisons easily using this amazing widget.
* [**Image Hotspots Widget**](https://premiumaddons.com/elementor-image-hotspots-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: The only Image Hotspots Widget with 100% freehand design experience. Add hotspots to your image using mouse drag n' drop.
* [**Image Layers Widget**](https://premiumaddons.com/image-layers-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Combine images, Lottie animations and texts.
* [**Image Accordion Widget**](https://premiumaddons.com/elementor-image-accordion-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create eye-catching Image Accordions in both vertical and horizontal orientations.
* [**Video Box Widget**](https://premiumaddons.com/elementor-video-box-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Bring videos from YouTube, Vimeo, Dailymotion, or upload your own using Video Box Widget. The widget comes with many customization features.
### Container Addons & Widgets
* [**Horizontal Scroll Widget**](https://premiumaddons.com/elementor-horizontal-scroll-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create horizontal scroll websites with just few clicks.
* [**Vertical Scroll Widget**](https://premiumaddons.com/vertical-scroll-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Create beautiful vertical scroll pages with advanced responsive control options using Premium Vertical Scroll Widget.
* [**Background Transition Widget**](https://premiumaddons.com/elementor-color-transition-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create fancy, colorful, and eye-catching webpages.
* [**Multi-Scroll Widget**](https://premiumaddons.com/multi-scroll-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create attractive multi-scroll effect.
* [**Custom Mouse Cursor Global Addon**](https://premiumaddons.com/elementor-custom-mouse-cursor-global-feature/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Add a custom mouse cursor to any container or widget.
* [**Magic Scroll Global Addon**](https://premiumaddons.com/elementor-magic-scroll-global-addon/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create outstanding scroll animations to any column/widget with just few clicks and control every single detail in the animation scene.
* [**Animated Shape Divier Addon**](https://premiumaddons.com/elementor-animated-shape-divider-addon/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Create animated shape divider on containers. Select between tens of pre-made dividers or use your own.
* [**Tooltips Global Addon**](https://premiumaddons.com/elementor-tooltip-global-addon/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Add icon, image, Lottie animation or Elementor template as a tooltip for any Elementor container element.
* [**Badge Global Addon**](https://premiumaddons.com/elementor-badge-global-addon/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Add an icon, image, Lottie animation, or SVG blob shape badge to any container.
* [**Animated Blob Generator**](https://premiumaddons.com/elementor-animated-blob-generator/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Add multiple animated blob layers to your containers with a wide range of smart customization options.
* [**Lottie Animations Container Addon**](https://premiumaddons.com/elementor-lottie-animations-section-addon/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Add multiple Lottie Animations easily to any container with allot of customization and interactivity options.
* [**Parallax Container Addon**](https://premiumaddons.com/elementor-parallax-container-addon/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: The only Parallax Container Addon that can be enabled for columns with freehand design experience and many styles to choose from.
* [**Particles Container Addon**](https://premiumaddons.com/particles-section-addon-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create eye-catching particles background with many customization options.
* [**Animated Gradient/Column Addon**](https://premiumaddons.com/animated-section-gradients-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Subtle animated gradients effect that makes your backgrounds attractive.
* [**Ken Burns Container Addon**](https://premiumaddons.com/ken-burns-section-addon-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Add multiple images to your container background and animate them with the popular Ken Burns effect.
### Off-Grid Widgets
* [**Modal Box Widget**](https://premiumaddons.com/modal-box-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: All purpose modal box widget with the ability to use Elementor Templates and many other options.
* [**Alert Box Widget**](https://premiumaddons.com/elementor-alert-box-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Show a popups, GDPR alerts and much more with this handy widget from Premium Addons.
* [**Off-canvas Widget**](https://premiumaddons.com/elementor-off-canvas-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Another off-canvas widget allows you to slide in a container from any direction with a trigger.
* [**Preview Window Widget**](https://premiumaddons.com/preview-window-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Very clever way to show more data in less content area.
### Social Reviews & Testimonials Widgets
* [**Testimonials Widget**](https://premiumaddons.com/testimonials-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: The modern Testimonials Widget us available with many customization options. It can be used with Carousel Widget to create testimonials carousel.
* [**Facebook Reviews Widget**](https://premiumaddons.com/elementor-facebook-reviews-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: This widget allows you to show off your Facebook Reviews on your website.
* [**Google Reviews Widget**](https://premiumaddons.com/elementor-google-reviews-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Show your business's latest Google Reviews right on your webpage.
* [**Yelp Reviews Widget**](https://premiumaddons.com/elementor-yelp-reviews-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Show your business's Yelp Reviews in your website pages with this useful widget.
### Blurbs & CTA Widgets
* [**Bullet List Widget**](https://premiumaddons.com/elementor-bullet-list-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Create a bullet list with icons, images, and text tags beside Lottie animations.
* [**Countdown Widget**](https://premiumaddons.com/elementor-countdown-widget-2/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Create sense of urgency with this widget. It's perfect for under construction pages, events, sale items, etc.
* [**Banner Widget**](https://premiumaddons.com/banner-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Animated and interactive Banner Widget comes with multiple styles and customization features.
* [**Button Widget**](https://premiumaddons.com/button-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Advanced Button Widget comes with lots of interactive animation, styling options, and onClick event option.
* [**Image Button Widget**](https://premiumaddons.com/image-button-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Image Button Widget is a unique element that can be used for creative and innovative call to action ideas.
* [**3D Hover Box Widget**](https://premiumaddons.com/3d-hover-box-flip-box-widget-for-elementor/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Comes with 8 cool 3D interactive effects.
* [**Icon Box Widget**](https://premiumaddons.com/elementor-icon-box-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: An advanced Icon Box Widgetwith endless customization options.
* [**iHover Widget**](https://premiumaddons.com/ihover-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: The popular iHover Widget with various interactive animations and styling options.
* [**Unfold Widget**](https://premiumaddons.com/unfold-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Advanced way to fit long text in small area. Unfold Widget is a great trick as it will make your layout design look better.
### Social Feed Widgets
* [**Pinterest Feed Widget**](https://premiumaddons.com/elementor-pinterest-feed-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Get pins and boards from your Pinterest account and show them on your website. Select between three layouts and four skins.
* [**TikTok Feed Widget**](https://premiumaddons.com/elementor-tiktok-feed-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Get feed from your TikTok account and show them on your website. Advanced filtering options, three layouts and three skins.
* [**Facebook Feed Widget**](https://premiumaddons.com/elementor-facebook-feed-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Show your Facebook Feed directly inside your website.
* [**Twitter Feed Widget**](https://premiumaddons.com/twitter-feed-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Display your Twitter Feed on your website pages.
* [**Instagram Feed Widget**](https://premiumaddons.com/elementor-instagram-feed-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Show your Instagram photos right on your webpage.
* [**Behance Feed Widget**](https://premiumaddons.com/behance-feed-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Show off your amazing profolio projects using Behance Feed Widget.
### Tables, Charts & Anything Data Widgets
* [**Progress Bar Widget**](https://premiumaddons.com/progress-bar-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: The most advanced Progress Bar Widget comes with multiple labels option.
* [**Pricing Table Widget**](https://premiumaddons.com/elementor-pricing-table-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Highly customizable Pricing Table Widget with tons of styling options.
* [**Charts Widget**](https://premiumaddons.com/charts-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: The only advanced Charts Widget is available in Premium Addons. Create Line Chart, Bar Chart, Doughnut Chart, Radar Chart, and more.
* [**Tables Widget**](https://premiumaddons.com/elementor-table-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create sophisticated tables with unique styling and interactivity options.
* [**Counter Widget**](https://premiumaddons.com/counter-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Show your facts & figures with Counter Widget.
### Contact Widgets
* [**Contact Form 7 Widget**](https://premiumaddons.com/contact-form-7-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Include contact forms in your contact us page using Contact Form 7 Widget.
* [**WhatsApp Chat Widget**](https://premiumaddons.com/whatsapp-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Get instant WhatsApp messages right from your website visitors.
### Design Widgets
* [**Divider Widget**](https://premiumaddons.com/divider-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Design beautiful dividers with this unique widget.
* [**Image Separator Widget**](https://premiumaddons.com/image-separator-widget-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Add an Image Separator between containers with this handy yet fully responsive widget.
## Support & Documentation
* [**Documentation**](https://premiumaddons.com/docs/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) Search here first if you need to know how a widget or feature works or for troubleshooting.
* [**Video Tutorials**](https://www.youtube.com/playlist?list=PLLpZVOYpMtTArB4hrlpSnDJB36D2sdoTv) This playlist includes many widgets’ video tutorials. We are adding more regularly.
* [**Facebook Group**](https://www.facebook.com/groups/PremiumAddons/) A great place to get help or ask a question about Premium Addons.
* [**Community Forums**](https://my.leap13.com/forums/forum/premium-addons-for-elementor-plugin-community-support/) Another good place to search for answers or post your own question.
* [**Support Ticket System**](https://my.leap13.com/contact-support/) We also welcome Free users’ issues which require access credentials to check.
Check [Premium Addons PRO](https://premiumaddons.com/pro/)
Love Premium Addons User? rate us on [WordPress](https://wordpress.org/support/plugin/premium-addons-for-elementor/reviews/?rate=5#new-post) :)
== Installation ==
- First make sure that Elementor Page Builder is installed, As this plugin works only with it.
- Download the plugin then Upload it to the plugin folder: /wp-content/plugins/ or install it through the WordPress plugins screen directly.
- Activate the plugin through the ‘Plugins’ screen in WordPress.
- You can find Premium Addons Elements under the category “Premium Addons” on the editor panel.
== Frequently Asked Questions ==
= Is this a standalone Plugin? =
No. You cannot use Premium Addons without Elementor.
= Does it work with any WordPress theme? =
Yes, it will work with any WordPress theme as long as you are using Elementor as a page builder.
= Will this plugin slow down my website speed? =
Premium Addonsis light weight and we also gave you the control to enable only the elements you actually use on your website for faster performance.
= Is this plugin 100% Ads Free? =
Premium Addonsis 100% Ads Free, Ads can only be detected from Youtube videos, that can be added to Premium Widgets ( eg. Modal Box, Video Box, Blog, etc.)
= How can I report security bugs? =
You can report security bugs through the Patchstack Vulnerability Disclosure Program. The Patchstack team help validate, triage and handle any security vulnerabilities. [Report a security vulnerability.](https://patchstack.com/database/vdp/premium-addons-for-elementor)
== Screenshots ==
1. Premium Addons Dashboard Tab
2. Premium Blog Widget
3. Premium Media Gallery Widget
4. Premium Dual Heading Widget
5. Premium Carousel Widget
6. Premium Progress Bar Widget
7. Premium Lottie Animations Widget
8. Premium Team Members Widget
9. Premium Video Box Widget
10. Premium Pricing Table Widget
11. Premium Blog Widget
12. Premium Image Separator Widget
13. Premium Counter Widget
14. Premium Progress Bar Widget
== Changelog ==
= 4.10.63 =
- Tweak: Added List Padding control in Bullet List widget.
- Tweak: Added option to load boards dynamically in Pinterest Feed widget.
- Fixed: Premium Templates not being inserted in correct position.
- Fixed: Console JS error showing on the editor page.
- Fixed: Alignment option not working correctly on responsive devices in Bullet List widget.
= 4.10.62 =
- Tweak: Load JS code for Wrapper Link only when its used on page.
- Fixed: Icon Size not working on SVG code icon in News Ticker widget.
- Fixed: Admin notices appear again after they are dismissed.
= 4.10.61 =
- Tweak: Premium Templates loading speed improved.
- Tweak: Added Item Name option in Advanced Carousel widget.
- Fixed: ACF fields are not showing in Display Conditions.
- Fixed: Typing effect not working in Animated Text widget when used multiple times on page.
- Fixed: Media Grid widget shows the first image only in the lightbox.
= 4.10.60 =
- Fixed: PHP warning in Recent Posts Notification widget.
= 4.10.59 =
- Fixed: PHP warning Undefined variable $search.
= 4.10.58 =
- Tweak: Added Text Content Position in News Ticker widget.
- Fixed: Conflict between Global Tooltips addon and Premium Image Hotspots widget.
- Fixed: Blog widget not working correctly after 4.10.57.
= 4.10.57 =
- Deprecated: Enable Full Section Scroll on Touch Devices control in Vertical Scroll widget.
- Tweak: Global addons code refactored to minimize mmemory usage.
- Tweak: Animated Shape Divider addon code refactored to improve editor loading speed.
- Tweak: Premium Templates code refactored to improve site's frontend loading speed.
- Fixed: Security issue in Display Conditions addon and Mega Menu widget.
- Fixed: View and Empty Cart translation issue in Woo Mini Cart widget.
- Fixed: Vertical Scroll widget causing scroll issues on touch devices.
- Fixed: Media Grid lightbox always show the first image since v4.10.55.
- Fixed: TikTok Feed widget throws PHP warning.
= 4.10.56 =
- Tweak: Dashboard settings tab loading speed improved.
- Tweak: Improve layout rendering in Mini Cart widget for better loading speed.
- Fixed: Compatibility issues with WPML translation plugin.
= 4.10.55 =
- Fixed: Issues with Slide-in WooCommerce cart and Mini Cart layout after v4.10.54.
= 4.10.54 =
- Tweak: Plugin performance and loading speed improved.
- Fixed: WooCommerce mini-cart template broken after v4.10.53.
= 4.10.53 =
- New: Added WooCommerce Mini Cart widget - [here](https://premiumaddons.com/elementor-woocommerce-mini-cart-widget/).
- Tweak: Compatibility with Elementor Elements Caching feature.
- Tweak: Added "Load Animation on Page Load/Scroll" for Animated Text widget.
- Fixed: Carousel arrows not showing in Mobile Menu widget.
- Fixed: Layout break when Load More Products button clicked in Woo Products Listing widget.
= 4.10.52 =
- Tweak: Added Highlighted Text Color control in AJAX Search widget.
- Tweak: Remove any unwanted generated files after plugin deactivation.
- Fixed: Links not working in Mobile Menu widget.
- Fixed: Skin #4 not working on RTL sites in Testimonials widget.
- Fixed: Social icons not showing in Team Members widget.
= 4.10.51 =
- Tweak: Added Play Inline option in Video Box widget.
- Tweak: Added Cluster Icon size control in Google Maps widget.
- Fixed: Conflict in Dynamic Assets Generate feature.
- Fixed: Items links not working in Advanced Carousel widget.
= 4.10.50 =
- Tweak: Added control to apply Excerpt Length option on posts with defined excerpt.
- Fixed: PHP warning for Display condition in Display Conditions feature.
- Fixed: Conflict between Stretch Section option and Carousel widget.
- Fixed: Layout broken in some cases with Dynamic Assets feature.
- Fixed: PHP warning in Global Tooltip addon.
= 4.10.49 =
- Tweak: Added option to control typography, border and background for quantity field in Woo CTA widget.
- Tweak: Added option to automatically redirect to cart page after product is added to cart in Woo CTA widget.
- Tweak: Handle errors when inserting a template including a disabled element.
[See changelog for all versions.](https://gitlab.com/Leap13/Elementor/premium-addons/-/raw/master/changelog.txt).premium-dual-header-first-header,.premium-dual-header-second-header{position:relative;padding:0;margin:0;display:inline-block;-ms-transform:translate(0,0);-webkit-transform:translate(0,0);transform:translate(0,0)}.premium-dual-header-first-clip .premium-dual-header-first-span,.premium-dual-header-second-clip{-webkit-text-fill-color:transparent;-webkit-background-clip:text}.premium-dual-header-first-clip.stroke .premium-dual-header-first-span,.premium-dual-header-second-clip.stroke{-webkit-text-stroke-color:transparent;-webkit-text-fill-color:#fafafa;-webkit-text-stroke-width:2px}@media (max-width:500px){.premium-dual-header-first-header,.premium-dual-header-second-header{word-wrap:break-word}}.premium-dual-header-first-header.gradient .premium-dual-header-first-span,.premium-dual-header-second-header.gradient{background-size:300% 300%!important;-webkit-animation:Gradient 10s ease-in-out infinite;animation:Gradient 10s ease-in-out infinite}.premium-title-first-noise-yes .premium-dual-header-first-span{position:relative}.premium-title-first-noise-yes .premium-dual-header-first-span::before{content:attr(data-text);position:absolute;left:-2px;text-shadow:1px 0 #00f;top:0;background:0 0;overflow:hidden;clip:rect(0,900px,0,0);animation:pa-noise-anim-1 3s infinite linear alternate-reverse;width:100%;height:100%}.premium-title-first-noise-yes .premium-dual-header-first-span::after{content:attr(data-text);position:absolute;left:2px;text-shadow:-1px 0 red;top:0;background:0 0;overflow:hidden;clip:rect(0,900px,0,0);animation:pa-noise-anim-2 2s infinite linear alternate-reverse;width:100%;height:100%}.premium-title-second-noise-yes .premium-dual-header-second-header{position:relative}.premium-title-second-noise-yes .premium-dual-header-second-header::before{content:attr(data-text);position:absolute;left:-2px;text-shadow:1px 0 #00f;top:0;background:0 0;overflow:hidden;clip:rect(0,900px,0,0);animation:pa-noise-anim-1 3s infinite linear alternate-reverse;width:100%;height:100%}.premium-title-second-noise-yes .premium-dual-header-second-header::after{content:attr(data-text);position:absolute;left:2px;text-shadow:-1px 0 red;top:0;background:0 0;overflow:hidden;clip:rect(0,900px,0,0);animation:pa-noise-anim-2 2s infinite linear alternate-reverse;width:100%;height:100%}.premium-mask-yes.premium-header-inline .premium-dual-header-first-span,.premium-mask-yes.premium-header-inline .premium-dual-header-second-header,.premium-title-noise-yes.premium-header-inline .premium-dual-header-first-span,.premium-title-noise-yes.premium-header-inline .premium-dual-header-second-header{display:inline-block!important}@-webkit-keyframes Gradient{0%{background-position:100% 50%}50%{background-position:0 50%}100%{background-position:100% 50%}}@keyframes Gradient{0%{background-position:100% 50%}50%{background-position:0 50%}100%{background-position:100% 50%}}@-webkit-keyframes pa-noise-anim-1{0%{clip:rect(52px,9999px,45px,0)}5%{clip:rect(88px,9999px,39px,0)}10%{clip:rect(81px,9999px,75px,0)}15%{clip:rect(38px,9999px,42px,0)}20%{clip:rect(62px,9999px,51px,0)}25%{clip:rect(5px,9999px,36px,0)}30%{clip:rect(9px,9999px,29px,0)}35%{clip:rect(17px,9999px,85px,0)}40%{clip:rect(97px,9999px,36px,0)}45%{clip:rect(9px,9999px,31px,0)}50%{clip:rect(94px,9999px,74px,0)}55%{clip:rect(53px,9999px,75px,0)}60%{clip:rect(2px,9999px,36px,0)}65%{clip:rect(24px,9999px,56px,0)}70%{clip:rect(45px,9999px,5px,0)}75%{clip:rect(75px,9999px,21px,0)}80%{clip:rect(9px,9999px,39px,0)}85%{clip:rect(56px,9999px,89px,0)}90%{clip:rect(53px,9999px,7px,0)}95%{clip:rect(86px,9999px,84px,0)}100%{clip:rect(63px,9999px,37px,0)}}@keyframes pa-noise-anim-1{0%{clip:rect(52px,9999px,45px,0)}5%{clip:rect(88px,9999px,39px,0)}10%{clip:rect(81px,9999px,75px,0)}15%{clip:rect(38px,9999px,42px,0)}20%{clip:rect(62px,9999px,51px,0)}25%{clip:rect(5px,9999px,36px,0)}30%{clip:rect(9px,9999px,29px,0)}35%{clip:rect(17px,9999px,85px,0)}40%{clip:rect(97px,9999px,36px,0)}45%{clip:rect(9px,9999px,31px,0)}50%{clip:rect(94px,9999px,74px,0)}55%{clip:rect(53px,9999px,75px,0)}60%{clip:rect(2px,9999px,36px,0)}65%{clip:rect(24px,9999px,56px,0)}70%{clip:rect(45px,9999px,5px,0)}75%{clip:rect(75px,9999px,21px,0)}80%{clip:rect(9px,9999px,39px,0)}85%{clip:rect(56px,9999px,89px,0)}90%{clip:rect(53px,9999px,7px,0)}95%{clip:rect(86px,9999px,84px,0)}100%{clip:rect(63px,9999px,37px,0)}}@-webkit-keyframes pa-noise-anim-2{0%{clip:rect(14px,9999px,66px,0)}5%{clip:rect(19px,9999px,36px,0)}10%{clip:rect(17px,9999px,46px,0)}15%{clip:rect(46px,9999px,63px,0)}20%{clip:rect(28px,9999px,1px,0)}25%{clip:rect(64px,9999px,16px,0)}30%{clip:rect(58px,9999px,24px,0)}35%{clip:rect(18px,9999px,79px,0)}40%{clip:rect(61px,9999px,67px,0)}45%{clip:rect(63px,9999px,57px,0)}50%{clip:rect(59px,9999px,10px,0)}55%{clip:rect(20px,9999px,93px,0)}60%{clip:rect(49px,9999px,89px,0)}65%{clip:rect(70px,9999px,59px,0)}70%{clip:rect(70px,9999px,82px,0)}75%{clip:rect(82px,9999px,20px,0)}80%{clip:rect(25px,9999px,37px,0)}85%{clip:rect(76px,9999px,53px,0)}90%{clip:rect(2px,9999px,23px,0)}95%{clip:rect(9px,9999px,39px,0)}100%{clip:rect(41px,9999px,55px,0)}}@keyframes pa-noise-anim-2{0%{clip:rect(14px,9999px,66px,0)}5%{clip:rect(19px,9999px,36px,0)}10%{clip:rect(17px,9999px,46px,0)}15%{clip:rect(46px,9999px,63px,0)}20%{clip:rect(28px,9999px,1px,0)}25%{clip:rect(64px,9999px,16px,0)}30%{clip:rect(58px,9999px,24px,0)}35%{clip:rect(18px,9999px,79px,0)}40%{clip:rect(61px,9999px,67px,0)}45%{clip:rect(63px,9999px,57px,0)}50%{clip:rect(59px,9999px,10px,0)}55%{clip:rect(20px,9999px,93px,0)}60%{clip:rect(49px,9999px,89px,0)}65%{clip:rect(70px,9999px,59px,0)}70%{clip:rect(70px,9999px,82px,0)}75%{clip:rect(82px,9999px,20px,0)}80%{clip:rect(25px,9999px,37px,0)}85%{clip:rect(76px,9999px,53px,0)}90%{clip:rect(2px,9999px,23px,0)}95%{clip:rect(9px,9999px,39px,0)}100%{clip:rect(41px,9999px,55px,0)}}
/*! elementor-pro - v3.18.0 - 20-12-2023 */
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[859],{915:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class Base extends elementorModules.frontend.handlers.Base{getDefaultSettings(){return{selectors:{stickyRightColumn:".e-sticky-right-column"},classes:{stickyRightColumnActive:"e-sticky-right-column--active"}}}getDefaultElements(){const e=this.getSettings("selectors");return{$stickyRightColumn:this.$element.find(e.stickyRightColumn)}}bindEvents(){elementorFrontend.elements.$document.on("select2:open",(e=>{this.addSelect2Wrapper(e)}))}addSelect2Wrapper(e){const t=jQuery(e.target).data("select2");t.$dropdown&&t.$dropdown.addClass("e-woo-select2-wrapper")}isStickyRightColumnActive(){const e=this.getSettings("classes");return this.elements.$stickyRightColumn.hasClass(e.stickyRightColumnActive)}activateStickyRightColumn(){const e=this.getElementSettings(),t=elementorFrontend.elements.$wpAdminBar,n=this.getSettings("classes");let s=e.sticky_right_column_offset||0;t.length&&"fixed"===t.css("position")&&(s+=t.height()),"yes"===this.getElementSettings("sticky_right_column")&&(this.elements.$stickyRightColumn.addClass(n.stickyRightColumnActive),this.elements.$stickyRightColumn.css("top",s+"px"))}deactivateStickyRightColumn(){if(!this.isStickyRightColumnActive())return;const e=this.getSettings("classes");this.elements.$stickyRightColumn.removeClass(e.stickyRightColumnActive)}toggleStickyRightColumn(){this.getElementSettings("sticky_right_column")?this.isStickyRightColumnActive()||this.activateStickyRightColumn():this.deactivateStickyRightColumn()}equalizeElementHeight(e){if(e.length){e.removeAttr("style");let t=0;e.each(((e,n)=>{t=Math.max(t,n.offsetHeight)})),0{jQuery(t).prev().children("td").addClass("product-purchase-note-is-below")}))}updateWpReferers(){const e=this.getSettings("selectors"),t=this.$element.find(e.wpHttpRefererInputs),n=new URL(document.location);n.searchParams.set("elementorPageId",elementorFrontend.config.post.id),n.searchParams.set("elementorWidgetId",this.getID()),t.attr("value",n)}}t.default=Base},7649:(e,t,n)=>{var s=n(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=s(n(915));class Cart extends i.default{getDefaultSettings(){const e=super.getDefaultSettings(...arguments);return{selectors:{...e.selectors,shippingForm:".shipping-calculator-form",quantityInput:".qty",updateCartButton:"button[name=update_cart]",wpHttpRefererInputs:"[name=_wp_http_referer]",hiddenInput:"input[type=hidden]",productRemove:".product-remove a"},classes:e.classes,ajaxUrl:elementorProFrontend.config.ajaxurl}}getDefaultElements(){const e=this.getSettings("selectors");return{...super.getDefaultElements(...arguments),$shippingForm:this.$element.find(e.shippingForm),$stickyColumn:this.$element.find(e.stickyColumn),$hiddenInput:this.$element.find(e.hiddenInput)}}bindEvents(){super.bindEvents();const e=this.getSettings("selectors");elementorFrontend.elements.$body.on("wc_fragments_refreshed",(()=>this.applyButtonsHoverAnimation())),"yes"===this.getElementSettings("update_cart_automatically")&&this.$element.on("input",e.quantityInput,(()=>this.updateCart())),elementorFrontend.elements.$body.on("wc_fragments_loaded wc_fragments_refreshed",(()=>{this.updateWpReferers(),(elementorFrontend.isEditMode()||elementorFrontend.isWPPreviewMode())&&this.disableActions()})),elementorFrontend.elements.$body.on("added_to_cart",(function(e,t){if(t.e_manually_triggered)return!1}))}onInit(){super.onInit(...arguments),this.toggleStickyRightColumn(),this.hideHiddenInputsParentElements(),elementorFrontend.isEditMode()&&this.elements.$shippingForm.show(),this.applyButtonsHoverAnimation(),this.updateWpReferers(),(elementorFrontend.isEditMode()||elementorFrontend.isWPPreviewMode())&&this.disableActions()}disableActions(){const e=this.getSettings("selectors");this.$element.find(e.updateCartButton).attr({disabled:"disabled","aria-disabled":"true"}),elementorFrontend.isEditMode()&&(this.$element.find(e.quantityInput).attr("disabled","disabled"),this.$element.find(e.productRemove).css("pointer-events","none"))}onElementChange(e){"sticky_right_column"===e&&this.toggleStickyRightColumn(),"additional_template_select"===e&&elementorPro.modules.woocommerce.onTemplateIdChange("additional_template_select")}onDestroy(){super.onDestroy(...arguments),this.deactivateStickyRightColumn()}updateCart(){const e=this.getSettings("selectors");clearTimeout(this._debounce),this._debounce=setTimeout((()=>{this.$element.find(e.updateCartButton).trigger("click")}),1500)}applyButtonsHoverAnimation(){const e=this.getElementSettings();e.checkout_button_hover_animation&&jQuery(".checkout-button").addClass("elementor-animation-"+e.checkout_button_hover_animation),e.forms_buttons_hover_animation&&jQuery(".shop_table .button").addClass("elementor-animation-"+e.forms_buttons_hover_animation)}hideHiddenInputsParentElements(){this.isEdit&&this.elements.$hiddenInput&&this.elements.$hiddenInput.parent(".form-row").addClass("elementor-hidden")}}t.default=Cart}}]);/*!
* WPMU DEV Forminator UI
* Copyright 2019 Incsub (https://incsub.com)
* Licensed under GPL v3 (http://www.gnu.org/licenses/gpl-3.0.html)
*/.select2-hidden-accessible{width:1px!important;height:1px!important;overflow:hidden!important;position:absolute!important;white-space:nowrap!important;margin:-1px!important;padding:0!important;border:0!important;clip:rect(0 0 0 0)!important;clip-path:inset(50%)!important}.select2-container{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{height:28px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:block;-webkit-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container .select2-selection--multiple{min-height:32px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:block;-webkit-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-selection--multiple .select2-selection__rendered{overflow:hidden;display:inline-block;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{margin-top:5px;padding:0;border:none;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:100%}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-dropdown{width:100%;display:block;position:absolute;z-index:1051;left:-100000px;border:1px solid #aaa;border-radius:4px;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box}.select2-results{display:block}.select2-results__options{margin:0;padding:0;list-style:none}.select2-results__option{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:6px}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{width:100%;padding:4px;-webkit-box-sizing:border-box;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{width:auto;min-width:100%;height:auto;min-height:100%;opacity:0;-khtml-opacity:0;display:block;position:fixed;z-index:99;margin:0;padding:0;border:0;left:0;top:0;background-color:#fff}.select2-container--default .select2-selection--single{border:1px solid #aaa;border-radius:4px;background-color:#fff}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{width:20px;height:26px;position:absolute;top:1px;right:1px}.select2-container--default .select2-selection--single .select2-selection__arrow b{width:0;height:0;position:absolute;top:50%;left:50%;margin-left:-4px;margin-top:-2px;border-width:5px 4px 0 4px;border-style:solid;border-color:#888 transparent transparent transparent}.select2-container--default .select2-selection--multiple{cursor:text;border:1px solid #aaa;border-radius:4px;background-color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__rendered{width:100%;margin:0;padding:0 5px;-webkit-box-sizing:border-box;box-sizing:border-box;list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{float:left;margin-top:5px;color:#999}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;margin-top:5px;margin-right:10px;font-weight:700}.select2-container--default .select2-selection--multiple .select2-selection__choice{cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px;border:1px solid #aaa;border-radius:4px;background-color:#e4e4e4}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{cursor:pointer;display:inline-block;margin-right:2px;color:#999;font-weight:700}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{border:none;background:rgba(0,0,0,0);outline:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-right:auto;margin-left:5px}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-right:auto;margin-left:2px}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid #000 1px;outline:0}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default.select2-container--disabled .select2-selection--single{cursor:default;background-color:#eee}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--disabled .select2-selection--multiple{cursor:default;background-color:#eee}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(50%,#fff),to(#eee));background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;margin-right:10px;font-weight:700}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;background-color:#ddd;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(50%,#eee),to(#ccc));background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x}.select2-container--classic .select2-selection--single .select2-selection__arrow b{width:0;height:0;position:absolute;top:50%;left:50%;margin-top:-2px;margin-left:-4px;border-width:5px 4px 0 4px;border-style:solid;border-color:#888 transparent transparent transparent}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple{cursor:text;border:1px solid #aaa;border-radius:4px;outline:0;background-color:#fff}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{margin:0;padding:0 5px;list-style:none}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px;border:1px solid #aaa;border-radius:4px;background-color:#e4e4e4}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{cursor:pointer;display:inline-block;margin-right:2px;color:#888;font-weight:700}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;-webkit-box-shadow:none;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__option[aria-disabled=true]{color:gray}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{right:auto;left:1px;border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.select2-container--classic[dir=rtl] .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right;margin-right:auto;margin-left:5px}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-right:auto;margin-left:2px}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{border:none;background:rgba(0,0,0,0)}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-width:0 4px 5px 4px;border-color:transparent transparent #888 transparent}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),color-stop(50%,#eee));background-image:linear-gradient(to bottom,#fff 0,#eee 50%);background-repeat:repeat-x}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(50%,#eee),to(#fff));background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}=== Essential Blocks – AI-Powered Page Builder Gutenberg Blocks, Patterns & Templates ===
Contributors: wpdevteam, re_enter_rupok, asif2bd, rahat89, priyomukul, jamilbd07, fencermonir, sumaiyasiddika
Tags: Gutenberg, Block Editor, Gutenberg Templates, Gutenberg WooCommerce, Gutenberg Plugin
Requires at least: 5.8
Tested up to: 6.8
Requires PHP: 7.4
Stable tag: 5.4.2
License: GPLv3
License URI: https://opensource.org/licenses/GPL-3.0
Power up the Gutenberg block editor with AI, 60+ essential blocks, patterns, templates, Woo blocks, post grids, with a robust WordPress block library.
== Description ==
Bring your creative visions to life with **[Essential Blocks for Gutenberg](https://essential-blocks.com/)**, the ultimate Gutenberg blocks library for WordPress default editor!
Enhance your Gutenberg experience with 60+ unique blocks (more coming soon) and the brand‑new Write With AI feature. Add power to the block editor using our easy-to-use blocks, which are designed to make your next WordPress page or post design easier and prettier than ever before. Plus, AI helps you generate rich, high‑quality content instantly with just a few keywords.
https://youtu.be/PnZx4ZOMyzI
##DESIGN OUTSTANDING WEB PAGES WITH ADVANCED & ESSENTIAL GUTENBERG BLOCKS LIBRARY!
[See It In Action: Check out all the interactive block demos in one place.](https://essential-blocks.com/demo/)
##🤖 WRITE WITH AI - POST/PAGE CONTENT INSTANTLY
Generate engaging content for pages and posts in seconds with the Write With AI feature of Essential Blocks. Simply enter a few keywords and submit your prompt. Our built‑in AI engine will create rich, high-quality content instantly.
##✨ BLOCK PLUGIN WITH FULL CUSTOMIZATION
Each Gutenberg block comes with a bunch of options to control every possible aspect of your website design on the block editor. You can design your page with endless customization options using this amazing Gutenberg blocks plugin.
##🌐 GUTENBERG BLOCKS GLOBAL CONTROL, COLORS & TYPOGRAPHY
Now, any block can be saved with customized styling. You can also personalize the colors and typography throughout your entire website. This boosts efficiency, so you do not have to recreate the same styling repeatedly on all pages or posts.
##⚡ LIGHT WEIGHT & INSTANT LOADING
No extra resources or messy codes to slow down your website. Optimized for super fast loading and instant live editing.
##🈸 WPML CERTIFIED GUTENBERG PLUGIN
Translate Gutenberg blocks with WPML in your chosen language & offer a multilingual experience to your visitors.
##⚙️ GUTENBERG BLOCKS MODULAR CONTROL
Enable and disable individual blocks to make your page load faster and smoother. You can deactivate unnecessary blocks to keep the site lightweight.
##🚀 ASSET REGENERATION FOR FASTER GUTENBERG PAGES
Keep your website's loading speed fast and secure against heavy scripts and CSS files with the Asset Regeneration feature.
##🖊️ COMPATIBILITY WITH GOOGLE FONTS
Choose any Google Font you prefer from a collection of 1,000+ font families available using Essential Blocks. Now, you can give your websites a customized look with stunning typography.
##👁️ CONTROL BLOCKS VISIBILITY WITH CONDITIONS, LOGICS (PRO)
Apply display conditions to the blocks you've selected based on a variety of factors, including date and time, query strings, user roles, and browsers. Easily create visibility restrictions for content using the Gutenberg editor.
##🛡 UNFILTERED MEDIA FILE UPLOADS
Easily upload SVG and JSON files directly to your WordPress Media Library without hitting file type restrictions. This unlocks advanced customization possibilities, empowering you to seamlessly integrate custom animations, illustrations, and data-driven visuals into your Gutenberg experience.
##💻 RESPONSIVE ON ALL DEVICES
Directly from your Gutenberg block editor, you can control each block’s responsiveness individually. With flexible, responsive customization options, make your website user-friendly for all devices.
##💫 ADVANCED ANIMATION WITH GSAP FOR PAGE BUILDER (PRO)
With our latest exclusive feature, animation, you can design every block with a stunning animated appearance. Add smooth transitions, scroll effects and vibrant animations. Grab users’ attention instantly with eye-catching animations, transitions, and many more.
##⚡ DYNAMIC TAGS & ACF SUPPORT (PRO)
Enhance the flexibility and customization options of your Gutenberg-built website and easily add custom fields to posts, pages, or custom post types with dynamic placeholders or variables generated from various parameters or data sources.
##🖼️ READY GUTENBERG PATTERNS BUILT WITH BLOCKS
Get stunningly designed, ready-to-use Gutenberg block patterns for your WordPress website. Instantly add a block layout to Gutenberg or your site editor to make your website-building experience faster and more effective.
##🎯 STUNNING GUTENBERG TEMPLATES FOR WORDPRESS
Explore and get access to 2,000+ ready Gutenberg templates from [Templately](https://templately.com/) that were created using the default block editor and Essential Blocks. You can easily customize the fully responsive templates just the way you want, upload the designs to the Templately cloud solution to use again later, and collaborate with your team with ease.
You will find a wide variety of stunning Gutenberg website or web page templates in any niche:
- Blog & Magazine
- Celebration
- Creative
- eCommerce
- Education
- Entertainment
- Fashion & Lifestyle
- Food & Restaurant
- Health & Medical
- Multipurpose
- NFT & Crypto Currency
- Non-profit
- Portfolio & Consultancy
- Technology
- Travel… and many more.
##👨💻 EXPERT SUPPORT
We have a very friendly support team ready to help you out. Ask your questions in the support forum, we will get back to you immediately.
##60+ FREE GUTENBERG BLOCKS AND COUNTING
Design without limits in WordPress block editor, using 60+ of the most useful Essential Blocks for Gutenberg.
- **[Accordion](https://essential-blocks.com/demo/accordion/)** - Add beautiful accordions in your pages, posts, anywhere & reduce scrolling
- **[Button](https://essential-blocks.com/demo/button/)** - Quickly add modern buttons with hover effect in your post or page
- **[Call To Action](https://essential-blocks.com/demo/call-to-action/)** - Design call-to-action buttons quicker than a blink
- **[Countdown](https://essential-blocks.com/demo/countdown/)** - Include a countdown timer to boost your click-through rates
- **[Flipbox](https://essential-blocks.com/demo/flipbox/)** - Use animated Flip Boxes to highlight any content inside your page in a great way
- **[Infobox](https://essential-blocks.com/demo/infobox/)** - Design a beautiful info box from predefined styles
- **[Notice](https://essential-blocks.com/demo/notice/)** - Inform your users with specific Notice information and let them stay well aware of what’s important
- **[Pricing Table](https://essential-blocks.com/demo/pricing-table/)** - Create Pricing Tables within minutes that convert
- **[Social Icons](https://essential-blocks.com/demo/social-icons/)** - Let them share your content with different social media platforms
- **[Team Member](https://essential-blocks.com/demo/team-member/)** - Feature your team members with a few clicks
- **[Testimonial](https://essential-blocks.com/demo/testimonial/)** - Showcase what others said about your brand & Increase Your Credibility
- **[Progress Bar](https://essential-blocks.com/demo/progress-bar/)** - Display how far the specific task or still is in the process
- **[Interactive Promo](https://essential-blocks.com/demo/interactive-promo/)** - Showcase your content heading in an amazing way
- **[Image Comparison](https://essential-blocks.com/demo/image-comparison/)** - Let your viewers compare two images interactively
- **[Wrapper](https://essential-blocks.com/demo/wrapper/)** - Place any block within the wrapper and style the wrapper
- **[Instagram Feed](https://essential-blocks.com/demo/instagram-feed/)** - Display your Instagram posts beautifully
- **[Filterable Gallery](https://essential-blocks.com/demo/filterable-gallery/)** - Show your image gallery with a beautiful grid and lightbox
- **[Advanced Heading](https://essential-blocks.com/demo/advanced-heading/)** - Advanced Heading block with lots of customization options
- **[Dual Button](https://essential-blocks.com/demo/dual-button/)** - Show dual button with nice text or icon separator
- **[Parallax Slider](https://essential-blocks.com/demo/parallax-slider/)** - Create a fancy slider to showcase your team or any image gallery
- **[Typing Text](https://essential-blocks.com/demo/typing-text/)** - Design your page using Typing text with an eye-catching typing effect
- **[Toggle Content](https://essential-blocks.com/demo/toggle-content/)** - Switch content or blocks with a beautiful switcher
- **[Number Counter](https://essential-blocks.com/demo/number-counter/)** - Put the spotlight on important statistics to attract visitors
- **[Row](https://essential-blocks.com/demo/row/)** - Create complex Row layouts with plenty of styling controls & responsive options
- **[Post grid](https://essential-blocks.com/demo/post-grid/)** - Create a stunning and interactive visualization for your blogs in a grid layout with Post Grid block
- **[Table of Contents](https://essential-blocks.com/demo/table-of-content/)** - Insert Table of Contents (TOC) on your posts/pages and enhance user experience on your WordPress website
- **[Feature List](https://essential-blocks.com/demo/feature-list/)** - Display information interactively with the feature list
- **[Slider](https://essential-blocks.com/demo/slider/)** - Display all your beautiful images in the slider with motion effects and dazzle your audiences
- **[Advanced Tab](https://essential-blocks.com/demo/advanced-tab/)** - Display nested tabs to display key information on an instance in an interactive manner
- **[Fluent Forms](https://essential-blocks.com/demo/fluent-form/)** - Design your Forms container and fields and choose your preferred form layout to style Fluent Forms
- **[Advanced Image](https://essential-blocks.com/demo/advanced-image/)** - Customize images in Gutenberg to fit your exact needs
- **[WPForms](https://essential-blocks.com/demo/wpform/)** - Design stunning WPForms in minutes with plenty of controls & styling options
- **[Woo Product Grid](https://essential-blocks.com/demo/woo-product-grid)** - Display WooCommerce products with stunning layouts, buttons, x, ratings, and more
- **[Post Carousel](https://essential-blocks.com/demo/post-carousel)** - Showcase your posts creatively with an animated, dynamic carousel
- **[Advanced Video](https://essential-blocks.com/demo/advanced-video)** - Add extra styling and unique customization to your videos and amaze site visitors
- **[Advanced Navigation](https://essential-blocks.com/demo/advanced-navigation)** - Display pages & posts with easy navigation on your website with a stunning & organized appearance
- **[Popup](https://essential-blocks.com/demo/popup)** - Showcase your videos, images, or other content with popup & trigger actions
- **[NFT Gallery](https://essential-blocks.com/demo/nft-gallery)** - Display your NFT items & collections in a stunning gallery view without any coding
- **[Social Share](https://essential-blocks.com/demo/social-share)** - Share your posts & pages instantly on popular social platforms in one click from your website
- **[Openverse](https://essential-blocks.com/demo/openverse)** - Easily search & use royalty free images, stock photos, etc CC-licensed images from Openverse for your website
- **[Google Maps](https://essential-blocks.com/demo/google-maps)** - Present a fully responsive map on your website with your preferred configurations, styles, etc.
- **[Shape Divider](https://essential-blocks.com/demo/shape-divider/)** - Make your website designs stand out by showcasing different sections with stunning shape dividers
- **[Form](https://essential-blocks.com/demo/form-block/)** - Create responsive forms of any type - contact forms, RSVP forms, or subscription forms - in Gutenberg and manage easily them from your WordPress dashboard
- **[Timeline Slider (PRO)](https://essential-blocks.com/demo/timeline-slider)** - Showcase your posts & pages in an attractive timeline slider and design with stunning presets & styling options
- **[Advanced Search (PRO)](https://essential-blocks.com/demo/advanced-search)** - Let visitors find any content on your website easily with a customizable, dynamic search bar
- **[Data Table (PRO)](https://essential-blocks.com/demo/data-table/)** - Insert an advanced data table on your website without any code and display information in an eye-catching way
- **[Woo Product Carousel (PRO)](https://essential-blocks.com/demo/woo-product-carousel/)** - Display your WooCommerce products with dynamic Product Carousels and designs using limitless styling options
- **[News Ticker (PRO)](https://essential-blocks.com/demo/news-ticker)** - Show the latest news or highlights on your website with a dynamic ticker in an engaging way that instantly drives attention
- **[Fancy Chart (PRO)](https://essential-blocks.com/demo/fancy-chart)** - Design visually stunning & interactive charts to bring life to dull datasets
- **[Multicolumn Pricing Table (PRO)](https://essential-blocks.com/demo/multicolumn-pricing-table)** - Use a variety of layouts to impact your customers to choose the pricing best plan by showcasing comparison table by mentioning features, displaying icons, and so on
- **[Stacked Cards (PRO)](https://essential-blocks.com/demo/stacked-cards)** - Display your content in a unique style with the EB Stacked Cards block. With this block, you can easily make your stacked cards sticky in place and provide users an interactive experience when they scroll through your website
- **[Testimonial Slider (PRO)](https://essential-blocks.com/demo/testimonial-slider)** - Display engaging and credible customer testimonials, reviews and ratings in a sleek slider format to build trust and encourage conversions
- **[Offcanvas (PRO)](https://essential-blocks.com/demo/offcanvas/)** - Showcase a sidebar menu on your Gutenberg site using the Offcanvas block and grab visitors’ attention with various stunning transitions & effects
- **[Breadcrumbs](https://essential-blocks.com/demo/breadcrumbs/)** - Make smooth navigation for your posts or pages by adding a Breadcrumbs block.
- **[Taxonomy](https://essential-blocks.com/demo/taxonomy/)** - Display and organize content by categories, tags, product SKUs, etc. to make it easy for users to navigate.
- **[Woo Product Details](https://essential-blocks.com/demo/woo-product-details/)** - Display WooCommerce product details with an organized layout that helps grab customers' attention.
- **[Woo Product Price](https://essential-blocks.com/demo/woo-product-price/)** - Display the price of the WooCommerce product and style it using custom colors and typography.
- **[Woo Product Rating](https://essential-blocks.com/demo/woo-product-rating/)** - Display WooCommerce product ratings to build credibility among visitors and customers.
- **[Woo Product Images](https://essential-blocks.com/demo/woo-product-image/)** - Showcase eye-catching WooCommerce product images that draw in customers and are easy to customize.
- **[Woo Add to Cart](https://essential-blocks.com/demo/woo-add-to-cart/)** - Display the 'add to cart' option for all your WooCommerce products to ensure easy navigation for customers.
- **[Post Meta](https://essential-blocks.com/demo/post-meta/)** - Attractively showcase your current post metadata like author, date, excerpt & more.
- **[Text](https://essential-blocks.com/demo/text-block/)** - Add and customize text content on your website that catches the attention of the visitors.
- **[Lottie Animation](https://essential-blocks.com/demo/lottie-animation/)** - Add LottiFiles Animations to your Gutenberg site seamlessly and customize how you want it to appear.
More Gutenberg blocks and demos coming soon for the block visual editor (weekly update)
## 📄 SUPPORT & DOCUMENTATION
- If you have any more questions, visit our support on the **[Plugin’s Forum](https://wordpress.org/support/plugin/essential-blocks/)**.
- Find out how to use each Gutenberg block with our **[detailed documentation](https://essential-blocks.com/docs/)**.
- For information about our features, FAQs and more, check out our website at **[Essential Blocks for Gutenberg](https://essential-blocks.com/)**.
##🏆 GET ACCESS TO EASY & ESSENTIAL GUTENBERG TUTORIALS
Learn from our video tutorials available on our **[Youtube Channel](https://www.youtube.com/c/WPDeveloperNet)**.
##LIKED ESSENTIAL BLOCKS?
Join our **[Facebook Group](https://www.facebook.com/groups/432798227512253/)**.
Or rate us on **[WordPress](https://wordpress.org/support/plugin/essential-blocks/reviews/?rate=5#new-post)**. 😊
##CONTRIBUTE
The full source code is available on [GitHub Repository](https://github.com/WPDevelopers/essential-blocks-for-gutenberg). Feel free to contribute or report an issue.
##🔥 WHAT’S NEXT?
If you like Essential Blocks, then consider checking out our other WordPress Plugins:
🎨**[ Templately](https://wordpress.org/plugins/templately/)** – Ultimate templates cloud for WordPress with hundreds of ready Gutenberg website layout designs and unique cloud collaboration features.
🔔**[ NotificationX](https://wordpress.org/plugins/notificationx/)**– Best social proof & FOMO marketing solution to boost conversions & designing stunning WordPress notification bars.
🗒️ **[BetterDocs](https://wordpress.org/plugins/betterdocs/)** – Best documentation & knowledge base plugin for WordPress to help you reduce support tickets
⏰ **[SchedulePress](https://wordpress.org/plugins/wp-scheduled-posts/)** – Complete solution for managing WordPress content scheduling through an editorial calendar & social share
📌 **[EmbedPress](https://wordpress.org/plugins/embedpress/)** – Easiest WordPress solution for embedding videos, images, posts, audio, maps and PDF, DOC, PPT & all other types of content into your website using Gutenberg.
🔗 **[BetterLinks](https://wordpress.org/plugins/betterlinks/)** – Advanced WordPress link management plugin for link shortening, tracking & analyzing with Instant Redirect for Gutenberg.
== Installation ==
**Note:** Since Essential Blocks is a Gutenberg library, you must activate Gutenberg editor to use it.
1. Go to your WordPress Dashboard and navigate to wp-admin -> Plugins -> Add New. Search for **Essential Blocks for Gutenberg**. Then simply click on the **Install Now** button.
2. Now click on **Activate** button to activate the plugin.
3. That’s it. You can access all blocks easily from Gutenberg editor.
Or,
1. You can download the plugin by clicking the **Download** button from **[Essential Blocks for Gutenberg](https://wordpress.org/plugins/essential-blocks/)**
2. Then go to wp-admin -> Plugins -> Add New and click on the **Upload Plugin**.
3. The plugin will be instantly installed & activated on your website.
For more detailed instructions, visit [Essential Blocks Installation Guideline](https://essential-blocks.com/docs/how-to-install-essential-blocks/). Also, check out a quick video tutorial from [Essential Blocks YouTube](https://www.youtube.com/playlist?list=PLWHp1xKHCfxAk6IzUeT_jvBDjiPghKJbe).
== Frequently Asked Questions ==
= How to insert blocks of Essential Blocks in your page or post? =
Install and activate Essential Blocks for Gutenberg on your website. Create a new page and click the ‘+’ sign, and you will find all the creative Gutenberg blocks there. Now click on the block you want to insert in your page and create amazing pages.
= How to save a block as a reusable block? =
You can save any block from Essential Blocks for Gutenberg as a reusable block easily. Click on any block you want to save as reusable, then click on the ‘Add to reusable blocks,’ and instantly, that block will be converted into a reusable block.
= What themes do Essential Blocks For Gutenberg support? =
Essential Blocks for Gutenberg has no theme dependency. This Gutenberg blocks plugin is compatible with any updated WordPress theme.
= Will Essential Blocks slow down my website speed? =
No, Essential Blocks will not slow down your website. This Gutenberg blocks plugin brings you the outstanding facility of complete modular control over the activation of each individual block. We have also used optimized codes for this plugin which helps to load only the resources that are currently used.
= I do not know how to code. Can I still use Essential Blocks? =
Yes, you can still use Essential Blocks. These Gutenberg blocks are created in such a way that you can use them and customize them without code.
= What other page builders can I use with this plugin? =
You can only use Essential Blocks with the Gutenberg editor. It does not support any other website builder or editor.
= Is Essential Blocks Responsive for Smaller Devices? =
Also, the Gutenberg blocks available with Essential Blocks plugin are 100% responsive and have cross-browser compatibility. So it is responsive on smaller devices as well.
= What is the best way to check for plugin conflicts on my website? =
Uninstall all plugins on your website except Essential Blocks for Gutenberg. Then check if any conflict is still occurring or not. If you encounter conflicts, then contact our support team.
= How to apply custom CSS to my blocks? =
If you want to apply custom CSS with Essential Blocks for Gutenberg, then click on the specific block you want to add CSS code to. Then navigate to the ‘Advanced’ tab and add your custom CSS code. You have to create a class first and then add your custom CSS.
= How can I get ready templates for Essential Blocks? =
If you want to skip customizing each essential block on your own, you can use ready templates to create stunning blocks. You will receive access to elegant and sleek, ready templates for Essential Blocks and Gutenberg with the Templately plugin.
= Can I get ready Gutenberg patterns from Essential Blocks? =
Yes, Essential Blocks provides you with a ready, professionally designed Gutenberg pattern.
= Does Essential Blocks has any plugin dependency? =
You only need the Gutenberg block editor to use Essential Blocks plugin on your WordPress website. Then you can use Essential Blocks and create stunning pages.
= Does Essential Blocks provide any WooCommerce blocks for Gutenberg? =
Yes, you can effortlessly display your WooCommerce products on your store website using Woo Product Grid Block from Essential Blocks. More blocks are coming soon.
= What should I do to use an earlier version of Essential Blocks? =
If you found the recent version of Essential Blocks isn’t working or conflicting with other plugins, then you can use earlier versions of the plugin.
== Changelog ==
= 5.4.2 - 01/06/2025 =
- Added: Infobox | Link option added for the title
- Fixed: Dual Button | Button gap issue on Preset 4
- Improved: Security enhancement
- Few minor bug fixes & improvements
= 5.4.1 - 19/05/2025 =
- Added: SVG image support
- Added: Popup Block | Open popup on scroll trigger
- Improved: Security enhancements
- Few minor bug fixes & improvements
= 5.4.0 - 08/05/2025 =
- Added: Write with AI feature
- Added: Form Block | “Reply-To” option in form settings
- Added: Product Image | Controls to enable/disable zoom effect
- Improved: Global Settings | Custom color opacity option and reset issue
- Improved: Slider Block | Sliding items sorting option and image preview added
- Improved: Accordion Block | Title edit panel opens on click in editor
- Fixed: Image Comparison Block | Not working in editor since 5.3.5
- Fixed: Advanced Video Block | Responsive issue on iPhone
- Fixed: Slider Block | Slideshow block displays truncated images on initial load
- Few minor bug fixes & improvements
= 5.3.5 - 23/04/2025 =
- Added: Quick Setup Wizard
- Fixed: Advanced Tabs | Conflict with Spectra Image Gallery
- Few minor bug fixes and improvements
= 5.3.4 - 15/04/2025 =
- Fixed: FSE throws error in Firefox
- Fixed: Slider | Adaptive height getting enabled on page reload
- Fixed: Popup | Popup block conflict with WPForms
- Few minor bug fixes & improvements
= 5.3.3 - 24/03/2025 =
- Added: Form | Min-Max value support for number field
- Fixed: Popup | Page not scrolling properly after closing popup
- Fixed: Woo Product Grid | Added option to show/hide product category
- Fixed: Filterable Gallery | Extra border appearing on focused image
- Few minor bug fixes & improvements
= 5.3.2 - 05/03/2025 =
- Added: Quick Action Toolbar | Easily access most-used blocks
- Added: Woo Product Grid | Display product category option
- Fixed: Slider | RTL issues fixed
- Fixed: Advanced Tab | Active tab not displaying properly in editor
- Fixed: Filterable Gallery | Conflict with Autoptimize Lazyload
- Fixed: Toggle Content | Multiple blocks not supported inside toggle content
- Improved: Security enhancements
- Few minor bug fixes & improvements
= 5.3.1 - 26/02/2025 =
- Added: Global Styles | Separate ‘Save’ and ‘Reset’ options
- Fixed: Global Styles | Automatically resetting issue
- Fixed: Filterable Gallery | Stacking issue with popup
- Added: Popup | Option to prevent background page scroll when popup is open
- Few minor bug fixes & improvements
= 5.3.0 - 18/02/2025 =
- Added: New Block | Lottie Animation
- Fixed: Table of Contents | Design issue fixes
- Fixed: Progress Bar | Display Alternate Value Based on Percentage Setting
- Fixed: Advanced Image | Image height getting reset
- Fixed: Toggle Content | Design control for active item and other design improvements
- Fixed: Advanced Heading | Background overlay over title
- Fixed: Editor broken and shows error after update plugin
- Fixed: Blocks patterns cache update cron broken
- Fixed: Reset control for Box Shadow
- Improved: Security Enhancement
- Few minor bug fixes & improvements
[See changelog for all versions](https://essential-blocks.com/changelog).
== Upgrade Notice ==
= 5.0.0 =
- Introducing 5 New WooCommerce Blocks along with Taxonomy, Text, Post Meta, Breadcrumbs to enhance your Full Site Editing Experience
/*! elementor - v3.27.0 - 18-02-2025 */
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "../app/assets/js/event-track/apps-event-tracking.js":
/*!***********************************************************!*\
!*** ../app/assets/js/event-track/apps-event-tracking.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.appsEventTrackingDispatch = void 0;
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
var appsEventTrackingDispatch = exports.appsEventTrackingDispatch = function appsEventTrackingDispatch(command, eventParams) {
// Add existing eventParams key value pair to the data/details object.
var objectCreator = function objectCreator(array, obj) {
var _iterator = _createForOfIteratorHelper(array),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var key = _step.value;
if (eventParams.hasOwnProperty(key) && eventParams[key] !== null) {
obj[key] = eventParams[key];
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
return obj;
};
var dataKeys = [];
var detailsKeys = ['layout', 'site_part', 'error', 'document_name', 'document_type', 'view_type_clicked', 'tag', 'sort_direction', 'sort_type', 'action', 'grid_location', 'kit_name', 'page_source', 'element_position', 'element', 'event_type', 'modal_type', 'method', 'status', 'step', 'item', 'category', 'element_location', 'search_term', 'section', 'site_area'];
var data = {};
var details = {};
var init = function init() {
objectCreator(detailsKeys, details);
objectCreator(dataKeys, data);
var commandSplit = command.split('/');
data.placement = commandSplit[0];
data.event = commandSplit[1];
// If 'details' is not empty, add the details object to the data object.
if (Object.keys(details).length) {
data.details = details;
}
};
init();
$e.run(command, data);
};
/***/ }),
/***/ "../assets/dev/js/utils/react.js":
/*!***************************************!*\
!*** ../assets/dev/js/utils/react.js ***!
\***************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "react"));
var ReactDOM = _interopRequireWildcard(__webpack_require__(/*! react-dom */ "react-dom"));
var _client = __webpack_require__(/*! react-dom/client */ "../node_modules/react-dom/client.js");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
/**
* Support conditional rendering of a React App to the DOM, based on the React version.
* We use `createRoot` when available, but fallback to `ReactDOM.render` for older versions.
*
* @param { React.ReactElement } app The app to render.
* @param { HTMLElement } domElement The DOM element to render the app into.
*
* @return {{ unmount: () => void }} The unmount function.
*/
function render(app, domElement) {
var unmountFunction;
try {
var root = (0, _client.createRoot)(domElement);
root.render(app);
unmountFunction = function unmountFunction() {
root.unmount();
};
} catch (e) {
// eslint-disable-next-line react/no-deprecated
ReactDOM.render(app, domElement);
unmountFunction = function unmountFunction() {
// eslint-disable-next-line react/no-deprecated
ReactDOM.unmountComponentAtNode(domElement);
};
}
return {
unmount: unmountFunction
};
}
var _default = exports["default"] = {
render: render
};
/***/ }),
/***/ "../modules/announcements/assets/js/components/Announcement.js":
/*!*********************************************************************!*\
!*** ../modules/announcements/assets/js/components/Announcement.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = Announcement;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"));
var _ = __webpack_require__(/*! ./ */ "../modules/announcements/assets/js/components/index.js");
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
var _excluded = ["cta"];
function Announcement(props) {
var announcement = props.announcement,
onClose = props.onClose;
var cta = announcement.cta,
announcementContent = (0, _objectWithoutProperties2.default)(announcement, _excluded);
return /*#__PURE__*/_react.default.createElement("div", {
className: "announcement-item"
}, /*#__PURE__*/_react.default.createElement(_.AnnouncementBody, {
announcement: announcementContent
}), /*#__PURE__*/_react.default.createElement(_.AnnouncementFooter, {
buttons: cta,
onClose: onClose
}));
}
Announcement.propTypes = {
announcement: _propTypes.default.object.isRequired,
onClose: _propTypes.default.func.isRequired
};
/***/ }),
/***/ "../modules/announcements/assets/js/components/AnnouncementBody.js":
/*!*************************************************************************!*\
!*** ../modules/announcements/assets/js/components/AnnouncementBody.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = AnnouncementBody;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
function AnnouncementBody(props) {
var _props$announcement = props.announcement,
title = _props$announcement.title,
description = _props$announcement.description,
media = _props$announcement.media;
return /*#__PURE__*/_react.default.createElement("div", {
className: "announcement-body-container"
}, 'image' === media.type && /*#__PURE__*/_react.default.createElement("div", {
className: "announcement-body-media announcement-body-".concat(media.type)
}, /*#__PURE__*/_react.default.createElement("img", {
src: media.src,
alt: "Announcement"
})), /*#__PURE__*/_react.default.createElement("div", {
className: "announcement-body-content"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "announcement-body-title"
}, title), /*#__PURE__*/_react.default.createElement("div", {
className: "announcement-body-description",
dangerouslySetInnerHTML: {
__html: description
}
})));
}
AnnouncementBody.propTypes = {
announcement: _propTypes.default.object.isRequired
};
/***/ }),
/***/ "../modules/announcements/assets/js/components/AnnouncementFooter.js":
/*!***************************************************************************!*\
!*** ../modules/announcements/assets/js/components/AnnouncementFooter.js ***!
\***************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = AnnouncementFooter;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
function AnnouncementFooter(props) {
var buttons = props.buttons,
onClose = props.onClose;
return /*#__PURE__*/_react.default.createElement("div", {
className: "announcement-footer-container"
}, Object.values(buttons).map(function (button, index) {
return /*#__PURE__*/_react.default.createElement("a", {
key: "button".concat(index),
className: "button-item ".concat(button.variant),
href: button.url,
target: button.target,
onClick: function onClick() {
return onClose('cta');
}
}, button.label);
}));
}
AnnouncementFooter.propTypes = {
buttons: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.object]),
onClose: _propTypes.default.func.isRequired
};
/***/ }),
/***/ "../modules/announcements/assets/js/components/Announcements.js":
/*!**********************************************************************!*\
!*** ../modules/announcements/assets/js/components/Announcements.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = Announcements;
var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react"));
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"));
var _ = __webpack_require__(/*! ./ */ "../modules/announcements/assets/js/components/index.js");
var _appsEventTracking = __webpack_require__(/*! elementor-app/event-track/apps-event-tracking */ "../app/assets/js/event-track/apps-event-tracking.js");
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function Announcements(props) {
var announcements = props.announcements,
unMount = props.unMount;
var _useState = (0, _react.useState)(0),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
currentAnnouncement = _useState2[0],
setCurrentAnnouncement = _useState2[1];
var announcementTitle = Object.values(announcements)[0].title || '';
// Send event when the popup is presented
(0, _react.useEffect)(function () {
var timer = setTimeout(function () {
var eventArgs = {
event_name: 'element_impression',
element_type: 'popup',
eventNonInteraction: 1
};
eventTrackingHandle('impression', eventArgs);
}, 200);
return function () {
return clearTimeout(timer);
};
}, [announcements]);
var onCloseHandle = function onCloseHandle(eventName) {
var eventArgs = {
event_name: 'element_click',
element_type: 'button'
};
eventTrackingHandle(eventName, eventArgs);
announcements.shift();
if (0 === announcements.length) {
return unMount();
}
setCurrentAnnouncement(currentAnnouncement + 1);
};
var eventTrackingHandle = function eventTrackingHandle(eventName, additionalArgs) {
var eventBaseArgs = {
event: 'fireEvent',
eventCategory: 'editor',
eventAction: 'whats new popup',
eventLabel: eventName,
eventLabel2: announcementTitle,
event_action: eventName,
event_location: 'popup',
event_context: 'whats new',
event_subcontext: announcementTitle,
element_id: 'e-announcements-root'
};
var eventArgs = _objectSpread(_objectSpread({}, eventBaseArgs), additionalArgs);
(0, _appsEventTracking.appsEventTrackingDispatch)("announcement/".concat(eventName), eventArgs);
};
return /*#__PURE__*/_react.default.createElement("div", {
className: "announcements-container"
}, /*#__PURE__*/_react.default.createElement(_.AnnouncementsHeader, {
onClose: onCloseHandle
}), /*#__PURE__*/_react.default.createElement(_.Announcement, {
key: "announcement-".concat(currentAnnouncement),
announcement: announcements[0],
onClose: onCloseHandle
}));
}
Announcements.propTypes = {
announcements: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.object]).isRequired,
unMount: _propTypes.default.func.isRequired
};
/***/ }),
/***/ "../modules/announcements/assets/js/components/AnnouncementsHeader.js":
/*!****************************************************************************!*\
!*** ../modules/announcements/assets/js/components/AnnouncementsHeader.js ***!
\****************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = AnnouncementsHeader;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
function AnnouncementsHeader(props) {
var onClose = props.onClose;
return /*#__PURE__*/_react.default.createElement("div", {
className: "announcements-heading-container"
}, /*#__PURE__*/_react.default.createElement("i", {
className: "eicon-elementor",
"aria-hidden": "true"
}), /*#__PURE__*/_react.default.createElement("span", {
className: "heading-title"
}, __('Notifications', 'elementor')), /*#__PURE__*/_react.default.createElement("button", {
className: "close-button",
onClick: function onClick() {
return onClose('close');
}
}, /*#__PURE__*/_react.default.createElement("i", {
className: "eicon-close",
"aria-hidden": "true"
})));
}
AnnouncementsHeader.propTypes = {
onClose: _propTypes.default.func.isRequired
};
/***/ }),
/***/ "../modules/announcements/assets/js/components/Overlay.js":
/*!****************************************************************!*\
!*** ../modules/announcements/assets/js/components/Overlay.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = Overlay;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
function Overlay() {
return /*#__PURE__*/_react.default.createElement("div", {
className: "announcements-screen-overlay"
});
}
/***/ }),
/***/ "../modules/announcements/assets/js/components/index.js":
/*!**************************************************************!*\
!*** ../modules/announcements/assets/js/components/index.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
Object.defineProperty(exports, "Announcement", ({
enumerable: true,
get: function get() {
return _Announcement.default;
}
}));
Object.defineProperty(exports, "AnnouncementBody", ({
enumerable: true,
get: function get() {
return _AnnouncementBody.default;
}
}));
Object.defineProperty(exports, "AnnouncementFooter", ({
enumerable: true,
get: function get() {
return _AnnouncementFooter.default;
}
}));
Object.defineProperty(exports, "Announcements", ({
enumerable: true,
get: function get() {
return _Announcements.default;
}
}));
Object.defineProperty(exports, "AnnouncementsHeader", ({
enumerable: true,
get: function get() {
return _AnnouncementsHeader.default;
}
}));
Object.defineProperty(exports, "Overlay", ({
enumerable: true,
get: function get() {
return _Overlay.default;
}
}));
var _Announcements = _interopRequireDefault(__webpack_require__(/*! ./Announcements */ "../modules/announcements/assets/js/components/Announcements.js"));
var _Announcement = _interopRequireDefault(__webpack_require__(/*! ./Announcement */ "../modules/announcements/assets/js/components/Announcement.js"));
var _AnnouncementsHeader = _interopRequireDefault(__webpack_require__(/*! ./AnnouncementsHeader */ "../modules/announcements/assets/js/components/AnnouncementsHeader.js"));
var _AnnouncementBody = _interopRequireDefault(__webpack_require__(/*! ./AnnouncementBody */ "../modules/announcements/assets/js/components/AnnouncementBody.js"));
var _AnnouncementFooter = _interopRequireDefault(__webpack_require__(/*! ./AnnouncementFooter */ "../modules/announcements/assets/js/components/AnnouncementFooter.js"));
var _Overlay = _interopRequireDefault(__webpack_require__(/*! ./Overlay */ "../modules/announcements/assets/js/components/Overlay.js"));
/***/ }),
/***/ "../modules/announcements/assets/js/e-component.js":
/*!*********************************************************!*\
!*** ../modules/announcements/assets/js/e-component.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
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 _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"));
var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"));
var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"));
var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"));
var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"));
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
var EComponent = exports["default"] = /*#__PURE__*/function (_$e$modules$Component) {
function EComponent() {
(0, _classCallCheck2.default)(this, EComponent);
return _callSuper(this, EComponent, arguments);
}
(0, _inherits2.default)(EComponent, _$e$modules$Component);
return (0, _createClass2.default)(EComponent, [{
key: "getNamespace",
value:
/**
* @return {string} The namespace of the component
*/
function getNamespace() {
return 'announcement';
}
}, {
key: "defaultCommands",
value: function defaultCommands() {
return ['close', 'cta', 'impression'].reduce(function (allCommands, command) {
return _objectSpread(_objectSpread({}, allCommands), {}, (0, _defineProperty2.default)({}, command, function () {}));
}, {});
}
}]);
}($e.modules.ComponentBase);
/***/ }),
/***/ "../node_modules/object-assign/index.js":
/*!**********************************************!*\
!*** ../node_modules/object-assign/index.js ***!
\**********************************************/
/***/ ((module) => {
"use strict";
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/
/* eslint-disable no-unused-vars */
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
function toObject(val) {
if (val === null || val === undefined) {
throw new TypeError('Object.assign cannot be called with null or undefined');
}
return Object(val);
}
function shouldUseNative() {
try {
if (!Object.assign) {
return false;
}
// Detect buggy property enumeration order in older V8 versions.
// https://bugs.chromium.org/p/v8/issues/detail?id=4118
var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
test1[5] = 'de';
if (Object.getOwnPropertyNames(test1)[0] === '5') {
return false;
}
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
var test2 = {};
for (var i = 0; i < 10; i++) {
test2['_' + String.fromCharCode(i)] = i;
}
var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
return test2[n];
});
if (order2.join('') !== '0123456789') {
return false;
}
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
var test3 = {};
'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
test3[letter] = letter;
});
if (Object.keys(Object.assign({}, test3)).join('') !==
'abcdefghijklmnopqrst') {
return false;
}
return true;
} catch (err) {
// We don't expect any of the above to throw, but better to be safe.
return false;
}
}
module.exports = shouldUseNative() ? Object.assign : function (target, source) {
var from;
var to = toObject(target);
var symbols;
for (var s = 1; s < arguments.length; s++) {
from = Object(arguments[s]);
for (var key in from) {
if (hasOwnProperty.call(from, key)) {
to[key] = from[key];
}
}
if (getOwnPropertySymbols) {
symbols = getOwnPropertySymbols(from);
for (var i = 0; i < symbols.length; i++) {
if (propIsEnumerable.call(from, symbols[i])) {
to[symbols[i]] = from[symbols[i]];
}
}
}
}
return to;
};
/***/ }),
/***/ "../node_modules/prop-types/checkPropTypes.js":
/*!****************************************************!*\
!*** ../node_modules/prop-types/checkPropTypes.js ***!
\****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var printWarning = function() {};
if (true) {
var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "../node_modules/prop-types/lib/ReactPropTypesSecret.js");
var loggedTypeFailures = {};
var has = __webpack_require__(/*! ./lib/has */ "../node_modules/prop-types/lib/has.js");
printWarning = function(text) {
var message = 'Warning: ' + text;
if (typeof console !== 'undefined') {
console.error(message);
}
try {
// --- Welcome to debugging React ---
// This error was thrown as a convenience so that you can use this stack
// to find the callsite that caused this warning to fire.
throw new Error(message);
} catch (x) { /**/ }
};
}
/**
* Assert that the values match with the type specs.
* Error messages are memorized and will only be shown once.
*
* @param {object} typeSpecs Map of name to a ReactPropType
* @param {object} values Runtime values that need to be type-checked
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @private
*/
function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
if (true) {
for (var typeSpecName in typeSpecs) {
if (has(typeSpecs, typeSpecName)) {
var error;
// Prop type validation may throw. In case they do, we don't want to
// fail the render phase where it didn't fail before. So we log it.
// After these have been cleaned up, we'll let them throw.
try {
// This is intentionally an invariant that gets caught. It's the same
// behavior as without this statement except with a better message.
if (typeof typeSpecs[typeSpecName] !== 'function') {
var err = Error(
(componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +
'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'
);
err.name = 'Invariant Violation';
throw err;
}
error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
} catch (ex) {
error = ex;
}
if (error && !(error instanceof Error)) {
printWarning(
(componentName || 'React class') + ': type specification of ' +
location + ' `' + typeSpecName + '` is invalid; the type checker ' +
'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
'You may have forgotten to pass an argument to the type checker ' +
'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
'shape all require an argument).'
);
}
if (error instanceof Error && !(error.message in loggedTypeFailures)) {
// Only monitor this failure once because there tends to be a lot of the
// same error.
loggedTypeFailures[error.message] = true;
var stack = getStack ? getStack() : '';
printWarning(
'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
);
}
}
}
}
}
/**
* Resets warning cache when testing.
*
* @private
*/
checkPropTypes.resetWarningCache = function() {
if (true) {
loggedTypeFailures = {};
}
}
module.exports = checkPropTypes;
/***/ }),
/***/ "../node_modules/prop-types/factoryWithTypeCheckers.js":
/*!*************************************************************!*\
!*** ../node_modules/prop-types/factoryWithTypeCheckers.js ***!
\*************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var ReactIs = __webpack_require__(/*! react-is */ "../node_modules/prop-types/node_modules/react-is/index.js");
var assign = __webpack_require__(/*! object-assign */ "../node_modules/object-assign/index.js");
var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "../node_modules/prop-types/lib/ReactPropTypesSecret.js");
var has = __webpack_require__(/*! ./lib/has */ "../node_modules/prop-types/lib/has.js");
var checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ "../node_modules/prop-types/checkPropTypes.js");
var printWarning = function() {};
if (true) {
printWarning = function(text) {
var message = 'Warning: ' + text;
if (typeof console !== 'undefined') {
console.error(message);
}
try {
// --- Welcome to debugging React ---
// This error was thrown as a convenience so that you can use this stack
// to find the callsite that caused this warning to fire.
throw new Error(message);
} catch (x) {}
};
}
function emptyFunctionThatReturnsNull() {
return null;
}
module.exports = function(isValidElement, throwOnDirectAccess) {
/* global Symbol */
var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
/**
* Returns the iterator method function contained on the iterable object.
*
* Be sure to invoke the function with the iterable as context:
*
* var iteratorFn = getIteratorFn(myIterable);
* if (iteratorFn) {
* var iterator = iteratorFn.call(myIterable);
* ...
* }
*
* @param {?object} maybeIterable
* @return {?function}
*/
function getIteratorFn(maybeIterable) {
var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
if (typeof iteratorFn === 'function') {
return iteratorFn;
}
}
/**
* Collection of methods that allow declaration and validation of props that are
* supplied to React components. Example usage:
*
* var Props = require('ReactPropTypes');
* var MyArticle = React.createClass({
* propTypes: {
* // An optional string prop named "description".
* description: Props.string,
*
* // A required enum prop named "category".
* category: Props.oneOf(['News','Photos']).isRequired,
*
* // A prop named "dialog" that requires an instance of Dialog.
* dialog: Props.instanceOf(Dialog).isRequired
* },
* render: function() { ... }
* });
*
* A more formal specification of how these methods are used:
*
* type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
* decl := ReactPropTypes.{type}(.isRequired)?
*
* Each and every declaration produces a function with the same signature. This
* allows the creation of custom validation functions. For example:
*
* var MyLink = React.createClass({
* propTypes: {
* // An optional string or URI prop named "href".
* href: function(props, propName, componentName) {
* var propValue = props[propName];
* if (propValue != null && typeof propValue !== 'string' &&
* !(propValue instanceof URI)) {
* return new Error(
* 'Expected a string or an URI for ' + propName + ' in ' +
* componentName
* );
* }
* }
* },
* render: function() {...}
* });
*
* @internal
*/
var ANONYMOUS = '<>';
// Important!
// Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
var ReactPropTypes = {
array: createPrimitiveTypeChecker('array'),
bigint: createPrimitiveTypeChecker('bigint'),
bool: createPrimitiveTypeChecker('boolean'),
func: createPrimitiveTypeChecker('function'),
number: createPrimitiveTypeChecker('number'),
object: createPrimitiveTypeChecker('object'),
string: createPrimitiveTypeChecker('string'),
symbol: createPrimitiveTypeChecker('symbol'),
any: createAnyTypeChecker(),
arrayOf: createArrayOfTypeChecker,
element: createElementTypeChecker(),
elementType: createElementTypeTypeChecker(),
instanceOf: createInstanceTypeChecker,
node: createNodeChecker(),
objectOf: createObjectOfTypeChecker,
oneOf: createEnumTypeChecker,
oneOfType: createUnionTypeChecker,
shape: createShapeTypeChecker,
exact: createStrictShapeTypeChecker,
};
/**
* inlined Object.is polyfill to avoid requiring consumers ship their own
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
*/
/*eslint-disable no-self-compare*/
function is(x, y) {
// SameValue algorithm
if (x === y) {
// Steps 1-5, 7-10
// Steps 6.b-6.e: +0 != -0
return x !== 0 || 1 / x === 1 / y;
} else {
// Step 6.a: NaN == NaN
return x !== x && y !== y;
}
}
/*eslint-enable no-self-compare*/
/**
* We use an Error-like object for backward compatibility as people may call
* PropTypes directly and inspect their output. However, we don't use real
* Errors anymore. We don't inspect their stack anyway, and creating them
* is prohibitively expensive if they are created too often, such as what
* happens in oneOfType() for any type before the one that matched.
*/
function PropTypeError(message, data) {
this.message = message;
this.data = data && typeof data === 'object' ? data: {};
this.stack = '';
}
// Make `instanceof Error` still work for returned errors.
PropTypeError.prototype = Error.prototype;
function createChainableTypeChecker(validate) {
if (true) {
var manualPropTypeCallCache = {};
var manualPropTypeWarningCount = 0;
}
function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
componentName = componentName || ANONYMOUS;
propFullName = propFullName || propName;
if (secret !== ReactPropTypesSecret) {
if (throwOnDirectAccess) {
// New behavior only for users of `prop-types` package
var err = new Error(
'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
'Use `PropTypes.checkPropTypes()` to call them. ' +
'Read more at http://fb.me/use-check-prop-types'
);
err.name = 'Invariant Violation';
throw err;
} else if ( true && typeof console !== 'undefined') {
// Old behavior for people using React.PropTypes
var cacheKey = componentName + ':' + propName;
if (
!manualPropTypeCallCache[cacheKey] &&
// Avoid spamming the console because they are often not actionable except for lib authors
manualPropTypeWarningCount < 3
) {
printWarning(
'You are manually calling a React.PropTypes validation ' +
'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +
'and will throw in the standalone `prop-types` package. ' +
'You may be seeing this warning due to a third-party PropTypes ' +
'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
);
manualPropTypeCallCache[cacheKey] = true;
manualPropTypeWarningCount++;
}
}
}
if (props[propName] == null) {
if (isRequired) {
if (props[propName] === null) {
return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
}
return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
}
return null;
} else {
return validate(props, propName, componentName, location, propFullName);
}
}
var chainedCheckType = checkType.bind(null, false);
chainedCheckType.isRequired = checkType.bind(null, true);
return chainedCheckType;
}
function createPrimitiveTypeChecker(expectedType) {
function validate(props, propName, componentName, location, propFullName, secret) {
var propValue = props[propName];
var propType = getPropType(propValue);
if (propType !== expectedType) {
// `propValue` being instance of, say, date/regexp, pass the 'object'
// check, but we can offer a more precise error message here rather than
// 'of type `object`'.
var preciseType = getPreciseType(propValue);
return new PropTypeError(
'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),
{expectedType: expectedType}
);
}
return null;
}
return createChainableTypeChecker(validate);
}
function createAnyTypeChecker() {
return createChainableTypeChecker(emptyFunctionThatReturnsNull);
}
function createArrayOfTypeChecker(typeChecker) {
function validate(props, propName, componentName, location, propFullName) {
if (typeof typeChecker !== 'function') {
return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
}
var propValue = props[propName];
if (!Array.isArray(propValue)) {
var propType = getPropType(propValue);
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
}
for (var i = 0; i < propValue.length; i++) {
var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
if (error instanceof Error) {
return error;
}
}
return null;
}
return createChainableTypeChecker(validate);
}
function createElementTypeChecker() {
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
if (!isValidElement(propValue)) {
var propType = getPropType(propValue);
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
}
return null;
}
return createChainableTypeChecker(validate);
}
function createElementTypeTypeChecker() {
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
if (!ReactIs.isValidElementType(propValue)) {
var propType = getPropType(propValue);
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
}
return null;
}
return createChainableTypeChecker(validate);
}
function createInstanceTypeChecker(expectedClass) {
function validate(props, propName, componentName, location, propFullName) {
if (!(props[propName] instanceof expectedClass)) {
var expectedClassName = expectedClass.name || ANONYMOUS;
var actualClassName = getClassName(props[propName]);
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
}
return null;
}
return createChainableTypeChecker(validate);
}
function createEnumTypeChecker(expectedValues) {
if (!Array.isArray(expectedValues)) {
if (true) {
if (arguments.length > 1) {
printWarning(
'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
);
} else {
printWarning('Invalid argument supplied to oneOf, expected an array.');
}
}
return emptyFunctionThatReturnsNull;
}
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
for (var i = 0; i < expectedValues.length; i++) {
if (is(propValue, expectedValues[i])) {
return null;
}
}
var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
var type = getPreciseType(value);
if (type === 'symbol') {
return String(value);
}
return value;
});
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
}
return createChainableTypeChecker(validate);
}
function createObjectOfTypeChecker(typeChecker) {
function validate(props, propName, componentName, location, propFullName) {
if (typeof typeChecker !== 'function') {
return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
}
var propValue = props[propName];
var propType = getPropType(propValue);
if (propType !== 'object') {
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
}
for (var key in propValue) {
if (has(propValue, key)) {
var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
if (error instanceof Error) {
return error;
}
}
}
return null;
}
return createChainableTypeChecker(validate);
}
function createUnionTypeChecker(arrayOfTypeCheckers) {
if (!Array.isArray(arrayOfTypeCheckers)) {
true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : 0;
return emptyFunctionThatReturnsNull;
}
for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
var checker = arrayOfTypeCheckers[i];
if (typeof checker !== 'function') {
printWarning(
'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
);
return emptyFunctionThatReturnsNull;
}
}
function validate(props, propName, componentName, location, propFullName) {
var expectedTypes = [];
for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
var checker = arrayOfTypeCheckers[i];
var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);
if (checkerResult == null) {
return null;
}
if (checkerResult.data && has(checkerResult.data, 'expectedType')) {
expectedTypes.push(checkerResult.data.expectedType);
}
}
var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));
}
return createChainableTypeChecker(validate);
}
function createNodeChecker() {
function validate(props, propName, componentName, location, propFullName) {
if (!isNode(props[propName])) {
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
}
return null;
}
return createChainableTypeChecker(validate);
}
function invalidValidatorError(componentName, location, propFullName, key, type) {
return new PropTypeError(
(componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +
'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'
);
}
function createShapeTypeChecker(shapeTypes) {
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
var propType = getPropType(propValue);
if (propType !== 'object') {
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
}
for (var key in shapeTypes) {
var checker = shapeTypes[key];
if (typeof checker !== 'function') {
return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
}
var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
if (error) {
return error;
}
}
return null;
}
return createChainableTypeChecker(validate);
}
function createStrictShapeTypeChecker(shapeTypes) {
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
var propType = getPropType(propValue);
if (propType !== 'object') {
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
}
// We need to check all keys in case some are required but missing from props.
var allKeys = assign({}, props[propName], shapeTypes);
for (var key in allKeys) {
var checker = shapeTypes[key];
if (has(shapeTypes, key) && typeof checker !== 'function') {
return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
}
if (!checker) {
return new PropTypeError(
'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
'\nBad object: ' + JSON.stringify(props[propName], null, ' ') +
'\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')
);
}
var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
if (error) {
return error;
}
}
return null;
}
return createChainableTypeChecker(validate);
}
function isNode(propValue) {
switch (typeof propValue) {
case 'number':
case 'string':
case 'undefined':
return true;
case 'boolean':
return !propValue;
case 'object':
if (Array.isArray(propValue)) {
return propValue.every(isNode);
}
if (propValue === null || isValidElement(propValue)) {
return true;
}
var iteratorFn = getIteratorFn(propValue);
if (iteratorFn) {
var iterator = iteratorFn.call(propValue);
var step;
if (iteratorFn !== propValue.entries) {
while (!(step = iterator.next()).done) {
if (!isNode(step.value)) {
return false;
}
}
} else {
// Iterator will provide entry [k,v] tuples rather than values.
while (!(step = iterator.next()).done) {
var entry = step.value;
if (entry) {
if (!isNode(entry[1])) {
return false;
}
}
}
}
} else {
return false;
}
return true;
default:
return false;
}
}
function isSymbol(propType, propValue) {
// Native Symbol.
if (propType === 'symbol') {
return true;
}
// falsy value can't be a Symbol
if (!propValue) {
return false;
}
// 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
if (propValue['@@toStringTag'] === 'Symbol') {
return true;
}
// Fallback for non-spec compliant Symbols which are polyfilled.
if (typeof Symbol === 'function' && propValue instanceof Symbol) {
return true;
}
return false;
}
// Equivalent of `typeof` but with special handling for array and regexp.
function getPropType(propValue) {
var propType = typeof propValue;
if (Array.isArray(propValue)) {
return 'array';
}
if (propValue instanceof RegExp) {
// Old webkits (at least until Android 4.0) return 'function' rather than
// 'object' for typeof a RegExp. We'll normalize this here so that /bla/
// passes PropTypes.object.
return 'object';
}
if (isSymbol(propType, propValue)) {
return 'symbol';
}
return propType;
}
// This handles more types than `getPropType`. Only used for error messages.
// See `createPrimitiveTypeChecker`.
function getPreciseType(propValue) {
if (typeof propValue === 'undefined' || propValue === null) {
return '' + propValue;
}
var propType = getPropType(propValue);
if (propType === 'object') {
if (propValue instanceof Date) {
return 'date';
} else if (propValue instanceof RegExp) {
return 'regexp';
}
}
return propType;
}
// Returns a string that is postfixed to a warning about an invalid type.
// For example, "undefined" or "of type array"
function getPostfixForTypeWarning(value) {
var type = getPreciseType(value);
switch (type) {
case 'array':
case 'object':
return 'an ' + type;
case 'boolean':
case 'date':
case 'regexp':
return 'a ' + type;
default:
return type;
}
}
// Returns class name of the object, if any.
function getClassName(propValue) {
if (!propValue.constructor || !propValue.constructor.name) {
return ANONYMOUS;
}
return propValue.constructor.name;
}
ReactPropTypes.checkPropTypes = checkPropTypes;
ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
ReactPropTypes.PropTypes = ReactPropTypes;
return ReactPropTypes;
};
/***/ }),
/***/ "../node_modules/prop-types/index.js":
/*!*******************************************!*\
!*** ../node_modules/prop-types/index.js ***!
\*******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
if (true) {
var ReactIs = __webpack_require__(/*! react-is */ "../node_modules/prop-types/node_modules/react-is/index.js");
// By explicitly using `prop-types` you are opting into new development behavior.
// http://fb.me/prop-types-in-prod
var throwOnDirectAccess = true;
module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ "../node_modules/prop-types/factoryWithTypeCheckers.js")(ReactIs.isElement, throwOnDirectAccess);
} else {}
/***/ }),
/***/ "../node_modules/prop-types/lib/ReactPropTypesSecret.js":
/*!**************************************************************!*\
!*** ../node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
\**************************************************************/
/***/ ((module) => {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
module.exports = ReactPropTypesSecret;
/***/ }),
/***/ "../node_modules/prop-types/lib/has.js":
/*!*********************************************!*\
!*** ../node_modules/prop-types/lib/has.js ***!
\*********************************************/
/***/ ((module) => {
module.exports = Function.call.bind(Object.prototype.hasOwnProperty);
/***/ }),
/***/ "../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js":
/*!************************************************************************************!*\
!*** ../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js ***!
\************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
/** @license React v16.13.1
* react-is.development.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
if (true) {
(function() {
'use strict';
// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
// nor polyfill, then a plain number is used for performance.
var hasSymbol = typeof Symbol === 'function' && Symbol.for;
var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
// (unstable) APIs that have been removed. Can we remove the symbols?
var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
function isValidElementType(type) {
return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
}
function typeOf(object) {
if (typeof object === 'object' && object !== null) {
var $$typeof = object.$$typeof;
switch ($$typeof) {
case REACT_ELEMENT_TYPE:
var type = object.type;
switch (type) {
case REACT_ASYNC_MODE_TYPE:
case REACT_CONCURRENT_MODE_TYPE:
case REACT_FRAGMENT_TYPE:
case REACT_PROFILER_TYPE:
case REACT_STRICT_MODE_TYPE:
case REACT_SUSPENSE_TYPE:
return type;
default:
var $$typeofType = type && type.$$typeof;
switch ($$typeofType) {
case REACT_CONTEXT_TYPE:
case REACT_FORWARD_REF_TYPE:
case REACT_LAZY_TYPE:
case REACT_MEMO_TYPE:
case REACT_PROVIDER_TYPE:
return $$typeofType;
default:
return $$typeof;
}
}
case REACT_PORTAL_TYPE:
return $$typeof;
}
}
return undefined;
} // AsyncMode is deprecated along with isAsyncMode
var AsyncMode = REACT_ASYNC_MODE_TYPE;
var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
var ContextConsumer = REACT_CONTEXT_TYPE;
var ContextProvider = REACT_PROVIDER_TYPE;
var Element = REACT_ELEMENT_TYPE;
var ForwardRef = REACT_FORWARD_REF_TYPE;
var Fragment = REACT_FRAGMENT_TYPE;
var Lazy = REACT_LAZY_TYPE;
var Memo = REACT_MEMO_TYPE;
var Portal = REACT_PORTAL_TYPE;
var Profiler = REACT_PROFILER_TYPE;
var StrictMode = REACT_STRICT_MODE_TYPE;
var Suspense = REACT_SUSPENSE_TYPE;
var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
function isAsyncMode(object) {
{
if (!hasWarnedAboutDeprecatedIsAsyncMode) {
hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
}
}
return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
}
function isConcurrentMode(object) {
return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
}
function isContextConsumer(object) {
return typeOf(object) === REACT_CONTEXT_TYPE;
}
function isContextProvider(object) {
return typeOf(object) === REACT_PROVIDER_TYPE;
}
function isElement(object) {
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
}
function isForwardRef(object) {
return typeOf(object) === REACT_FORWARD_REF_TYPE;
}
function isFragment(object) {
return typeOf(object) === REACT_FRAGMENT_TYPE;
}
function isLazy(object) {
return typeOf(object) === REACT_LAZY_TYPE;
}
function isMemo(object) {
return typeOf(object) === REACT_MEMO_TYPE;
}
function isPortal(object) {
return typeOf(object) === REACT_PORTAL_TYPE;
}
function isProfiler(object) {
return typeOf(object) === REACT_PROFILER_TYPE;
}
function isStrictMode(object) {
return typeOf(object) === REACT_STRICT_MODE_TYPE;
}
function isSuspense(object) {
return typeOf(object) === REACT_SUSPENSE_TYPE;
}
exports.AsyncMode = AsyncMode;
exports.ConcurrentMode = ConcurrentMode;
exports.ContextConsumer = ContextConsumer;
exports.ContextProvider = ContextProvider;
exports.Element = Element;
exports.ForwardRef = ForwardRef;
exports.Fragment = Fragment;
exports.Lazy = Lazy;
exports.Memo = Memo;
exports.Portal = Portal;
exports.Profiler = Profiler;
exports.StrictMode = StrictMode;
exports.Suspense = Suspense;
exports.isAsyncMode = isAsyncMode;
exports.isConcurrentMode = isConcurrentMode;
exports.isContextConsumer = isContextConsumer;
exports.isContextProvider = isContextProvider;
exports.isElement = isElement;
exports.isForwardRef = isForwardRef;
exports.isFragment = isFragment;
exports.isLazy = isLazy;
exports.isMemo = isMemo;
exports.isPortal = isPortal;
exports.isProfiler = isProfiler;
exports.isStrictMode = isStrictMode;
exports.isSuspense = isSuspense;
exports.isValidElementType = isValidElementType;
exports.typeOf = typeOf;
})();
}
/***/ }),
/***/ "../node_modules/prop-types/node_modules/react-is/index.js":
/*!*****************************************************************!*\
!*** ../node_modules/prop-types/node_modules/react-is/index.js ***!
\*****************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
if (false) {} else {
module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js");
}
/***/ }),
/***/ "../node_modules/react-dom/client.js":
/*!*******************************************!*\
!*** ../node_modules/react-dom/client.js ***!
\*******************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var m = __webpack_require__(/*! react-dom */ "react-dom");
if (false) {} else {
var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
exports.createRoot = function(c, o) {
i.usingClientEntryPoint = true;
try {
return m.createRoot(c, o);
} finally {
i.usingClientEntryPoint = false;
}
};
exports.hydrateRoot = function(c, h, o) {
i.usingClientEntryPoint = true;
try {
return m.hydrateRoot(c, h, o);
} finally {
i.usingClientEntryPoint = false;
}
};
}
/***/ }),
/***/ "react":
/*!************************!*\
!*** external "React" ***!
\************************/
/***/ ((module) => {
"use strict";
module.exports = React;
/***/ }),
/***/ "react-dom":
/*!***************************!*\
!*** external "ReactDOM" ***!
\***************************/
/***/ ((module) => {
"use strict";
module.exports = ReactDOM;
/***/ }),
/***/ "@wordpress/i18n":
/*!**************************!*\
!*** external "wp.i18n" ***!
\**************************/
/***/ ((module) => {
"use strict";
module.exports = wp.i18n;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js":
/*!******************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***!
\******************************************************************/
/***/ ((module) => {
function _arrayLikeToArray(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js":
/*!****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/arrayWithHoles.js ***!
\****************************************************************/
/***/ ((module) => {
function _arrayWithHoles(r) {
if (Array.isArray(r)) return r;
}
module.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js":
/*!***********************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/assertThisInitialized.js ***!
\***********************************************************************/
/***/ ((module) => {
function _assertThisInitialized(e) {
if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return e;
}
module.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/asyncToGenerator.js":
/*!******************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/asyncToGenerator.js ***!
\******************************************************************/
/***/ ((module) => {
function asyncGeneratorStep(n, t, e, r, o, a, c) {
try {
var i = n[a](c),
u = i.value;
} catch (n) {
return void e(n);
}
i.done ? t(u) : Promise.resolve(u).then(r, o);
}
function _asyncToGenerator(n) {
return function () {
var t = this,
e = arguments;
return new Promise(function (r, o) {
var a = n.apply(t, e);
function _next(n) {
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
}
function _throw(n) {
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
}
_next(void 0);
});
};
}
module.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/classCallCheck.js":
/*!****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/classCallCheck.js ***!
\****************************************************************/
/***/ ((module) => {
function _classCallCheck(a, n) {
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
}
module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/createClass.js":
/*!*************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/createClass.js ***!
\*************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js");
function _defineProperties(e, r) {
for (var t = 0; t < r.length; t++) {
var o = r[t];
o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);
}
}
function _createClass(e, r, t) {
return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
writable: !1
}), e;
}
module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/defineProperty.js":
/*!****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***!
\****************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js");
function _defineProperty(e, r, t) {
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r] = t, e;
}
module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js":
/*!****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/getPrototypeOf.js ***!
\****************************************************************/
/***/ ((module) => {
function _getPrototypeOf(t) {
return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
return t.__proto__ || Object.getPrototypeOf(t);
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _getPrototypeOf(t);
}
module.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/inherits.js":
/*!**********************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/inherits.js ***!
\**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js");
function _inherits(t, e) {
if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
t.prototype = Object.create(e && e.prototype, {
constructor: {
value: t,
writable: !0,
configurable: !0
}
}), Object.defineProperty(t, "prototype", {
writable: !1
}), e && setPrototypeOf(t, e);
}
module.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js":
/*!***********************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!
\***********************************************************************/
/***/ ((module) => {
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
"default": e
};
}
module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js":
/*!**********************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***!
\**********************************************************************/
/***/ ((module) => {
function _iterableToArrayLimit(r, l) {
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (null != t) {
var e,
n,
i,
u,
a = [],
f = !0,
o = !1;
try {
if (i = (t = t.call(r)).next, 0 === l) {
if (Object(t) !== t) return;
f = !1;
} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
} catch (r) {
o = !0, n = r;
} finally {
try {
if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
} finally {
if (o) throw n;
}
}
return a;
}
}
module.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/nonIterableRest.js":
/*!*****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/nonIterableRest.js ***!
\*****************************************************************/
/***/ ((module) => {
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/objectWithoutProperties.js":
/*!*************************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/objectWithoutProperties.js ***!
\*************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var objectWithoutPropertiesLoose = __webpack_require__(/*! ./objectWithoutPropertiesLoose.js */ "../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js");
function _objectWithoutProperties(e, t) {
if (null == e) return {};
var o,
r,
i = objectWithoutPropertiesLoose(e, t);
if (Object.getOwnPropertySymbols) {
var s = Object.getOwnPropertySymbols(e);
for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
}
return i;
}
module.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js":
/*!******************************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js ***!
\******************************************************************************/
/***/ ((module) => {
function _objectWithoutPropertiesLoose(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (e.includes(n)) continue;
t[n] = r[n];
}
return t;
}
module.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js":
/*!***************************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***!
\***************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
var assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized.js */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
function _possibleConstructorReturn(t, e) {
if (e && ("object" == _typeof(e) || "function" == typeof e)) return e;
if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
return assertThisInitialized(t);
}
module.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/regeneratorRuntime.js":
/*!********************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/regeneratorRuntime.js ***!
\********************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
function _regeneratorRuntime() {
"use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
return e;
}, module.exports.__esModule = true, module.exports["default"] = module.exports;
var t,
e = {},
r = Object.prototype,
n = r.hasOwnProperty,
o = Object.defineProperty || function (t, e, r) {
t[e] = r.value;
},
i = "function" == typeof Symbol ? Symbol : {},
a = i.iterator || "@@iterator",
c = i.asyncIterator || "@@asyncIterator",
u = i.toStringTag || "@@toStringTag";
function define(t, e, r) {
return Object.defineProperty(t, e, {
value: r,
enumerable: !0,
configurable: !0,
writable: !0
}), t[e];
}
try {
define({}, "");
} catch (t) {
define = function define(t, e, r) {
return t[e] = r;
};
}
function wrap(t, e, r, n) {
var i = e && e.prototype instanceof Generator ? e : Generator,
a = Object.create(i.prototype),
c = new Context(n || []);
return o(a, "_invoke", {
value: makeInvokeMethod(t, r, c)
}), a;
}
function tryCatch(t, e, r) {
try {
return {
type: "normal",
arg: t.call(e, r)
};
} catch (t) {
return {
type: "throw",
arg: t
};
}
}
e.wrap = wrap;
var h = "suspendedStart",
l = "suspendedYield",
f = "executing",
s = "completed",
y = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
var p = {};
define(p, a, function () {
return this;
});
var d = Object.getPrototypeOf,
v = d && d(d(values([])));
v && v !== r && n.call(v, a) && (p = v);
var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
function defineIteratorMethods(t) {
["next", "throw", "return"].forEach(function (e) {
define(t, e, function (t) {
return this._invoke(e, t);
});
});
}
function AsyncIterator(t, e) {
function invoke(r, o, i, a) {
var c = tryCatch(t[r], t, o);
if ("throw" !== c.type) {
var u = c.arg,
h = u.value;
return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
invoke("next", t, i, a);
}, function (t) {
invoke("throw", t, i, a);
}) : e.resolve(h).then(function (t) {
u.value = t, i(u);
}, function (t) {
return invoke("throw", t, i, a);
});
}
a(c.arg);
}
var r;
o(this, "_invoke", {
value: function value(t, n) {
function callInvokeWithMethodAndArg() {
return new e(function (e, r) {
invoke(t, n, e, r);
});
}
return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
}
});
}
function makeInvokeMethod(e, r, n) {
var o = h;
return function (i, a) {
if (o === f) throw Error("Generator is already running");
if (o === s) {
if ("throw" === i) throw a;
return {
value: t,
done: !0
};
}
for (n.method = i, n.arg = a;;) {
var c = n.delegate;
if (c) {
var u = maybeInvokeDelegate(c, n);
if (u) {
if (u === y) continue;
return u;
}
}
if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
if (o === h) throw o = s, n.arg;
n.dispatchException(n.arg);
} else "return" === n.method && n.abrupt("return", n.arg);
o = f;
var p = tryCatch(e, r, n);
if ("normal" === p.type) {
if (o = n.done ? s : l, p.arg === y) continue;
return {
value: p.arg,
done: n.done
};
}
"throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
}
};
}
function maybeInvokeDelegate(e, r) {
var n = r.method,
o = e.iterator[n];
if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
var i = tryCatch(o, e.iterator, r.arg);
if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
var a = i.arg;
return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
}
function pushTryEntry(t) {
var e = {
tryLoc: t[0]
};
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
}
function resetTryEntry(t) {
var e = t.completion || {};
e.type = "normal", delete e.arg, t.completion = e;
}
function Context(t) {
this.tryEntries = [{
tryLoc: "root"
}], t.forEach(pushTryEntry, this), this.reset(!0);
}
function values(e) {
if (e || "" === e) {
var r = e[a];
if (r) return r.call(e);
if ("function" == typeof e.next) return e;
if (!isNaN(e.length)) {
var o = -1,
i = function next() {
for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
return next.value = t, next.done = !0, next;
};
return i.next = i;
}
}
throw new TypeError(_typeof(e) + " is not iterable");
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
value: GeneratorFunctionPrototype,
configurable: !0
}), o(GeneratorFunctionPrototype, "constructor", {
value: GeneratorFunction,
configurable: !0
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
var e = "function" == typeof t && t.constructor;
return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
}, e.mark = function (t) {
return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
}, e.awrap = function (t) {
return {
__await: t
};
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
return this;
}), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
void 0 === i && (i = Promise);
var a = new AsyncIterator(wrap(t, r, n, o), i);
return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
return t.done ? t.value : a.next();
});
}, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
return this;
}), define(g, "toString", function () {
return "[object Generator]";
}), e.keys = function (t) {
var e = Object(t),
r = [];
for (var n in e) r.push(n);
return r.reverse(), function next() {
for (; r.length;) {
var t = r.pop();
if (t in e) return next.value = t, next.done = !1, next;
}
return next.done = !0, next;
};
}, e.values = values, Context.prototype = {
constructor: Context,
reset: function reset(e) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
},
stop: function stop() {
this.done = !0;
var t = this.tryEntries[0].completion;
if ("throw" === t.type) throw t.arg;
return this.rval;
},
dispatchException: function dispatchException(e) {
if (this.done) throw e;
var r = this;
function handle(n, o) {
return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
}
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
var i = this.tryEntries[o],
a = i.completion;
if ("root" === i.tryLoc) return handle("end");
if (i.tryLoc <= this.prev) {
var c = n.call(i, "catchLoc"),
u = n.call(i, "finallyLoc");
if (c && u) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
} else if (c) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
} else {
if (!u) throw Error("try statement without catch or finally");
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
}
}
}
},
abrupt: function abrupt(t, e) {
for (var r = this.tryEntries.length - 1; r >= 0; --r) {
var o = this.tryEntries[r];
if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
var i = o;
break;
}
}
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
var a = i ? i.completion : {};
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
},
complete: function complete(t, e) {
if ("throw" === t.type) throw t.arg;
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
},
finish: function finish(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
}
},
"catch": function _catch(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.tryLoc === t) {
var n = r.completion;
if ("throw" === n.type) {
var o = n.arg;
resetTryEntry(r);
}
return o;
}
}
throw Error("illegal catch attempt");
},
delegateYield: function delegateYield(e, r, n) {
return this.delegate = {
iterator: values(e),
resultName: r,
nextLoc: n
}, "next" === this.method && (this.arg = t), y;
}
}, e;
}
module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js":
/*!****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/setPrototypeOf.js ***!
\****************************************************************/
/***/ ((module) => {
function _setPrototypeOf(t, e) {
return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
return t.__proto__ = e, t;
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _setPrototypeOf(t, e);
}
module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/slicedToArray.js":
/*!***************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/slicedToArray.js ***!
\***************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles.js */ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js");
var iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit.js */ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js");
var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js");
var nonIterableRest = __webpack_require__(/*! ./nonIterableRest.js */ "../node_modules/@babel/runtime/helpers/nonIterableRest.js");
function _slicedToArray(r, e) {
return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();
}
module.exports = _slicedToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/toPrimitive.js":
/*!*************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/toPrimitive.js ***!
\*************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
function toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
module.exports = toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/toPropertyKey.js":
/*!***************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/toPropertyKey.js ***!
\***************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
var toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ "../node_modules/@babel/runtime/helpers/toPrimitive.js");
function toPropertyKey(t) {
var i = toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
module.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/typeof.js":
/*!********************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/typeof.js ***!
\********************************************************/
/***/ ((module) => {
function _typeof(o) {
"@babel/helpers - typeof";
return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o);
}
module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js":
/*!****************************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***!
\****************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js");
function _unsupportedIterableToArray(r, a) {
if (r) {
if ("string" == typeof r) return arrayLikeToArray(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;
}
}
module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/regenerator/index.js":
/*!***********************************************************!*\
!*** ../node_modules/@babel/runtime/regenerator/index.js ***!
\***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// TODO(Babel 8): Remove this file.
var runtime = __webpack_require__(/*! ../helpers/regeneratorRuntime */ "../node_modules/@babel/runtime/helpers/regeneratorRuntime.js")();
module.exports = runtime;
// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=
try {
regeneratorRuntime = runtime;
} catch (accidentalStrictMode) {
if (typeof globalThis === "object") {
globalThis.regeneratorRuntime = runtime;
} else {
Function("r", "regeneratorRuntime = r")(runtime);
}
}
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
"use strict";
var exports = __webpack_exports__;
/*!***************************************************!*\
!*** ../modules/announcements/assets/js/index.js ***!
\***************************************************/
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 _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ "../node_modules/@babel/runtime/regenerator/index.js"));
var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "../node_modules/@babel/runtime/helpers/asyncToGenerator.js"));
var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"));
var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"));
var _react2 = _interopRequireDefault(__webpack_require__(/*! elementor-utils/react */ "../assets/dev/js/utils/react.js"));
var _components = __webpack_require__(/*! ./components */ "../modules/announcements/assets/js/components/index.js");
var _eComponent = _interopRequireDefault(__webpack_require__(/*! ./e-component */ "../modules/announcements/assets/js/e-component.js"));
var AnnouncementIndex = exports["default"] = /*#__PURE__*/function () {
function AnnouncementIndex() {
(0, _classCallCheck2.default)(this, AnnouncementIndex);
this.initAnnouncement();
}
return (0, _createClass2.default)(AnnouncementIndex, [{
key: "initAnnouncement",
value: function () {
var _initAnnouncement = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
var _window$elementorAnno;
var container, announcements, _ReactUtils$render, unmount;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
container = document.getElementById('e-announcements-root');
announcements = (_window$elementorAnno = window.elementorAnnouncementsConfig) === null || _window$elementorAnno === void 0 ? void 0 : _window$elementorAnno.announcements;
if (!(!announcements || !container)) {
_context.next = 4;
break;
}
return _context.abrupt("return");
case 4:
_context.next = 6;
return $e.components.register(new _eComponent.default());
case 6:
_ReactUtils$render = _react2.default.render(/*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_components.Overlay, null), /*#__PURE__*/_react.default.createElement(_components.Announcements, {
announcements: announcements,
unMount: function unMount() {
unmount();
container.remove();
}
})), container), unmount = _ReactUtils$render.unmount;
case 7:
case "end":
return _context.stop();
}
}, _callee);
}));
function initAnnouncement() {
return _initAnnouncement.apply(this, arguments);
}
return initAnnouncement;
}()
}]);
}();
new AnnouncementIndex();
})();
/******/ })()
;
//# sourceMappingURL=announcements-app.js.map