From e188af281119229141e3b7208227eac2e675ef84 Mon Sep 17 00:00:00 2001 From: Shazahanul Islam Shohag Date: Tue, 1 Aug 2023 08:43:22 +0600 Subject: [PATCH 1/3] feat: admin settings design update (#1947) * update: field and subsection style update * update: social field update * refactor: commented css code removed * update: copy and documentation button style updated --- src/admin/components/Fields.vue | 49 +++++++++++++++------------- src/admin/components/SecretInput.vue | 2 +- src/admin/pages/Settings.vue | 38 ++++++++++----------- 3 files changed, 45 insertions(+), 44 deletions(-) diff --git a/src/admin/components/Fields.vue b/src/admin/components/Fields.vue index 5ca0f220a2..b73eb2771a 100644 --- a/src/admin/components/Fields.vue +++ b/src/admin/components/Fields.vue @@ -849,23 +849,27 @@ margin-left: 10px; } .dokan-settings-sub-section { - margin-bottom: 30px; + padding: 20px; + border: 1px solid #f3f4f6; + border-bottom: 0; + background: #f9fafb; .sub-section-title { margin: 0; - font-size: 22px; + font-size: 14px; font-family: Roboto, sans-serif; font-weight: 600; - line-height: 26px; + line-height: 1.2; margin-bottom: 8px; } .sub-section-description { margin: 0; - font-size: 15px; + font-size: 13px; font-weight: 300; line-height: 21px; font-family: Roboto, sans-serif; + color: #6B7280; .learn-more-btn { cursor: pointer; @@ -882,10 +886,10 @@ } } .field_contents { - border: 1px solid #B0A7A7; - padding: 14px 30px 18px 27px; + border: 1px solid #f3f4f6; + padding: 15px 20px 15px 20px; border-top: 0; - background: rgba(244, 246, 250, 0.17); + background: #fff; fieldset { display: flex; @@ -895,17 +899,17 @@ flex: 2; .field_heading { - color: #000000; + color: #111827; margin: 0; - font-size: 17px; + font-size: 14px; font-style: normal; font-weight: 600; - line-height: 35px; + line-height: 1.25; font-family: 'Roboto', sans-serif; span { i { - margin: 5px 0 0 5px; + margin: -3px 0 0 5px; } .tooltip { @@ -915,12 +919,13 @@ } .field_desc { - color: #000; + color: #6B7280; margin: 0; + margin-top: 5px; font-size: 13px; font-style: normal; font-weight: 300; - line-height: 17px; + line-height: 1.2; font-family: 'Roboto', sans-serif; a { @@ -989,7 +994,7 @@ .radio_fields { label { - border: 0.882967px solid #B0A7A7; + border: 0.882967px solid #f3f4f6; padding: 10px 15px; display: inline-block; overflow: hidden; @@ -1006,7 +1011,7 @@ } &:last-child { - border-right: 0.882967px solid #B0A7A7; + border-right: 0.882967px solid #f3f4f6; border-top-right-radius: 5px; border-bottom-right-radius: 5px; } @@ -1016,13 +1021,13 @@ background: rgba(182, 206, 254, 0.38); box-sizing: border-box; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.10); - border-color: rgba(3, 58, 163, 0.81); + border-color: rgba(3, 58, 163, 0.41); } } .checked { color: rgba(3, 58, 163, 0.85); - border: 1px solid rgba(3, 58, 163, 0.81); + border: 1px solid rgba(3, 58, 163, 0.21); background: rgba(182, 206, 254, 0.38); box-sizing: border-box; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.10); @@ -1099,7 +1104,7 @@ input[type='text'], input[type='number'], input[type='button'] { - border: 0.957434px solid #686666; + border: 0.957434px solid #E9E9E9; min-height: 32px; box-shadow: 0px 3.82974px 3.82974px rgba(0, 0, 0, 0.10); border-radius: 5px; @@ -1124,7 +1129,7 @@ label.checked { color: rgba(3, 58, 163, 0.85); - border: 1px solid rgba(3, 58, 163, 0.81); + border: 1px solid rgba(3, 58, 163, 0.41); background: rgba(182, 206, 254, 0.38); box-sizing: border-box; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.10); @@ -1157,7 +1162,7 @@ border: 0.82px solid #E5E5E5; padding: 10px 25px; background: rgba(220, 232, 254, 0.38); - box-shadow: 0px 3.28px 3.28px rgba(0, 0, 0, 0.10); + //box-shadow: 0px 3.28px 3.28px rgba(0, 0, 0, 0.10); border-radius: 6.56px; .scl_header { @@ -1232,7 +1237,7 @@ .scl_text, .scl_html { - border: 1px solid #b0a7a7; + border: 1px solid #f3f4f6; display: flex; padding: 10px 30px 15px 27px; border-top: 0; @@ -1300,7 +1305,7 @@ &:nth-child(2) { margin-top: 15px; - border-top: 1px solid #b0a7a7; + border-top: 1px solid #f3f4f6; } &:last-child { diff --git a/src/admin/components/SecretInput.vue b/src/admin/components/SecretInput.vue index b98480c8e9..72bebecb67 100644 --- a/src/admin/components/SecretInput.vue +++ b/src/admin/components/SecretInput.vue @@ -97,7 +97,7 @@ export default { height: 20px; min-height: 32px; min-width: 32px; - border: 0.957434px solid #686666; + border: 1px solid #f3f4f6; box-shadow: 0px 3.82974px 3.82974px rgba(0, 0, 0, 0.1); border-radius: 5px; background: white; diff --git a/src/admin/pages/Settings.vue b/src/admin/pages/Settings.vue index 1a46060ee4..0b08be66f2 100644 --- a/src/admin/pages/Settings.vue +++ b/src/admin/pages/Settings.vue @@ -609,11 +609,9 @@ div.nav-tab-wrapper { width: 340px; - border: 1px solid #c8d7e1; padding: 14px 16px 30px 24px; overflow: hidden; - background: #FAFBFF; - box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + background: #F9FAFB; box-sizing: border-box; margin-right: 12px; border-bottom: none; @@ -635,7 +633,7 @@ transition:none; background: transparent; font-weight: bold; - border-bottom: 1px solid #cecaca; + border-bottom: 1px solid #e9e9ea; transition-property: none; img { @@ -671,7 +669,7 @@ position: relative; transition: .3s linear; background: #fff !important; - box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + //box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); transition-property: none; &:before { @@ -684,15 +682,6 @@ top: 0; } - &::after { - content: ''; - position: absolute; - width: 100%; - height: 1px; - background: #cecaca; - left: 0; - top: -1px; - } } &:last-child { @@ -739,16 +728,20 @@ a.doc-link { color: #033AA3D9; - border: 0.82px solid #033AA3; + border: 1px solid #f3f4f6; padding: 10px 15px; font-size: 12px; background: #FFF; box-sizing: border-box; - box-shadow: 0px 3.28px 3.28px rgba(0, 0, 0, 0.25); + box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.1); font-family: Roboto, sans-serif; line-height: 15px; border-radius: 6.56px; text-decoration: none; + + &:hover { + background: #033aa30f; + } } } } @@ -758,17 +751,20 @@ .dokan-settings-fields { .dokan-settings-field-type-sub_section, .dokan-settings-field-type-disbursement_sub_section { - border-bottom: 1px solid #b0a7a7; + border-bottom: 1px solid #f3f4f6; .sub-section-styles { - margin-top: 50px; + margin-top: 20px; + margin-bottom:0; + padding: 20px; + background: #f9fafb; } } div { &:not(.dokan-settings-field-type-sub_section) { .field_contents { - border: 1px solid #b0a7a7; + border: 1px solid #f3f4f6; border-top: none; } } @@ -777,7 +773,7 @@ > div { &:not(.dokan-settings-field-type-sub_section) { &:first-child { - border-top: 1px solid #b0a7a7; + border-top: 1px solid #f3f4f6; } } } @@ -817,7 +813,7 @@ height: 100%; content: ""; position: absolute; - background: #E5E5E5; + background: #fff; } } From 3095cf64ff3f7b6972b57c9808821faa5ec58b75 Mon Sep 17 00:00:00 2001 From: Nurul Umbhiya Date: Thu, 17 Aug 2023 19:27:33 +0600 Subject: [PATCH 2/3] Refactor: High Performance Order Storage (#1833) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: wrong review count on store listing page * refactor: HPOS support for Commission.php file * fix: error while calculating commission by product if the product has been deleted. * refactor: hpos support for order manager class and wc-legacy-functions.php new: introduced a new method named `dokan_is_hpos_enabled` * refactor: HPOS support enabled for Order/functions.php update: rewritten some codebase * refactor: added HPOS support for Order/Hooks.php * refactor: added hpos support for admin/hooks.php file new: added a new order helper utility class * fix: fixed js related issues on order list page * refactor: moved some methods to a separate file * refactor: rewritten some codebase * refactor: moved some methods to corresponding files refactor: refactored some methods * refactor: refactored templates/orders/* files * refactor: some other hpos rewrite * refactor: moved some methods to a separate file, also rewritten some codebase * refactor: moved some methods to a separate file * πŸ› fix(Manager.php): replace $wpdb->posts with $order_table_name in SQL query ✨ feat(Manager.php): add $force_create parameter to maybe_split_orders method The SQL query in line 66 was using $wpdb->posts instead of $order_table_name, which caused an error. The $force_create parameter in the maybe_split_orders method allows the suborders to be deleted and recreated if they already exist. This is useful in cases where the suborders need to be recreated due to changes in the parent order. πŸ”¨ refactor(functions.php): change parameter name and type in dokan_get_seller_id_by_order function This commit changes the parameter name and type in the dokan_get_seller_id_by_order function. The parameter name is changed from $order_id to $order, and its type is changed from int to int|WC_Abstract_Order. The function now checks if the $order parameter is numeric, and if not, it gets the order ID using the get_id() method. This change improves the readability of the code and makes it more consistent with the WordPress coding standards. * πŸ› fix(Order): instantiate OrderCache in Controller class πŸ”₯ refactor(Order): remove instantiation of OrderCache in Hooks class πŸ› fix(Order): use wc_get_order() instead of get_post() in delete_child_order_from_wc_order_product() function πŸ“ docs(Order): fix typo in comment of dokan_delete_sync_duplicate_order() function * πŸš€ feat(Hooks.php): add filters to change order item display meta key and value πŸš€ feat(Hooks.php): add manage_refunded_for_order action to woocommerce_order_status_changed event πŸ”¨ refactor(Hooks.php): extract manage_refunded_for_order() method from on_order_status_change() method ✨ feat(Hooks.php): add check for exclude_cod_payment option before entering remaining balance into vendor balance table πŸ”₯ refactor(Hooks.php): remove unused methods delete_child_order_from_wc_order_product, trim_child_order_for_analytics_order, and hide_customer_info_from_vendor_order_export 🎨 style(MiscHooks.php): add use statement for WC_Order class πŸ”€ chore(MiscHooks.php): move methods from Order/Hooks.php to MiscHooks.php ✨ feat(MiscHooks.php): add delete_child_order_from_wc_order_product method ✨ feat(MiscHooks.php): add trim_child_order_for_analytics_order method ✨ feat(MiscHooks.php): add hide_customer_info_from_vendor_order_export method ✨ feat(MiscHooks.php): add add_vendor_info_in_rest_order method * πŸŽ‰ feat(FakeMailer.php): add FakeMailer class to handle email sending functionality πŸš€ feat(EmailHooks.php): add exclude_child_customer_receipt function to phpmailer_init action πŸ”¨ refactor(EmailHooks.php): move exclude_child_customer_receipt method from includes/wc-functions.php to EmailHooks class πŸ”₯ chore(wc-functions.php): remove dokan_exclude_child_customer_receipt function and DokanFakeMailer class * ✨ feat(Controller.php): add Frontend\Hooks class to container ✨ feat(Frontend/Hooks.php): add Frontend\Hooks class for bulk order status change in vendor dashboard πŸ”₯ refactor(Order): remove dokan_is_hpos_enabled function πŸ”₯ refactor(wc-functions): remove dokan_bulk_order_status_change function ✨ feat(Order): add check for ABSPATH constant in Hooks.php file * πŸ› fix(dokan.php): set priority to 1 for wpdb_table_shortcuts function πŸ”₯ chore(Order/Manager.php): remove todo comments for deleting order references from vendor_balance, withdraw and refund table. Add comment about design flaw in dokan_vendor_balance table. * πŸ” chore(Manager.php): clean up whitespace and add comments πŸ› fix(Manager.php): fix is_numeric() usage in get_child_orders() ✨ feat(Manager.php): add $force_create parameter to create_sub_orders() method * πŸ› fix(Commission.php): add null check for product variable in validate_product_id method * refactor: commission calculation feature rewrite * πŸ› fix(Commission.php): save tmp_order after updating meta data πŸ”¨ refactor(Commission.php): change null comparison to empty() function call πŸ”¨ refactor(Commission.php): change if statement to elseif statement for commission_type check in calculate_earning() method πŸ› fix(Commission.php): remove unused variable and update return type of get_all_order_to_be_processed method πŸ› fix(functions.php): remove unused variable and simplify commission calculation * πŸ› fix(Manager.php): handle errors while deleting dokan orders, refund, vendor balance and reverse withdrawal table data ✨ feat(Manager.php): add action hook 'dokan_after_deleting_seller_order' after deleting seller order data πŸ”₯ chore(Manager.php): remove unnecessary comment in delete sub_orders loop * πŸ› fix(Manager.php): handle different order table name based on HPOS usage status * πŸš€ feat(Hooks.php): add support for trashing, untrashing, and deleting orders in both admin and frontend * update: added HPOS support for admin reports * refactor: fixed merge conflict issue * docs: updated docs for some deprecated methods. * πŸ› fix(functions.php): fix variable interpolation in SQL query strings * πŸ› fix(Commission.php): change option group from 'dokan_general' to 'dokan_selling' for shipping_fee_recipient and tax_fee_recipient options * πŸ› fix(Orders.php): use absint instead of intval to sanitize order_id input from $_GET superglobal variable * πŸ“ docs(Hooks.php): update @since tag to use DOKAN_SINCE instead of DOKAN_PRO_SINCE and add missing docblock for a method πŸ“ docs(Hooks.php): update since version and fix typo in comments * πŸ› fix(Hooks.php): fix whitespace inconsistency in line 284 * πŸ“ docs(Order): update @since tag in Controller.php constructor πŸ“ docs(Order): update @since tag in EmailHooks.php cancel order email method and add context information * πŸ” chore(Manager.php): add phpcs:disable and phpcs:enable comments to suppress code standard warnings in SQL queries * refactor: changed version number 3.7.111 with DOKAN_SINCE * refactor: refactored some codebase * refactor: refactored some codebase * refactor: refactored some codebase update: added global checking for store id under store rest api * refactor: refactored some codebase * fix: fixed a fatal error * refactor: replace dokan()->order->all() method functionality with wc_get_orders() * fix: fixed some minor issues * fix: fixed refund not working issue * πŸ› fix(Manager.php): replace deprecated function `dokan_pro_is_hpos_enabled()` with `OrderUtil::is_hpos_enabled()` to improve code maintainability and avoid using deprecated functions πŸ”¨ refactor(Manager.php): remove deprecated and unused method `willremovesoon` from the `Manager` class πŸ”₯ refactor(order-manager.php): remove unused code block in the `get_vendor_orders` method to improve code readability and maintainability * πŸ› fix(Manager.php): remove unused import of DateTimeZone to improve code cleanliness and reduce unnecessary dependencies πŸ› fix(Manager.php): change method call from save_meta_data() to save() to correctly save meta data changes in parent orders πŸ› fix(wc-template.php): check if sub_orders array is empty instead of falsy to correctly handle cases where there are no sub orders πŸ› fix(sub-orders.php): remove unnecessary check for existence of order object in foreach loop to simplify code and improve readability * πŸ› fix(Commission.php): change method calls from save_meta_data() to save() to correctly save order meta data * πŸ”§ fix(wc-functions.php): restrict vendors from reviewing their own products ✨ feat(wc-functions.php): add support for restricting vendors from purchasing their own products * πŸ› fix(Importer.php): add 'return' parameter with value 'objects' to dokan()->order->all() method to ensure that orders are returned as objects instead of arrays πŸ› fix(Manager.php): add isset() check for 'return' parameter to prevent undefined index notice πŸ› fix(OrderController.php): add 'return' parameter with value 'objects' to $request array to ensure that orders are returned as objects instead of arrays * πŸ› fix(Manager.php): add 'type' parameter with value 'shop_order' to the default arguments in the get_backward_compatibility_args() method to ensure compatibility with WooCommerce πŸ› fix(Manager.php): replace wc_get_orders() with $this->all() in the get_customer_orders_by_seller() method to ensure compatibility with Dokan plugin πŸ› fix(functions.php): add 'type' parameter with value 'shop_order' to the arguments in the dokan_get_suborder_ids_by() function to ensure compatibility with WooCommerce πŸ› fix(functions.php): replace wc_get_orders() with dokan()->order->all() in the dokan_customer_has_order_from_this_seller() function to ensure compatibility with Dokan plugin πŸ› fix(sub-orders.php): add null check for $order->get_view_order_url() in the href attribute to prevent errors when the method is not callable * fix: deleting order is not deleting data from dokan tables. * fix: shipping not appearing while creating suborders * πŸ› fix(Manager.php): add check to skip creating sub-order if no vendor is found ✨ feat(Manager.php): add check to skip processing order if it has already been assigned a vendor ID * πŸ› fix(Hooks.php): add condition to skip execution if 's' parameter is present in URL to prevent unwanted behavior * πŸ“ chore(Settings.php): update description for 'admin_access' setting to provide more context and mention HPOS feature πŸ› fix(Core.php): fix the issue with admin access blocking when HPOS feature is enabled πŸ› fix(Core.php): fix the issue with hiding others' uploads in media library πŸ› fix(Core.php): fix the issue with the wp_title filter πŸ› fix(functions.php): fix the issue with disabling admin bar when HPOS feature is enabled * πŸ› fix(Manager.php): update order query arguments to handle different scenarios based on the value of OrderUtil::is_hpos_enabled() * πŸ› fix(listing.php): fix the usage of dokan_format_date function to correctly format the timestamp --- assets/css/style.css | 5 + assets/css/vue-admin.css | 100 ++- assets/js/vue-admin.js | 2 +- assets/src/less/dashboard.less | 8 + composer.json | 5 +- dokan.php | 26 +- includes/Admin/Hooks.php | 352 +-------- includes/Admin/Settings.php | 2 +- includes/Admin/functions.php | 193 ++--- includes/Assets.php | 3 + includes/Commission.php | 374 +++++---- includes/Core.php | 45 +- includes/Dashboard/Templates/Orders.php | 14 +- includes/DummyData/Importer.php | 19 +- includes/FakeMailer.php | 18 + includes/Order/Admin/Hooks.php | 508 ++++++++++++ includes/Order/Admin/Permissions.php | 181 +++++ includes/Order/Controller.php | 46 ++ includes/Order/EmailHooks.php | 180 +++++ includes/Order/Frontend/Hooks.php | 54 ++ includes/Order/Hooks.php | 231 ++---- includes/Order/Manager.php | 742 ++++++++++++------ includes/Order/MiscHooks.php | 193 +++++ includes/Order/OrderCache.php | 34 + includes/Order/functions.php | 534 ++++++++----- .../ProductCategory/ProductCategoryCache.php | 44 ++ includes/REST/OrderController.php | 1 + includes/REST/StoreController.php | 20 +- includes/Tracker.php | 2 +- includes/Upgrade/Upgrades/V_1_2.php | 56 +- includes/Utilities/OrderUtil.php | 212 +++++ includes/Vendor/Vendor.php | 122 +-- includes/functions-compatibility.php | 6 +- includes/functions-rest-api.php | 39 + includes/functions.php | 481 +----------- includes/wc-functions.php | 297 +------ includes/wc-legacy-functions.php | 153 +--- includes/wc-template.php | 17 +- src/admin/pages/Vendors.vue | 2 +- templates/my-orders.php | 36 +- templates/orders/details.php | 31 +- templates/orders/listing.php | 32 +- templates/sub-orders.php | 8 +- 43 files changed, 3084 insertions(+), 2344 deletions(-) create mode 100644 includes/FakeMailer.php create mode 100644 includes/Order/Admin/Hooks.php create mode 100644 includes/Order/Admin/Permissions.php create mode 100644 includes/Order/Controller.php create mode 100644 includes/Order/EmailHooks.php create mode 100644 includes/Order/Frontend/Hooks.php create mode 100644 includes/Order/MiscHooks.php create mode 100644 includes/Utilities/OrderUtil.php create mode 100644 includes/functions-rest-api.php diff --git a/assets/css/style.css b/assets/css/style.css index 192c549c8c..3036cb4eb9 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -2730,6 +2730,11 @@ div.media-sidebar a.edit-attachment { vertical-align: middle; background: none; } +.dokan-dashboard div.chart-container > div.chart-legend-container > table td { + padding: 0; + padding-left: 5px; + padding-right: 5px; +} .dokan-column-name-with-avatar { position: relative; padding-left: 46px !important; diff --git a/assets/css/vue-admin.css b/assets/css/vue-admin.css index 8314810c99..82ab991b32 100644 --- a/assets/css/vue-admin.css +++ b/assets/css/vue-admin.css @@ -2063,34 +2063,34 @@ ul[data-v-525b077c] { border-radius: 50%; } -.secret-box-wraper[data-v-38c7e6d8] { +.secret-box-wraper[data-v-d315bc24] { display: flex; flex-direction: row-reverse; } -.secret-box-wraper .secret-input-box[data-v-38c7e6d8] { +.secret-box-wraper .secret-input-box[data-v-d315bc24] { position: relative; display: flex; width: 25em; } -.secret-box-wraper .secret-input-box div button[data-v-38c7e6d8] { +.secret-box-wraper .secret-input-box div button[data-v-d315bc24] { cursor: pointer; height: 20px; min-height: 32px; min-width: 32px; - border: 0.957434px solid #686666; + border: 1px solid #f3f4f6; box-shadow: 0px 3.82974px 3.82974px rgba(0, 0, 0, 0.1); border-radius: 5px; background: white; color: #686666; } -.secret-box-wraper .secret-input-box .secret-input[data-v-38c7e6d8] { +.secret-box-wraper .secret-input-box .secret-input[data-v-d315bc24] { width: 100%; } -.secret-box-wraper .secret-input-box .secret-input.blurry-input[data-v-38c7e6d8] { +.secret-box-wraper .secret-input-box .secret-input.blurry-input[data-v-d315bc24] { color: transparent; text-shadow: 0 0 7px #333; } -.secret-box-wraper .secret-input-box .secret-input-placeholder[data-v-38c7e6d8] { +.secret-box-wraper .secret-input-box .secret-input-placeholder[data-v-d315bc24] { position: absolute; top: 50%; left: 50%; @@ -2098,7 +2098,7 @@ ul[data-v-525b077c] { color: #686666; } @media only screen and (max-width: 768px) { -.secret-box-wraper .secret-input-box[data-v-38c7e6d8] { +.secret-box-wraper .secret-input-box[data-v-d315bc24] { max-width: 125px !important; } } @@ -2175,22 +2175,26 @@ ul.dokan-settings-repeatable-list li span.remove-item { margin-left: 10px; } .dokan-settings-sub-section { - margin-bottom: 30px; + padding: 20px; + border: 1px solid #f3f4f6; + border-bottom: 0; + background: #f9fafb; } .dokan-settings-sub-section .sub-section-title { margin: 0; - font-size: 22px; + font-size: 14px; font-family: Roboto, sans-serif; font-weight: 600; - line-height: 26px; + line-height: 1.2; margin-bottom: 8px; } .dokan-settings-sub-section .sub-section-description { margin: 0; - font-size: 15px; + font-size: 13px; font-weight: 300; line-height: 21px; font-family: Roboto, sans-serif; + color: #6B7280; } .dokan-settings-sub-section .sub-section-description .learn-more-btn { cursor: pointer; @@ -2204,10 +2208,10 @@ ul.dokan-settings-repeatable-list li span.remove-item { color: #E67E22 !important; } .field_contents { - border: 1px solid #B0A7A7; - padding: 14px 30px 18px 27px; + border: 1px solid #f3f4f6; + padding: 15px 20px 15px 20px; border-top: 0; - background: rgba(244, 246, 250, 0.17); + background: #fff; } .field_contents fieldset { display: flex; @@ -2217,27 +2221,28 @@ ul.dokan-settings-repeatable-list li span.remove-item { flex: 2; } .field_contents fieldset .field_data .field_heading { - color: #000000; + color: #111827; margin: 0; - font-size: 17px; + font-size: 14px; font-style: normal; font-weight: 600; - line-height: 35px; + line-height: 1.25; font-family: 'Roboto', sans-serif; } .field_contents fieldset .field_data .field_heading span i { - margin: 5px 0 0 5px; + margin: -3px 0 0 5px; } .field_contents fieldset .field_data .field_heading span .tooltip { font-size: 14px; } .field_contents fieldset .field_data .field_desc { - color: #000; + color: #6B7280; margin: 0; + margin-top: 5px; font-size: 13px; font-style: normal; font-weight: 300; - line-height: 17px; + line-height: 1.2; font-family: 'Roboto', sans-serif; } .field_contents fieldset .field_data .field_desc a { @@ -2289,7 +2294,7 @@ ul.dokan-settings-repeatable-list li span.remove-item { margin-top: 20px; } .field_contents .radio_fields label { - border: 0.882967px solid #B0A7A7; + border: 0.882967px solid #f3f4f6; padding: 10px 15px; display: inline-block; overflow: hidden; @@ -2305,7 +2310,7 @@ ul.dokan-settings-repeatable-list li span.remove-item { border-bottom-left-radius: 5px; } .field_contents .radio_fields label:last-child { - border-right: 0.882967px solid #B0A7A7; + border-right: 0.882967px solid #f3f4f6; border-top-right-radius: 5px; border-bottom-right-radius: 5px; } @@ -2314,11 +2319,11 @@ ul.dokan-settings-repeatable-list li span.remove-item { background: rgba(182, 206, 254, 0.38); box-sizing: border-box; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.1); - border-color: rgba(3, 58, 163, 0.81); + border-color: rgba(3, 58, 163, 0.41); } .field_contents .radio_fields .checked { color: rgba(3, 58, 163, 0.85); - border: 1px solid rgba(3, 58, 163, 0.81); + border: 1px solid rgba(3, 58, 163, 0.21); background: rgba(182, 206, 254, 0.38); box-sizing: border-box; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.1); @@ -2383,7 +2388,7 @@ ul.dokan-settings-repeatable-list li span.remove-item { .field_contents .field input[type='text'], .field_contents .field input[type='number'], .field_contents .field input[type='button'] { - border: 0.957434px solid #686666; + border: 0.957434px solid #E9E9E9; min-height: 32px; box-shadow: 0px 3.82974px 3.82974px rgba(0, 0, 0, 0.1); border-radius: 5px; @@ -2403,7 +2408,7 @@ ul.dokan-settings-repeatable-list li span.remove-item { } .field_contents .field label.checked { color: rgba(3, 58, 163, 0.85); - border: 1px solid rgba(3, 58, 163, 0.81); + border: 1px solid rgba(3, 58, 163, 0.41); background: rgba(182, 206, 254, 0.38); box-sizing: border-box; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.1); @@ -2431,7 +2436,6 @@ ul.dokan-settings-repeatable-list li span.remove-item { border: 0.82px solid #E5E5E5; padding: 10px 25px; background: rgba(220, 232, 254, 0.38); - box-shadow: 0px 3.28px 3.28px rgba(0, 0, 0, 0.1); border-radius: 6.56px; } .field_contents .scl_fields .scl_header { @@ -2496,7 +2500,7 @@ ul.dokan-settings-repeatable-list li span.remove-item { } .field_contents .scl_fields .scl_info .scl_text, .field_contents .scl_fields .scl_info .scl_html { - border: 1px solid #b0a7a7; + border: 1px solid #f3f4f6; display: flex; padding: 10px 30px 15px 27px; border-top: 0; @@ -2560,7 +2564,7 @@ ul.dokan-settings-repeatable-list li span.remove-item { } .field_contents .scl_fields .scl_info:nth-child(2) { margin-top: 15px; - border-top: 1px solid #b0a7a7; + border-top: 1px solid #f3f4f6; } .field_contents .scl_fields .scl_info:last-child { margin-bottom: 10px; @@ -2756,11 +2760,9 @@ ul.dokan-settings-repeatable-list li span.remove-item { } .dokan-settings-wrap div.nav-tab-wrapper { width: 340px; - border: 1px solid #c8d7e1; padding: 14px 16px 30px 24px; overflow: hidden; - background: #FAFBFF; - box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + background: #F9FAFB; box-sizing: border-box; margin-right: 12px; border-bottom: none; @@ -2781,7 +2783,7 @@ ul.dokan-settings-repeatable-list li span.remove-item { transition: none; background: transparent; font-weight: bold; - border-bottom: 1px solid #cecaca; + border-bottom: 1px solid #e9e9ea; transition-property: none; } .dokan-settings-wrap div.nav-tab-wrapper .nav-tab img { @@ -2811,7 +2813,6 @@ ul.dokan-settings-repeatable-list li span.remove-item { position: relative; transition: 0.3s linear; background: #fff !important; - box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); transition-property: none; } .dokan-settings-wrap div.nav-tab-wrapper .nav-tab.nav-tab-active:before { @@ -2823,15 +2824,6 @@ ul.dokan-settings-repeatable-list li span.remove-item { height: 100%; top: 0; } -.dokan-settings-wrap div.nav-tab-wrapper .nav-tab.nav-tab-active::after { - content: ''; - position: absolute; - width: 100%; - height: 1px; - background: #cecaca; - left: 0; - top: -1px; -} .dokan-settings-wrap div.nav-tab-wrapper .nav-tab:last-child { border-bottom: 0; } @@ -2870,31 +2862,37 @@ ul.dokan-settings-repeatable-list li span.remove-item { } .dokan-settings-wrap .metabox-holder .settings-header .settings-document-button a.doc-link { color: #033AA3D9; - border: 0.82px solid #033AA3; + border: 1px solid #f3f4f6; padding: 10px 15px; font-size: 12px; background: #FFF; box-sizing: border-box; - box-shadow: 0px 3.28px 3.28px rgba(0, 0, 0, 0.25); + box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.1); font-family: Roboto, sans-serif; line-height: 15px; border-radius: 6.56px; text-decoration: none; } +.dokan-settings-wrap .metabox-holder .settings-header .settings-document-button a.doc-link:hover { + background: #033aa30f; +} .dokan-settings-wrap .metabox-holder .group .form-table .dokan-settings-fields .dokan-settings-field-type-sub_section, .dokan-settings-wrap .metabox-holder .group .form-table .dokan-settings-fields .dokan-settings-field-type-disbursement_sub_section { - border-bottom: 1px solid #b0a7a7; + border-bottom: 1px solid #f3f4f6; } .dokan-settings-wrap .metabox-holder .group .form-table .dokan-settings-fields .dokan-settings-field-type-sub_section .sub-section-styles, .dokan-settings-wrap .metabox-holder .group .form-table .dokan-settings-fields .dokan-settings-field-type-disbursement_sub_section .sub-section-styles { - margin-top: 50px; + margin-top: 20px; + margin-bottom: 0; + padding: 20px; + background: #f9fafb; } .dokan-settings-wrap .metabox-holder .group .form-table .dokan-settings-fields div:not(.dokan-settings-field-type-sub_section) .field_contents { - border: 1px solid #b0a7a7; + border: 1px solid #f3f4f6; border-top: none; } .dokan-settings-wrap .metabox-holder .group .form-table .dokan-settings-fields > div:not(.dokan-settings-field-type-sub_section):first-child { - border-top: 1px solid #b0a7a7; + border-top: 1px solid #f3f4f6; } .dokan-settings-wrap .metabox-holder .back-to-top { width: 44px; @@ -2925,7 +2923,7 @@ ul.dokan-settings-repeatable-list li span.remove-item { height: 100%; content: ""; position: absolute; - background: #E5E5E5; + background: #fff; } .dokan-settings-wrap .radio-image-container { padding: 20px 0; diff --git a/assets/js/vue-admin.js b/assets/js/vue-admin.js index 81c382247d..794724f998 100644 --- a/assets/js/vue-admin.js +++ b/assets/js/vue-admin.js @@ -1,2 +1,2 @@ /*! For license information please see vue-admin.js.LICENSE.txt */ -(()=>{var e={302:e=>{e.exports=function(e,t,a){return ta?a:e:et?t:e}},850:e=>{function t(e,t,a){var i,s,n,o,r;function l(){var d=Date.now()-o;d=0?i=setTimeout(l,t-d):(i=null,a||(r=e.apply(n,s),n=s=null))}null==t&&(t=100);var d=function(){n=this,s=arguments,o=Date.now();var d=a&&!i;return i||(i=setTimeout(l,t)),d&&(r=e.apply(n,s),n=s=null),r};return d.clear=function(){i&&(clearTimeout(i),i=null)},d.flush=function(){i&&(r=e.apply(n,s),n=s=null,clearTimeout(i),i=null)},d}t.debounce=t,e.exports=t},882:(e,t,a)=>{var i="Expected a function",s=NaN,n="[object Symbol]",o=/^\s+|\s+$/g,r=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,d=/^0o[0-7]+$/i,c=parseInt,u="object"==typeof a.g&&a.g&&a.g.Object===Object&&a.g,p="object"==typeof self&&self&&self.Object===Object&&self,h=u||p||Function("return this")(),f=Object.prototype.toString,m=Math.max,v=Math.min,_=function(){return h.Date.now()};function g(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function k(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&f.call(e)==n}(e))return s;if(g(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=g(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var a=l.test(e);return a||d.test(e)?c(e.slice(2),a?2:8):r.test(e)?s:+e}e.exports=function(e,t,a){var s=!0,n=!0;if("function"!=typeof e)throw new TypeError(i);return g(a)&&(s="leading"in a?!!a.leading:s,n="trailing"in a?!!a.trailing:n),function(e,t,a){var s,n,o,r,l,d,c=0,u=!1,p=!1,h=!0;if("function"!=typeof e)throw new TypeError(i);function f(t){var a=s,i=n;return s=n=void 0,c=t,r=e.apply(i,a)}function b(e){var a=e-d;return void 0===d||a>=t||a<0||p&&e-c>=o}function C(){var e=_();if(b(e))return y(e);l=setTimeout(C,function(e){var a=t-(e-d);return p?v(a,o-(e-c)):a}(e))}function y(e){return l=void 0,h&&s?f(e):(s=n=void 0,r)}function w(){var e=_(),a=b(e);if(s=arguments,n=this,d=e,a){if(void 0===l)return function(e){return c=e,l=setTimeout(C,t),u?f(e):r}(d);if(p)return l=setTimeout(C,t),f(d)}return void 0===l&&(l=setTimeout(C,t)),r}return t=k(t)||0,g(a)&&(u=!!a.leading,o=(p="maxWait"in a)?m(k(a.maxWait)||0,t):o,h="trailing"in a?!!a.trailing:h),w.cancel=function(){void 0!==l&&clearTimeout(l),c=0,s=d=n=l=void 0},w.flush=function(){return void 0===l?r:y(_())},w}(e,t,{leading:s,maxWait:t,trailing:n})}},490:function(e,t){var a,i;a=function e(){"use strict";var t="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t?t:{},a=!t.document&&!!t.postMessage,i=t.IS_PAPA_WORKER||!1,s={},n=0,o={parse:function(a,i){var r=(i=i||{}).dynamicTyping||!1;if(C(r)&&(i.dynamicTypingFunction=r,r={}),i.dynamicTyping=r,i.transform=!!C(i.transform)&&i.transform,i.worker&&o.WORKERS_SUPPORTED){var l=function(){if(!o.WORKERS_SUPPORTED)return!1;var a,i,r=(a=t.URL||t.webkitURL||null,i=e.toString(),o.BLOB_URL||(o.BLOB_URL=a.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",i,")();"],{type:"text/javascript"})))),l=new t.Worker(r);return l.onmessage=v,l.id=n++,s[l.id]=l}();return l.userStep=i.step,l.userChunk=i.chunk,l.userComplete=i.complete,l.userError=i.error,i.step=C(i.step),i.chunk=C(i.chunk),i.complete=C(i.complete),i.error=C(i.error),delete i.worker,void l.postMessage({input:a,config:i,workerId:l.id})}var h=null;return o.NODE_STREAM_INPUT,"string"==typeof a?(a=function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}(a),h=i.download?new d(i):new u(i)):!0===a.readable&&C(a.read)&&C(a.on)?h=new p(i):(t.File&&a instanceof File||a instanceof Object)&&(h=new c(i)),h.stream(a)},unparse:function(e,t){var a=!1,i=!0,s=",",n="\r\n",r='"',l=r+r,d=!1,c=null,u=!1;!function(){if("object"==typeof t){if("string"!=typeof t.delimiter||o.BAD_DELIMITERS.filter((function(e){return-1!==t.delimiter.indexOf(e)})).length||(s=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(a=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(d=t.skipEmptyLines),"string"==typeof t.newline&&(n=t.newline),"string"==typeof t.quoteChar&&(r=t.quoteChar),"boolean"==typeof t.header&&(i=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");c=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+r),("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(u=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}}();var p=new RegExp(f(r),"g");if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return h(null,e,d);if("object"==typeof e[0])return h(c||Object.keys(e[0]),e,d)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||c),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),h(e.fields||[],e.data||[],d);throw new Error("Unable to serialize unrecognized input");function h(e,t,a){var o="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var r=Array.isArray(e)&&0=this._config.preview;if(i)t.postMessage({results:r,workerId:o.WORKER_ID,finished:d});else if(C(this._config.chunk)&&!a){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);r=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!d||!C(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),d||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){C(this._config.error)?this._config.error(e):i&&this._config.error&&t.postMessage({workerId:o.WORKER_ID,error:e,finished:!1})}}function d(e){var t;(e=e||{}).chunkSize||(e.chunkSize=o.RemoteChunkSize),l.call(this,e),this._nextChunk=a?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),a||(t.onload=b(this._chunkLoaded,this),t.onerror=b(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!a),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var i in e)t.setRequestHeader(i,e[i])}if(this._config.chunkSize){var s=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+s)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}a&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var a=t.statusText||e;this._sendError(new Error(a))}}function c(e){var t,a;(e=e||{}).chunkSize||(e.chunkSize=o.LocalChunkSize),l.call(this,e);var i="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,a=e.slice||e.webkitSlice||e.mozSlice,i?((t=new FileReader).onload=b(this._chunkLoaded,this),t.onerror=b(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function u(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,a=this._config.chunkSize;return a?(e=t.substring(0,a),t=t.substring(a)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function p(e){l.call(this,e=e||{});var t=[],a=!0,i=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){i&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):a=!0},this._streamData=b((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),a&&(a=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=b((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=b((function(){this._streamCleanUp(),i=!0,this._streamData("")}),this),this._streamCleanUp=b((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function h(e){var t,a,i,s=Math.pow(2,53),n=-s,r=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,d=this,c=0,u=0,p=!1,h=!1,v=[],_={data:[],errors:[],meta:{}};if(C(e.step)){var g=e.step;e.step=function(t){if(_=t,w())y();else{if(y(),0===_.data.length)return;c+=t.data.length,e.preview&&c>e.preview?a.abort():(_.data=_.data[0],g(_,d))}}}function b(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function y(){return _&&i&&(S("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+o.DefaultDelimiter+"'"),i=!1),e.skipEmptyLines&&(_.data=_.data.filter((function(e){return!b(e)}))),w()&&function(){if(_)if(Array.isArray(_.data[0])){for(var t=0;w()&&t<_.data.length;t++)_.data[t].forEach(a);_.data.splice(0,1)}else _.data.forEach(a);function a(t,a){C(e.transformHeader)&&(t=e.transformHeader(t,a)),v.push(t)}}(),function(){if(!_||!e.header&&!e.dynamicTyping&&!e.transform)return _;function t(t,a){var i,s=e.header?{}:[];for(i=0;i=v.length?"__parsed_extra":v[i]),e.transform&&(o=e.transform(o,n)),o=x(n,o),"__parsed_extra"===n?(s[n]=s[n]||[],s[n].push(o)):s[n]=o}return e.header&&(i>v.length?S("FieldMismatch","TooManyFields","Too many fields: expected "+v.length+" fields but parsed "+i,u+a):i=i.length/2?"\r\n":"\r"}(s,l)),i=!1,e.delimiter)C(e.delimiter)&&(e.delimiter=e.delimiter(s),_.meta.delimiter=e.delimiter);else{var d=function(t,a,i,s,n){var r,l,d,c;n=n||[",","\t","|",";",o.RECORD_SEP,o.UNIT_SEP];for(var u=0;u=r)return z(!0)}else for(U=c,c++;;){if(-1===(U=o.indexOf(t,U+1)))return h||y.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:b.length,index:c}),q();if(U===m-1)return q(o.substring(c,U).replace(F,t));if(t!==d||o[U+1]!==d){if(t===d||0===U||o[U-1]!==d){-1!==O&&O=r)return z(!0);break}y.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:b.length,index:c}),U++}}else U++}return q();function B(e){b.push(e),x=c}function j(e){var t=0;if(-1!==e){var a=o.substring(U+1,e);a&&""===a.trim()&&(t=a.length)}return t}function q(e){return h||(void 0===e&&(e=o.substring(c)),w.push(e),c=m,B(w),k&&W()),z()}function Z(e){c=e,B(w),w=[],E=o.indexOf(i,c)}function z(e){return{data:b,errors:y,meta:{delimiter:a,linebreak:i,aborted:u,truncated:!!e,cursor:x+(p||0)}}}function W(){n(z()),b=[],y=[]}},this.abort=function(){u=!0},this.getCharIndex=function(){return c}}function v(e){var t=e.data,a=s[t.workerId],i=!1;if(t.error)a.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){i=!0,_(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:g,resume:g};if(C(a.userStep)){for(var o=0;o{var i,s,n;!function(o){"use strict";s=[a(311)],i=function(e){var t,a=window.Slick||{};(t=0,a=function(a,i){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:e(a),appendDots:e(a),arrows:!0,asNavFor:null,prevArrow:'',nextArrow:'',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(t,a){return e(''; - } - } - /** * Send notification to the seller once a product is published from pending * - * @param \WP_Post $post + * @param WP_Post $post + * * @return void */ public function send_notification_on_product_publish( $post ) { @@ -382,8 +80,8 @@ public static function seller_meta_box_content( $post ) { $user = [ [ - 'id' => $selected, - 'text' => ! empty( $user->get_shop_name() ) ? $user->get_shop_name() : $user->get_name(), + 'id' => $selected, + 'text' => ! empty( $user->get_shop_name() ) ? $user->get_shop_name() : $user->get_name(), ], ]; ?> @@ -425,8 +123,8 @@ public function search_vendors() { if ( ! empty( $_GET['s'] ) ) { $s = sanitize_text_field( wp_unslash( $_GET['s'] ) ); - $args['search'] = '*' . $s . '*'; - $args['number'] = 35; + $args['search'] = '*' . $s . '*'; + $args['number'] = 35; $args['search_columns'] = [ 'user_login', 'user_email', 'display_name', 'user_nicename' ]; } @@ -491,7 +189,7 @@ public function override_product_author_by_admin( $product_id, $post ) { /** * Assign vendor for deleted post types * - * @param array $post_types + * @param array $post_types * @param integer $user_id * * @return array @@ -501,7 +199,7 @@ public function add_wc_post_types_to_delete_user( $post_types, $user_id ) { return $post_types; } - $wc_post_types = array( 'product', 'product_variation', 'shop_order', 'shop_coupon' ); + $wc_post_types = [ 'product', 'product_variation', 'shop_order', 'shop_coupon' ]; return array_merge( $post_types, $wc_post_types ); } @@ -519,9 +217,9 @@ public function update_pages( $value, $name ) { return $value; } - $current_settings = get_option( $name, array() ); - $current_settings = is_array( $current_settings ) ? $current_settings : array(); - $value = is_array( $value ) ? $value : array(); + $current_settings = get_option( $name, [] ); + $current_settings = is_array( $current_settings ) ? $current_settings : []; + $value = is_array( $value ) ? $value : []; return array_replace_recursive( $current_settings, $value ); } diff --git a/includes/Admin/Settings.php b/includes/Admin/Settings.php index 0af5767cdf..26e9b568c7 100644 --- a/includes/Admin/Settings.php +++ b/includes/Admin/Settings.php @@ -392,7 +392,7 @@ public function get_settings_fields() { 'admin_access' => [ 'name' => 'admin_access', 'label' => __( 'Admin Area Access', 'dokan-lite' ), - 'desc' => __( 'Disallow vendors from accessing the wp-admin dashboard area', 'dokan-lite' ), + 'desc' => __( 'Prevent vendors from accessing the wp-admin dashboard area. If HPOS feature is enabled, admin access will be blocked regardless of this setting.', 'dokan-lite' ), 'type' => 'switcher', 'default' => 'on', ], diff --git a/includes/Admin/functions.php b/includes/Admin/functions.php index 2c2b77990c..3177edeb42 100644 --- a/includes/Admin/functions.php +++ b/includes/Admin/functions.php @@ -1,4 +1,7 @@ 15 ) ); + $response = wp_remote_get( $help_url, [ 'timeout' => 15 ] ); $help_docs = wp_remote_retrieve_body( $response ); if ( is_wp_error( $response ) || (int) $response['response']['code'] !== 200 ) { @@ -35,7 +38,7 @@ function dokan_admin_get_help() { * @param string $year * @param string $start * @param string $end - * @param int $seller_id + * @param int $seller_id * * @return array */ @@ -44,8 +47,8 @@ function dokan_admin_report_data( $group_by = 'day', $year = '', $start = '', $e $now = dokan_current_datetime(); $group_by = apply_filters( 'dokan_report_group_by', $group_by ); - $start_date = ! empty( $start ) ? sanitize_text_field( $start ) : ''; // WPCS: CSRF ok. - $end_date = ! empty( $end ) ? sanitize_text_field( $end ) : ''; // WPCS: CSRF ok. + $start_date = ! empty( $start ) ? sanitize_text_field( $start ) : ''; + $end_date = ! empty( $end ) ? sanitize_text_field( $end ) : ''; $current_year = $now->format( 'Y' ); if ( empty( $start_date ) ) { @@ -64,34 +67,47 @@ function dokan_admin_report_data( $group_by = 'day', $year = '', $start = '', $e } } - $date_where = ''; + $date_where = ''; + $order_table_name = $wpdb->posts; + $id_field = 'ID'; + $date_field = 'post_date'; + $status_field = 'post_status'; + + if ( OrderUtil::is_hpos_enabled() ) { + $start_date = $now->modify( $start_date )->setTimezone( new DateTimeZone( 'UTC' ) )->format( 'Y-m-d' ); + $end_date = $now->modify( $end_date )->setTimezone( new DateTimeZone( 'UTC' ) )->format( 'Y-m-d' ); + $order_table_name = OrderUtil::get_order_table_name(); + $id_field = 'id'; + $date_field = 'date_created_gmt'; + $status_field = 'status'; + } if ( 'day' === $group_by ) { - $group_by_query = 'YEAR(p.post_date), MONTH(p.post_date), DAY(p.post_date)'; - $date_where = " AND DATE(p.post_date) >= '$start_date' AND DATE(p.post_date) <= '$end_date'"; + $group_by_query = "YEAR(p.{$date_field}), MONTH(p.{$date_field}), DAY(p.{$date_field})"; + $date_where = " AND DATE(p.{$date_field}) >= '{$start_date}' AND DATE(p.${date_field}) <= '{$end_date}'"; } else { - $group_by_query = 'YEAR(p.post_date), MONTH(p.post_date)'; - $date_where = " AND DATE(p.post_date) >= '$start_date' AND DATE(p.post_date) <= '$end_date'"; + $group_by_query = "YEAR(p.{$date_field}), MONTH(p.{$date_field})"; + $date_where = " AND DATE(p.{$date_field}) >= '{$start_date}' AND DATE(p.{$date_field}) <= '{$end_date}'"; } - $left_join = apply_filters( 'dokan_report_left_join', $date_where ); + $left_join = apply_filters( 'dokan_report_left_join', '' ); $date_where = apply_filters( 'dokan_report_where', $date_where ); $seller_where = $seller_id ? "seller_id = {$seller_id}" : 'seller_id != ' . 0; $sql = "SELECT - SUM((do.order_total - do.net_amount)) as earning, - SUM(do.order_total) as order_total, - COUNT(DISTINCT p.ID) as total_orders, - p.post_date as order_date - FROM {$wpdb->prefix}dokan_orders do - LEFT JOIN $wpdb->posts p ON do.order_id = p.ID - $left_join + SUM((do.order_total - do.net_amount)) AS earning, + SUM(do.order_total) AS order_total, + COUNT(DISTINCT p.{$id_field}) AS total_orders, + p.{$date_field} AS order_date + FROM {$wpdb->prefix}dokan_orders AS do + LEFT JOIN {$order_table_name} p ON do.order_id = p.{$id_field} + {$left_join} WHERE - $seller_where AND - p.post_status != 'trash' AND + {$seller_where} AND + p.{$status_field} != 'trash' AND do.order_status IN ('wc-on-hold', 'wc-completed', 'wc-processing') - $date_where - GROUP BY $group_by_query"; + {$date_where} + GROUP BY {$group_by_query}"; $data = $wpdb->get_results( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL @@ -101,17 +117,18 @@ function dokan_admin_report_data( $group_by = 'day', $year = '', $start = '', $e /** * Generate report in admin area * - * @global WPDB $wpdb - * @global object $wp_locale - * * @param string $group_by * @param string $year * @param string $start * @param string $end * + * @deprecated DOKAN_SINCE since we are getting the report data from REST API (dokan/v1/report), we don't need this function anymore. + * * @return array */ function dokan_admin_report( $group_by = 'day', $year = '', $start = '', $end = '' ) { + wc_deprecated_function( 'dokan_admin_report', 'DOKAN_SINCE' ); + global $wp_locale; $data = dokan_admin_report_data( $group_by, $year, $start, $end ); @@ -153,17 +170,17 @@ function dokan_admin_report( $group_by = 'day', $year = '', $start = '', $end = $order_commision = dokan_prepare_chart_data( $data, 'order_date', 'earning', $chart_interval, $start_date_to_time->getTimestamp(), $group_by ); // Encode in json format - $chart_data = array( + $chart_data = [ 'order_counts' => array_values( $order_counts ), 'order_amounts' => array_values( $order_amounts ), 'order_commision' => array_values( $order_commision ), - ); + ]; - $chart_colours = array( + $chart_colours = [ 'order_counts' => '#3498db', 'order_amounts' => '#1abc9c', 'order_commision' => '#73a724', - ); + ]; ?> @@ -180,11 +197,11 @@ function dokan_admin_report( $group_by = 'day', $year = '', $start = '', $end = } + + + key ) { + $vendor = dokan()->vendor->get( $display_value ); + $url = get_edit_user_link( $display_value ); + if ( function_exists( 'dokan_pro' ) ) { + $url = admin_url( 'admin.php?page=dokan#/vendors/' . $display_value ); + } + + return '" . $vendor->get_shop_name() . ''; + } + + return $display_value; + } + + /** + * Delete sub orders when parent order is trashed + * + * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file + * @since DOKAN_SINCE Rewritten for HPOS + * + * @param int $post_id + */ + public function admin_on_trash_order( $post_id ) { + if ( ! OrderUtil::is_order( $post_id ) ) { + return; + } + + $order = wc_get_order( $post_id ); + if ( ! $order || $order->get_parent_id() !== 0 ) { + return; + } + + $child_orders = dokan()->order->get_child_orders( $order->get_id() ); + foreach ( $child_orders as $child_order ) { + $child_order->delete( false ); + } + } + + /** + * Un-trash sub orders when parent orders are un-trashed + * + * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file + * @since DOKAN_SINCE Rewritten for HPOS + * + * @param int $post_id + * + * @return void + */ + public function admin_on_untrash_order( $post_id ) { + if ( ! OrderUtil::is_order( $post_id ) ) { + return; + } + + $order = wc_get_order( $post_id ); + if ( ! $order || $order->get_parent_id() !== 0 ) { + return; + } + + $child_orders = dokan()->order->get_child_orders( $order->get_id() ); + if ( ! $child_orders ) { + return; + } + + try { + $order_data_store = WC_Data_Store::load( 'order' ); + foreach ( $child_orders as $child_order ) { + if ( method_exists( $order_data_store->get_current_class_name(), 'untrash_order' ) ) { + $order_data_store->untrash_order( $child_order ); + } else { + wp_untrash_post( $child_order->get_id() ); + } + } + } catch ( Exception $e ) { + return; + } + } + + /** + * Delete sub orders and from dokan sync table when a order is deleted + * + * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file + * @since DOKAN_SINCE Rewritten for HPOS + * + * @param int $post_id + * + * @return void + */ + public function admin_on_delete_order( $post_id ) { + dokan()->order->delete_seller_order_with_suborders( $post_id ); + } + + /** + * Delete sub orders and from dokan sync table when a order is deleted + * + * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file + * @since DOKAN_SINCE Rewritten for HPOS + * + * @param int $post_id + * + * @return void + */ + public function admin_on_delete_order_post( $post_id ) { + $order = wc_get_order( $post_id ); + if ( ! $order ) { + return; + } + dokan()->order->delete_seller_order_with_suborders( $post_id ); + } + + /** + * Show a toggle button to toggle all the sub orders + * + * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file + * @since DOKAN_SINCE Rewritten for HPOS + * + * @param string $typenow + * + * @return void + */ + public function admin_shop_order_toggle_sub_orders( $typenow ) { + if ( $typenow === 'shop_order' ) { + echo ''; + } + } +} diff --git a/includes/Order/Admin/Permissions.php b/includes/Order/Admin/Permissions.php new file mode 100644 index 0000000000..461c7232a8 --- /dev/null +++ b/includes/Order/Admin/Permissions.php @@ -0,0 +1,181 @@ +ID : 0 ); + if ( empty( $post_id ) ) { + return $caps; + } + + $order = wc_get_order( $post_id ); + if ( ! $order ) { + return $caps; + } + + $vendor_id = $order->get_meta( '_dokan_vendor_id', true ); + if ( (int) $vendor_id === (int) $user_id ) { + return [ 'edit_shop_orders' ]; + } + } + + return $caps; + } + + /** + * Filter orders of current user + * + * @since 2.9.4 + * @since DOKAN_SINCE Moved this method from includes/functions.php + * @since DOKAN_SINCE Added HPOS Support + * + * @param array $args + * @param object $query + * + * @return array + */ + public function filter_orders_for_current_vendor( $args, $query ) { + global $wpdb; + + if ( ! is_admin() || ! $query->is_main_query() ) { + return $args; + } + + if ( ! isset( $query->query_vars['post_type'] ) ) { + return $args; + } + + if ( ! in_array( $query->query_vars['post_type'], [ 'shop_order', 'wc_booking' ], true ) ) { + return $args; + } + + $vendor_id = isset( $_GET['vendor_id'] ) ? absint( wp_unslash( $_GET['vendor_id'] ) ) : 0; // phpcs:ignore; + if ( ! current_user_can( 'manage_woocommerce' ) ) { + $vendor_id = dokan_get_current_user_id(); + } + + if ( ! $vendor_id ) { + return $args; + } + + $args['join'] .= " LEFT JOIN {$wpdb->prefix}dokan_orders as do ON $wpdb->posts.ID=do.order_id"; + $args['where'] .= " AND do.seller_id=$vendor_id"; + + return $args; + } + + /** + * Revoke vendor access of changing order status in the backend if permission is not given + * + * @since 2.8.0 + * @since DOKAN_SINCE Moved this method from includes/functions.php file + * + * @return void + */ + public function revoke_change_order_status() { + if ( current_user_can( 'manage_woocommerce' ) ) { + return; + } + + if ( is_admin() && get_current_screen()->id === 'shop_order' ) { + if ( dokan_get_option( 'order_status_change', 'dokan_selling', 'on' ) !== 'on' ) { + ?> + + init_classes(); + } + + /** + * Load required classes + * + * @return void + */ + public function init_classes() { + $this->container['hooks'] = new Hooks(); + $this->container['misc_hooks'] = new MiscHooks(); + $this->container['email_hooks'] = new EmailHooks(); + $this->container['cache'] = new OrderCache(); + $this->container['frontend_hooks'] = new Frontend\Hooks(); + + if ( is_admin() ) { + $this->container['permission'] = new Admin\Permissions(); + $this->container['admin_hooks'] = new Admin\Hooks(); + } + } +} diff --git a/includes/Order/EmailHooks.php b/includes/Order/EmailHooks.php new file mode 100644 index 0000000000..c966a14334 --- /dev/null +++ b/includes/Order/EmailHooks.php @@ -0,0 +1,180 @@ +get_id() ); + + $seller_info = get_userdata( $seller_id ); + $seller_email = $seller_info->user_email; + + // if admin email & seller email is same + if ( false === strpos( $recipient, $seller_email ) ) { + $recipient .= ',' . $seller_email; + } + + return $recipient; + } + + /** + * Add vendor email on customers note mail replay to + * + * @since DOKAN_SINCE Moved this method from includes/wc-functions.php file + * + * @param string $headers + * @param string $id + * @param WC_Order $order + * + * @return string $headers + */ + public function add_reply_to_vendor_email_on_wc_customer_note_mail( $headers, $id, $order ) { + if ( ! ( $order instanceof WC_Order ) ) { + return $headers; + } + + if ( 'customer_note' === $id ) { + foreach ( $order->get_items( 'line_item' ) as $item ) { + $product_id = $item['product_id']; + $author = get_post_field( 'post_author', $product_id ); + $author_data = get_userdata( absint( $author ) ); + $user_email = $author_data->user_email; + + $headers .= "Reply-to: <$user_email>\r\n"; + } + } + + return $headers; + } + + /** + * Exclude child order emails for customers + * + * A hacky and dirty way to do this from this action. Because there is no easy + * way to do this by removing action hooks from WooCommerce. It would be easier + * if they were from functions. Because they are added from classes, we can't + * remove those action hooks. That's why we are doing this from the phpmailer_init action + * by returning a fake phpmailer class. + * + * @since DOKAN_SINCE Moved this method from includes/wc-functions.php file + * + * @param object $phpmailer + * + * @return void + */ + public function exclude_child_customer_receipt( &$phpmailer ) { + $subject = $phpmailer->Subject; ////phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + + // order receipt + $sub_receipt = __( 'Your {site_title} order receipt from {order_date}', 'dokan-lite' ); + $sub_download = __( 'Your {site_title} order from {order_date} is complete', 'dokan-lite' ); + + $sub_receipt = str_replace( + [ + '{site_title}', + '{order_date}', + ], [ wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ), '' ], $sub_receipt + ); + $sub_download = str_replace( + [ + '{site_title}', + '{order_date} is complete', + ], [ wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ), '' ], $sub_download + ); + + // not a customer receipt mail + if ( ( stripos( $subject, $sub_receipt ) === false ) && ( stripos( $subject, $sub_download ) === false ) ) { + return; + } + + $message = $phpmailer->Body; //phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + $pattern = '/Order: #(\d+)/'; + preg_match( $pattern, $message, $matches ); + + if ( isset( $matches[1] ) ) { + $order_id = $matches[1]; + $order = wc_get_order( $order_id ); + + // we found a child order + if ( $order && $order->post_parent !== 0 ) { + $phpmailer = new FakeMailer(); + } + } + } +} diff --git a/includes/Order/Frontend/Hooks.php b/includes/Order/Frontend/Hooks.php new file mode 100644 index 0000000000..730a6172d0 --- /dev/null +++ b/includes/Order/Frontend/Hooks.php @@ -0,0 +1,54 @@ + isset( $_POST['status'] ) ? sanitize_text_field( wp_unslash( $_POST['status'] ) ) : '', + 'bulk_orders' => isset( $_POST['bulk_orders'] ) ? array_map( 'absint', $_POST['bulk_orders'] ) : [], + ] + ); + } +} diff --git a/includes/Order/Hooks.php b/includes/Order/Hooks.php index 2760da2b27..22ff05458a 100644 --- a/includes/Order/Hooks.php +++ b/includes/Order/Hooks.php @@ -3,6 +3,12 @@ namespace WeDevs\Dokan\Order; use Exception; +use WC_Order; + +// don't call the file directly +if ( ! defined( 'ABSPATH' ) ) { + exit; +} /** * Admin Hooks @@ -25,7 +31,8 @@ class Hooks { public function __construct() { // on order status change add_action( 'woocommerce_order_status_changed', [ $this, 'on_order_status_change' ], 10, 4 ); - add_action( 'woocommerce_order_status_changed', [ $this, 'on_sub_order_change' ], 99, 3 ); + add_action( 'woocommerce_order_status_changed', [ $this, 'manage_refunded_for_order' ], 15, 4 ); + add_action( 'woocommerce_order_status_changed', [ $this, 'on_sub_order_change' ], 99, 4 ); // create sub-orders add_action( 'woocommerce_checkout_update_order_meta', [ $this, 'split_vendor_orders' ] ); @@ -47,71 +54,16 @@ public function __construct() { add_action( 'woocommerce_reduce_order_stock', [ $this, 'restore_reduced_order_stock' ] ); add_action( 'woocommerce_reduce_order_stock', [ $this, 'handle_order_notes_for_suborder' ], 99 ); - - //Wc remove child order from wc_order_product_lookup & trim child order from posts for analytics - add_action( 'wc-admin_import_orders', [ $this, 'delete_child_order_from_wc_order_product' ] ); - add_filter( 'woocommerce_analytics_orders_select_query', [ $this, 'trim_child_order_for_analytics_order' ] ); - - // remove customer info from order export based on setting - add_filter( 'dokan_csv_export_headers', [ $this, 'hide_customer_info_from_vendor_order_export' ], 20, 1 ); - - // Change order meta key and value. - add_filter( 'woocommerce_order_item_display_meta_key', [ $this, 'change_order_item_display_meta_key' ] ); - add_filter( 'woocommerce_order_item_display_meta_value', [ $this, 'change_order_item_display_meta_value' ], 10, 2 ); - - // Init Order Cache Class - new OrderCache(); - } - - /** - * Change order item display meta key. - * - * @since DOKAN_LITE_SINCE - * - * @param $display_key - * - * @return string - */ - public function change_order_item_display_meta_key( $display_key ) { - if ( 'seller_id' === $display_key ) { - return __( 'Vendor', 'dokan-lite' ); - } - - return $display_key; - } - - /** - * Change order item display meta value. - * - * @since DOKAN_LITE_SINCE - * - * @param $display_value - * @param $meta - * - * @return string - */ - public function change_order_item_display_meta_value( $display_value, $meta ) { - if ( 'seller_id' === $meta->key ) { - $vendor = dokan()->vendor->get( $display_value ); - $url = get_edit_user_link( $display_value ); - if ( function_exists( 'dokan_pro' ) ) { - $url = admin_url( 'admin.php?page=dokan#/vendors/' . $display_value ); - } - - return '" . $vendor->get_shop_name() . ''; - } - - return $display_value; } /** * Update the child order status when a parent order status is changed * - * @param integer $order_id - * @param string $old_status - * @param string $new_status + * @param int $order_id + * @param string $old_status + * @param string $new_status + * @param WC_Order $order * - * @global object $wpdb * @return void */ public function on_order_status_change( $order_id, $old_status, $new_status, $order ) { @@ -119,7 +71,7 @@ public function on_order_status_change( $order_id, $old_status, $new_status, $or // Split order if the order doesn't have parent and sub orders, // and the order is created from dashboard. - if ( empty( $order->post_parent ) && empty( $order->get_meta( 'has_sub_order' ) ) && is_admin() ) { + if ( empty( $order->get_parent_id() ) && empty( $order->get_meta( 'has_sub_order' ) ) && is_admin() ) { // Remove the hook to prevent recursive callas. remove_action( 'woocommerce_order_status_changed', [ $this, 'on_order_status_change' ], 10 ); @@ -145,17 +97,12 @@ public function on_order_status_change( $order_id, $old_status, $new_status, $or ); // if any child orders found, change the orders as well - $sub_orders = get_children( - [ - 'post_parent' => $order_id, - 'post_type' => 'shop_order', - ] - ); - + $sub_orders = dokan()->order->get_child_orders( $order_id ); if ( $sub_orders ) { - foreach ( $sub_orders as $order_post ) { - $order = dokan()->order->get( $order_post->ID ); - $order->update_status( $new_status ); + foreach ( $sub_orders as $sub_order ) { + if ( is_callable( [ $sub_order, 'update_status' ] ) ) { + $sub_order->update_status( $new_status ); + } } } @@ -181,28 +128,49 @@ public function on_order_status_change( $order_id, $old_status, $new_status, $or [ '%s' ], [ '%d', '%s' ] ); + } - if ( $new_status !== 'wc-refunded' ) { - return; - } + /** + * If order status is set to refunded from vendor dashboard, enter remaining balance into vendor balance table. + * + * @since DOKAN_SINCE Created this method from on_order_status_change() + * + * @param int $order_id + * @param string $old_status + * @param string $new_status + * @param WC_Order $order + * + * @return void + */ + public function manage_refunded_for_order( $order_id, $old_status, $new_status, $order ) { + global $wpdb; // verify nonce if ( ! isset( $_POST['_wpnonce'], $_POST['post_type'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['_wpnonce'] ) ), 'dokan_change_status' ) ) { return; } + $exclude_cod_payment = 'on' === dokan_get_option( 'exclude_cod_payment', 'dokan_withdraw', 'off' ); + if ( $exclude_cod_payment && 'cod' === $order->get_payment_method() ) { + return; + } + + if ( $new_status !== 'wc-refunded' ) { + return; + } + if ( $_POST['post_type'] !== 'shop_order' ) { return; } - $balance_data = $wpdb->get_row( + $balance_data = $wpdb->get_var( $wpdb->prepare( - "select * from $wpdb->dokan_vendor_balance where trn_id = %d AND status = 'approved'", - $order_id + "SELECT 1 FROM $wpdb->dokan_vendor_balance WHERE trn_id = %d AND trn_type = %s AND status = 'approved'", + [ $order_id, 'dokan_refund' ] ) ); - if ( $balance_data ) { + if ( ! empty( $balance_data ) ) { return; } @@ -266,46 +234,41 @@ public function on_order_status_change( $order_id, $old_status, $new_status, $or /** * Mark the parent order as complete when all the child order are completed * - * @param integer $order_id - * @param string $old_status - * @param string $new_status + * @param integer $order_id + * @param string $old_status + * @param string $new_status + * @param WC_Order $order * * @return void */ - public function on_sub_order_change( $order_id, $old_status, $new_status ) { - $order_post = get_post( $order_id ); - + public function on_sub_order_change( $order_id, $old_status, $new_status, $order ) { // we are monitoring only child orders - if ( $order_post->post_parent === 0 ) { + if ( $order->get_parent_id() === 0 ) { return; } // get all the child orders and monitor the status - $parent_order_id = $order_post->post_parent; - $sub_orders = get_children( - [ - 'post_parent' => $parent_order_id, - 'post_type' => 'shop_order', - ] - ); + $parent_order_id = $order->get_parent_id(); + $sub_orders = dokan()->order->get_child_orders( $parent_order_id ); + + if ( ! $sub_orders ) { + return; + } // return if any child order is not completed $all_complete = true; - if ( $sub_orders ) { - foreach ( $sub_orders as $sub ) { - $order = dokan()->order->get( $sub->ID ); - - if ( $order->get_status() !== 'completed' ) { - $all_complete = false; - } + foreach ( $sub_orders as $sub_order ) { + if ( $sub_order->get_status() !== 'completed' ) { + $all_complete = false; + break; } } // seems like all the child orders are completed // mark the parent order as complete if ( $all_complete ) { - $parent_order = dokan()->order->get( $parent_order_id ); + $parent_order = wc_get_order( $parent_order_id ); $parent_order->update_status( 'wc-completed', __( 'Mark parent order completed when all child orders are completed.', 'dokan-lite' ) ); } } @@ -391,7 +354,7 @@ public function ensure_vendor_coupon( $valid, $coupon, $discount ) { /** * Restore order stock if it's been reduced by twice * - * @param object $order + * @param WC_Order $order * * @return void */ @@ -401,19 +364,13 @@ public function restore_reduced_order_stock( $order ) { return; } - $has_sub_order = wp_get_post_parent_id( $order->get_id() ); - // seems it's not a parent order so return early - if ( ! $has_sub_order ) { + if ( ! $order->get_meta( 'has_sub_order' ) ) { return; } // Loop over all items. - foreach ( $order->get_items() as $item ) { - if ( ! $item->is_type( 'line_item' ) ) { - continue; - } - + foreach ( $order->get_items( 'line_item' ) as $item ) { // Only reduce stock once for each item. $product = $item->get_product(); $item_stock_reduced = $item->get_meta( '_reduced_stock', true ); @@ -436,69 +393,21 @@ public function restore_reduced_order_stock( $order ) { } } - /** - * Delete_child_order_from_wc_order_product - * - * @param \ActionScheduler_Action $args - * - * @return void - */ - public function delete_child_order_from_wc_order_product( $args ) { - $order = get_post( $args ); - - if ( $order->post_parent ) { - global $wpdb; - $wpdb->delete( $wpdb->prefix . 'wc_order_product_lookup', [ 'order_id' => $order->ID ] ); - $wpdb->delete( $wpdb->prefix . 'wc_order_stats', [ 'order_id' => $order->ID ] ); - } - } - - /** - * Trim child order if parent exist from wc_order_product_lookup for analytics order - * - * @param \WC_Order $orders - * - * @return \WC_Order - */ - public function trim_child_order_for_analytics_order( $orders ) { - foreach ( $orders->data as $key => $order ) { - if ( $order['parent_id'] ) { - unset( $orders->data[ $key ] ); - } - } - - return $orders; - } - - public function hide_customer_info_from_vendor_order_export( $headers ) { - $hide_customer_info = dokan_get_option( 'hide_customer_info', 'dokan_selling', 'off' ); - if ( 'off' !== $hide_customer_info ) { - unset( $headers['billing_email'] ); - unset( $headers['customer_ip'] ); - } - - return $headers; - } - /** * Handle stock level wrong calculation in order notes for suborder * * @since DOKAN_LITE_SINCE * - * @param $order + * @param WC_Order $order * * @return void */ public function handle_order_notes_for_suborder( $order ) { - $has_sub_order = wp_get_post_parent_id( $order->get_id() ); - //return if it has suborder. only continue if this is a suborder - if ( ! $has_sub_order ) { + if ( ! $order->get_meta( 'has_sub_order' ) ) { return; } - $order = wc_get_order( $order->get_id() ); - $notes = wc_get_order_notes( [ 'order_id' => $order->get_id() ] ); //change stock level note status instead of deleting @@ -512,9 +421,7 @@ public function handle_order_notes_for_suborder( $order ) { //adding stock level notes in order foreach ( $order->get_items( 'line_item' ) as $key => $line_item ) { - $item_id = $line_item->get_variation_id() ? $line_item->get_variation_id() : $line_item->get_product_id(); - - $product = wc_get_product( $item_id ); + $product = $line_item->get_product(); if ( $product->get_manage_stock() ) { $stock_quantity = $product->get_stock_quantity(); diff --git a/includes/Order/Manager.php b/includes/Order/Manager.php index f239ec7981..e4606f960b 100644 --- a/includes/Order/Manager.php +++ b/includes/Order/Manager.php @@ -3,13 +3,17 @@ namespace WeDevs\Dokan\Order; use Exception; +use WC_Order; +use WC_Order_Refund; use WeDevs\Dokan\Cache; +use WeDevs\Dokan\Utilities\OrderUtil; use WP_Error; /** * Order Management API * * @since 2.8 + * @since DOKAN_SINCE added HPOS support */ class Manager { @@ -18,265 +22,550 @@ class Manager { * * @since 3.0.0 * @since 3.6.3 rewritten to include filters + * @since DOKAN_SINCE added HPOS support * - * @return WP_Error|int[]|\WC_Order[] + * @return WP_Error|int[]|WC_Order[] */ public function all( $args = [] ) { + $query_args = apply_filters( 'dokan_get_vendor_orders_args', wp_parse_args( $this->get_backward_compatibility_args( $args ), $args ), $args, [] ); + + if ( ! OrderUtil::is_hpos_enabled() ) { + $meta = $query_args['meta_query'] ?? []; + unset( $query_args['meta_query'] ); + + $handle_meta = function ( $query ) use ( $meta ) { + if ( [] === $meta ) { + return $query; + } + + if ( ! isset( $query['meta_query'] ) ) { + $query['meta_query'] = $meta; // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query + } else { + $query['meta_query'] = array_merge( $query['meta_query'], $meta ); // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query + } + + return $query; + }; + + add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', $handle_meta, 10, 1 ); + } + + $orders = wc_get_orders( $query_args ); + + if ( ! OrderUtil::is_hpos_enabled() ) { + remove_filter( 'woocommerce_order_data_store_cpt_get_orders_query', $handle_meta, 10 ); + } + + if ( isset( $args['return'] ) && 'count' === $args['return'] ) { + return apply_filters( 'dokan_get_vendor_orders_count', $orders->total, $args ); + } + + return apply_filters( 'dokan_get_vendor_orders', $orders, $args ); + } + + /** + * Get backward compatibility args + * + * @since DOKAN_SINCE + * + * @param array $args + * + * @return array + */ + protected function get_backward_compatibility_args( $args = [] ) { $default = [ - 'seller_id' => 0, - 'customer_id' => 0, - 'order_id' => 0, - 'status' => 'all', - 'order_date' => '', // only for backward compatibility, will be removed in future, if date is passed in args, it will be ignored - 'date' => [ + 'type' => 'shop_order', + 'seller_id' => 0, + 'customer_id' => 0, + 'order_id' => 0, + 'status' => 'all', + 'order_date' => '', // only for backward compatibility, will be removed in the future, if date is passed in args, it will be ignored + 'date' => [ 'from' => '', 'to' => '', ], - 'search' => '', - 'include' => [], - 'exclude' => [], - 'order_by' => 'post_date', - 'order' => 'DESC', - 'paged' => 1, - 'limit' => 10, - 'return' => 'objects', // objects, ids, count + 'search' => '', + 'include' => [], + 'exclude' => [], + 'orderby' => 'date', + 'order' => 'DESC', + 'limit' => 10, + 'paged' => 1, // do nothing if offset is used + 'offset' => '', + 'return' => 'objects', // objects, ids, count + 'meta_query' => [], // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query + 'meta_query_relation' => 'AND', ]; - $args = apply_filters( 'dokan_get_vendor_orders_args', wp_parse_args( $args, $default ), $args, $default ); + $args = wp_parse_args( $args, $default ); - global $wpdb; - - $fields = ''; - $join = " LEFT JOIN $wpdb->posts p ON do.order_id = p.ID"; - $where = ' AND p.post_status != %s'; - $groupby = ''; - $orderby = ''; - $limits = ''; - $query_args = [ 1, 1, 'trash' ]; + $query_args = [ + 'limit' => $args['limit'], + 'paged' => $args['paged'], + 'offset' => $args['offset'], + 'order' => $args['order'], + 'return' => $args['return'], + 'meta_query' => $args['meta_query'] ?? [], // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query + ]; - // determine which fields to return - if ( in_array( $args['return'], [ 'objects', 'ids' ], true ) ) { - $fields = 'do.order_id'; - } elseif ( in_array( $args['return'], [ 'count' ], true ) ) { - $fields = 'COUNT(do.order_id) AS count'; - } + // fix meta query relation + $query_args['meta_query']['relation'] = $args['meta_query_relation']; - // now apply filtering on the fields + // now apply filtering on the field // filter by seller id if ( ! $this->is_empty( $args['seller_id'] ) ) { - $seller_ids = implode( "','", array_map( 'absint', (array) $args['seller_id'] ) ); - $where .= " AND do.seller_id IN ('$seller_ids')"; + $seller_ids = array_filter( array_map( 'absint', (array) $args['seller_id'] ) ); + $query_args['meta_query'][] = [ + [ + 'key' => '_dokan_vendor_id', + 'value' => $seller_ids, + 'compare' => 'IN', + 'type' => 'NUMERIC', + ], + ]; } // filter customer id if ( ! $this->is_empty( $args['customer_id'] ) ) { - $join .= " LEFT JOIN $wpdb->postmeta pm ON p.ID = pm.post_id"; - $customer_ids = implode( "','", array_map( 'absint', (array) $args['customer_id'] ) ); - $where .= " AND pm.meta_key = '_customer_user' AND pm.meta_value IN ('$customer_ids')"; + $customer_ids = array_filter( array_map( 'absint', (array) $args['customer_id'] ) ); + $query_args['customer_id'] = $customer_ids; } // filter order id if ( ! $this->is_empty( $args['order_id'] ) ) { - $order_ids = implode( "','", array_map( 'absint', (array) $args['order_id'] ) ); - $where .= " AND do.order_id IN ('$order_ids')"; + $order_ids = array_filter( array_map( 'absint', (array) $args['order_id'] ) ); + if ( OrderUtil::is_hpos_enabled() ) { + $query_args['id'] = $order_ids; + } else { + $query_args['post__in'] = $order_ids; + } } // filter status if ( ! $this->is_empty( $args['status'] ) && 'all' !== $args['status'] ) { - $status = implode( "','", esc_sql( (array) $args['status'] ) ); - $where .= " AND do.order_status IN ('$status')"; + $query_args['status'] = (array) $args['status']; } // include order ids if ( ! $this->is_empty( $args['include'] ) ) { - $include = implode( "','", array_map( 'absint', (array) $args['include'] ) ); - $where .= " AND do.order_id IN ('$include')"; + $include = array_filter( array_map( 'absint', (array) $args['include'] ) ); + if ( OrderUtil::is_hpos_enabled() ) { + $query_args['id'] = $include; + } else { + $query_args['post__in'] = $include; + } } // exclude order ids if ( ! $this->is_empty( $args['exclude'] ) ) { - $exclude = implode( "','", array_map( 'absint', (array) $args['exclude'] ) ); - $where .= " AND do.order_id NOT IN ('$exclude')"; + $exclude = array_filter( array_map( 'absint', (array) $args['exclude'] ) ); + $query_args['exclude'] = $exclude; } // date filter $date_from = false; $date_to = false; - // check if start date is set + // check if the start date is set if ( ! $this->is_empty( $args['date']['from'] ) ) { // convert date string to object $date_from = dokan_current_datetime()->modify( $args['date']['from'] ); } - // check if end date is set + // check if the end date is set if ( ! $this->is_empty( $args['date']['to'] ) ) { // convert date string to object $date_to = dokan_current_datetime()->modify( $args['date']['to'] ); } - //swap dates if start date is after end date - $date_filter_applied = false; if ( $date_from && $date_to ) { - // fix start and end date - if ( $date_from > $date_to ) { - $date_from = $date_from->format( 'Y-m-d' ); - $date_to = $date_to->format( 'Y-m-d' ); - $args['date'] = [ - 'from' => $date_to, - 'to' => $date_from, - ]; - } - $where .= ' AND DATE( p.post_date ) BETWEEN %s AND %s'; - $query_args[] = $args['date']['from']; - $query_args[] = $args['date']['to']; + $date_from = $date_from->format( 'Y-m-d' ); + $date_to = $date_to->format( 'Y-m-d' ); + $query_args['date_created'] = $date_from . '...' . $date_to; // if only start date is set } elseif ( $date_from ) { - $where .= ' AND DATE( p.post_date ) >= %s'; - $query_args[] = $date_from->format( 'Y-m-d' ); + $query_args['date_created'] = '>=' . $date_from->format( 'Y-m-d' ); // if only end date is set } elseif ( $date_to ) { - $where .= ' AND DATE( p.post_date ) <= %s'; - $query_args[] = $date_to->format( 'Y-m-d' ); - // if only single date is set + $query_args['date_created'] = '<=' . $date_to->format( 'Y-m-d' ); + // if only a single date is set } elseif ( is_string( $args['date'] ) && ! empty( $args['date'] ) ) { // backward compatibility for old filter - $where .= ' AND DATE( p.post_date ) = %s'; - $query_args[] = $args['date']; + $query_args['date_created'] = $args['date']; } elseif ( ! $this->is_empty( $args['order_date'] ) ) { // backward compatibility for old filter - $order_date = dokan_current_datetime()->modify( $args['order_date'] ); - if ( $order_date ) { - $where .= ' AND DATE( p.post_date ) = %s'; - $query_args[] = $order_date->format( 'Y-m-d' ); - } + $query_args['date_created'] = $args['order_date']; } // filter by search parameter if ( ! $this->is_empty( $args['search'] ) ) { - $search = '%' . $wpdb->esc_like( $args['search'] ) . '%'; - $where .= ' AND p.ID LIKE %s'; - $query_args[] = $search; + if ( OrderUtil::is_hpos_enabled() ) { + $query_args['id'] = (int) $args['search']; + } else { + $query_args['post__in'] = [ (int) $args['search'] ]; + } } // fix order by parameter if ( ! in_array( strtoupper( $args['order'] ), [ 'ASC', 'DESC' ], true ) ) { - $args['order'] = 'DESC'; + $query_args['order'] = 'DESC'; } // fix order by parameter + if ( isset( $args['order_by'] ) ) { + $args['orderby'] = $args['order_by']; + } + + // get supported orderby paramter $supported_order_by = [ - 'post_date' => 'p.post_date', - 'id' => 'do.id', - 'order_id' => 'do.order_id', - 'seller_id' => 'do.seller_id', - 'order_status' => 'do.order_status', + 'name' => 'name', + 'type' => 'type', + 'rand' => 'rand', + 'modified' => 'modified', + 'post_date' => 'date', + 'date' => 'date', + 'id' => 'ID', + 'order_id' => 'ID', + 'seller_id' => 'seller_id', ]; - if ( ! empty( $args['order_by'] ) && array_key_exists( $args['order_by'], $supported_order_by ) ) { - $orderby = "ORDER BY {$supported_order_by[ $args['order_by'] ]} {$args['order']}"; //no need for prepare, we've already whitelisted the parameters - //second order by in case of similar value on first order by field - if ( 'order_id' !== $args['order_by'] ) { - $orderby .= ", do.order_id {$args['order']}"; - } + if ( ! array_key_exists( $args['orderby'], $supported_order_by ) ) { + $args['orderby'] = 'date'; } - // pagination param - if ( ! empty( $args['limit'] ) && - 1 !== intval( $args['limit'] ) && 'count' !== $args['return'] ) { - $limit = absint( $args['limit'] ); - $page = absint( $args['paged'] ); - $page = $page > 0 ? $page : 1; - $offset = ( $page - 1 ) * $limit; + switch ( $args['orderby'] ) { + case 'seller_id': + $query_args = array_merge( + $query_args, [ + 'orderby' => 'meta_value', + 'meta_key' => '_dokan_vendor_id', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key + 'meta_type' => 'NUMERIC', + ] + ); + break; - $limits = 'LIMIT %d, %d'; - $query_args[] = $offset; - $query_args[] = $limit; + default: + $query_args['orderby'] = $supported_order_by[ $args['orderby'] ]; + break; } - $cache_group = 'seller_order_data'; - $cache_key = 'seller_orders_all_' . md5( wp_json_encode( $args ) ); // Use all arguments to create a hash used as cache key - if ( is_numeric( $args['seller_id'] ) ) { - $cache_group = "seller_order_data_{$args['seller_id']}"; - } elseif ( ! $this->is_empty( $args['seller_id'] ) && 1 === count( $args['seller_id'] ) ) { - $cache_group = "seller_order_data_{$args['seller_id'][0]}"; + // fix return parameter + if ( 'count' === $query_args['return'] ) { + $query_args['limit'] = 1; + $query_args['return'] = 'ids'; + $query_args['paginate'] = true; } - $orders = Cache::get( $cache_key, $cache_group ); - - if ( 'count' === $args['return'] && false === $orders ) { - // get count of entries - // @codingStandardsIgnoreStart - $orders = (int) $wpdb->get_var( - $wpdb->prepare( - "SELECT $fields FROM {$wpdb->prefix}dokan_orders AS do $join WHERE %d=%d $where", - $query_args - ) - ); + return $query_args; + } - // check for query error - if ( ! empty( $wpdb->last_error ) ) { - return new WP_Error( 'order_manager_db_error', $wpdb->last_error, $wpdb->last_query ); - } + /** + * Get single order details + * + * @since 3.0.0 + * + * @return bool|WC_Order|WC_Order_Refund + */ + public function get( $id ) { + return wc_get_order( $id ); + } - // @codingStandardsIgnoreEnd - Cache::set( $cache_key, $orders, $cache_group ); - } elseif ( in_array( $args['return'], [ 'objects', 'ids' ], true ) && false === $orders ) { - // @codingStandardsIgnoreStart - $orders = $wpdb->get_col( - $wpdb->prepare( - "SELECT $fields FROM {$wpdb->prefix}dokan_orders AS do $join WHERE %d=%d $where $groupby $orderby $limits", - $query_args - ) - ); - // @codingStandardsIgnoreEnd + /** + * Count orders for a seller + * + * @since DOKAN_SINCE moved this function from functions.php file + * + * @param int $seller_id + * + * @return array + */ + public function count_orders( $seller_id ) { + global $wpdb; - // check for query error - if ( ! empty( $wpdb->last_error ) ) { - return new WP_Error( 'order_manager_db_error', $wpdb->last_error, $wpdb->last_query ); + $cache_group = "seller_order_data_{$seller_id}"; + $cache_key = "count_orders_{$seller_id}"; + $counts = Cache::get( $cache_key, $cache_group ); + + if ( false === $counts ) { + $counts = [ + 'wc-pending' => 0, + 'wc-completed' => 0, + 'wc-on-hold' => 0, + 'wc-processing' => 0, + 'wc-refunded' => 0, + 'wc-cancelled' => 0, + 'wc-failed' => 0, + 'wc-checkout-draft' => 0, + 'total' => 0, + ]; + $counts = apply_filters( 'dokan_order_status_count', $counts ); + + $order_table_name = OrderUtil::get_order_table_name(); + if ( OrderUtil::is_hpos_enabled() ) { + // HPOS usage is enabled. + // phpcs:disable + $query = $wpdb->prepare( + "SELECT do.order_status as order_status, count(do.id) as order_count + FROM {$wpdb->prefix}dokan_orders AS do + LEFT JOIN $order_table_name p ON do.order_id = p.id + WHERE + do.seller_id = %d AND + p.status != 'trash' + GROUP BY do.order_status", + [ $seller_id ] + ); + // phpcs:enable + } else { + // traditional CPT-based orders are in use. + // phpcs:disable + $query = $wpdb->prepare( + "SELECT do.order_status as order_status, count(do.id) as order_count + FROM {$wpdb->prefix}dokan_orders AS do + LEFT JOIN $order_table_name p ON do.order_id = p.ID + WHERE + do.seller_id = %d AND + p.post_status != 'trash' + GROUP BY do.order_status", + [ $seller_id ] + ); + // phpcs:enable } - if ( 'objects' === $args['return'] ) { - $order_objects = []; - foreach ( $orders as $order_id ) { - $order = $this->get( $order_id ); - if ( $order ) { - // only send legit order object, this will prevent some fatal error in case order object is not found - $order_objects[] = $order; + $results = $wpdb->get_results( $query ); // phpcs:ignore + + if ( $results ) { + foreach ( $results as $count ) { + if ( isset( $counts[ $count->order_status ] ) ) { + $counts[ $count->order_status ] = intval( $count->order_count ); + $counts['total'] += $counts[ $count->order_status ]; } } - $orders = $order_objects; - unset( $order_objects ); } - Cache::set( $cache_key, $orders, $cache_group ); + $counts = (object) $counts; + Cache::set( $cache_key, $counts, $cache_group ); } - return apply_filters( 'dokan_get_vendor_orders', $orders, $args ); + return $counts; } /** - * Get single order details + * Check if an order with same id is exists in database * - * @since 3.0.0 + * @since DOKAN_SINCE * - * @return bool|\WC_Order|\WC_Order_Refund + * @param int|WC_Order $order_id + * + * @return boolean */ - public function get( $id ) { - return wc_get_order( $id ); + public function is_order_already_synced( $order_id ) { + global $wpdb; + + if ( $order_id instanceof WC_Order ) { + $order_id = $order_id->get_id(); + } + + if ( ! $order_id || ! is_numeric( $order_id ) ) { + return false; + } + + $order_id = $wpdb->get_var( $wpdb->prepare( "SELECT 1 FROM {$wpdb->prefix}dokan_orders WHERE order_id=%d LIMIT 1", $order_id ) ); + + return wc_string_to_bool( $order_id ); + } + + /** + * Check if order is belonged to given seller + * + * @since DOKAN_SINCE + * + * @param int $seller_id + * @param int $order_id + * + * @return bool + */ + public function is_seller_has_order( $seller_id, $order_id ) { + global $wpdb; + return 1 === (int) $wpdb->get_var( + $wpdb->prepare( + "SELECT 1 FROM {$wpdb->prefix}dokan_orders WHERE seller_id = %d AND order_id = %d LIMIT 1", + [ $seller_id, $order_id ] + ) + ); + } + + /** + * Get order of current logged-in users or by given customer id + * + * @since DOKAN_SINCE + * + * @param array $args + * + * @return \stdClass|WC_Order[]|int[] + */ + public function get_customer_orders( $args ) { + // fix customer id if not provided + $customer_id = ! empty( $args['customer_id'] ) ? intval( $args['customer_id'] ) : dokan_get_current_user_id(); + $args = [ + 'customer_id' => $customer_id, + 'limit' => ! empty( $args['limit'] ) ? intval( $args['limit'] ) : 10, + 'paged' => ! empty( $args['paged'] ) ? absint( $args['paged'] ) : 1, + 'return' => ! empty( $args['return_type'] ) && in_array( $args['return_type'], [ 'ids', 'objects' ], true ) ? sanitize_text_field( $args['return_type'] ) : 'ids', + ]; + + return $this->all( + apply_filters( 'woocommerce_my_account_my_orders_query', $args ) + ); + } + + /** + * Get Customer Order IDs by Seller + * + * @since DOKAN_SINCE + * + * @param int $customer_id + * @param int $seller_id + * + * @return int[]|null on failure + */ + public function get_customer_order_ids_by_seller( $customer_id, $seller_id ) { + if ( ! $customer_id || ! $seller_id ) { + return null; + } + + $args = [ + 'customer_id' => $customer_id, + 'seller_id' => $seller_id, + 'return' => 'ids', + 'limit' => -1, + ]; + + $orders = $this->all( apply_filters( 'dokan_get_customer_orders_by_seller', $args ) ); + + return ! empty( $orders ) ? $orders : null; + } + + /** + * @param int|WC_Order $parent_order + * + * @return WC_Order[] + */ + public function get_child_orders( $parent_order ) { + $parent_order_id = is_numeric( $parent_order ) ? $parent_order : $parent_order->get_id(); + + return wc_get_orders( + [ + 'type' => 'shop_order', + 'parent' => $parent_order_id, + 'limit' => -1, + ] + ); + } + + /** + * Delete dokan order + * + * @since DOKAN_SINCE + * + * @param int $order_id + * @param int|null $seller_id + * + * @return void + */ + public function delete_seller_order( $order_id, $seller_id = null ) { + global $wpdb; + + $where = [ + 'order_id' => $order_id, + ]; + + $where_format = [ '%d' ]; + + if ( is_numeric( $seller_id ) ) { + $where['seller_id'] = $seller_id; + $where_format[] = '%d'; + } + + $deleted = $wpdb->delete( $wpdb->prefix . 'dokan_orders', $where, $where_format ); + if ( false === $deleted ) { + dokan_log( sprintf( '[DeleteSellerOrder] Error while deleting dokan order table data, order_id: %d, Database Error: %s ', $order_id, $wpdb->last_error ) ); + + return; // since dokan_orders table data couldn't be deleted, returning from here + } + + // delete from dokan refund table -> order_id + $deleted = $wpdb->query( + $wpdb->prepare( + "DELETE FROM `{$wpdb->prefix}dokan_refund` WHERE order_id = %d", + [ $order_id ] + ) + ); + if ( false === $deleted ) { + dokan_log( sprintf( '[DeleteSellerOrder] Error while deleting refund table data, order_id: %d, Database Error: %s ', $order_id, $wpdb->last_error ) ); + } + + do_action( 'dokan_after_deleting_seller_order', $order_id ); + + // delete data from vendor balance table -> trn_id, trn_type: dokan_orders, dokan_refund, dokan_withdraw + $deleted = $wpdb->query( + $wpdb->prepare( + "DELETE FROM `{$wpdb->prefix}dokan_vendor_balance` + WHERE trn_id = %d AND trn_type in ( %s, %s, %s )", + [ $order_id, 'dokan_orders', 'dokan_refund', 'dokan_withdraw' ] + ) + ); + if ( false === $deleted ) { + dokan_log( sprintf( '[DeleteSellerOrder] Error while deleting vendor balance table data, order_id: %d, Database Error: %s ', $order_id, $wpdb->last_error ) ); + } + + // delete data from reverse withdrawal table -> order_id, trn_type: order_commission, manual_order_commission, order_refund + $deleted = $wpdb->query( + $wpdb->prepare( + "DELETE FROM `{$wpdb->prefix}dokan_reverse_withdrawal` + WHERE trn_id = %d AND trn_type in ( %s, %s, %s )", + [ $order_id, 'order_commission', 'manual_order_commission', 'order_refund' ] + ) + ); + if ( false === $deleted ) { + dokan_log( sprintf( '[DeleteSellerOrder] Error while deleting dokan reverse withdrawal table data, order_id: %d, Database Error: %s ', $order_id, $wpdb->last_error ) ); + } + } + + /** + * Delete dokan order with suborders + * + * @since DOKAN_SINCE + * + * @param int $order_id + * + * @return void + */ + public function delete_seller_order_with_suborders( $order_id ) { + // delete main order + $this->delete_seller_order( $order_id ); + + $sub_orders = $this->get_child_orders( $order_id ); + + if ( $sub_orders ) { + foreach ( $sub_orders as $sub_order ) { + // delete_seller_order for sub_order will be called from Order/Admin/Hooks.php file + $sub_order->delete( true ); + } + } } /** * Creates a sub order * - * @param \WC_Order $parent_order - * @param integer $seller_id - * @param array $seller_products + * @param WC_Order $parent_order + * @param integer $seller_id + * @param array $seller_products * * @return void|WP_Error */ public function create_sub_order( $parent_order, $seller_id, $seller_products ) { dokan_log( 'Creating sub order for vendor: #' . $seller_id ); - $bill_ship = array( + $bill_ship = [ 'billing_country', 'billing_first_name', 'billing_last_name', @@ -297,18 +586,34 @@ public function create_sub_order( $parent_order, $seller_id, $seller_products ) 'shipping_city', 'shipping_state', 'shipping_postcode', - ); + ]; try { - $order = new \WC_Order(); + $order = new WC_Order(); + + // save other details + $order->set_created_via( 'dokan' ); + $order->set_cart_hash( $parent_order->get_cart_hash() ); + $order->set_customer_id( $parent_order->get_customer_id() ); + $order->set_currency( $parent_order->get_currency() ); + $order->set_prices_include_tax( $parent_order->get_prices_include_tax() ); + $order->set_customer_ip_address( $parent_order->get_customer_ip_address() ); + $order->set_customer_user_agent( $parent_order->get_customer_user_agent() ); + $order->set_customer_note( $parent_order->get_customer_note() ); + $order->set_payment_method( $parent_order->get_payment_method() ); + $order->set_payment_method_title( $parent_order->get_payment_method_title() ); + $order->update_meta_data( '_dokan_vendor_id', $seller_id ); // save billing and shipping address foreach ( $bill_ship as $key ) { - if ( is_callable( array( $order, "set_{$key}" ) ) ) { + if ( is_callable( [ $order, "set_{$key}" ] ) ) { $order->{"set_{$key}"}( $parent_order->{"get_{$key}"}() ); } } + // save other meta data + $order->save(); // need to save order data before passing it to a hook + // now insert line items $this->create_line_items( $order, $seller_products ); @@ -321,35 +626,22 @@ public function create_sub_order( $parent_order, $seller_id, $seller_products ) // add coupons if any $this->create_coupons( $order, $parent_order, $seller_products ); - // save other details - $order->set_created_via( 'dokan' ); - $order->set_cart_hash( $parent_order->get_cart_hash() ); - $order->set_customer_id( $parent_order->get_customer_id() ); - $order->set_currency( $parent_order->get_currency() ); - $order->set_prices_include_tax( $parent_order->get_prices_include_tax() ); - $order->set_customer_ip_address( $parent_order->get_customer_ip_address() ); - $order->set_customer_user_agent( $parent_order->get_customer_user_agent() ); - $order->set_customer_note( $parent_order->get_customer_note() ); - $order->set_payment_method( $parent_order->get_payment_method() ); - $order->set_payment_method_title( $parent_order->get_payment_method_title() ); - $order->update_meta_data( '_dokan_vendor_id', $seller_id ); + $order->save(); // need to save order data before passing it to a hook do_action( 'dokan_create_sub_order_before_calculate_totals', $order, $parent_order, $seller_products ); // finally, let the order re-calculate itself and save $order->calculate_totals(); - $order->set_status( $parent_order->get_status() ); $order->set_parent_id( $parent_order->get_id() ); - - $order_id = $order->save(); + $order->save(); // update total_sales count for sub-order - wc_update_total_sales_counts( $order_id ); + wc_update_total_sales_counts( $order->get_id() ); - dokan_log( 'Created sub order : #' . $order_id ); + dokan_log( 'Created sub order : #' . $order->get_id() ); - do_action( 'dokan_checkout_update_order_meta', $order_id, $seller_id ); + do_action( 'dokan_checkout_update_order_meta', $order->get_id(), $seller_id ); } catch ( Exception $e ) { return new WP_Error( 'dokan-suborder-error', $e->getMessage() ); } @@ -358,12 +650,12 @@ public function create_sub_order( $parent_order, $seller_id, $seller_products ) /** * Create line items for order * - * @param object $order wc_get_order - * @param array $products + * @param object $order wc_get_order + * @param array $products * * @return void */ - public function create_line_items( $order, $products ) { + private function create_line_items( $order, $products ) { foreach ( $products as $item ) { $product_item = new \WC_Order_Item_Product(); @@ -388,21 +680,19 @@ public function create_line_items( $order, $products ) { $order->add_item( $product_item ); } - $order->save(); - do_action( 'dokan_after_create_line_items', $order ); } /** * Create tax line items * - * @param \WC_Order $order - * @param \WC_Order $parent_order - * @param array $products + * @param WC_Order $order + * @param WC_Order $parent_order + * @param array $products * * @return void */ - public function create_taxes( $order, $parent_order, $products ) { + private function create_taxes( $order, $parent_order, $products ) { $shipping = $order->get_items( 'shipping' ); $tax_total = 0; @@ -420,31 +710,29 @@ function ( $item ) { foreach ( $parent_order->get_taxes() as $tax ) { $item = new \WC_Order_Item_Tax(); $item->set_props( - array( + [ 'rate_id' => $tax->get_rate_id(), 'label' => $tax->get_label(), 'compound' => $tax->get_compound(), 'rate_code' => \WC_Tax::get_rate_code( $tax->get_rate_id() ), 'tax_total' => $tax_total, 'shipping_tax_total' => empty( $seller_shipping_total_taxes ) ? '' : array_sum( $seller_shipping_total_taxes ), - ) + ] ); $order->add_item( $item ); } - - $order->save(); } /** * Create shipping for a sub-order if neccessary * - * @param \WC_Order $order - * @param \WC_Order $parent_order + * @param WC_Order $order + * @param WC_Order $parent_order * * @return void */ - public function create_shipping( $order, $parent_order ) { + private function create_shipping( $order, $parent_order ) { dokan_log( sprintf( '#%d - Creating Shipping.', $order->get_id() ) ); // Get all shipping methods for parent order @@ -493,12 +781,12 @@ public function create_shipping( $order, $parent_order ) { $item = new \WC_Order_Item_Shipping(); $item->set_props( - array( + [ 'method_title' => $shipping_method->get_name(), 'method_id' => $shipping_method->get_method_id(), 'total' => $shipping_method->get_total(), 'taxes' => $shipping_method->get_taxes(), - ) + ] ); $shipping_totals += $shipping_method->get_total(); $metadata = $shipping_method->get_meta_data(); @@ -517,13 +805,13 @@ public function create_shipping( $order, $parent_order ) { /** * Create coupons for a sub-order if neccessary * - * @param \WC_Order $order - * @param \WC_Order $parent_order - * @param array $products + * @param WC_Order $order + * @param WC_Order $parent_order + * @param array $products * * @return void */ - public function create_coupons( $order, $parent_order, $products ) { + private function create_coupons( $order, $parent_order, $products ) { $used_coupons = $parent_order->get_items( 'coupon' ); $product_ids = array_map( function ( $item ) { @@ -547,17 +835,18 @@ function ( $item ) { if ( $coupon && ! is_wp_error( $coupon ) && - ( array_intersect( $product_ids, $coupon->get_product_ids() ) || + ( + array_intersect( $product_ids, $coupon->get_product_ids() ) || apply_filters( 'dokan_is_order_have_admin_coupon', false, $coupon, [ $seller_id ], $product_ids ) ) ) { $new_item = new \WC_Order_Item_Coupon(); $new_item->set_props( - array( + [ 'code' => $item->get_code(), 'discount' => $item->get_discount(), 'discount_tax' => $item->get_discount_tax(), - ) + ] ); $new_item->add_meta_data( 'coupon_data', $coupon->get_data() ); @@ -565,8 +854,6 @@ function ( $item ) { $order->add_item( $new_item ); } } - - $order->save(); } /** @@ -576,35 +863,46 @@ function ( $item ) { * to each seller dashboard. That's why we need to divide the main order to * some sub-orders based on the number of sellers. * - * @param int $parent_order_id + * @since DOKAN_SINCE added $force_create parameter + * + * @param bool $force_create if this parameter is true, if suborder is already created, they'd be deleted first + * + * @param int $parent_order_id * * @return void */ - public function maybe_split_orders( $parent_order_id ) { - $parent_order = dokan()->order->get( $parent_order_id ); + public function maybe_split_orders( $parent_order_id, $force_create = false ) { + $parent_order = $this->get( $parent_order_id ); + if ( ! $parent_order ) { + //dokan_log( sprintf( 'Invalid Order ID #%d found. Skipping from here.', $parent_order_id ) ); + return; + } - dokan_log( sprintf( 'New Order #%d created. Init sub order.', $parent_order_id ) ); + // return if order already has been processed by checking if a vendor id has been assigned to it + if ( (int) $parent_order->get_meta( '_dokan_vendor_id' ) > 0 ) { + return; + } - if ( wc_string_to_bool( $parent_order->get_meta( 'has_sub_order' ) ) === true ) { - $args = array( - 'post_parent' => $parent_order_id, - 'post_type' => 'shop_order', - 'numberposts' => - 1, - 'post_status' => 'any', - ); + //dokan_log( sprintf( 'New Order #%d created. Init sub order.', $parent_order_id ) ); - $child_orders = get_children( $args ); + if ( $force_create && wc_string_to_bool( $parent_order->get_meta( 'has_sub_order' ) ) === true ) { + $child_orders = $this->get_child_orders( $parent_order->get_id() ); - foreach ( $child_orders as $child ) { - wp_delete_post( $child->ID, true ); + foreach ( $child_orders as $child_order ) { + $child_order->delete( true ); } } $vendors = dokan_get_sellers_by( $parent_order_id ); + if ( empty( $vendors ) ) { + // we didn't find any vendor, so we can't create sub-order + //dokan_log( 'No vendor found, skipping sub order.' ); + return; + } // return if we've only ONE seller if ( count( $vendors ) === 1 ) { - dokan_log( '1 vendor only, skipping sub order.' ); + //dokan_log( '1 vendor only, skipping sub order.' ); $temp = array_keys( $vendors ); $seller_id = reset( $temp ); @@ -626,14 +924,14 @@ public function maybe_split_orders( $parent_order_id ) { $parent_order->update_meta_data( 'has_sub_order', true ); $parent_order->save(); - dokan_log( sprintf( 'Got %s vendors, starting sub order.', count( $vendors ) ) ); + //dokan_log( sprintf( 'Got %s vendors, starting sub order.', count( $vendors ) ) ); // seems like we've got multiple sellers foreach ( $vendors as $seller_id => $seller_products ) { - dokan()->order->create_sub_order( $parent_order, $seller_id, $seller_products ); + $this->create_sub_order( $parent_order, $seller_id, $seller_products ); } - dokan_log( sprintf( 'Completed sub order for #%d.', $parent_order_id ) ); + //dokan_log( sprintf( 'Completed sub order for #%d.', $parent_order_id ) ); } /** @@ -641,17 +939,17 @@ public function maybe_split_orders( $parent_order_id ) { * * @since 3.6.3 * - * @param mixed $var + * @param mixed $item * * @return bool */ - protected function is_empty( $var ) { - if ( empty( $var ) ) { + protected function is_empty( $item ) { + if ( empty( $item ) ) { return true; } // if var is an array, check if it's empty or not - if ( is_array( $var ) && isset( $var[0] ) && intval( $var[0] ) === 0 ) { + if ( is_array( $item ) && isset( $item[0] ) && intval( $item[0] ) === 0 ) { return true; } diff --git a/includes/Order/MiscHooks.php b/includes/Order/MiscHooks.php new file mode 100644 index 0000000000..28d387d7dd --- /dev/null +++ b/includes/Order/MiscHooks.php @@ -0,0 +1,193 @@ +get_parent_id() ) { + global $wpdb; + $wpdb->delete( $wpdb->prefix . 'wc_order_product_lookup', [ 'order_id' => $order->get_id() ] ); + $wpdb->delete( $wpdb->prefix . 'wc_order_stats', [ 'order_id' => $order->get_id() ] ); + } + } + + /** + * Trim child order if parent exist from wc_order_product_lookup for analytics order + * + * @since DOKAN_SINCE Moved this method from Order/Hooks.php file + * + * @param WC_Order $orders + * + * @return WC_Order + */ + public function trim_child_order_for_analytics_order( $orders ) { + foreach ( $orders->data as $key => $order ) { + if ( $order['parent_id'] ) { + unset( $orders->data[ $key ] ); + } + } + + return $orders; + } + + /** + * Remove customer sensitive information while exporting order + * + * @since DOKAN_SINCE Moved this method from Order/Hooks.php file + * + * @param array $headers + * + * @return mixed + */ + public function hide_customer_info_from_vendor_order_export( $headers ) { + $hide_customer_info = dokan_get_option( 'hide_customer_info', 'dokan_selling', 'off' ); + if ( 'off' !== $hide_customer_info ) { + unset( $headers['billing_email'] ); + unset( $headers['customer_ip'] ); + } + + return $headers; + } + + /** + * Add vendor info in restful wc_order + * + * @since DOKAN_SINCE Moved this method from includes/functions.php file + * + * @param WP_REST_Response $response + * + * @return WP_REST_Response + */ + public function add_vendor_info_in_rest_order( $response ) { + $vendor_ids = []; + + foreach ( $response as $data ) { + if ( empty( $data['line_items'] ) ) { + continue; + } + + foreach ( $data['line_items'] as $item ) { + $product_id = ! empty( $item['product_id'] ) ? $item['product_id'] : 0; + $vendor_id = (int) get_post_field( 'post_author', $product_id ); + + if ( $vendor_id && ! in_array( $vendor_id, $vendor_ids, true ) ) { + array_push( $vendor_ids, $vendor_id ); + } + } + } + + if ( ! $vendor_ids ) { + return $response; + } + + $data = $response->get_data(); + + foreach ( $vendor_ids as $store_id ) { + $store = dokan()->vendor->get( $store_id ); + $data['stores'][] = [ + 'id' => $store->get_id(), + 'name' => $store->get_name(), + 'shop_name' => $store->get_shop_name(), + 'url' => $store->get_shop_url(), + 'address' => $store->get_address(), + ]; + } + + // for backward compatibility, if there are multiple vendors, pass empty array. + if ( count( $vendor_ids ) > 1 ) { + $data['store'] = []; + } else { + $store = dokan()->vendor->get( $vendor_ids[0] ); + $data['store'] = [ + 'id' => $store->get_id(), + 'name' => $store->get_name(), + 'shop_name' => $store->get_shop_name(), + 'url' => $store->get_shop_url(), + 'address' => $store->get_address(), + ]; + } + + $response->set_data( $data ); + + return $response; + } + + /** + * Modify order counts for vendor. + * + * @since DOKAN_SINCE Moved this method from includes/wc-functions.php file + * + * @param object $counts + * + * @return object $counts + */ + public function modify_vendor_order_counts( $counts ) { + global $pagenow; + + if ( current_user_can( 'manage_woocommerce' ) ) { + return $counts; + } + + if ( 'edit.php' !== $pagenow || 'shop_order' !== get_query_var( 'post_type' ) ) { + return $counts; + } + + $vendor_id = dokan_get_current_user_id(); + if ( empty( $vendor_id ) ) { + return $counts; + } + + // Current order counts for the vendor. + $vendor_order_counts = dokan_count_orders( $vendor_id ); + + // Modify WP dashboard order counts as per vendor's order counts. + foreach ( $vendor_order_counts as $count_key => $count_value ) { + if ( 'total' !== $count_key ) { + $counts->{$count_key} = $count_value; + } + } + + return $counts; + } +} diff --git a/includes/Order/OrderCache.php b/includes/Order/OrderCache.php index dd383294a9..f2685dd1c8 100644 --- a/includes/Order/OrderCache.php +++ b/includes/Order/OrderCache.php @@ -25,6 +25,9 @@ public function __construct() { add_action( 'wp_trash_post', [ $this, 'reset_cache_before_deleting_order' ], 20 ); add_action( 'before_delete_post', [ $this, 'reset_cache_before_deleting_order' ], 20 ); + + add_action( 'woocommerce_new_order', [ $this, 'clear_product_cache' ], 10, 1 ); + add_action( 'woocommerce_update_order', [ $this, 'clear_product_cache' ], 10, 1 ); } /** @@ -102,4 +105,35 @@ public function reset_cache_before_deleting_order( $order_id ) { self::delete( $seller_id, $order_id ); } + + /** + * This method will delete vendors best-selling product cache after a new order has been made + * + * @since 3.2.11 + * @since DOKAN_SINCE Moved this function from includes/wc-functions.php + * + * @param int $post_id + */ + public function clear_product_cache( $order_id ) { + $order = wc_get_order( $order_id ); + + if ( ! $order ) { + return; + } + + // check if order has suborder + if ( $order->get_meta( 'has_sub_order' ) ) { + // same hooks will be called for individual sub orders + return; + } + + // get vendor id from order + $seller_id = dokan_get_seller_id_by_order( $order_id ); + if ( empty( $seller_id ) ) { + return; + } + + $cache_group = "seller_product_data_$seller_id"; + Cache::invalidate_group( $cache_group ); + } } diff --git a/includes/Order/functions.php b/includes/Order/functions.php index b4d66a8897..b22d1b8c36 100644 --- a/includes/Order/functions.php +++ b/includes/Order/functions.php @@ -7,18 +7,27 @@ * * @param int $order_id * - * @return float + * @deprecated DOKAN_SINCE + * + * @return float|array|WP_Error */ function dokan_get_seller_amount_from_order( $order_id, $get_array = false ) { - $order = dokan()->order->get( $order_id ); - $seller_id = dokan_get_seller_id_by_order( $order_id ); - $net_amount = dokan_get_seller_earnings_by_order( $order, $seller_id ); - $order_shipping = $order->get_total_shipping(); - $order_tax = $order->get_total_tax(); - $shipping_recipient = apply_filters( 'dokan_shipping_fee_recipient', dokan_get_option( 'shipping_fee_recipient', 'dokan_selling', 'seller' ), $order_id ); - $tax_recipient = apply_filters( 'dokan_tax_fee_recipient', dokan_get_option( 'tax_fee_recipient', 'dokan_selling', 'seller' ), $order_id ); + wc_deprecated_function( 'dokan_get_seller_amount_from_order', 'DOKAN_SINCE', 'dokan()->commission->get_earning_by_order()' ); + + $order = wc_get_order( $order_id ); + if ( ! $order ) { + return $order; + } + + $seller_id = dokan_get_seller_id_by_order( $order_id ); + $net_amount = dokan()->commission->get_earning_by_order( $order, 'seller' ); if ( $get_array ) { + $shipping_recipient = apply_filters( 'dokan_shipping_fee_recipient', dokan_get_option( 'shipping_fee_recipient', 'dokan_selling', 'seller' ), $order_id ); + $tax_recipient = apply_filters( 'dokan_tax_fee_recipient', dokan_get_option( 'tax_fee_recipient', 'dokan_selling', 'seller' ), $order_id ); + $order_shipping = $order->get_shipping_total(); + $order_tax = $order->get_total_tax(); + $amount = [ 'net_amount' => $net_amount, 'shipping' => 0, @@ -42,15 +51,18 @@ function dokan_get_seller_amount_from_order( $order_id, $get_array = false ) { /** * Get all the orders from a specific seller * - * @since 3.6.3 Rewritten whole method + * @since 3.6.3 Rewritten whole method + * + * @param int $seller_id + * @param array $args * - * @param int $seller_id - * @param array $args + * @deprecated DOKAN_SINCE since this is an alias only. * - * @global object $wpdb - * @return array + * @return WP_Error|int[]|WC_Order[] */ function dokan_get_seller_orders( $seller_id, $args ) { + wc_deprecated_function( 'dokan_get_seller_orders', 'DOKAN_SINCE', 'dokan()->order->all()' ); + $args['seller_id'] = $seller_id; if ( ! empty( $args['offset'] ) ) { // backward compatibility @@ -65,23 +77,27 @@ function dokan_get_seller_orders( $seller_id, $args ) { /** * Get all the orders from a specific date range * - * @param int $seller_id + * @param string $start_date + * @param string $end_date + * @param int|false $seller_id + * @param string $status * - * @global object $wpdb - * @return array + * @deprecated DOKAN_SINCE + * + * @return WP_Error|WC_Order[] */ function dokan_get_seller_orders_by_date( $start_date, $end_date, $seller_id = false, $status = 'all' ) { + wc_deprecated_function( 'dokan_get_seller_orders_by_date', 'DOKAN_SINCE', 'dokan()->order->all()' ); + // format start and end date - $date_start = dokan_current_datetime()->setTime( 0, 0, 0 ); - $date_end = $date_start->setTime( 23, 59, 59 ); - $start_date = strtotime( $start_date ) ? $date_start->modify( $start_date ) : $date_start; // strtotime is needed because modify() method can return false - $end_date = strtotime( $end_date ) ? $date_end->modify( $end_date ) : $date_end; + $start_date = dokan_current_datetime()->modify( $start_date ); + $end_date = dokan_current_datetime()->modify( $end_date ); $query_args = [ 'seller_id' => $seller_id, 'date' => [ - 'from' => $start_date->format( 'Y-m-d' ), - 'to' => $end_date->format( 'Y-m-d' ), + 'from' => $start_date ? $start_date->format( 'Y-m-d' ) : dokan_current_datetime()->format( 'Y-m-d' ), + 'to' => $end_date ? $end_date->format( 'Y-m-d' ) : dokan_current_datetime()->format( 'Y-m-d' ), ], 'status' => $status, 'return' => 'objects', @@ -90,12 +106,29 @@ function dokan_get_seller_orders_by_date( $start_date, $end_date, $seller_id = f return dokan()->order->all( $query_args ); } +/** + * Get the orders total from a specific seller + * + * @param array $args + * + * @deprecated DOKAN_SINCE + * + * @return int + */ +function dokan_get_seller_orders_number( $args = [] ) { + wc_deprecated_function( 'dokan_get_seller_orders_number', 'DOKAN_SINCE', 'dokan()->order->all()' ); + + $args['return'] = 'count'; + + return dokan()->order->all( $args ); +} + /** * Get seller withdraw by date range * - * @param string $start_date - * @param string $end_date - * @param int $seller_id + * @param string $start_date + * @param string $end_date + * @param int|false $seller_id * * @return object */ @@ -115,130 +148,65 @@ function dokan_get_seller_withdraw_by_date( $start_date, $end_date, $seller_id = } /** - * Get the orders total from a specific seller - * - * @param array $args - * - * @return int - */ -function dokan_get_seller_orders_number( $args = [] ) { - $args['return'] = 'count'; - - return dokan()->order->all( $args ); -} - -/** - * Get all the orders from a specific seller + * Check if order is belonged to given seller * * @param int $seller_id + * @param int $order_id * * @return bool */ function dokan_is_seller_has_order( $seller_id, $order_id ) { - $args = [ - 'seller_id' => $seller_id, - 'order_id' => $order_id, - 'return' => 'objects', - 'limit' => 1, - ]; - - $orders = dokan()->order->all( $args ); - - return ! empty( $orders ); + return dokan()->order->is_seller_has_order( $seller_id, $order_id ); } /** * Count orders for a seller * - * @param int $user_id + * @since DOKAN_SINCE moved the functionality of this function to Order Manager class + * + * @param int $seller_id * - * @global WPDB $wpdb * @return array */ -function dokan_count_orders( $user_id ) { - global $wpdb; - - $cache_group = "seller_order_data_{$user_id}"; - $cache_key = "count_orders_{$user_id}"; - $counts = Cache::get( $cache_key, $cache_group ); - - if ( false === $counts ) { - $counts = [ - 'wc-pending' => 0, - 'wc-completed' => 0, - 'wc-on-hold' => 0, - 'wc-processing' => 0, - 'wc-refunded' => 0, - 'wc-cancelled' => 0, - 'wc-failed' => 0, - 'wc-checkout-draft' => 0, - 'total' => 0, - ]; - - $counts = apply_filters( 'dokan_order_status_count', $counts ); - - $results = $wpdb->get_results( - $wpdb->prepare( - "SELECT do.order_status - FROM {$wpdb->prefix}dokan_orders AS do - LEFT JOIN $wpdb->posts p ON do.order_id = p.ID - WHERE - do.seller_id = %d AND - p.post_type = 'shop_order' AND - p.post_status != 'trash'", $user_id - ) - ); - - if ( $results ) { - foreach ( $results as $order ) { - if ( isset( $counts[ $order->order_status ] ) ) { - $counts[ $order->order_status ] += 1; - $counts['total'] += 1; - } - } - } - - $counts = (object) $counts; - Cache::set( $cache_key, $counts, $cache_group ); - } - - return $counts; +function dokan_count_orders( $seller_id ) { + return dokan()->order->count_orders( $seller_id ); } /** - * Delete a order row from sync table when a order is deleted from WooCommerce + * Delete an order row from sync table when an order is deleted from WooCommerce * * @param int $order_id * + * @deprecated DOKAN_SINCE + * * @return void */ function dokan_delete_sync_order( $order_id ) { - global $wpdb; - $wpdb->delete( $wpdb->prefix . 'dokan_orders', [ 'order_id' => $order_id ] ); + wc_deprecated_function( 'dokan_delete_sync_order', 'DOKAN_SINCE', 'dokan()->order->delete_seller_order()' ); + + dokan()->order->delete_seller_order( $order_id ); } /** - * Delete a order row from sync table to not insert duplicate + * Delete an order row from sync table to not insert duplicate * - * @since 2.4.11 + * @since 2.4.11 * * @param int $order_id * @param int $seller_id * + * @deprecated DOKAN_SINCE + * * @return void */ function dokan_delete_sync_duplicate_order( $order_id, $seller_id ) { - global $wpdb; - $wpdb->delete( - $wpdb->prefix . 'dokan_orders', [ - 'order_id' => $order_id, - 'seller_id' => $seller_id, - ] - ); + wc_deprecated_function( 'dokan_delete_sync_duplicate_order', 'DOKAN_SINCE', 'dokan()->order->delete_seller_order()' ); + + dokan()->order->delete_seller_order( $order_id, $seller_id ); } /** - * Insert a order in sync table once a order is created + * Insert an order in sync table once an order is created * * @param int $order_id * @@ -247,35 +215,30 @@ function dokan_delete_sync_duplicate_order( $order_id, $seller_id ) { function dokan_sync_insert_order( $order_id ) { global $wpdb; - if ( dokan_is_order_already_exists( $order_id ) ) { + $order = wc_get_order( $order_id ); + + if ( dokan()->order->is_order_already_synced( $order ) ) { return; } - if ( get_post_meta( $order_id, 'has_sub_order', true ) === '1' ) { + if ( (int) $order->get_meta( 'has_sub_order', true ) === 1 ) { return; } - $order = wc_get_order( $order_id ); - $seller_id = dokan_get_seller_id_by_order( $order_id ); + $seller_id = dokan_get_seller_id_by_order( $order->get_id() ); $order_total = $order->get_total(); - $order_status = $order->get_status(); + $order_status = 'wc-' . $order->get_status(); if ( dokan_is_admin_coupon_applied( $order, $seller_id ) ) { $net_amount = dokan()->commission->get_earning_by_order( $order, 'seller' ); } else { - $admin_commission = dokan()->commission->get_earning_by_order( $order, 'admin' ); - $net_amount = $order_total - $admin_commission; + $net_amount = dokan()->commission->get_earning_by_order( $order ); } $net_amount = apply_filters( 'dokan_order_net_amount', $net_amount, $order ); $threshold_day = dokan_get_withdraw_threshold( $seller_id ); - dokan_delete_sync_duplicate_order( $order_id, $seller_id ); - - // make sure order status contains "wc-" prefix - if ( stripos( $order_status, 'wc-' ) === false ) { - $order_status = 'wc-' . $order_status; - } + dokan()->order->delete_seller_order( $order_id, $seller_id ); $wpdb->insert( $wpdb->prefix . 'dokan_orders', @@ -305,7 +268,7 @@ function dokan_sync_insert_order( $order_id ) { 'debit' => $net_amount, 'credit' => 0, 'status' => $order_status, - 'trn_date' => current_time( 'mysql' ), + 'trn_date' => dokan_current_datetime()->format( 'Y-m-d H:i:s' ), 'balance_date' => dokan_current_datetime()->modify( "+ $threshold_day days" )->format( 'Y-m-d H:i:s' ), ], [ @@ -329,27 +292,31 @@ function dokan_sync_insert_order( $order_id ) { * * @since 3.2.11 rewritten entire function * - * @param int $order_id + * @param int|WC_Abstract_Order $order * * @return int | 0 on failure */ -function dokan_get_seller_id_by_order( $order_id ) { +function dokan_get_seller_id_by_order( $order ) { global $wpdb; + $order_id = $order; + if ( ! is_numeric( $order ) ) { + $order_id = $order->get_id(); + } + $cache_key = 'get_seller_id_by_order_' . $order_id; $seller_id = Cache::get( $cache_key ); $items = []; - // hack: delete old cached data, will delete this code later version of dokan lite - if ( is_array( $seller_id ) ) { - $seller_id = false; - } - if ( false === $seller_id ) { $seller_id = (int) $wpdb->get_var( $wpdb->prepare( "SELECT seller_id FROM {$wpdb->prefix}dokan_orders WHERE order_id = %d LIMIT 1", $order_id ) ); - Cache::set( $cache_key, $seller_id ); + + // store in cache + if ( ! empty( $seller_id ) ) { + Cache::set( $cache_key, $seller_id ); + } } if ( ! empty( $seller_id ) ) { @@ -357,7 +324,7 @@ function dokan_get_seller_id_by_order( $order_id ) { } // get order instance - $order = wc_get_order( $order_id ); + $order = is_numeric( $order ) ? wc_get_order( $order_id ) : $order; if ( ! $order ) { return apply_filters( 'dokan_get_seller_id_by_order', 0, $items ); @@ -399,34 +366,39 @@ function dokan_get_seller_id_by_order( $order_id ) { * @return string */ function dokan_get_order_status_class( $status ) { + $order_status_class = ''; switch ( $status ) { case 'completed': case 'wc-completed': - return 'success'; + $order_status_class = 'success'; + break; case 'pending': case 'wc-pending': case 'failed': case 'wc-failed': - return 'danger'; + $order_status_class = 'danger'; + break; case 'on-hold': case 'wc-on-hold': - return 'warning'; + $order_status_class = 'warning'; + break; case 'processing': case 'wc-processing': - return 'info'; + $order_status_class = 'info'; + break; case 'refunded': case 'wc-refunded': case 'cancelled': case 'wc-cancelled': - return 'default'; - - default: - return apply_filters( 'dokan_get_order_status_class', '', $status ); + $order_status_class = 'default'; + break; } + + return apply_filters( 'dokan_get_order_status_class', $order_status_class, $status ); } /** @@ -437,61 +409,64 @@ function dokan_get_order_status_class( $status ) { * @return string */ function dokan_get_order_status_translated( $status ) { + $translated_order_status = ''; switch ( $status ) { case 'completed': case 'wc-completed': - return __( 'Completed', 'dokan-lite' ); + $translated_order_status = __( 'Completed', 'dokan-lite' ); + break; case 'pending': case 'wc-pending': - return __( 'Pending Payment', 'dokan-lite' ); + $translated_order_status = __( 'Pending Payment', 'dokan-lite' ); + break; case 'on-hold': case 'wc-on-hold': - return __( 'On-hold', 'dokan-lite' ); + $translated_order_status = __( 'On-hold', 'dokan-lite' ); + break; case 'processing': case 'wc-processing': - return __( 'Processing', 'dokan-lite' ); + $translated_order_status = __( 'Processing', 'dokan-lite' ); + break; case 'refunded': case 'wc-refunded': - return __( 'Refunded', 'dokan-lite' ); + $translated_order_status = __( 'Refunded', 'dokan-lite' ); + break; case 'cancelled': case 'wc-cancelled': - return __( 'Cancelled', 'dokan-lite' ); + $translated_order_status = __( 'Cancelled', 'dokan-lite' ); + break; case 'failed': case 'wc-failed': - return __( 'Failed', 'dokan-lite' ); - - default: - return apply_filters( 'dokan_get_order_status_translated', '', $status ); + $translated_order_status = __( 'Failed', 'dokan-lite' ); + break; } + + return apply_filters( 'dokan_get_order_status_translated', $translated_order_status, $status ); } /** - * Get product items list from order + * Get product items list from order seperated by given glue * * @since 1.4 * - * @param object $order - * @param string $glue + * @param WC_Order $order + * @param string $glue * * @return string list of products */ function dokan_get_product_list_by_order( $order, $glue = ',' ) { - $product_list = ''; - $order_item = $order->get_items(); - - foreach ( $order_item as $product ) { - $prodct_name[] = $product['name']; + $product_names = []; + foreach ( $order->get_items( 'line_item' ) as $line_item ) { + $product_names[] = $line_item['name']; } - $product_list = implode( $glue, $prodct_name ); - - return $product_list; + return implode( $glue, $product_names ); } /** @@ -499,28 +474,30 @@ function dokan_get_product_list_by_order( $order, $glue = ',' ) { * * @since 2.4.11 * - * @param int $order_id + * @param int|WC_Abstract_Order $order * * @return boolean */ -function dokan_is_sub_order( $order_id ) { - $parent_order_id = wp_get_post_parent_id( $order_id ); - - if ( 0 !== $parent_order_id ) { - return true; +function dokan_is_sub_order( $order ) { + if ( is_numeric( $order ) ) { + $order = wc_get_order( $order ); } - return false; + return ! ( ! $order || $order->get_parent_id() === 0 ); } /** * Get total number of orders in Dokan order table * - * @since 2.4.3 + * @since 2.4.3 + * + * @deprecated DOKAN_SINCE * * @return int Order_count */ function dokan_total_orders() { + wc_deprecated_function( 'dokan_total_orders', 'DOKAN_SINCE', 'dokan()->order->all()' ); + global $wpdb; $order_count = $wpdb->get_var( 'SELECT COUNT(id) FROM ' . $wpdb->prefix . 'dokan_orders ' ); @@ -549,7 +526,6 @@ function dokan_get_sellers_by( $order ) { } $order_items = $order->get_items(); - foreach ( $order_items as $item ) { $seller_id = get_post_field( 'post_author', $item['product_id'] ); @@ -579,20 +555,20 @@ function dokan_get_seller_ids_by( $order_id ) { } /** + * Get suborder ids by parent order id * * @param int $parent_order_id * - * @return object[]|null + * @return int[]|null */ function dokan_get_suborder_ids_by( $parent_order_id ) { - global $wpdb; - - $sub_orders = $wpdb->get_results( - $wpdb->prepare( - "SELECT ID FROM {$wpdb->posts} - WHERE post_type = 'shop_order' - AND post_parent = %d", $parent_order_id - ) + $sub_orders = wc_get_orders( + [ + 'type' => 'shop_order', + 'parent' => $parent_order_id, + 'return' => 'ids', + 'limit' => -1, + ] ); if ( empty( $sub_orders ) ) { @@ -603,17 +579,20 @@ function dokan_get_suborder_ids_by( $parent_order_id ) { } /** - * Return admin commisson from an order + * Return admin commission from an order * - * @since 2.4.12 + * @since 2.4.12 * - * @param object $order + * @param WC_Order $order + * @param string $context accepted values are seller and admin * - * @return float $commission + * @deprecated 2.9.21 + * + * @return float */ function dokan_get_admin_commission_by( $order, $context ) { + wc_deprecated_function( 'dokan_get_admin_commission_by', '2.9.21', 'dokan()->commission->get_earning_by_order( $order, $context )' ); $context = 'seller' === $context ? $context : 'admin'; - wc_deprecated_function( 'dokan_get_admin_commission_by', '2.9.21', 'dokan()->commission->get_earning_by_order()' ); return dokan()->commission->get_earning_by_order( $order, $context ); } @@ -621,32 +600,19 @@ function dokan_get_admin_commission_by( $order, $context ) { /** * Get Customer Order IDs by Seller * - * @since 2.6.6 + * @since 2.6.6 * * @param int $customer_id - * * @param int $seller_id * + * @deprecated DOKAN_SINCE + * * @return array|null on failure */ function dokan_get_customer_orders_by_seller( $customer_id, $seller_id ) { - if ( ! $customer_id || ! $seller_id ) { - return null; - } - - $args = [ - 'customer_id' => $customer_id, - 'post_type' => 'shop_order', - 'meta_key' => '_dokan_vendor_id', // phpcs:ignore - 'meta_value' => $seller_id, // phpcs:ignore - 'post_status' => array_keys( wc_get_order_statuses() ), - 'return' => 'ids', - 'numberposts' => - 1, - ]; - - $orders = wc_get_orders( apply_filters( 'dokan_get_customer_orders_by_seller', $args ) ); + wc_deprecated_function( 'dokan_get_customer_orders_by_seller', 'DOKAN_SINCE', 'dokan()->order->get_customer_order_ids_by_seller()' ); - return $orders ? $orders : null; + return dokan()->order->get_customer_order_ids_by_seller( $customer_id, $seller_id ); } /** @@ -734,7 +700,7 @@ function dokan_order_csv_export( $orders, $file = null ) { $line[ $row_key ] = $the_order->get_shipping_method(); break; case 'order_shipping_cost': - $line[ $row_key ] = $the_order->get_total_shipping(); + $line[ $row_key ] = $the_order->get_shipping_total(); break; case 'order_payment_method': $line[ $row_key ] = $the_order->get_payment_method_title(); @@ -746,7 +712,7 @@ function dokan_order_csv_export( $orders, $file = null ) { $line[ $row_key ] = dokan()->commission->get_earning_by_order( $the_order ); break; case 'order_status': - $line[ $row_key ] = $statuses[ 'wc-' . dokan_get_prop( $the_order, 'status' ) ]; + $line[ $row_key ] = $statuses[ 'wc-' . $the_order->get_status() ]; break; case 'order_date': $line[ $row_key ] = dokan_get_date_created( $the_order ); @@ -847,31 +813,165 @@ function dokan_order_csv_export( $orders, $file = null ) { /** * Dokan get seller id by order id * - * @param int order_id + * @param int $order_id + * + * @deprecated DOKAN_SINCE * * @return int */ -function dokan_get_seller_id_by_order_id( $id ) { +function dokan_get_seller_id_by_order_id( $order_id ) { wc_deprecated_function( 'dokan_get_seller_id_by_order_id', '2.9.10', 'dokan_get_seller_id_by_order' ); - return dokan_get_seller_id_by_order( $id ); + return dokan_get_seller_id_by_order( $order_id ); } /** * Check if an order with same id is exists in database * - * @param int order_id + * @param int $order_id + * + * @deprecated DOKAN_SINCE * * @return boolean */ -function dokan_is_order_already_exists( $id ) { - global $wpdb; +function dokan_is_order_already_exists( $order_id ) { + wc_deprecated_function( 'dokan_is_order_already_exists', 'DOKAN_SINCE', 'dokan()->order->is_order_already_synced()' ); + + return dokan()->order->is_order_already_synced( $order_id ); +} + +/** + * Customer has order from current seller + * + * @since 2.8.6 + * @since DOKAN_SINCE moved this function from includes/functions.php + * + * @param int $customer_id + * @param int|null $seller_id + * + * @return bool + */ +function dokan_customer_has_order_from_this_seller( $customer_id, $seller_id = null ) { + $seller_id = ! empty( $seller_id ) ? $seller_id : dokan_get_current_user_id(); + $args = [ + 'seller_id' => $seller_id, + 'customer_id' => $customer_id, + 'return' => 'count', + ]; + $count = dokan()->order->all( $args ); + + return $count > 0; +} + +/** + * Get total sales amount of a seller + * + * @since DOKAN_SINCE moved from includes/functions.php + * + * @param int $seller_id + * + * @return float + */ +function dokan_author_total_sales( $seller_id ) { + $vendor = dokan()->vendor->get( $seller_id ); - if ( ! $id || ! is_numeric( $id ) ) { - return false; + if ( $vendor->id === 0 ) { + return 0; } - $order_id = $wpdb->get_var( $wpdb->prepare( "SELECT order_id FROM {$wpdb->prefix}dokan_orders WHERE order_id=%d", $id ) ); + return $vendor->get_total_sales(); +} + +if ( ! function_exists( 'dokan_get_seller_earnings_by_order' ) ) { + + /** + * Get Seller's net Earnings from a order + * + * @since 2.5.2 + * @since DOKAN_SINCE moved from includes/functions.php + * + * @param WC_ORDER $order + * @param int $seller_id + * + * @deprecated DOKAN_SINCE + * + * @return int $earned + */ + function dokan_get_seller_earnings_by_order( $order, $seller_id ) { + wc_deprecated_function( 'dokan_get_seller_earnings_by_order', 'DOKAN_SINCE', 'dokan()->commission->get_earning_by_order( $order, \'seller\' )' ); + $earned = dokan()->commission->get_earning_by_order( $order, 'seller' ); + + return apply_filters( 'dokan_get_seller_earnings_by_order', $earned, $order, $seller_id ); + } +} + +/** + * Dokan get vendor order details by order ID + * + * @since 3.2.11 rewritten entire function + * @since DOKAN_SINCE Moved this function from includes/functions.php + * + * @param int $order_id + * @param int|null $vendor_id will remove this parameter in future + * + * @return array will return empty array in case order has suborders + */ +function dokan_get_vendor_order_details( $order_id, $vendor_id = null ) { + $order = wc_get_order( $order_id ); + $order_info = []; + + if ( ! $order || $order->get_meta( 'has_sub_order' ) ) { + return apply_filters( 'dokan_get_vendor_order_details', $order_info, $order_id, $vendor_id ); + } + + foreach ( $order->get_items( 'line_item' ) as $item ) { + $info = [ + 'product' => $item['name'], + 'quantity' => $item['quantity'], + 'total' => $item['total'], + ]; + array_push( $order_info, $info ); + } + + return apply_filters( 'dokan_get_vendor_order_details', $order_info, $order_id, $vendor_id ); +} - return $order_id ? true : false; +/** + * Updates bulk orders status by orders ids. + * + * @since 3.7.10 + * @since DOKAN_SINCE Moved this method from includes/functions.php file + * + * @param array $postdata + * + * @return void + */ +function dokan_apply_bulk_order_status_change( $postdata ) { + if ( ! isset( $postdata['status'] ) || ! isset( $postdata['bulk_orders'] ) ) { + return; + } + + $status = sanitize_text_field( wp_unslash( $postdata['status'] ) ); + $orders = array_map( 'absint', $postdata['bulk_orders'] ); + + // -1 means bluk action option value + $excluded_status = [ '-1', 'cancelled', 'refunded' ]; + + if ( in_array( $status, $excluded_status, true ) ) { + return; + } + + foreach ( $orders as $order_id ) { + $order = wc_get_order( $order_id ); + + if ( ! $order instanceof \WC_Order ) { + continue; + } + + if ( in_array( $order->get_status(), $excluded_status, true ) || $order->get_status() === $status ) { + continue; + } + + $order->update_status( $status ); + } } diff --git a/includes/ProductCategory/ProductCategoryCache.php b/includes/ProductCategory/ProductCategoryCache.php index f702774e3f..ae81594735 100644 --- a/includes/ProductCategory/ProductCategoryCache.php +++ b/includes/ProductCategory/ProductCategoryCache.php @@ -2,6 +2,7 @@ namespace WeDevs\Dokan\ProductCategory; +use WC_Product_Query; use WeDevs\Dokan\Cache; /** @@ -20,6 +21,9 @@ public function __construct() { add_action( 'pre_delete_term', [ $this, 'clear_multistep_category_cache' ], 10, 1 ); add_action( 'create_product_cat', [ $this, 'clear_multistep_category_cache' ], 10 ); add_action( 'wpml_sync_term_hierarchy_done', [ $this, 'clear_multistep_category_cache' ], 99 ); + + add_action( 'edit_product_cat', [ $this, 'clear_product_category_cache' ], 10, 1 ); + add_action( 'pre_delete_term', [ $this, 'clear_product_category_cache' ], 10, 1 ); } /** @@ -39,4 +43,44 @@ public function clear_multistep_category_cache() { Cache::delete_transient( 'multistep_categories' ); } + + /** + * This method will delete store category cache after a category is updated + * + * @since 3.2.10 + * @since DOKAN_SINCE Moved this method from includes/wc-functions.php file + * + * @param int $term_id + */ + public function clear_product_category_cache( $term_id ) { + // get taxonomy slug + $term = get_term_by( 'ID', $term_id, 'product_cat' ); + if ( false === $term || ! isset( $term->slug ) ) { + return; + } + + // get associated product id with this category + $args = [ + 'status' => 'publish', + 'limit' => - 1, + 'return' => 'ids', + 'category' => [ $term->slug ], + ]; + + $query = new WC_Product_Query( $args ); + $products = $query->get_products(); + + if ( empty( $products ) ) { + return; + } + + global $wpdb; + $products = implode( ',', array_map( 'absint', (array) $products ) ); + $seller_ids = $wpdb->get_col( "SELECT DISTINCT post_author from {$wpdb->posts} WHERE ID in ($products)" ); // phpcs:ignore + + foreach ( $seller_ids as $seller_id ) { + $transient_group = "seller_product_data_{$seller_id}"; + Cache::invalidate_transient_group( $transient_group ); + } + } } diff --git a/includes/REST/OrderController.php b/includes/REST/OrderController.php index c2a46615e8..89e75dd0cf 100644 --- a/includes/REST/OrderController.php +++ b/includes/REST/OrderController.php @@ -439,6 +439,7 @@ public function get_items( $request ) { 'from' => isset( $request['after'] ) ? sanitize_text_field( wp_unslash( $request['after'] ) ) : '', 'to' => isset( $request['before'] ) ? sanitize_text_field( wp_unslash( $request['before'] ) ) : '', ], + 'return' => 'objects', ]; // Admin can get any vendor orders but vendor can't get other vendors orders. diff --git a/includes/REST/StoreController.php b/includes/REST/StoreController.php index effeb1de6a..d0e491e99f 100644 --- a/includes/REST/StoreController.php +++ b/includes/REST/StoreController.php @@ -60,8 +60,10 @@ public function register_routes() { $this->namespace, '/' . $this->base . '/(?P[\d]+)', [ 'args' => [ 'id' => [ - 'description' => __( 'Unique identifier for the object.', 'dokan-lite' ), - 'type' => 'integer', + 'description' => __( 'Unique identifier for the object.', 'dokan-lite' ), + 'type' => 'integer', + 'sanitize_callback' => 'absint', + 'validate_callback' => 'dokan_rest_validate_store_id', ], ], [ @@ -313,10 +315,6 @@ public function get_store( $request ) { $store = dokan()->vendor->get( $store_id ); - if ( empty( $store->id ) ) { - return new WP_Error( 'no_store_found', __( 'No store found', 'dokan-lite' ), [ 'status' => 404 ] ); - } - $stores_data = $this->prepare_item_for_response( $store, $request ); $response = rest_ensure_response( $stores_data ); @@ -333,13 +331,9 @@ public function get_store( $request ) { * @return WP_Error|WP_REST_Response */ public function delete_store( $request ) { - $store_id = ! empty( $request['id'] ) ? (int) $request['id'] : 0; + $store_id = $request['id']; $reassign = false === $request['reassign'] ? null : absint( $request['reassign'] ); - if ( empty( $store_id ) ) { - return new WP_Error( 'no_vendor_found', __( 'No vendor found for updating status', 'dokan-lite' ), [ 'status' => 400 ] ); - } - if ( ! empty( $reassign ) ) { if ( $reassign === $store_id || ! get_userdata( $reassign ) ) { return new WP_Error( 'rest_user_invalid_reassign', __( 'Invalid user ID for reassignment.', 'dokan-lite' ), [ 'status' => 400 ] ); @@ -384,10 +378,6 @@ public function update_store_permissions_check( $request ) { public function update_store( $request ) { $store = dokan()->vendor->get( (int) $request->get_param( 'id' ) ); - if ( empty( $store->get_id() ) ) { - return new WP_Error( 'no_store_found', __( 'No store found', 'dokan-lite' ), [ 'status' => 404 ] ); - } - $params = $request->get_params(); $store_id = dokan()->vendor->update( $store->get_id(), $params ); diff --git a/includes/Tracker.php b/includes/Tracker.php index 9612b21859..711a9e0fde 100644 --- a/includes/Tracker.php +++ b/includes/Tracker.php @@ -65,7 +65,7 @@ function () { protected function get_order_count() { global $wpdb; - return (int) $wpdb->get_var( "SELECT count(ID) FROM $wpdb->posts WHERE post_type = 'shop_order' and post_status IN ('wc-completed', 'wc-processing', 'wc-on-hold', 'wc-refunded');" ); + return (int) $wpdb->get_var( "SELECT count(id) FROM {$wpdb->prefix}dokan_orders WHERE order_status IN ('wc-completed', 'wc-processing', 'wc-on-hold', 'wc-refunded');" ); } /** diff --git a/includes/Upgrade/Upgrades/V_1_2.php b/includes/Upgrade/Upgrades/V_1_2.php index f294c59a90..3c4177afe6 100644 --- a/includes/Upgrade/Upgrades/V_1_2.php +++ b/includes/Upgrade/Upgrades/V_1_2.php @@ -5,8 +5,60 @@ use WeDevs\Dokan\Abstracts\DokanUpgrader; class V_1_2 extends DokanUpgrader { - public static function generate_sync_table() { - dokan_generate_sync_table(); + self::dokan_generate_sync_table(); + } + + /** + * Generate dokan sync table + * + * @since DOKAN_SINCE moved from includes/functions.php file + * + * @deprecated since 2.4.3 + */ + private static function dokan_generate_sync_table() { + global $wpdb; + + $orders = $wpdb->get_results( + $wpdb->prepare( + "SELECT oi.order_id, p.ID as product_id, p.post_title, p.post_author as seller_id, + oim2.meta_value as order_total, p.post_status as order_status + FROM {$wpdb->prefix}woocommerce_order_items oi + INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim ON oim.order_item_id = oi.order_item_id + INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim2 ON oim2.order_item_id = oi.order_item_id + INNER JOIN $wpdb->posts p ON oi.order_id = p.ID + WHERE + oim.meta_key = %s AND + oim2.meta_key = %s + GROUP BY oi.order_id", + '_product_id', + '_line_total' + ) + ); + + $table_name = $wpdb->prefix . 'dokan_orders'; + + $wpdb->query( "TRUNCATE TABLE {$wpdb->prefix}dokan_orders" ); + + foreach ( $orders as $order ) { + $net_amount = dokan()->commission->get_earning_by_order( $order->order_id, 'seller' ); + $wpdb->insert( + $table_name, + [ + 'order_id' => $order->order_id, + 'seller_id' => $order->seller_id, + 'order_total' => $order->order_total, + 'net_amount' => $net_amount, + 'order_status' => $order->order_status, + ], + [ + '%d', + '%d', + '%f', + '%f', + '%s', + ] + ); + } } } diff --git a/includes/Utilities/OrderUtil.php b/includes/Utilities/OrderUtil.php new file mode 100644 index 0000000000..7bb2df1990 --- /dev/null +++ b/includes/Utilities/OrderUtil.php @@ -0,0 +1,212 @@ +=' ) ) { + return false; + } + + return WCOrderUtil::custom_orders_table_usage_is_enabled(); + } + + /** + * Checks if posts and order custom table sync are enabled, and there are no pending orders. + * + * @since DOKAN_SINCE + * + * @return bool + */ + public static function is_custom_order_tables_in_sync(): bool { + return self::is_hpos_enabled() && WCOrderUtil::is_custom_order_tables_in_sync(); + } + + /** + * Helper function to get whether the order cache should be used or not. + * + * @since DOKAN_SINCE + * + * @return bool True if the order cache should be used, false otherwise. + */ + public static function is_order_cache_usages_enabled(): bool { + return self::is_hpos_enabled() && WCOrderUtil::orders_cache_usage_is_enabled(); + } + + /** + * Helper function to initialize the global $theorder object, mostly used during order meta boxes rendering. + * + * @since DOKAN_SINCE + * + * @param WC_Order|WP_Post $post_or_order_object Post or order object. + * + * @return WC_Order_Refund|bool|WC_Order WC_Order object. + */ + public static function init_theorder_object( $post_or_order_object ) { + if ( self::is_hpos_enabled() ) { + return WCOrderUtil::init_theorder_object( $post_or_order_object ); + } + + global $theorder; + if ( $theorder instanceof WC_Order ) { + return $theorder; + } + + if ( $post_or_order_object instanceof WC_Order ) { + $theorder = $post_or_order_object; + } else { + $theorder = wc_get_order( $post_or_order_object->ID ); + } + return $theorder; + } + + /** + * Helper function to id from a post or order object. + * + * @since DOKAN_SINCE + * + * @param WP_Post|WC_Order $post_or_order_object WP_Post/WC_Order object to get ID for. + * + * @return int Order or post ID. + */ + public static function get_post_or_order_id( $post_or_order_object ): int { + if ( self::is_hpos_enabled() ) { + return WCOrderUtil::get_post_or_order_id( $post_or_order_object ); + } elseif ( is_numeric( $post_or_order_object ) ) { + return (int) $post_or_order_object; + } elseif ( $post_or_order_object instanceof WC_Order ) { + return $post_or_order_object->get_id(); + } elseif ( $post_or_order_object instanceof WP_Post ) { + return $post_or_order_object->ID; + } + return 0; + } + + /** + * Checks if passed id, post or order object is a WC_Order object. + * + * This method can be removed, and we can directly use WC OrderUtil::is_order method in future + * if we set the minimum wc version requirements to 8.0 + * + * @since DOKAN_SINCE + * + * @param int|WP_Post|WC_Order $order_id Order ID, post object or order object. + * @param string[] $types Types to match against. + * + * @return bool Whether the passed param is an order. + */ + public static function is_order( $order_id, $types = [] ): bool { + $types = empty( $types ) ? wc_get_order_types() : $types; + if ( self::is_hpos_enabled() ) { + return WCOrderUtil::is_order( $order_id, $types ); + } + + return in_array( get_post_type( $order_id ), $types, true ); + } + + /** + * Helper function to get the screen name of order page in wp-admin. + * + * This method can be removed, and we can directly use WC OrderUtil::get_order_admin_screen method in future + * if we set minimum wc version requirements to 8.0 + * + * @since DOKAN_SINCE + * + * @return string + */ + public static function get_order_admin_screen(): string { + return self::is_hpos_enabled() && function_exists( 'wc_get_page_screen_id' ) + ? wc_get_page_screen_id( 'shop-order' ) + : 'shop_order'; + } + + /** + * Get admin order list page url + * + * @since DOKAN_SINCE + * + * @return string + */ + public static function get_admin_order_list_url(): string { + return self::is_hpos_enabled() + ? esc_url_raw( admin_url( 'admin.php?page=wc-orders' ) ) + : esc_url_raw( admin_url( 'edit.php?post_type=shop_order' ) ); + } + + /** + * Helper method to generate admin URL for new order. + * + * @since DOKAN_SINCE + * + * @return string Link for new order. + */ + public static function get_order_admin_new_url(): string { + if ( ! self::is_hpos_enabled() ) { + return admin_url( 'post-new.php?post_type=shop_order' ); + } + return WCOrderUtil::get_order_admin_new_url(); + } + + /** + * Get admin order edit page url + * + * @since DOKAN_SINCE + * + * @param int $order_id + * + * @return string + */ + public static function get_admin_order_edit_url( $order_id = 0 ): string { + if ( ! self::is_hpos_enabled() ) { + return admin_url( 'post.php?post=' . absint( $order_id ) ) . '&action=edit'; + } + + return WCOrderUtil::get_order_admin_edit_url( $order_id ); + } + + /** + * Get the custom orders table name for wc. + * + * @since DOKAN_SINCE + * + * @return string + */ + public static function get_order_table_name() { + if ( ! self::is_hpos_enabled() ) { + global $wpdb; + return $wpdb->posts; + } + + return WCOrderUtil::get_table_for_orders(); + } + + /** + * Get the name of the database table that's currently in use for orders. + * + * @since DOKAN_SINCE + * + * @return string + */ + public static function get_table_for_order_meta() { + if ( ! self::is_hpos_enabled() ) { + global $wpdb; + return $wpdb->postmeta; + } + + return WCOrderUtil::get_table_for_order_meta(); + } +} diff --git a/includes/Vendor/Vendor.php b/includes/Vendor/Vendor.php index 1571add537..cf9847befe 100644 --- a/includes/Vendor/Vendor.php +++ b/includes/Vendor/Vendor.php @@ -3,8 +3,10 @@ namespace WeDevs\Dokan\Vendor; use Automattic\WooCommerce\Utilities\NumberUtil; +use WC_Order; use WeDevs\Dokan\Cache; use WeDevs\Dokan\Product\ProductCache; +use WP_Error; use WP_Query; use WP_User; @@ -429,7 +431,7 @@ public function get_location() { $location = $this->get_info_part( 'location' ); if ( $location ) { - list( $default['lat'], $default['long'] ) = explode( ',', $location ); + [ $default['lat'], $default['long'] ] = explode( ',', $location ); } return $location; @@ -512,7 +514,7 @@ public function get_per_page() { * @return boolean */ public function show_email() { - return 'yes' == $this->get_info_part( 'show_email' ); + return 'yes' === $this->get_info_part( 'show_email' ); } /** @@ -523,7 +525,7 @@ public function show_email() { * @return boolean */ public function toc_enabled() { - return 'on' == $this->get_info_part( 'enable_tnc' ); + return 'on' === $this->get_info_part( 'enable_tnc' ); } /** @@ -545,7 +547,7 @@ public function get_toc() { * @return boolean */ public function show_more_products_tab() { - return 'yes' == $this->get_info_part( 'show_more_ptab' ); + return 'yes' === $this->get_info_part( 'show_more_ptab' ); } /** @@ -554,9 +556,7 @@ public function show_more_products_tab() { * @return object */ public function get_products() { - $products = dokan()->product->all( [ - 'author' => $this->id - ] ); + $products = dokan()->product->all( [ 'author' => $this->id ] ); if ( ! $products ) { return null; @@ -577,11 +577,13 @@ public function get_published_products() { $transient_key = "get_published_products_{$this->get_id()}"; if ( false === ( $products = Cache::get_transient( $transient_key, $transient_group ) ) ) { - $products = dokan()->product->all( [ - 'author' => $this->id, - 'post_status' => 'publish', - 'fields' => 'ids' - ] ); + $products = dokan()->product->all( + [ + 'author' => $this->id, + 'post_status' => 'publish', + 'fields' => 'ids', + ] + ); $products = $products->posts; Cache::set_transient( $transient_key, $products, $transient_group ); } @@ -745,10 +747,10 @@ public function get_vendor_used_terms_list( $vendor_id, $taxonomy ){ [ 'taxonomy' => $taxonomy, 'field' => 'slug', - 'terms' => $term + 'terms' => $term, ], ], - 'fields' => 'ids' + 'fields' => 'ids', ]; $all_posts = get_posts( $args ); @@ -761,8 +763,6 @@ public function get_vendor_used_terms_list( $vendor_id, $taxonomy ){ } } -// Cache::set_transient( $transient_key, $author_terms, $transient_group ); - return $author_terms; } @@ -771,9 +771,10 @@ public function get_vendor_used_terms_list( $vendor_id, $taxonomy ){ * * @since 3.0.0 * - * @return wc_get_order objects + * @return WP_Error|WC_Order[] objects */ public function get_orders( $args = [] ) { + $args['seller_id'] = empty( $args['seller_id'] ) ? $this->get_id() : $args['seller_id']; return dokan()->order->all( $args ); } @@ -783,7 +784,21 @@ public function get_orders( $args = [] ) { * @return float */ public function get_total_sales() { - return dokan_author_total_sales( $this->id ); + global $wpdb; + + $cache_group = "seller_order_data_{$this->id}"; + $cache_key = "earning_{$this->id}"; + $earnings = Cache::get( $cache_key, $cache_group ); + + if ( false === $earnings ) { + $earnings = (float) $wpdb->get_var( + $wpdb->prepare( "SELECT SUM(order_total) as earnings FROM {$wpdb->prefix}dokan_orders WHERE seller_id = %d AND order_status IN('wc-completed', 'wc-processing', 'wc-on-hold')", $this->id ) + ); + + Cache::set( $cache_key, $earnings, $cache_group ); + } + + return apply_filters( 'dokan_seller_total_sales', $earnings, $this->id ); } /** @@ -810,35 +825,28 @@ public function get_earnings( $formatted = true, $on_date = '' ) { $on_date = $on_date->format( 'Y-m-d H:i:s' ); if ( false === $earning ) { - $installed_version = get_option( 'dokan_theme_version' ); - $status = dokan_withdraw_get_active_order_status_in_comma(); - - if ( ! $installed_version || version_compare( $installed_version, '2.8.2', '>' ) ) { - $debit_balance = $wpdb->get_var( $wpdb->prepare( + $status = dokan_withdraw_get_active_order_status_in_comma(); + $debit_balance = $wpdb->get_var( + $wpdb->prepare( "SELECT SUM(debit) AS earnings FROM {$wpdb->prefix}dokan_vendor_balance WHERE vendor_id = %d AND DATE(balance_date) <= %s AND status IN ($status) AND trn_type = 'dokan_orders'", - $this->id, $on_date ) ); + $this->id, $on_date + ) + ); - $credit_balance = $wpdb->get_var( $wpdb->prepare( + $credit_balance = $wpdb->get_var( + $wpdb->prepare( "SELECT SUM(credit) AS earnings FROM {$wpdb->prefix}dokan_vendor_balance WHERE vendor_id = %d AND DATE(balance_date) <= %s AND trn_type = %s AND status = %s", - $this->id, $on_date, 'dokan_refund', 'approved' ) ); - - $earning = floatval( $debit_balance - $credit_balance ); - } else { - $earning = (float) $wpdb->get_var( $wpdb->prepare( - "SELECT - SUM(net_amount) as earnings - FROM - {$wpdb->prefix}dokan_orders as do LEFT JOIN {$wpdb->prefix}posts as p ON do.order_id = p.ID - WHERE - seller_id = %d AND DATE(p.post_date) <= %s AND order_status IN ($status)", - $this->id, $on_date ) ); - } + $this->id, $on_date, 'dokan_refund', 'approved' + ) + ); + + $earning = floatval( $debit_balance - $credit_balance ); Cache::set( $cache_key, $earning, $cache_group ); } @@ -874,24 +882,19 @@ public function get_balance( $formatted = true, $on_date = '' ) { if ( false === $earning ) { - $installed_version = get_option( 'dokan_theme_version' ); - $status = dokan_withdraw_get_active_order_status_in_comma(); - - if ( ! $installed_version || version_compare( $installed_version, '2.8.2', '>' ) ) { - $result = $wpdb->get_row( $wpdb->prepare( - "SELECT SUM(debit) as earnings, - ( SELECT SUM(credit) FROM {$wpdb->prefix}dokan_vendor_balance WHERE vendor_id = %d AND DATE(balance_date) <= %s ) as withdraw - from {$wpdb->prefix}dokan_vendor_balance - WHERE vendor_id = %d AND DATE(balance_date) <= %s AND status IN($status)", - $seller_id, $on_date, $seller_id, $on_date ) ); - } else { - $result = $wpdb->get_row( $wpdb->prepare( - "SELECT SUM(net_amount) as earnings, - (SELECT SUM(amount) FROM {$wpdb->prefix}dokan_withdraw WHERE user_id = %d AND status = 1 AND DATE(`date`) <= %s) as withdraw - FROM {$wpdb->prefix}dokan_orders as do LEFT JOIN {$wpdb->prefix}posts as p ON do.order_id = p.ID - WHERE seller_id = %d AND DATE(p.post_date) <= %s AND order_status IN ($status)", - $seller_id, $on_date, $seller_id, $date ) ); - } + $status = dokan_withdraw_get_active_order_status_in_comma(); + $result = $wpdb->get_row( + $wpdb->prepare( + "SELECT SUM(debit) as earnings, + ( + SELECT SUM(credit) FROM {$wpdb->prefix}dokan_vendor_balance + WHERE vendor_id = %d AND DATE(balance_date) <= %s + ) as withdraw + from {$wpdb->prefix}dokan_vendor_balance + WHERE vendor_id = %d AND DATE(balance_date) <= %s AND status IN($status)", + $seller_id, $on_date, $seller_id, $on_date + ) + ); $earning = (float) $result->earnings - (float) NumberUtil::round( $result->withdraw, wc_get_rounding_precision() ); @@ -902,8 +905,11 @@ public function get_balance( $formatted = true, $on_date = '' ) { $decimal = ( 0 === wc_get_price_decimals() ) ? 2 : wc_get_price_decimals(); return apply_filters( 'dokan_get_formatted_seller_balance', - wc_price( $earning, [ 'decimals' => $decimal ] - ), $this->id ); + wc_price( + $earning, [ 'decimals' => $decimal ] + ), + $this->id + ); } return apply_filters( 'dokan_get_seller_balance', $earning, $this->id ); diff --git a/includes/functions-compatibility.php b/includes/functions-compatibility.php index da10761cb7..1ab9c39397 100644 --- a/includes/functions-compatibility.php +++ b/includes/functions-compatibility.php @@ -74,11 +74,7 @@ function dokan_replace_func( $old_method, $new_method, $object = null ) { * @return String date */ function dokan_get_date_created( $order ) { - if ( version_compare( WC_VERSION, '2.7', '>' ) ) { - return wc_format_datetime( $order->get_date_created(), get_option( 'date_format' ) . ', ' . get_option( 'time_format' ) ); - } - - return $order->order_date; + return wc_format_datetime( $order->get_date_created(), wc_date_format() . ', ' . wc_time_format() ); } /** diff --git a/includes/functions-rest-api.php b/includes/functions-rest-api.php new file mode 100644 index 0000000000..e0f3ae7504 --- /dev/null +++ b/includes/functions-rest-api.php @@ -0,0 +1,39 @@ +get_attributes(); + + if ( isset( $attributes['args'][ $key ] ) ) { + $argument = $attributes['args'][ $key ]; + // Check to make sure our argument is an int. + if ( 'integer' === $argument['type'] && ! is_numeric( $value ) ) { + // translators: 1) argument name, 2) argument value + return new WP_Error( 'rest_invalid_param', sprintf( esc_html__( '%1$s is not of type %2$s', 'dokan-lite' ), $key, 'integer' ), [ 'status' => 400 ] ); + } + } else { + // this code won't execute because we have specified this argument as required. + // if we reused this validation callback and did not have required args then this would fire. + // translators: 1) argument name + return new WP_Error( 'rest_invalid_param', sprintf( esc_html__( '%s was not registered as a request argument.', 'dokan-lite' ), $key ), [ 'status' => 400 ] ); + } + + $vendor = dokan()->vendor->get( intval( $value ) ); + if ( $vendor->get_id() && $vendor->is_vendor() ) { + return true; + } + + // translators: 1) rest api endpoint key name + return new WP_Error( 'rest_invalid_param', sprintf( esc_html__( 'No store found with given store id', 'dokan-lite' ), $key ), [ 'status' => 400 ] ); + } +} diff --git a/includes/functions.php b/includes/functions.php index 88f474add5..c495fcf7ea 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -1,6 +1,7 @@ get_var( - $wpdb->prepare( "SELECT SUM(order_total) as earnings FROM {$wpdb->prefix}dokan_orders WHERE seller_id = %d AND order_status IN('wc-completed', 'wc-processing', 'wc-on-hold')", $seller_id ) - ); - - Cache::set( $cache_key, $earnings, $cache_group ); - } - - return apply_filters( 'dokan_seller_total_sales', $earnings, $seller_id ); -} - -/** - * Generate dokan sync table - * - * @deprecated since 2.4.3 - */ -function dokan_generate_sync_table() { - wc_deprecated_function( 'dokan_generate_sync_table', '2.4.3' ); - - global $wpdb; - - $orders = $wpdb->get_results( - $wpdb->prepare( - "SELECT oi.order_id, p.ID as product_id, p.post_title, p.post_author as seller_id, - oim2.meta_value as order_total, p.post_status as order_status - FROM {$wpdb->prefix}woocommerce_order_items oi - INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim ON oim.order_item_id = oi.order_item_id - INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim2 ON oim2.order_item_id = oi.order_item_id - INNER JOIN $wpdb->posts p ON oi.order_id = p.ID - WHERE - oim.meta_key = %s AND - oim2.meta_key = %s - GROUP BY oi.order_id", - '_product_id', - '_line_total' - ) - ); - - $table_name = $wpdb->prefix . 'dokan_orders'; - - $wpdb->query( "TRUNCATE TABLE {$wpdb->prefix}dokan_orders" ); - - if ( $orders ) { - foreach ( $orders as $order ) { - if ( dokan_is_admin_coupon_applied( $order, $seller_id ) ) { - $net_amount = dokan()->commission->get_earning_by_order( $order, 'seller' ); - } else { - $admin_commission = dokan()->commission->get_earning_by_order( $order, 'admin' ); - $net_amount = $order_total - $admin_commission; - } - - $wpdb->insert( - $table_name, - [ - 'order_id' => $order->order_id, - 'seller_id' => $order->seller_id, - 'order_total' => $order->order_total, - 'net_amount' => $net_amount, - 'order_status' => $order->order_status, - ], - [ - '%d', - '%d', - '%f', - '%f', - '%s', - ] - ); - } - } -} - -if ( ! function_exists( 'dokan_get_seller_earnings_by_order' ) ) { - - /** - * Get Seller's net Earnings from a order - * - * @since 2.5.2 - * - * @param WC_ORDER $order - * @param int $seller_id - * - * @return int $earned - */ - function dokan_get_seller_earnings_by_order( $order, $seller_id ) { - $earned = $order->get_total() - dokan_get_admin_commission_by( $order, $seller_id ); - - return apply_filters( 'dokan_get_seller_earnings_by_order', $earned, $order, $seller_id ); - } -} - if ( ! function_exists( 'dokan_get_seller_percentage' ) ) { /** @@ -1132,7 +1028,7 @@ function dokan_admin_product_columns( $columns ) { * @return mixed */ function dokan_get_option( $option, $section, $default = '' ) { - list( $option, $section ) = dokan_admin_settings_rearrange_map( $option, $section ); + [ $option, $section ] = dokan_admin_settings_rearrange_map( $option, $section ); $options = get_option( $section ); @@ -1898,8 +1794,12 @@ function dokan_disable_admin_bar( $show_admin_bar ) { if ( $current_user->ID !== 0 ) { $role = reset( $current_user->roles ); + $block_admin_access = dokan_get_option( 'admin_access', 'dokan_general', 'on' ); + if ( OrderUtil::is_hpos_enabled() ) { + $block_admin_access = 'on'; + } - if ( dokan_get_option( 'admin_access', 'dokan_general', 'on' ) === 'on' ) { + if ( $block_admin_access === 'on' ) { if ( in_array( $role, [ 'seller', 'customer', 'vendor_staff' ], true ) ) { return false; } @@ -1938,95 +1838,6 @@ function dokan_filter_product_for_current_vendor( $query ) { add_filter( 'pre_get_posts', 'dokan_filter_product_for_current_vendor' ); -/** - * Filter orders of current user - * - * @since 2.9.4 - * - * @param object $query - * - * @param object $args - * - * @return object $args - */ -function dokan_filter_orders_for_current_vendor( $args, $query ) { - global $wpdb; - - if ( ! is_admin() || ! $query->is_main_query() ) { - return $args; - } - - if ( ! isset( $query->query_vars['post_type'] ) ) { - return $args; - } - - if ( ! in_array( $query->query_vars['post_type'], [ 'shop_order', 'wc_booking' ], true ) ) { - return $args; - } - - $vendor_id = 0; - - if ( ! current_user_can( 'manage_woocommerce' ) ) { - $vendor_id = dokan_get_current_user_id(); - } elseif ( ! empty( $_GET['vendor_id'] ) ) { // phpcs:ignore - $vendor_id = absint( wp_unslash( $_GET['vendor_id'] ) ); // phpcs:ignore - } - - if ( ! $vendor_id ) { - return $args; - } - - $args['join'] .= " LEFT JOIN {$wpdb->prefix}dokan_orders as do ON $wpdb->posts.ID=do.order_id"; - $args['where'] .= " AND do.seller_id=$vendor_id"; - - return $args; -} - -add_filter( 'posts_clauses', 'dokan_filter_orders_for_current_vendor', 12, 2 ); - -/** - * Dokan map meta cpas for vendors - * - * @param array $caps - * @param string $cap - * @param int $user_id - * @param array $args - * - * @return array - */ -function dokan_map_meta_caps( $caps, $cap, $user_id, $args ) { - global $post; - - if ( ! is_admin() ) { - return $caps; - } - - $post_id = ! empty( $args[0] ) ? $args[0] : 0; - - if ( $cap === 'edit_post' || $cap === 'edit_others_shop_orders' ) { - $post_id = ! empty( $args[0] ) ? $args[0] : 0; - - if ( empty( $post_id ) ) { - if ( empty( $post->ID ) ) { - return $caps; - } - - $post_id = $post->ID; - } - - $vendor_id = get_post_meta( $post_id, '_dokan_vendor_id', true ); - $current_user_id = get_current_user_id(); - - if ( absint( $vendor_id ) === absint( $current_user_id ) ) { - return [ 'edit_shop_orders' ]; - } - } - - return $caps; -} - -add_filter( 'map_meta_cap', 'dokan_map_meta_caps', 12, 4 ); - /** * Remove sellerdiv metabox when a seller can access the backend * @@ -2259,36 +2070,6 @@ function dokan_get_processing_time_value( $index ) { } } -/** - * Dokan get vendor order details by order ID - * - * @since 3.2.11 rewritten entire function - * - * @param int|null $vendor_id will remove this parameter in future - * @param int $order - * - * @return array will return empty array in case order has suborders - */ -function dokan_get_vendor_order_details( $order_id, $vendor_id = null ) { - $order = wc_get_order( $order_id ); - $order_info = []; - - if ( ! $order instanceof WC_Abstract_Order || $order->get_meta( 'has_sub_order' ) ) { - return apply_filters( 'dokan_get_vendor_order_details', $order_info, $order_id, $vendor_id ); - } - - foreach ( $order->get_items( 'line_item' ) as $item ) { - $info = [ - 'product' => $item['name'], - 'quantity' => $item['quantity'], - 'total' => $item['total'], - ]; - array_push( $order_info, $info ); - } - - return apply_filters( 'dokan_get_vendor_order_details', $order_info, $order_id, $vendor_id ); -} - /** * Send email to seller and admin when there is no product in stock or low stock * @@ -2853,6 +2634,8 @@ function dokan_get_category_wise_seller_commission_type( $product_id, $category_ * @param int $product_id * @param int $seller_id * + * @deprecated 2.9.11 + * * @return float $earning | zero on failure or no price */ function dokan_get_earning_by_product( $product_id, $seller_id ) { @@ -3114,75 +2897,6 @@ function dokan_get_jed_locale_data( $domain, $language_dir = null ) { return $locale; } -/** - * Revoke vendor access of changing order status in the backend if permission is not given - * - * @since 2.8.0 - * - * @return void; - */ -function dokan_revoke_change_order_status() { - if ( current_user_can( 'manage_woocommerce' ) ) { - return; - } - - if ( is_admin() && get_current_screen()->id === 'shop_order' ) { - if ( dokan_get_option( 'order_status_change', 'dokan_selling', 'on' ) !== 'on' ) { - ?> - - $customer_id, - 'post_type' => 'shop_order', - 'meta_key' => '_dokan_vendor_id', // phpcs:ignore - 'meta_value' => $seller_id, // phpcs:ignore - 'post_status' => 'any', - 'return' => 'ids', - 'numberposts' => 1, - ]; - - $orders = wc_get_orders( $args ); - - return ! empty( $orders ) ? true : false; -} - /** * Dokan get pro buy now url * @@ -3354,104 +3041,6 @@ function dokan_pro_buynow_url() { return $link; } -/** - * Add vendor info in restful wc_order - * - * @param WP_REST_Response $response - * - * @return WP_REST_Response - */ -function dokan_add_vendor_info_in_rest_order( $response ) { - $vendor_ids = []; - - foreach ( $response as $data ) { - if ( empty( $data['line_items'] ) ) { - continue; - } - - foreach ( $data['line_items'] as $item ) { - $product_id = ! empty( $item['product_id'] ) ? $item['product_id'] : 0; - $vendor_id = (int) get_post_field( 'post_author', $product_id ); - - if ( $vendor_id && ! in_array( $vendor_id, $vendor_ids, true ) ) { - array_push( $vendor_ids, $vendor_id ); - } - } - } - - if ( ! $vendor_ids ) { - return $response; - } - - $data = $response->get_data(); - - foreach ( $vendor_ids as $store_id ) { - $store = dokan()->vendor->get( $store_id ); - $data['stores'][] = [ - 'id' => $store->get_id(), - 'name' => $store->get_name(), - 'shop_name' => $store->get_shop_name(), - 'url' => $store->get_shop_url(), - 'address' => $store->get_address(), - ]; - } - - // for backward compatibility, if there are multiple vendors, pass empty array. - if ( count( $vendor_ids ) > 1 ) { - $data['store'] = []; - } else { - $store = dokan()->vendor->get( $vendor_ids[0] ); - $data['store'] = [ - 'id' => $store->get_id(), - 'name' => $store->get_name(), - 'shop_name' => $store->get_shop_name(), - 'url' => $store->get_shop_url(), - 'address' => $store->get_address(), - ]; - } - - $response->set_data( $data ); - - return $response; -} - -add_filter( 'woocommerce_rest_prepare_shop_order_object', 'dokan_add_vendor_info_in_rest_order', 10, 1 ); - -/** - * Stop sending multiple email for an order - * - * @since 2.8.6 - * - * @return void - */ -function dokan_stop_sending_multiple_email() { - if ( did_action( 'woocommerce_order_status_pending_to_on-hold_notification' ) === 1 ) { - dokan_remove_hook_for_anonymous_class( 'woocommerce_order_status_pending_to_on-hold_notification', 'WC_Email_Customer_On_Hold_Order', 'trigger', 10 ); - } - - if ( did_action( 'woocommerce_order_status_on-hold_to_processing_notification' ) === 1 ) { - dokan_remove_hook_for_anonymous_class( 'woocommerce_order_status_on-hold_to_processing_notification', 'WC_Email_Customer_Processing_Order', 'trigger', 10 ); - } - - if ( did_action( 'woocommerce_order_status_pending_to_processing_notification' ) === 1 ) { - dokan_remove_hook_for_anonymous_class( 'woocommerce_order_status_pending_to_processing_notification', 'WC_Email_Customer_Processing_Order', 'trigger', 10 ); - } - - if ( did_action( 'woocommerce_order_status_completed_notification' ) === 1 ) { - dokan_remove_hook_for_anonymous_class( 'woocommerce_order_status_completed_notification', 'WC_Email_Customer_Completed_Order', 'trigger', 10 ); - } - - if ( did_action( 'woocommerce_order_status_failed_to_processing_notification' ) === 1 ) { - dokan_remove_hook_for_anonymous_class( 'woocommerce_order_status_failed_to_processing_notification', 'WC_Email_Customer_Processing_Order', 'trigger', 10 ); - } -} - -add_action( 'woocommerce_order_status_pending_to_on-hold', 'dokan_stop_sending_multiple_email' ); -add_action( 'woocommerce_order_status_on-hold_to_processing', 'dokan_stop_sending_multiple_email' ); -add_action( 'woocommerce_order_status_pending_to_processing', 'dokan_stop_sending_multiple_email' ); -add_action( 'woocommerce_order_status_completed', 'dokan_stop_sending_multiple_email' ); -add_action( 'woocommerce_order_status_failed_to_processing', 'dokan_stop_sending_multiple_email' ); - /** * Remove hook for anonymous class * @@ -4226,13 +3815,15 @@ function dokan_get_interval_between_dates( $start_date, $end_date, $group_by = ' * @since 2.6.8 * @since 3.7.0 This method was moved from wc-functions.php * + * @param string $time * @param boolean $date_only * - * @param string $time + * @deprecated DOKAN_SINCE * * @return string */ function dokan_date_time_format( $time, $date_only = false ) { + wc_deprecated_function( 'dokan_date_time_format', 'DOKAN_SINCE', 'dokan_format_datetime()' ); $format = apply_filters( 'dokan_date_time_format', wc_date_format() . ' ' . wc_time_format() ); if ( $date_only ) { @@ -4276,7 +3867,7 @@ function dokan_mask_email_address( $email ) { return $email; } - list( $first, $last ) = explode( '@', $email ); + [ $first, $last ] = explode( '@', $email ); $first = str_replace( substr( $first, '1' ), str_repeat( '*', strlen( $first ) - 1 ), $first ); $last = explode( '.', $last ); $last_domain = str_replace( substr( $last['0'], '1' ), str_repeat( '*', strlen( $last['0'] ) - 1 ), $last['0'] ); @@ -4338,16 +3929,15 @@ function dokan_array_after( $array, $position, $new_array ) { * * @since 3.2.16 * + * @param array $old_array * @param array $new_array * @param string $insert_after_key * - * @param array $old_array - * * @return array */ -function dokan_array_insert_after( array $old_array, array $new_array, $insert_after_key ) { +function dokan_array_insert_after( array $old_array, array $new_array, $insert_after_key = '' ) { $keys = array_keys( $old_array ); - $index = array_search( $insert_after_key, $keys, true ); + $index = ! empty( $insert_after_key ) ? array_search( $insert_after_key, $keys, true ) : false; $pos = false === $index ? count( $old_array ) : $index + 1; return array_slice( $old_array, 0, $pos, true ) + $new_array + array_slice( $old_array, $pos, count( $old_array ) - 1, true ); @@ -4530,45 +4120,6 @@ function is_tweleve_hour_format() { return preg_match( '/(am|pm)$/i', dokan_current_datetime()->format( wc_time_format() ) ); } -/** - * Updates bulk orders status by orders ids. - * - * @since 3.7.10 - * - * @param array $postdata - * - * @return void - */ -function dokan_apply_bulk_order_status_change( $postdata ) { - if ( ! isset( $postdata['status'] ) || ! isset( $postdata['bulk_orders'] ) ) { - return; - } - - $status = sanitize_text_field( wp_unslash( $postdata['status'] ) ); - $orders = array_map( 'absint', $postdata['bulk_orders'] ); - - // -1 means bluk action option value - $excluded_status = [ '-1', 'cancelled', 'refunded' ]; - - if ( in_array( $status, $excluded_status, true ) ) { - return; - } - - foreach ( $orders as $order_id ) { - $order = wc_get_order( $order_id ); - - if ( ! $order instanceof \WC_Order ) { - continue; - } - - if ( in_array( $order->get_status(), $excluded_status, true ) || $order->get_status() === $status ) { - continue; - } - - $order->update_status( $status ); - } -} - /** * Sanitize phone number. * Allows only numbers and "+" (plus sign) "." (full stop) "(" ")" "-". diff --git a/includes/wc-functions.php b/includes/wc-functions.php index bfba86a65b..01aad2efe9 100755 --- a/includes/wc-functions.php +++ b/includes/wc-functions.php @@ -5,11 +5,11 @@ * * @access public * - * @param int $post_id + * @param int $post_id * @param array $data * - * @return void * @throws WC_Data_Exception + * @return void */ function dokan_process_product_meta( int $post_id, array $data = [] ) { if ( ! $post_id || ! $data ) { @@ -38,7 +38,7 @@ function dokan_process_product_meta( int $post_id, array $data = [] ) { update_post_meta( $post_id, '_product_image_gallery', implode( ',', $attachment_ids ) ); } - // Check product visibility and purchases note + // Check product visibility and purchase note $data['_visibility'] = isset( $data['_visibility'] ) ? sanitize_text_field( $data['_visibility'] ) : ''; $data['_purchase_note'] = isset( $data['_purchase_note'] ) ? sanitize_textarea_field( $data['_purchase_note'] ) : ''; @@ -419,9 +419,12 @@ function ( $value ) { * @param int $variation_id optional product variation identifier * @param array $downloadable_files newly set files * + * @deprecated DOKAN_SINCE + * * @return void */ function dokan_process_product_file_download_paths( int $product_id, int $variation_id, array $downloadable_files ) { + wc_deprecated_function( 'dokan_process_product_file_download_paths', 'DOKAN_SINCE' ); global $wpdb; if ( $variation_id ) { @@ -471,9 +474,12 @@ function dokan_process_product_file_download_paths( int $product_id, int $variat * * @param int $order_id * + * @deprecated DOKAN_SINCE + * * @return int */ -function dokan_sub_order_get_total_coupon( int $order_id ): int { +function dokan_sub_order_get_total_coupon( int $order_id ) : int { + wc_deprecated_function( 'dokan_sub_order_get_total_coupon', 'DOKAN_SINCE' ); global $wpdb; $result = $wpdb->get_var( @@ -653,7 +659,7 @@ function dokan_get_top_rated_products( $per_page = 8, $seller_id = '', $page = 1 * * @return WP_Query */ -function dokan_get_on_sale_products( int $per_page = 10, int $paged = 1, int $seller_id = 0 ): WP_Query { +function dokan_get_on_sale_products( int $per_page = 10, int $paged = 1, int $seller_id = 0 ) : WP_Query { // Get products on sale $product_ids_on_sale = wc_get_product_ids_on_sale(); @@ -749,69 +755,6 @@ function dokan_get_readable_seller_rating( $seller_id ) { return $vendor->get_readable_rating( false ); } -/** - * Exclude child order emails for customers - * - * A hacky and dirty way to do this from this action. Because there is no easy - * way to do this by removing action hooks from WooCommerce. It would be easier - * if they were from functions. Because they are added from classes, we can't - * remove those action hooks. That's why we are doing this from the phpmailer_init action - * by returning a fake phpmailer class. - * - * @param array $attr - * - * @return void - */ -function dokan_exclude_child_customer_receipt( &$phpmailer ) { - $subject = $phpmailer->Subject; ////phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - - // order receipt - $sub_receipt = __( 'Your {site_title} order receipt from {order_date}', 'dokan-lite' ); - $sub_download = __( 'Your {site_title} order from {order_date} is complete', 'dokan-lite' ); - - $sub_receipt = str_replace( - [ - '{site_title}', - '{order_date}', - ], [ wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ), '' ], $sub_receipt - ); - $sub_download = str_replace( - [ - '{site_title}', - '{order_date} is complete', - ], [ wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ), '' ], $sub_download - ); - - // not a customer receipt mail - if ( ( stripos( $subject, $sub_receipt ) === false ) && ( stripos( $subject, $sub_download ) === false ) ) { - return; - } - - $message = $phpmailer->Body; //phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase - $pattern = '/Order: #(\d+)/'; - preg_match( $pattern, $message, $matches ); - - if ( isset( $matches[1] ) ) { - $order_id = $matches[1]; - $order = get_post( $order_id ); - - // we found a child order - if ( ! is_wp_error( $order ) && $order->post_parent !== 0 ) { - $phpmailer = new DokanFakeMailer(); - } - } -} - -add_action( 'phpmailer_init', 'dokan_exclude_child_customer_receipt' ); - -/** - * A fake mailer class to replace phpmailer - */ -class DokanFakeMailer { - public function Send() { - } -} - add_filter( 'woocommerce_dashboard_status_widget_sales_query', 'dokan_filter_woocommerce_dashboard_status_widget_sales_query' ); /** @@ -826,7 +769,8 @@ public function Send() { function dokan_filter_woocommerce_dashboard_status_widget_sales_query( $query ) { global $wpdb; - $query['where'] .= " AND posts.ID NOT IN ( SELECT post_parent FROM {$wpdb->posts} WHERE post_type IN ( '" . implode( "','", array_merge( wc_get_order_types( 'sales-reports' ), [ 'shop_order_refund' ] ) ) . "' ) )"; + $query['where'] .= " AND posts.ID NOT IN ( SELECT post_parent FROM { + $wpdb->posts} WHERE post_type IN ( '" . implode( "','", array_merge( wc_get_order_types( 'sales-reports' ), [ 'shop_order_refund' ] ) ) . "' ) )"; return $query; } @@ -937,87 +881,6 @@ function dokan_save_account_details() { add_action( 'template_redirect', 'dokan_save_account_details' ); -/** - * This method will delete vendors best-selling product cache after a new order has been made - * - * @since 3.2.11 - * - * @param int $post_id - */ -function dokan_clear_best_selling_product_category_cache( $order_id ) { - $order = wc_get_order( $order_id ); - - if ( ! $order ) { - return; - } - - // check if order has suborder - if ( $order->get_meta( 'has_sub_order' ) ) { - // same hooks will be called for individual sub orders - return; - } - - // get vendor id from order - $seller_id = dokan_get_seller_id_by_order( $order_id ); - if ( empty( $seller_id ) ) { - return; - } - - delete_transient( 'dokan_vendor_get_best_selling_products_' . $seller_id ); - delete_transient( 'dokan_vendor_get_best_selling_categories_' . $seller_id ); -} - -add_action( 'woocommerce_new_order', 'dokan_clear_best_selling_product_category_cache', 10, 1 ); -add_action( 'woocommerce_update_order', 'dokan_clear_best_selling_product_category_cache', 10, 1 ); - -/** - * This method will delete store category cache after a category is updated - * - * @since 3.2.10 - * - * @param int $term_id - */ -function dokan_clear_edit_product_category_cache( $term_id ) { - // get taxonomy slug - $term = get_term_by( 'ID', $term_id, 'product_cat' ); - if ( false === $term || ! isset( $term->slug ) ) { - return; - } - - // get associated product id with this category - $args = [ - 'status' => 'publish', - 'limit' => - 1, - 'return' => 'ids', - 'category' => [ $term->slug ], - ]; - - $query = new WC_Product_Query( $args ); - $products = $query->get_products(); - - if ( empty( $products ) ) { - return; - } - - global $wpdb; - $products = implode( ',', array_map( 'absint', (array) $products ) ); - $seller_ids = $wpdb->get_col( "SELECT DISTINCT post_author from {$wpdb->posts} WHERE ID in ($products)" ); // phpcs:ignore - - foreach ( $seller_ids as $seller_id ) { - // delete vendor get_store_categories() method transient - if ( function_exists( 'wpml_get_active_languages' ) ) { - foreach ( wpml_get_active_languages() as $active_language ) { - delete_transient( 'dokan_vendor_get_store_categories_' . $active_language['code'] . '_' . $seller_id ); - } - } - - delete_transient( 'dokan_vendor_get_store_categories_' . $seller_id ); - } -} - -add_action( 'edit_product_cat', 'dokan_clear_edit_product_category_cache', 10, 1 ); -add_action( 'pre_delete_term', 'dokan_clear_edit_product_category_cache', 10, 1 ); - /** * Remove banner when without banner layout selected for profile * @@ -1112,67 +975,6 @@ function dokan_get_more_products_from_seller( $seller_id = 0, $posts_per_page = wp_reset_postdata(); } -/** - * Change bulk order status in vendor dashboard - * - * @since 2.8.3 - * - * @return void - */ -function dokan_bulk_order_status_change() { - if ( ! current_user_can( 'dokan_manage_order' ) ) { - return; - } - - if ( dokan_get_option( 'order_status_change', 'dokan_selling' ) === 'off' ) { - return; - } - - if ( ! isset( $_POST['security'] ) || ! wp_verify_nonce( sanitize_key( $_POST['security'] ), 'bulk_order_status_change' ) ) { - return; - } - - // Doing the bulk action for orders. - dokan_apply_bulk_order_status_change( - [ - 'status' => isset( $_POST['status'] ) ? sanitize_text_field( wp_unslash( $_POST['status'] ) ) : '', - 'bulk_orders' => isset( $_POST['bulk_orders'] ) ? array_map( 'absint', $_POST['bulk_orders'] ) : [], - ] - ); -} - -add_action( 'template_redirect', 'dokan_bulk_order_status_change' ); - -/** - * Add vendor email on customers note mail replay to - * - * @param string $headers - * @param string $id - * @param WC_Order $order - * - * @return string $headers - */ -function dokan_add_reply_to_vendor_email_on_wc_customer_note_mail( $headers, $id, $order ) { - if ( ! ( $order instanceof WC_Order ) ) { - return $headers; - } - - if ( 'customer_note' === $id ) { - foreach ( $order->get_items( 'line_item' ) as $item ) { - $product_id = $item['product_id']; - $author = get_post_field( 'post_author', $product_id ); - $author_data = get_userdata( absint( $author ) ); - $user_email = $author_data->user_email; - - $headers .= "Reply-to: <$user_email>\r\n"; - } - } - - return $headers; -} - -add_filter( 'woocommerce_email_headers', 'dokan_add_reply_to_vendor_email_on_wc_customer_note_mail', 10, 3 ); - /** * Keep old vendor after duplicate any product * @@ -1194,79 +996,6 @@ function dokan_keep_old_vendor_woocommerce_duplicate_product( $duplicate, $produ add_action( 'woocommerce_product_duplicate', 'dokan_keep_old_vendor_woocommerce_duplicate_product', 35, 2 ); - -/** - * Send email to the vendor/seller when cancel the order - * - * @param string $recipient - * @param WC_Order $order - * - * @return string - */ -function send_email_for_order_cancellation( $recipient, $order ) { - if ( ! $order instanceof \WC_Order ) { - return $recipient; - } - - // get the order id from order object - $seller_id = dokan_get_seller_id_by_order( $order->get_id() ); - - $seller_info = get_userdata( $seller_id ); - $seller_email = $seller_info->user_email; - - // if admin email & seller email is same - if ( false === strpos( $recipient, $seller_email ) ) { - $recipient .= ',' . $seller_email; - } - - return $recipient; -} - -add_filter( 'woocommerce_email_recipient_cancelled_order', 'send_email_for_order_cancellation', 10, 2 ); - - -/** - * Modify order counts for vendor. - * - * @since DOKAN_LITE_SINCE - * - * @param object $counts - * - * @return object $counts - */ -function dokan_modify_vendor_order_counts( $counts ) { - global $pagenow; - - if ( 'edit.php' !== $pagenow || 'shop_order' !== get_query_var( 'post_type' ) ) { - return $counts; - } - - if ( current_user_can( 'manage_woocommerce' ) ) { - return $counts; - } - - $vendor_id = dokan_get_current_user_id(); - - if ( empty( $vendor_id ) ) { - return $counts; - } - - // Current order counts for the vendor. - $vendor_order_counts = dokan_count_orders( $vendor_id ); - - // Modify WP dashboard order counts as per vendor's order counts. - foreach ( $vendor_order_counts as $count_key => $count_value ) { - if ( 'total' !== $count_key ) { - $counts->{$count_key} = $count_value; - } - } - - return $counts; -} - -add_filter( 'wp_count_posts', 'dokan_modify_vendor_order_counts', 10, 1 ); - - /** * @since 3.7.24 * diff --git a/includes/wc-legacy-functions.php b/includes/wc-legacy-functions.php index ff8a99ec23..aba875527d 100644 --- a/includes/wc-legacy-functions.php +++ b/includes/wc-legacy-functions.php @@ -9,50 +9,12 @@ * * @param int $parent_order_id * - * @throws Exception - * @return void + * @deprecated DOKAN_SINCE * - * @hooked woocommerce_checkout_update_order_meta - 10 + * @return void */ function dokan_create_sub_order( $parent_order_id ) { - if ( dokan_string_to_bool( get_post_meta( $parent_order_id, 'has_sub_order' ) ) === true ) { - $args = [ - 'post_parent' => $parent_order_id, - 'post_type' => 'shop_order', - 'numberposts' => - 1, - 'post_status' => 'any', - ]; - $child_orders = get_children( $args ); - - foreach ( $child_orders as $child ) { - wp_delete_post( $child->ID ); - } - } - - $parent_order = new WC_Order( $parent_order_id ); - $sellers = dokan_get_sellers_by( $parent_order_id ); - - // return if we've only ONE seller - if ( count( $sellers ) === 1 ) { - $temp = array_keys( $sellers ); - $seller_id = reset( $temp ); - wp_update_post( - [ - 'ID' => $parent_order_id, - 'post_author' => $seller_id, - ] - ); - - return; - } - - // flag it as it has a suborder - update_post_meta( $parent_order_id, 'has_sub_order', true ); - - // seems like we've got multiple sellers - foreach ( $sellers as $seller_id => $seller_products ) { - dokan_create_seller_order( $parent_order, $seller_id, $seller_products ); - } + wc_deprecated_function( 'dokan_create_sub_order', '3.7.13', 'dokan()->order->create_sub_order()' ); } /** @@ -62,113 +24,12 @@ function dokan_create_sub_order( $parent_order_id ) { * @param int $seller_id * @param array $seller_products * - * @throws Exception + * @deprecated DOKAN_SINCE + * + * @return void */ function dokan_create_seller_order( $parent_order, $seller_id, $seller_products ) { - $order_data = apply_filters( - 'woocommerce_new_order_data', [ - 'post_type' => 'shop_order', - // translators: 1) time format - 'post_title' => sprintf( __( 'Order – %s', 'dokan-lite' ), strftime( _x( '%1$b %2$d, %Y @ %I:%M %p', 'Order date parsed by strftime', 'dokan-lite' ) ) ), - 'post_status' => 'wc-pending', - 'ping_status' => 'closed', - 'post_excerpt' => isset( $posted['order_comments'] ) ? $posted['order_comments'] : '', - 'post_author' => $seller_id, - 'post_parent' => $parent_order->id, - 'post_password' => uniqid( 'order_' ), // Protects the post just in case - ] - ); - - $order_id = wp_insert_post( $order_data ); - - if ( $order_id && ! is_wp_error( $order_id ) ) { - $order_total = 0; - $order_tax = 0; - $product_ids = []; - - do_action( 'woocommerce_new_order', $order_id ); - - // now insert line items - foreach ( $seller_products as $item ) { - $order_total += (float) $item['line_total']; - $order_tax += (float) $item['line_tax']; - $product_ids[] = $item['product_id']; - - $item_id = wc_add_order_item( - $order_id, [ - 'order_item_name' => $item['name'], - 'order_item_type' => 'line_item', - ] - ); - - if ( $item_id ) { - foreach ( $item['item_meta'] as $meta_key => $meta_value ) { - wc_add_order_item_meta( $item_id, $meta_key, $meta_value[0] ); - } - } - } // foreach - - $bill_ship = [ - '_billing_country', - '_billing_first_name', - '_billing_last_name', - '_billing_company', - '_billing_address_1', - '_billing_address_2', - '_billing_city', - '_billing_state', - '_billing_postcode', - '_billing_email', - '_billing_phone', - '_shipping_country', - '_shipping_first_name', - '_shipping_last_name', - '_shipping_company', - '_shipping_address_1', - '_shipping_address_2', - '_shipping_city', - '_shipping_state', - '_shipping_postcode', - ]; - - // save billing and shipping address - foreach ( $bill_ship as $val ) { - $order_key = ltrim( $val, '_' ); - update_post_meta( $order_id, $val, dokan_get_prop( $parent_order, $order_key ) ); - } - - // do shipping - $shipping_values = dokan_create_sub_order_shipping( $parent_order, $order_id, $seller_products ); - $shipping_cost = $shipping_values['cost']; - $shipping_tax = $shipping_values['tax']; - - // add coupons if any - dokan_create_sub_order_coupon( $parent_order, $order_id, $product_ids ); - $discount = dokan_sub_order_get_total_coupon( $order_id ); - - // calculate the total - $order_in_total = $order_total + $shipping_cost + $order_tax + $shipping_tax; - //$order_in_total = $order_total + $shipping_cost + $order_tax - $discount; - - // set order meta - update_post_meta( $order_id, '_payment_method', $parent_order->payment_method ); - update_post_meta( $order_id, '_payment_method_title', $parent_order->payment_method_title ); - - update_post_meta( $order_id, '_order_shipping', woocommerce_format_decimal( $shipping_cost ) ); - update_post_meta( $order_id, '_order_discount', woocommerce_format_decimal( $discount ) ); - update_post_meta( $order_id, '_cart_discount', woocommerce_format_decimal( $discount ) ); - update_post_meta( $order_id, '_order_tax', woocommerce_format_decimal( $order_tax ) ); - update_post_meta( $order_id, '_order_shipping_tax', woocommerce_format_decimal( $shipping_tax ) ); - update_post_meta( $order_id, '_order_total', woocommerce_format_decimal( $order_in_total ) ); - update_post_meta( $order_id, '_order_key', apply_filters( 'woocommerce_generate_order_key', uniqid( 'order_' ) ) ); - update_post_meta( $order_id, '_customer_user', $parent_order->customer_user ); - update_post_meta( $order_id, '_order_currency', get_post_meta( $parent_order->id, '_order_currency', true ) ); - update_post_meta( $order_id, '_prices_include_tax', $parent_order->prices_include_tax ); - update_post_meta( $order_id, '_customer_ip_address', get_post_meta( $parent_order->id, '_customer_ip_address', true ) ); - update_post_meta( $order_id, '_customer_user_agent', get_post_meta( $parent_order->id, '_customer_user_agent', true ) ); - - do_action( 'dokan_checkout_update_order_meta', $order_id, $seller_id ); - } // if order + wc_deprecated_function( 'dokan_create_sub_order', '3.7.13', 'dokan()->order->create_sub_order()' ); } /** diff --git a/includes/wc-template.php b/includes/wc-template.php index 27a8dab7c6..02180c0796 100755 --- a/includes/wc-template.php +++ b/includes/wc-template.php @@ -73,15 +73,8 @@ function dokan_product_seller_tab( $val ) { * @return void */ function dokan_order_show_suborders( $parent_order ) { - $sub_orders = get_children( - [ - 'post_parent' => dokan_get_prop( $parent_order, 'id' ), - 'post_type' => 'shop_order', - 'post_status' => array_keys( wc_get_order_statuses() ), - ] - ); - - if ( ! $sub_orders ) { + $sub_orders = dokan()->order->get_child_orders( $parent_order ); + if ( empty( $sub_orders ) ) { return; } @@ -297,7 +290,7 @@ function dokan_set_go_to_vendor_dashboard_btn() { * * @since 2.8.3 * - * @return string + * @return void */ function dokan_attach_vendor_name( $item_id, $order ) { $product_id = $order->get_product_id(); @@ -309,7 +302,7 @@ function dokan_attach_vendor_name( $item_id, $order ) { $vendor_id = get_post_field( 'post_author', $product_id ); $vendor = dokan()->vendor->get( $vendor_id ); - if ( ! is_object( $vendor ) ) { + if ( ! $vendor->is_vendor() ) { return; } @@ -400,7 +393,7 @@ function ( $store_id, $settings ) { 'pre_get_avatar', function () { $page_id = get_queried_object_id(); - $page = get_page( $page_id ); + $page = get_post( $page_id ); if ( ! $page instanceof WP_Post ) { return; diff --git a/src/admin/pages/Vendors.vue b/src/admin/pages/Vendors.vue index dbae9d4938..3b87fb8638 100644 --- a/src/admin/pages/Vendors.vue +++ b/src/admin/pages/Vendors.vue @@ -400,7 +400,7 @@ export default { }, ordersUrl(id) { - return dokan.urls.adminRoot + 'edit.php?post_type=shop_order&vendor_id=' + id; + return dokan.urls.adminOrderListUrl + '&vendor_id=' + id; }, editUrl(id) { diff --git a/templates/my-orders.php b/templates/my-orders.php index f3b8c2462a..31017bf626 100755 --- a/templates/my-orders.php +++ b/templates/my-orders.php @@ -8,16 +8,10 @@ - 1, - 'meta_key' => '_customer_user', // phpcs:ignore - 'meta_value' => get_current_user_id(), // phpcs:ignore - 'post_type' => 'shop_order', - 'post_status' => 'wc-publish', - ] - ) +$customer_orders = dokan()->order->get_customer_orders( + [ + 'limit' => -1, + ] ); if ( $customer_orders ) : @@ -27,14 +21,14 @@ - - - - - - - - + + + + + + + + @@ -42,7 +36,7 @@ $statuses = wc_get_order_statuses(); $now = dokan_current_datetime(); foreach ( $customer_orders as $customer_order ) { - $order = new WC_Order( $customer_order ); // phpcs:ignore + $order = wc_get_order( $customer_order ); // phpcs:ignore $item_count = $order->get_item_count(); $order_date = $order->get_date_created(); $order_date = is_a( $order_date, 'WC_DateTime' ) ? $now->setTimestamp( $order_date->getTimestamp() ) : $now; @@ -55,11 +49,11 @@ ID ); // phpcs:ignore - if ( ! $order ) { - continue; - } + foreach ( $sub_orders as $order ) { $item_count = $order->get_item_count(); $order_date = $order->get_date_created(); $order_date = is_a( $order_date, 'WC_DateTime' ) ? $now->setTimestamp( $order_date->getTimestamp() ) : $now; ?> From 1e105ffb714411a6ce48b360090f63d68460ec9b Mon Sep 17 00:00:00 2001 From: Nurul Umbhiya Date: Fri, 18 Aug 2023 11:08:10 +0600 Subject: [PATCH 3/3] chore: bump version to 3.8.0 --- README.md | 15 +- composer.json | 4 +- composer.lock | 131 +- dokan.php | 6 +- includes/Admin/functions.php | 8 +- includes/Commission.php | 6 +- includes/FakeMailer.php | 2 +- includes/Order/Admin/Hooks.php | 46 +- includes/Order/Admin/Permissions.php | 18 +- includes/Order/Controller.php | 4 +- includes/Order/EmailHooks.php | 12 +- includes/Order/Frontend/Hooks.php | 6 +- includes/Order/Hooks.php | 2 +- includes/Order/Manager.php | 22 +- includes/Order/MiscHooks.php | 14 +- includes/Order/OrderCache.php | 2 +- includes/Order/functions.php | 54 +- .../ProductCategory/ProductCategoryCache.php | 2 +- includes/Upgrade/Upgrades/V_1_2.php | 2 +- includes/Utilities/OrderUtil.php | 24 +- includes/functions-rest-api.php | 2 +- includes/functions.php | 4 +- includes/wc-functions.php | 8 +- includes/wc-legacy-functions.php | 4 +- languages/dokan-lite.pot | 1284 ++++---- package-lock.json | 2873 ++++++++++------- package.json | 4 +- readme.txt | 15 +- templates/whats-new.php | 26 + 29 files changed, 2604 insertions(+), 1996 deletions(-) diff --git a/README.md b/README.md index 398d32fbb5..db8f756f5a 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,11 @@ **Donate Link:** http://tareq.co/donate/ **Tags:** WooCommerce multivendor marketplace, multi vendor marketplace, multi seller store, multi-vendor, multi seller, commissions, multivendor, marketplace, product vendors, woocommerce vendor, commission rate, e-commerce, woocommerce, ebay, ecommerce. **Requires at least:** 5.4 -**Tested up to:** 6.2.2 +**Tested up to:** 6.3.0 **WC requires at least:** 5.0.0 -**WC tested up to:** 7.9.0 -**Requires PHP:** 7.2 -**Stable tag:** 3.7.24 +**WC tested up to:** 8.0.2 +**Requires PHP:** 7.3 +**Stable tag:** 3.8.0 **License:** GPLv2 or later **License URI:** http://www.gnu.org/licenses/gpl-2.0.html @@ -338,6 +338,13 @@ A. Just install and activate the PRO version without deleting the free plugin. A ## Changelog ## +### v3.8.0 ( Aug 18, 2023 ) ### + +- **update:** Added HPOS (High-Performance Order Storage) support for Dokan Lite. +- **fix:** Resolved an issue where traces of order data were left on the Dokan end even after the order had been deleted from the WordPress admin panel. +Previously, deleted orders were still visible under the Dashboard Overview menu, Reports menu, and under Withdraw menu. This issue has been fixed in the current release. +- **fix:** Multiple issues have been fixed after a product of an order has been deleted. + ### v3.7.24 ( Jul 25, 2023 ) ### - **update:** Restrictions added for vendors to review and purchase their own products. diff --git a/composer.json b/composer.json index e142083c06..8632d92436 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ ], "minimum-stability": "dev", "require": { - "php": ">=7.2", + "php": ">=7.3", "appsero/client": "dev-develop", "jakeasmith/http_build_url": "^1" }, @@ -26,7 +26,7 @@ }, "config": { "platform": { - "php": "7.2" + "php": "7.3" }, "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true diff --git a/composer.lock b/composer.lock index 5685b175c3..0ee5ecddf2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "dd73715be5f50d194b2d939b42bb397d", + "content-hash": "b8f3c6d04a4644d7cba672818b0aa712", "packages": [ { "name": "appsero/client", @@ -12,12 +12,12 @@ "source": { "type": "git", "url": "https://github.com/Appsero/client.git", - "reference": "985363ac0bd17d8cfaa45b0e6780ad68ccfe3ca8" + "reference": "3aa85cbb4eb25f648be8104d0a1fb14275f31e1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Appsero/client/zipball/985363ac0bd17d8cfaa45b0e6780ad68ccfe3ca8", - "reference": "985363ac0bd17d8cfaa45b0e6780ad68ccfe3ca8", + "url": "https://api.github.com/repos/Appsero/client/zipball/3aa85cbb4eb25f648be8104d0a1fb14275f31e1d", + "reference": "3aa85cbb4eb25f648be8104d0a1fb14275f31e1d", "shasum": "" }, "require": { @@ -57,9 +57,9 @@ ], "support": { "issues": "https://github.com/Appsero/client/issues", - "source": "https://github.com/Appsero/client/tree/develop" + "source": "https://github.com/Appsero/client/tree/v1.2.4" }, - "time": "2023-03-30T06:42:02+00:00" + "time": "2023-08-10T10:32:13+00:00" }, { "name": "jakeasmith/http_build_url", @@ -251,12 +251,12 @@ "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "928a96f585b86224ebc78f8f09d0482cf15b04f5" + "reference": "f6f48cfecf52ab791fe18cc1b11d6345512dc4b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/928a96f585b86224ebc78f8f09d0482cf15b04f5", - "reference": "928a96f585b86224ebc78f8f09d0482cf15b04f5", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/f6f48cfecf52ab791fe18cc1b11d6345512dc4b8", + "reference": "f6f48cfecf52ab791fe18cc1b11d6345512dc4b8", "shasum": "" }, "require": { @@ -304,29 +304,31 @@ "type": "tidelift" } ], - "time": "2023-03-08T17:24:01+00:00" + "time": "2023-07-30T10:01:33+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "67729272c564ab9f953c81f48db44e8b1cb1e1c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/67729272c564ab9f953c81f48db44e8b1cb1e1c3", + "reference": "67729272c564ab9f953c81f48db44e8b1cb1e1c3", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "php": "^7.3 || ^8.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -362,9 +364,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/master" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2023-06-01T14:19:47+00:00" }, { "name": "phar-io/version", @@ -598,17 +606,17 @@ "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHPCSExtra.git", - "reference": "187da1c292882aaa079e79950400ae96bd0d8d64" + "reference": "ad2b11964680e23af8a13b3b200da35d98ad7395" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/187da1c292882aaa079e79950400ae96bd0d8d64", - "reference": "187da1c292882aaa079e79950400ae96bd0d8d64", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/ad2b11964680e23af8a13b3b200da35d98ad7395", + "reference": "ad2b11964680e23af8a13b3b200da35d98ad7395", "shasum": "" }, "require": { "php": ">=5.4", - "phpcsstandards/phpcsutils": "^1.0.6", + "phpcsstandards/phpcsutils": "^1.0.8", "squizlabs/php_codesniffer": "^3.7.1" }, "require-dev": { @@ -654,7 +662,7 @@ "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues", "source": "https://github.com/PHPCSStandards/PHPCSExtra" }, - "time": "2023-06-19T04:53:17+00:00" + "time": "2023-08-16T21:39:53+00:00" }, { "name": "phpcsstandards/phpcsutils", @@ -662,12 +670,12 @@ "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHPCSUtils.git", - "reference": "4a4ea6774dd7a64dc64f4fbc55e14dd0bb2fefd9" + "reference": "69465cab9d12454e5e7767b9041af0cd8cd13be7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/4a4ea6774dd7a64dc64f4fbc55e14dd0bb2fefd9", - "reference": "4a4ea6774dd7a64dc64f4fbc55e14dd0bb2fefd9", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/69465cab9d12454e5e7767b9041af0cd8cd13be7", + "reference": "69465cab9d12454e5e7767b9041af0cd8cd13be7", "shasum": "" }, "require": { @@ -728,7 +736,7 @@ "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues", "source": "https://github.com/PHPCSStandards/PHPCSUtils" }, - "time": "2023-06-12T01:08:28+00:00" + "time": "2023-07-16T21:39:41+00:00" }, { "name": "phpunit/php-code-coverage", @@ -969,29 +977,30 @@ }, { "name": "phpunit/php-token-stream", - "version": "3.1.x-dev", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" + "reference": "76fc0567751d177847112bd3e26e4890529c98da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", - "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/76fc0567751d177847112bd3e26e4890529c98da", + "reference": "76fc0567751d177847112bd3e26e4890529c98da", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1016,7 +1025,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1" + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" }, "funding": [ { @@ -1025,7 +1034,7 @@ } ], "abandoned": true, - "time": "2021-07-26T12:15:06+00:00" + "time": "2020-08-06T06:03:05+00:00" }, { "name": "phpunit/phpunit", @@ -1033,12 +1042,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "42a347539aff5499b4da776dd5fa94bdd4c952ae" + "reference": "998b8252e7798e8a44027d0e4a26764af5216a53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/42a347539aff5499b4da776dd5fa94bdd4c952ae", - "reference": "42a347539aff5499b4da776dd5fa94bdd4c952ae", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/998b8252e7798e8a44027d0e4a26764af5216a53", + "reference": "998b8252e7798e8a44027d0e4a26764af5216a53", "shasum": "" }, "require": { @@ -1123,7 +1132,7 @@ "type": "tidelift" } ], - "time": "2023-06-19T06:32:09+00:00" + "time": "2023-08-14T13:24:16+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -1466,12 +1475,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "de036ec91d55d2a9e0db2ba975b512cdb1c23921" + "reference": "66783ce213de415b451b904bfef9dda0cf9aeae0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/de036ec91d55d2a9e0db2ba975b512cdb1c23921", - "reference": "de036ec91d55d2a9e0db2ba975b512cdb1c23921", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/66783ce213de415b451b904bfef9dda0cf9aeae0", + "reference": "66783ce213de415b451b904bfef9dda0cf9aeae0", "shasum": "" }, "require": { @@ -1522,7 +1531,7 @@ "type": "github" } ], - "time": "2022-02-10T06:55:38+00:00" + "time": "2023-08-02T09:23:32+00:00" }, { "name": "sebastian/object-enumerator", @@ -1860,12 +1869,12 @@ "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "d148febc2a2eb82972121d7f962883f7a5697b55" + "reference": "a813c38729aef0034ff7b0f5f0ac54e94ea76804" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/d148febc2a2eb82972121d7f962883f7a5697b55", - "reference": "d148febc2a2eb82972121d7f962883f7a5697b55", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/a813c38729aef0034ff7b0f5f0ac54e94ea76804", + "reference": "a813c38729aef0034ff7b0f5f0ac54e94ea76804", "shasum": "" }, "require": { @@ -1910,7 +1919,7 @@ "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "time": "2023-05-26T22:32:02+00:00" + "time": "2023-08-06T23:03:57+00:00" }, { "name": "tareq1988/wp-php-cs-fixer", @@ -2006,19 +2015,22 @@ "source": { "type": "git", "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", - "reference": "f2b63051f08cf6d51360896bb1647eabc6911bf2" + "reference": "04dba4728f341745e37c7ed1a1a38b3a43ee3ee0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/f2b63051f08cf6d51360896bb1647eabc6911bf2", - "reference": "f2b63051f08cf6d51360896bb1647eabc6911bf2", + "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/04dba4728f341745e37c7ed1a1a38b3a43ee3ee0", + "reference": "04dba4728f341745e37c7ed1a1a38b3a43ee3ee0", "shasum": "" }, "require": { "ext-filter": "*", + "ext-libxml": "*", + "ext-tokenizer": "*", + "ext-xmlreader": "*", "php": ">=5.4", - "phpcsstandards/phpcsextra": "^1.0", - "phpcsstandards/phpcsutils": "^1.0.5", + "phpcsstandards/phpcsextra": "^1.1.0", + "phpcsstandards/phpcsutils": "^1.0.8", "squizlabs/php_codesniffer": "^3.7.2" }, "require-dev": { @@ -2029,6 +2041,7 @@ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "suggest": { + "ext-iconv": "For improved results", "ext-mbstring": "For improved results" }, "default-branch": true, @@ -2055,7 +2068,7 @@ "source": "https://github.com/WordPress/WordPress-Coding-Standards", "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" }, - "time": "2023-06-20T15:25:34+00:00" + "time": "2023-08-17T09:54:06+00:00" }, { "name": "wp-phpunit/wp-phpunit", @@ -2063,12 +2076,12 @@ "source": { "type": "git", "url": "https://github.com/wp-phpunit/wp-phpunit.git", - "reference": "411a5e68d54fedb1fa4f07ce4e3d9cad1d27f379" + "reference": "ec1898606a6b32580b474825c8b99f78642496be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/411a5e68d54fedb1fa4f07ce4e3d9cad1d27f379", - "reference": "411a5e68d54fedb1fa4f07ce4e3d9cad1d27f379", + "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/ec1898606a6b32580b474825c8b99f78642496be", + "reference": "ec1898606a6b32580b474825c8b99f78642496be", "shasum": "" }, "default-branch": true, @@ -2104,7 +2117,7 @@ "issues": "https://github.com/wp-phpunit/issues", "source": "https://github.com/wp-phpunit/wp-phpunit" }, - "time": "2023-03-30T01:15:51+00:00" + "time": "2023-08-09T01:26:57+00:00" }, { "name": "yoast/phpunit-polyfills", @@ -2180,11 +2193,11 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.2" + "php": ">=7.3" }, "platform-dev": [], "platform-overrides": { - "php": "7.2" + "php": "7.3" }, "plugin-api-version": "2.3.0" } diff --git a/dokan.php b/dokan.php index 92986b57a9..0edcfbbc88 100755 --- a/dokan.php +++ b/dokan.php @@ -3,12 +3,12 @@ * Plugin Name: Dokan * Plugin URI: https://wordpress.org/plugins/dokan-lite/ * Description: An e-commerce marketplace plugin for WordPress. Powered by WooCommerce and weDevs. - * Version: 3.7.24 + * Version: 3.8.0 * Author: weDevs * Author URI: https://wedevs.com/ * Text Domain: dokan-lite * WC requires at least: 5.0.0 - * WC tested up to: 7.9.0 + * WC tested up to: 8.0.2 * Domain Path: /languages/ * License: GPL2 */ @@ -282,7 +282,7 @@ private function define( $name, $value ) { /** * Add High Performance Order Storage Support * - * @since DOKAN_SINCE + * @since 3.8.0 * * @return void */ diff --git a/includes/Admin/functions.php b/includes/Admin/functions.php index 3177edeb42..365752bf63 100644 --- a/includes/Admin/functions.php +++ b/includes/Admin/functions.php @@ -122,12 +122,12 @@ function dokan_admin_report_data( $group_by = 'day', $year = '', $start = '', $e * @param string $start * @param string $end * - * @deprecated DOKAN_SINCE since we are getting the report data from REST API (dokan/v1/report), we don't need this function anymore. + * @deprecated 3.8.0 since we are getting the report data from REST API (dokan/v1/report), we don't need this function anymore. * * @return array */ function dokan_admin_report( $group_by = 'day', $year = '', $start = '', $end = '' ) { - wc_deprecated_function( 'dokan_admin_report', 'DOKAN_SINCE' ); + wc_deprecated_function( 'dokan_admin_report', '3.8.0' ); global $wp_locale; @@ -372,12 +372,12 @@ function showTooltip(x, y, contents) { * @global object $wp_locale * * @global WPDB $wpdb - * @deprecated DOKAN_SINCE since we are getting the report data from REST API (dokan/v1/report), we don't need this function anymore. + * @deprecated 3.8.0 since we are getting the report data from REST API (dokan/v1/report), we don't need this function anymore. * * @return array */ function dokan_admin_report_by_seller( $chosen_seller_id = 0 ) { - wc_deprecated_function( 'dokan_admin_report_by_seller', 'DOKAN_SINCE' ); + wc_deprecated_function( 'dokan_admin_report_by_seller', '3.8.0' ); global $wpdb, $wp_locale; diff --git a/includes/Commission.php b/includes/Commission.php index fefd92f307..48430bf571 100644 --- a/includes/Commission.php +++ b/includes/Commission.php @@ -27,7 +27,7 @@ class Commission { /** * Order Line Item Id For Product * - * @since DOKAN_SINCE + * @since 3.8.0 * * @var int $order_item_id */ @@ -160,7 +160,7 @@ public function set_order_id( $id ) { /** * Set order line item id * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param int $item_id * @@ -184,7 +184,7 @@ public function get_order_id() { /** * Get order line item id * - * @since DOKAN_SINCE + * @since 3.8.0 * * @return int */ diff --git a/includes/FakeMailer.php b/includes/FakeMailer.php index 518c1979d6..47b182a80b 100644 --- a/includes/FakeMailer.php +++ b/includes/FakeMailer.php @@ -10,7 +10,7 @@ /** * Fake Mailer Class * - * @since DOKAN_SINCE Moved this class from includes/wc-functions.php file + * @since 3.8.0 Moved this class from includes/wc-functions.php file */ class FakeMailer { public function Send() { diff --git a/includes/Order/Admin/Hooks.php b/includes/Order/Admin/Hooks.php index 8e95f58d5e..da8ca2c0a9 100644 --- a/includes/Order/Admin/Hooks.php +++ b/includes/Order/Admin/Hooks.php @@ -16,13 +16,13 @@ /** * Order admin related hooks * - * @since DOKAN_SINCE moved functionality from includes/Admin/Hooks.php file + * @since 3.8.0 moved functionality from includes/Admin/Hooks.php file */ class Hooks { /** * Class constructor * - * @since DOKAN_SINCE + * @since 3.8.0 */ public function __construct() { // Load all actions and filters @@ -60,7 +60,7 @@ public function __construct() { /** * Remove child orders from WC reports * - * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file + * @since 3.8.0 Moved from includes/Admin/Hooks.php file * * @param array $query * @@ -75,8 +75,8 @@ public function admin_order_reports_remove_parents( $query ) { /** * Change the columns shown in admin. * - * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file - * @since DOKAN_SINCE Rewritten for HPOS + * @since 3.8.0 Moved from includes/Admin/Hooks.php file + * @since 3.8.0 Rewritten for HPOS * * @param array $existing_columns * @@ -101,8 +101,8 @@ public function admin_shop_order_edit_columns( $existing_columns ) { /** * Adds custom column on dokan admin shop order table * - * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file - * @since DOKAN_SINCE Rewritten for HPOS + * @since 3.8.0 Moved from includes/Admin/Hooks.php file + * @since 3.8.0 Rewritten for HPOS * * @param string $col * @param int|WC_Order $post_id @@ -165,8 +165,8 @@ public function shop_order_custom_columns( $col, $post_id ) { /** * Adds css classes on admin shop order table * - * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file - * @since DOKAN_SINCE Rewritten for HPOS + * @since 3.8.0 Moved from includes/Admin/Hooks.php file + * @since 3.8.0 Rewritten for HPOS * * @param string[] $classes An array of post class names. * @param string[] $class An array of additional class names added to the post. @@ -205,8 +205,8 @@ public function admin_shop_order_row_classes( $classes, $class, $post_id ) { /** * Show/hide sub order css/js * - * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file - * @since DOKAN_SINCE Added HPOS support + * @since 3.8.0 Moved from includes/Admin/Hooks.php file + * @since 3.8.0 Added HPOS support * * @return void */ @@ -356,7 +356,7 @@ function fix_row_css_styles() { * Change order item display meta key. * * @since DOKAN_LITE_SINCE - * @since DOKAN_SINCE Moved this method from Order/Hooks.php file + * @since 3.8.0 Moved this method from Order/Hooks.php file * * @param string $display_key * @@ -374,7 +374,7 @@ public function change_order_item_display_meta_key( $display_key ) { * Change order item display meta value. * * @since DOKAN_LITE_SINCE - * @since DOKAN_SINCE Moved this method from Order/Hooks.php file + * @since 3.8.0 Moved this method from Order/Hooks.php file * * @param string $display_value * @param object $meta @@ -398,8 +398,8 @@ public function change_order_item_display_meta_value( $display_value, $meta ) { /** * Delete sub orders when parent order is trashed * - * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file - * @since DOKAN_SINCE Rewritten for HPOS + * @since 3.8.0 Moved from includes/Admin/Hooks.php file + * @since 3.8.0 Rewritten for HPOS * * @param int $post_id */ @@ -422,8 +422,8 @@ public function admin_on_trash_order( $post_id ) { /** * Un-trash sub orders when parent orders are un-trashed * - * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file - * @since DOKAN_SINCE Rewritten for HPOS + * @since 3.8.0 Moved from includes/Admin/Hooks.php file + * @since 3.8.0 Rewritten for HPOS * * @param int $post_id * @@ -461,8 +461,8 @@ public function admin_on_untrash_order( $post_id ) { /** * Delete sub orders and from dokan sync table when a order is deleted * - * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file - * @since DOKAN_SINCE Rewritten for HPOS + * @since 3.8.0 Moved from includes/Admin/Hooks.php file + * @since 3.8.0 Rewritten for HPOS * * @param int $post_id * @@ -475,8 +475,8 @@ public function admin_on_delete_order( $post_id ) { /** * Delete sub orders and from dokan sync table when a order is deleted * - * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file - * @since DOKAN_SINCE Rewritten for HPOS + * @since 3.8.0 Moved from includes/Admin/Hooks.php file + * @since 3.8.0 Rewritten for HPOS * * @param int $post_id * @@ -493,8 +493,8 @@ public function admin_on_delete_order_post( $post_id ) { /** * Show a toggle button to toggle all the sub orders * - * @since DOKAN_SINCE Moved from includes/Admin/Hooks.php file - * @since DOKAN_SINCE Rewritten for HPOS + * @since 3.8.0 Moved from includes/Admin/Hooks.php file + * @since 3.8.0 Rewritten for HPOS * * @param string $typenow * diff --git a/includes/Order/Admin/Permissions.php b/includes/Order/Admin/Permissions.php index 461c7232a8..0e8f5efbed 100644 --- a/includes/Order/Admin/Permissions.php +++ b/includes/Order/Admin/Permissions.php @@ -10,13 +10,13 @@ /** * Handle Admin Order Permission Related Hooks * - * @since DOKAN_SINCE + * @since 3.8.0 */ class Permissions { /** * Class constructor * - * @since DOKAN_SINCE + * @since 3.8.0 */ public function __construct() { add_filter( 'map_meta_cap', [ $this, 'map_meta_caps' ], 12, 4 ); @@ -30,8 +30,8 @@ public function __construct() { /** * Dokan map meta cpas for vendors * - * @since DOKAN_SINCE moved this method from includes/functions.php file - * @since DOKAN_SINCE Added HPOS support + * @since 3.8.0 moved this method from includes/functions.php file + * @since 3.8.0 Added HPOS support * * @param array $caps * @param string $cap @@ -71,8 +71,8 @@ public function map_meta_caps( $caps, $cap, $user_id, $args ) { * Filter orders of current user * * @since 2.9.4 - * @since DOKAN_SINCE Moved this method from includes/functions.php - * @since DOKAN_SINCE Added HPOS Support + * @since 3.8.0 Moved this method from includes/functions.php + * @since 3.8.0 Added HPOS Support * * @param array $args * @param object $query @@ -113,7 +113,7 @@ public function filter_orders_for_current_vendor( $args, $query ) { * Revoke vendor access of changing order status in the backend if permission is not given * * @since 2.8.0 - * @since DOKAN_SINCE Moved this method from includes/functions.php file + * @since 3.8.0 Moved this method from includes/functions.php file * * @return void */ @@ -139,7 +139,7 @@ public function revoke_change_order_status() { * Revoke vendor access of changing order status in the backend if permission is not given * * @since 2.8.0 - * @since DOKAN_SINCE Moved this method from includes/functions.php + * @since 3.8.0 Moved this method from includes/functions.php * * @param array $columns * @@ -161,7 +161,7 @@ public function remove_action_column( $columns ) { * Revoke vendor access of changing order status in the backend if permission is not given * * @since 2.8.0 - * @since DOKAN_SINCE Moved this method form includes/functions.php file + * @since 3.8.0 Moved this method form includes/functions.php file * * @param array $actions * diff --git a/includes/Order/Controller.php b/includes/Order/Controller.php index bba16290a1..0ece5eeeb3 100644 --- a/includes/Order/Controller.php +++ b/includes/Order/Controller.php @@ -12,7 +12,7 @@ /** * Handle permission related hooks for Orders * - * @since DOKAN_SINCE + * @since 3.8.0 */ class Controller { use ChainableContainer; @@ -20,7 +20,7 @@ class Controller { /** * Class constructor * - * @since DOKAN_SINCE + * @since 3.8.0 */ public function __construct() { $this->init_classes(); diff --git a/includes/Order/EmailHooks.php b/includes/Order/EmailHooks.php index c966a14334..4f3c4a3776 100644 --- a/includes/Order/EmailHooks.php +++ b/includes/Order/EmailHooks.php @@ -13,13 +13,13 @@ /** * Order admin related hooks * - * @since DOKAN_SINCE moved functionality from includes/Admin/Hooks.php file + * @since 3.8.0 moved functionality from includes/Admin/Hooks.php file */ class EmailHooks { /** * Class constructor * - * @since DOKAN_SINCE + * @since 3.8.0 */ public function __construct() { add_action( 'woocommerce_order_status_pending_to_on-hold', [ $this, 'prevent_sending_multiple_email' ] ); @@ -38,7 +38,7 @@ public function __construct() { * Stop sending multiple email for an order * * @since 2.8.6 - * @since DOKAN_SINCE Moved this method from includes/functions.php file + * @since 3.8.0 Moved this method from includes/functions.php file * * @return void */ @@ -67,7 +67,7 @@ public function prevent_sending_multiple_email() { /** * Send email to the vendor/seller when cancel the order * - * @since DOKAN_SINCE Moved this method from includes/wc-functions.php file + * @since 3.8.0 Moved this method from includes/wc-functions.php file * * @param string $recipient * @param WC_Order $order @@ -96,7 +96,7 @@ public function send_email_for_order_cancellation( $recipient, $order ) { /** * Add vendor email on customers note mail replay to * - * @since DOKAN_SINCE Moved this method from includes/wc-functions.php file + * @since 3.8.0 Moved this method from includes/wc-functions.php file * * @param string $headers * @param string $id @@ -132,7 +132,7 @@ public function add_reply_to_vendor_email_on_wc_customer_note_mail( $headers, $i * remove those action hooks. That's why we are doing this from the phpmailer_init action * by returning a fake phpmailer class. * - * @since DOKAN_SINCE Moved this method from includes/wc-functions.php file + * @since 3.8.0 Moved this method from includes/wc-functions.php file * * @param object $phpmailer * diff --git a/includes/Order/Frontend/Hooks.php b/includes/Order/Frontend/Hooks.php index 730a6172d0..2b38204669 100644 --- a/includes/Order/Frontend/Hooks.php +++ b/includes/Order/Frontend/Hooks.php @@ -10,13 +10,13 @@ /** * Order Frontend Hooks * - * @since DOKAN_SINCE + * @since 3.8.0 */ class Hooks { /** * Class constructor * - * @since DOKAN_SINCE + * @since 3.8.0 */ public function __construct() { add_action( 'template_redirect', [ $this, 'bulk_order_status_change' ] ); @@ -26,7 +26,7 @@ public function __construct() { * Change bulk order status in vendor dashboard * * @since 2.8.3 - * @since DOKAN_SINCE Moved this method from includes/wc-functions.php file + * @since 3.8.0 Moved this method from includes/wc-functions.php file * * @return void */ diff --git a/includes/Order/Hooks.php b/includes/Order/Hooks.php index 22ff05458a..1de6fd63fb 100644 --- a/includes/Order/Hooks.php +++ b/includes/Order/Hooks.php @@ -133,7 +133,7 @@ public function on_order_status_change( $order_id, $old_status, $new_status, $or /** * If order status is set to refunded from vendor dashboard, enter remaining balance into vendor balance table. * - * @since DOKAN_SINCE Created this method from on_order_status_change() + * @since 3.8.0 Created this method from on_order_status_change() * * @param int $order_id * @param string $old_status diff --git a/includes/Order/Manager.php b/includes/Order/Manager.php index e4606f960b..a800683f34 100644 --- a/includes/Order/Manager.php +++ b/includes/Order/Manager.php @@ -13,7 +13,7 @@ * Order Management API * * @since 2.8 - * @since DOKAN_SINCE added HPOS support + * @since 3.8.0 added HPOS support */ class Manager { @@ -22,7 +22,7 @@ class Manager { * * @since 3.0.0 * @since 3.6.3 rewritten to include filters - * @since DOKAN_SINCE added HPOS support + * @since 3.8.0 added HPOS support * * @return WP_Error|int[]|WC_Order[] */ @@ -66,7 +66,7 @@ public function all( $args = [] ) { /** * Get backward compatibility args * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param array $args * @@ -272,7 +272,7 @@ public function get( $id ) { /** * Count orders for a seller * - * @since DOKAN_SINCE moved this function from functions.php file + * @since 3.8.0 moved this function from functions.php file * * @param int $seller_id * @@ -351,7 +351,7 @@ public function count_orders( $seller_id ) { /** * Check if an order with same id is exists in database * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param int|WC_Order $order_id * @@ -376,7 +376,7 @@ public function is_order_already_synced( $order_id ) { /** * Check if order is belonged to given seller * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param int $seller_id * @param int $order_id @@ -396,7 +396,7 @@ public function is_seller_has_order( $seller_id, $order_id ) { /** * Get order of current logged-in users or by given customer id * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param array $args * @@ -420,7 +420,7 @@ public function get_customer_orders( $args ) { /** * Get Customer Order IDs by Seller * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param int $customer_id * @param int $seller_id @@ -464,7 +464,7 @@ public function get_child_orders( $parent_order ) { /** * Delete dokan order * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param int $order_id * @param int|null $seller_id @@ -533,7 +533,7 @@ public function delete_seller_order( $order_id, $seller_id = null ) { /** * Delete dokan order with suborders * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param int $order_id * @@ -863,7 +863,7 @@ function ( $item ) { * to each seller dashboard. That's why we need to divide the main order to * some sub-orders based on the number of sellers. * - * @since DOKAN_SINCE added $force_create parameter + * @since 3.8.0 added $force_create parameter * * @param bool $force_create if this parameter is true, if suborder is already created, they'd be deleted first * diff --git a/includes/Order/MiscHooks.php b/includes/Order/MiscHooks.php index 28d387d7dd..fa67346365 100644 --- a/includes/Order/MiscHooks.php +++ b/includes/Order/MiscHooks.php @@ -13,13 +13,13 @@ /** * Order admin related hooks * - * @since DOKAN_SINCE moved functionality from includes/Admin/Hooks.php file + * @since 3.8.0 moved functionality from includes/Admin/Hooks.php file */ class MiscHooks { /** * Class constructor * - * @since DOKAN_SINCE + * @since 3.8.0 */ public function __construct() { //Wc remove child order from wc_order_product_lookup & trim child order from posts for analytics @@ -36,7 +36,7 @@ public function __construct() { /** * Delete_child_order_from_wc_order_product * - * @since DOKAN_SINCE Moved this method from Order/Hooks.php file + * @since 3.8.0 Moved this method from Order/Hooks.php file * * @param \ActionScheduler_Action $args * @@ -55,7 +55,7 @@ public function delete_child_order_from_wc_order_product( $args ) { /** * Trim child order if parent exist from wc_order_product_lookup for analytics order * - * @since DOKAN_SINCE Moved this method from Order/Hooks.php file + * @since 3.8.0 Moved this method from Order/Hooks.php file * * @param WC_Order $orders * @@ -74,7 +74,7 @@ public function trim_child_order_for_analytics_order( $orders ) { /** * Remove customer sensitive information while exporting order * - * @since DOKAN_SINCE Moved this method from Order/Hooks.php file + * @since 3.8.0 Moved this method from Order/Hooks.php file * * @param array $headers * @@ -93,7 +93,7 @@ public function hide_customer_info_from_vendor_order_export( $headers ) { /** * Add vendor info in restful wc_order * - * @since DOKAN_SINCE Moved this method from includes/functions.php file + * @since 3.8.0 Moved this method from includes/functions.php file * * @param WP_REST_Response $response * @@ -156,7 +156,7 @@ public function add_vendor_info_in_rest_order( $response ) { /** * Modify order counts for vendor. * - * @since DOKAN_SINCE Moved this method from includes/wc-functions.php file + * @since 3.8.0 Moved this method from includes/wc-functions.php file * * @param object $counts * diff --git a/includes/Order/OrderCache.php b/includes/Order/OrderCache.php index f2685dd1c8..8b8c693070 100644 --- a/includes/Order/OrderCache.php +++ b/includes/Order/OrderCache.php @@ -110,7 +110,7 @@ public function reset_cache_before_deleting_order( $order_id ) { * This method will delete vendors best-selling product cache after a new order has been made * * @since 3.2.11 - * @since DOKAN_SINCE Moved this function from includes/wc-functions.php + * @since 3.8.0 Moved this function from includes/wc-functions.php * * @param int $post_id */ diff --git a/includes/Order/functions.php b/includes/Order/functions.php index b22d1b8c36..92d9323d75 100644 --- a/includes/Order/functions.php +++ b/includes/Order/functions.php @@ -7,12 +7,12 @@ * * @param int $order_id * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return float|array|WP_Error */ function dokan_get_seller_amount_from_order( $order_id, $get_array = false ) { - wc_deprecated_function( 'dokan_get_seller_amount_from_order', 'DOKAN_SINCE', 'dokan()->commission->get_earning_by_order()' ); + wc_deprecated_function( 'dokan_get_seller_amount_from_order', '3.8.0', 'dokan()->commission->get_earning_by_order()' ); $order = wc_get_order( $order_id ); if ( ! $order ) { @@ -56,12 +56,12 @@ function dokan_get_seller_amount_from_order( $order_id, $get_array = false ) { * @param int $seller_id * @param array $args * - * @deprecated DOKAN_SINCE since this is an alias only. + * @deprecated 3.8.0 since this is an alias only. * * @return WP_Error|int[]|WC_Order[] */ function dokan_get_seller_orders( $seller_id, $args ) { - wc_deprecated_function( 'dokan_get_seller_orders', 'DOKAN_SINCE', 'dokan()->order->all()' ); + wc_deprecated_function( 'dokan_get_seller_orders', '3.8.0', 'dokan()->order->all()' ); $args['seller_id'] = $seller_id; @@ -82,12 +82,12 @@ function dokan_get_seller_orders( $seller_id, $args ) { * @param int|false $seller_id * @param string $status * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return WP_Error|WC_Order[] */ function dokan_get_seller_orders_by_date( $start_date, $end_date, $seller_id = false, $status = 'all' ) { - wc_deprecated_function( 'dokan_get_seller_orders_by_date', 'DOKAN_SINCE', 'dokan()->order->all()' ); + wc_deprecated_function( 'dokan_get_seller_orders_by_date', '3.8.0', 'dokan()->order->all()' ); // format start and end date $start_date = dokan_current_datetime()->modify( $start_date ); @@ -111,12 +111,12 @@ function dokan_get_seller_orders_by_date( $start_date, $end_date, $seller_id = f * * @param array $args * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return int */ function dokan_get_seller_orders_number( $args = [] ) { - wc_deprecated_function( 'dokan_get_seller_orders_number', 'DOKAN_SINCE', 'dokan()->order->all()' ); + wc_deprecated_function( 'dokan_get_seller_orders_number', '3.8.0', 'dokan()->order->all()' ); $args['return'] = 'count'; @@ -162,7 +162,7 @@ function dokan_is_seller_has_order( $seller_id, $order_id ) { /** * Count orders for a seller * - * @since DOKAN_SINCE moved the functionality of this function to Order Manager class + * @since 3.8.0 moved the functionality of this function to Order Manager class * * @param int $seller_id * @@ -177,12 +177,12 @@ function dokan_count_orders( $seller_id ) { * * @param int $order_id * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return void */ function dokan_delete_sync_order( $order_id ) { - wc_deprecated_function( 'dokan_delete_sync_order', 'DOKAN_SINCE', 'dokan()->order->delete_seller_order()' ); + wc_deprecated_function( 'dokan_delete_sync_order', '3.8.0', 'dokan()->order->delete_seller_order()' ); dokan()->order->delete_seller_order( $order_id ); } @@ -195,12 +195,12 @@ function dokan_delete_sync_order( $order_id ) { * @param int $order_id * @param int $seller_id * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return void */ function dokan_delete_sync_duplicate_order( $order_id, $seller_id ) { - wc_deprecated_function( 'dokan_delete_sync_duplicate_order', 'DOKAN_SINCE', 'dokan()->order->delete_seller_order()' ); + wc_deprecated_function( 'dokan_delete_sync_duplicate_order', '3.8.0', 'dokan()->order->delete_seller_order()' ); dokan()->order->delete_seller_order( $order_id, $seller_id ); } @@ -491,12 +491,12 @@ function dokan_is_sub_order( $order ) { * * @since 2.4.3 * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return int Order_count */ function dokan_total_orders() { - wc_deprecated_function( 'dokan_total_orders', 'DOKAN_SINCE', 'dokan()->order->all()' ); + wc_deprecated_function( 'dokan_total_orders', '3.8.0', 'dokan()->order->all()' ); global $wpdb; @@ -605,12 +605,12 @@ function dokan_get_admin_commission_by( $order, $context ) { * @param int $customer_id * @param int $seller_id * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return array|null on failure */ function dokan_get_customer_orders_by_seller( $customer_id, $seller_id ) { - wc_deprecated_function( 'dokan_get_customer_orders_by_seller', 'DOKAN_SINCE', 'dokan()->order->get_customer_order_ids_by_seller()' ); + wc_deprecated_function( 'dokan_get_customer_orders_by_seller', '3.8.0', 'dokan()->order->get_customer_order_ids_by_seller()' ); return dokan()->order->get_customer_order_ids_by_seller( $customer_id, $seller_id ); } @@ -815,7 +815,7 @@ function dokan_order_csv_export( $orders, $file = null ) { * * @param int $order_id * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return int */ @@ -830,12 +830,12 @@ function dokan_get_seller_id_by_order_id( $order_id ) { * * @param int $order_id * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return boolean */ function dokan_is_order_already_exists( $order_id ) { - wc_deprecated_function( 'dokan_is_order_already_exists', 'DOKAN_SINCE', 'dokan()->order->is_order_already_synced()' ); + wc_deprecated_function( 'dokan_is_order_already_exists', '3.8.0', 'dokan()->order->is_order_already_synced()' ); return dokan()->order->is_order_already_synced( $order_id ); } @@ -844,7 +844,7 @@ function dokan_is_order_already_exists( $order_id ) { * Customer has order from current seller * * @since 2.8.6 - * @since DOKAN_SINCE moved this function from includes/functions.php + * @since 3.8.0 moved this function from includes/functions.php * * @param int $customer_id * @param int|null $seller_id @@ -866,7 +866,7 @@ function dokan_customer_has_order_from_this_seller( $customer_id, $seller_id = n /** * Get total sales amount of a seller * - * @since DOKAN_SINCE moved from includes/functions.php + * @since 3.8.0 moved from includes/functions.php * * @param int $seller_id * @@ -888,17 +888,17 @@ function dokan_author_total_sales( $seller_id ) { * Get Seller's net Earnings from a order * * @since 2.5.2 - * @since DOKAN_SINCE moved from includes/functions.php + * @since 3.8.0 moved from includes/functions.php * * @param WC_ORDER $order * @param int $seller_id * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return int $earned */ function dokan_get_seller_earnings_by_order( $order, $seller_id ) { - wc_deprecated_function( 'dokan_get_seller_earnings_by_order', 'DOKAN_SINCE', 'dokan()->commission->get_earning_by_order( $order, \'seller\' )' ); + wc_deprecated_function( 'dokan_get_seller_earnings_by_order', '3.8.0', 'dokan()->commission->get_earning_by_order( $order, \'seller\' )' ); $earned = dokan()->commission->get_earning_by_order( $order, 'seller' ); return apply_filters( 'dokan_get_seller_earnings_by_order', $earned, $order, $seller_id ); @@ -909,7 +909,7 @@ function dokan_get_seller_earnings_by_order( $order, $seller_id ) { * Dokan get vendor order details by order ID * * @since 3.2.11 rewritten entire function - * @since DOKAN_SINCE Moved this function from includes/functions.php + * @since 3.8.0 Moved this function from includes/functions.php * * @param int $order_id * @param int|null $vendor_id will remove this parameter in future @@ -940,7 +940,7 @@ function dokan_get_vendor_order_details( $order_id, $vendor_id = null ) { * Updates bulk orders status by orders ids. * * @since 3.7.10 - * @since DOKAN_SINCE Moved this method from includes/functions.php file + * @since 3.8.0 Moved this method from includes/functions.php file * * @param array $postdata * diff --git a/includes/ProductCategory/ProductCategoryCache.php b/includes/ProductCategory/ProductCategoryCache.php index ae81594735..100307f4d6 100644 --- a/includes/ProductCategory/ProductCategoryCache.php +++ b/includes/ProductCategory/ProductCategoryCache.php @@ -48,7 +48,7 @@ public function clear_multistep_category_cache() { * This method will delete store category cache after a category is updated * * @since 3.2.10 - * @since DOKAN_SINCE Moved this method from includes/wc-functions.php file + * @since 3.8.0 Moved this method from includes/wc-functions.php file * * @param int $term_id */ diff --git a/includes/Upgrade/Upgrades/V_1_2.php b/includes/Upgrade/Upgrades/V_1_2.php index 3c4177afe6..816e39627b 100644 --- a/includes/Upgrade/Upgrades/V_1_2.php +++ b/includes/Upgrade/Upgrades/V_1_2.php @@ -12,7 +12,7 @@ public static function generate_sync_table() { /** * Generate dokan sync table * - * @since DOKAN_SINCE moved from includes/functions.php file + * @since 3.8.0 moved from includes/functions.php file * * @deprecated since 2.4.3 */ diff --git a/includes/Utilities/OrderUtil.php b/includes/Utilities/OrderUtil.php index 7bb2df1990..32cbb9315b 100644 --- a/includes/Utilities/OrderUtil.php +++ b/includes/Utilities/OrderUtil.php @@ -13,7 +13,7 @@ class OrderUtil { * This method can be removed, and we can directly use WC OrderUtil::custom_orders_table_usage_is_enabled method in future * if we set the minimum wc version requirements to 8.0 * - * @since DOKAN_SINCE + * @since 3.8.0 * * @return bool */ @@ -28,7 +28,7 @@ public static function is_hpos_enabled(): bool { /** * Checks if posts and order custom table sync are enabled, and there are no pending orders. * - * @since DOKAN_SINCE + * @since 3.8.0 * * @return bool */ @@ -39,7 +39,7 @@ public static function is_custom_order_tables_in_sync(): bool { /** * Helper function to get whether the order cache should be used or not. * - * @since DOKAN_SINCE + * @since 3.8.0 * * @return bool True if the order cache should be used, false otherwise. */ @@ -50,7 +50,7 @@ public static function is_order_cache_usages_enabled(): bool { /** * Helper function to initialize the global $theorder object, mostly used during order meta boxes rendering. * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param WC_Order|WP_Post $post_or_order_object Post or order object. * @@ -77,7 +77,7 @@ public static function init_theorder_object( $post_or_order_object ) { /** * Helper function to id from a post or order object. * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param WP_Post|WC_Order $post_or_order_object WP_Post/WC_Order object to get ID for. * @@ -102,7 +102,7 @@ public static function get_post_or_order_id( $post_or_order_object ): int { * This method can be removed, and we can directly use WC OrderUtil::is_order method in future * if we set the minimum wc version requirements to 8.0 * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param int|WP_Post|WC_Order $order_id Order ID, post object or order object. * @param string[] $types Types to match against. @@ -124,7 +124,7 @@ public static function is_order( $order_id, $types = [] ): bool { * This method can be removed, and we can directly use WC OrderUtil::get_order_admin_screen method in future * if we set minimum wc version requirements to 8.0 * - * @since DOKAN_SINCE + * @since 3.8.0 * * @return string */ @@ -137,7 +137,7 @@ public static function get_order_admin_screen(): string { /** * Get admin order list page url * - * @since DOKAN_SINCE + * @since 3.8.0 * * @return string */ @@ -150,7 +150,7 @@ public static function get_admin_order_list_url(): string { /** * Helper method to generate admin URL for new order. * - * @since DOKAN_SINCE + * @since 3.8.0 * * @return string Link for new order. */ @@ -164,7 +164,7 @@ public static function get_order_admin_new_url(): string { /** * Get admin order edit page url * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param int $order_id * @@ -181,7 +181,7 @@ public static function get_admin_order_edit_url( $order_id = 0 ): string { /** * Get the custom orders table name for wc. * - * @since DOKAN_SINCE + * @since 3.8.0 * * @return string */ @@ -197,7 +197,7 @@ public static function get_order_table_name() { /** * Get the name of the database table that's currently in use for orders. * - * @since DOKAN_SINCE + * @since 3.8.0 * * @return string */ diff --git a/includes/functions-rest-api.php b/includes/functions-rest-api.php index e0f3ae7504..ea846b4c45 100644 --- a/includes/functions-rest-api.php +++ b/includes/functions-rest-api.php @@ -3,7 +3,7 @@ /** * This method will verify per page item value, will be used only with rest api validate callback * - * @since DOKAN_SINCE + * @since 3.8.0 * * @param $value * @param $request WP_REST_Request diff --git a/includes/functions.php b/includes/functions.php index c495fcf7ea..a92ce7e956 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -3818,12 +3818,12 @@ function dokan_get_interval_between_dates( $start_date, $end_date, $group_by = ' * @param string $time * @param boolean $date_only * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return string */ function dokan_date_time_format( $time, $date_only = false ) { - wc_deprecated_function( 'dokan_date_time_format', 'DOKAN_SINCE', 'dokan_format_datetime()' ); + wc_deprecated_function( 'dokan_date_time_format', '3.8.0', 'dokan_format_datetime()' ); $format = apply_filters( 'dokan_date_time_format', wc_date_format() . ' ' . wc_time_format() ); if ( $date_only ) { diff --git a/includes/wc-functions.php b/includes/wc-functions.php index 01aad2efe9..4fc0c653e9 100755 --- a/includes/wc-functions.php +++ b/includes/wc-functions.php @@ -419,12 +419,12 @@ function ( $value ) { * @param int $variation_id optional product variation identifier * @param array $downloadable_files newly set files * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return void */ function dokan_process_product_file_download_paths( int $product_id, int $variation_id, array $downloadable_files ) { - wc_deprecated_function( 'dokan_process_product_file_download_paths', 'DOKAN_SINCE' ); + wc_deprecated_function( 'dokan_process_product_file_download_paths', '3.8.0' ); global $wpdb; if ( $variation_id ) { @@ -474,12 +474,12 @@ function dokan_process_product_file_download_paths( int $product_id, int $variat * * @param int $order_id * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return int */ function dokan_sub_order_get_total_coupon( int $order_id ) : int { - wc_deprecated_function( 'dokan_sub_order_get_total_coupon', 'DOKAN_SINCE' ); + wc_deprecated_function( 'dokan_sub_order_get_total_coupon', '3.8.0' ); global $wpdb; $result = $wpdb->get_var( diff --git a/includes/wc-legacy-functions.php b/includes/wc-legacy-functions.php index aba875527d..9910c84eb6 100644 --- a/includes/wc-legacy-functions.php +++ b/includes/wc-legacy-functions.php @@ -9,7 +9,7 @@ * * @param int $parent_order_id * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return void */ @@ -24,7 +24,7 @@ function dokan_create_sub_order( $parent_order_id ) { * @param int $seller_id * @param array $seller_products * - * @deprecated DOKAN_SINCE + * @deprecated 3.8.0 * * @return void */ diff --git a/languages/dokan-lite.pot b/languages/dokan-lite.pot index 05635d8172..fe6c7afec4 100644 --- a/languages/dokan-lite.pot +++ b/languages/dokan-lite.pot @@ -1,16 +1,16 @@ # Copyright (c) 2023 weDevs Pte. Ltd. All Rights Reserved. msgid "" msgstr "" -"Project-Id-Version: Dokan 3.7.24\n" +"Project-Id-Version: Dokan 3.8.0\n" "Report-Msgid-Bugs-To: https://wedevs.com/contact\n" "Last-Translator: support@wedevs.com\n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2023-07-25T05:38:42+00:00\n" +"POT-Creation-Date: 2023-08-17T14:10:33+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"X-Generator: WP-CLI 2.7.1\n" +"X-Generator: WP-CLI 2.8.1\n" "X-Domain: dokan-lite\n" #. Plugin Name of the plugin @@ -38,15 +38,15 @@ msgid "https://wedevs.com/" msgstr "" #. translators: 1: Required PHP Version 2: Running php version -#: dokan.php:194 +#: dokan.php:199 msgid "The Minimum PHP Version Requirement for Dokan is %1$s. You are Running PHP %2$s" msgstr "" -#: dokan.php:489 +#: dokan.php:507 msgid "Get Pro" msgstr "" -#: dokan.php:492 +#: dokan.php:510 #: includes/Admin/AdminBar.php:81 #: includes/Admin/Menu.php:68 #: includes/Dashboard/Templates/Settings.php:60 @@ -56,7 +56,7 @@ msgstr "" msgid "Settings" msgstr "" -#: dokan.php:493 +#: dokan.php:511 #: templates/admin-header.php:63 #: assets/js/vue-admin.js:2 msgid "Documentation" @@ -131,7 +131,7 @@ msgstr "" #: includes/Admin/Menu.php:34 #: includes/Admin/Menu.php:47 #: includes/Admin/SetupWizard.php:160 -#: includes/functions.php:3007 +#: includes/functions.php:2790 #: includes/template-tags.php:417 #: templates/withdraw/header.php:11 msgid "Withdraw" @@ -154,98 +154,66 @@ msgstr "" msgid "Visit Vendor Dashboard" msgstr "" -#: includes/Admin/functions.php:191 -#: includes/Admin/functions.php:458 +#: includes/Admin/functions.php:208 +#: includes/Admin/functions.php:475 #: includes/REST/AdminReportController.php:140 msgid "Total Sales" msgstr "" -#: includes/Admin/functions.php:198 -#: includes/Admin/functions.php:465 +#: includes/Admin/functions.php:215 +#: includes/Admin/functions.php:482 msgid "Total: " msgstr "" -#: includes/Admin/functions.php:201 -#: includes/Admin/functions.php:468 +#: includes/Admin/functions.php:218 +#: includes/Admin/functions.php:485 #: includes/reports.php:367 #: includes/REST/AdminReportController.php:148 msgid "Number of orders" msgstr "" -#: includes/Admin/functions.php:208 -#: includes/Admin/functions.php:475 +#: includes/Admin/functions.php:225 +#: includes/Admin/functions.php:492 msgid "sales" msgstr "" -#: includes/Admin/functions.php:211 -#: includes/Admin/functions.php:478 +#: includes/Admin/functions.php:228 +#: includes/Admin/functions.php:495 #: includes/REST/AdminReportController.php:155 msgid "Commision" msgstr "" -#: includes/Admin/functions.php:218 -#: includes/Admin/functions.php:485 +#: includes/Admin/functions.php:235 +#: includes/Admin/functions.php:502 msgid "Commision: " msgstr "" -#: includes/Admin/Hooks.php:67 -#: includes/Admin/Hooks.php:73 -#: includes/Admin/Hooks.php:368 +#: includes/Admin/Hooks.php:66 #: includes/Admin/Settings.php:495 #: includes/Admin/Settings.php:506 #: includes/Admin/Settings.php:517 #: includes/Admin/SetupWizard.php:361 #: includes/Install/Installer.php:142 -#: includes/Order/Hooks.php:77 +#: includes/Order/Admin/Hooks.php:92 +#: includes/Order/Admin/Hooks.php:367 #: includes/wc-template.php:18 -#: includes/wc-template.php:169 -#: includes/wc-template.php:316 -#: templates/my-orders.php:35 +#: includes/wc-template.php:162 +#: includes/wc-template.php:309 +#: templates/my-orders.php:29 #: assets/js/vue-admin.js:2 msgid "Vendor" msgstr "" -#: includes/Admin/Hooks.php:68 -#: assets/js/vue-admin.js:2 -msgid "Actions" -msgstr "" - -#: includes/Admin/Hooks.php:69 -#: includes/Admin/Hooks.php:74 -msgid "Sub Order" -msgstr "" - -#: includes/Admin/Hooks.php:127 -msgid " Sub Order of" -msgstr "" - -#: includes/Admin/Hooks.php:135 -msgid "Show Sub-Orders" -msgstr "" - -#: includes/Admin/Hooks.php:135 -msgid "Hide Sub-Orders" -msgstr "" - -#: includes/Admin/Hooks.php:146 -#: assets/js/vue-admin.js:2 -msgid "(no name)" -msgstr "" - -#: includes/Admin/Hooks.php:339 -msgid "Toggle Sub-orders" -msgstr "" - -#: includes/Admin/Hooks.php:395 +#: includes/Admin/Hooks.php:93 #: assets/js/vue-admin.js:2 msgid "Select vendor" msgstr "" -#: includes/Admin/Hooks.php:401 +#: includes/Admin/Hooks.php:99 msgid "You can search vendors and assign them." msgstr "" -#: includes/Admin/Hooks.php:414 +#: includes/Admin/Hooks.php:112 msgid "Unauthorized operation" msgstr "" @@ -574,7 +542,7 @@ msgstr "" #: includes/Admin/Settings.php:378 #: includes/Admin/SetupWizard.php:544 #: includes/Dashboard/Templates/Dashboard.php:96 -#: includes/Order/functions.php:443 +#: includes/Order/functions.php:416 #: templates/dashboard/orders-widget.php:25 msgid "Completed" msgstr "" @@ -582,14 +550,14 @@ msgstr "" #: includes/Admin/Settings.php:379 #: includes/Admin/SetupWizard.php:551 #: includes/Dashboard/Templates/Dashboard.php:106 -#: includes/Order/functions.php:455 +#: includes/Order/functions.php:431 #: templates/dashboard/orders-widget.php:35 -#: templates/orders/listing.php:146 +#: templates/orders/listing.php:132 msgid "Processing" msgstr "" #: includes/Admin/Settings.php:380 -#: includes/Order/functions.php:451 +#: includes/Order/functions.php:426 msgid "On-hold" msgstr "" @@ -606,7 +574,7 @@ msgid "Admin Area Access" msgstr "" #: includes/Admin/Settings.php:395 -msgid "Disallow vendors from accessing the wp-admin dashboard area" +msgid "Prevent vendors from accessing the wp-admin dashboard area. If HPOS feature is enabled, admin access will be blocked regardless of this setting." msgstr "" #: includes/Admin/Settings.php:401 @@ -1061,7 +1029,7 @@ msgid "Select a page to show your privacy policy" msgstr "" #: includes/Admin/Settings.php:810 -#: includes/functions.php:3643 +#: includes/functions.php:3232 msgid "Your personal data will be used to support your experience throughout this website, to manage access to your account, and for other purposes described in our [dokan_privacy_policy]" msgstr "" @@ -1384,14 +1352,14 @@ msgstr "" #: includes/Admin/UserProfile.php:38 #: includes/Ajax.php:142 -#: includes/Assets.php:585 +#: includes/Assets.php:586 #: assets/js/vue-admin.js:2 #: assets/js/vue-bootstrap.js:2 msgid "Available" msgstr "" #: includes/Admin/UserProfile.php:39 -#: includes/Assets.php:586 +#: includes/Assets.php:587 #: assets/js/vue-admin.js:2 #: assets/js/vue-bootstrap.js:2 msgid "Not Available" @@ -1629,12 +1597,12 @@ msgid "reCAPTCHA verification failed!" msgstr "" #: includes/Ajax.php:359 -#: includes/REST/StoreController.php:841 +#: includes/REST/StoreController.php:831 msgid "Email sent successfully!" msgstr "" #: includes/Ajax.php:418 -#: templates/orders/details.php:298 +#: templates/orders/details.php:283 msgid "Delete note" msgstr "" @@ -1685,23 +1653,23 @@ msgstr "" msgid "id param is required" msgstr "" -#: includes/Assets.php:148 +#: includes/Assets.php:149 msgid "Could not find any vendor." msgstr "" -#: includes/Assets.php:149 +#: includes/Assets.php:150 msgid "Searching vendors" msgstr "" -#: includes/Assets.php:150 +#: includes/Assets.php:151 msgid "Search vendors" msgstr "" -#: includes/Assets.php:151 +#: includes/Assets.php:152 msgid "Are you sure ?" msgstr "" -#: includes/Assets.php:588 +#: includes/Assets.php:589 #: includes/Product/functions.php:504 #: templates/products/products-listing.php:102 #: assets/js/dokan-promo-notice.js:2 @@ -1710,76 +1678,76 @@ msgstr "" msgid "Are you sure?" msgstr "" -#: includes/Assets.php:589 +#: includes/Assets.php:590 msgid "Something went wrong. Please try again." msgstr "" -#: includes/Assets.php:597 +#: includes/Assets.php:598 msgid "Are you sure you want to revoke access to this download?" msgstr "" -#: includes/Assets.php:598 +#: includes/Assets.php:599 msgid "Could not grant access - the user may already have permission for this file or billing email is not set. Ensure the billing email is set, and the order has been saved." msgstr "" -#: includes/Assets.php:715 +#: includes/Assets.php:716 msgctxt "time constant" msgid "am" msgstr "" -#: includes/Assets.php:716 +#: includes/Assets.php:717 msgctxt "time constant" msgid "pm" msgstr "" -#: includes/Assets.php:717 +#: includes/Assets.php:718 msgctxt "time constant" msgid "AM" msgstr "" -#: includes/Assets.php:718 +#: includes/Assets.php:719 msgctxt "time constant" msgid "PM" msgstr "" -#: includes/Assets.php:719 +#: includes/Assets.php:720 msgctxt "time constant" msgid "hr" msgstr "" -#: includes/Assets.php:720 +#: includes/Assets.php:721 msgctxt "time constant" msgid "hrs" msgstr "" -#: includes/Assets.php:721 +#: includes/Assets.php:722 msgctxt "time constant" msgid "mins" msgstr "" -#: includes/Assets.php:724 +#: includes/Assets.php:725 #: templates/products/edit-product-single.php:271 #: templates/products/new-product.php:252 #: templates/products/tmpl-add-product-popup.php:88 msgid "To" msgstr "" -#: includes/Assets.php:726 +#: includes/Assets.php:727 #: templates/products/edit-product-single.php:264 #: templates/products/new-product.php:245 #: templates/products/tmpl-add-product-popup.php:81 msgid "From" msgstr "" -#: includes/Assets.php:727 +#: includes/Assets.php:728 msgid " - " msgstr "" -#: includes/Assets.php:728 +#: includes/Assets.php:729 msgid "W" msgstr "" -#: includes/Assets.php:729 +#: includes/Assets.php:730 #: templates/orders/listing.php:20 #: templates/products/products-listing.php:101 #: templates/store-lists-filter.php:87 @@ -1787,386 +1755,386 @@ msgstr "" msgid "Apply" msgstr "" -#: includes/Assets.php:730 +#: includes/Assets.php:731 #: assets/js/vue-admin.js:2 msgid "Clear" msgstr "" -#: includes/Assets.php:731 +#: includes/Assets.php:732 #: includes/Withdraw/Hooks.php:46 msgid "Custom" msgstr "" -#: includes/Assets.php:733 +#: includes/Assets.php:734 msgid "Su" msgstr "" -#: includes/Assets.php:734 +#: includes/Assets.php:735 msgid "Mo" msgstr "" -#: includes/Assets.php:735 +#: includes/Assets.php:736 msgid "Tu" msgstr "" -#: includes/Assets.php:736 +#: includes/Assets.php:737 msgid "We" msgstr "" -#: includes/Assets.php:737 +#: includes/Assets.php:738 msgid "Th" msgstr "" -#: includes/Assets.php:738 +#: includes/Assets.php:739 msgid "Fr" msgstr "" -#: includes/Assets.php:739 +#: includes/Assets.php:740 msgid "Sa" msgstr "" -#: includes/Assets.php:742 +#: includes/Assets.php:743 msgid "January" msgstr "" -#: includes/Assets.php:743 +#: includes/Assets.php:744 msgid "February" msgstr "" -#: includes/Assets.php:744 +#: includes/Assets.php:745 msgid "March" msgstr "" -#: includes/Assets.php:745 +#: includes/Assets.php:746 msgid "April" msgstr "" -#: includes/Assets.php:746 +#: includes/Assets.php:747 msgid "May" msgstr "" -#: includes/Assets.php:747 +#: includes/Assets.php:748 msgid "June" msgstr "" -#: includes/Assets.php:748 +#: includes/Assets.php:749 msgid "July" msgstr "" -#: includes/Assets.php:749 +#: includes/Assets.php:750 msgid "August" msgstr "" -#: includes/Assets.php:750 +#: includes/Assets.php:751 msgid "September" msgstr "" -#: includes/Assets.php:751 +#: includes/Assets.php:752 msgid "October" msgstr "" -#: includes/Assets.php:752 +#: includes/Assets.php:753 msgid "November" msgstr "" -#: includes/Assets.php:753 +#: includes/Assets.php:754 msgid "December" msgstr "" -#: includes/Assets.php:769 +#: includes/Assets.php:770 msgid "This field is required" msgstr "" -#: includes/Assets.php:770 +#: includes/Assets.php:771 msgid "Please fix this field." msgstr "" -#: includes/Assets.php:771 +#: includes/Assets.php:772 msgid "Please enter a valid email address." msgstr "" -#: includes/Assets.php:772 +#: includes/Assets.php:773 msgid "Please enter a valid URL." msgstr "" -#: includes/Assets.php:773 +#: includes/Assets.php:774 msgid "Please enter a valid date." msgstr "" -#: includes/Assets.php:774 +#: includes/Assets.php:775 msgid "Please enter a valid date (ISO)." msgstr "" -#: includes/Assets.php:775 +#: includes/Assets.php:776 msgid "Please enter a valid number." msgstr "" -#: includes/Assets.php:776 +#: includes/Assets.php:777 msgid "Please enter only digits." msgstr "" -#: includes/Assets.php:777 +#: includes/Assets.php:778 msgid "Please enter a valid credit card number." msgstr "" -#: includes/Assets.php:778 +#: includes/Assets.php:779 msgid "Please enter the same value again." msgstr "" -#: includes/Assets.php:779 +#: includes/Assets.php:780 msgid "Please enter no more than {0} characters." msgstr "" -#: includes/Assets.php:780 +#: includes/Assets.php:781 msgid "Please enter at least {0} characters." msgstr "" -#: includes/Assets.php:781 +#: includes/Assets.php:782 msgid "Please enter a value between {0} and {1} characters long." msgstr "" -#: includes/Assets.php:782 +#: includes/Assets.php:783 msgid "Please enter a value between {0} and {1}." msgstr "" -#: includes/Assets.php:783 +#: includes/Assets.php:784 msgid "Please enter a value less than or equal to {0}." msgstr "" -#: includes/Assets.php:784 +#: includes/Assets.php:785 msgid "Please enter a value greater than or equal to {0}." msgstr "" -#: includes/Assets.php:945 +#: includes/Assets.php:946 msgid "Upload featured image" msgstr "" -#: includes/Assets.php:946 +#: includes/Assets.php:947 msgid "Choose a file" msgstr "" -#: includes/Assets.php:947 +#: includes/Assets.php:948 msgid "Add Images to Product Gallery" msgstr "" -#: includes/Assets.php:948 +#: includes/Assets.php:949 msgid "Set featured image" msgstr "" -#: includes/Assets.php:949 +#: includes/Assets.php:950 #: includes/woo-views/html-product-download.php:8 msgid "Insert file URL" msgstr "" -#: includes/Assets.php:950 +#: includes/Assets.php:951 msgid "Add to gallery" msgstr "" -#: includes/Assets.php:951 +#: includes/Assets.php:952 msgid "Sorry, this attribute option already exists, Try a different one." msgstr "" -#: includes/Assets.php:952 +#: includes/Assets.php:953 msgid "Warning! This product will not have any variations if this option is not checked." msgstr "" -#: includes/Assets.php:953 +#: includes/Assets.php:954 msgid "Enter a name for the new attribute term:" msgstr "" -#: includes/Assets.php:954 +#: includes/Assets.php:955 msgid "Remove this attribute?" msgstr "" #. translators: %d: max linked variation. -#: includes/Assets.php:963 +#: includes/Assets.php:964 msgid "Are you sure you want to link all variations? This will create a new variation for each and every possible combination of variation attributes (max %d per run)." msgstr "" -#: includes/Assets.php:964 +#: includes/Assets.php:965 msgid "Enter a value" msgstr "" -#: includes/Assets.php:965 +#: includes/Assets.php:966 msgid "Variation menu order (determines position in the list of variations)" msgstr "" -#: includes/Assets.php:966 +#: includes/Assets.php:967 msgid "Enter a value (fixed or %)" msgstr "" -#: includes/Assets.php:967 +#: includes/Assets.php:968 msgid "Are you sure you want to delete all variations? This cannot be undone." msgstr "" -#: includes/Assets.php:968 +#: includes/Assets.php:969 msgid "Last warning, are you sure?" msgstr "" -#: includes/Assets.php:969 +#: includes/Assets.php:970 msgid "Choose an image" msgstr "" -#: includes/Assets.php:970 +#: includes/Assets.php:971 msgid "Set variation image" msgstr "" -#: includes/Assets.php:971 +#: includes/Assets.php:972 msgid "variation added" msgstr "" -#: includes/Assets.php:972 +#: includes/Assets.php:973 msgid "variations added" msgstr "" -#: includes/Assets.php:973 +#: includes/Assets.php:974 msgid "No variations added" msgstr "" -#: includes/Assets.php:974 +#: includes/Assets.php:975 msgid "Are you sure you want to remove this variation?" msgstr "" -#: includes/Assets.php:975 +#: includes/Assets.php:976 msgid "Sale start date (YYYY-MM-DD format or leave blank)" msgstr "" -#: includes/Assets.php:976 +#: includes/Assets.php:977 msgid "Sale end date (YYYY-MM-DD format or leave blank)" msgstr "" -#: includes/Assets.php:977 +#: includes/Assets.php:978 msgid "Save changes before changing page?" msgstr "" -#: includes/Assets.php:978 +#: includes/Assets.php:979 msgid "%qty% variation" msgstr "" -#: includes/Assets.php:979 +#: includes/Assets.php:980 msgid "%qty% variations" msgstr "" -#: includes/Assets.php:980 +#: includes/Assets.php:981 msgid "No Result Found" msgstr "" -#: includes/Assets.php:981 +#: includes/Assets.php:982 msgid "Please insert value less than the regular price!" msgstr "" #. translators: %s: decimal -#: includes/Assets.php:983 -#: includes/Assets.php:1159 +#: includes/Assets.php:984 +#: includes/Assets.php:1162 msgid "Please enter with one decimal point (%s) without thousand separators." msgstr "" #. translators: %s: price decimal separator -#: includes/Assets.php:985 -#: includes/Assets.php:1161 +#: includes/Assets.php:986 +#: includes/Assets.php:1164 msgid "Please enter with one monetary decimal point (%s) without thousand separators and currency symbols." msgstr "" -#: includes/Assets.php:986 -#: includes/Assets.php:1162 +#: includes/Assets.php:987 +#: includes/Assets.php:1165 msgid "Please enter in country code with two capital letters." msgstr "" -#: includes/Assets.php:987 -#: includes/Assets.php:1163 +#: includes/Assets.php:988 +#: includes/Assets.php:1166 msgid "Please enter in a value less than the regular price." msgstr "" -#: includes/Assets.php:988 -#: includes/Assets.php:1164 +#: includes/Assets.php:989 +#: includes/Assets.php:1167 msgid "This product has produced sales and may be linked to existing orders. Are you sure you want to delete it?" msgstr "" -#: includes/Assets.php:989 -#: includes/Assets.php:1165 +#: includes/Assets.php:990 +#: includes/Assets.php:1168 msgid "This action cannot be reversed. Are you sure you wish to erase personal data from the selected orders?" msgstr "" -#: includes/Assets.php:999 +#: includes/Assets.php:1000 msgid "Select and Crop" msgstr "" -#: includes/Assets.php:1000 +#: includes/Assets.php:1001 msgid "Choose Image" msgstr "" -#: includes/Assets.php:1001 +#: includes/Assets.php:1002 msgid "Product title is required" msgstr "" -#: includes/Assets.php:1002 +#: includes/Assets.php:1003 msgid "Product category is required" msgstr "" -#: includes/Assets.php:1003 +#: includes/Assets.php:1004 msgid "Product created successfully" msgstr "" -#: includes/Assets.php:1007 +#: includes/Assets.php:1008 msgid "One result is available, press enter to select it." msgstr "" -#: includes/Assets.php:1008 +#: includes/Assets.php:1009 msgid "%qty% results are available, use up and down arrow keys to navigate." msgstr "" -#: includes/Assets.php:1009 +#: includes/Assets.php:1010 msgid "No matches found" msgstr "" -#: includes/Assets.php:1010 +#: includes/Assets.php:1011 msgid "Loading failed" msgstr "" -#: includes/Assets.php:1011 +#: includes/Assets.php:1012 msgid "Please enter 1 or more characters" msgstr "" -#: includes/Assets.php:1012 +#: includes/Assets.php:1013 msgid "Please enter %qty% or more characters" msgstr "" -#: includes/Assets.php:1013 +#: includes/Assets.php:1014 msgid "Please delete 1 character" msgstr "" -#: includes/Assets.php:1014 +#: includes/Assets.php:1015 msgid "Please delete %qty% characters" msgstr "" -#: includes/Assets.php:1015 +#: includes/Assets.php:1016 msgid "You can only select 1 item" msgstr "" -#: includes/Assets.php:1016 +#: includes/Assets.php:1017 msgid "You can only select %qty% items" msgstr "" -#: includes/Assets.php:1017 +#: includes/Assets.php:1018 msgid "Loading more results…" msgstr "" -#: includes/Assets.php:1018 +#: includes/Assets.php:1019 msgid "Searching…" msgstr "" -#: includes/Assets.php:1019 +#: includes/Assets.php:1020 msgid "Calculating" msgstr "" -#: includes/Assets.php:1020 +#: includes/Assets.php:1021 msgid "OK" msgstr "" -#: includes/Assets.php:1021 +#: includes/Assets.php:1022 #: includes/Product/functions.php:310 -#: templates/my-orders.php:101 -#: templates/orders/details.php:201 +#: templates/my-orders.php:95 +#: templates/orders/details.php:196 #: templates/products/edit-product-single.php:235 #: templates/products/new-product.php:232 #: templates/products/tmpl-add-product-popup.php:68 @@ -2183,15 +2151,15 @@ msgstr "" msgid "Cancel" msgstr "" -#: includes/Assets.php:1022 +#: includes/Assets.php:1023 msgid "Attribute Name" msgstr "" -#: includes/Assets.php:1024 +#: includes/Assets.php:1025 msgid "Are you sure? You have uploaded banner but didn't click the Update Settings button!" msgstr "" -#: includes/Assets.php:1025 +#: includes/Assets.php:1026 #: templates/settings/header.php:20 #: templates/settings/payment-manage.php:48 #: templates/settings/store-form.php:292 @@ -2207,13 +2175,13 @@ msgid "Dokan variable products author IDs regenerated successfully!" msgstr "" #: includes/Blocks/ProductBlock.php:29 -#: includes/functions.php:835 +#: includes/functions.php:731 #: templates/products/others.php:19 msgid "Online" msgstr "" #: includes/Blocks/ProductBlock.php:30 -#: includes/functions.php:836 +#: includes/functions.php:732 #: templates/products/others.php:20 msgid "Draft" msgstr "" @@ -2312,21 +2280,26 @@ msgid "Check to hide product price from your products." msgstr "" #. translators: %s: Geteway fee -#: includes/Commission.php:102 +#: includes/Commission.php:114 msgid "Payment gateway processing fee %s" msgstr "" -#: includes/Commission.php:201 +#: includes/Commission.php:236 #: includes/REST/ProductBlockController.php:69 msgid "Product not found" msgstr "" -#: includes/Commission.php:230 +#: includes/Commission.php:266 msgid "Order not found" msgstr "" +#: includes/Commission.php:769 +#: includes/Commission.php:801 +msgid "Please provide a valid order object." +msgstr "" + #. translators: 1) page number -#: includes/Core.php:144 +#: includes/Core.php:149 msgid "Page %1$s" msgstr "" @@ -2435,14 +2408,14 @@ msgid "Pending" msgstr "" #: includes/Dashboard/Templates/Dashboard.php:111 -#: includes/Order/functions.php:463 +#: includes/Order/functions.php:441 #: templates/dashboard/orders-widget.php:40 #: assets/js/vue-admin.js:2 msgid "Cancelled" msgstr "" #: includes/Dashboard/Templates/Dashboard.php:116 -#: includes/Order/functions.php:459 +#: includes/Order/functions.php:436 #: templates/dashboard/orders-widget.php:45 msgid "Refunded" msgstr "" @@ -2451,29 +2424,33 @@ msgstr "" msgid "On Hold" msgstr "" -#: includes/Dashboard/Templates/Orders.php:79 +#: includes/Dashboard/Templates/Orders.php:74 +msgid "No order data found with given order id." +msgstr "" + +#: includes/Dashboard/Templates/Orders.php:91 msgid "You have no permission to view this order" msgstr "" -#: includes/Dashboard/Templates/Orders.php:105 +#: includes/Dashboard/Templates/Orders.php:117 msgid "Nonce verification failed!" msgstr "" -#: includes/Dashboard/Templates/Orders.php:128 +#: includes/Dashboard/Templates/Orders.php:140 #: includes/Dashboard/Templates/Products.php:226 #: assets/js/vue-admin.js:2 msgid "Bulk Actions" msgstr "" -#: includes/Dashboard/Templates/Orders.php:129 +#: includes/Dashboard/Templates/Orders.php:141 msgid "Change status to on-hold" msgstr "" -#: includes/Dashboard/Templates/Orders.php:130 +#: includes/Dashboard/Templates/Orders.php:142 msgid "Change status to processing" msgstr "" -#: includes/Dashboard/Templates/Orders.php:131 +#: includes/Dashboard/Templates/Orders.php:143 msgid "Change status to completed" msgstr "" @@ -3081,160 +3058,175 @@ msgstr "" msgid "You are an administrator. Please use dokan admin settings to enable your selling capabilities." msgstr "" -#: includes/functions.php:837 +#. translators: 1) argument name, 2) argument value +#: includes/functions-rest-api.php:22 +msgid "%1$s is not of type %2$s" +msgstr "" + +#. translators: 1) argument name +#: includes/functions-rest-api.php:28 +msgid "%s was not registered as a request argument." +msgstr "" + +#. translators: 1) rest api endpoint key name +#: includes/functions-rest-api.php:37 +msgid "No store found with given store id" +msgstr "" + +#: includes/functions.php:733 #: templates/dashboard/products-widget.php:41 #: templates/withdraw/pending-request-listing-dashboard.php:46 #: templates/withdraw/pending-request-listing.php:43 msgid "Pending Review" msgstr "" -#: includes/functions.php:838 +#: includes/functions.php:734 #: templates/products/products-listing-row.php:166 msgid "Scheduled" msgstr "" -#: includes/functions.php:883 +#: includes/functions.php:779 msgid "Simple Product" msgstr "" -#: includes/functions.php:884 +#: includes/functions.php:780 #: assets/js/vue-admin.js:2 msgid "Variable Product" msgstr "" -#: includes/functions.php:885 +#: includes/functions.php:781 msgid "Grouped Product" msgstr "" -#: includes/functions.php:886 +#: includes/functions.php:782 msgid "External/Affiliate Product" msgstr "" -#: includes/functions.php:1118 +#: includes/functions.php:1014 msgid "Author" msgstr "" -#: includes/functions.php:1305 +#: includes/functions.php:1201 #: includes/template-tags.php:403 #: templates/dashboard/products-widget.php:16 #: assets/js/vue-admin.js:2 msgid "Products" msgstr "" -#: includes/functions.php:1309 +#: includes/functions.php:1205 #: includes/Vendor/SettingsApi/Settings/Pages/Store.php:545 #: templates/settings/store-form.php:217 msgid "Terms and Conditions" msgstr "" #. translators: 1) bank account name -#: includes/functions.php:1349 +#: includes/functions.php:1245 #: assets/js/vue-admin.js:2 msgid "Account Name: %s" msgstr "" #. translators: 1) bank account number -#: includes/functions.php:1354 +#: includes/functions.php:1250 #: assets/js/vue-admin.js:2 msgid "Account Number: %s" msgstr "" #. translators: 1) bank name -#: includes/functions.php:1359 +#: includes/functions.php:1255 #: assets/js/vue-admin.js:2 msgid "Bank Name: %s" msgstr "" #. translators: 1) bank address -#: includes/functions.php:1364 +#: includes/functions.php:1260 msgid "Address: %s" msgstr "" #. translators: 1) bank routing number -#: includes/functions.php:1369 +#: includes/functions.php:1265 #: assets/js/vue-admin.js:2 msgid "Routing Number: %s" msgstr "" #. translators: 1) bank iban -#: includes/functions.php:1374 +#: includes/functions.php:1270 #: assets/js/vue-admin.js:2 msgid "IBAN: %s" msgstr "" #. translators: 1) bank swift -#: includes/functions.php:1379 +#: includes/functions.php:1275 msgid "SWIFT: %s" msgstr "" -#: includes/functions.php:1734 +#: includes/functions.php:1630 msgid "Date is not valid" msgstr "" -#: includes/functions.php:2185 +#: includes/functions.php:1996 msgid "- Select a location -" msgstr "" -#: includes/functions.php:2189 -#: includes/functions.php:2213 +#: includes/functions.php:2000 +#: includes/functions.php:2024 msgid "Everywhere Else" msgstr "" -#: includes/functions.php:2209 +#: includes/functions.php:2020 msgid "- Select a State -" msgstr "" -#: includes/functions.php:2232 +#: includes/functions.php:2043 msgid "Ready to ship in..." msgstr "" -#: includes/functions.php:2233 +#: includes/functions.php:2044 msgid "1 business day" msgstr "" -#: includes/functions.php:2234 +#: includes/functions.php:2045 msgid "1-2 business days" msgstr "" -#: includes/functions.php:2235 +#: includes/functions.php:2046 msgid "1-3 business days" msgstr "" -#: includes/functions.php:2236 +#: includes/functions.php:2047 msgid "3-5 business days" msgstr "" -#: includes/functions.php:2237 +#: includes/functions.php:2048 msgid "1-2 weeks" msgstr "" -#: includes/functions.php:2238 +#: includes/functions.php:2049 msgid "2-3 weeks" msgstr "" -#: includes/functions.php:2239 +#: includes/functions.php:2050 msgid "3-4 weeks" msgstr "" -#: includes/functions.php:2240 +#: includes/functions.php:2051 msgid "4-6 weeks" msgstr "" -#: includes/functions.php:2241 +#: includes/functions.php:2052 msgid "6-8 weeks" msgstr "" -#: includes/functions.php:2371 +#: includes/functions.php:2152 msgid "All dates" msgstr "" #. translators: 1: month name, 2: 4-digit year -#: includes/functions.php:2386 +#: includes/functions.php:2167 #: includes/REST/ProductControllerV2.php:198 msgid "%1$s %2$d" msgstr "" -#: includes/functions.php:2401 +#: includes/functions.php:2182 #: includes/REST/ProductControllerV2.php:236 #: templates/products/edit-product-single.php:190 #: templates/products/products-listing-row.php:112 @@ -3242,473 +3234,511 @@ msgstr "" msgid "Simple" msgstr "" -#: includes/functions.php:2483 +#: includes/functions.php:2264 #: includes/Privacy.php:201 #: assets/js/vue-bootstrap.js:2 msgid "Facebook" msgstr "" -#: includes/functions.php:2487 +#: includes/functions.php:2268 #: includes/Privacy.php:202 #: assets/js/vue-bootstrap.js:2 msgid "Twitter" msgstr "" -#: includes/functions.php:2491 +#: includes/functions.php:2272 #: includes/Privacy.php:203 #: assets/js/vue-bootstrap.js:2 msgid "Pinterest" msgstr "" -#: includes/functions.php:2495 +#: includes/functions.php:2276 msgid "LinkedIn" msgstr "" -#: includes/functions.php:2499 +#: includes/functions.php:2280 #: includes/Privacy.php:205 #: assets/js/vue-bootstrap.js:2 msgid "Youtube" msgstr "" -#: includes/functions.php:2503 +#: includes/functions.php:2284 #: includes/Privacy.php:206 #: assets/js/vue-bootstrap.js:2 msgid "Instagram" msgstr "" -#: includes/functions.php:2507 +#: includes/functions.php:2288 #: includes/Privacy.php:207 #: assets/js/vue-bootstrap.js:2 msgid "Flickr" msgstr "" -#: includes/functions.php:2773 +#: includes/functions.php:2554 msgid "Dokan Store Sidebar" msgstr "" -#: includes/functions.php:2928 +#: includes/functions.php:2711 msgid "View sales overview" msgstr "" -#: includes/functions.php:2929 +#: includes/functions.php:2712 msgid "View sales report chart" msgstr "" -#: includes/functions.php:2930 +#: includes/functions.php:2713 msgid "View announcement" msgstr "" -#: includes/functions.php:2931 +#: includes/functions.php:2714 msgid "View order report" msgstr "" -#: includes/functions.php:2932 +#: includes/functions.php:2715 msgid "View review report" msgstr "" -#: includes/functions.php:2933 +#: includes/functions.php:2716 msgid "View product status report" msgstr "" -#: includes/functions.php:2936 +#: includes/functions.php:2719 msgid "View overview report" msgstr "" -#: includes/functions.php:2937 +#: includes/functions.php:2720 msgid "View daily sales report" msgstr "" -#: includes/functions.php:2938 +#: includes/functions.php:2721 msgid "View top selling report" msgstr "" -#: includes/functions.php:2939 +#: includes/functions.php:2722 msgid "View top earning report" msgstr "" -#: includes/functions.php:2940 +#: includes/functions.php:2723 msgid "View statement report" msgstr "" -#: includes/functions.php:2943 +#: includes/functions.php:2726 msgid "View order" msgstr "" -#: includes/functions.php:2944 +#: includes/functions.php:2727 msgid "Manage order" msgstr "" -#: includes/functions.php:2945 +#: includes/functions.php:2728 msgid "Manage order note" msgstr "" -#: includes/functions.php:2946 +#: includes/functions.php:2729 msgid "Manage refund" msgstr "" -#: includes/functions.php:2947 +#: includes/functions.php:2730 msgid "Export order" msgstr "" -#: includes/functions.php:2950 +#: includes/functions.php:2733 msgid "Add coupon" msgstr "" -#: includes/functions.php:2951 +#: includes/functions.php:2734 msgid "Edit coupon" msgstr "" -#: includes/functions.php:2952 +#: includes/functions.php:2735 msgid "Delete coupon" msgstr "" -#: includes/functions.php:2955 +#: includes/functions.php:2738 msgid "View reviews" msgstr "" -#: includes/functions.php:2956 +#: includes/functions.php:2739 #: assets/js/vue-admin.js:2 msgid "Manage reviews" msgstr "" -#: includes/functions.php:2960 +#: includes/functions.php:2743 msgid "Manage withdraw" msgstr "" -#: includes/functions.php:2963 +#: includes/functions.php:2746 msgid "Add product" msgstr "" -#: includes/functions.php:2964 +#: includes/functions.php:2747 msgid "Edit product" msgstr "" -#: includes/functions.php:2965 +#: includes/functions.php:2748 msgid "Delete product" msgstr "" -#: includes/functions.php:2966 +#: includes/functions.php:2749 msgid "View product" msgstr "" -#: includes/functions.php:2967 +#: includes/functions.php:2750 msgid "Duplicate product" msgstr "" -#: includes/functions.php:2968 +#: includes/functions.php:2751 msgid "Import product" msgstr "" -#: includes/functions.php:2969 +#: includes/functions.php:2752 msgid "Export product" msgstr "" -#: includes/functions.php:2972 +#: includes/functions.php:2755 msgid "View overview menu" msgstr "" -#: includes/functions.php:2973 +#: includes/functions.php:2756 msgid "View product menu" msgstr "" -#: includes/functions.php:2974 +#: includes/functions.php:2757 msgid "View order menu" msgstr "" -#: includes/functions.php:2975 +#: includes/functions.php:2758 msgid "View coupon menu" msgstr "" -#: includes/functions.php:2976 +#: includes/functions.php:2759 msgid "View report menu" msgstr "" -#: includes/functions.php:2977 +#: includes/functions.php:2760 msgid "View review menu" msgstr "" -#: includes/functions.php:2978 +#: includes/functions.php:2761 msgid "View withdraw menu" msgstr "" -#: includes/functions.php:2979 +#: includes/functions.php:2762 msgid "View store settings menu" msgstr "" -#: includes/functions.php:2980 +#: includes/functions.php:2763 msgid "View payment settings menu" msgstr "" -#: includes/functions.php:2981 +#: includes/functions.php:2764 msgid "View shipping settings menu" msgstr "" -#: includes/functions.php:2982 +#: includes/functions.php:2765 msgid "View social settings menu" msgstr "" -#: includes/functions.php:2983 +#: includes/functions.php:2766 msgid "View seo settings menu" msgstr "" -#: includes/functions.php:3002 +#: includes/functions.php:2785 #: assets/js/vue-admin.js:2 msgid "Overview" msgstr "" -#: includes/functions.php:3003 +#: includes/functions.php:2786 msgid "Report" msgstr "" -#: includes/functions.php:3004 +#: includes/functions.php:2787 #: templates/dashboard/big-counter-widget.php:29 -#: templates/my-orders.php:31 -#: templates/orders/details.php:20 +#: templates/my-orders.php:25 +#: templates/orders/details.php:19 #: templates/orders/listing.php:30 -#: templates/orders/listing.php:54 +#: templates/orders/listing.php:57 #: templates/sub-orders.php:43 #: assets/js/vue-admin.js:2 msgid "Order" msgstr "" -#: includes/functions.php:3005 +#: includes/functions.php:2788 msgid "Coupon" msgstr "" -#: includes/functions.php:3006 +#: includes/functions.php:2789 msgid "Review" msgstr "" -#: includes/functions.php:3008 +#: includes/functions.php:2791 #: templates/emails/vendor-completed-order.php:54 #: templates/emails/vendor-new-order.php:53 #: assets/js/vue-admin.js:2 msgid "Product" msgstr "" -#: includes/functions.php:3009 +#: includes/functions.php:2792 msgid "Menu" msgstr "" -#: includes/functions.php:3197 +#: includes/functions.php:2911 #: includes/Vendor/SettingsApi/Settings/Pages/Store.php:350 msgid "Sunday" msgstr "" -#: includes/functions.php:3198 +#: includes/functions.php:2912 #: includes/Vendor/SettingsApi/Settings/Pages/Store.php:302 msgid "Monday" msgstr "" -#: includes/functions.php:3199 +#: includes/functions.php:2913 #: includes/Vendor/SettingsApi/Settings/Pages/Store.php:310 msgid "Tuesday" msgstr "" -#: includes/functions.php:3200 +#: includes/functions.php:2914 #: includes/Vendor/SettingsApi/Settings/Pages/Store.php:318 msgid "Wednesday" msgstr "" -#: includes/functions.php:3201 +#: includes/functions.php:2915 #: includes/Vendor/SettingsApi/Settings/Pages/Store.php:326 msgid "Thursday" msgstr "" -#: includes/functions.php:3202 +#: includes/functions.php:2916 #: includes/Vendor/SettingsApi/Settings/Pages/Store.php:334 msgid "Friday" msgstr "" -#: includes/functions.php:3203 +#: includes/functions.php:2917 #: includes/Vendor/SettingsApi/Settings/Pages/Store.php:342 msgid "Saturday" msgstr "" -#: includes/functions.php:3621 +#: includes/functions.php:3210 msgid "privacy policy" msgstr "" -#: includes/functions.php:3668 +#: includes/functions.php:3257 #: assets/js/vue-admin.js:2 #: assets/js/vue-bootstrap.js:2 msgid "Flat" msgstr "" -#: includes/functions.php:3669 +#: includes/functions.php:3258 #: assets/js/vue-admin.js:2 #: assets/js/vue-bootstrap.js:2 msgid "Percentage" msgstr "" #. translators: 1) plugin slug -#: includes/functions.php:3843 +#: includes/functions.php:3432 msgid "Unable to fetch plugin information from wordpress.org for %s." msgstr "" #. translators: 1) plugin slug -#: includes/functions.php:3856 +#: includes/functions.php:3445 msgid "Unable to install %s from wordpress.org" msgstr "" -#: includes/Order/functions.php:447 +#: includes/Order/Admin/Hooks.php:93 +#: assets/js/vue-admin.js:2 +msgid "Actions" +msgstr "" + +#: includes/Order/Admin/Hooks.php:94 +msgid "Sub Order" +msgstr "" + +#: includes/Order/Admin/Hooks.php:133 +msgid " Sub Order of" +msgstr "" + +#: includes/Order/Admin/Hooks.php:141 +msgid "Show Sub-Orders" +msgstr "" + +#: includes/Order/Admin/Hooks.php:141 +msgid "Hide Sub-Orders" +msgstr "" + +#: includes/Order/Admin/Hooks.php:154 +#: assets/js/vue-admin.js:2 +msgid "(no name)" +msgstr "" + +#: includes/Order/Admin/Hooks.php:505 +msgid "Toggle Sub-orders" +msgstr "" + +#: includes/Order/EmailHooks.php:145 +msgid "Your {site_title} order receipt from {order_date}" +msgstr "" + +#: includes/Order/EmailHooks.php:146 +msgid "Your {site_title} order from {order_date} is complete" +msgstr "" + +#: includes/Order/functions.php:421 msgid "Pending Payment" msgstr "" -#: includes/Order/functions.php:467 +#: includes/Order/functions.php:446 msgid "Failed" msgstr "" -#: includes/Order/functions.php:662 +#: includes/Order/functions.php:628 msgid "Order No" msgstr "" -#: includes/Order/functions.php:663 -#: templates/orders/details.php:20 +#: includes/Order/functions.php:629 +#: templates/orders/details.php:19 msgid "Order Items" msgstr "" -#: includes/Order/functions.php:664 +#: includes/Order/functions.php:630 msgid "Shipping method" msgstr "" -#: includes/Order/functions.php:665 +#: includes/Order/functions.php:631 msgid "Shipping Cost" msgstr "" -#: includes/Order/functions.php:666 +#: includes/Order/functions.php:632 msgid "Payment method" msgstr "" -#: includes/Order/functions.php:667 +#: includes/Order/functions.php:633 #: templates/orders/listing.php:31 -#: templates/orders/listing.php:74 +#: templates/orders/listing.php:77 msgid "Order Total" msgstr "" -#: includes/Order/functions.php:668 +#: includes/Order/functions.php:634 msgid "Earnings" msgstr "" -#: includes/Order/functions.php:669 +#: includes/Order/functions.php:635 #: includes/REST/OrderController.php:107 msgid "Order Status" msgstr "" -#: includes/Order/functions.php:670 +#: includes/Order/functions.php:636 msgid "Order Date" msgstr "" -#: includes/Order/functions.php:671 +#: includes/Order/functions.php:637 msgid "Billing Company" msgstr "" -#: includes/Order/functions.php:672 +#: includes/Order/functions.php:638 msgid "Billing First Name" msgstr "" -#: includes/Order/functions.php:673 +#: includes/Order/functions.php:639 msgid "Billing Last Name" msgstr "" -#: includes/Order/functions.php:674 +#: includes/Order/functions.php:640 msgid "Billing Full Name" msgstr "" -#: includes/Order/functions.php:675 +#: includes/Order/functions.php:641 msgid "Billing Email" msgstr "" -#: includes/Order/functions.php:676 +#: includes/Order/functions.php:642 msgid "Billing Phone" msgstr "" -#: includes/Order/functions.php:677 +#: includes/Order/functions.php:643 msgid "Billing Address 1" msgstr "" -#: includes/Order/functions.php:678 +#: includes/Order/functions.php:644 msgid "Billing Address 2" msgstr "" -#: includes/Order/functions.php:679 +#: includes/Order/functions.php:645 msgid "Billing City" msgstr "" -#: includes/Order/functions.php:680 +#: includes/Order/functions.php:646 msgid "Billing State" msgstr "" -#: includes/Order/functions.php:681 +#: includes/Order/functions.php:647 msgid "Billing Postcode" msgstr "" -#: includes/Order/functions.php:682 +#: includes/Order/functions.php:648 msgid "Billing Country" msgstr "" -#: includes/Order/functions.php:683 +#: includes/Order/functions.php:649 msgid "Shipping Company" msgstr "" -#: includes/Order/functions.php:684 +#: includes/Order/functions.php:650 msgid "Shipping First Name" msgstr "" -#: includes/Order/functions.php:685 +#: includes/Order/functions.php:651 msgid "Shipping Last Name" msgstr "" -#: includes/Order/functions.php:686 +#: includes/Order/functions.php:652 msgid "Shipping Full Name" msgstr "" -#: includes/Order/functions.php:687 +#: includes/Order/functions.php:653 msgid "Shipping Address 1" msgstr "" -#: includes/Order/functions.php:688 +#: includes/Order/functions.php:654 msgid "Shipping Address 2" msgstr "" -#: includes/Order/functions.php:689 +#: includes/Order/functions.php:655 msgid "Shipping City" msgstr "" -#: includes/Order/functions.php:690 +#: includes/Order/functions.php:656 msgid "Shipping State" msgstr "" -#: includes/Order/functions.php:691 +#: includes/Order/functions.php:657 msgid "Shipping Postcode" msgstr "" -#: includes/Order/functions.php:692 +#: includes/Order/functions.php:658 msgid "Shipping Country" msgstr "" -#: includes/Order/functions.php:693 +#: includes/Order/functions.php:659 msgid "Customer IP" msgstr "" -#: includes/Order/functions.php:694 +#: includes/Order/functions.php:660 msgid "Customer Note" msgstr "" -#: includes/Order/Hooks.php:309 +#: includes/Order/Hooks.php:272 msgid "Mark parent order completed when all child orders are completed." msgstr "" -#: includes/Order/Hooks.php:364 +#: includes/Order/Hooks.php:327 msgid "This coupon is invalid for multiple vendors." msgstr "" -#: includes/Order/Hooks.php:378 +#: includes/Order/Hooks.php:341 msgid "A coupon must be restricted with a vendor product." msgstr "" #. translators: %s item name. -#: includes/Order/Hooks.php:430 +#: includes/Order/Hooks.php:387 msgid "Unable to restore stock for item %s." msgstr "" @@ -4013,9 +4043,9 @@ msgid "Delete all variations" msgstr "" #: includes/Product/functions.php:215 -#: templates/my-orders.php:33 +#: templates/my-orders.php:27 #: templates/orders/listing.php:33 -#: templates/orders/listing.php:80 +#: templates/orders/listing.php:83 #: templates/products/products-listing-row.php:67 #: templates/products/products-listing.php:114 #: templates/sub-orders.php:45 @@ -4141,7 +4171,7 @@ msgid "Expand" msgstr "" #: includes/Product/functions.php:321 -#: templates/orders/details.php:361 +#: templates/orders/details.php:346 #: templates/settings/store-form.php:40 msgid "Close" msgstr "" @@ -4200,9 +4230,9 @@ msgid "Edit" msgstr "" #: includes/Product/functions.php:510 -#: templates/my-orders.php:107 -#: templates/orders/listing.php:164 -#: templates/sub-orders.php:100 +#: templates/my-orders.php:101 +#: templates/orders/listing.php:150 +#: templates/sub-orders.php:96 msgid "View" msgstr "" @@ -4392,7 +4422,7 @@ msgstr "" #: includes/REST/AdminReportController.php:144 #: templates/dashboard/orders-widget.php:20 #: templates/dashboard/products-widget.php:26 -#: templates/my-orders.php:34 +#: templates/my-orders.php:28 #: templates/orders/order-fee-html.php:24 #: templates/sub-orders.php:49 msgid "Total" @@ -4410,13 +4440,13 @@ msgid "Vendors products data." msgstr "" #: includes/REST/DummyDataController.php:175 -#: includes/REST/OrderController.php:896 +#: includes/REST/OrderController.php:897 #: includes/REST/ProductController.php:1672 msgid "Unique identifier for the resource." msgstr "" #: includes/REST/DummyDataController.php:181 -#: includes/REST/OrderController.php:1252 +#: includes/REST/OrderController.php:1253 #: includes/REST/ProductController.php:1678 msgid "Product name." msgstr "" @@ -4876,45 +4906,45 @@ msgid "Menu order, used to custom sort products." msgstr "" #: includes/REST/DummyDataController.php:825 -#: includes/REST/OrderController.php:1213 -#: includes/REST/OrderController.php:1325 -#: includes/REST/OrderController.php:1416 -#: includes/REST/OrderController.php:1502 -#: includes/REST/OrderController.php:1600 -#: includes/REST/OrderController.php:1658 +#: includes/REST/OrderController.php:1214 +#: includes/REST/OrderController.php:1326 +#: includes/REST/OrderController.php:1417 +#: includes/REST/OrderController.php:1503 +#: includes/REST/OrderController.php:1601 +#: includes/REST/OrderController.php:1659 #: includes/REST/ProductController.php:2249 msgid "Meta data." msgstr "" #: includes/REST/DummyDataController.php:832 -#: includes/REST/OrderController.php:1220 -#: includes/REST/OrderController.php:1332 -#: includes/REST/OrderController.php:1423 -#: includes/REST/OrderController.php:1509 -#: includes/REST/OrderController.php:1607 -#: includes/REST/OrderController.php:1665 +#: includes/REST/OrderController.php:1221 +#: includes/REST/OrderController.php:1333 +#: includes/REST/OrderController.php:1424 +#: includes/REST/OrderController.php:1510 +#: includes/REST/OrderController.php:1608 +#: includes/REST/OrderController.php:1666 #: includes/REST/ProductController.php:2256 msgid "Meta ID." msgstr "" #: includes/REST/DummyDataController.php:839 -#: includes/REST/OrderController.php:1226 -#: includes/REST/OrderController.php:1338 -#: includes/REST/OrderController.php:1429 -#: includes/REST/OrderController.php:1515 -#: includes/REST/OrderController.php:1613 -#: includes/REST/OrderController.php:1671 +#: includes/REST/OrderController.php:1227 +#: includes/REST/OrderController.php:1339 +#: includes/REST/OrderController.php:1430 +#: includes/REST/OrderController.php:1516 +#: includes/REST/OrderController.php:1614 +#: includes/REST/OrderController.php:1672 #: includes/REST/ProductController.php:2262 msgid "Meta key." msgstr "" #: includes/REST/DummyDataController.php:845 -#: includes/REST/OrderController.php:1231 -#: includes/REST/OrderController.php:1343 -#: includes/REST/OrderController.php:1434 -#: includes/REST/OrderController.php:1520 -#: includes/REST/OrderController.php:1618 -#: includes/REST/OrderController.php:1676 +#: includes/REST/OrderController.php:1232 +#: includes/REST/OrderController.php:1344 +#: includes/REST/OrderController.php:1435 +#: includes/REST/OrderController.php:1521 +#: includes/REST/OrderController.php:1619 +#: includes/REST/OrderController.php:1677 #: includes/REST/ProductController.php:2267 msgid "Meta value." msgstr "" @@ -5015,11 +5045,11 @@ msgstr "" #: includes/REST/ProductController.php:89 #: includes/REST/ProductController.php:134 #: includes/REST/StoreController.php:63 -#: includes/REST/StoreController.php:96 -#: includes/REST/StoreController.php:113 -#: includes/REST/StoreController.php:140 -#: includes/REST/StoreController.php:174 -#: includes/REST/StoreController.php:206 +#: includes/REST/StoreController.php:98 +#: includes/REST/StoreController.php:115 +#: includes/REST/StoreController.php:142 +#: includes/REST/StoreController.php:176 +#: includes/REST/StoreController.php:208 #: includes/REST/WithdrawController.php:81 #: includes/REST/WithdrawController.php:737 msgid "Unique identifier for the object." @@ -5061,412 +5091,412 @@ msgstr "" msgid "Invalid order" msgstr "" -#: includes/REST/OrderController.php:558 -#: includes/REST/OrderController.php:628 -#: includes/REST/OrderController.php:670 -#: includes/REST/OrderController.php:702 +#: includes/REST/OrderController.php:559 +#: includes/REST/OrderController.php:629 +#: includes/REST/OrderController.php:671 +#: includes/REST/OrderController.php:703 msgid "Invalid order ID." msgstr "" -#: includes/REST/OrderController.php:564 -#: includes/REST/OrderController.php:666 -#: includes/REST/OrderController.php:698 +#: includes/REST/OrderController.php:565 +#: includes/REST/OrderController.php:667 +#: includes/REST/OrderController.php:699 msgid "You have no permission to view this notes" msgstr "" #. translators: 1) %s: post type name -#: includes/REST/OrderController.php:617 +#: includes/REST/OrderController.php:618 #: includes/REST/ProductController.php:300 msgid "Cannot create existing %s." msgstr "" -#: includes/REST/OrderController.php:624 +#: includes/REST/OrderController.php:625 msgid "You have no permission to create this notes" msgstr "" -#: includes/REST/OrderController.php:635 +#: includes/REST/OrderController.php:636 msgid "Cannot create order note, please try again." msgstr "" -#: includes/REST/OrderController.php:676 -#: includes/REST/OrderController.php:708 +#: includes/REST/OrderController.php:677 +#: includes/REST/OrderController.php:709 msgid "Invalid resource ID." msgstr "" -#: includes/REST/OrderController.php:717 +#: includes/REST/OrderController.php:718 msgid "Given order note cannot be deleted." msgstr "" -#: includes/REST/OrderController.php:902 +#: includes/REST/OrderController.php:903 msgid "Parent order ID." msgstr "" -#: includes/REST/OrderController.php:907 +#: includes/REST/OrderController.php:908 msgid "Orders belongs to specific seller" msgstr "" -#: includes/REST/OrderController.php:913 +#: includes/REST/OrderController.php:914 msgid "Order number." msgstr "" -#: includes/REST/OrderController.php:919 +#: includes/REST/OrderController.php:920 msgid "Order key." msgstr "" -#: includes/REST/OrderController.php:925 +#: includes/REST/OrderController.php:926 msgid "Shows where the order was created." msgstr "" -#: includes/REST/OrderController.php:931 +#: includes/REST/OrderController.php:932 msgid "Version of WooCommerce which last updated the order." msgstr "" -#: includes/REST/OrderController.php:937 +#: includes/REST/OrderController.php:938 msgid "Order status." msgstr "" -#: includes/REST/OrderController.php:944 +#: includes/REST/OrderController.php:945 msgid "Currency the order was created with, in ISO format." msgstr "" -#: includes/REST/OrderController.php:951 +#: includes/REST/OrderController.php:952 msgid "The date the order was created, in the site's timezone." msgstr "" -#: includes/REST/OrderController.php:958 +#: includes/REST/OrderController.php:959 msgid "The date the order was created, as GMT." msgstr "" -#: includes/REST/OrderController.php:964 +#: includes/REST/OrderController.php:965 msgid "The date the order was last modified, in the site's timezone." msgstr "" -#: includes/REST/OrderController.php:970 +#: includes/REST/OrderController.php:971 msgid "The date the order was last modified, as GMT." msgstr "" -#: includes/REST/OrderController.php:976 +#: includes/REST/OrderController.php:977 msgid "Total discount amount for the order." msgstr "" -#: includes/REST/OrderController.php:982 +#: includes/REST/OrderController.php:983 msgid "Total discount tax amount for the order." msgstr "" -#: includes/REST/OrderController.php:988 +#: includes/REST/OrderController.php:989 msgid "Total shipping amount for the order." msgstr "" -#: includes/REST/OrderController.php:994 +#: includes/REST/OrderController.php:995 msgid "Total shipping tax amount for the order." msgstr "" -#: includes/REST/OrderController.php:1000 +#: includes/REST/OrderController.php:1001 msgid "Sum of line item taxes only." msgstr "" -#: includes/REST/OrderController.php:1006 +#: includes/REST/OrderController.php:1007 msgid "Grand total." msgstr "" -#: includes/REST/OrderController.php:1012 +#: includes/REST/OrderController.php:1013 msgid "Sum of all taxes." msgstr "" -#: includes/REST/OrderController.php:1018 +#: includes/REST/OrderController.php:1019 msgid "True the prices included tax during checkout." msgstr "" -#: includes/REST/OrderController.php:1024 +#: includes/REST/OrderController.php:1025 #: includes/REST/VendorDashboardController.php:521 msgid "User ID who owns the order. 0 for guests." msgstr "" -#: includes/REST/OrderController.php:1030 +#: includes/REST/OrderController.php:1031 msgid "Order id to search order" msgstr "" -#: includes/REST/OrderController.php:1036 +#: includes/REST/OrderController.php:1037 msgid "Customer's IP address." msgstr "" -#: includes/REST/OrderController.php:1042 +#: includes/REST/OrderController.php:1043 msgid "User agent of the customer." msgstr "" -#: includes/REST/OrderController.php:1048 +#: includes/REST/OrderController.php:1049 msgid "Note left by customer during checkout." msgstr "" -#: includes/REST/OrderController.php:1053 +#: includes/REST/OrderController.php:1054 msgid "Billing address." msgstr "" -#: includes/REST/OrderController.php:1058 -#: includes/REST/OrderController.php:1121 +#: includes/REST/OrderController.php:1059 +#: includes/REST/OrderController.php:1122 msgid "First name." msgstr "" -#: includes/REST/OrderController.php:1063 -#: includes/REST/OrderController.php:1126 +#: includes/REST/OrderController.php:1064 +#: includes/REST/OrderController.php:1127 msgid "Last name." msgstr "" -#: includes/REST/OrderController.php:1068 -#: includes/REST/OrderController.php:1131 +#: includes/REST/OrderController.php:1069 +#: includes/REST/OrderController.php:1132 msgid "Company name." msgstr "" -#: includes/REST/OrderController.php:1073 -#: includes/REST/OrderController.php:1136 +#: includes/REST/OrderController.php:1074 +#: includes/REST/OrderController.php:1137 #: templates/admin-setup-wizard/step-store-wc-fields.php:37 msgid "Address line 1" msgstr "" -#: includes/REST/OrderController.php:1078 -#: includes/REST/OrderController.php:1141 +#: includes/REST/OrderController.php:1079 +#: includes/REST/OrderController.php:1142 #: templates/admin-setup-wizard/step-store-wc-fields.php:44 msgid "Address line 2" msgstr "" -#: includes/REST/OrderController.php:1083 -#: includes/REST/OrderController.php:1146 +#: includes/REST/OrderController.php:1084 +#: includes/REST/OrderController.php:1147 msgid "City name." msgstr "" -#: includes/REST/OrderController.php:1088 -#: includes/REST/OrderController.php:1151 +#: includes/REST/OrderController.php:1089 +#: includes/REST/OrderController.php:1152 msgid "ISO code or name of the state, province or district." msgstr "" -#: includes/REST/OrderController.php:1093 -#: includes/REST/OrderController.php:1156 +#: includes/REST/OrderController.php:1094 +#: includes/REST/OrderController.php:1157 msgid "Postal code." msgstr "" -#: includes/REST/OrderController.php:1098 -#: includes/REST/OrderController.php:1161 +#: includes/REST/OrderController.php:1099 +#: includes/REST/OrderController.php:1162 msgid "Country code in ISO 3166-1 alpha-2 format." msgstr "" -#: includes/REST/OrderController.php:1103 +#: includes/REST/OrderController.php:1104 msgid "Email address." msgstr "" -#: includes/REST/OrderController.php:1109 +#: includes/REST/OrderController.php:1110 msgid "Phone number." msgstr "" -#: includes/REST/OrderController.php:1116 +#: includes/REST/OrderController.php:1117 msgid "Shipping address." msgstr "" -#: includes/REST/OrderController.php:1168 +#: includes/REST/OrderController.php:1169 msgid "Payment method ID." msgstr "" -#: includes/REST/OrderController.php:1173 +#: includes/REST/OrderController.php:1174 msgid "Payment method title." msgstr "" -#: includes/REST/OrderController.php:1178 +#: includes/REST/OrderController.php:1179 msgid "Unique transaction ID." msgstr "" -#: includes/REST/OrderController.php:1183 +#: includes/REST/OrderController.php:1184 msgid "The date the order was paid, in the site's timezone." msgstr "" -#: includes/REST/OrderController.php:1189 +#: includes/REST/OrderController.php:1190 msgid "The date the order was paid, as GMT." msgstr "" -#: includes/REST/OrderController.php:1195 +#: includes/REST/OrderController.php:1196 msgid "The date the order was completed, in the site's timezone." msgstr "" -#: includes/REST/OrderController.php:1201 +#: includes/REST/OrderController.php:1202 msgid "The date the order was completed, as GMT." msgstr "" -#: includes/REST/OrderController.php:1207 +#: includes/REST/OrderController.php:1208 msgid "MD5 hash of cart items to ensure orders are not modified." msgstr "" -#: includes/REST/OrderController.php:1239 +#: includes/REST/OrderController.php:1240 msgid "Line items data." msgstr "" -#: includes/REST/OrderController.php:1246 -#: includes/REST/OrderController.php:1374 -#: includes/REST/OrderController.php:1452 -#: includes/REST/OrderController.php:1538 -#: includes/REST/OrderController.php:1636 +#: includes/REST/OrderController.php:1247 +#: includes/REST/OrderController.php:1375 +#: includes/REST/OrderController.php:1453 +#: includes/REST/OrderController.php:1539 +#: includes/REST/OrderController.php:1637 msgid "Item ID." msgstr "" -#: includes/REST/OrderController.php:1257 +#: includes/REST/OrderController.php:1258 #: includes/REST/OrderControllerV2.php:76 msgid "Product ID." msgstr "" -#: includes/REST/OrderController.php:1262 +#: includes/REST/OrderController.php:1263 msgid "Variation ID, if applicable." msgstr "" -#: includes/REST/OrderController.php:1267 +#: includes/REST/OrderController.php:1268 msgid "Quantity ordered." msgstr "" -#: includes/REST/OrderController.php:1272 +#: includes/REST/OrderController.php:1273 msgid "Tax class of product." msgstr "" -#: includes/REST/OrderController.php:1277 +#: includes/REST/OrderController.php:1278 msgid "Line subtotal (before discounts)." msgstr "" -#: includes/REST/OrderController.php:1282 +#: includes/REST/OrderController.php:1283 msgid "Line subtotal tax (before discounts)." msgstr "" -#: includes/REST/OrderController.php:1288 -#: includes/REST/OrderController.php:1468 -#: includes/REST/OrderController.php:1560 +#: includes/REST/OrderController.php:1289 +#: includes/REST/OrderController.php:1469 +#: includes/REST/OrderController.php:1561 msgid "Line total (after discounts)." msgstr "" -#: includes/REST/OrderController.php:1293 -#: includes/REST/OrderController.php:1473 -#: includes/REST/OrderController.php:1565 +#: includes/REST/OrderController.php:1294 +#: includes/REST/OrderController.php:1474 +#: includes/REST/OrderController.php:1566 msgid "Line total tax (after discounts)." msgstr "" -#: includes/REST/OrderController.php:1299 -#: includes/REST/OrderController.php:1479 -#: includes/REST/OrderController.php:1571 +#: includes/REST/OrderController.php:1300 +#: includes/REST/OrderController.php:1480 +#: includes/REST/OrderController.php:1572 msgid "Line taxes." msgstr "" -#: includes/REST/OrderController.php:1307 -#: includes/REST/OrderController.php:1386 -#: includes/REST/OrderController.php:1487 -#: includes/REST/OrderController.php:1579 +#: includes/REST/OrderController.php:1308 +#: includes/REST/OrderController.php:1387 +#: includes/REST/OrderController.php:1488 +#: includes/REST/OrderController.php:1580 msgid "Tax rate ID." msgstr "" -#: includes/REST/OrderController.php:1312 -#: includes/REST/OrderController.php:1493 -#: includes/REST/OrderController.php:1585 +#: includes/REST/OrderController.php:1313 +#: includes/REST/OrderController.php:1494 +#: includes/REST/OrderController.php:1586 msgid "Tax total." msgstr "" -#: includes/REST/OrderController.php:1317 -#: includes/REST/OrderController.php:1591 +#: includes/REST/OrderController.php:1318 +#: includes/REST/OrderController.php:1592 msgid "Tax subtotal." msgstr "" -#: includes/REST/OrderController.php:1351 +#: includes/REST/OrderController.php:1352 msgid "Product SKU." msgstr "" -#: includes/REST/OrderController.php:1357 +#: includes/REST/OrderController.php:1358 msgid "Product price." msgstr "" -#: includes/REST/OrderController.php:1366 +#: includes/REST/OrderController.php:1367 msgid "Tax lines data." msgstr "" -#: includes/REST/OrderController.php:1380 +#: includes/REST/OrderController.php:1381 msgid "Tax rate code." msgstr "" -#: includes/REST/OrderController.php:1392 +#: includes/REST/OrderController.php:1393 msgid "Tax rate label." msgstr "" -#: includes/REST/OrderController.php:1398 +#: includes/REST/OrderController.php:1399 msgid "Show if is a compound tax rate." msgstr "" -#: includes/REST/OrderController.php:1404 +#: includes/REST/OrderController.php:1405 msgid "Tax total (not including shipping taxes)." msgstr "" -#: includes/REST/OrderController.php:1410 +#: includes/REST/OrderController.php:1411 msgid "Shipping tax total." msgstr "" -#: includes/REST/OrderController.php:1445 +#: includes/REST/OrderController.php:1446 msgid "Shipping lines data." msgstr "" -#: includes/REST/OrderController.php:1458 +#: includes/REST/OrderController.php:1459 msgid "Shipping method name." msgstr "" -#: includes/REST/OrderController.php:1463 +#: includes/REST/OrderController.php:1464 msgid "Shipping method ID." msgstr "" -#: includes/REST/OrderController.php:1531 +#: includes/REST/OrderController.php:1532 msgid "Fee lines data." msgstr "" -#: includes/REST/OrderController.php:1544 +#: includes/REST/OrderController.php:1545 msgid "Fee name." msgstr "" -#: includes/REST/OrderController.php:1549 +#: includes/REST/OrderController.php:1550 msgid "Tax class of fee." msgstr "" -#: includes/REST/OrderController.php:1554 +#: includes/REST/OrderController.php:1555 msgid "Tax status of fee." msgstr "" -#: includes/REST/OrderController.php:1629 +#: includes/REST/OrderController.php:1630 msgid "Coupons line data." msgstr "" -#: includes/REST/OrderController.php:1642 +#: includes/REST/OrderController.php:1643 msgid "Coupon code." msgstr "" -#: includes/REST/OrderController.php:1647 +#: includes/REST/OrderController.php:1648 msgid "Discount total." msgstr "" -#: includes/REST/OrderController.php:1652 +#: includes/REST/OrderController.php:1653 msgid "Discount total tax." msgstr "" -#: includes/REST/OrderController.php:1687 +#: includes/REST/OrderController.php:1688 msgid "List of refunds." msgstr "" -#: includes/REST/OrderController.php:1695 +#: includes/REST/OrderController.php:1696 msgid "Refund ID." msgstr "" -#: includes/REST/OrderController.php:1701 +#: includes/REST/OrderController.php:1702 msgid "Refund reason." msgstr "" -#: includes/REST/OrderController.php:1707 +#: includes/REST/OrderController.php:1708 msgid "Refund total." msgstr "" -#: includes/REST/OrderController.php:1716 +#: includes/REST/OrderController.php:1717 msgid "Define if the order is paid. It will set the status to processing and reduce stock items." msgstr "" -#: includes/REST/OrderController.php:1778 +#: includes/REST/OrderController.php:1779 msgid "Limit response to resources published after a given ISO8601 compliant date." msgstr "" -#: includes/REST/OrderController.php:1785 +#: includes/REST/OrderController.php:1786 msgid "Limit response to resources published before a given ISO8601 compliant date." msgstr "" @@ -5795,79 +5825,76 @@ msgstr "" msgid "Formatted Action Taken Message" msgstr "" -#: includes/REST/StoreController.php:79 +#: includes/REST/StoreController.php:81 msgid "Reassign the deleted user's posts and links to this user ID." msgstr "" -#: includes/REST/StoreController.php:150 +#: includes/REST/StoreController.php:152 #: templates/widgets/store-contact-form.php:15 #: assets/js/vue-admin.js:2 msgid "Your Name" msgstr "" -#: includes/REST/StoreController.php:156 +#: includes/REST/StoreController.php:158 msgid "Your email" msgstr "" -#: includes/REST/StoreController.php:161 +#: includes/REST/StoreController.php:163 msgid "Your Message" msgstr "" -#: includes/REST/StoreController.php:179 +#: includes/REST/StoreController.php:181 msgid "Status for the store object." msgstr "" -#: includes/REST/StoreController.php:210 +#: includes/REST/StoreController.php:212 msgid "Get Best Selling Products Category." msgstr "" -#: includes/REST/StoreController.php:317 -#: includes/REST/StoreController.php:388 -#: includes/REST/StoreController.php:548 -#: includes/REST/StoreController.php:944 -msgid "No store found" -msgstr "" - -#: includes/REST/StoreController.php:340 -#: includes/REST/StoreController.php:866 -msgid "No vendor found for updating status" +#: includes/REST/StoreController.php:339 +msgid "Invalid user ID for reassignment." msgstr "" -#: includes/REST/StoreController.php:345 -msgid "Invalid user ID for reassignment." +#: includes/REST/StoreController.php:538 +#: includes/REST/StoreController.php:934 +msgid "No store found" msgstr "" -#: includes/REST/StoreController.php:566 -#: includes/REST/StoreController.php:585 +#: includes/REST/StoreController.php:556 +#: includes/REST/StoreController.php:575 msgid "No reviews found" msgstr "" -#: includes/REST/StoreController.php:770 +#: includes/REST/StoreController.php:760 msgid "This email address is not valid" msgstr "" -#: includes/REST/StoreController.php:813 +#: includes/REST/StoreController.php:803 msgid "No vendor is found to be send an email." msgstr "" -#: includes/REST/StoreController.php:860 +#: includes/REST/StoreController.php:850 msgid "Status parameter must be active or inactive" msgstr "" -#: includes/REST/StoreController.php:894 +#: includes/REST/StoreController.php:856 +msgid "No vendor found for updating status" +msgstr "" + +#: includes/REST/StoreController.php:884 msgid "No items found for bulk updating" msgstr "" -#: includes/REST/StoreController.php:963 +#: includes/REST/StoreController.php:953 msgid "Status of the store" msgstr "" -#: includes/REST/StoreController.php:970 +#: includes/REST/StoreController.php:960 msgid "Store List Order By" msgstr "" -#: includes/REST/StoreController.php:976 -#: includes/REST/StoreController.php:982 +#: includes/REST/StoreController.php:966 +#: includes/REST/StoreController.php:972 msgid "Store List Order" msgstr "" @@ -6460,7 +6487,7 @@ msgid "We need to update your install to the latest version" msgstr "" #: includes/Upgrade/AdminNotice.php:45 -#: templates/orders/details.php:199 +#: templates/orders/details.php:194 msgid "Update" msgstr "" @@ -7002,26 +7029,26 @@ msgstr "" msgid "Switched back to %1$s (%2$s)." msgstr "" -#: includes/Vendor/Vendor.php:949 +#: includes/Vendor/Vendor.php:955 msgid "No ratings found yet!" msgstr "" -#: includes/Vendor/Vendor.php:951 +#: includes/Vendor/Vendor.php:957 msgid "%s rating from %d review" msgid_plural "%s rating from %d reviews" msgstr[0] "" msgstr[1] "" -#: includes/Vendor/Vendor.php:952 +#: includes/Vendor/Vendor.php:958 msgid "Rated %s out of %d" msgstr "" -#: includes/Vendor/Vendor.php:1063 +#: includes/Vendor/Vendor.php:1069 #: templates/settings/store-form.php:274 msgid "Store is open" msgstr "" -#: includes/Vendor/Vendor.php:1077 +#: includes/Vendor/Vendor.php:1083 #: templates/settings/store-form.php:282 msgid "Store is closed" msgstr "" @@ -7030,15 +7057,7 @@ msgstr "" msgid "Product SKU must be unique" msgstr "" -#: includes/wc-functions.php:769 -msgid "Your {site_title} order receipt from {order_date}" -msgstr "" - -#: includes/wc-functions.php:770 -msgid "Your {site_title} order from {order_date} is complete" -msgstr "" - -#: includes/wc-functions.php:873 +#: includes/wc-functions.php:817 #: templates/account/update-customer-to-vendor.php:23 #: templates/account/vendor-registration.php:9 #: templates/global/seller-registration-form.php:13 @@ -7047,7 +7066,7 @@ msgstr "" msgid "First Name" msgstr "" -#: includes/wc-functions.php:874 +#: includes/wc-functions.php:818 #: templates/account/update-customer-to-vendor.php:27 #: templates/account/vendor-registration.php:14 #: templates/global/seller-registration-form.php:18 @@ -7056,76 +7075,65 @@ msgstr "" msgid "Last Name" msgstr "" -#: includes/wc-functions.php:875 +#: includes/wc-functions.php:819 #: templates/account/vendor-registration.php:27 #: templates/dashboard/edit-account.php:65 msgid "Email address" msgstr "" -#: includes/wc-functions.php:881 +#: includes/wc-functions.php:825 msgid "is a required field." msgstr "" -#: includes/wc-functions.php:887 +#: includes/wc-functions.php:831 msgid "Please provide a valid email address." msgstr "" -#: includes/wc-functions.php:889 +#: includes/wc-functions.php:833 msgid "This email address is already registered." msgstr "" -#: includes/wc-functions.php:895 +#: includes/wc-functions.php:839 msgid "Your current password is incorrect." msgstr "" -#: includes/wc-functions.php:900 +#: includes/wc-functions.php:844 msgid "Please fill out all password fields." msgstr "" -#: includes/wc-functions.php:903 +#: includes/wc-functions.php:847 msgid "Please enter your current password." msgstr "" -#: includes/wc-functions.php:906 +#: includes/wc-functions.php:850 msgid "Please re-enter your password." msgstr "" -#: includes/wc-functions.php:909 +#: includes/wc-functions.php:853 msgid "New passwords do not match." msgstr "" -#: includes/wc-functions.php:929 +#: includes/wc-functions.php:873 msgid "Account details changed successfully." msgstr "" -#: includes/wc-functions.php:1056 +#: includes/wc-functions.php:919 msgid "More Products" msgstr "" -#: includes/wc-functions.php:1109 +#: includes/wc-functions.php:972 msgid "No product has been found!" msgstr "" -#: includes/wc-functions.php:1301 +#: includes/wc-functions.php:1030 msgid "Reviews cannot be posted for products that you own." msgstr "" -#. translators: 1) time format -#: includes/wc-legacy-functions.php:72 -msgid "Order – %s" -msgstr "" - -#. translators: 1) time format -#: includes/wc-legacy-functions.php:72 -msgctxt "Order date parsed by strftime" -msgid "%1$b %2$d, %Y @ %I:%M %p" -msgstr "" - -#: includes/wc-template.php:176 +#: includes/wc-template.php:169 msgid "β€” No change β€”" msgstr "" -#: includes/wc-template.php:285 +#: includes/wc-template.php:278 msgid "Go to Vendor Dashboard" msgstr "" @@ -7706,7 +7714,7 @@ msgstr "" #: templates/dashboard/big-counter-widget.php:21 #: templates/orders/listing.php:32 -#: templates/orders/listing.php:77 +#: templates/orders/listing.php:80 msgid "Earning" msgstr "" @@ -8187,12 +8195,12 @@ msgid "My Account" msgstr "" #: templates/global/header-menu.php:56 -#: templates/orders/details.php:126 +#: templates/orders/details.php:121 msgid "Billing Address" msgstr "" #: templates/global/header-menu.php:57 -#: templates/orders/details.php:141 +#: templates/orders/details.php:136 msgid "Shipping Address" msgstr "" @@ -8269,13 +8277,13 @@ msgstr "" msgid "Search Address" msgstr "" -#: templates/my-orders.php:26 +#: templates/my-orders.php:20 msgid "Recent Orders" msgstr "" -#: templates/my-orders.php:32 +#: templates/my-orders.php:26 #: templates/orders/listing.php:35 -#: templates/orders/listing.php:106 +#: templates/orders/listing.php:93 #: templates/products/products-listing-row.php:125 #: templates/products/products-listing.php:123 #: templates/reverse-withdrawal/transaction-listing.php:19 @@ -8291,22 +8299,22 @@ msgstr "" #. translators: 1) order total amount 2) item count #. translators: 1) order total amount 2) order item count -#: templates/my-orders.php:69 -#: templates/sub-orders.php:89 +#: templates/my-orders.php:63 +#: templates/sub-orders.php:85 msgid "%1$s for %2$s item" msgid_plural "%1$s for %2$s items" msgstr[0] "" msgstr[1] "" -#: templates/my-orders.php:82 +#: templates/my-orders.php:76 msgid "Multiple Vendor" msgstr "" -#: templates/my-orders.php:94 +#: templates/my-orders.php:88 msgid "Pay" msgstr "" -#: templates/my-orders.php:127 +#: templates/my-orders.php:121 msgid "No orders found!" msgstr "" @@ -8354,119 +8362,119 @@ msgstr "" msgid "This is not yours, I swear!" msgstr "" -#: templates/orders/details.php:30 +#: templates/orders/details.php:29 msgid "Item" msgstr "" -#: templates/orders/details.php:34 +#: templates/orders/details.php:33 msgid "Qty" msgstr "" -#: templates/orders/details.php:36 +#: templates/orders/details.php:35 msgid "Totals" msgstr "" -#: templates/orders/details.php:99 +#: templates/orders/details.php:94 #: assets/js/vue-admin.js:2 msgid "Coupons" msgstr "" -#: templates/orders/details.php:132 +#: templates/orders/details.php:127 msgid "No billing address set." msgstr "" -#: templates/orders/details.php:147 +#: templates/orders/details.php:142 msgid "No shipping address set." msgstr "" -#: templates/orders/details.php:158 +#: templates/orders/details.php:153 msgid "Downloadable Product Permission" msgstr "" -#: templates/orders/details.php:173 +#: templates/orders/details.php:168 msgid "General Details" msgstr "" -#: templates/orders/details.php:177 +#: templates/orders/details.php:172 msgid "Order Status:" msgstr "" -#: templates/orders/details.php:181 +#: templates/orders/details.php:176 msgid "  Edit" msgstr "" -#: templates/orders/details.php:207 +#: templates/orders/details.php:202 msgid "Order Date:" msgstr "" -#: templates/orders/details.php:211 +#: templates/orders/details.php:206 msgid "Earning From Order:" msgstr "" -#: templates/orders/details.php:218 +#: templates/orders/details.php:213 msgid "Customer:" msgstr "" -#: templates/orders/details.php:231 +#: templates/orders/details.php:217 msgid "Email:" msgstr "" -#: templates/orders/details.php:235 +#: templates/orders/details.php:221 msgid "Phone:" msgstr "" -#: templates/orders/details.php:239 +#: templates/orders/details.php:225 msgid "Customer IP:" msgstr "" -#: templates/orders/details.php:255 +#: templates/orders/details.php:240 msgid "Customer Note:" msgstr "" -#: templates/orders/details.php:268 +#: templates/orders/details.php:253 msgid "Order Notes" msgstr "" #. translators: 1) human-readable date -#: templates/orders/details.php:295 +#: templates/orders/details.php:280 msgid "added %s ago" msgstr "" -#: templates/orders/details.php:305 +#: templates/orders/details.php:290 msgid "There are no notes for this order yet." msgstr "" -#: templates/orders/details.php:314 +#: templates/orders/details.php:299 msgid "Add note" msgstr "" -#: templates/orders/details.php:322 +#: templates/orders/details.php:307 msgid "Customer note" msgstr "" -#: templates/orders/details.php:323 +#: templates/orders/details.php:308 msgid "Private note" msgstr "" -#: templates/orders/details.php:331 +#: templates/orders/details.php:316 #: assets/js/vue-admin.js:2 msgid "Add Note" msgstr "" -#: templates/orders/details.php:338 -#: templates/orders/details.php:347 +#: templates/orders/details.php:323 +#: templates/orders/details.php:332 msgid "Tracking Number" msgstr "" -#: templates/orders/details.php:342 +#: templates/orders/details.php:327 msgid "Shipping Provider Name / URL" msgstr "" -#: templates/orders/details.php:352 +#: templates/orders/details.php:337 msgid "Date Shipped" msgstr "" -#: templates/orders/details.php:360 +#: templates/orders/details.php:345 msgid "Add Tracking Details" msgstr "" @@ -8485,7 +8493,7 @@ msgid "Select bulk action" msgstr "" #: templates/orders/listing.php:34 -#: templates/orders/listing.php:83 +#: templates/orders/listing.php:86 msgid "Customer" msgstr "" @@ -8495,23 +8503,23 @@ msgid "Shipment" msgstr "" #: templates/orders/listing.php:41 -#: templates/orders/listing.php:136 +#: templates/orders/listing.php:122 #: templates/products/downloadable.php:40 msgid "Action" msgstr "" #. translators: 1) order number -#: templates/orders/listing.php:61 -#: templates/orders/listing.php:67 +#: templates/orders/listing.php:64 +#: templates/orders/listing.php:70 msgid "Order %s" msgstr "" -#: templates/orders/listing.php:100 +#: templates/orders/listing.php:89 msgid "Guest" msgstr "" -#: templates/orders/listing.php:109 -#: templates/orders/listing.php:110 +#: templates/orders/listing.php:96 +#: templates/orders/listing.php:97 #: templates/products/products-listing-row.php:131 #: templates/products/products-listing-row.php:132 msgid "Unpublished" @@ -8519,21 +8527,21 @@ msgstr "" #. translators: 1) human-readable date #. translators: %s: time difference -#: templates/orders/listing.php:119 +#: templates/orders/listing.php:105 #: templates/products/products-listing-row.php:153 msgid "%s ago" msgstr "" -#: templates/orders/listing.php:130 -#: templates/sub-orders.php:80 +#: templates/orders/listing.php:116 +#: templates/sub-orders.php:76 msgid "Shipping Status" msgstr "" -#: templates/orders/listing.php:155 +#: templates/orders/listing.php:141 msgid "Complete" msgstr "" -#: templates/orders/listing.php:207 +#: templates/orders/listing.php:193 msgid "No orders found" msgstr "" diff --git a/package-lock.json b/package-lock.json index ed55ec0eaa..fa5d937f36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "dokan", - "version": "3.7.24", + "version": "3.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dokan", - "version": "3.7.24", + "version": "3.8.0", "license": "GPL", "devDependencies": { - "@wordpress/scripts": "^26.8.0", + "@wordpress/scripts": "^26.11.0", "chartjs-adapter-moment": "^1.0.1", "debounce": "^1.2.1", "fs-extra": "^10.1.0", @@ -70,9 +70,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", - "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -109,20 +109,20 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.7.tgz", - "integrity": "sha512-LH6HJqjOyu/Qtp7LuSycZXK/CYXQ4ohdkliEaL1QTdtOXVdOVpTBKVxAo/+eeyt+x/2SRzB+zUPduVl+xiEvdg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.10.tgz", + "integrity": "sha512-0J8DNPRXQRLeR9rPaUMM3fA+RbixjnVLe/MRMYCkp3hzgsSuxCHQ8NN8xQG1wIHKJ4a1DTROTvFJdW+B5/eOsg==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "eslint-visitor-keys": "^2.1.0" + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || >=14.0.0" }, "peerDependencies": { - "@babel/core": ">=7.11.0", + "@babel/core": "^7.11.0", "eslint": "^7.5.0 || ^8.0.0" } }, @@ -154,40 +154,37 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", - "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.6", + "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", "browserslist": "^4.21.9", - "lru-cache": "^5.1.1" + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", + "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -195,10 +192,10 @@ "@babel/helper-function-name": "^7.22.5", "@babel/helper-member-expression-to-functions": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -208,14 +205,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -225,9 +222,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz", - "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -237,7 +234,7 @@ "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { @@ -339,15 +336,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-wrap-function": "^7.22.9" }, "engines": { "node": ">=6.9.0" @@ -357,20 +353,20 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { @@ -398,9 +394,9 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" @@ -437,15 +433,14 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" @@ -606,22 +601,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -915,14 +894,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", + "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -965,9 +944,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1013,19 +992,19 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, "engines": { @@ -1052,9 +1031,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1421,9 +1400,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", + "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1582,13 +1561,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1613,17 +1592,17 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.7.tgz", - "integrity": "sha512-o02xM7iY7mSPI+TvaYDH0aYl+lg3+KT7qrD705JlsB/GrZSNaYO/4i+aDFKPiJ7ubq3hgv8NNLCdyB5MFxT8mg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", + "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1" + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1709,13 +1688,13 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", - "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz", + "integrity": "sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.10", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-typescript": "^7.22.5" }, @@ -1727,9 +1706,9 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1790,13 +1769,13 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", + "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", @@ -1821,15 +1800,15 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.10", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.10", "@babel/plugin-transform-class-properties": "^7.22.5", "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.10", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", "@babel/plugin-transform-dynamic-import": "^7.22.5", @@ -1852,29 +1831,29 @@ "@babel/plugin-transform-object-rest-spread": "^7.22.5", "@babel/plugin-transform-object-super": "^7.22.5", "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.10", "@babel/plugin-transform-parameters": "^7.22.5", "@babel/plugin-transform-private-methods": "^7.22.5", "@babel/plugin-transform-private-property-in-object": "^7.22.5", "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", "@babel/plugin-transform-shorthand-properties": "^7.22.5", "@babel/plugin-transform-spread": "^7.22.5", "@babel/plugin-transform-sticky-regex": "^7.22.5", "@babel/plugin-transform-template-literals": "^7.22.5", "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", "@babel/plugin-transform-unicode-property-regex": "^7.22.5", "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.10", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1884,19 +1863,17 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-react": { @@ -1945,12 +1922,12 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", + "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -1992,9 +1969,9 @@ } }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", @@ -2037,17 +2014,17 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz", - "integrity": "sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==", + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz", + "integrity": "sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg==", "dev": true, "dependencies": { - "comment-parser": "1.3.1", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~3.1.0" + "comment-parser": "1.4.0", + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" }, "engines": { - "node": "^14 || ^16 || ^17 || ^18 || ^19" + "node": ">=16" } }, "node_modules/@eslint-community/eslint-utils": { @@ -2066,9 +2043,9 @@ } }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2078,18 +2055,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -2116,9 +2093,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2155,9 +2132,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", + "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2298,16 +2275,16 @@ } }, "node_modules/@jest/console": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.1.tgz", - "integrity": "sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", + "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", "slash": "^3.0.0" }, "engines": { @@ -2315,15 +2292,15 @@ } }, "node_modules/@jest/core": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.1.tgz", - "integrity": "sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", + "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", "dev": true, "dependencies": { - "@jest/console": "^29.6.1", - "@jest/reporters": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", + "@jest/console": "^29.6.2", + "@jest/reporters": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "ansi-escapes": "^4.2.1", @@ -2332,20 +2309,20 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.9", "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", + "jest-config": "^29.6.2", + "jest-haste-map": "^29.6.2", + "jest-message-util": "^29.6.2", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-resolve-dependencies": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "jest-watcher": "^29.6.1", + "jest-resolve": "^29.6.2", + "jest-resolve-dependencies": "^29.6.2", + "jest-runner": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "jest-watcher": "^29.6.2", "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", + "pretty-format": "^29.6.2", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -2362,37 +2339,37 @@ } }, "node_modules/@jest/environment": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.1.tgz", - "integrity": "sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", + "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.6.1", + "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", - "jest-mock": "^29.6.1" + "jest-mock": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.1.tgz", - "integrity": "sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", + "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", "dev": true, "dependencies": { - "expect": "^29.6.1", - "jest-snapshot": "^29.6.1" + "expect": "^29.6.2", + "jest-snapshot": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.1.tgz", - "integrity": "sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", + "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3" @@ -2402,47 +2379,47 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.1.tgz", - "integrity": "sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", + "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" + "jest-message-util": "^29.6.2", + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.1.tgz", - "integrity": "sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", + "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", + "@jest/environment": "^29.6.2", + "@jest/expect": "^29.6.2", "@jest/types": "^29.6.1", - "jest-mock": "^29.6.1" + "jest-mock": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.1.tgz", - "integrity": "sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", + "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", + "@jest/console": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", @@ -2456,9 +2433,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", + "jest-worker": "^29.6.2", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -2503,12 +2480,12 @@ } }, "node_modules/@jest/test-result": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.1.tgz", - "integrity": "sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", + "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", "dev": true, "dependencies": { - "@jest/console": "^29.6.1", + "@jest/console": "^29.6.2", "@jest/types": "^29.6.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" @@ -2518,14 +2495,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz", - "integrity": "sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", + "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.1", + "@jest/test-result": "^29.6.2", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", + "jest-haste-map": "^29.6.2", "slash": "^3.0.0" }, "engines": { @@ -2533,9 +2510,9 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.1.tgz", - "integrity": "sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", + "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -2546,9 +2523,9 @@ "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", + "jest-haste-map": "^29.6.2", "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", + "jest-util": "^29.6.2", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -2667,15 +2644,6 @@ "eslint-scope": "5.1.1" } }, - "node_modules/@nicolo-ribaudo/semver-v6": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", - "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2813,12 +2781,12 @@ } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -2861,12 +2829,12 @@ } }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -2877,12 +2845,12 @@ } }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -2893,12 +2861,12 @@ } }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -2909,12 +2877,12 @@ } }, "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -2925,9 +2893,9 @@ } }, "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", "dev": true, "engines": { "node": ">=12" @@ -2941,22 +2909,22 @@ } }, "node_modules/@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", "dev": true, "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -2967,36 +2935,72 @@ } }, "node_modules/@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@svgr/core/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@svgr/core/node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/@svgr/core/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", "dev": true, "dependencies": { - "@babel/types": "^7.20.0", + "@babel/types": "^7.21.3", "entities": "^4.4.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -3004,39 +3008,39 @@ } }, "node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", "dev": true, "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", "svg-parser": "^2.0.4" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { - "@svgr/core": "^6.0.0" + "@svgr/core": "*" } }, "node_modules/@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", + "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", "dev": true, "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -3046,23 +3050,59 @@ "@svgr/core": "*" } }, + "node_modules/@svgr/plugin-svgo/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", + "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", "dev": true, "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", + "@babel/core": "^7.21.3", + "@babel/plugin-transform-react-constant-elements": "^7.21.3", + "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" + "@babel/preset-typescript": "^7.21.0", + "@svgr/core": "8.1.0", + "@svgr/plugin-jsx": "8.1.0", + "@svgr/plugin-svgo": "8.1.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -3336,12 +3376,6 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", @@ -3361,9 +3395,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", - "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", + "version": "18.2.20", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz", + "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -3372,9 +3406,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", - "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", "dev": true, "dependencies": { "@types/react": "*" @@ -3834,9 +3868,9 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4115,9 +4149,9 @@ } }, "node_modules/@wordpress/babel-plugin-import-jsx-pragma": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.20.0.tgz", - "integrity": "sha512-vJAlUVFjyg+l+SiB8C5T1AWYsXDXZFpIITP5WfXAh4+6DG7R3JE+yUugHM3WLmPzCU57/mUfhyouq8blvsMk7A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.23.0.tgz", + "integrity": "sha512-DeHoDuS+KKxfGaBWXxMJP4uKqrfGGRKMTBRchUPTvqBScPvgrr2IYDZIP6vp6Q9uUV5fnIUcniXLGIMuzsrcdw==", "dev": true, "engines": { "node": ">=14" @@ -4127,9 +4161,9 @@ } }, "node_modules/@wordpress/babel-preset-default": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.21.0.tgz", - "integrity": "sha512-5y9aNNEvw16Zz7b3K4OvfFPProxyQEbAK+cS252f7e3qQska5H1S1tVfR5ZCns8X3Aoccc8/odR8safj8zhILA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.24.0.tgz", + "integrity": "sha512-0iiawRHVBObVBROrhF8xXHreo7Ns7K6K7SyrZGmzbgTmhHhmWqxca3oWrMR9LQNCg4jZL8PNAZKRNoWD66/G+A==", "dev": true, "dependencies": { "@babel/core": "^7.16.0", @@ -4138,36 +4172,36 @@ "@babel/preset-env": "^7.16.0", "@babel/preset-typescript": "^7.16.0", "@babel/runtime": "^7.16.0", - "@wordpress/babel-plugin-import-jsx-pragma": "^4.20.0", - "@wordpress/browserslist-config": "^5.20.0", - "@wordpress/element": "^5.14.0", - "@wordpress/warning": "^2.37.0", - "browserslist": "^4.17.6", - "core-js": "^3.19.1" + "@wordpress/babel-plugin-import-jsx-pragma": "^4.23.0", + "@wordpress/browserslist-config": "^5.23.0", + "@wordpress/element": "^5.17.0", + "@wordpress/warning": "^2.40.0", + "browserslist": "^4.21.9", + "core-js": "^3.31.0" }, "engines": { "node": ">=14" } }, "node_modules/@wordpress/base-styles": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.28.0.tgz", - "integrity": "sha512-ibg63Pc0oS2WGoW72bdRDSrbbJZ4i2OcOPXb135gdvT1P89sGQK/hGFHqPyaRzi4yI+sUuyFDEwlsvOIBfh12w==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.31.0.tgz", + "integrity": "sha512-DoxvmbRYykKFyvTfGVXqM8zu+V73pcFRq/AfmzJqJsA+fEKVUKS8Oc+DctGWNXKuw5bOyU/fhz15eVTKPsT3lg==", "dev": true }, "node_modules/@wordpress/browserslist-config": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.20.0.tgz", - "integrity": "sha512-lPkYEArqFjSFESnY4+f0lxqq7hLNcBhVuNxiHXv+i9yo3s5bhzrkfehoWEPEAmyq70/W2MMCJp8y6f0hGKBbaQ==", + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.23.0.tgz", + "integrity": "sha512-eLnwHp6G3jv9g3aCF3nU0W0fL0WvetjrLrlRSPWLt/EPfTTtkzpgx8NCuckNrcSCZxT867g1bFzaR77D3nk2Zw==", "dev": true, "engines": { "node": ">=14" } }, "node_modules/@wordpress/dependency-extraction-webpack-plugin": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-4.20.0.tgz", - "integrity": "sha512-YeQZGRHN7VFQWWzqznsackW3OC3SVEcRU03Ore9RWA58d4QuYCsnLq2YLrZDqEgJDnh9mO7b7Ac4SrZADkmhnA==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-4.23.0.tgz", + "integrity": "sha512-TG9sTu0CVOjFAQMpLk9DR86z892G7Of5jii9KvoLlEDc9RRzHHq4bgDFPrI135Xay/jxb0+3YVDwRlcMPYa2Kg==", "dev": true, "dependencies": { "json2php": "^0.0.7", @@ -4181,15 +4215,15 @@ } }, "node_modules/@wordpress/element": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.14.0.tgz", - "integrity": "sha512-W2lBumRvJ3UvB1qZaWAp268xvirZEzFwyS/epLUPIPOnIW4u7UBfEmEbhPx55KSuTFHSR/hbiYSuWBdbVpd8tA==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.17.0.tgz", + "integrity": "sha512-sVjVWlKnpzTM4kfwfTgT9TtCcqqb3MqII9cLzM3DCVDFIUrudEUlbqX9lUCnnSfWCjoQ/YPaWg4LikKrRVmPQw==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", "@types/react": "^18.0.21", "@types/react-dom": "^18.0.6", - "@wordpress/escape-html": "^2.37.0", + "@wordpress/escape-html": "^2.40.0", "change-case": "^4.1.2", "is-plain-object": "^5.0.0", "react": "^18.2.0", @@ -4200,9 +4234,9 @@ } }, "node_modules/@wordpress/escape-html": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.37.0.tgz", - "integrity": "sha512-YJZAsZIWLx+RMs2TyxqqR1w7oXbedE/zrtBJh5/Gbt0UIP64/gQOgoRaEX3EhPOFd7lGWzWr/vH0tgLVGm2jJg==", + "version": "2.40.0", + "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.40.0.tgz", + "integrity": "sha512-hWbtydaYHud/qbXauCNR1h5pfmXJQwzdKfdQUMqEjms2sqm2nQQXGxi/t8CLc2HjrNenzHqOZaonfQ/nx+1l1A==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -4212,21 +4246,21 @@ } }, "node_modules/@wordpress/eslint-plugin": { - "version": "14.10.0", - "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-14.10.0.tgz", - "integrity": "sha512-Z+VYxrYJrORcsEmQeoN39Nf0CwqUbUj4kZ5z6zwI6bw1UTOf4hd9oDqeK2D6N8aHBVOIvGi2p7Dyameu7bbsZg==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-15.0.0.tgz", + "integrity": "sha512-XEHNW3YEjN+G8Di4Z8W0WL8m0y9uoBbw4MKmYV+u1whiEuS+s+D4nVmG/d+AH1tWJ17LzfZJTiSL6J09KCY4tg==", "dev": true, "dependencies": { "@babel/eslint-parser": "^7.16.0", - "@typescript-eslint/eslint-plugin": "^5.3.0", - "@typescript-eslint/parser": "^5.3.0", - "@wordpress/babel-preset-default": "^7.21.0", - "@wordpress/prettier-config": "^2.20.0", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "@wordpress/babel-preset-default": "^7.24.0", + "@wordpress/prettier-config": "^2.23.0", "cosmiconfig": "^7.0.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.25.2", "eslint-plugin-jest": "^27.2.1", - "eslint-plugin-jsdoc": "^39.6.9", + "eslint-plugin-jsdoc": "^46.4.6", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-prettier": "^3.3.0", "eslint-plugin-react": "^7.27.0", @@ -4254,9 +4288,9 @@ } }, "node_modules/@wordpress/eslint-plugin/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4281,9 +4315,9 @@ } }, "node_modules/@wordpress/jest-console": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.8.0.tgz", - "integrity": "sha512-4yFxec0SXLmkZL+Y8TlhWwHzN+ux3d5PvCNrTMNcjpbOZkmBDFM165wXkcJsDbWT0BS6M7pJ0+BTnu8PTn7F3A==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.11.0.tgz", + "integrity": "sha512-WS/bEuVrLliW4BeITJpvbO7KjrVqNfdTAgeOxymvyUYCGVAGr3ANX9ONqzy3Pfs4F+cP+YWonb9yBaU26GVgqg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", @@ -4297,12 +4331,12 @@ } }, "node_modules/@wordpress/jest-preset-default": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.8.0.tgz", - "integrity": "sha512-nEwbApGOfOo855JYOmYULSIZ5oW960XZTZyeHe/9INDm9IqPsQVGTIT51w5HddZ8Zv/KFoJPZNH2Gmy0+QlCeA==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.11.0.tgz", + "integrity": "sha512-xGx6suet6iTyUAi+OsaUyVMi4AdhvwL8d7xkHYJ1Nvb8x5+T6krKwL+Pa9aQD7zhpNczsG5Bpt9vUMj4y7lStw==", "dev": true, "dependencies": { - "@wordpress/jest-console": "^7.8.0", + "@wordpress/jest-console": "^7.11.0", "babel-jest": "^29.5.0" }, "engines": { @@ -4314,24 +4348,24 @@ } }, "node_modules/@wordpress/npm-package-json-lint-config": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.22.0.tgz", - "integrity": "sha512-h00unYESqfZjUxeeDZQUKjTroWMZE1EmQhGq7HzH+Rf2/WaPb5WRRV5s4uf3wSGcYYImycqozlZRB0XaXG2LyQ==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.25.0.tgz", + "integrity": "sha512-cOGW1RDIpJgbh8XnSBBaY08QKUctIdm0ov6P+4/WuuodzbKndH+L2znHWSuS2+ZCnJ2GiUfFyyZTDgtdw5+ebQ==", "dev": true, "engines": { "node": ">=14" }, "peerDependencies": { - "npm-package-json-lint": ">=3.6.0" + "npm-package-json-lint": ">=6.0.0" } }, "node_modules/@wordpress/postcss-plugins-preset": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.21.0.tgz", - "integrity": "sha512-PDlbh4zO1X4MGT8yGEvtlhgywQHxyAf/heYnKVye+uaUEAqh85lspcca3P1I/qMH2FFw/VwS8w5C4FjFoN2eJA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.24.0.tgz", + "integrity": "sha512-byCYxLDO3lFIKLtRZsuvYeGfQIKyMbXKFWE9PF/p2bHScDN6mHx/QJHZAvoU2Enm+UjXrf51hFgukBqYDOhxdg==", "dev": true, "dependencies": { - "@wordpress/base-styles": "^4.28.0", + "@wordpress/base-styles": "^4.31.0", "autoprefixer": "^10.2.5" }, "engines": { @@ -4342,9 +4376,9 @@ } }, "node_modules/@wordpress/prettier-config": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-2.20.0.tgz", - "integrity": "sha512-YBGCqFmnxSZH50nBsa2LPPrzhX/OW8LpO2EcrLxnDk6Yen/+7fbbnmkC2IdYZ2+ty8bz2gs8Dcg48DTvLR6axQ==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-2.23.0.tgz", + "integrity": "sha512-OgShlK5TyaFFPyXq/pezgio98pbPF4kepclbxPK5YNOGah5IVhDCvdTKgPsvokdYvMSElTWKS8arCghZpbSLxg==", "dev": true, "engines": { "node": ">=14" @@ -4354,34 +4388,34 @@ } }, "node_modules/@wordpress/scripts": { - "version": "26.8.0", - "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-26.8.0.tgz", - "integrity": "sha512-lRPAURQo0QZBJcqX7jF8wrhN3bkDvkflru/s4+BGDz3X8iWM1ANuX9OWgNIqiOz4ZfT5Yo2X00s9HAExmMOnQA==", + "version": "26.11.0", + "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-26.11.0.tgz", + "integrity": "sha512-MdSCAslDwpGA8ll1TAjKbU2VzzoNgFGr3fpLX8RBc+ie097pYX3xX+JyiSMw0GzESHafdzyQK0GgySi3gZGOtQ==", "dev": true, "dependencies": { "@babel/core": "^7.16.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.2", - "@svgr/webpack": "^6.2.1", - "@wordpress/babel-preset-default": "^7.21.0", - "@wordpress/browserslist-config": "^5.20.0", - "@wordpress/dependency-extraction-webpack-plugin": "^4.20.0", - "@wordpress/eslint-plugin": "^14.10.0", - "@wordpress/jest-preset-default": "^11.8.0", - "@wordpress/npm-package-json-lint-config": "^4.22.0", - "@wordpress/postcss-plugins-preset": "^4.21.0", - "@wordpress/prettier-config": "^2.20.0", - "@wordpress/stylelint-config": "^21.20.0", + "@svgr/webpack": "^8.0.1", + "@wordpress/babel-preset-default": "^7.24.0", + "@wordpress/browserslist-config": "^5.23.0", + "@wordpress/dependency-extraction-webpack-plugin": "^4.23.0", + "@wordpress/eslint-plugin": "^15.0.0", + "@wordpress/jest-preset-default": "^11.11.0", + "@wordpress/npm-package-json-lint-config": "^4.25.0", + "@wordpress/postcss-plugins-preset": "^4.24.0", + "@wordpress/prettier-config": "^2.23.0", + "@wordpress/stylelint-config": "^21.23.0", "adm-zip": "^0.5.9", "babel-jest": "^29.5.0", "babel-loader": "^8.2.3", - "browserslist": "^4.17.6", + "browserslist": "^4.21.9", "chalk": "^4.0.0", "check-node-version": "^4.1.0", "clean-webpack-plugin": "^3.0.0", "copy-webpack-plugin": "^10.2.0", "cross-spawn": "^5.1.0", "css-loader": "^6.2.0", - "cssnano": "^5.0.7", + "cssnano": "^6.0.1", "cwd": "^0.10.0", "dir-glob": "^3.0.1", "eslint": "^8.3.0", @@ -4396,7 +4430,7 @@ "merge-deep": "^3.0.3", "mini-css-extract-plugin": "^2.5.1", "minimist": "^1.2.0", - "npm-package-json-lint": "^5.0.0", + "npm-package-json-lint": "^6.4.0", "npm-packlist": "^3.0.0", "postcss": "^8.4.5", "postcss-loader": "^6.2.1", @@ -4429,9 +4463,9 @@ } }, "node_modules/@wordpress/stylelint-config": { - "version": "21.20.0", - "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.20.0.tgz", - "integrity": "sha512-sXVu9rFjiNGbha9yz0tTmv4u5XWmSNPJh4sVo0TU4Ipkt1emaE7ybpAfUrpGnCmOXtZFR31LJH5/DInk0tbBNw==", + "version": "21.23.0", + "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.23.0.tgz", + "integrity": "sha512-bKSNvO3Mv5ggr8bqIDc16ddWI+kIsvV5E/DV/yI/hx2srNP7DHLOJ5dwkXPGqKlpyZ637kAwhu/mFCONWVkrvA==", "dev": true, "dependencies": { "stylelint-config-recommended": "^6.0.0", @@ -4445,9 +4479,9 @@ } }, "node_modules/@wordpress/warning": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.37.0.tgz", - "integrity": "sha512-CjntU9j/GUPzDDJlsr7SpKT1dXlfW94D1s7ZBuAGcKeNnqXQ/INBk6FsKvbCdSPA0BS8CpEqToedkF+pmt5DSQ==", + "version": "2.40.0", + "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.40.0.tgz", + "integrity": "sha512-y/XdIq38m8gyotK7t8/n14VDccN9IQ9FihiUlhP3Dk46kZd9w5kBqaStd3jux2ZXSWCim9fZ3KkH03a2rNCsaA==", "dev": true, "engines": { "node": ">=12" @@ -4691,6 +4725,15 @@ "node": ">= 8" } }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -4774,6 +4817,25 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", @@ -4823,6 +4885,26 @@ "get-intrinsic": "^1.1.3" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -4847,6 +4929,15 @@ "node": ">=8" } }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4854,9 +4945,9 @@ "dev": true }, "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", "dev": true, "funding": [ { @@ -4866,11 +4957,15 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -4926,12 +5021,12 @@ } }, "node_modules/babel-jest": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.1.tgz", - "integrity": "sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", + "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", "dev": true, "dependencies": { - "@jest/transform": "^29.6.1", + "@jest/transform": "^29.6.2", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", "babel-preset-jest": "^29.5.0", @@ -5015,42 +5110,42 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz", - "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.1", - "@nicolo-ribaudo/semver-v6": "^6.3.3" + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz", - "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1", + "@babel/helper-define-polyfill-provider": "^0.4.2", "core-js-compat": "^3.31.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz", - "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1" + "@babel/helper-define-polyfill-provider": "^0.4.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-preset-current-node-syntax": { @@ -5260,9 +5355,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, "funding": [ { @@ -5279,9 +5374,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.11" }, "bin": { @@ -5339,31 +5434,85 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "semver": "^7.0.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "node_modules/builtins/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/builtins/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { @@ -5431,9 +5580,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001506", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001506.tgz", - "integrity": "sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw==", + "version": "1.0.30001521", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz", + "integrity": "sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==", "dev": true, "funding": [ { @@ -5778,9 +5927,9 @@ } }, "node_modules/comment-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", - "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.0.tgz", + "integrity": "sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==", "dev": true, "engines": { "node": ">= 12.0.0" @@ -6064,9 +6213,9 @@ } }, "node_modules/core-js": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.1.tgz", - "integrity": "sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.0.tgz", + "integrity": "sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==", "dev": true, "hasInstallScript": true, "funding": { @@ -6075,12 +6224,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.0.tgz", + "integrity": "sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==", "dev": true, "dependencies": { - "browserslist": "^4.21.5" + "browserslist": "^4.21.9" }, "funding": { "type": "opencollective", @@ -6157,9 +6306,9 @@ "dev": true }, "node_modules/css-declaration-sorter": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", - "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "dev": true, "engines": { "node": "^10 || ^12 || >=14" @@ -6237,15 +6386,15 @@ "dev": true }, "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", "nth-check": "^2.0.1" }, "funding": { @@ -6253,25 +6402,16 @@ } }, "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, "node_modules/css-what": { @@ -6299,17 +6439,16 @@ } }, "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz", + "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==", "dev": true, "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" + "cssnano-preset-default": "^6.0.1", + "lilconfig": "^2.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "funding": { "type": "opencollective", @@ -6320,72 +6459,93 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz", + "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==", "dev": true, "dependencies": { "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "cssnano-utils": "^4.0.0", + "postcss-calc": "^9.0.0", + "postcss-colormin": "^6.0.0", + "postcss-convert-values": "^6.0.0", + "postcss-discard-comments": "^6.0.0", + "postcss-discard-duplicates": "^6.0.0", + "postcss-discard-empty": "^6.0.0", + "postcss-discard-overridden": "^6.0.0", + "postcss-merge-longhand": "^6.0.0", + "postcss-merge-rules": "^6.0.1", + "postcss-minify-font-values": "^6.0.0", + "postcss-minify-gradients": "^6.0.0", + "postcss-minify-params": "^6.0.0", + "postcss-minify-selectors": "^6.0.0", + "postcss-normalize-charset": "^6.0.0", + "postcss-normalize-display-values": "^6.0.0", + "postcss-normalize-positions": "^6.0.0", + "postcss-normalize-repeat-style": "^6.0.0", + "postcss-normalize-string": "^6.0.0", + "postcss-normalize-timing-functions": "^6.0.0", + "postcss-normalize-unicode": "^6.0.0", + "postcss-normalize-url": "^6.0.0", + "postcss-normalize-whitespace": "^6.0.0", + "postcss-ordered-values": "^6.0.0", + "postcss-reduce-initial": "^6.0.0", + "postcss-reduce-transforms": "^6.0.0", + "postcss-svgo": "^6.0.0", + "postcss-unique-selectors": "^6.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz", + "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, "dependencies": { - "css-tree": "^1.1.2" + "css-tree": "~2.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -6519,10 +6679,18 @@ "dev": true }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deep-extend": { "version": "0.6.0", @@ -6750,28 +6918,19 @@ } }, "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -6797,12 +6956,12 @@ } }, "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, "dependencies": { - "domelementtype": "^2.2.0" + "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" @@ -6812,14 +6971,14 @@ } }, "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -6848,9 +7007,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.439", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.439.tgz", - "integrity": "sha512-BHpErPSNhb9FB25+OwQP6mCAf3ZXfGbmuvc4LzBNVJwpCcXQJm++LerimocYRG9FRxUVRKZqaB7d0+pImSTPSg==", + "version": "1.4.494", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.494.tgz", + "integrity": "sha512-KF7wtsFFDu4ws1ZsSOt4pdmO1yWVNWCFtijVYZPUeW4SV7/hy/AESjLn/+qIWgq7mHscNOKAwN5AIM1+YAy+Ww==", "dev": true }, "node_modules/emittery": { @@ -6967,18 +7126,19 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -6998,14 +7158,18 @@ "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -7014,6 +7178,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-iterator-helpers": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz", + "integrity": "sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.3", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" + } + }, "node_modules/es-module-lexer": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", @@ -7171,27 +7357,27 @@ } }, "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "^8.47.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -7201,7 +7387,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -7213,7 +7398,6 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -7227,9 +7411,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -7239,14 +7423,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -7258,6 +7442,23 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", @@ -7285,26 +7486,29 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", + "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", "dev": true, "dependencies": { "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", "array.prototype.flat": "^1.3.1", "array.prototype.flatmap": "^1.3.1", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", + "eslint-module-utils": "^2.8.0", "has": "^1.0.3", - "is-core-module": "^2.11.0", + "is-core-module": "^2.12.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "resolve": "^1.22.3", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" @@ -7334,10 +7538,27 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-plugin-jest": { - "version": "27.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.2.2.tgz", - "integrity": "sha512-euzbp06F934Z7UDl5ZUaRPLAc9MKjh0rMPERrHT7UhlCEwgb25kBj37TvMgWeHZVkR5I9CayswrpoaqZU1RImw==", + "version": "27.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.2.3.tgz", + "integrity": "sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.10.0" @@ -7346,7 +7567,7 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0", "eslint": "^7.0.0 || ^8.0.0", "jest": "*" }, @@ -7360,21 +7581,23 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "39.9.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.9.1.tgz", - "integrity": "sha512-Rq2QY6BZP2meNIs48aZ3GlIlJgBqFCmR55+UBvaDkA3ZNQ0SvQXOs2QKkubakEijV8UbIVbVZKsOVN8G3MuqZw==", + "version": "46.4.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.4.6.tgz", + "integrity": "sha512-z4SWYnJfOqftZI+b3RM9AtWL1vF/sLWE/LlO9yOKDof9yN2+n3zOdOJTGX/pRE/xnPsooOLG2Rq6e4d+XW3lNw==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.36.1", - "comment-parser": "1.3.1", + "@es-joy/jsdoccomment": "~0.40.1", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.0", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", - "esquery": "^1.4.0", - "semver": "^7.3.8", + "esquery": "^1.5.0", + "is-builtin-module": "^3.2.1", + "semver": "^7.5.4", "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": "^14 || ^16 || ^17 || ^18 || ^19" + "node": ">=16" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" @@ -7465,15 +7688,16 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", @@ -7483,7 +7707,7 @@ "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", + "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "engines": { @@ -7586,9 +7810,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -7602,9 +7826,9 @@ } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -7614,9 +7838,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -7689,9 +7913,9 @@ } }, "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { "acorn": "^8.9.0", @@ -7706,9 +7930,9 @@ } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -7891,17 +8115,17 @@ } }, "node_modules/expect": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.1.tgz", - "integrity": "sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", + "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.6.1", + "@jest/expect-utils": "^29.6.2", "@types/node": "*", "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1" + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -8860,9 +9084,33 @@ } }, "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/hpack.js": { @@ -9293,6 +9541,21 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -9339,6 +9602,21 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -9352,9 +9630,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -9411,6 +9689,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -9429,6 +9719,21 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -9441,6 +9746,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -9562,6 +9876,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -9617,16 +9940,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -9647,6 +9966,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -9659,6 +9987,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", @@ -9733,19 +10074,67 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -9770,9 +10159,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -9782,6 +10171,19 @@ "node": ">=8" } }, + "node_modules/iterator.prototype": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", + "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "has-tostringtag": "^1.0.0", + "reflect.getprototypeof": "^1.0.3" + } + }, "node_modules/jed": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", @@ -9789,15 +10191,15 @@ "dev": true }, "node_modules/jest": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.1.tgz", - "integrity": "sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", + "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", "dev": true, "dependencies": { - "@jest/core": "^29.6.1", + "@jest/core": "^29.6.2", "@jest/types": "^29.6.1", "import-local": "^3.0.2", - "jest-cli": "^29.6.1" + "jest-cli": "^29.6.2" }, "bin": { "jest": "bin/jest.js" @@ -9828,28 +10230,28 @@ } }, "node_modules/jest-circus": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.1.tgz", - "integrity": "sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", + "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", - "@jest/test-result": "^29.6.1", + "@jest/environment": "^29.6.2", + "@jest/expect": "^29.6.2", + "@jest/test-result": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.1", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", + "jest-each": "^29.6.2", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", "p-limit": "^3.1.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.6.2", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -9859,21 +10261,21 @@ } }, "node_modules/jest-cli": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.1.tgz", - "integrity": "sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", + "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", "dev": true, "dependencies": { - "@jest/core": "^29.6.1", - "@jest/test-result": "^29.6.1", + "@jest/core": "^29.6.2", + "@jest/test-result": "^29.6.2", "@jest/types": "^29.6.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", + "jest-config": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -9893,31 +10295,31 @@ } }, "node_modules/jest-config": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.1.tgz", - "integrity": "sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", + "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.1", + "@jest/test-sequencer": "^29.6.2", "@jest/types": "^29.6.1", - "babel-jest": "^29.6.1", + "babel-jest": "^29.6.2", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.1", - "jest-environment-node": "^29.6.1", + "jest-circus": "^29.6.2", + "jest-environment-node": "^29.6.2", "jest-get-type": "^29.4.3", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", + "jest-resolve": "^29.6.2", + "jest-runner": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.6.2", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -9953,15 +10355,15 @@ } }, "node_modules/jest-diff": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.1.tgz", - "integrity": "sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", + "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -9980,16 +10382,16 @@ } }, "node_modules/jest-each": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.1.tgz", - "integrity": "sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", + "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", - "jest-util": "^29.6.1", - "pretty-format": "^29.6.1" + "jest-util": "^29.6.2", + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10023,17 +10425,17 @@ } }, "node_modules/jest-environment-node": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.1.tgz", - "integrity": "sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", + "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10049,9 +10451,9 @@ } }, "node_modules/jest-haste-map": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.1.tgz", - "integrity": "sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", + "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", @@ -10061,8 +10463,8 @@ "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-util": "^29.6.2", + "jest-worker": "^29.6.2", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -10074,37 +10476,37 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz", - "integrity": "sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", + "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz", - "integrity": "sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", + "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.6.1", + "jest-diff": "^29.6.2", "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.1.tgz", - "integrity": "sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", + "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", @@ -10113,7 +10515,7 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", + "pretty-format": "^29.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -10122,14 +10524,14 @@ } }, "node_modules/jest-mock": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.1.tgz", - "integrity": "sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", + "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "@types/node": "*", - "jest-util": "^29.6.1" + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10162,17 +10564,17 @@ } }, "node_modules/jest-resolve": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.1.tgz", - "integrity": "sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", + "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", + "jest-haste-map": "^29.6.2", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -10182,43 +10584,43 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz", - "integrity": "sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", + "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", "dev": true, "dependencies": { "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.1" + "jest-snapshot": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.1.tgz", - "integrity": "sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", + "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", "dev": true, "dependencies": { - "@jest/console": "^29.6.1", - "@jest/environment": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", + "@jest/console": "^29.6.2", + "@jest/environment": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-leak-detector": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-resolve": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-util": "^29.6.1", - "jest-watcher": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-environment-node": "^29.6.2", + "jest-haste-map": "^29.6.2", + "jest-leak-detector": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-resolve": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-util": "^29.6.2", + "jest-watcher": "^29.6.2", + "jest-worker": "^29.6.2", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -10227,17 +10629,17 @@ } }, "node_modules/jest-runtime": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.1.tgz", - "integrity": "sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", + "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", - "@jest/globals": "^29.6.1", + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", + "@jest/globals": "^29.6.2", "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", @@ -10245,13 +10647,13 @@ "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", + "jest-haste-map": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-mock": "^29.6.2", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", + "jest-resolve": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -10260,9 +10662,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.1.tgz", - "integrity": "sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", + "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -10270,21 +10672,20 @@ "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.1", - "@jest/transform": "^29.6.1", + "@jest/expect-utils": "^29.6.2", + "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", - "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.6.1", + "expect": "^29.6.2", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.1", + "jest-diff": "^29.6.2", "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", "natural-compare": "^1.4.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.6.2", "semver": "^7.5.3" }, "engines": { @@ -10325,9 +10726,9 @@ "dev": true }, "node_modules/jest-util": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz", - "integrity": "sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", + "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", @@ -10342,9 +10743,9 @@ } }, "node_modules/jest-validate": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.1.tgz", - "integrity": "sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", + "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", @@ -10352,25 +10753,25 @@ "chalk": "^4.0.0", "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^29.6.1" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-watcher": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.1.tgz", - "integrity": "sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", + "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.1", + "@jest/test-result": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.6.1", + "jest-util": "^29.6.2", "string-length": "^4.0.1" }, "engines": { @@ -10378,13 +10779,13 @@ } }, "node_modules/jest-worker": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz", - "integrity": "sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", + "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.6.1", + "jest-util": "^29.6.2", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -10447,9 +10848,9 @@ } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", - "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", "dev": true, "engines": { "node": ">=12.0.0" @@ -10567,9 +10968,9 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", - "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "dependencies": { "array-includes": "^3.1.6", @@ -11159,9 +11560,9 @@ } }, "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, "node_modules/mdurl": { @@ -11192,34 +11593,35 @@ } }, "node_modules/meow": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", - "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", - "minimist-options": "^4.0.2", - "normalize-package-data": "^2.5.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "engines": { "node": ">=10" @@ -11698,32 +12100,59 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/normalize-package-data/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -11742,18 +12171,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-bundled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", @@ -11770,35 +12187,79 @@ "dev": true }, "node_modules/npm-package-json-lint": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-5.4.2.tgz", - "integrity": "sha512-DH1MSvYvm+cuQFXcPehIIu/WiYzMYs7BOxlhOOFHaH2SNrA+P2uDtTEe5LOG90Ci7PTwgF/dCmSKM2HWTgWXNA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-6.4.0.tgz", + "integrity": "sha512-cuXAJJB1Rdqz0UO6w524matlBqDBjcNt7Ru+RDIu4y6RI1gVqiWBnylrK8sPRk81gGBA0X8hJbDXolVOoTc+sA==", "dev": true, "dependencies": { "ajv": "^6.12.6", "ajv-errors": "^1.0.1", "chalk": "^4.1.2", - "cosmiconfig": "^7.0.1", - "debug": "^4.3.2", - "globby": "^11.0.4", - "ignore": "^5.1.9", + "cosmiconfig": "^8.0.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "ignore": "^5.2.0", "is-plain-obj": "^3.0.0", - "jsonc-parser": "^3.0.0", + "jsonc-parser": "^3.2.0", "log-symbols": "^4.1.0", - "meow": "^6.1.1", + "meow": "^9.0.0", "plur": "^4.0.0", - "semver": "^7.3.5", + "semver": "^7.3.8", "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "strip-json-comments": "^3.1.1", + "type-fest": "^3.2.0", + "validate-npm-package-name": "^5.0.0" }, "bin": { - "npmPkgJsonLint": "src/cli.js" + "npmPkgJsonLint": "dist/cli.js" }, "engines": { - "node": ">=10.0.0", + "node": ">=14.0.0", "npm": ">=6.0.0" } }, + "node_modules/npm-package-json-lint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/npm-package-json-lint/node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/npm-package-json-lint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/npm-package-json-lint/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/npm-package-json-lint/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -11826,6 +12287,18 @@ "node": ">=10" } }, + "node_modules/npm-package-json-lint/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm-package-json-lint/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -11962,6 +12435,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", + "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.hasown": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", @@ -12486,22 +12971,25 @@ } }, "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.9", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, "peerDependencies": { "postcss": "^8.2.2" } }, "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz", + "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==", "dev": true, "dependencies": { "browserslist": "^4.21.4", @@ -12510,71 +12998,71 @@ "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz", + "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==", "dev": true, "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz", + "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz", + "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz", + "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz", + "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" @@ -12642,98 +13130,98 @@ "dev": true }, "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz", + "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" + "stylehacks": "^6.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz", + "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==", "dev": true, "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz", + "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz", + "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==", "dev": true, "dependencies": { "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz", + "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==", "dev": true, "dependencies": { "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz", + "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" @@ -12799,181 +13287,180 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz", + "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz", + "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz", + "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz", + "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz", + "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz", + "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz", + "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==", "dev": true, "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz", + "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==", "dev": true, "dependencies": { - "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz", + "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz", + "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==", "dev": true, "dependencies": { - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz", + "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==", "dev": true, "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz", + "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" @@ -13002,9 +13489,9 @@ } }, "node_modules/postcss-scss": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz", - "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.7.tgz", + "integrity": "sha512-xPv2GseoyXPa58Nro7M73ZntttusuCmZdeOojUFR5PZDz2BR62vfYx1w9TyOnp1+nYFowgOMipsCBhxzVkAEPw==", "dev": true, "funding": [ { @@ -13014,6 +13501,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "engines": { @@ -13037,31 +13528,31 @@ } }, "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz", + "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "svgo": "^3.0.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >= 18" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz", + "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" @@ -13111,9 +13602,9 @@ } }, "node_modules/pretty-format": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", - "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.0", @@ -13550,13 +14041,40 @@ "node": ">=8" } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "engines": { - "node": ">=8" + "bin": { + "semver": "bin/semver" } }, "node_modules/read-pkg/node_modules/type-fest": { @@ -13619,6 +14137,26 @@ "node": ">=8" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", + "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -13638,15 +14176,15 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", "dev": true }, "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" @@ -13913,6 +14451,30 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -14544,13 +15106,6 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -14775,16 +15330,16 @@ "dev": true }, "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", + "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==", "dev": true, "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" @@ -14916,18 +15471,6 @@ "node": ">=6" } }, - "node_modules/stylelint/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/stylelint/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -14937,101 +15480,6 @@ "node": ">=0.10.0" } }, - "node_modules/stylelint/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stylelint/node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stylelint/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stylelint/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/stylelint/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15082,24 +15530,27 @@ "dev": true }, "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", + "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", "dev": true, "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" }, "bin": { "svgo": "bin/svgo" }, "engines": { - "node": ">=10.13.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, "node_modules/svgo/node_modules/commander": { @@ -15562,6 +16013,57 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -15798,9 +16300,9 @@ } }, "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "dev": true }, "node_modules/v8-to-istanbul": { @@ -15827,6 +16329,18 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -16679,18 +17193,64 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.10.tgz", - "integrity": "sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -16844,25 +17404,12 @@ } }, "node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" } }, "node_modules/yargs/node_modules/yargs-parser": { diff --git a/package.json b/package.json index 999d4a6762..e2d090b7df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dokan", - "version": "3.7.24", + "version": "3.8.0", "description": "A WordPress marketplace plugin", "author": "weDevs", "license": "GPL", @@ -21,7 +21,7 @@ "release": "npm run readme && npm run build && npm run clean-files && npm run makepot && npm run version && npm run zip" }, "devDependencies": { - "@wordpress/scripts": "^26.8.0", + "@wordpress/scripts": "^26.11.0", "chartjs-adapter-moment": "^1.0.1", "debounce": "^1.2.1", "fs-extra": "^10.1.0", diff --git a/readme.txt b/readme.txt index 990ce12f6c..c45fa383a1 100644 --- a/readme.txt +++ b/readme.txt @@ -3,11 +3,11 @@ Contributors: tareq1988, wedevs, nizamuddinbabu Donate Link: http://tareq.co/donate/ Tags: WooCommerce multivendor marketplace, multi vendor marketplace, multi seller store, multi-vendor, multi seller, commissions, multivendor, marketplace, product vendors, woocommerce vendor, commission rate, e-commerce, woocommerce, ebay, ecommerce. Requires at least: 5.4 -Tested up to: 6.2.2 +Tested up to: 6.3.0 WC requires at least: 5.0.0 -WC tested up to: 7.9.0 -Requires PHP: 7.2 -Stable tag: 3.7.24 +WC tested up to: 8.0.2 +Requires PHP: 7.3 +Stable tag: 3.8.0 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -338,6 +338,13 @@ A. Just install and activate the PRO version without deleting the free plugin. A == Changelog == += v3.8.0 ( Aug 18, 2023 ) = + +- **update:** Added HPOS (High-Performance Order Storage) support for Dokan Lite. +- **fix:** Resolved an issue where traces of order data were left on the Dokan end even after the order had been deleted from the WordPress admin panel. +Previously, deleted orders were still visible under the Dashboard Overview menu, Reports menu, and under Withdraw menu. This issue has been fixed in the current release. +- **fix:** Multiple issues have been fixed after a product of an order has been deleted. + = v3.7.24 ( Jul 25, 2023 ) = - **update:** Restrictions added for vendors to review and purchase their own products. diff --git a/templates/whats-new.php b/templates/whats-new.php index af29bc8f8e..515cfe8e65 100644 --- a/templates/whats-new.php +++ b/templates/whats-new.php @@ -3,6 +3,32 @@ * When you are adding new version please follow this sequence for changes: New Feature, New, Improvement, Fix... */ $changelog = [ + [ + 'version' => 'Version 3.8.0', + 'released' => '2023-08-18', + 'changes' => [ + 'Update' => [ + [ + 'title' => 'Added HPOS (High-Performance Order Storage) support for Dokan Lite', + 'description' => 'The High-Performance Order Storage (HPOS) feature is a solution that provides an easy-to-understand and solid database structure specifically designed for eCommerce needs. It uses the WooCommerce CRUD design to store order data in custom tables optimized for WooCommerce queries with minimal impact on the store’s performance. This feature enables eCommerce stores of all shapes and sizes to scale their business to their maximum potential without expert intervention. It also facilitates implementing read/write locks and prevents race conditions. You can enable High-Performance Order Storage by navigating to WooCommerce > Settings > Advanced > Features and choosing the suitable data storage options for orders.', + ], + [ + 'title' => 'Updated minimum PHP version requirement to 7.3', + 'description' => '', + ], + ], + 'Fix' => [ + [ + 'title' => 'Resolved an issue where traces of order data were left on the Dokan end even after the order had been deleted from the WordPress admin panel.', + 'description' => 'Previously, deleted orders were still visible under the Dashboard Overview menu, Reports menu, and under Withdraw menu. This issue has been fixed in the current release.', + ], + [ + 'title' => 'Multiple issues have been fixed after a product of an order has been deleted.', + 'description' => '', + ], + ], + ], + ], [ 'version' => 'Version 3.7.24', 'released' => '2023-07-25',