From a54c09d4bd0516cda508080541ee11d6a0a36849 Mon Sep 17 00:00:00 2001 From: Brent MacKinnon Date: Mon, 20 Nov 2023 13:00:39 -0400 Subject: [PATCH 01/51] Create gdpr-compliance.md --- docs/extension-development/gdpr-compliance.md | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/extension-development/gdpr-compliance.md diff --git a/docs/extension-development/gdpr-compliance.md b/docs/extension-development/gdpr-compliance.md new file mode 100644 index 00000000000..b1f04ff6cff --- /dev/null +++ b/docs/extension-development/gdpr-compliance.md @@ -0,0 +1,74 @@ +# GDPR Compliance Guidelines for WooCommerce Extensions + +## Introduction + +The General Data Protection Regulation (GDPR) is in effect, granting EU residents increased rights over their personal data. Developers must ensure that WooCommerce extensions are compliant with these regulations. + +## Data Sharing and Collection + +### Third-Party Data Sharing + +- Assess and document any third-party data sharing. +- Obtain and manage user consent for data sharing. +- Link to third-party privacy policies in your plugin settings. + +### Data Collection + +- List the personal data your plugin collects. +- Secure consent for data collection and manage user preferences. +- Safeguard data storage and restrict access to authorized personnel. + +## Data Access and Storage + +### Accessing Personal Data + +- Specify what personal data your plugin accesses from WooCommerce orders. +- Justify the necessity for accessing each type of data. +- Control access to personal data based on user roles and permissions. + +### Storing Personal Data + +- Explain your data storage mechanisms and locations. +- Apply encryption to protect stored personal data. +- Perform regular security audits. + +## Personal Data Handling + +### Data Exporter and Erasure Hooks + +- Integrate data exporter and erasure hooks to comply with user requests. +- Create a user-friendly interface for data management requests. + +### Refusal of Data Erasure + +- Define clear protocols for instances where data erasure is refused. +- Communicate these protocols transparently to users. + +## Frontend and Backend Data Exposure + +### Data on the Frontend + +- Minimize personal data displayed on the site's frontend. +- Provide configurable settings for data visibility based on user status. + +### Data in REST API Endpoints + +- Ensure REST API endpoints are secure and disclose personal data only as necessary. +- Establish clear permissions for accessing personal data via the API. + +## Privacy Documentation and Data Management + +### Privacy Policy Documentation + +- Maintain an up-to-date privacy policy detailing your plugin’s data handling. +- Include browser storage methods and third-party data sharing in your documentation. + +### Data Cleanup + +- Implement data cleanup protocols for plugin uninstallation and deletion of orders/users. +- Automate personal data removal processes where appropriate. + +## Conclusion + +- Keep a record of GDPR compliance measures and make them accessible to users. +- Update your privacy policy regularly to align with any changes in data processing activities. From d8ec0f68e0c0dc400a901525d6f978775992dcd6 Mon Sep 17 00:00:00 2001 From: Brent MacKinnon Date: Mon, 20 Nov 2023 13:13:47 -0400 Subject: [PATCH 02/51] Create configuring-caching-plugins.md --- docs/utilities/configuring-caching-plugins.md | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 docs/utilities/configuring-caching-plugins.md diff --git a/docs/utilities/configuring-caching-plugins.md b/docs/utilities/configuring-caching-plugins.md new file mode 100644 index 00000000000..96a4a986ce8 --- /dev/null +++ b/docs/utilities/configuring-caching-plugins.md @@ -0,0 +1,100 @@ +# Configuring Caching Plugins for WooCommerce + +## Excluding Pages from the Cache + +Oftentimes if using caching plugins they’ll already exclude these pages. Otherwise make sure you exclude the following pages from the cache through your caching systems respective settings. + +- Cart +- My Account +- Checkout + +These pages need to stay dynamic since they display information specific to the current customer and their cart. + +## Excluding WooCommerce Session from the Cache + +If the caching system you’re using offers database caching, it might be helpful to exclude `_wc_session_` from being cached. This will be dependent on the plugin or host caching so refer to the specific instructions or docs for that system. + +## Excluding WooCommerce Cookies from the Cache + +Cookies in WooCommerce help track the products in your customers cart, can keep their cart in the database if they leave the site, and powers the recently viewed widget. Below is a list of the cookies WooCommerce uses for this, which you can exclude from caching. + +| COOKIE NAME | DURATION | PURPOSE | +| --- | --- | --- | +| woocommerce_cart_hash | session | Helps WooCommerce determine when cart contents/data changes. | +| woocommerce_items_in_cart | session | Helps WooCommerce determine when cart contents/data changes. | +| wp_woocommerce_session_ | 2 days | Contains a unique code for each customer so that it knows where to find the cart data in the database for each customer. | +| woocommerce_recently_viewed | session | Powers the Recent Viewed Products widget. | +| store_notice[notice id] | session | Allows customers to dismiss the Store Notice. | + +We’re unable to cover all options, but we have added some tips for the popular caching plugins. For more specific support, please reach out to the support team responsible for your caching integration. + +### W3 Total Cache Minify Settings + +Ensure you add ‘mfunc’ to the ‘Ignored comment stems’ option in the Minify settings. + +### WP-Rocket + +WooCommerce is fully compatible with WP-Rocket. Please ensure that the following pages (Cart, Checkout, My Account) are not to be cached in the plugin’s settings. + +We recommend avoiding JavaScript file minification. + +### WP Super Cache + +WooCommerce is natively compatible with WP Super Cache. WooCommerce sends information to WP Super Cache so that it doesn’t cache the Cart, Checkout, or My Account pages by default. + +### Varnish + +```varnish +if (req.url ~ "^/(cart|my-account|checkout|addons)") { + return (pass); +} +if ( req.url ~ "\\?add-to-cart=" ) { + return (pass); +} +``` + +# Troubleshooting + +## Why is my Varnish configuration not working in WooCommerce? + +Check out the following WordPress.org Support forum post on[ how cookies may be affecting your varnish coding](https://wordpress.org/support/topic/varnish-configuration-not-working-in-woocommerce). + +``` +Add this to vcl_recv above "if (req.http.cookie) {": + +# Unset Cookies except for WordPress admin and WooCommerce pages +if (!(req.url ~ "(wp-login|wp-admin|cart|my-account/*|wc-api*|checkout|addons|logout|lost-password|product/*)")) { +unset req.http.cookie; +} +# Pass through the WooCommerce dynamic pages +if (req.url ~ "^/(cart|my-account/*|checkout|wc-api/*|addons|logout|lost-password|product/*)") { +return (pass); +} +# Pass through the WooCommerce add to cart +if (req.url ~ "\?add-to-cart=" ) { +return (pass); +} +# Pass through the WooCommerce API +if (req.url ~ "\?wc-api=" ) { +return (pass); +} +# Block access to php admin pages via website +if (req.url ~ "^/phpmyadmin/.*$" || req.url ~ "^/phppgadmin/.*$" || req.url ~ "^/server-status.*$") { +error 403 "For security reasons, this URL is only accesible using localhost (127.0.0.1) as the hostname"; +} +# + +Add this to vcl_fetch: + +# Unset Cookies except for WordPress admin and WooCommerce pages +if ( (!(req.url ~ "(wp-(login|admin)|login|cart|my-account/*|wc-api*|checkout|addons|logout|lost-password|product/*)")) || (req.request == "GET") ) { +unset beresp.http.set-cookie; +} +# +``` + +## Why is my Password Reset stuck in a loop? + +This is due to the My Account page being cached, Some hosts with server-side caching don’t prevent my-account.php from being cached. + +If you’re unable to reset your password and keep being returned to the login screen, please speak to your host to make sure this page is being excluded from their caching. From 728389cd39f91057e01fb1d32f891f8049c25e27 Mon Sep 17 00:00:00 2001 From: Brent MacKinnon Date: Mon, 20 Nov 2023 13:16:47 -0400 Subject: [PATCH 03/51] Update configuring-caching-plugins.md --- docs/utilities/configuring-caching-plugins.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/utilities/configuring-caching-plugins.md b/docs/utilities/configuring-caching-plugins.md index 96a4a986ce8..9fdf2571ab2 100644 --- a/docs/utilities/configuring-caching-plugins.md +++ b/docs/utilities/configuring-caching-plugins.md @@ -53,13 +53,13 @@ if ( req.url ~ "\\?add-to-cart=" ) { } ``` -# Troubleshooting +## Troubleshooting -## Why is my Varnish configuration not working in WooCommerce? +### Why is my Varnish configuration not working in WooCommerce? Check out the following WordPress.org Support forum post on[ how cookies may be affecting your varnish coding](https://wordpress.org/support/topic/varnish-configuration-not-working-in-woocommerce). -``` +```text Add this to vcl_recv above "if (req.http.cookie) {": # Unset Cookies except for WordPress admin and WooCommerce pages @@ -93,7 +93,7 @@ unset beresp.http.set-cookie; # ``` -## Why is my Password Reset stuck in a loop? +### Why is my Password Reset stuck in a loop? This is due to the My Account page being cached, Some hosts with server-side caching don’t prevent my-account.php from being cached. From e88a66eb25f62454c15a39a0037dfb82d5bc111d Mon Sep 17 00:00:00 2001 From: mt8 Date: Sat, 25 Nov 2023 03:46:24 +0900 Subject: [PATCH 04/51] Fix Downloadable Product Permissions: The text '-1' is rendered every time merchants click the 'Grant access' button without entering any product #31678 --- .../woocommerce/client/legacy/js/admin/meta-boxes-order.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/woocommerce/client/legacy/js/admin/meta-boxes-order.js b/plugins/woocommerce/client/legacy/js/admin/meta-boxes-order.js index 60f45e6f5e5..577deab7228 100644 --- a/plugins/woocommerce/client/legacy/js/admin/meta-boxes-order.js +++ b/plugins/woocommerce/client/legacy/js/admin/meta-boxes-order.js @@ -1440,7 +1440,7 @@ jQuery( function ( $ ) { grant_access: function() { var products = $( '#grant_access_id' ).val(); - if ( ! products ) { + if ( ! products || 0 === products.length ) { return; } @@ -1462,7 +1462,7 @@ jQuery( function ( $ ) { $.post( woocommerce_admin_meta_boxes.ajax_url, data, function( response ) { - if ( response ) { + if ( response && -1 !== parseInt( response ) ) { $( '.order_download_permissions .wc-metaboxes' ).append( response ); } else { window.alert( woocommerce_admin_meta_boxes.i18n_download_permission_fail ); From eec31465a0585ee04aca9109d7b6f92b07343d63 Mon Sep 17 00:00:00 2001 From: Ron Rennick Date: Mon, 27 Nov 2023 15:52:33 -0400 Subject: [PATCH 05/51] use consistent capitalization in docs titles --- docs/README.md | 2 +- docs/code-snippets/change-a-currency-symbol.md | 2 +- docs/code-snippets/useful-functions.md | 2 +- .../CSS-SASS-coding-guidelines-and-naming-conventions.md | 2 +- docs/contributing/api-critical-flows.md | 2 +- docs/contributing/deciding-pr-high-impact.md | 2 +- docs/contributing/deprecation-in-core.md | 2 +- docs/contributing/naming-conventions.md | 2 +- docs/contributing/woocommerce-git-flow.md | 2 +- docs/data-management/data-stores.md | 2 +- .../extension-development/adding-a-section-to-a-settings-tab.md | 2 +- docs/extension-development/extension-developer-handbook.md | 2 +- docs/extension-development/implementing-settings.md | 2 +- docs/extension-development/readme.md | 2 +- docs/getting-started/developer-resources.md | 2 +- docs/getting-started/developer-tools.md | 2 +- docs/getting-started/readme.md | 2 +- docs/payments/payment-gateway-api.md | 2 +- docs/payments/payment-token-api.md | 2 +- .../product-editor-extensibility-guidelines.md | 2 +- docs/quality-and-best-practices/css-sass-naming-conventions.md | 2 +- docs/quality-and-best-practices/naming-conventions.md | 2 +- docs/quality-and-best-practices/readme.md | 2 +- docs/reference-code/readme.md | 2 +- docs/reporting/extending-woocommerce-admin-reports.md | 2 +- docs/shipping/shipping-method-api.md | 2 +- docs/theme-development/fixing-outdated-woocommerce-templates.md | 2 +- docs/theme-development/theme-design-ux-guidelines.md | 2 +- docs/user-experience/accessibility.md | 2 +- docs/user-experience/best-practices.md | 2 +- docs/user-experience/colors.md | 2 +- docs/user-experience/notices.md | 2 +- docs/user-experience/onboarding.md | 2 +- docs/user-experience/task-list-and-inbox.md | 2 +- docs/user-experience/user-experience-guidelines.md | 2 +- docs/wc-cli/commands.md | 2 +- docs/wc-cli/overview.md | 2 +- 37 files changed, 37 insertions(+), 37 deletions(-) diff --git a/docs/README.md b/docs/README.md index f8d6baae255..cade84e0a17 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# WooCommerce Developer Documentation +# WooCommerce developer documentation > ⚠️ **Notice:** This documentation is currently a **work in progress**. While it's open to the public for transparency and collaboration, please be aware that some sections might be incomplete or subject to change. We appreciate your patience and welcome any contributions! diff --git a/docs/code-snippets/change-a-currency-symbol.md b/docs/code-snippets/change-a-currency-symbol.md index 38573001de7..9bdd9138f08 100644 --- a/docs/code-snippets/change-a-currency-symbol.md +++ b/docs/code-snippets/change-a-currency-symbol.md @@ -1,4 +1,4 @@ -# Rename a country +# Change a currency symbol See the [currency list](https://woocommerce.github.io/code-reference/files/woocommerce-includes-wc-core-functions.html#source-view.475) for reference on currency codes. diff --git a/docs/code-snippets/useful-functions.md b/docs/code-snippets/useful-functions.md index 1a0ce921e1a..8d553d3fee7 100644 --- a/docs/code-snippets/useful-functions.md +++ b/docs/code-snippets/useful-functions.md @@ -1,4 +1,4 @@ -# Useful Core Functions +# Useful core functions WooCommerce core functions are available on both front-end and admin. They can be found in `includes/wc-core-functions.php` and can be used by themes in plugins. diff --git a/docs/contributing/CSS-SASS-coding-guidelines-and-naming-conventions.md b/docs/contributing/CSS-SASS-coding-guidelines-and-naming-conventions.md index 754f73051c0..1bc53143edd 100644 --- a/docs/contributing/CSS-SASS-coding-guidelines-and-naming-conventions.md +++ b/docs/contributing/CSS-SASS-coding-guidelines-and-naming-conventions.md @@ -1,4 +1,4 @@ -# CSS SASS coding guidelines and naming convetions +# CSS SASS coding guidelines and naming conventions Our guidelines are based on those used in [Calypso](https://github.com/Automattic/wp-calypso) which itself follows the BEM methodology. Refer to [this doc](https://wpcalypso.wordpress.com/devdocs/docs/coding-guidelines/css.md?term=css) for full details. There are a few differences in WooCommerce however which are outlined below; diff --git a/docs/contributing/api-critical-flows.md b/docs/contributing/api-critical-flows.md index 5d5434f38a3..cdd12afffc5 100644 --- a/docs/contributing/api-critical-flows.md +++ b/docs/contributing/api-critical-flows.md @@ -1,4 +1,4 @@ -# API Critical Flows +# API critical flows In our documentation, we've pinpointed the essential user flows within the WooCommerce Core API. These flows serve as the compass for our testing initiatives, aiding us in concentrating our efforts where they matter most. They also diff --git a/docs/contributing/deciding-pr-high-impact.md b/docs/contributing/deciding-pr-high-impact.md index 24c7598705f..82599d3bef2 100644 --- a/docs/contributing/deciding-pr-high-impact.md +++ b/docs/contributing/deciding-pr-high-impact.md @@ -1,4 +1,4 @@ -# How to decide if a Pull Request is High-Impact +# How to decide if a pull request is high impact Deciding if a Pull Request should be declared High-Impact is a complex task. To achieve it, we need to assess and estimate the impact that the changes introduced in the Pull Request have in WooCommerce, which is usually a subjective task and sometimes inaccurate, due to the huge knowledge it demands of the WooCommerce product details, technical details and even customers issues history. diff --git a/docs/contributing/deprecation-in-core.md b/docs/contributing/deprecation-in-core.md index b44f0f36df2..22d70543799 100644 --- a/docs/contributing/deprecation-in-core.md +++ b/docs/contributing/deprecation-in-core.md @@ -1,4 +1,4 @@ -# Deprecation in Core +# Deprecation in core Deprecation is a method of discouraging usage of a feature or practice in favour of something else without breaking backwards compatibility or totally prohibiting its usage. To quote the Wikipedia article on Deprecation: diff --git a/docs/contributing/naming-conventions.md b/docs/contributing/naming-conventions.md index 40a65558328..4406eeb36bc 100644 --- a/docs/contributing/naming-conventions.md +++ b/docs/contributing/naming-conventions.md @@ -1,4 +1,4 @@ -# Naming Conventions +# Naming conventions ## PHP diff --git a/docs/contributing/woocommerce-git-flow.md b/docs/contributing/woocommerce-git-flow.md index 4edf391cade..4c57f1f71d5 100644 --- a/docs/contributing/woocommerce-git-flow.md +++ b/docs/contributing/woocommerce-git-flow.md @@ -1,4 +1,4 @@ -# WooCommerce Git Flow +# WooCommerce Git flow For core development, we use the following structure and flow. diff --git a/docs/data-management/data-stores.md b/docs/data-management/data-stores.md index ed20aeabd35..33af81a961f 100644 --- a/docs/data-management/data-stores.md +++ b/docs/data-management/data-stores.md @@ -1,4 +1,4 @@ -# Data Stores +# Data stores ## Introduction diff --git a/docs/extension-development/adding-a-section-to-a-settings-tab.md b/docs/extension-development/adding-a-section-to-a-settings-tab.md index c3a6d609707..a90904088c7 100644 --- a/docs/extension-development/adding-a-section-to-a-settings-tab.md +++ b/docs/extension-development/adding-a-section-to-a-settings-tab.md @@ -1,5 +1,5 @@ -# Adding a Section to a Settings Tab +# Adding a section to a settings tab When you’re adding building an extension for WooCommerce that requires settings of some kind, it’s important to ask yourself: **Where do they belong?** If your extension just has a couple of simple settings, do you really need to create a new tab specifically for it? Most likely the answer is no. diff --git a/docs/extension-development/extension-developer-handbook.md b/docs/extension-development/extension-developer-handbook.md index 14c191de10d..722d0a218a6 100644 --- a/docs/extension-development/extension-developer-handbook.md +++ b/docs/extension-development/extension-developer-handbook.md @@ -1,4 +1,4 @@ -# WooCommerce Extension Developer Handbook +# WooCommerce extension developer handbook Want to create a plugin to extend WooCommerce? WooCommerce extensions are the same as regular WordPress plugins. For more information, visit [Writing a plugin](https://developer.wordpress.org/plugins/). diff --git a/docs/extension-development/implementing-settings.md b/docs/extension-development/implementing-settings.md index 839468de304..35c650b97e5 100644 --- a/docs/extension-development/implementing-settings.md +++ b/docs/extension-development/implementing-settings.md @@ -1,4 +1,4 @@ -# Implementing Settings for Extensions +# Implementing settings for extensions If you’re customizing WooCommerce or adding your own functionality to it you’ll probably need a settings page of some sort. One of the easiest ways to create a settings page is by taking advantage of the [`WC_Integration` class](https://woocommerce.github.io/code-reference/classes/WC-Integration.html 'WC_Integration Class'). Using the Integration class will automatically create a new settings page under **WooCommerce > Settings > Integrations** and it will automatically save, and sanitize your data for you. We’ve created this tutorial so you can see how to create a new integration. diff --git a/docs/extension-development/readme.md b/docs/extension-development/readme.md index 3032c6af86b..b4faebd1241 100644 --- a/docs/extension-development/readme.md +++ b/docs/extension-development/readme.md @@ -1,4 +1,4 @@ -# Extension Development +# Extension development > ⚠️ **Notice:** This documentation is currently a **work in progress**. While it's open to the public for transparency and collaboration, please be aware that some sections might be incomplete or subject to change. We appreciate your patience and welcome any contributions! diff --git a/docs/getting-started/developer-resources.md b/docs/getting-started/developer-resources.md index cdcbc4f7a72..c2caeb97afa 100644 --- a/docs/getting-started/developer-resources.md +++ b/docs/getting-started/developer-resources.md @@ -1,4 +1,4 @@ -# WooCommerce Developer Resources +# WooCommerce developer resources This guide is a great starting point for WooCommerce development. From setting up your first online store to diving deep into advanced features, you'll find what you need here. New to WooCommerce? Start with the basics. Experienced and looking for specific documentation or community discussions? We've got that covered too. Navigate through the sections below to find the resources tailored for you. diff --git a/docs/getting-started/developer-tools.md b/docs/getting-started/developer-tools.md index 4fcb406f13d..f6b58c87714 100644 --- a/docs/getting-started/developer-tools.md +++ b/docs/getting-started/developer-tools.md @@ -1,4 +1,4 @@ -# WooCommerce Developer Tools +# WooCommerce developer tools This guide provides an overview of essential tools and libraries for WooCommerce development. It's intended for developers looking to enhance their WooCommerce projects efficiently. diff --git a/docs/getting-started/readme.md b/docs/getting-started/readme.md index e1d1d35652f..3b56b355434 100644 --- a/docs/getting-started/readme.md +++ b/docs/getting-started/readme.md @@ -1,4 +1,4 @@ -# Getting-started +# Getting started > ⚠️ **Notice:** This documentation is currently a **work in progress**. While it's open to the public for transparency and collaboration, please be aware that some sections might be incomplete or subject to change. We appreciate your patience and welcome any contributions! diff --git a/docs/payments/payment-gateway-api.md b/docs/payments/payment-gateway-api.md index b7dc0ad4b95..2da379ef13c 100644 --- a/docs/payments/payment-gateway-api.md +++ b/docs/payments/payment-gateway-api.md @@ -1,4 +1,4 @@ -# Payment Gateway API +# Payment gateway API Payment gateways in WooCommerce are class based and can be added through traditional plugins. This guide provides an intro to gateway development. diff --git a/docs/payments/payment-token-api.md b/docs/payments/payment-token-api.md index d3e8b80c8b6..e73c4780a81 100644 --- a/docs/payments/payment-token-api.md +++ b/docs/payments/payment-token-api.md @@ -1,4 +1,4 @@ -# Payment Token API +# Payment token API WooCommerce 2.6 introduced an API for storing and managing payment tokens for gateways. Users can also manage these tokens from their account settings and choose from saved payment tokens on checkout. diff --git a/docs/product-editor-development/product-editor-extensibility-guidelines.md b/docs/product-editor-development/product-editor-extensibility-guidelines.md index b9bb372b445..ea7fba8fb3d 100644 --- a/docs/product-editor-development/product-editor-extensibility-guidelines.md +++ b/docs/product-editor-development/product-editor-extensibility-guidelines.md @@ -1,4 +1,4 @@ -# Product Editor Extensibility Guidelines +# Product editor extensibility guidelines > ⚠️ **Notice:** These guidelines are currently a **work in progress**. Please be aware that some details might be incomplete or subject to change. We appreciate your patience and welcome any contributions! diff --git a/docs/quality-and-best-practices/css-sass-naming-conventions.md b/docs/quality-and-best-practices/css-sass-naming-conventions.md index 568374cb742..263fd834875 100644 --- a/docs/quality-and-best-practices/css-sass-naming-conventions.md +++ b/docs/quality-and-best-practices/css-sass-naming-conventions.md @@ -1,4 +1,4 @@ -# CSS/Sass Naming Conventions +# CSS/Sass naming conventions Table of Contents: diff --git a/docs/quality-and-best-practices/naming-conventions.md b/docs/quality-and-best-practices/naming-conventions.md index 9400c6a389a..4e528ba7275 100644 --- a/docs/quality-and-best-practices/naming-conventions.md +++ b/docs/quality-and-best-practices/naming-conventions.md @@ -1,4 +1,4 @@ -# Naming Conventions +# Naming conventions Table of Contents: diff --git a/docs/quality-and-best-practices/readme.md b/docs/quality-and-best-practices/readme.md index 1fc1dc28742..d2d60951cb0 100644 --- a/docs/quality-and-best-practices/readme.md +++ b/docs/quality-and-best-practices/readme.md @@ -1,4 +1,4 @@ -# Quality and Best Practices +# Quality and best practices > ⚠️ **Notice:** This documentation is currently a **work in progress**. While it's open to the public for transparency and collaboration, please be aware that some sections might be incomplete or subject to change. We appreciate your patience and welcome any contributions! diff --git a/docs/reference-code/readme.md b/docs/reference-code/readme.md index 936a54845ed..eb158ab398e 100644 --- a/docs/reference-code/readme.md +++ b/docs/reference-code/readme.md @@ -1,4 +1,4 @@ -# Reference Code +# Reference code > ⚠️ **Notice:** This documentation is currently a **work in progress**. While it's open to the public for transparency and collaboration, please be aware that some sections might be incomplete or subject to change. We appreciate your patience and welcome any contributions! diff --git a/docs/reporting/extending-woocommerce-admin-reports.md b/docs/reporting/extending-woocommerce-admin-reports.md index c6f1b075c59..f912605d4b7 100644 --- a/docs/reporting/extending-woocommerce-admin-reports.md +++ b/docs/reporting/extending-woocommerce-admin-reports.md @@ -1,4 +1,4 @@ -# Extending WC-Admin reports +# Extending WooCommerce Analytics reports ## Introduction diff --git a/docs/shipping/shipping-method-api.md b/docs/shipping/shipping-method-api.md index 8f8580b0255..3845ee98083 100644 --- a/docs/shipping/shipping-method-api.md +++ b/docs/shipping/shipping-method-api.md @@ -1,4 +1,4 @@ -# Shipping Method API +# Shipping method API WooCommerce has a shipping method API which plugins can use to add their own rates. This article will take you through the steps to creating a new shipping method and interacting with the API. diff --git a/docs/theme-development/fixing-outdated-woocommerce-templates.md b/docs/theme-development/fixing-outdated-woocommerce-templates.md index 0615b811944..8ea2f6f9bf2 100644 --- a/docs/theme-development/fixing-outdated-woocommerce-templates.md +++ b/docs/theme-development/fixing-outdated-woocommerce-templates.md @@ -1,4 +1,4 @@ -# Fixing Outdated WooCommerce Templates +# Fixing outdated WooCommerce templates ## Template Updates and Changes diff --git a/docs/theme-development/theme-design-ux-guidelines.md b/docs/theme-development/theme-design-ux-guidelines.md index 0d8b334555d..4b0aadb68b2 100644 --- a/docs/theme-development/theme-design-ux-guidelines.md +++ b/docs/theme-development/theme-design-ux-guidelines.md @@ -1,4 +1,4 @@ -# Theme Design and User Experience Guidelines +# Theme design and user experience guidelines This guide covers general guidelines and best practices to follow in order to ensure your theme experience aligns with ecommerce industry standards and WooCommerce for providing a great online shopping experience, maximizing sales, ensuring ease of use, seamless integration, and strong UX adoption. diff --git a/docs/user-experience/accessibility.md b/docs/user-experience/accessibility.md index 61d129fb7ba..77b6c204749 100644 --- a/docs/user-experience/accessibility.md +++ b/docs/user-experience/accessibility.md @@ -1,4 +1,4 @@ -# User Experience Guidelines: Accessibility +# User experience guidelines: accessibility ## Accessibility diff --git a/docs/user-experience/best-practices.md b/docs/user-experience/best-practices.md index 01b611057cd..5f7cf49d941 100644 --- a/docs/user-experience/best-practices.md +++ b/docs/user-experience/best-practices.md @@ -1,4 +1,4 @@ -# User Experience Guidelines: Best Practices +# User experience guidelines: best practices ## Best practices diff --git a/docs/user-experience/colors.md b/docs/user-experience/colors.md index 1ded9dc7a84..63688441921 100644 --- a/docs/user-experience/colors.md +++ b/docs/user-experience/colors.md @@ -1,4 +1,4 @@ -# User Experience Guidelines: Colors +# User experience guidelines: colors ## Colors diff --git a/docs/user-experience/notices.md b/docs/user-experience/notices.md index b9bdd2df5a9..e568b71fb39 100644 --- a/docs/user-experience/notices.md +++ b/docs/user-experience/notices.md @@ -1,4 +1,4 @@ -# User Experience Guidelines: Notices +# User experience guidelines: notices ## Notices diff --git a/docs/user-experience/onboarding.md b/docs/user-experience/onboarding.md index e615a564e6a..a1b0d3be432 100644 --- a/docs/user-experience/onboarding.md +++ b/docs/user-experience/onboarding.md @@ -1,4 +1,4 @@ -# User Experience Guidelines: Onboarding +# User experience guidelines: onboarding ## Onboarding diff --git a/docs/user-experience/task-list-and-inbox.md b/docs/user-experience/task-list-and-inbox.md index 3b819cb9396..e1ff185d04a 100644 --- a/docs/user-experience/task-list-and-inbox.md +++ b/docs/user-experience/task-list-and-inbox.md @@ -1,4 +1,4 @@ -# User Experience Guidelines: Task list and Inbox +# User experience guidelines: task list and inbox ## Task List & Inbox diff --git a/docs/user-experience/user-experience-guidelines.md b/docs/user-experience/user-experience-guidelines.md index fcdd757cf36..e9efcd55938 100644 --- a/docs/user-experience/user-experience-guidelines.md +++ b/docs/user-experience/user-experience-guidelines.md @@ -1,4 +1,4 @@ -# User Experience Guidelines +# User experience guidelines This guide covers general guidelines, and best practices to follow in order to ensure your product experience aligns with WooCommerce for ease of use, seamless integration, and strong adoption. diff --git a/docs/wc-cli/commands.md b/docs/wc-cli/commands.md index 4eae805ee47..a5460145a3a 100644 --- a/docs/wc-cli/commands.md +++ b/docs/wc-cli/commands.md @@ -1,4 +1,4 @@ -# WC CLI: Commands +# WC CLI: commands ## wc shop_coupon diff --git a/docs/wc-cli/overview.md b/docs/wc-cli/overview.md index 291d6c397fe..54bdca84826 100644 --- a/docs/wc-cli/overview.md +++ b/docs/wc-cli/overview.md @@ -1,4 +1,4 @@ -# WC CLI: Overview +# WC CLI: overview WooCommerce CLI (WC-CLI) offers the ability to manage WooCommerce (WC) via the command-line, using WP CLI. The documentation here covers the version of WC CLI that started shipping in WC 3.0.0 and later. From a456a9f24f50b8bfcf02fcaab862a59dcdde4f79 Mon Sep 17 00:00:00 2001 From: Brent MacKinnon Date: Mon, 27 Nov 2023 16:01:57 -0400 Subject: [PATCH 06/51] Create set-up-a-child-theme.md --- docs/getting-started/set-up-a-child-theme.md | 124 +++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 docs/getting-started/set-up-a-child-theme.md diff --git a/docs/getting-started/set-up-a-child-theme.md b/docs/getting-started/set-up-a-child-theme.md new file mode 100644 index 00000000000..bec20d31224 --- /dev/null +++ b/docs/getting-started/set-up-a-child-theme.md @@ -0,0 +1,124 @@ +# Set up and use a child theme + +**Note:** This document is intended for creating and using classic child themes. For a comprehensive guide on creating a child block theme and understanding the differences between a classic and block theme, please refer to [this detailed documentation](https://learn.wordpress.org/lesson-plan/create-a-basic-child-theme-for-block-themes/). + + +Sometimes, you might need to customize your theme or WooCommerce beyond what is possible via the options. These guidelines will teach you the basics of how to go about customizing your site by using a child theme. + +## What is a child theme? + +Before we start it’s important that you understand what a child theme is. In short, a child theme is a layer that you put on top of the parent theme to make alterations without having to develop a new theme from scratch. There are two major reasons to use child themes: + +- Theme developers can use child themes as a way to offer variations on a theme, similar to what we do with the [Storefront child themes](https://woocommerce.com/product-category/themes/storefront-child-theme-themes/) +- Developers can use child themes to host customizations of the parent theme or any plugin on the site since the child theme will get priority over the plugins and parent theme + +Read [this guide from the WordPress Codex](http://codex.wordpress.org/Child_Themes). + +[Download a sample Storefront child theme to get started](https://github.com/stuartduff/storefront-child-theme) if you want to customize a website using Storefront as the theme. + +## Make a backup + +Before customizing a website, you should always ensure that you have a backup of your site in case anything goes wrong. More info at: [Backing up WordPress content](https://woocommerce.com/document/backup-wordpress-content/). + +## Getting started + +To get started, we need to prepare a child theme. + +### Making the child theme + +First, we need to create a new stylesheet for our child theme. Create a new file called `style.css` and put this code in it: + +```css +/\* +Theme Name: Child Theme +Version: 1.0 +Description: Child theme for Woo. +Author: Woo +Author URI: http://woocommerce.com +Template: themedir \*/ +``` + +Next, we need to change the **Template** field to point to our installed WooTheme. In this example, we’ll use the Storefront theme, which is installed under `wp-content/themes/storefront/`. The result will look like this: + +```css +/\* +Theme Name: Storefront Child +Version: 1.0 +Description: Child theme for Storefront. +Author: Woo +Author URI: http://woocommerce.com +Template: storefront +\*/ + +/\* --------------- Theme customization starts here ----------------- \*/ +``` + +**Note:** With Storefront, you do not need to enqueue any of the parent theme style files with PHP from the theme’s `functions.php` file or `@import` these into the child themes `style.css` file as the main parent Storefront theme does this for you. + +With Storefront, a child theme only requires a blank `functions.php` file and a `style.css` file to get up and running. + +## Uploading and activating + +You can upload the child theme either through your FTP client, or using the Add New theme option in WordPress. + +- **Through FTP.** If you’re using FTP, it means that you go directly to the folders of your website. That means you’ll need **FTP access** to your host, so you can upload the new child theme. If you don’t have this, you should talk to your host and they can give you your FTP login details, and then download an FTP program to upload your files. +- **Through the WP Dashboard.** If you create a .zip file of your child theme folder you can then simply upload that to your site from the **WordPress > Appearance > Themes > Add New** section. + +Once you’ve done that, your child theme will be uploaded to a new folder in `wp-content/themes/`, for example, `wp-content/themes/storefront-child/`. Once uploaded, we can go to our **WP Dashboard > Appearance > Themes** and activate the child theme. + +## Customizing design and functionality + +Your child theme is now ready to be modified. Currently, it doesn’t hold any customization, so let’s look at a couple of examples of how we can customize the child theme without touching the parent theme. + +### Design customization + +Let’s do an example together where we change the color of the site title. Add this to your `/storefront-child/style.css`: + +```css +.site-branding h1 a { +color: red; +} +``` + +After saving the file and refreshing our browser, you will now see that the color of the site title has changed! + + +### Template changes + +**Note:** This doesn’t apply to [Storefront child themes](https://woocommerce.com/product-category/themes/storefront-child-theme-themes/). Any customization to a Storefront child themes files will be lost when updating. Instead of customizing the Storefront child themes files directly, we recommended that you add code snippets to a customization plugin. We’ve created one to do just this. Download [Theme Customizations](https://github.com/woocommerce/theme-customisations) for free. + +But wait, there’s more! You can do the same with the template files (`*.php`) in the theme folder. For example if w, wanted to modify some code in the header, we need to copy header.php from our parent theme folder `wp-content/themes/storefront/header.php` to our child theme folder `wp-content/themes/storefront-child/header.php`. Once we have copied it to our child theme, we edit `header.php` and customize any code we want. The `header.php` in the child theme will be used instead of the parent theme’s `header.php`. + +The same goes for WooCommerce templates. If you create a new folder in your child theme called “WooCommerce”, you can make changes to the WooCommerce templates there to make it more in line with the overall design of your website. More on WooCommerce’s template structure [can be found here](https://woocommerce.com/document/template-structure/). + +### Functionality changes + +**NOTE**: The functions.php in your child theme should be **empty** and not include anything from the parent theme’s functions.php. + +The `functions.php` in your child theme is loaded **before** the parent theme’s `functions.php`. If a function in the parent theme is **pluggable**, it allows you to copy a function from the parent theme into the child theme’s `functions.php` and have it replace the one in your parent theme. The only requirement is that the parent theme’s function is **pluggable**, which basically means it is wrapped in a conditional if statement e.g: + +```php +if +(!function_exists("parent_function_name")) +{ + parent_function_name() { + ... + } +} +``` + +If the parent theme function is **pluggable**, you can copy it to the child theme `functions.php` and modify the function to your liking. + +## Template directory vs stylesheet directory + +WordPress has a few things that it handles differently in child themes. If you have a template file in your child theme, you have to modify how WordPress includes files. `get_template_directory()` will reference the parent theme. To make it use the file in the child theme, you need to change use `get_stylesheet_directory();`. + +[More info on this from the WP Codex](https://codex.wordpress.org/Child_Themes#Referencing_.2F_Including_Files_in_Your_Child_Theme) + +## Child theme support + +Although we do offer basic child theme support that can easily be answered, it still falls under theme customization, so please refer to our [support policy](http://woocommerce.com/support-policy/) to see the extent of support we give. We highly advise anybody confused with child themes to use the [WordPress forums](http://wordpress.org/support/) for help. + +## Sample child theme + +Download the sample child theme at the top of this article to get started. Place the child theme in your **wp-content/themes/** folder along with your parent theme. From 1a99ef2b8ab381409482821c4e074c53bc8b5a56 Mon Sep 17 00:00:00 2001 From: Brent MacKinnon Date: Mon, 27 Nov 2023 16:25:00 -0400 Subject: [PATCH 07/51] Create classic-theme-developer-handbook.md --- .../classic-theme-developer-handbook.md | 228 ++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 docs/theme-development/classic-theme-developer-handbook.md diff --git a/docs/theme-development/classic-theme-developer-handbook.md b/docs/theme-development/classic-theme-developer-handbook.md new file mode 100644 index 00000000000..ae93df8372b --- /dev/null +++ b/docs/theme-development/classic-theme-developer-handbook.md @@ -0,0 +1,228 @@ +# Classic Theme Developer Handbook + +--- + +**Note:** this doc is heared toward the development of classic themes. Visit [Develop Your First Low-Code Block Theme](https://learn.wordpress.org/course/develop-your-first-low-code-block-theme/) to learn about block theme development, and explore the [Create Block Theme plugin](https://wordpress.org/plugins/create-block-theme/) tool when you're ready to create a new theme. + +--- + +WooCommerce looks great with all WordPress themes as of version 3.3, even if they are not WooCommerce-specific themes and do not formally declare support. Templates render inside the content, and this keeps everything looking natural on your site. + +Non-WooCommerce themes, by default, also include: + +- Zoom feature enabled – ability to zoom in/out on a product image +- Lightbox feature enabled – product gallery images pop up to examine closer +- Comments enabled, not Reviews – visitors/buyers can leave comments, same as a post, and not product ratings or reviews + +If you want more control over the layout of WooCommerce elements or full reviews support your theme will need to integrate with WooCommerce. There are a few different ways you can do this, and they are outlined below. + +## Theme Integration + +There are three possible ways to integrate WooCommerce with a theme. If you are using WooCommerce 3.2 or below you will need to use one of these methods to ensure WooCommerce shop and product pages are rendered correctly in your theme. If you are using a version of WooCommerce 3.3 or above you only need to do a theme integration if the automatic one doesn’t meet your needs. + +### Using woocommerce_content() + +This solution allows you to create a new template page within your theme that is used for **all WooCommerce taxonomy and post type displays**. While an easy catch-all solution, it does have a drawback in that this template is used for **all WC** taxonomies (product categories, etc.) and post types (product archives, single product pages). Developers are encouraged to use the hooks instead. + +To set up this template page: + +**1. Duplicate page.php** + +Duplicate your theme’s page.php file, and name it woocommerce.php. This file should be found like this: `wp-content/themes/YOURTHEME/woocommerce.php`. + +**2. Edit your page (woocommerce.php)** + +Open up your newly created **woocommerce.php** in a text editor, or the editor of your choice. + +**3. Replace the loop** + +Next you need to find the loop (see [The_Loop](http://codex.wordpress.org/The_Loop)). The loop usually starts with a: + +```php + +``` + +This varies between themes. Once you have found it, **delete it**. In its place, put: + +```php + +``` + +This will make it use **WooCommerce’s loop instead**. Save the file. You’re done. + +**Note:** When creating woocommerce.php in your theme’s folder, you will not be able to override the woocommerce/archive-product.php custom template as woocommerce.php has priority over archive-product.php. This is intended to prevent display issues. + +### Using hooks + +The hook method is more involved, but it is also **more flexible**. This is similar to the method we use when creating themes. It’s also the method we use to integrate nicely with Twenty Ten to Twenty Sixteen themes. + +Insert a few lines in your **theme’s functions.php** file. + +First unhook the WooCommerce wrappers: + +```php +remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10); +remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10); +``` +Then hook in your own functions to display the wrappers your theme requires: + +```php +add_action('woocommerce_before_main_content', 'my_theme_wrapper_start', 10); +add_action('woocommerce_after_main_content', 'my_theme_wrapper_end', 10); + +function my_theme_wrapper_start() { + echo '
'; +} + +function my_theme_wrapper_end() { + echo '
'; +} +``` + +Make sure that the markup matches that of your theme. If you’re unsure of which classes or IDs to use, take a look at your theme’s page.php for guidance. + +**Whenever possible use the hooks to add or remove content. This method is more robust than overriding the templates.** If you have overridden a template, you have to update the template any time the file changes. If you are using the hooks, you will only have to update if the hooks change, which happens much less frequently. + +### Using template overrides + +For information about overriding the WooCommerce templates with your own custom templates read the Template Structure section below. This method requires more maintenance than the hook-based method, as templates will need to be kept up-to-date with the WooCommerce core templates. + +## Declaring WooCommerce Support + +If you are using custom WooCommerce template overrides in your theme you need to declare WooCommerce support using the `add_theme_support` function. WooCommerce template overrides are only enabled on themes that declare WooCommerce support. If you do not declare WooCommerce support in your theme, WooCommerce will assume the theme is not designed for WooCommerce compatibility and will use shortcode-based unsupported theme rendering to display the shop. + +Declaring WooCommerce support is straightforward and involves adding one function in your theme’s functions.php file. + +### Basic Usage + +```php +function mytheme_add_woocommerce_support() { + add_theme_support( 'woocommerce' ); +} + +add_action( 'after_setup_theme', 'mytheme_add_woocommerce_support' ); +``` + +Make sure you are using the after_setup_theme hook and not the init hook. Read more about this at the documentation for add_theme_support. + +### Usage with Settings + +```php +function mytheme_add_woocommerce_support() { + add_theme_support( 'woocommerce', array( + 'thumbnail_image_width' => 150, + 'single_image_width' => 300, + + 'product_grid' => array( + 'default_rows' => 3, + 'min_rows' => 2, + 'max_rows' => 8, + 'default_columns' => 4, + 'min_columns' => 2, + 'max_columns' => 5, + ), + ) ); +} + +add_action( 'after_setup_theme', 'mytheme_add_woocommerce_support' ); +``` +These are optional theme settings that you can set when declaring WooCommerce support. + +`thumbnail_image_width` and `single_image_width` will set the image sizes for the shop. If these are not declared when adding theme support, the user can set image sizes in the Customizer under the **WooCommerce > Product Images** section. + +The `product_grid` settings let theme developers set default, minimum, and maximum column and row settings for the Shop. Users can set the rows and columns in the Customizer under the **WooCommerce > Product Catalog** section. + +### Product gallery features (zoom, swipe, lightbox) + +The product gallery introduced in 3.0.0 ([read here for more information](https://developer.woo.com/2016/10/19/new-product-gallery-merged-in-to-core-for-2-7/)) uses Flexslider, Photoswipe, and the jQuery Zoom plugin to offer swiping, lightboxes and other neat features. + +In versions `3.0`, `3.1`, and `3.2`, the new gallery is off by default and needs to be enabled using a snippet (below) or by using a compatible theme. This is because it’s common for themes to disable the WooCommerce gallery and replace it with their own scripts. + +In versions `3.3+`, the gallery is off by default for WooCommerce compatible themes unless they declare support for it (below). 3rd party themes with no WooCommerce support will have the gallery enabled by default. + +To enable the gallery in your theme, you can declare support like this: + +```php +add_theme_support( 'wc-product-gallery-zoom' ); +add_theme_support( 'wc-product-gallery-lightbox' ); +add_theme_support( 'wc-product-gallery-slider' ); +``` + +You do not have to support all 3 parts of the gallery; you can pick and choose features. If a feature is not enabled, the scripts will not be loaded and the gallery code will not execute on product pages. + +If gallery features are enabled (e.g. you have a theme which enabled them, or you are running a non-WC compatible theme), you can disable them with `remove_theme_support`: + +```php +remove_theme_support( 'wc-product-gallery-zoom' ); +remove_theme_support( 'wc-product-gallery-lightbox' ); +remove_theme_support( 'wc-product-gallery-slider' ); +``` + +You can disable any parts; you do not need to disable all features. + +## Template Structure + +WooCommerce template files contain the **markup** and **template structure** for **frontend and HTML emails** of your store. If some structural change in HTML is necessary, you should override a template. + +When you open these files, you will notice they all contain **hooks** that allow you to add/move content without needing to edit template files themselves. This method protects against upgrade issues, as the template files can be left completely untouched. + +Template files can be found within the `**/woocommerce/templates/**` directory. + +### How to Edit Files + +Edit files in an **upgrade-safe way** using *overrides*. Copy it into a directory within your theme named `/woocommerce` keeping the same file structure but removing the `/templates/`subdirectory. + +Example: To override the admin order notification, copy: `wp-content/plugins/woocommerce/templates/emails/admin-new-order.php` to `wp-content/themes/yourtheme/woocommerce/emails/admin-new-order.php` + +The copied file will now override the WooCommerce default template file. + +**Warning:** Do not delete any of WooCommerce hooks when overriding a template. This would prevent plugins hooking in to add content. + +**Warning:** Do not edit these files within the core plugin itself as they are overwritten during the upgrade process and any customizations will be lost. + +## CSS Structure + +Inside the `assets/css/` directory, you will find the stylesheets responsible for the default WooCommerce layout styles. + +Files to look for are `woocommerce.scss` and `woocommerce.css`. + +- `woocommerce.css` is the minified stylesheet – it’s the CSS without any of the spaces, indents, etc. This makes the file very fast to load. This file is referenced by the plugin and declares all WooCommerce styles. +- `woocommerce.scss` is not directly used by the plugin, but by the team developing WooCommerce. We use [SASS](http://sass-lang.com/) in this file to script the CSS in the first file easier and faster. +The CSS is written to make the default layout compatible with as many themes as possible by using % widths for all layout styles. It is, however, likely that you’ll want to make your own adjustments. + +### Modifications + +To avoid upgrade issues, we advise not editing these files but rather use them as a point of reference. + +If you just want to make changes, we recommend adding some overriding styles to your theme stylesheet. For example, add the following to your theme stylesheet to make WooCommerce buttons black instead of the default color: + +```css +a.button, +button.button, +input.button, +#review_form #submit { + background:black; +} +``` + +WooCommerce also outputs the theme name (plus other useful information, such as which type of page is being viewed) as a class on the body tag, which can be useful for overriding styles. + +### Disabling WooCommerce styles + +If you plan to make major changes, or create a theme from scratch, then you may prefer your theme not reference the WooCommerce stylesheet at all. You can tell WooCommerce to not use the default `woocommerce.css`. + +Add the following code to your theme’s `functions.php` file: + +```php +add_filter( 'woocommerce_enqueue_styles', '__return_false' ); +``` + +With this definition in place, your theme will no longer use the WooCommerce stylesheet and give you a blank canvas upon which you can build your own desired layout/style. + +Styling a WooCommerce theme from scratch for the first time is no easy task. There are many different pages and elements that need to be styled, and if you’re new to WooCommerce, you are probably not familiar with many of them. A non-exhaustive list of WooCommerce elements to style can be found [here](https://developer.files.wordpress.com/2017/12/woocommerce-theme-testing-checklist.pdf). \ No newline at end of file From 8d2489de29d6170b71663c6765d0d54614b93952 Mon Sep 17 00:00:00 2001 From: Brent MacKinnon Date: Mon, 27 Nov 2023 16:53:14 -0400 Subject: [PATCH 08/51] Update classic-theme-developer-handbook.md --- .../classic-theme-developer-handbook.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/theme-development/classic-theme-developer-handbook.md b/docs/theme-development/classic-theme-developer-handbook.md index ae93df8372b..9d676d1e360 100644 --- a/docs/theme-development/classic-theme-developer-handbook.md +++ b/docs/theme-development/classic-theme-developer-handbook.md @@ -26,15 +26,15 @@ This solution allows you to create a new template page within your theme that is To set up this template page: -**1. Duplicate page.php** +1. Duplicate page.php Duplicate your theme’s page.php file, and name it woocommerce.php. This file should be found like this: `wp-content/themes/YOURTHEME/woocommerce.php`. -**2. Edit your page (woocommerce.php)** +2. Edit your page (woocommerce.php) Open up your newly created **woocommerce.php** in a text editor, or the editor of your choice. -**3. Replace the loop** +3. Replace the loop Next you need to find the loop (see [The_Loop](http://codex.wordpress.org/The_Loop)). The loop usually starts with a: @@ -70,6 +70,7 @@ First unhook the WooCommerce wrappers: remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10); remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10); ``` + Then hook in your own functions to display the wrappers your theme requires: ```php @@ -132,6 +133,7 @@ function mytheme_add_woocommerce_support() { add_action( 'after_setup_theme', 'mytheme_add_woocommerce_support' ); ``` + These are optional theme settings that you can set when declaring WooCommerce support. `thumbnail_image_width` and `single_image_width` will set the image sizes for the shop. If these are not declared when adding theme support, the user can set image sizes in the Customizer under the **WooCommerce > Product Images** section. @@ -225,4 +227,4 @@ add_filter( 'woocommerce_enqueue_styles', '__return_false' ); With this definition in place, your theme will no longer use the WooCommerce stylesheet and give you a blank canvas upon which you can build your own desired layout/style. -Styling a WooCommerce theme from scratch for the first time is no easy task. There are many different pages and elements that need to be styled, and if you’re new to WooCommerce, you are probably not familiar with many of them. A non-exhaustive list of WooCommerce elements to style can be found [here](https://developer.files.wordpress.com/2017/12/woocommerce-theme-testing-checklist.pdf). \ No newline at end of file +Styling a WooCommerce theme from scratch for the first time is no easy task. There are many different pages and elements that need to be styled, and if you’re new to WooCommerce, you are probably not familiar with many of them. A non-exhaustive list of WooCommerce elements to style can be found [here](https://developer.files.wordpress.com/2017/12/woocommerce-theme-testing-checklist.pdf). From ced11e973004c67dc8129b6449abf3daaa24ead2 Mon Sep 17 00:00:00 2001 From: Brent MacKinnon Date: Mon, 27 Nov 2023 17:12:39 -0400 Subject: [PATCH 09/51] Rename README.md to translating-woocommerce.md --- .../{README.md => translating-woocommerce.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/localization-translation/{README.md => translating-woocommerce.md} (100%) diff --git a/docs/localization-translation/README.md b/docs/localization-translation/translating-woocommerce.md similarity index 100% rename from docs/localization-translation/README.md rename to docs/localization-translation/translating-woocommerce.md From 45e016703cd946fb74e3f40bf43152442acac2dd Mon Sep 17 00:00:00 2001 From: paul sealock Date: Tue, 28 Nov 2023 11:41:00 +1300 Subject: [PATCH 10/51] rename package release branch --- .github/workflows/prepare-package-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-package-release.yml b/.github/workflows/prepare-package-release.yml index cbce98dc227..ac3338c8d31 100644 --- a/.github/workflows/prepare-package-release.yml +++ b/.github/workflows/prepare-package-release.yml @@ -49,7 +49,7 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: 'Automated change: Prep ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release.' - branch: release/packages-${{ steps.date.outputs.date }} + branch: release-packages/${{ steps.date.outputs.date }} delete-branch: true title: Prepare Packages for Release reviewers: ${{ github.actor }} From a9651ecf1185e66c8163ad15aad2d61cfdd6bf78 Mon Sep 17 00:00:00 2001 From: paul sealock Date: Tue, 28 Nov 2023 11:49:59 +1300 Subject: [PATCH 11/51] make better branch name --- .github/workflows/prepare-package-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-package-release.yml b/.github/workflows/prepare-package-release.yml index ac3338c8d31..de6e1a05ceb 100644 --- a/.github/workflows/prepare-package-release.yml +++ b/.github/workflows/prepare-package-release.yml @@ -49,7 +49,7 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: 'Automated change: Prep ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release.' - branch: release-packages/${{ steps.date.outputs.date }} + branch: release/packages-${{ steps.date.outputs.date }}-${{ github.event.inputs.packages.replace(/,/g, '-').replace(/@/g, '') }} delete-branch: true title: Prepare Packages for Release reviewers: ${{ github.actor }} From 5af9ebc08712c133f92d6a6ac06a636a5d3233ea Mon Sep 17 00:00:00 2001 From: paul sealock Date: Tue, 28 Nov 2023 12:03:09 +1300 Subject: [PATCH 12/51] save --- .github/workflows/prepare-package-release.yml | 68 ++++++++++--------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/.github/workflows/prepare-package-release.yml b/.github/workflows/prepare-package-release.yml index de6e1a05ceb..ea8cd179cda 100644 --- a/.github/workflows/prepare-package-release.yml +++ b/.github/workflows/prepare-package-release.yml @@ -17,42 +17,46 @@ jobs: contents: write pull-requests: write steps: - - uses: actions/checkout@v3 - with: - fetch-depth: '0' + # - uses: actions/checkout@v3 + # with: + # fetch-depth: '0' - - name: Setup WooCommerce Monorepo - uses: ./.github/actions/setup-woocommerce-monorepo + # - name: Setup WooCommerce Monorepo + # uses: ./.github/actions/setup-woocommerce-monorepo - - name: Execute script - run: ./tools/package-release/bin/dev prepare ${{ github.event.inputs.packages }} + # - name: Execute script + # run: ./tools/package-release/bin/dev prepare ${{ github.event.inputs.packages }} - - name: Print git status - run: git status + # - name: Print git status + # run: git status - - name: Get current date - id: date - run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT + # - name: Get current date + # id: date + # run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT - - name: Set all package string - id: all_description - if: ${{ github.event.inputs.packages == '-a'}} - run: echo "str=all packages" >> $GITHUB_OUTPUT + - name: Get id string + id: id + run: echo ${${{ github.event.inputs.packages }}//','/''} - - name: Set Specific packages string - id: specific_description - if: ${{ github.event.inputs.packages != '-a'}} - run: echo "str=${{ github.event.inputs.packages }}" >> $GITHUB_OUTPUT + # - name: Set all package string + # id: all_description + # if: ${{ github.event.inputs.packages == '-a'}} + # run: echo "str=all packages" >> $GITHUB_OUTPUT - - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 - with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: 'Automated change: Prep ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release.' - branch: release/packages-${{ steps.date.outputs.date }}-${{ github.event.inputs.packages.replace(/,/g, '-').replace(/@/g, '') }} - delete-branch: true - title: Prepare Packages for Release - reviewers: ${{ github.actor }} - body: | - # Prepare ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release. - This PR has been autogenerated by [Prepare Package Release workflow](https://github.com/woocommerce/woocommerce/actions/workflows/prepare-package-release.yml) in run [${{ github.run_id }}](https://github.com/woocommerce/woocommerce/actions/runs/${{ github.run_id }}) + # - name: Set Specific packages string + # id: specific_description + # if: ${{ github.event.inputs.packages != '-a'}} + # run: echo "str=${{ github.event.inputs.packages }}" >> $GITHUB_OUTPUT + + # - name: Create Pull Request + # uses: peter-evans/create-pull-request@v4 + # with: + # token: ${{ secrets.GITHUB_TOKEN }} + # commit-message: 'Automated change: Prep ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release.' + # branch: release/packages-${{ steps.date.outputs.date }}-${{ github.event.inputs.packages.replace(/,/g, '-').replace(/@/g, '') }} + # delete-branch: true + # title: Prepare Packages for Release + # reviewers: ${{ github.actor }} + # body: | + # # Prepare ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release. + # This PR has been autogenerated by [Prepare Package Release workflow](https://github.com/woocommerce/woocommerce/actions/workflows/prepare-package-release.yml) in run [${{ github.run_id }}](https://github.com/woocommerce/woocommerce/actions/runs/${{ github.run_id }}) From afa636c379ef35609554688a094ef2198715ba10 Mon Sep 17 00:00:00 2001 From: paul sealock Date: Tue, 28 Nov 2023 12:04:29 +1300 Subject: [PATCH 13/51] try this --- .github/workflows/prepare-package-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-package-release.yml b/.github/workflows/prepare-package-release.yml index ea8cd179cda..8d8e30ab9af 100644 --- a/.github/workflows/prepare-package-release.yml +++ b/.github/workflows/prepare-package-release.yml @@ -36,7 +36,7 @@ jobs: - name: Get id string id: id - run: echo ${${{ github.event.inputs.packages }}//','/''} + run: echo ${${{ github.event.inputs.packages }}//,/} # - name: Set all package string # id: all_description From c686bfeb8a1422342c4db404bfd80404ee23a8e0 Mon Sep 17 00:00:00 2001 From: paul sealock Date: Tue, 28 Nov 2023 12:11:23 +1300 Subject: [PATCH 14/51] here we go --- .github/workflows/prepare-package-release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/prepare-package-release.yml b/.github/workflows/prepare-package-release.yml index 8d8e30ab9af..87cffaba3a3 100644 --- a/.github/workflows/prepare-package-release.yml +++ b/.github/workflows/prepare-package-release.yml @@ -37,6 +37,7 @@ jobs: - name: Get id string id: id run: echo ${${{ github.event.inputs.packages }}//,/} + run: echo "${{ github.event.inputs.packages }}" | sed "s/,/-/" # - name: Set all package string # id: all_description From 670a35907e0ca9ae903ab91751fcb58ff544977f Mon Sep 17 00:00:00 2001 From: paul sealock Date: Tue, 28 Nov 2023 12:12:29 +1300 Subject: [PATCH 15/51] oops --- .github/workflows/prepare-package-release.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/prepare-package-release.yml b/.github/workflows/prepare-package-release.yml index 87cffaba3a3..4d299f3750a 100644 --- a/.github/workflows/prepare-package-release.yml +++ b/.github/workflows/prepare-package-release.yml @@ -36,7 +36,6 @@ jobs: - name: Get id string id: id - run: echo ${${{ github.event.inputs.packages }}//,/} run: echo "${{ github.event.inputs.packages }}" | sed "s/,/-/" # - name: Set all package string From f4bee14d018a54a8a9544be2b7b64f71f5adb7bf Mon Sep 17 00:00:00 2001 From: paul sealock Date: Tue, 28 Nov 2023 12:19:28 +1300 Subject: [PATCH 16/51] here we go --- .github/workflows/prepare-package-release.yml | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/.github/workflows/prepare-package-release.yml b/.github/workflows/prepare-package-release.yml index 4d299f3750a..a9d7c5359b2 100644 --- a/.github/workflows/prepare-package-release.yml +++ b/.github/workflows/prepare-package-release.yml @@ -17,46 +17,46 @@ jobs: contents: write pull-requests: write steps: - # - uses: actions/checkout@v3 - # with: - # fetch-depth: '0' + - uses: actions/checkout@v3 + with: + fetch-depth: '0' - # - name: Setup WooCommerce Monorepo - # uses: ./.github/actions/setup-woocommerce-monorepo + - name: Setup WooCommerce Monorepo + uses: ./.github/actions/setup-woocommerce-monorepo - # - name: Execute script - # run: ./tools/package-release/bin/dev prepare ${{ github.event.inputs.packages }} + - name: Execute script + run: ./tools/package-release/bin/dev prepare ${{ github.event.inputs.packages }} - # - name: Print git status - # run: git status + - name: Print git status + run: git status - # - name: Get current date - # id: date - # run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT + - name: Get current date + id: date + run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT - - name: Get id string - id: id - run: echo "${{ github.event.inputs.packages }}" | sed "s/,/-/" + - name: Get branch name package parameter + id: branch_package_name + run: echo "name=$(${{ github.event.inputs.packages }}" | sed "s/,/-/")" >> $GITHUB_OUTPUT - # - name: Set all package string - # id: all_description - # if: ${{ github.event.inputs.packages == '-a'}} - # run: echo "str=all packages" >> $GITHUB_OUTPUT + - name: Set all package string + id: all_description + if: ${{ github.event.inputs.packages == '-a'}} + run: echo "str=all packages" >> $GITHUB_OUTPUT - # - name: Set Specific packages string - # id: specific_description - # if: ${{ github.event.inputs.packages != '-a'}} - # run: echo "str=${{ github.event.inputs.packages }}" >> $GITHUB_OUTPUT + - name: Set Specific packages string + id: specific_description + if: ${{ github.event.inputs.packages != '-a'}} + run: echo "str=${{ github.event.inputs.packages }}" >> $GITHUB_OUTPUT - # - name: Create Pull Request - # uses: peter-evans/create-pull-request@v4 - # with: - # token: ${{ secrets.GITHUB_TOKEN }} - # commit-message: 'Automated change: Prep ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release.' - # branch: release/packages-${{ steps.date.outputs.date }}-${{ github.event.inputs.packages.replace(/,/g, '-').replace(/@/g, '') }} - # delete-branch: true - # title: Prepare Packages for Release - # reviewers: ${{ github.actor }} - # body: | - # # Prepare ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release. - # This PR has been autogenerated by [Prepare Package Release workflow](https://github.com/woocommerce/woocommerce/actions/workflows/prepare-package-release.yml) in run [${{ github.run_id }}](https://github.com/woocommerce/woocommerce/actions/runs/${{ github.run_id }}) + - name: Create Pull Request + uses: peter-evans/create-pull-request@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: 'Automated change: Prep ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release.' + branch: release/packages-${{ steps.date.outputs.date }}-${{ steps.branch_package_name.outputs.name }} + delete-branch: true + title: Prepare Packages for Release + reviewers: ${{ github.actor }} + body: | + # Prepare ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release. + This PR has been autogenerated by [Prepare Package Release workflow](https://github.com/woocommerce/woocommerce/actions/workflows/prepare-package-release.yml) in run [${{ github.run_id }}](https://github.com/woocommerce/woocommerce/actions/runs/${{ github.run_id }}) From 9e7bf3d7129e90045917b73037a209e379cd60b5 Mon Sep 17 00:00:00 2001 From: paul sealock Date: Tue, 28 Nov 2023 12:19:36 +1300 Subject: [PATCH 17/51] add time --- .github/workflows/prepare-package-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-package-release.yml b/.github/workflows/prepare-package-release.yml index a9d7c5359b2..b39582a0db2 100644 --- a/.github/workflows/prepare-package-release.yml +++ b/.github/workflows/prepare-package-release.yml @@ -32,7 +32,7 @@ jobs: - name: Get current date id: date - run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT + run: echo "date=$(date +'%Y-%m-%d_%H:%M')" >> $GITHUB_OUTPUT - name: Get branch name package parameter id: branch_package_name From f4b788028fc861eaebb78087591113eff2762ac6 Mon Sep 17 00:00:00 2001 From: paul sealock Date: Tue, 28 Nov 2023 12:25:24 +1300 Subject: [PATCH 18/51] fix quotes --- .github/workflows/prepare-package-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-package-release.yml b/.github/workflows/prepare-package-release.yml index b39582a0db2..69aa48dfe82 100644 --- a/.github/workflows/prepare-package-release.yml +++ b/.github/workflows/prepare-package-release.yml @@ -36,7 +36,7 @@ jobs: - name: Get branch name package parameter id: branch_package_name - run: echo "name=$(${{ github.event.inputs.packages }}" | sed "s/,/-/")" >> $GITHUB_OUTPUT + run: echo 'name=$("${{ github.event.inputs.packages }}" | sed "s/,/-/")' >> $GITHUB_OUTPUT - name: Set all package string id: all_description From cb3ed643c02a2a8d876fc06edeb3c5236b662ce2 Mon Sep 17 00:00:00 2001 From: paul sealock Date: Tue, 28 Nov 2023 12:33:48 +1300 Subject: [PATCH 19/51] just use time --- .github/workflows/prepare-package-release.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/prepare-package-release.yml b/.github/workflows/prepare-package-release.yml index 69aa48dfe82..0466ea59cf7 100644 --- a/.github/workflows/prepare-package-release.yml +++ b/.github/workflows/prepare-package-release.yml @@ -32,11 +32,7 @@ jobs: - name: Get current date id: date - run: echo "date=$(date +'%Y-%m-%d_%H:%M')" >> $GITHUB_OUTPUT - - - name: Get branch name package parameter - id: branch_package_name - run: echo 'name=$("${{ github.event.inputs.packages }}" | sed "s/,/-/")' >> $GITHUB_OUTPUT + run: echo "date=$(date +'%Y-%m-%d-%H-%M')" >> $GITHUB_OUTPUT - name: Set all package string id: all_description @@ -53,7 +49,7 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: 'Automated change: Prep ${{ steps.all_description.outputs.str || steps.specific_description.outputs.str }} for release.' - branch: release/packages-${{ steps.date.outputs.date }}-${{ steps.branch_package_name.outputs.name }} + branch: release/packages-${{ steps.date.outputs.date }} delete-branch: true title: Prepare Packages for Release reviewers: ${{ github.actor }} From 6e039e8578bc62c9fa06a6dbab55ee8ceafa8280 Mon Sep 17 00:00:00 2001 From: Brent MacKinnon Date: Tue, 28 Nov 2023 10:56:52 -0400 Subject: [PATCH 20/51] Update classic-theme-developer-handbook.md --- .../classic-theme-developer-handbook.md | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/docs/theme-development/classic-theme-developer-handbook.md b/docs/theme-development/classic-theme-developer-handbook.md index 9d676d1e360..c9223a37bb2 100644 --- a/docs/theme-development/classic-theme-developer-handbook.md +++ b/docs/theme-development/classic-theme-developer-handbook.md @@ -26,17 +26,9 @@ This solution allows you to create a new template page within your theme that is To set up this template page: -1. Duplicate page.php - -Duplicate your theme’s page.php file, and name it woocommerce.php. This file should be found like this: `wp-content/themes/YOURTHEME/woocommerce.php`. - -2. Edit your page (woocommerce.php) - -Open up your newly created **woocommerce.php** in a text editor, or the editor of your choice. - -3. Replace the loop - -Next you need to find the loop (see [The_Loop](http://codex.wordpress.org/The_Loop)). The loop usually starts with a: +1. **Duplicate page.php:** Duplicate your theme’s page.php file, and name it woocommerce.php. This file should be found like this: `wp-content/themes/YOURTHEME/woocommerce.php`. +2. **Edit your page (woocommerce.php)**: Open up your newly created **woocommerce.php** in a text editor, or the editor of your choice. +3. **Replace the loop:** Next you need to find the loop (see [The_Loop](http://codex.wordpress.org/The_Loop)). The loop usually starts with a: ```php Date: Tue, 28 Nov 2023 14:57:28 +0000 Subject: [PATCH 21/51] Update WooCommerce Blocks to 11.6.1 (#41743) * Updated woocommerce/woocommerce-blocks to 11.6.1 * Updated content-hash on composer.lock --- .../changelog/update-woocommerce-blocks-11.6.1 | 4 ++++ plugins/woocommerce/composer.json | 2 +- plugins/woocommerce/composer.lock | 14 +++++++------- 3 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 plugins/woocommerce/changelog/update-woocommerce-blocks-11.6.1 diff --git a/plugins/woocommerce/changelog/update-woocommerce-blocks-11.6.1 b/plugins/woocommerce/changelog/update-woocommerce-blocks-11.6.1 new file mode 100644 index 00000000000..5dbbb694d0a --- /dev/null +++ b/plugins/woocommerce/changelog/update-woocommerce-blocks-11.6.1 @@ -0,0 +1,4 @@ +Significance: minor +Type: update + +Update WooCommerce Blocks to 11.6.1 diff --git a/plugins/woocommerce/composer.json b/plugins/woocommerce/composer.json index 0e12762f089..a6ff4650d45 100644 --- a/plugins/woocommerce/composer.json +++ b/plugins/woocommerce/composer.json @@ -23,7 +23,7 @@ "maxmind-db/reader": "^1.11", "pelago/emogrifier": "^6.0", "woocommerce/action-scheduler": "3.7.0", - "woocommerce/woocommerce-blocks": "11.6.0" + "woocommerce/woocommerce-blocks": "11.6.1" }, "require-dev": { "automattic/jetpack-changelogger": "^3.3.0", diff --git a/plugins/woocommerce/composer.lock b/plugins/woocommerce/composer.lock index 74826c95a82..61ea3bbe1e4 100644 --- a/plugins/woocommerce/composer.lock +++ b/plugins/woocommerce/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": "d1634a3b24dd2f5c53a5d7c2d507a8ae", + "content-hash": "9aa8e31b166b09f29650e80f47481281", "packages": [ { "name": "automattic/jetpack-a8c-mc-stats", @@ -1004,16 +1004,16 @@ }, { "name": "woocommerce/woocommerce-blocks", - "version": "11.6.0", + "version": "11.6.1", "source": { "type": "git", "url": "https://github.com/woocommerce/woocommerce-blocks.git", - "reference": "2e4d7744a788af799b53ee8de128cfceac7f7930" + "reference": "3c6be3fbb5a3d7745864fd0ee2ea40c620c16330" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/woocommerce/woocommerce-blocks/zipball/2e4d7744a788af799b53ee8de128cfceac7f7930", - "reference": "2e4d7744a788af799b53ee8de128cfceac7f7930", + "url": "https://api.github.com/repos/woocommerce/woocommerce-blocks/zipball/3c6be3fbb5a3d7745864fd0ee2ea40c620c16330", + "reference": "3c6be3fbb5a3d7745864fd0ee2ea40c620c16330", "shasum": "" }, "require": { @@ -1064,9 +1064,9 @@ ], "support": { "issues": "https://github.com/woocommerce/woocommerce-blocks/issues", - "source": "https://github.com/woocommerce/woocommerce-blocks/tree/v11.6.0" + "source": "https://github.com/woocommerce/woocommerce-blocks/tree/v11.6.1" }, - "time": "2023-11-22T14:44:31+00:00" + "time": "2023-11-23T15:22:10+00:00" } ], "packages-dev": [ From 0482be94cc369ce8000175051d1570c259b44562 Mon Sep 17 00:00:00 2001 From: Fernando Marichal Date: Tue, 28 Nov 2023 12:05:22 -0300 Subject: [PATCH 22/51] Remove downloads list fixed height (#41744) * Remove fixed height in downloads list * Add changelog --- .../changelog/fix-41471_remove_fixed_height_in_downloads_list | 4 ++++ .../src/blocks/product-fields/downloads/editor.scss | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 packages/js/product-editor/changelog/fix-41471_remove_fixed_height_in_downloads_list diff --git a/packages/js/product-editor/changelog/fix-41471_remove_fixed_height_in_downloads_list b/packages/js/product-editor/changelog/fix-41471_remove_fixed_height_in_downloads_list new file mode 100644 index 00000000000..1a80ab3a310 --- /dev/null +++ b/packages/js/product-editor/changelog/fix-41471_remove_fixed_height_in_downloads_list @@ -0,0 +1,4 @@ +Significance: minor +Type: fix + +Remove downloads list fixed height #41744 diff --git a/packages/js/product-editor/src/blocks/product-fields/downloads/editor.scss b/packages/js/product-editor/src/blocks/product-fields/downloads/editor.scss index 03b43fad829..36a5cd379a0 100644 --- a/packages/js/product-editor/src/blocks/product-fields/downloads/editor.scss +++ b/packages/js/product-editor/src/blocks/product-fields/downloads/editor.scss @@ -18,7 +18,6 @@ $fixed-section-height: 224px; } &__table { - height: $fixed-section-height; overflow: auto; margin: 0; flex: 1 0 auto; From da46d5fb3bd9ad9fb79fc0feff097e3c3499898c Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 28 Nov 2023 16:35:48 +0000 Subject: [PATCH 23/51] Add changefile(s) from automation for the following project(s): woocommerce --- plugins/woocommerce/changelog/41682-issue-31678 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 plugins/woocommerce/changelog/41682-issue-31678 diff --git a/plugins/woocommerce/changelog/41682-issue-31678 b/plugins/woocommerce/changelog/41682-issue-31678 new file mode 100644 index 00000000000..7b0ce77cad2 --- /dev/null +++ b/plugins/woocommerce/changelog/41682-issue-31678 @@ -0,0 +1,4 @@ +Significance: patch +Type: fix + +Provide an error message when trying to grant access without selecting a product \ No newline at end of file From 882527fe054a5c074f79a6f06cea253e0a4c4c50 Mon Sep 17 00:00:00 2001 From: louwie17 Date: Tue, 28 Nov 2023 16:23:08 -0400 Subject: [PATCH 24/51] Prep both admin-layout and product editor (#41764) --- packages/js/admin-layout/changelog.md | 13 ++++++++++++- packages/js/admin-layout/changelog/.gitkeep | 0 .../changelog/41498-dev-make-lint-output-console | 4 ---- .../admin-layout/changelog/add-admin-layout-package | 4 ---- .../changelog/add-migrate-more-menu-37097 | 4 ---- .../changelog/dev-include-eslint-annotations | 4 ---- packages/js/admin-layout/changelog/dev-upgrade-ts-5 | 4 ---- packages/js/admin-layout/changelog/fix-missed-lints | 5 ----- .../changelog/fix-typescript-incremental-builds | 5 ----- .../changelog/fix-typescript-package-isolation | 5 ----- .../changelog/update-layout-context-for-blocks | 4 ---- .../changelog/update-webpack-invalid-export-error | 4 ---- packages/js/admin-layout/package.json | 2 +- packages/js/product-editor/changelog.md | 6 ++++++ .../fix-41471_remove_fixed_height_in_downloads_list | 4 ---- ...update-product-editor-remove-invalid-block-attrs | 4 ---- packages/js/product-editor/package.json | 2 +- 17 files changed, 20 insertions(+), 54 deletions(-) create mode 100644 packages/js/admin-layout/changelog/.gitkeep delete mode 100644 packages/js/admin-layout/changelog/41498-dev-make-lint-output-console delete mode 100644 packages/js/admin-layout/changelog/add-admin-layout-package delete mode 100644 packages/js/admin-layout/changelog/add-migrate-more-menu-37097 delete mode 100644 packages/js/admin-layout/changelog/dev-include-eslint-annotations delete mode 100644 packages/js/admin-layout/changelog/dev-upgrade-ts-5 delete mode 100644 packages/js/admin-layout/changelog/fix-missed-lints delete mode 100644 packages/js/admin-layout/changelog/fix-typescript-incremental-builds delete mode 100644 packages/js/admin-layout/changelog/fix-typescript-package-isolation delete mode 100644 packages/js/admin-layout/changelog/update-layout-context-for-blocks delete mode 100644 packages/js/admin-layout/changelog/update-webpack-invalid-export-error delete mode 100644 packages/js/product-editor/changelog/fix-41471_remove_fixed_height_in_downloads_list delete mode 100644 packages/js/product-editor/changelog/update-product-editor-remove-invalid-block-attrs diff --git a/packages/js/admin-layout/changelog.md b/packages/js/admin-layout/changelog.md index 3783eb0da3d..e46046063e5 100644 --- a/packages/js/admin-layout/changelog.md +++ b/packages/js/admin-layout/changelog.md @@ -1,3 +1,14 @@ -# Changelog +# Changelog This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [1.0.0](https://www.npmjs.com/package/@woocommerce/admin-layout/v/1.0.0) - 2023-11-28 + +- Minor - Adding LayoutContext component and hook. [#37720] +- Minor - Adding support for modifying fill name to WooHeaderItem. [#37255] +- Minor - Create @woocommerce/admin-layout package to house header, footer, and similar components and utilities. [#37094] +- Patch - Make eslint emit JSON report for annotating PRs. [#39704] +- Patch - Update webpack config to use @woocommerce/internal-style-build's parser config [#37195] +- Minor - Upgrade TypeScript to 5.1.6 [#39531] + +[See legacy changelogs for previous versions](https://github.com/woocommerce/woocommerce/blob/68581955106947918d2b17607a01bdfdf22288a9/packages/js/admin-layout/CHANGELOG.md). diff --git a/packages/js/admin-layout/changelog/.gitkeep b/packages/js/admin-layout/changelog/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/js/admin-layout/changelog/41498-dev-make-lint-output-console b/packages/js/admin-layout/changelog/41498-dev-make-lint-output-console deleted file mode 100644 index 14b7d0db64b..00000000000 --- a/packages/js/admin-layout/changelog/41498-dev-make-lint-output-console +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: dev -Comment: Just changing package.json command for lint - diff --git a/packages/js/admin-layout/changelog/add-admin-layout-package b/packages/js/admin-layout/changelog/add-admin-layout-package deleted file mode 100644 index ab59deae0e8..00000000000 --- a/packages/js/admin-layout/changelog/add-admin-layout-package +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: dev - -Create @woocommerce/admin-layout package to house header, footer, and similar components and utilities. diff --git a/packages/js/admin-layout/changelog/add-migrate-more-menu-37097 b/packages/js/admin-layout/changelog/add-migrate-more-menu-37097 deleted file mode 100644 index 9b69d3ac60b..00000000000 --- a/packages/js/admin-layout/changelog/add-migrate-more-menu-37097 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Adding support for modifying fill name to WooHeaderItem. diff --git a/packages/js/admin-layout/changelog/dev-include-eslint-annotations b/packages/js/admin-layout/changelog/dev-include-eslint-annotations deleted file mode 100644 index bded8d77ece..00000000000 --- a/packages/js/admin-layout/changelog/dev-include-eslint-annotations +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: dev - -Make eslint emit JSON report for annotating PRs. diff --git a/packages/js/admin-layout/changelog/dev-upgrade-ts-5 b/packages/js/admin-layout/changelog/dev-upgrade-ts-5 deleted file mode 100644 index 0785aabfbbf..00000000000 --- a/packages/js/admin-layout/changelog/dev-upgrade-ts-5 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: dev - -Upgrade TypeScript to 5.1.6 diff --git a/packages/js/admin-layout/changelog/fix-missed-lints b/packages/js/admin-layout/changelog/fix-missed-lints deleted file mode 100644 index 74b456f5e2b..00000000000 --- a/packages/js/admin-layout/changelog/fix-missed-lints +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: dev -Comment: Applied lint auto fixes across monorepo - - diff --git a/packages/js/admin-layout/changelog/fix-typescript-incremental-builds b/packages/js/admin-layout/changelog/fix-typescript-incremental-builds deleted file mode 100644 index f2bdc9a96ae..00000000000 --- a/packages/js/admin-layout/changelog/fix-typescript-incremental-builds +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: dev -Comment: TypeScript build change - - diff --git a/packages/js/admin-layout/changelog/fix-typescript-package-isolation b/packages/js/admin-layout/changelog/fix-typescript-package-isolation deleted file mode 100644 index 2d087939231..00000000000 --- a/packages/js/admin-layout/changelog/fix-typescript-package-isolation +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: dev -Comment: Configuration change only - - diff --git a/packages/js/admin-layout/changelog/update-layout-context-for-blocks b/packages/js/admin-layout/changelog/update-layout-context-for-blocks deleted file mode 100644 index 98f1ba467ba..00000000000 --- a/packages/js/admin-layout/changelog/update-layout-context-for-blocks +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Adding LayoutContext component and hook. diff --git a/packages/js/admin-layout/changelog/update-webpack-invalid-export-error b/packages/js/admin-layout/changelog/update-webpack-invalid-export-error deleted file mode 100644 index d844dbd186f..00000000000 --- a/packages/js/admin-layout/changelog/update-webpack-invalid-export-error +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: dev - -Update webpack config to use @woocommerce/internal-style-build's parser config diff --git a/packages/js/admin-layout/package.json b/packages/js/admin-layout/package.json index e222502f948..354b57e4536 100644 --- a/packages/js/admin-layout/package.json +++ b/packages/js/admin-layout/package.json @@ -1,6 +1,6 @@ { "name": "@woocommerce/admin-layout", - "version": "1.0.0-beta.0", + "version": "1.0.0", "description": "WooCommerce admin layout copmonents and utilities.", "author": "Automattic", "license": "GPL-2.0-or-later", diff --git a/packages/js/product-editor/changelog.md b/packages/js/product-editor/changelog.md index 593c76e7f32..d97d5b4bd28 100644 --- a/packages/js/product-editor/changelog.md +++ b/packages/js/product-editor/changelog.md @@ -2,6 +2,12 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.1.0](https://www.npmjs.com/package/@woocommerce/product-editor/v/1.1.0) - 2023-11-28 + +- Patch - Update internal dependency. +- Minor - Remove downloads list fixed height #41744 [#41744] +- Patch - [Product Block Editor]: remove unused block attributes [#41674] + ## [1.0.0](https://www.npmjs.com/package/@woocommerce/product-editor/v/1.0.0) - 2023-11-27 - Patch - Add cursor: not-allowed; to the disabled Quick updates button [#40448] diff --git a/packages/js/product-editor/changelog/fix-41471_remove_fixed_height_in_downloads_list b/packages/js/product-editor/changelog/fix-41471_remove_fixed_height_in_downloads_list deleted file mode 100644 index 1a80ab3a310..00000000000 --- a/packages/js/product-editor/changelog/fix-41471_remove_fixed_height_in_downloads_list +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: fix - -Remove downloads list fixed height #41744 diff --git a/packages/js/product-editor/changelog/update-product-editor-remove-invalid-block-attrs b/packages/js/product-editor/changelog/update-product-editor-remove-invalid-block-attrs deleted file mode 100644 index 5f40ecfd32a..00000000000 --- a/packages/js/product-editor/changelog/update-product-editor-remove-invalid-block-attrs +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: tweak - -[Product Block Editor]: remove unused block attributes diff --git a/packages/js/product-editor/package.json b/packages/js/product-editor/package.json index 1c3d7a24be0..b768bf942eb 100644 --- a/packages/js/product-editor/package.json +++ b/packages/js/product-editor/package.json @@ -1,6 +1,6 @@ { "name": "@woocommerce/product-editor", - "version": "1.0.0", + "version": "1.1.0", "description": "React components for the WooCommerce admin product editor.", "author": "Automattic", "license": "GPL-2.0-or-later", From 92eac565e59ca57a891829ff9c67109ba2881e93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maikel=20David=20P=C3=A9rez=20G=C3=B3mez?= Date: Tue, 28 Nov 2023 22:21:17 -0300 Subject: [PATCH 25/51] [Grouped products] Product list (#41653) * When the user selects a grouped product type, we show an additional Products in this group section in the General tab. * When the user selects a grouped product type, we hide the Pricing and Shipping tabs. * When empty, the grouped products card has an empty state with an illustration * When the user clicks Add products, we show a modal * When the user clicks the search field, we immediately display the list of all existing products. It is sorted alphabetically. Clicking an item closes the search and adds the product to the list. * Add remove button to the product list * When the user clicks Add, we close the modal and display the list of added products in the product form * Clicking the product name will open it in the editing view in a new tab * Clicking the arrow button will open the product's page in a new tab * Prevent adding already added products * If the name or SKU extends beyond this width, we truncate the text * Add changelog files * Fix linter errors --- packages/js/components/changelog/add-35146 | 4 + .../experimental-select-control/menu-item.tsx | 16 +- .../js/product-editor/changelog/add-35146 | 4 + .../js/product-editor/src/blocks/index.ts | 1 + .../product-fields/product-list/block.json | 27 ++ .../product-fields/product-list/edit.tsx | 282 ++++++++++++++++++ .../product-fields/product-list/editor.scss | 117 ++++++++ .../product-list/images/glasses.tsx | 29 ++ .../product-list/images/index.ts | 3 + .../product-list/images/pants.tsx | 43 +++ .../product-list/images/shirt.tsx | 25 ++ .../product-fields/product-list/index.ts | 23 ++ .../product-fields/product-list/types.ts | 8 + .../js/product-editor/src/blocks/style.scss | 5 +- .../add-products-modal/add-products-modal.tsx | 256 ++++++++++++++++ .../components/add-products-modal/index.ts | 2 + .../components/add-products-modal/style.scss | 143 +++++++++ .../components/add-products-modal/types.ts | 10 + .../js/product-editor/src/components/index.ts | 5 + packages/js/product-editor/src/style.scss | 1 + plugins/woocommerce/changelog/add-35146 | 4 + .../ProductBlockEditor/BlockRegistry.php | 1 + .../SimpleProductTemplate.php | 47 ++- 23 files changed, 1044 insertions(+), 12 deletions(-) create mode 100644 packages/js/components/changelog/add-35146 create mode 100644 packages/js/product-editor/changelog/add-35146 create mode 100644 packages/js/product-editor/src/blocks/product-fields/product-list/block.json create mode 100644 packages/js/product-editor/src/blocks/product-fields/product-list/edit.tsx create mode 100644 packages/js/product-editor/src/blocks/product-fields/product-list/editor.scss create mode 100644 packages/js/product-editor/src/blocks/product-fields/product-list/images/glasses.tsx create mode 100644 packages/js/product-editor/src/blocks/product-fields/product-list/images/index.ts create mode 100644 packages/js/product-editor/src/blocks/product-fields/product-list/images/pants.tsx create mode 100644 packages/js/product-editor/src/blocks/product-fields/product-list/images/shirt.tsx create mode 100644 packages/js/product-editor/src/blocks/product-fields/product-list/index.ts create mode 100644 packages/js/product-editor/src/blocks/product-fields/product-list/types.ts create mode 100644 packages/js/product-editor/src/components/add-products-modal/add-products-modal.tsx create mode 100644 packages/js/product-editor/src/components/add-products-modal/index.ts create mode 100644 packages/js/product-editor/src/components/add-products-modal/style.scss create mode 100644 packages/js/product-editor/src/components/add-products-modal/types.ts create mode 100644 plugins/woocommerce/changelog/add-35146 diff --git a/packages/js/components/changelog/add-35146 b/packages/js/components/changelog/add-35146 new file mode 100644 index 00000000000..e0133b17ffa --- /dev/null +++ b/packages/js/components/changelog/add-35146 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add className to the MenuItem component diff --git a/packages/js/components/src/experimental-select-control/menu-item.tsx b/packages/js/components/src/experimental-select-control/menu-item.tsx index 745ec825f70..71cad3aa204 100644 --- a/packages/js/components/src/experimental-select-control/menu-item.tsx +++ b/packages/js/components/src/experimental-select-control/menu-item.tsx @@ -1,8 +1,9 @@ /** * External dependencies */ -import { Tooltip } from '@wordpress/components'; import { createElement, CSSProperties, ReactElement } from 'react'; +import classNames from 'classnames'; +import { Tooltip } from '@wordpress/components'; /** * Internal dependencies @@ -17,6 +18,7 @@ export type MenuItemProps< ItemType > = { getItemProps: getItemPropsType< ItemType >; activeStyle?: CSSProperties; tooltipText?: string; + className?: string; }; export const MenuItem = < ItemType, >( { @@ -27,13 +29,19 @@ export const MenuItem = < ItemType, >( { activeStyle = { backgroundColor: '#bde4ff' }, item, tooltipText, + className, }: MenuItemProps< ItemType > ) => { function renderListItem() { + const itemProps = getItemProps( { item, index } ); return (
  • { children }
  • diff --git a/packages/js/product-editor/changelog/add-35146 b/packages/js/product-editor/changelog/add-35146 new file mode 100644 index 00000000000..665a2f14d3e --- /dev/null +++ b/packages/js/product-editor/changelog/add-35146 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add product list block diff --git a/packages/js/product-editor/src/blocks/index.ts b/packages/js/product-editor/src/blocks/index.ts index 23d889a28af..ff0fe402abf 100644 --- a/packages/js/product-editor/src/blocks/index.ts +++ b/packages/js/product-editor/src/blocks/index.ts @@ -24,6 +24,7 @@ export { init as initToggle } from './generic/toggle'; export { init as attributesInit } from './product-fields/attributes'; export { init as initVariations } from './product-fields/variations'; export { init as initRequirePassword } from './product-fields/password'; +export { init as initProductList } from './product-fields/product-list'; export { init as initVariationItems } from './product-fields/variation-items'; export { init as initVariationOptions } from './product-fields/variation-options'; export { init as initNotice } from './product-fields/notice-edit-single-variation'; diff --git a/packages/js/product-editor/src/blocks/product-fields/product-list/block.json b/packages/js/product-editor/src/blocks/product-fields/product-list/block.json new file mode 100644 index 00000000000..3a670295ebf --- /dev/null +++ b/packages/js/product-editor/src/blocks/product-fields/product-list/block.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "woocommerce/product-list-field", + "title": "Product list", + "category": "widgets", + "description": "The product list.", + "keywords": [ "products" ], + "textdomain": "default", + "attributes": { + "property": { + "type": "string", + "__experimentalRole": "content" + } + }, + "supports": { + "align": false, + "html": false, + "multiple": false, + "reusable": false, + "inserter": false, + "lock": false, + "__experimentalToolbar": false + }, + "editorStyle": "file:./editor.css", + "usesContext": [ "postType" ] +} diff --git a/packages/js/product-editor/src/blocks/product-fields/product-list/edit.tsx b/packages/js/product-editor/src/blocks/product-fields/product-list/edit.tsx new file mode 100644 index 00000000000..58c397db518 --- /dev/null +++ b/packages/js/product-editor/src/blocks/product-fields/product-list/edit.tsx @@ -0,0 +1,282 @@ +/** + * External dependencies + */ +import { Button } from '@wordpress/components'; +import { useEntityProp } from '@wordpress/core-data'; +import { resolveSelect } from '@wordpress/data'; +import { + createElement, + useContext, + useEffect, + useState, +} from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import { external, closeSmall } from '@wordpress/icons'; +import { useWooBlockProps } from '@woocommerce/block-templates'; +import { CurrencyContext } from '@woocommerce/currency'; +import { PRODUCTS_STORE_NAME, Product } from '@woocommerce/data'; +import { getNewPath } from '@woocommerce/navigation'; +import classNames from 'classnames'; + +/** + * Internal dependencies + */ +import { + AddProductsModal, + getProductImageStyle, +} from '../../../components/add-products-modal'; +import { ProductEditorBlockEditProps } from '../../../types'; +import { Shirt, Pants, Glasses } from './images'; +import { UploadsBlockAttributes } from './types'; +import { + getProductStockStatus, + getProductStockStatusClass, +} from '../../../utils'; + +export function Edit( { + attributes, + context: { postType }, +}: ProductEditorBlockEditProps< UploadsBlockAttributes > ) { + const { property } = attributes; + const blockProps = useWooBlockProps( attributes ); + const [ openAddProductsModal, setOpenAddProductsModal ] = useState( false ); + const [ isLoading, setIsLoading ] = useState( false ); + const [ groupedProductIds, setGroupedProductIds ] = useEntityProp< + number[] + >( 'postType', postType, property ); + const [ groupedProducts, setGroupedProducts ] = useState< Product[] >( [] ); + const { formatAmount } = useContext( CurrencyContext ); + + useEffect( + function loadGroupedProducts() { + if ( groupedProductIds.length ) { + setIsLoading( false ); + resolveSelect( PRODUCTS_STORE_NAME ) + .getProducts< Product[] >( { + include: groupedProductIds, + orderby: 'include', + } ) + .then( setGroupedProducts ) + .finally( () => setIsLoading( false ) ); + } else { + setGroupedProducts( [] ); + } + }, + [ groupedProductIds ] + ); + + function handleAddProductsButtonClick() { + setOpenAddProductsModal( true ); + } + + function handleAddProductsModalSubmit( value: Product[] ) { + setGroupedProductIds( [ + ...groupedProductIds, + ...value.map( ( product ) => product.id ), + ] ); + setOpenAddProductsModal( false ); + } + + function handleAddProductsModalClose() { + setOpenAddProductsModal( false ); + } + + function removeProductHandler( product: Product ) { + return function handleRemoveClick() { + const newGroupedProductIds = groupedProductIds.filter( + ( productId ) => productId !== product.id + ); + setGroupedProductIds( newGroupedProductIds ); + }; + } + + return ( +
    +
    + +
    + +
    + { ! isLoading && groupedProducts.length === 0 && ( +
    +
    + + + +
    +

    + { __( + 'Tip: Group together items that have a clear relationship or compliment each other well, e.g., garment bundles, camera kits, or skincare product sets.', + 'woocommerce' + ) } +

    +
    + ) } + + { ! isLoading && groupedProducts.length > 0 && ( +
    +
    +
    +
    + { __( 'Product', 'woocommerce' ) } +
    +
    + { __( 'Price', 'woocommerce' ) } +
    +
    + { __( 'Stock', 'woocommerce' ) } +
    +
    +
    +
    +
    + { groupedProducts.map( ( product ) => ( +
    +
    +
    + +
    +
    + +
    + +
    + { product.sku } +
    +
    +
    +
    + { product.sale_price && ( + + { formatAmount( + product.sale_price + ) } + + ) } + + { formatAmount( + product.regular_price + ) } + +
    +
    + + ● + + + { getProductStockStatus( product ) } + +
    +
    +
    +
    + ) ) } +
    +
    + ) } +
    + + { openAddProductsModal && ( + + ) } +
    + ); +} diff --git a/packages/js/product-editor/src/blocks/product-fields/product-list/editor.scss b/packages/js/product-editor/src/blocks/product-fields/product-list/editor.scss new file mode 100644 index 00000000000..29d1de3cfb1 --- /dev/null +++ b/packages/js/product-editor/src/blocks/product-fields/product-list/editor.scss @@ -0,0 +1,117 @@ +.wp-block-woocommerce-product-list-field { + display: flex; + flex-direction: column; + gap: $grid-unit-30; + + &__header { + display: flex; + align-items: center; + justify-content: end; + } + + &__empty-state { + min-height: 28 * $grid-unit; + border-radius: 2px; + border: 1px dashed $gray-400; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: $grid-unit-60; + gap: $grid-unit-30; + + &-illustration { + display: flex; + align-items: center; + justify-content: center; + gap: $grid-unit-40; + max-width: 100%; + } + + &-tip { + text-align: center; + margin: 0; + color: $gray-700; + } + } + + &__table { + &-header { + color: $gray-700; + font-size: 11px; + text-transform: uppercase; + border-bottom: 1px solid $gray-200; + } + + &-row { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: $grid-unit-30; + padding: $grid-unit-20 0; + + &:not(:last-child) { + border-bottom: 1px solid $gray-200; + } + } + + &-header-column, + &-cell { + display: flex; + align-items: center; + + &:first-child { + grid-column: 1 / span 2; + gap: $grid-unit + $grid-unit-05; + } + + &:nth-child(2), + &:last-child { + justify-content: end; + gap: $grid-unit; + } + } + } + + &__product-image { + width: $grid-unit-40; + height: $grid-unit-40; + border-radius: $grid-unit-05; + background-color: $gray-200; + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + flex-shrink: 0; + } + + &__product-info { + display: flex; + flex-direction: column; + gap: 2px; + flex: 1 1 auto; + overflow: hidden; + } + + &__product-name { + color: $gray-900; + + .is-link { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + + &__product-sku { + color: $gray-700; + font-size: 11px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + &__price--on-sale { + color: $gray-600; + text-decoration: line-through; + } +} diff --git a/packages/js/product-editor/src/blocks/product-fields/product-list/images/glasses.tsx b/packages/js/product-editor/src/blocks/product-fields/product-list/images/glasses.tsx new file mode 100644 index 00000000000..db98708ea47 --- /dev/null +++ b/packages/js/product-editor/src/blocks/product-fields/product-list/images/glasses.tsx @@ -0,0 +1,29 @@ +/** + * External dependencies + */ +import { createElement } from '@wordpress/element'; + +export function Glasses() { + return ( + + + + + + ); +} diff --git a/packages/js/product-editor/src/blocks/product-fields/product-list/images/index.ts b/packages/js/product-editor/src/blocks/product-fields/product-list/images/index.ts new file mode 100644 index 00000000000..fa72697f4eb --- /dev/null +++ b/packages/js/product-editor/src/blocks/product-fields/product-list/images/index.ts @@ -0,0 +1,3 @@ +export * from './glasses'; +export * from './pants'; +export * from './shirt'; diff --git a/packages/js/product-editor/src/blocks/product-fields/product-list/images/pants.tsx b/packages/js/product-editor/src/blocks/product-fields/product-list/images/pants.tsx new file mode 100644 index 00000000000..e87995aff0d --- /dev/null +++ b/packages/js/product-editor/src/blocks/product-fields/product-list/images/pants.tsx @@ -0,0 +1,43 @@ +/** + * External dependencies + */ +import { createElement } from '@wordpress/element'; +import { useInstanceId } from '@wordpress/compose'; + +export function Pants() { + const clipPathId = useInstanceId( Pants, 'pants' ) as string; + return ( + + + + + + + + + + + + + ); +} diff --git a/packages/js/product-editor/src/blocks/product-fields/product-list/images/shirt.tsx b/packages/js/product-editor/src/blocks/product-fields/product-list/images/shirt.tsx new file mode 100644 index 00000000000..981c6251bf2 --- /dev/null +++ b/packages/js/product-editor/src/blocks/product-fields/product-list/images/shirt.tsx @@ -0,0 +1,25 @@ +/** + * External dependencies + */ +import { createElement } from '@wordpress/element'; + +export function Shirt() { + return ( + + + + + ); +} diff --git a/packages/js/product-editor/src/blocks/product-fields/product-list/index.ts b/packages/js/product-editor/src/blocks/product-fields/product-list/index.ts new file mode 100644 index 00000000000..f5e901e8288 --- /dev/null +++ b/packages/js/product-editor/src/blocks/product-fields/product-list/index.ts @@ -0,0 +1,23 @@ +/** + * Internal dependencies + */ +import blockConfiguration from './block.json'; +import { Edit } from './edit'; +import { registerProductEditorBlockType } from '../../../utils'; + +const { name, ...metadata } = blockConfiguration; + +export { metadata, name }; + +export const settings = { + example: {}, + edit: Edit, +}; + +export function init() { + return registerProductEditorBlockType( { + name, + metadata: metadata as never, + settings: settings as never, + } ); +} diff --git a/packages/js/product-editor/src/blocks/product-fields/product-list/types.ts b/packages/js/product-editor/src/blocks/product-fields/product-list/types.ts new file mode 100644 index 00000000000..4161d57f36f --- /dev/null +++ b/packages/js/product-editor/src/blocks/product-fields/product-list/types.ts @@ -0,0 +1,8 @@ +/** + * External dependencies + */ +import { BlockAttributes } from '@wordpress/blocks'; + +export interface UploadsBlockAttributes extends BlockAttributes { + property: string; +} diff --git a/packages/js/product-editor/src/blocks/style.scss b/packages/js/product-editor/src/blocks/style.scss index 34c2ee383a7..3697d625ab1 100644 --- a/packages/js/product-editor/src/blocks/style.scss +++ b/packages/js/product-editor/src/blocks/style.scss @@ -4,8 +4,8 @@ @import "product-fields/inventory-email/editor.scss"; @import "product-fields/inventory-sku/editor.scss"; @import "product-fields/name/editor.scss"; -@import 'product-fields/notice-has-variations/editor.scss'; -@import 'product-fields/notice-edit-single-variation/editor.scss'; +@import "product-fields/notice-has-variations/editor.scss"; +@import "product-fields/notice-edit-single-variation/editor.scss"; @import "generic/pricing/editor.scss"; @import "product-fields/regular-price/editor.scss"; @import "product-fields/sale-price/editor.scss"; @@ -16,6 +16,7 @@ @import "generic/tab/editor.scss"; @import "product-fields/variations/editor.scss"; @import "product-fields/password/editor.scss"; +@import "product-fields/product-list/editor.scss"; @import "product-fields/variation-items/editor.scss"; @import "product-fields/variation-options/editor.scss"; @import "generic/taxonomy/editor.scss"; diff --git a/packages/js/product-editor/src/components/add-products-modal/add-products-modal.tsx b/packages/js/product-editor/src/components/add-products-modal/add-products-modal.tsx new file mode 100644 index 00000000000..6e4f9d68907 --- /dev/null +++ b/packages/js/product-editor/src/components/add-products-modal/add-products-modal.tsx @@ -0,0 +1,256 @@ +/** + * External dependencies + */ +import { FormEvent, useEffect } from 'react'; +import { Button, Modal, Spinner } from '@wordpress/components'; +import { resolveSelect } from '@wordpress/data'; +import { + createElement, + Fragment, + useContext, + useCallback, + useState, +} from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import { closeSmall } from '@wordpress/icons'; +import { + __experimentalSelectControl as SelectControl, + __experimentalSelectControlMenu as Menu, + __experimentalSelectControlMenuItem as MenuItem, + useAsyncFilter, +} from '@woocommerce/components'; +import { CurrencyContext } from '@woocommerce/currency'; +import { PRODUCTS_STORE_NAME, Product } from '@woocommerce/data'; + +/** + * Internal dependencies + */ +import { AddProductsModalProps } from './types'; + +export function getProductImageStyle( product: Product ) { + return product.images.length > 0 + ? { + backgroundImage: `url(${ product.images[ 0 ].src })`, + } + : undefined; +} + +export function AddProductsModal( { + initialValue, + onSubmit, + onClose, +}: AddProductsModalProps ) { + const [ products, setProducts ] = useState< Product[] >( [] ); + const [ selectedProducts, setSelectedProducts ] = useState< Product[] >( + [] + ); + + function handleSubmit( event: FormEvent< HTMLFormElement > ) { + event.preventDefault(); + + onSubmit( [ ...selectedProducts ] ); + } + + function handleCancelClick() { + onClose(); + } + + const filter = useCallback( + async ( search = '' ) => { + setProducts( [] ); + + return resolveSelect( PRODUCTS_STORE_NAME ) + .getProducts< Product[] >( { + search, + orderby: 'title', + order: 'asc', + exclude: [ ...initialValue, ...selectedProducts ].map( + ( product ) => product.id + ), + } ) + .then( ( response ) => { + setProducts( response ); + return response; + } ); + }, + [ selectedProducts ] + ); + + const { isFetching, ...selectProps } = useAsyncFilter< Product >( { + filter, + } ); + + useEffect( + function preloadProducts() { + filter(); + }, + [ initialValue, selectedProducts ] + ); + + function handleSelect( value: Product ) { + setSelectedProducts( ( current ) => [ ...current, value ] ); + } + + const { formatAmount } = useContext( CurrencyContext ); + + function removeProductHandler( product: Product ) { + return function handleRemoveClick() { + setSelectedProducts( ( current ) => + current.filter( ( item ) => item.id !== product.id ) + ); + }; + } + + return ( + +
    +
    + + { __( + 'Add and manage products in this group to let customers purchase them all in one go.', + 'woocommerce' + ) } + + +
    + + { ...selectProps } + items={ products } + placeholder={ __( + 'Search for products', + 'woocommerce' + ) } + label="" + selected={ null } + onSelect={ handleSelect } + __experimentalOpenMenuOnFocus + > + { ( { + items, + isOpen, + highlightedIndex, + getMenuProps, + getItemProps, + } ) => ( + + { isFetching ? ( +
    + +
    + ) : ( + items.map( ( item, index ) => ( + + key={ item.id } + index={ index } + isActive={ + highlightedIndex === index + } + item={ item } + getItemProps={ ( + options + ) => ( { + ...getItemProps( options ), + className: + 'woocommerce-add-products-modal__menu-item', + } ) } + > + <> +
    +
    +
    + { item.name } +
    + + { Boolean( + item.price + ) && ( +
    + { formatAmount( + item.price + ) } +
    + ) } +
    + + + ) ) + ) } +
    + ) } + +
    + + { Boolean( selectedProducts.length ) && ( +
      + { selectedProducts.map( ( item ) => ( +
    • +
      +
      +
      + { item.name } +
      + +
      + { item.sku } +
      +
      + +
      +
      +
    • + ) ) } +
    + ) } +
    + +
    + + +
    +
    +
    + ); +} diff --git a/packages/js/product-editor/src/components/add-products-modal/index.ts b/packages/js/product-editor/src/components/add-products-modal/index.ts new file mode 100644 index 00000000000..c571c701f0f --- /dev/null +++ b/packages/js/product-editor/src/components/add-products-modal/index.ts @@ -0,0 +1,2 @@ +export * from './add-products-modal'; +export * from './types'; diff --git a/packages/js/product-editor/src/components/add-products-modal/style.scss b/packages/js/product-editor/src/components/add-products-modal/style.scss new file mode 100644 index 00000000000..fedf2960b61 --- /dev/null +++ b/packages/js/product-editor/src/components/add-products-modal/style.scss @@ -0,0 +1,143 @@ +.woocommerce-add-products-modal { + @include breakpoint(">600px") { + width: calc(100% - 32px); + } + + @include breakpoint(">782px") { + width: 640px; + + .components-input-control__container { + width: 50%; + } + } + + &__input-suffix { + margin-right: $grid-unit-15; + } + + &__form { + &-group { + &-title { + padding: 0; + width: 100%; + margin-bottom: $grid-unit-40; + } + + &-content { + display: flex; + flex-direction: column; + gap: $grid-unit + $grid-unit-05; + + .components-base-control { + .components-input-control__container { + .components-input-control__input { + min-height: 36px; + } + } + } + + .components-base-control.has-error { + .components-input-control__backdrop { + border-color: $studio-red-50; + } + + .components-base-control__help { + color: $studio-red-50; + } + } + } + } + } + + &__actions { + margin-top: $grid-unit-30; + display: flex; + flex-direction: row; + gap: 8px; + justify-content: flex-end; + } + + &__menu { + &-loading { + display: flex; + align-items: center; + justify-content: center; + padding: $grid-unit; + height: $grid-unit-60 + 2px; + } + + &-item { + display: flex; + align-items: center; + padding: $grid-unit; + gap: $grid-unit + $grid-unit-05; + + &-image { + width: $grid-unit-40; + height: $grid-unit-40; + border-radius: $grid-unit-05; + background-color: $gray-200; + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + flex-shrink: 0; + } + + &-content { + display: flex; + flex-direction: column; + gap: 2px; + } + + &-title { + color: $gray-900; + } + + &-description { + color: $gray-700; + font-size: 11px; + } + } + } + + &__list { + &-item { + display: flex; + align-items: center; + padding: $grid-unit-20 0; + gap: $grid-unit + $grid-unit-05; + margin: 0; + + &:not(:last-child) { + border-bottom: 1px solid $gray-100; + } + + &-image { + width: $grid-unit-40; + height: $grid-unit-40; + border-radius: $grid-unit-05; + background-color: $gray-200; + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + flex-shrink: 0; + } + + &-content { + display: flex; + flex-direction: column; + gap: 2px; + flex: 1 1 auto; + } + + &-title { + color: $gray-900; + } + + &-description { + color: $gray-700; + font-size: 11px; + } + } + } +} diff --git a/packages/js/product-editor/src/components/add-products-modal/types.ts b/packages/js/product-editor/src/components/add-products-modal/types.ts new file mode 100644 index 00000000000..b06784c97d4 --- /dev/null +++ b/packages/js/product-editor/src/components/add-products-modal/types.ts @@ -0,0 +1,10 @@ +/** + * External dependencies + */ +import { Product } from '@woocommerce/data'; + +export type AddProductsModalProps = { + initialValue: Product[]; + onSubmit( value: Product[] ): void; + onClose(): void; +}; diff --git a/packages/js/product-editor/src/components/index.ts b/packages/js/product-editor/src/components/index.ts index f054a6a3242..7d0cc02a36f 100644 --- a/packages/js/product-editor/src/components/index.ts +++ b/packages/js/product-editor/src/components/index.ts @@ -51,3 +51,8 @@ export { TextControl as __experimentalTextControl, TextControlProps, } from './text-control'; + +export { + AddProductsModal as __experimentalAddProductsModal, + AddProductsModalProps, +} from './add-products-modal'; diff --git a/packages/js/product-editor/src/style.scss b/packages/js/product-editor/src/style.scss index 4603f35cad5..0c4c05f2b9c 100644 --- a/packages/js/product-editor/src/style.scss +++ b/packages/js/product-editor/src/style.scss @@ -38,6 +38,7 @@ @import "components/modal-editor-welcome-guide/style.scss"; @import "components/attribute-control/attribute-skeleton.scss"; @import "components/checkbox-control/style.scss"; +@import "components/add-products-modal/style.scss"; /* Field Blocks */ diff --git a/plugins/woocommerce/changelog/add-35146 b/plugins/woocommerce/changelog/add-35146 new file mode 100644 index 00000000000..bfd4d07d1dc --- /dev/null +++ b/plugins/woocommerce/changelog/add-35146 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Register product list block diff --git a/plugins/woocommerce/src/Admin/Features/ProductBlockEditor/BlockRegistry.php b/plugins/woocommerce/src/Admin/Features/ProductBlockEditor/BlockRegistry.php index a8712acfc77..1ed7290a4ea 100644 --- a/plugins/woocommerce/src/Admin/Features/ProductBlockEditor/BlockRegistry.php +++ b/plugins/woocommerce/src/Admin/Features/ProductBlockEditor/BlockRegistry.php @@ -59,6 +59,7 @@ class BlockRegistry { 'woocommerce/product-variation-items-field', 'woocommerce/product-variations-fields', 'woocommerce/product-password-field', + 'woocommerce/product-list-field', 'woocommerce/product-has-variations-notice', 'woocommerce/product-single-variation-notice', ); diff --git a/plugins/woocommerce/src/Internal/Features/ProductBlockEditor/ProductTemplates/SimpleProductTemplate.php b/plugins/woocommerce/src/Internal/Features/ProductBlockEditor/ProductTemplates/SimpleProductTemplate.php index e7383011f95..e1b40224c2c 100644 --- a/plugins/woocommerce/src/Internal/Features/ProductBlockEditor/ProductTemplates/SimpleProductTemplate.php +++ b/plugins/woocommerce/src/Internal/Features/ProductBlockEditor/ProductTemplates/SimpleProductTemplate.php @@ -82,11 +82,16 @@ class SimpleProductTemplate extends AbstractProductFormTemplate implements Produ ); $this->add_group( array( - 'id' => $this::GROUP_IDS['PRICING'], - 'order' => 20, - 'attributes' => array( + 'id' => $this::GROUP_IDS['PRICING'], + 'order' => 20, + 'attributes' => array( 'title' => __( 'Pricing', 'woocommerce' ), ), + 'hideConditions' => Features::is_enabled( 'product-grouped' ) ? array( + array( + 'expression' => 'editedProduct.type === "grouped"', + ), + ) : null, ) ); $this->add_group( @@ -100,11 +105,16 @@ class SimpleProductTemplate extends AbstractProductFormTemplate implements Produ ); $this->add_group( array( - 'id' => $this::GROUP_IDS['SHIPPING'], - 'order' => 40, - 'attributes' => array( + 'id' => $this::GROUP_IDS['SHIPPING'], + 'order' => 40, + 'attributes' => array( 'title' => __( 'Shipping', 'woocommerce' ), ), + 'hideConditions' => Features::is_enabled( 'product-grouped' ) ? array( + array( + 'expression' => 'editedProduct.type === "grouped"', + ), + ) : null, ) ); if ( Features::is_enabled( 'product-variation-management' ) ) { @@ -311,6 +321,31 @@ class SimpleProductTemplate extends AbstractProductFormTemplate implements Produ ); } + // Product list section. + if ( Features::is_enabled( 'product-grouped' ) ) { + $product_list_section = $general_group->add_section( + array( + 'id' => 'product-list-section', + 'order' => 35, + 'attributes' => array( + 'title' => __( 'Products in this group', 'woocommerce' ), + 'description' => __( 'Make a collection of related products, enabling customers to purchase multiple items together.', 'woocommerce' ), + ), + ) + ); + + $product_list_section->add_block( + array( + 'id' => 'product-list', + 'blockName' => 'woocommerce/product-list-field', + 'order' => 10, + 'attributes' => array( + 'property' => 'grouped_products', + ), + ) + ); + } + // Images section. $images_section = $general_group->add_section( array( From 388ec85f06d2c5b1c2a097ced62e3f9cd1c9117b Mon Sep 17 00:00:00 2001 From: Brent MacKinnon Date: Mon, 27 Nov 2023 17:19:02 -0400 Subject: [PATCH 26/51] remove-redundant--ref-code-folder --- docs/reference-code/readme.md | 5 -- docs/theme-development/conditional-tags.md | 96 ++++++++++++++++++++++ 2 files changed, 96 insertions(+), 5 deletions(-) delete mode 100644 docs/reference-code/readme.md create mode 100644 docs/theme-development/conditional-tags.md diff --git a/docs/reference-code/readme.md b/docs/reference-code/readme.md deleted file mode 100644 index eb158ab398e..00000000000 --- a/docs/reference-code/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# Reference code - -> ⚠️ **Notice:** This documentation is currently a **work in progress**. While it's open to the public for transparency and collaboration, please be aware that some sections might be incomplete or subject to change. We appreciate your patience and welcome any contributions! - -Dive deep into code snippets, examples, and templates tailored for WooCommerce. This section will serve as a valuable resource for developers, providing reusable pieces of code that can be integrated into various WooCommerce projects. diff --git a/docs/theme-development/conditional-tags.md b/docs/theme-development/conditional-tags.md new file mode 100644 index 00000000000..7c0461f0126 --- /dev/null +++ b/docs/theme-development/conditional-tags.md @@ -0,0 +1,96 @@ +# Conditional tags + +**Note:** This is a **Developer level** doc. If you are unfamiliar with code/tags and resolving potential conflicts, select a [WooExpert or Developer](https://woo.com/customizations/) for assistance. We are unable to provide support for customizations under our [Support Policy](http://woo.com/support-policy/). + +## What are “conditional tags”? + +The conditional tags of WooCommerce and WordPress can be used in your template files to change what content is displayed based on what *conditions* the page matches. For example, you may want to display a snippet of text above the shop page. With the `is_shop()` conditional tag, you can. + +Because WooCommerce uses custom post types, you can also use many of WordPress’ conditional tags. See: [http://codex.wordpress.org/Conditional_Tags](http://codex.wordpress.org/Conditional_Tags) for a list of the tags included with WordPress. + +**Note**: You can only use conditional query tags after the `posts_selection` [action hook](http://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_a_Typical_Request) in WordPress (the `wp` action hook is the first one through which you can use these conditionals). For themes, this means the conditional tag will never work properly if you are using it in the body of functions.php. + +## Available conditional tags + +All conditional tags test whether a condition is met, and then return either `TRUE` or `FALSE`. **Conditions under which tags output `TRUE` are listed below the conditional tags**. + +The list below holds the main conditional tags. To see all conditional tags, visit the [WooCommerce API Docs](https://woo.com/wc-apidocs/index.html). + +### WooCommerce page + +- `is_woocommerce()` + Returns true if on a page which uses WooCommerce templates (cart and checkout are standard pages with shortcodes and thus are not included). + +### Main shop page + +- `is_shop()` + Returns true when on the product archive page (shop). + +### Product category page + +- `is_product_category()` + Returns true when viewing a product category archive. +- `is_product_category( 'shirts' )` + When the product category page for the ‘shirts’ category is being displayed. +- `is_product_category( array( 'shirts', 'games' ) )` + When the product category page for the ‘shirts’ or ‘games’ category is being displayed. + +### Product tag page + +- `is_product_tag()` + Returns true when viewing a product tag archive +- `is_product_tag( 'shirts' )` + When the product tag page for the ‘shirts’ tag is being displayed. +- `is_product_tag( array( 'shirts', 'games' ) )` + When the product tag page for the ‘shirts’ or ‘games’ tags is being displayed. + +### Single product page + +- `is_product()` + Returns true on a single product page. Wrapper for is_singular. + +### Cart page + +- `is_cart()` + Returns true on the cart page. + +### Checkout page + +- `is_checkout()` + Returns true on the checkout page. + +### Customer account pages + +- `is_account_page()` + Returns true on the customer’s account pages. + +### Endpoint + +- `is_wc_endpoint_url()` + Returns true when viewing a WooCommerce endpoint +- `is_wc_endpoint_url( 'order-pay' )` + When the endpoint page for order pay is being displayed. +- And so on for other endpoints... + +### Ajax request + +- `is_ajax()` + Returns true when the page is loaded via ajax. + +## Working example + +The example illustrates how you would display different content for different categories. + +```php +if ( is_product_category() ) { + + if ( is_product_category( 'shirts' ) ) { + echo 'Hi! Take a look at our sweet t-shirts below.'; + } elseif ( is_product_category( 'games' ) ) { + echo 'Hi! Hungry for some gaming?'; + } else { + echo 'Hi! Check out our products below.'; + } + +} +``` \ No newline at end of file From c4424e83257d74c189cee0802e79d2aba7f9d463 Mon Sep 17 00:00:00 2001 From: Leif Singer Date: Wed, 29 Nov 2023 11:48:33 +0100 Subject: [PATCH 27/51] appease the markdown linter --- docs/theme-development/conditional-tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/theme-development/conditional-tags.md b/docs/theme-development/conditional-tags.md index 7c0461f0126..5d64f0485a5 100644 --- a/docs/theme-development/conditional-tags.md +++ b/docs/theme-development/conditional-tags.md @@ -93,4 +93,4 @@ if ( is_product_category() ) { } } -``` \ No newline at end of file +``` From 2142f199bd982d5316a192bee830cf0caac38360 Mon Sep 17 00:00:00 2001 From: Leif Singer Date: Wed, 29 Nov 2023 12:00:43 +0100 Subject: [PATCH 28/51] tweak a few links --- docs/theme-development/conditional-tags.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/theme-development/conditional-tags.md b/docs/theme-development/conditional-tags.md index 5d64f0485a5..7faa554f739 100644 --- a/docs/theme-development/conditional-tags.md +++ b/docs/theme-development/conditional-tags.md @@ -1,20 +1,20 @@ # Conditional tags -**Note:** This is a **Developer level** doc. If you are unfamiliar with code/tags and resolving potential conflicts, select a [WooExpert or Developer](https://woo.com/customizations/) for assistance. We are unable to provide support for customizations under our [Support Policy](http://woo.com/support-policy/). +**Note:** This is a **Developer level** doc. If you are unfamiliar with code/tags and resolving potential conflicts, select a [WooExpert or Developer](https://woo.com/customizations/) for assistance. We are unable to provide support for customizations under our [Support Policy](https://woo.com/support-policy/). ## What are “conditional tags”? The conditional tags of WooCommerce and WordPress can be used in your template files to change what content is displayed based on what *conditions* the page matches. For example, you may want to display a snippet of text above the shop page. With the `is_shop()` conditional tag, you can. -Because WooCommerce uses custom post types, you can also use many of WordPress’ conditional tags. See: [http://codex.wordpress.org/Conditional_Tags](http://codex.wordpress.org/Conditional_Tags) for a list of the tags included with WordPress. +Because WooCommerce uses custom post types, you can also use many of WordPress’ conditional tags. See [codex.wordpress.org/Conditional_Tags](https://codex.wordpress.org/Conditional_Tags) for a list of the tags included with WordPress. -**Note**: You can only use conditional query tags after the `posts_selection` [action hook](http://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_a_Typical_Request) in WordPress (the `wp` action hook is the first one through which you can use these conditionals). For themes, this means the conditional tag will never work properly if you are using it in the body of functions.php. +**Note**: You can only use conditional query tags after the `posts_selection` [action hook](https://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_a_Typical_Request) in WordPress (the `wp` action hook is the first one through which you can use these conditionals). For themes, this means the conditional tag will never work properly if you are using it in the body of functions.php. ## Available conditional tags All conditional tags test whether a condition is met, and then return either `TRUE` or `FALSE`. **Conditions under which tags output `TRUE` are listed below the conditional tags**. -The list below holds the main conditional tags. To see all conditional tags, visit the [WooCommerce API Docs](https://woo.com/wc-apidocs/index.html). +The list below holds the main conditional tags. To see all conditional tags, visit the [WooCommerce API Docs](https://woo.com/wc-apidocs/). ### WooCommerce page From 5da7ddea06dfcdf6c99fa1e1057f915953c14a2a Mon Sep 17 00:00:00 2001 From: Leif Singer Date: Wed, 29 Nov 2023 12:48:12 +0100 Subject: [PATCH 29/51] unescape escaped asterisks, since they're all in code blocks this should be fine --- docs/getting-started/set-up-a-child-theme.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/getting-started/set-up-a-child-theme.md b/docs/getting-started/set-up-a-child-theme.md index bec20d31224..9ac98f11c1a 100644 --- a/docs/getting-started/set-up-a-child-theme.md +++ b/docs/getting-started/set-up-a-child-theme.md @@ -29,28 +29,28 @@ To get started, we need to prepare a child theme. First, we need to create a new stylesheet for our child theme. Create a new file called `style.css` and put this code in it: ```css -/\* +/* Theme Name: Child Theme Version: 1.0 Description: Child theme for Woo. Author: Woo Author URI: http://woocommerce.com -Template: themedir \*/ +Template: themedir */ ``` Next, we need to change the **Template** field to point to our installed WooTheme. In this example, we’ll use the Storefront theme, which is installed under `wp-content/themes/storefront/`. The result will look like this: ```css -/\* +/* Theme Name: Storefront Child Version: 1.0 Description: Child theme for Storefront. Author: Woo Author URI: http://woocommerce.com Template: storefront -\*/ +*/ -/\* --------------- Theme customization starts here ----------------- \*/ +/* --------------- Theme customization starts here ----------------- */ ``` **Note:** With Storefront, you do not need to enqueue any of the parent theme style files with PHP from the theme’s `functions.php` file or `@import` these into the child themes `style.css` file as the main parent Storefront theme does this for you. From bc6fe4242d7b532b84b232e8bc905a5d374d289c Mon Sep 17 00:00:00 2001 From: Leif Singer Date: Wed, 29 Nov 2023 12:49:52 +0100 Subject: [PATCH 30/51] code formatting tweaks --- docs/getting-started/set-up-a-child-theme.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/getting-started/set-up-a-child-theme.md b/docs/getting-started/set-up-a-child-theme.md index 9ac98f11c1a..c5f7040a477 100644 --- a/docs/getting-started/set-up-a-child-theme.md +++ b/docs/getting-started/set-up-a-child-theme.md @@ -76,7 +76,7 @@ Let’s do an example together where we change the color of the site title. Add ```css .site-branding h1 a { -color: red; + color: red; } ``` @@ -98,9 +98,7 @@ The same goes for WooCommerce templates. If you create a new folder in your chil The `functions.php` in your child theme is loaded **before** the parent theme’s `functions.php`. If a function in the parent theme is **pluggable**, it allows you to copy a function from the parent theme into the child theme’s `functions.php` and have it replace the one in your parent theme. The only requirement is that the parent theme’s function is **pluggable**, which basically means it is wrapped in a conditional if statement e.g: ```php -if -(!function_exists("parent_function_name")) -{ +if ( ! function_exists( "parent_function_name" ) ) { parent_function_name() { ... } From e9d5ecd76ab9f29d3897449a099246666c0772d9 Mon Sep 17 00:00:00 2001 From: Leif Singer Date: Wed, 29 Nov 2023 12:50:59 +0100 Subject: [PATCH 31/51] missed a formatting tweak --- docs/getting-started/set-up-a-child-theme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/getting-started/set-up-a-child-theme.md b/docs/getting-started/set-up-a-child-theme.md index c5f7040a477..7fd1bd81455 100644 --- a/docs/getting-started/set-up-a-child-theme.md +++ b/docs/getting-started/set-up-a-child-theme.md @@ -35,7 +35,8 @@ Version: 1.0 Description: Child theme for Woo. Author: Woo Author URI: http://woocommerce.com -Template: themedir */ +Template: themedir +*/ ``` Next, we need to change the **Template** field to point to our installed WooTheme. In this example, we’ll use the Storefront theme, which is installed under `wp-content/themes/storefront/`. The result will look like this: From 06d5f021f8ba9de4728f45b716e76d309c3980ad Mon Sep 17 00:00:00 2001 From: Leif Singer Date: Wed, 29 Nov 2023 12:53:23 +0100 Subject: [PATCH 32/51] https instead of http; woo.com instead of woocommerce.com --- docs/getting-started/set-up-a-child-theme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/getting-started/set-up-a-child-theme.md b/docs/getting-started/set-up-a-child-theme.md index 7fd1bd81455..802c236b57f 100644 --- a/docs/getting-started/set-up-a-child-theme.md +++ b/docs/getting-started/set-up-a-child-theme.md @@ -12,7 +12,7 @@ Before we start it’s important that you understand what a child theme is. In s - Theme developers can use child themes as a way to offer variations on a theme, similar to what we do with the [Storefront child themes](https://woocommerce.com/product-category/themes/storefront-child-theme-themes/) - Developers can use child themes to host customizations of the parent theme or any plugin on the site since the child theme will get priority over the plugins and parent theme -Read [this guide from the WordPress Codex](http://codex.wordpress.org/Child_Themes). +Read [this guide from the WordPress Codex](https://codex.wordpress.org/Child_Themes). [Download a sample Storefront child theme to get started](https://github.com/stuartduff/storefront-child-theme) if you want to customize a website using Storefront as the theme. @@ -34,7 +34,7 @@ Theme Name: Child Theme Version: 1.0 Description: Child theme for Woo. Author: Woo -Author URI: http://woocommerce.com +Author URI: https://woo.com Template: themedir */ ``` @@ -47,7 +47,7 @@ Theme Name: Storefront Child Version: 1.0 Description: Child theme for Storefront. Author: Woo -Author URI: http://woocommerce.com +Author URI: https://woo.com Template: storefront */ @@ -116,7 +116,7 @@ WordPress has a few things that it handles differently in child themes. If you h ## Child theme support -Although we do offer basic child theme support that can easily be answered, it still falls under theme customization, so please refer to our [support policy](http://woocommerce.com/support-policy/) to see the extent of support we give. We highly advise anybody confused with child themes to use the [WordPress forums](http://wordpress.org/support/) for help. +Although we do offer basic child theme support that can easily be answered, it still falls under theme customization, so please refer to our [support policy](https://woocommerce.com/support-policy/) to see the extent of support we give. We highly advise anybody confused with child themes to use the [WordPress forums](https://wordpress.org/support/) for help. ## Sample child theme From c40623349bcb181b8b06f796e77809aea2b533d3 Mon Sep 17 00:00:00 2001 From: Leif Singer Date: Wed, 29 Nov 2023 13:01:07 +0100 Subject: [PATCH 33/51] fix / repair / remove broken and / or outdated links --- docs/getting-started/set-up-a-child-theme.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/docs/getting-started/set-up-a-child-theme.md b/docs/getting-started/set-up-a-child-theme.md index 802c236b57f..13885b93b05 100644 --- a/docs/getting-started/set-up-a-child-theme.md +++ b/docs/getting-started/set-up-a-child-theme.md @@ -9,16 +9,14 @@ Sometimes, you might need to customize your theme or WooCommerce beyond what is Before we start it’s important that you understand what a child theme is. In short, a child theme is a layer that you put on top of the parent theme to make alterations without having to develop a new theme from scratch. There are two major reasons to use child themes: -- Theme developers can use child themes as a way to offer variations on a theme, similar to what we do with the [Storefront child themes](https://woocommerce.com/product-category/themes/storefront-child-theme-themes/) +- Theme developers can use child themes as a way to offer variations on a theme, similar to what we do with the [Storefront child themes](https://woo.com/products/storefront/) - Developers can use child themes to host customizations of the parent theme or any plugin on the site since the child theme will get priority over the plugins and parent theme -Read [this guide from the WordPress Codex](https://codex.wordpress.org/Child_Themes). - -[Download a sample Storefront child theme to get started](https://github.com/stuartduff/storefront-child-theme) if you want to customize a website using Storefront as the theme. +Read [this guide from the WordPress Codex](https://developer.wordpress.org/themes/advanced-topics/child-themes/). ## Make a backup -Before customizing a website, you should always ensure that you have a backup of your site in case anything goes wrong. More info at: [Backing up WordPress content](https://woocommerce.com/document/backup-wordpress-content/). +Before customizing a website, you should always ensure that you have a backup of your site in case anything goes wrong. More info at: [Backing up WordPress content](https://woo.com/document/backup-wordpress-content/). ## Getting started @@ -83,14 +81,13 @@ Let’s do an example together where we change the color of the site title. Add After saving the file and refreshing our browser, you will now see that the color of the site title has changed! - ### Template changes -**Note:** This doesn’t apply to [Storefront child themes](https://woocommerce.com/product-category/themes/storefront-child-theme-themes/). Any customization to a Storefront child themes files will be lost when updating. Instead of customizing the Storefront child themes files directly, we recommended that you add code snippets to a customization plugin. We’ve created one to do just this. Download [Theme Customizations](https://github.com/woocommerce/theme-customisations) for free. +**Note:** This doesn’t apply to Storefront child themes. Any customizations to a Storefront child theme’s files will be lost when updating. Instead of customizing the Storefront child theme’s files directly, we recommended that you add code snippets to a customization plugin. We’ve created one to do just this. Download [Theme Customizations](https://github.com/woocommerce/theme-customisations) for free. But wait, there’s more! You can do the same with the template files (`*.php`) in the theme folder. For example if w, wanted to modify some code in the header, we need to copy header.php from our parent theme folder `wp-content/themes/storefront/header.php` to our child theme folder `wp-content/themes/storefront-child/header.php`. Once we have copied it to our child theme, we edit `header.php` and customize any code we want. The `header.php` in the child theme will be used instead of the parent theme’s `header.php`. -The same goes for WooCommerce templates. If you create a new folder in your child theme called “WooCommerce”, you can make changes to the WooCommerce templates there to make it more in line with the overall design of your website. More on WooCommerce’s template structure [can be found here](https://woocommerce.com/document/template-structure/). +The same goes for WooCommerce templates. If you create a new folder in your child theme called “WooCommerce”, you can make changes to the WooCommerce templates there to make it more in line with the overall design of your website. More on WooCommerce’s template structure [can be found here](https://woo.com/document/template-structure/). ### Functionality changes @@ -112,11 +109,11 @@ If the parent theme function is **pluggable**, you can copy it to the child them WordPress has a few things that it handles differently in child themes. If you have a template file in your child theme, you have to modify how WordPress includes files. `get_template_directory()` will reference the parent theme. To make it use the file in the child theme, you need to change use `get_stylesheet_directory();`. -[More info on this from the WP Codex](https://codex.wordpress.org/Child_Themes#Referencing_.2F_Including_Files_in_Your_Child_Theme) +[More info on this from the WP Codex](https://developer.wordpress.org/themes/advanced-topics/child-themes/#referencing-or-including-other-files) ## Child theme support -Although we do offer basic child theme support that can easily be answered, it still falls under theme customization, so please refer to our [support policy](https://woocommerce.com/support-policy/) to see the extent of support we give. We highly advise anybody confused with child themes to use the [WordPress forums](https://wordpress.org/support/) for help. +Although we do offer basic child theme support that can easily be answered, it still falls under theme customization, so please refer to our [support policy](https://woo.com/support-policy/) to see the extent of support we give. We highly advise anybody confused with child themes to use the [WordPress forums](https://wordpress.org/support/forums/) for help. ## Sample child theme From 220a5b2e9b8ae4ab9ccd9b0958ba152120ea000c Mon Sep 17 00:00:00 2001 From: Jason Kytros Date: Wed, 29 Nov 2023 14:40:21 +0200 Subject: [PATCH 34/51] Remove Subscriptions from the Add Product task list --- .../fills/import-products/index.tsx | 4 +- .../task-lists/fills/products/constants.tsx | 19 ------ .../task-lists/fills/products/index.tsx | 22 +----- .../task-lists/fills/products/test/index.tsx | 68 ------------------- .../task-lists/fills/products/test/utils.ts | 2 +- .../products/use-create-product-by-type.ts | 6 -- 6 files changed, 3 insertions(+), 118 deletions(-) diff --git a/plugins/woocommerce-admin/client/task-lists/fills/import-products/index.tsx b/plugins/woocommerce-admin/client/task-lists/fills/import-products/index.tsx index f642271afe0..e590cd80b07 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/import-products/index.tsx +++ b/plugins/woocommerce-admin/client/task-lists/fills/import-products/index.tsx @@ -52,9 +52,7 @@ export const Products = () => { } ); const { productTypes: productTypeListItems } = useProductTypeListItems( - getProductTypes( { - exclude: [ 'subscription' ], - } ), + getProductTypes(), [], { onClick: recordCompletionTime, diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx b/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx index af0791b004f..775c3046ea1 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx @@ -46,16 +46,6 @@ export const productTypes = Object.freeze( [ before: , after: , }, - { - key: 'subscription' as const, - title: __( 'Subscription product', 'woocommerce' ), - content: __( - 'Item that customers receive on a regular basis.', - 'woocommerce' - ), - before: , - after: , - }, { key: 'grouped' as const, title: __( 'Grouped product', 'woocommerce' ), @@ -93,23 +83,14 @@ export const onboardingProductTypesToSurfaced: Readonly< Record< string, ProductTypeKey[] > > = Object.freeze( { physical: [ 'physical', 'variable', 'grouped' ], - subscriptions: [ 'subscription' ], downloads: [ 'digital' ], // key in alphabetical and ascending order for mapping - 'physical,subscriptions': [ 'physical', 'subscription' ], 'downloads,physical': [ 'physical', 'digital' ], - 'downloads,subscriptions': [ 'digital', 'subscription' ], - 'downloads,physical,subscriptions': [ - 'physical', - 'digital', - 'subscription', - ], } ); export const defaultSurfacedProductTypes = onboardingProductTypesToSurfaced.physical; export const supportedOnboardingProductTypes = [ 'physical', - 'subscriptions', 'downloads', ]; diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/index.tsx b/plugins/woocommerce-admin/client/task-lists/fills/products/index.tsx index ea7687e7b94..0e501fd9572 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/index.tsx +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/index.tsx @@ -10,8 +10,6 @@ import { Button } from '@wordpress/components'; import { getAdminLink } from '@woocommerce/settings'; import { Icon, chevronDown, chevronUp } from '@wordpress/icons'; import { recordEvent } from '@woocommerce/tracks'; -import { SETTINGS_STORE_NAME } from '@woocommerce/data'; -import { useSelect } from '@wordpress/data'; /** * Internal dependencies @@ -26,7 +24,6 @@ import LoadSampleProductModal from '../components/load-sample-product-modal'; import useLoadSampleProducts from '../components/use-load-sample-products'; import LoadSampleProductConfirmModal from '../components/load-sample-product-confirm-modal'; import useRecordCompletionTime from '../use-record-completion-time'; -import { getCountryCode } from '~/dashboard/utils'; const getOnboardingProductType = (): string[] => { const onboardingData = getAdminSetting( 'onboarding' ); @@ -59,29 +56,12 @@ export const Products = () => { setIsConfirmingLoadSampleProducts, ] = useState( false ); - const { isStoreInUS } = useSelect( ( select ) => { - const { getSettings } = select( SETTINGS_STORE_NAME ); - const { general: settings = {} } = getSettings( 'general' ); - - const country = - typeof settings.woocommerce_default_country === 'string' - ? settings.woocommerce_default_country - : ''; - - return { - isStoreInUS: getCountryCode( country ) === 'US', - }; - } ); - const surfacedProductTypeKeys = getSurfacedProductTypeKeys( getOnboardingProductType() ); const { productTypes, isRequesting } = useProductTypeListItems( - // Subscriptions only in the US - getProductTypes( { - exclude: isStoreInUS ? [] : [ 'subscription' ], - } ), + getProductTypes(), surfacedProductTypeKeys ); const { recordCompletionTime } = useRecordCompletionTime( 'products' ); diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/test/index.tsx b/plugins/woocommerce-admin/client/task-lists/fills/products/test/index.tsx index 90538546795..7345f290bfa 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/test/index.tsx +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/test/index.tsx @@ -43,14 +43,6 @@ const confirmModalText = describe( 'Products', () => { beforeEach( () => { jest.clearAllMocks(); - ( useSelect as jest.Mock ).mockImplementation( ( fn ) => - fn( () => ( { - getSettings: () => ( { - general: { - woocommerce_default_country: 'US', - }, - } ), - } ) ) ); } ); @@ -82,66 +74,6 @@ describe( 'Products', () => { expect( queryByText( 'View more product types' ) ).toBeInTheDocument(); } ); - it( 'should not render subscriptions products type when store is not in the US', () => { - ( getAdminSetting as jest.Mock ).mockImplementation( () => ( { - profile: { - product_types: [ 'subscriptions' ], - }, - } ) ); - ( useSelect as jest.Mock ).mockImplementation( ( fn ) => - fn( () => ( { - getSettings: () => ( { - general: { - woocommerce_default_country: 'GB', - }, - } ), - } ) ) - ); - const { queryByText } = render( ); - - expect( queryByText( 'Subscription product' ) ).not.toBeInTheDocument(); - } ); - - it( 'should not render subscriptions products type when store country is unknown', () => { - ( getAdminSetting as jest.Mock ).mockImplementation( () => ( { - profile: { - product_types: [ 'subscriptions' ], - }, - } ) ); - ( useSelect as jest.Mock ).mockImplementation( ( fn ) => - fn( () => ( { - getSettings: () => ( { - general: { - woocommerce_default_country: undefined, - }, - } ), - } ) ) - ); - const { queryByText } = render( ); - - expect( queryByText( 'Subscription product' ) ).not.toBeInTheDocument(); - } ); - - it( 'should render subscriptions products type when store is in the US', () => { - ( getAdminSetting as jest.Mock ).mockImplementation( () => ( { - profile: { - product_types: [ 'subscriptions' ], - }, - } ) ); - ( useSelect as jest.Mock ).mockImplementation( ( fn ) => - fn( () => ( { - getSettings: () => ( { - general: { - woocommerce_default_country: 'US', - }, - } ), - } ) ) - ); - const { queryByText } = render( ); - - expect( queryByText( 'Subscription product' ) ).toBeInTheDocument(); - } ); - it( 'clicking on suggested product should fire event tasklist_add_product with method: product_template, tasklist_product_template_selection with is_suggested:true and task_completion_time', () => { ( getAdminSetting as jest.Mock ).mockImplementation( () => ( { profile: { diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/test/utils.ts b/plugins/woocommerce-admin/client/task-lists/fills/products/test/utils.ts index 6ba4ebc143c..5af4e967c16 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/test/utils.ts +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/test/utils.ts @@ -14,7 +14,7 @@ describe( 'getProductTypes', () => { getProductTypes( { exclude: [ 'external', 'digital' ] } ).map( ( p ) => p.key ) - ).toEqual( [ 'physical', 'variable', 'subscription', 'grouped' ] ); + ).toEqual( [ 'physical', 'variable', 'grouped' ] ); } ); } ); diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/use-create-product-by-type.ts b/plugins/woocommerce-admin/client/task-lists/fills/products/use-create-product-by-type.ts index 6c4b634e094..e975e36b0b4 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/use-create-product-by-type.ts +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/use-create-product-by-type.ts @@ -25,12 +25,6 @@ export const useCreateProductByType = () => { window.wcAdminFeatures[ 'new-product-management-experience' ]; const createProductByType = async ( type: ProductTypeKey ) => { - if ( type === 'subscription' ) { - window.location.href = getAdminLink( - 'post-new.php?post_type=product&subscription_pointers=true' - ); - return; - } setIsRequesting( true ); From 75e3cc3185b3ee32bf375a118644b7f23e969558 Mon Sep 17 00:00:00 2001 From: Leif Singer Date: Wed, 29 Nov 2023 13:43:21 +0100 Subject: [PATCH 35/51] fix spelling, grammar, etc. --- .../classic-theme-developer-handbook.md | 63 +++++++++---------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/docs/theme-development/classic-theme-developer-handbook.md b/docs/theme-development/classic-theme-developer-handbook.md index c9223a37bb2..0b18413418e 100644 --- a/docs/theme-development/classic-theme-developer-handbook.md +++ b/docs/theme-development/classic-theme-developer-handbook.md @@ -2,7 +2,7 @@ --- -**Note:** this doc is heared toward the development of classic themes. Visit [Develop Your First Low-Code Block Theme](https://learn.wordpress.org/course/develop-your-first-low-code-block-theme/) to learn about block theme development, and explore the [Create Block Theme plugin](https://wordpress.org/plugins/create-block-theme/) tool when you're ready to create a new theme. +**Note:** this document is geared toward the development of classic themes. For the recommended modern approach, visit [Develop Your First Low-Code Block Theme](https://learn.wordpress.org/course/develop-your-first-low-code-block-theme/) to learn about block theme development, and explore the [Create Block Theme plugin](https://wordpress.org/plugins/create-block-theme/) tool when you're ready to create a new theme. --- @@ -12,29 +12,29 @@ Non-WooCommerce themes, by default, also include: - Zoom feature enabled – ability to zoom in/out on a product image - Lightbox feature enabled – product gallery images pop up to examine closer -- Comments enabled, not Reviews – visitors/buyers can leave comments, same as a post, and not product ratings or reviews +- Comments enabled, not Reviews – visitors/buyers can leave comments as opposed to product ratings or reviews If you want more control over the layout of WooCommerce elements or full reviews support your theme will need to integrate with WooCommerce. There are a few different ways you can do this, and they are outlined below. ## Theme Integration -There are three possible ways to integrate WooCommerce with a theme. If you are using WooCommerce 3.2 or below you will need to use one of these methods to ensure WooCommerce shop and product pages are rendered correctly in your theme. If you are using a version of WooCommerce 3.3 or above you only need to do a theme integration if the automatic one doesn’t meet your needs. +There are three possible ways to integrate WooCommerce with a theme. If you are using WooCommerce 3.2 or below (**strongly discouraged**) you will need to use one of these methods to ensure WooCommerce shop and product pages are rendered correctly in your theme. If you are using a version of WooCommerce 3.3 or above you only need to do a theme integration if the automatic one doesn’t meet your needs. -### Using woocommerce_content() +### Using `woocommerce_content()` -This solution allows you to create a new template page within your theme that is used for **all WooCommerce taxonomy and post type displays**. While an easy catch-all solution, it does have a drawback in that this template is used for **all WC** taxonomies (product categories, etc.) and post types (product archives, single product pages). Developers are encouraged to use the hooks instead. +This solution allows you to create a new template page within your theme that is used for **all WooCommerce taxonomy and post type displays**. While an easy catch-all solution, it does have a drawback in that this template is used for **all WooCommerce taxonomies** (product categories, etc.) and **post types** (product archives, single product pages). Developers are encouraged to use the hooks instead (see below). To set up this template page: -1. **Duplicate page.php:** Duplicate your theme’s page.php file, and name it woocommerce.php. This file should be found like this: `wp-content/themes/YOURTHEME/woocommerce.php`. -2. **Edit your page (woocommerce.php)**: Open up your newly created **woocommerce.php** in a text editor, or the editor of your choice. -3. **Replace the loop:** Next you need to find the loop (see [The_Loop](http://codex.wordpress.org/The_Loop)). The loop usually starts with a: +1. **Duplicate page.php:** Duplicate your theme’s `page.php` file, and name it `woocommerce.php`. This path to the file should follow this pattern: `wp-content/themes/YOURTHEME/woocommerce.php`. +2. **Edit your page (woocommerce.php)**: Open up your newly created `woocommerce.php` in a text editor. +3. **Replace the loop:** Next you need to find the loop (see [The_Loop](https://codex.wordpress.org/The_Loop)). The loop usually starts with code like this: ```php @@ -48,13 +48,13 @@ This varies between themes. Once you have found it, **delete it**. In its place, This will make it use **WooCommerce’s loop instead**. Save the file. You’re done. -**Note:** When creating woocommerce.php in your theme’s folder, you will not be able to override the woocommerce/archive-product.php custom template as woocommerce.php has priority over archive-product.php. This is intended to prevent display issues. +**Note:** When creating `woocommerce.php` in your theme’s folder, you will not be able to override the `woocommerce/archive-product.php` custom template as `woocommerce.php` has priority over `archive-product.php`. This is intended to prevent display issues. ### Using hooks -The hook method is more involved, but it is also **more flexible**. This is similar to the method we use when creating themes. It’s also the method we use to integrate nicely with Twenty Ten to Twenty Sixteen themes. +The hook method is more involved, but it is also more flexible. This is similar to the method we use when creating themes. It’s also the method we use to integrate nicely with WordPress default themes. -Insert a few lines in your **theme’s functions.php** file. +Insert a few lines in your theme’s `functions.php` file. First unhook the WooCommerce wrappers: @@ -78,19 +78,19 @@ function my_theme_wrapper_end() { } ``` -Make sure that the markup matches that of your theme. If you’re unsure of which classes or IDs to use, take a look at your theme’s page.php for guidance. +Make sure that the markup matches that of your theme. If you’re unsure of which classes or IDs to use, take a look at your theme’s `page.php` for guidance. **Whenever possible use the hooks to add or remove content. This method is more robust than overriding the templates.** If you have overridden a template, you have to update the template any time the file changes. If you are using the hooks, you will only have to update if the hooks change, which happens much less frequently. ### Using template overrides -For information about overriding the WooCommerce templates with your own custom templates read the Template Structure section below. This method requires more maintenance than the hook-based method, as templates will need to be kept up-to-date with the WooCommerce core templates. +For information about overriding the WooCommerce templates with your own custom templates read the **Template Structure** section below. This method requires more maintenance than the hook-based method, as templates will need to be kept up-to-date with the WooCommerce core templates. ## Declaring WooCommerce Support If you are using custom WooCommerce template overrides in your theme you need to declare WooCommerce support using the `add_theme_support` function. WooCommerce template overrides are only enabled on themes that declare WooCommerce support. If you do not declare WooCommerce support in your theme, WooCommerce will assume the theme is not designed for WooCommerce compatibility and will use shortcode-based unsupported theme rendering to display the shop. -Declaring WooCommerce support is straightforward and involves adding one function in your theme’s functions.php file. +Declaring WooCommerce support is straightforward and involves adding one function in your theme’s `functions.php` file. ### Basic Usage @@ -102,7 +102,7 @@ function mytheme_add_woocommerce_support() { add_action( 'after_setup_theme', 'mytheme_add_woocommerce_support' ); ``` -Make sure you are using the after_setup_theme hook and not the init hook. Read more about this at the documentation for add_theme_support. +Make sure you are using the `after_setup_theme` hook and not the `init` hook. Read more about this in [the documentation for `add_theme_support`](https://developer.wordpress.org/reference/functions/add_theme_support/). ### Usage with Settings @@ -134,7 +134,7 @@ The `product_grid` settings let theme developers set default, minimum, and maxim ### Product gallery features (zoom, swipe, lightbox) -The product gallery introduced in 3.0.0 ([read here for more information](https://developer.woo.com/2016/10/19/new-product-gallery-merged-in-to-core-for-2-7/)) uses Flexslider, Photoswipe, and the jQuery Zoom plugin to offer swiping, lightboxes and other neat features. +The product gallery introduced in 3.0.0 ([read here for more information](https://developer.woo.com/2016/10/19/new-product-gallery-merged-in-to-core-for-2-7/)) uses Flexslider, Photoswipe, and the jQuery Zoom plugin to offer swiping, lightboxes, and other neat features. In versions `3.0`, `3.1`, and `3.2`, the new gallery is off by default and needs to be enabled using a snippet (below) or by using a compatible theme. This is because it’s common for themes to disable the WooCommerce gallery and replace it with their own scripts. @@ -148,9 +148,9 @@ add_theme_support( 'wc-product-gallery-lightbox' ); add_theme_support( 'wc-product-gallery-slider' ); ``` -You do not have to support all 3 parts of the gallery; you can pick and choose features. If a feature is not enabled, the scripts will not be loaded and the gallery code will not execute on product pages. +You do not have to support all three parts of the gallery; you can pick and choose features. If a feature is not enabled, the scripts will not be loaded and the gallery code will not execute on product pages. -If gallery features are enabled (e.g. you have a theme which enabled them, or you are running a non-WC compatible theme), you can disable them with `remove_theme_support`: +If gallery features are enabled (e.g., you have a theme that enabled them, or you are running a theme that is not compatible with WooCommerce), you can disable them with `remove_theme_support`: ```php remove_theme_support( 'wc-product-gallery-zoom' ); @@ -162,23 +162,23 @@ You can disable any parts; you do not need to disable all features. ## Template Structure -WooCommerce template files contain the **markup** and **template structure** for **frontend and HTML emails** of your store. If some structural change in HTML is necessary, you should override a template. +WooCommerce template files contain the **markup** and **template structure** for **the frontend and the HTML emails** of your store. If some structural change in HTML is necessary, you should override a template. -When you open these files, you will notice they all contain **hooks** that allow you to add/move content without needing to edit template files themselves. This method protects against upgrade issues, as the template files can be left completely untouched. +When you open these files, you will notice they all contain **hooks** that allow you to add or move content without needing to edit the template files themselves. This method protects against upgrade issues, as the template files can be left completely untouched. Template files can be found within the `**/woocommerce/templates/**` directory. ### How to Edit Files -Edit files in an **upgrade-safe way** using *overrides*. Copy it into a directory within your theme named `/woocommerce` keeping the same file structure but removing the `/templates/`subdirectory. +Edit files in an **upgrade-safe way** using *overrides*. Copy them into a directory within your theme named `/woocommerce`, keeping the same file structure but removing the `/templates/` subdirectory. -Example: To override the admin order notification, copy: `wp-content/plugins/woocommerce/templates/emails/admin-new-order.php` to `wp-content/themes/yourtheme/woocommerce/emails/admin-new-order.php` +Example: To override the admin order notification, copy `wp-content/plugins/woocommerce/templates/emails/admin-new-order.php` to `wp-content/themes/yourtheme/woocommerce/emails/admin-new-order.php`. The copied file will now override the WooCommerce default template file. -**Warning:** Do not delete any of WooCommerce hooks when overriding a template. This would prevent plugins hooking in to add content. +**Warning:** Do not delete any WooCommerce hooks when overriding a template. This would prevent plugins hooking in to add content. -**Warning:** Do not edit these files within the core plugin itself as they are overwritten during the upgrade process and any customizations will be lost. +**Warning:** Do not edit these files within the core plugin itselfe as they are overwritten during the upgrade process and any customizations will be lost. ## CSS Structure @@ -187,12 +187,13 @@ Inside the `assets/css/` directory, you will find the stylesheets responsible fo Files to look for are `woocommerce.scss` and `woocommerce.css`. - `woocommerce.css` is the minified stylesheet – it’s the CSS without any of the spaces, indents, etc. This makes the file very fast to load. This file is referenced by the plugin and declares all WooCommerce styles. -- `woocommerce.scss` is not directly used by the plugin, but by the team developing WooCommerce. We use [SASS](http://sass-lang.com/) in this file to script the CSS in the first file easier and faster. -The CSS is written to make the default layout compatible with as many themes as possible by using % widths for all layout styles. It is, however, likely that you’ll want to make your own adjustments. +- `woocommerce.scss` is not directly used by the plugin, but by the team developing WooCommerce. We use [SASS](http://sass-lang.com/) in this file to generate the CSS in the first file. + +The CSS is written to make the default layout compatible with as many themes as possible by using percentage-based widths for all layout styles. It is, however, likely that you’ll want to make your own adjustments. ### Modifications -To avoid upgrade issues, we advise not editing these files but rather use them as a point of reference. +To avoid upgrade issues, we advise not editing these files but rather using them as a point of reference. If you just want to make changes, we recommend adding some overriding styles to your theme stylesheet. For example, add the following to your theme stylesheet to make WooCommerce buttons black instead of the default color: @@ -209,14 +210,12 @@ WooCommerce also outputs the theme name (plus other useful information, such as ### Disabling WooCommerce styles -If you plan to make major changes, or create a theme from scratch, then you may prefer your theme not reference the WooCommerce stylesheet at all. You can tell WooCommerce to not use the default `woocommerce.css`. - -Add the following code to your theme’s `functions.php` file: +If you plan to make major changes, or create a theme from scratch, then you may prefer your theme not reference the WooCommerce stylesheet at all. You can tell WooCommerce to not use the default `woocommerce.css` by adding the following code to your theme’s `functions.php` file: ```php add_filter( 'woocommerce_enqueue_styles', '__return_false' ); ``` -With this definition in place, your theme will no longer use the WooCommerce stylesheet and give you a blank canvas upon which you can build your own desired layout/style. +With this definition in place, your theme will no longer use the WooCommerce stylesheet and give you a blank canvas upon which you can build your own desired layout and styles. Styling a WooCommerce theme from scratch for the first time is no easy task. There are many different pages and elements that need to be styled, and if you’re new to WooCommerce, you are probably not familiar with many of them. A non-exhaustive list of WooCommerce elements to style can be found [here](https://developer.files.wordpress.com/2017/12/woocommerce-theme-testing-checklist.pdf). From fdaa33b4f1a30aac6ab598f01724fc4a03ba97be Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 29 Nov 2023 12:46:10 +0000 Subject: [PATCH 36/51] Add changefile(s) from automation for the following project(s): woocommerce --- plugins/woocommerce/changelog/41778-issue-41606 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 plugins/woocommerce/changelog/41778-issue-41606 diff --git a/plugins/woocommerce/changelog/41778-issue-41606 b/plugins/woocommerce/changelog/41778-issue-41606 new file mode 100644 index 00000000000..6e5088c11a7 --- /dev/null +++ b/plugins/woocommerce/changelog/41778-issue-41606 @@ -0,0 +1,4 @@ +Significance: patch +Type: update + +Removed the Subscription product type from the 'Add Product' onboarding task list. \ No newline at end of file From aaf4e090a6002232081c889e3204d5e038361d5d Mon Sep 17 00:00:00 2001 From: Jason Kytros Date: Wed, 29 Nov 2023 15:03:16 +0200 Subject: [PATCH 37/51] Prettier fixes --- .../client/task-lists/fills/products/constants.tsx | 6 +----- .../task-lists/fills/products/use-create-product-by-type.ts | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx b/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx index 775c3046ea1..4a300f52e48 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx @@ -5,7 +5,6 @@ import { __ } from '@wordpress/i18n'; import ProductIcon from 'gridicons/dist/product'; import CloudOutlineIcon from 'gridicons/dist/cloud-outline'; import TypesIcon from 'gridicons/dist/types'; -import CalendarIcon from 'gridicons/dist/calendar'; import { Icon, chevronRight } from '@wordpress/icons'; /** @@ -90,7 +89,4 @@ export const onboardingProductTypesToSurfaced: Readonly< export const defaultSurfacedProductTypes = onboardingProductTypesToSurfaced.physical; -export const supportedOnboardingProductTypes = [ - 'physical', - 'downloads', -]; +export const supportedOnboardingProductTypes = [ 'physical','downloads' ]; diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/use-create-product-by-type.ts b/plugins/woocommerce-admin/client/task-lists/fills/products/use-create-product-by-type.ts index e975e36b0b4..16441e21ba1 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/use-create-product-by-type.ts +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/use-create-product-by-type.ts @@ -25,7 +25,6 @@ export const useCreateProductByType = () => { window.wcAdminFeatures[ 'new-product-management-experience' ]; const createProductByType = async ( type: ProductTypeKey ) => { - setIsRequesting( true ); if ( From f16061e4feab87d98c824076d1520c0f8a4e1e5e Mon Sep 17 00:00:00 2001 From: Jason Kytros Date: Wed, 29 Nov 2023 16:08:00 +0200 Subject: [PATCH 38/51] Add space --- .../client/task-lists/fills/products/constants.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx b/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx index 4a300f52e48..0765c652f69 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx @@ -89,4 +89,4 @@ export const onboardingProductTypesToSurfaced: Readonly< export const defaultSurfacedProductTypes = onboardingProductTypesToSurfaced.physical; -export const supportedOnboardingProductTypes = [ 'physical','downloads' ]; +export const supportedOnboardingProductTypes = [ 'physical', 'downloads' ]; From e684ae348b4b3f0a6b09ae2f8478009e0ce9c668 Mon Sep 17 00:00:00 2001 From: Fernando Marichal Date: Wed, 29 Nov 2023 11:10:37 -0300 Subject: [PATCH 39/51] Add empty state when no attributes (#41679) * Add empty state for attributes * Add styles * Remove comment * Add changelog * Remove downshift # Conflicts: # pnpm-lock.yaml * move changelog * Remove another comment * Create MenuAttributeList component * Refactor renderMenuItems * Replace div with Fragment --- ...v-39641_add_empty_state_when_no_attributes | 4 + .../attribute-input-field.scss | 3 + .../attribute-input-field.tsx | 117 ++++++------------ .../menu-attribute-list.tsx | 82 ++++++++++++ .../components/attribute-input-field/types.ts | 82 ++++++++++++ 5 files changed, 211 insertions(+), 77 deletions(-) create mode 100644 packages/js/product-editor/changelog/dev-39641_add_empty_state_when_no_attributes create mode 100644 packages/js/product-editor/src/components/attribute-input-field/menu-attribute-list.tsx create mode 100644 packages/js/product-editor/src/components/attribute-input-field/types.ts diff --git a/packages/js/product-editor/changelog/dev-39641_add_empty_state_when_no_attributes b/packages/js/product-editor/changelog/dev-39641_add_empty_state_when_no_attributes new file mode 100644 index 00000000000..896f09e3bbd --- /dev/null +++ b/packages/js/product-editor/changelog/dev-39641_add_empty_state_when_no_attributes @@ -0,0 +1,4 @@ +Significance: minor +Type: dev + +Add empty state when no attributes #41679 diff --git a/packages/js/product-editor/src/components/attribute-input-field/attribute-input-field.scss b/packages/js/product-editor/src/components/attribute-input-field/attribute-input-field.scss index 0c83f6af4cd..67e51af0f07 100644 --- a/packages/js/product-editor/src/components/attribute-input-field/attribute-input-field.scss +++ b/packages/js/product-editor/src/components/attribute-input-field/attribute-input-field.scss @@ -7,6 +7,9 @@ &__add-new-icon { margin-right: $gap-small; } + &__no-results { + padding: $gap-small; + } } .woocommerce-experimental-select-control__popover-menu-container { diff --git a/packages/js/product-editor/src/components/attribute-input-field/attribute-input-field.tsx b/packages/js/product-editor/src/components/attribute-input-field/attribute-input-field.tsx index 2c3d1159c43..cb66622c717 100644 --- a/packages/js/product-editor/src/components/attribute-input-field/attribute-input-field.tsx +++ b/packages/js/product-editor/src/components/attribute-input-field/attribute-input-field.tsx @@ -1,15 +1,12 @@ /** * External dependencies */ -import { sprintf, __ } from '@wordpress/i18n'; +import { __ } from '@wordpress/i18n'; import { useDispatch, useSelect } from '@wordpress/data'; -import { Spinner, Icon } from '@wordpress/components'; -import { plus } from '@wordpress/icons'; +import { Spinner } from '@wordpress/components'; import { createElement, useMemo } from '@wordpress/element'; import { EXPERIMENTAL_PRODUCT_ATTRIBUTES_STORE_NAME, - QueryProductAttribute, - ProductAttribute, WCDataSelector, ProductAttributesActions, WPDataActions, @@ -18,43 +15,21 @@ import { recordEvent } from '@woocommerce/tracks'; import { __experimentalSelectControl as SelectControl, __experimentalSelectControlMenu as Menu, - __experimentalSelectControlMenuItem as MenuItem, } from '@woocommerce/components'; /** * Internal dependencies */ -import { EnhancedProductAttribute } from '../../hooks/use-product-attributes'; import { TRACKS_SOURCE } from '../../constants'; - -type NarrowedQueryAttribute = Pick< QueryProductAttribute, 'id' | 'name' > & { - slug?: string; - isDisabled?: boolean; -}; - -type AttributeInputFieldProps = { - value?: EnhancedProductAttribute | null; - onChange: ( - value?: - | Omit< ProductAttribute, 'position' | 'visible' | 'variation' > - | string - ) => void; - label?: string; - placeholder?: string; - disabled?: boolean; - disabledAttributeIds?: number[]; - disabledAttributeMessage?: string; - ignoredAttributeIds?: number[]; - createNewAttributesAsGlobal?: boolean; -}; - -function isNewAttributeListItem( attribute: NarrowedQueryAttribute ): boolean { - return attribute.id === -99; -} - -function sanitizeSlugName( slug: string | undefined ): string { - return slug && slug.startsWith( 'pa_' ) ? slug.substring( 3 ) : ''; -} +import { MenuAttributeList } from './menu-attribute-list'; +import { + AttributeInputFieldProps, + getItemPropsType, + getMenuPropsType, + NarrowedQueryAttribute, + UseComboboxGetItemPropsOptions, + UseComboboxGetMenuPropsOptions, +} from './types'; export const AttributeInputField: React.FC< AttributeInputFieldProps > = ( { value = null, @@ -86,7 +61,7 @@ export const AttributeInputField: React.FC< AttributeInputFieldProps > = ( { const markedAttributes = useMemo( function setDisabledAttribute() { return ( - attributes?.map( ( attribute ) => ( { + attributes?.map( ( attribute: NarrowedQueryAttribute ) => ( { ...attribute, isDisabled: disabledAttributeIds.includes( attribute.id ), } ) ) ?? [] @@ -95,6 +70,12 @@ export const AttributeInputField: React.FC< AttributeInputFieldProps > = ( { [ attributes, disabledAttributeIds ] ); + function isNewAttributeListItem( + attribute: NarrowedQueryAttribute + ): boolean { + return attribute.id === -99; + } + const getFilteredItems = ( allItems: NarrowedQueryAttribute[], inputValue: string @@ -175,7 +156,7 @@ export const AttributeInputField: React.FC< AttributeInputFieldProps > = ( { getItemLabel={ ( item ) => item?.name || '' } getItemValue={ ( item ) => item?.id || '' } selected={ value } - onSelect={ ( attribute ) => { + onSelect={ ( attribute: NarrowedQueryAttribute ) => { if ( isNewAttributeListItem( attribute ) ) { addNewAttribute( attribute ); } else { @@ -196,51 +177,33 @@ export const AttributeInputField: React.FC< AttributeInputFieldProps > = ( { getItemProps, getMenuProps, isOpen, + }: { + items: NarrowedQueryAttribute[]; + highlightedIndex: number; + getItemProps: ( + options: UseComboboxGetItemPropsOptions< NarrowedQueryAttribute > + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ) => any; + getMenuProps: getMenuPropsType; + isOpen: boolean; } ) => { return ( { isLoading ? ( ) : ( - renderItems.map( ( item, index: number ) => ( - ( { - ...getItemProps( options ), - disabled: item.isDisabled || undefined, - } ) } - tooltipText={ - item.isDisabled - ? disabledAttributeMessage - : sanitizeSlugName( item.slug ) - } - > - { isNewAttributeListItem( item ) ? ( -
    - - - { sprintf( - /* translators: The name of the new attribute term to be created */ - __( - 'Create "%s"', - 'woocommerce' - ), - item.name - ) } - -
    - ) : ( - item.name - ) } -
    - ) ) + getItemPropsType< NarrowedQueryAttribute > + } + /> ) }
    ); diff --git a/packages/js/product-editor/src/components/attribute-input-field/menu-attribute-list.tsx b/packages/js/product-editor/src/components/attribute-input-field/menu-attribute-list.tsx new file mode 100644 index 00000000000..0fcec286d32 --- /dev/null +++ b/packages/js/product-editor/src/components/attribute-input-field/menu-attribute-list.tsx @@ -0,0 +1,82 @@ +/** + * External dependencies + */ +import { sprintf, __ } from '@wordpress/i18n'; +import { plus } from '@wordpress/icons'; +import { Icon } from '@wordpress/components'; +import { createElement, Fragment } from '@wordpress/element'; +import { __experimentalSelectControlMenuItem as MenuItem } from '@woocommerce/components'; + +/** + * Internal dependencies + */ +import { + MenuAttributeListProps, + NarrowedQueryAttribute, + UseComboboxGetMenuPropsOptions, +} from './types'; + +function isNewAttributeListItem( attribute: NarrowedQueryAttribute ): boolean { + return attribute.id === -99; +} + +function sanitizeSlugName( slug: string | undefined ): string { + return slug && slug.startsWith( 'pa_' ) ? slug.substring( 3 ) : ''; +} + +export const MenuAttributeList: React.FC< MenuAttributeListProps > = ( { + disabledAttributeMessage = '', + renderItems, + highlightedIndex, + getItemProps, +} ) => { + if ( renderItems.length > 0 ) { + return ( + + { renderItems.map( ( item, index: number ) => ( + ( { + ...getItemProps( options ), + disabled: item.isDisabled || undefined, + } ) } + tooltipText={ + item.isDisabled + ? disabledAttributeMessage + : sanitizeSlugName( item.slug ) + } + > + { isNewAttributeListItem( item ) ? ( +
    + + + { sprintf( + /* translators: The name of the new attribute term to be created */ + __( 'Create "%s"', 'woocommerce' ), + item.name + ) } + +
    + ) : ( + item.name + ) } +
    + ) ) } +
    + ); + } + return ( +
    + { __( 'Nothing yet. Type to create.', 'woocommerce' ) } +
    + ); +}; diff --git a/packages/js/product-editor/src/components/attribute-input-field/types.ts b/packages/js/product-editor/src/components/attribute-input-field/types.ts new file mode 100644 index 00000000000..e84b546f2a2 --- /dev/null +++ b/packages/js/product-editor/src/components/attribute-input-field/types.ts @@ -0,0 +1,82 @@ +/** + * External dependencies + */ +import { QueryProductAttribute, ProductAttribute } from '@woocommerce/data'; + +/** + * Internal dependencies + */ +import { EnhancedProductAttribute } from '../../hooks/use-product-attributes'; + +export type NarrowedQueryAttribute = Pick< + QueryProductAttribute, + 'id' | 'name' +> & { + slug?: string; + isDisabled?: boolean; +}; + +export type AttributeInputFieldProps = { + value?: EnhancedProductAttribute | null; + onChange: ( + value?: + | Omit< ProductAttribute, 'position' | 'visible' | 'variation' > + | string + ) => void; + label?: string; + placeholder?: string; + disabled?: boolean; + disabledAttributeIds?: number[]; + disabledAttributeMessage?: string; + ignoredAttributeIds?: number[]; + createNewAttributesAsGlobal?: boolean; +}; + +export type MenuAttributeListProps = { + renderItems: NarrowedQueryAttribute[]; + highlightedIndex: number; + disabledAttributeMessage?: string; + getItemProps: ( + options: UseComboboxGetMenuPropsOptions + ) => getItemPropsType< NarrowedQueryAttribute >; +}; + +export interface GetPropsWithRefKey { + refKey?: string; +} +export interface GetMenuPropsOptions + extends React.HTMLProps< HTMLElement >, + GetPropsWithRefKey { + [ 'aria-label' ]?: string; +} + +export interface UseComboboxGetMenuPropsOptions + extends GetPropsWithRefKey, + GetMenuPropsOptions {} + +export interface GetPropsCommonOptions { + suppressRefError?: boolean; +} + +export interface GetItemPropsOptions< Item > + extends React.HTMLProps< HTMLElement > { + index?: number; + item: Item; + isSelected?: boolean; + disabled?: boolean; +} + +export interface UseComboboxGetItemPropsOptions< Item > + extends GetItemPropsOptions< Item >, + GetPropsWithRefKey {} + +export type getMenuPropsType = ( + options?: UseComboboxGetMenuPropsOptions, + otherOptions?: GetPropsCommonOptions + // eslint-disable-next-line @typescript-eslint/no-explicit-any +) => any; + +export type getItemPropsType< ItemType > = ( + options: UseComboboxGetItemPropsOptions< ItemType > + // eslint-disable-next-line @typescript-eslint/no-explicit-any +) => any; From 9a947c1a060c9ac5777fe5f1f3bc278969541b62 Mon Sep 17 00:00:00 2001 From: Corey McKrill <916023+coreymckrill@users.noreply.github.com> Date: Wed, 29 Nov 2023 06:52:37 -0800 Subject: [PATCH 40/51] Logging: Implement "search within log files" (#41353) * Normalize render method names * Refactor get_query_params to allow key filtering * Scaffold the search results view * Add missing unslash * First pass at functional search * Fix memory leak and recursive highlighting * Fix various search string edge cases * Move match highlighting to format_match method * Tweak match line formatting * Rename ListTable to FileListTable * Switch search results view to a list table * Add notice about max files for search * Remove unused function * Only use monospace font on the matched line part of search results * Add notice about search result limit * Fix font in table header * phpcs cleanup * Remove unnecessary search form action * Add caching to search results * Add unit test for search method * Caching improvements * phpcs cleanup * Add unit test for close_stream * Remove unneeded linting exception * Add changelog file * Remove unnecessary usage of get_class() * Make sure file stream gets closed when we break the loop early * Make the returned results an even 200 when hitting the limit --- plugins/woocommerce/changelog/try-log-search | 4 + .../woocommerce/client/legacy/css/admin.scss | 64 +++++ .../includes/admin/class-wc-admin-menus.php | 5 +- .../Internal/Admin/Logging/FileV2/File.php | 15 +- .../Admin/Logging/FileV2/FileController.php | 144 +++++++++++ .../{ListTable.php => FileListTable.php} | 22 +- .../Admin/Logging/FileV2/SearchListTable.php | 227 ++++++++++++++++++ .../Admin/Logging/LogHandlerFileV2.php | 29 ++- .../Internal/Admin/Logging/PageController.php | 205 +++++++++++----- .../Logging/FileV2/FileControllerTest.php | 39 +++ .../Admin/Logging/FileV2/FileTest.php | 8 +- 11 files changed, 696 insertions(+), 66 deletions(-) create mode 100644 plugins/woocommerce/changelog/try-log-search rename plugins/woocommerce/src/Internal/Admin/Logging/FileV2/{ListTable.php => FileListTable.php} (94%) create mode 100644 plugins/woocommerce/src/Internal/Admin/Logging/FileV2/SearchListTable.php diff --git a/plugins/woocommerce/changelog/try-log-search b/plugins/woocommerce/changelog/try-log-search new file mode 100644 index 00000000000..f412a2f69fc --- /dev/null +++ b/plugins/woocommerce/changelog/try-log-search @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Adds a search field to the log files list table screen that will do a partial match string search on the contents of all the files currently shown in the list table diff --git a/plugins/woocommerce/client/legacy/css/admin.scss b/plugins/woocommerce/client/legacy/css/admin.scss index 91bef1f8347..271f7c8f90d 100644 --- a/plugins/woocommerce/client/legacy/css/admin.scss +++ b/plugins/woocommerce/client/legacy/css/admin.scss @@ -1351,9 +1351,35 @@ table.wc_status_table--tools { .wc-logs-single-file-actions { margin-left: auto; display: flex; + flex-flow: row wrap; gap: 0.5em; } +.wc-logs-search { + margin-left: auto; + display: flex; + flex-flow: column; +} + +.wc-logs-search-fieldset { + display: flex; + gap: 0.5em; + justify-content: flex-end; +} + +.wc-logs-search-notice { + font-size: 0.9em; + line-height: 2; + text-align: right; + visibility: hidden; + height: 0; + + .wc-logs-search:focus-within & { + visibility: visible; + height: auto; + } +} + .wc-logs-entries { background: #f6f7f7; border: 1px solid #c3c4c7; @@ -1418,6 +1444,44 @@ table.wc_status_table--tools { } } +.wc-logs-search-results { + tbody { + word-wrap: break-word; + + .column-file_id { + line-height: 2; + } + + .column-line_number, + .column-line { + line-height: 2.3; + } + + .column-line { + font-family: Consolas, Monaco, monospace; + } + } + + td { + vertical-align: middle; + } + + .column-file_id { + width: 16%; + } + + .column-line_number { + width: 8%; + } + + .search-match { + background: #fff8c5; + padding: 0.46em 0; + border: 1px dashed #c3c4c7; + line-height: 2.3; + } +} + /** * Log severity level colors. * diff --git a/plugins/woocommerce/includes/admin/class-wc-admin-menus.php b/plugins/woocommerce/includes/admin/class-wc-admin-menus.php index 71a6c2fc0d0..53e914007ff 100644 --- a/plugins/woocommerce/includes/admin/class-wc-admin-menus.php +++ b/plugins/woocommerce/includes/admin/class-wc-admin-menus.php @@ -12,7 +12,7 @@ use Automattic\WooCommerce\Internal\Admin\Marketplace; use Automattic\WooCommerce\Internal\Admin\Orders\COTRedirectionController; use Automattic\WooCommerce\Internal\Admin\Orders\PageController as Custom_Orders_PageController; use Automattic\WooCommerce\Internal\Admin\Logging\PageController as LoggingPageController; -use Automattic\WooCommerce\Internal\Admin\Logging\FileV2\ListTable as LoggingListTable; +use Automattic\WooCommerce\Internal\Admin\Logging\FileV2\{ FileListTable, SearchListTable }; use Automattic\WooCommerce\Internal\Admin\WCAdminAssets; use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController; use Automattic\WooCommerce\Utilities\FeaturesUtil; @@ -324,7 +324,8 @@ class WC_Admin_Menus { $screen_options = array( 'woocommerce_keys_per_page', 'woocommerce_webhooks_per_page', - LoggingListTable::PER_PAGE_USER_OPTION_KEY, + FileListTable::PER_PAGE_USER_OPTION_KEY, + SearchListTable::PER_PAGE_USER_OPTION_KEY, ); if ( in_array( $option, $screen_options, true ) ) { diff --git a/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/File.php b/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/File.php index 517e8f5cd7c..59c39c76c58 100644 --- a/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/File.php +++ b/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/File.php @@ -153,7 +153,7 @@ class File { } /** - * Open a read-only stream file this file. + * Open a read-only stream for this file. * * @return resource|false */ @@ -166,6 +166,19 @@ class File { return $this->stream; } + /** + * Close the stream for this file. + * + * The stream will also close automatically when the class instance destructs, but this can be useful for + * avoiding having a large number of streams open simultaneously. + * + * @return bool + */ + public function close_stream(): bool { + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_read_fclose -- No suitable alternative. + return fclose( $this->stream ); + } + /** * Get the name of the file, with extension, but without full path. * diff --git a/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/FileController.php b/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/FileController.php index 7842b4ccdc3..78172a263a9 100644 --- a/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/FileController.php +++ b/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/FileController.php @@ -4,6 +4,7 @@ declare( strict_types = 1 ); namespace Automattic\WooCommerce\Internal\Admin\Logging\FileV2; use Automattic\Jetpack\Constants; +use WC_Cache_Helper; use WP_Error; /** @@ -23,6 +24,44 @@ class FileController { 'source' => '', ); + /** + * Default values for arguments for the search_within_files method. + * + * @const array + */ + public const DEFAULTS_SEARCH_WITHIN_FILES = array( + 'offset' => 0, + 'per_page' => 50, + ); + + /** + * The maximum number of files that can be searched at one time. + * + * @const int + */ + public const SEARCH_MAX_FILES = 100; + + /** + * The maximum number of search results that can be returned at one time. + * + * @const int + */ + public const SEARCH_MAX_RESULTS = 200; + + /** + * The cache group name to use for caching operations. + * + * @const string + */ + private const CACHE_GROUP = 'log-files'; + + /** + * A cache key for storing and retrieving the results of the last logs search. + * + * @const string + */ + private const SEARCH_CACHE_KEY = 'logs_previous_search'; + /** * The absolute path to the log directory. * @@ -299,9 +338,114 @@ class FileController { } } + if ( $deleted > 0 ) { + $this->invalidate_cache(); + } + return $deleted; } + /** + * Search within a set of log files for a particular string. + * + * @param string $search The string to search for. + * @param array $args Optional. Arguments for pagination of search results. + * @param array $file_args Optional. Arguments to filter and sort the files that are returned. See get_files(). + * @param bool $count_only Optional. True to return a total count of the matches. + * + * @return array|int|WP_Error When matches are found, each array item is an associative array that includes the + * file ID, line number, and the matched string with HTML markup around the matched parts. + */ + public function search_within_files( string $search, array $args = array(), array $file_args = array(), bool $count_only = false ) { + if ( '' === $search ) { + return array(); + } + + $search = esc_html( $search ); + + $args = wp_parse_args( $args, self::DEFAULTS_SEARCH_WITHIN_FILES ); + + $file_args = array_merge( + $file_args, + array( + 'offset' => 0, + 'per_page' => self::SEARCH_MAX_FILES, + ) + ); + + $cache_key = WC_Cache_Helper::get_prefixed_key( self::SEARCH_CACHE_KEY, self::CACHE_GROUP ); + $query = wp_json_encode( array( $search, $args, $file_args ) ); + $cache = wp_cache_get( $cache_key ); + $is_cached = isset( $cache['query'], $cache['results'] ) && $query === $cache['query']; + + if ( true === $is_cached ) { + $matched_lines = $cache['results']; + } else { + $files = $this->get_files( $file_args ); + if ( is_wp_error( $files ) ) { + return $files; + } + + // Max string size * SEARCH_MAX_RESULTS = ~1MB largest possible cache entry. + $max_string_size = 5 * KB_IN_BYTES; + + $matched_lines = array(); + + foreach ( $files as $file ) { + $stream = $file->get_stream(); + $line_number = 1; + + while ( ! feof( $stream ) ) { + $line = fgets( $stream, $max_string_size ); + if ( ! is_string( $line ) ) { + continue; + } + + $sanitized_line = esc_html( trim( $line ) ); + if ( false !== stripos( $sanitized_line, $search ) ) { + $matched_lines[] = array( + 'file_id' => $file->get_file_id(), + 'line_number' => $line_number, + 'line' => $sanitized_line, + ); + } + + if ( count( $matched_lines ) >= self::SEARCH_MAX_RESULTS ) { + $file->close_stream(); + break 2; + } + + if ( false !== strstr( $line, PHP_EOL ) ) { + $line_number ++; + } + } + + $file->close_stream(); + } + + $to_cache = array( + 'query' => $query, + 'results' => $matched_lines, + ); + wp_cache_set( $cache_key, $to_cache, self::CACHE_GROUP, DAY_IN_SECONDS ); + } + + if ( true === $count_only ) { + return count( $matched_lines ); + } + + return array_slice( $matched_lines, $args['offset'], $args['per_page'] ); + } + + /** + * Invalidate the cache group related to log file data. + * + * @return bool True on successfully invalidating the cache. + */ + public function invalidate_cache(): bool { + return WC_Cache_Helper::invalidate_cache_group( self::CACHE_GROUP ); + } + /** * Sanitize the source property of a log file. * diff --git a/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/ListTable.php b/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/FileListTable.php similarity index 94% rename from plugins/woocommerce/src/Internal/Admin/Logging/FileV2/ListTable.php rename to plugins/woocommerce/src/Internal/Admin/Logging/FileV2/FileListTable.php index 3469fa5942e..76470640ce5 100644 --- a/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/ListTable.php +++ b/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/FileListTable.php @@ -8,9 +8,9 @@ use Automattic\WooCommerce\Internal\Admin\Logging\PageController; use WP_List_Table; /** - * ListTable class. + * FileListTable class. */ -class ListTable extends WP_List_Table { +class FileListTable extends WP_List_Table { /** * The user option key for saving the preferred number of files displayed per page. * @@ -33,7 +33,7 @@ class ListTable extends WP_List_Table { private $page_controller; /** - * ListTable class. + * FileListTable class. * * @param FileController $file_controller Instance of FileController. * @param PageController $page_controller Instance of PageController. @@ -150,14 +150,17 @@ class ListTable extends WP_List_Table { public function prepare_items(): void { $per_page = $this->get_items_per_page( self::PER_PAGE_USER_OPTION_KEY, - $this->file_controller::DEFAULTS_GET_FILES['per_page'] + $this->get_per_page_default() ); $defaults = array( 'per_page' => $per_page, 'offset' => ( $this->get_pagenum() - 1 ) * $per_page, ); - $file_args = wp_parse_args( $this->page_controller->get_query_params(), $defaults ); + $file_args = wp_parse_args( + $this->page_controller->get_query_params( array( 'order', 'orderby', 'source' ) ), + $defaults + ); $total_items = $this->file_controller->get_files( $file_args, true ); if ( is_wp_error( $total_items ) ) { @@ -318,4 +321,13 @@ class ListTable extends WP_List_Table { return size_format( $size ); } + + /** + * Helper to get the default value for the per_page arg. + * + * @return int + */ + public function get_per_page_default(): int { + return $this->file_controller::DEFAULTS_GET_FILES['per_page']; + } } diff --git a/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/SearchListTable.php b/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/SearchListTable.php new file mode 100644 index 00000000000..e64fd07b306 --- /dev/null +++ b/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/SearchListTable.php @@ -0,0 +1,227 @@ +file_controller = $file_controller; + $this->page_controller = $page_controller; + + parent::__construct( + array( + 'singular' => 'wc-logs-search-result', + 'plural' => 'wc-logs-search-results', + 'ajax' => false, + ) + ); + } + + /** + * Render message when there are no items. + * + * @return void + */ + public function no_items(): void { + esc_html_e( 'No search results.', 'woocommerce' ); + } + + /** + * Set up the column header info. + * + * @return void + */ + public function prepare_column_headers(): void { + $this->_column_headers = array( + $this->get_columns(), + array(), + array(), + $this->get_primary_column(), + ); + } + + /** + * Prepares the list of items for displaying. + * + * @return void + */ + public function prepare_items(): void { + $per_page = $this->get_items_per_page( + self::PER_PAGE_USER_OPTION_KEY, + $this->get_per_page_default() + ); + + $args = array( + 'per_page' => $per_page, + 'offset' => ( $this->get_pagenum() - 1 ) * $per_page, + ); + + $file_args = $this->page_controller->get_query_params( array( 'order', 'orderby', 'search', 'source' ) ); + $search = $file_args['search']; + unset( $file_args['search'] ); + + $total_items = $this->file_controller->search_within_files( $search, $args, $file_args, true ); + if ( is_wp_error( $total_items ) ) { + printf( + '

    %s

    ', + esc_html( $total_items->get_error_message() ) + ); + + return; + } + + if ( $total_items >= $this->file_controller::SEARCH_MAX_RESULTS ) { + printf( + '

    %s

    ', + sprintf( + // translators: %s is a number. + esc_html__( 'The number of search results has reached the limit of %s. Try refining your search.', 'woocommerce' ), + esc_html( number_format_i18n( $this->file_controller::SEARCH_MAX_RESULTS ) ) + ) + ); + } + + $total_pages = ceil( $total_items / $per_page ); + $results = $this->file_controller->search_within_files( $search, $args, $file_args ); + $this->items = $results; + + $this->set_pagination_args( + array( + 'per_page' => $per_page, + 'total_items' => $total_items, + 'total_pages' => $total_pages, + ) + ); + } + + /** + * Gets a list of columns. + * + * @return array + */ + public function get_columns(): array { + $columns = array( + 'file_id' => esc_html__( 'File', 'woocommerce' ), + 'line_number' => esc_html__( 'Line #', 'woocommerce' ), + 'line' => esc_html__( 'Matched Line', 'woocommerce' ), + ); + + return $columns; + } + + /** + * Render the file_id column. + * + * @param array $item The current search result being rendered. + * + * @return string + */ + public function column_file_id( array $item ): string { + // Add a word break after the rotation number, if it exists. + $file_id = preg_replace( '/\.([0-9])+\-/', '.\1-', $item['file_id'] ); + + return wp_kses( $file_id, array( 'wbr' => array() ) ); + } + + /** + * Render the line_number column. + * + * @param array $item The current search result being rendered. + * + * @return string + */ + public function column_line_number( array $item ): string { + $match_url = add_query_arg( + array( + 'view' => 'single_file', + 'file_id' => $item['file_id'], + ), + $this->page_controller->get_logs_tab_url() . '#L' . absint( $item['line_number'] ) + ); + + return sprintf( + '%2$s', + esc_url( $match_url ), + sprintf( + // translators: %s is a line number in a file. + esc_html__( 'Line %s', 'woocommerce' ), + number_format_i18n( absint( $item['line_number'] ) ) + ) + ); + } + + /** + * Render the line column. + * + * @param array $item The current search result being rendered. + * + * @return string + */ + public function column_line( array $item ): string { + $params = $this->page_controller->get_query_params( array( 'search' ) ); + $line = $item['line']; + + // Highlight matches within the line. + $pattern = preg_quote( $params['search'], '/' ); + preg_match_all( "/$pattern/i", $line, $matches, PREG_OFFSET_CAPTURE ); + if ( is_array( $matches[0] ) && count( $matches[0] ) >= 1 ) { + $length_change = 0; + + foreach ( $matches[0] as $match ) { + $replace = '' . $match[0] . ''; + $offset = $match[1] + $length_change; + $orig_length = strlen( $match[0] ); + $replace_length = strlen( $replace ); + + $line = substr_replace( $line, $replace, $offset, $orig_length ); + + $length_change += $replace_length - $orig_length; + } + } + + return wp_kses_post( $line ); + } + + /** + * Helper to get the default value for the per_page arg. + * + * @return int + */ + public function get_per_page_default(): int { + return $this->file_controller::DEFAULTS_SEARCH_WITHIN_FILES['per_page']; + } +} diff --git a/plugins/woocommerce/src/Internal/Admin/Logging/LogHandlerFileV2.php b/plugins/woocommerce/src/Internal/Admin/Logging/LogHandlerFileV2.php index ebbcf5720e7..92c91b3c746 100644 --- a/plugins/woocommerce/src/Internal/Admin/Logging/LogHandlerFileV2.php +++ b/plugins/woocommerce/src/Internal/Admin/Logging/LogHandlerFileV2.php @@ -2,9 +2,36 @@ namespace Automattic\WooCommerce\Internal\Admin\Logging; +use Automattic\WooCommerce\Internal\Admin\Logging\FileV2\FileController; use WC_Log_Handler_File; /** * LogHandlerFileV2 class. */ -class LogHandlerFileV2 extends WC_Log_Handler_File {} +class LogHandlerFileV2 extends WC_Log_Handler_File { + /** + * Handle a log entry. + * + * @param int $timestamp Log timestamp. + * @param string $level emergency|alert|critical|error|warning|notice|info|debug. + * @param string $message Log message. + * @param array $context { + * Additional information for log handlers. + * + * @type string $source Optional. Determines log file to write to. Default 'log'. + * @type bool $_legacy Optional. Default false. True to use outdated log format + * originally used in deprecated WC_Logger::add calls. + * } + * + * @return bool False if value was not handled and true if value was handled. + */ + public function handle( $timestamp, $level, $message, $context ) { + $written = parent::handle( $timestamp, $level, $message, $context ); + + if ( $written ) { + wc_get_container()->get( FileController::class )->invalidate_cache(); + } + + return $written; + } +} diff --git a/plugins/woocommerce/src/Internal/Admin/Logging/PageController.php b/plugins/woocommerce/src/Internal/Admin/Logging/PageController.php index 4b0e71990b6..50d55fa1e31 100644 --- a/plugins/woocommerce/src/Internal/Admin/Logging/PageController.php +++ b/plugins/woocommerce/src/Internal/Admin/Logging/PageController.php @@ -4,9 +4,10 @@ declare( strict_types = 1 ); namespace Automattic\WooCommerce\Internal\Admin\Logging; use Automattic\Jetpack\Constants; -use Automattic\WooCommerce\Internal\Admin\Logging\FileV2\{ FileController, ListTable }; +use Automattic\WooCommerce\Internal\Admin\Logging\FileV2\{ FileController, FileListTable, SearchListTable }; use Automattic\WooCommerce\Internal\Traits\AccessiblePrivateMethods; use WC_Admin_Status; +use WP_List_Table; use WC_Log_Levels; /** @@ -24,9 +25,9 @@ class PageController { private $file_controller; /** - * Instance of ListTable. + * Instance of FileListTable or SearchListTable. * - * @var ListTable + * @var FileListTable|SearchListTable */ private $list_table; @@ -97,8 +98,7 @@ class PageController { switch ( $handler ) { case LogHandlerFileV2::class: - $params = $this->get_query_params(); - $this->render_filev2( $params ); + $this->render_filev2(); break; case 'WC_Log_Handler_DB': WC_Admin_Status::status_logs_db(); @@ -112,20 +112,21 @@ class PageController { /** * Render the views for the FileV2 log handler. * - * @param array $params Args for rendering the views. - * * @return void */ - private function render_filev2( array $params = array() ): void { - $view = $params['view'] ?? ''; + private function render_filev2(): void { + $params = $this->get_query_params( array( 'view' ) ); - switch ( $view ) { + switch ( $params['view'] ) { case 'list_files': default: - $this->render_file_list_page( $params ); + $this->render_list_files_view(); + break; + case 'search_results': + $this->render_search_results_view(); break; case 'single_file': - $this->render_single_file_page( $params ); + $this->render_single_file_view(); break; } } @@ -133,18 +134,21 @@ class PageController { /** * Render the file list view. * - * @param array $params Args for rendering the view. - * * @return void */ - private function render_file_list_page( array $params = array() ): void { - $defaults = $this->get_query_param_defaults(); + private function render_list_files_view(): void { + $params = $this->get_query_params( array( 'order', 'orderby', 'source', 'view' ) ); + $defaults = $this->get_query_param_defaults(); + $list_table = $this->get_list_table( $params['view'] ); + + $list_table->prepare_items(); ?>

    + render_search_field(); ?>
    @@ -158,8 +162,7 @@ class PageController { /> - get_list_table()->prepare_items(); ?> - get_list_table()->display(); ?> + display(); ?>
    file_controller->get_file_by_id( $params['file_id'] ); + private function render_single_file_view(): void { + $params = $this->get_query_params( array( 'file_id', 'view' ) ); + $file = $this->file_controller->get_file_by_id( $params['file_id'] ); if ( is_wp_error( $file ) ) { ?> @@ -279,6 +281,26 @@ class PageController { get_query_params( array( 'order', 'orderby', 'search', 'source', 'view' ) ); + $list_table = $this->get_list_table( $params['view'] ); + + $list_table->prepare_items(); + + ?> +
    +

    + render_search_field(); ?> +
    + display(); ?> + '', 'order' => $this->file_controller::DEFAULTS_GET_FILES['order'], 'orderby' => $this->file_controller::DEFAULTS_GET_FILES['orderby'], + 'search' => '', 'source' => $this->file_controller::DEFAULTS_GET_FILES['source'], 'view' => 'list_files', ); @@ -297,9 +320,11 @@ class PageController { /** * Get and validate URL query params for FileV2 views. * + * @param array $param_keys Optional. The names of the params you want to get. + * * @return array */ - public function get_query_params(): array { + public function get_query_params( array $param_keys = array() ): array { $defaults = $this->get_query_param_defaults(); $params = filter_input_array( INPUT_GET, @@ -307,7 +332,7 @@ class PageController { 'file_id' => array( 'filter' => FILTER_CALLBACK, 'options' => function( $file_id ) { - return sanitize_file_name( $file_id ); + return sanitize_file_name( wp_unslash( $file_id ) ); }, ), 'order' => array( @@ -324,6 +349,12 @@ class PageController { 'default' => $defaults['orderby'], ), ), + 'search' => array( + 'filter' => FILTER_CALLBACK, + 'options' => function( $search ) { + return esc_html( wp_unslash( $search ) ); + }, + ), 'source' => array( 'filter' => FILTER_CALLBACK, 'options' => function( $source ) { @@ -333,7 +364,7 @@ class PageController { 'view' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array( - 'regexp' => '/^(list_files|single_file)$/', + 'regexp' => '/^(list_files|single_file|search_results)$/', 'default' => $defaults['view'], ), ), @@ -342,20 +373,33 @@ class PageController { ); $params = wp_parse_args( $params, $defaults ); + if ( count( $param_keys ) > 0 ) { + $params = array_intersect_key( $params, array_flip( $param_keys ) ); + } + return $params; } /** * Get and cache an instance of the list table. * - * @return ListTable + * @param string $view The current view, which determines which list table class to get. + * + * @return FileListTable|SearchListTable */ - private function get_list_table(): ListTable { - if ( $this->list_table instanceof ListTable ) { + private function get_list_table( string $view ) { + if ( $this->list_table instanceof WP_List_Table ) { return $this->list_table; } - $this->list_table = new ListTable( $this->file_controller, $this ); + switch ( $view ) { + case 'list_files': + $this->list_table = new FileListTable( $this->file_controller, $this ); + break; + case 'search_results': + $this->list_table = new SearchListTable( $this->file_controller, $this ); + break; + } return $this->list_table; } @@ -366,17 +410,19 @@ class PageController { * @return void */ private function setup_screen_options(): void { - $params = $this->get_query_params(); + $params = $this->get_query_params( array( 'view' ) ); - if ( 'list_files' === $params['view'] ) { - // Ensure list table columns are initialized early enough to enable column hiding. - $this->get_list_table()->prepare_column_headers(); + if ( in_array( $params['view'], array( 'list_files', 'search_results' ), true ) ) { + $list_table = $this->get_list_table( $params['view'] ); + + // Ensure list table columns are initialized early enough to enable column hiding, if available. + $list_table->prepare_column_headers(); add_screen_option( 'per_page', array( - 'default' => 20, - 'option' => ListTable::PER_PAGE_USER_OPTION_KEY, + 'default' => $list_table->get_per_page_default(), + 'option' => $list_table::PER_PAGE_USER_OPTION_KEY, ) ); } @@ -388,13 +434,14 @@ class PageController { * @return void */ private function handle_list_table_bulk_actions(): void { + $params = $this->get_query_params( array( 'file_id', 'view' ) ); + // Bail if this is not the list table view. - $params = $this->get_query_params(); if ( 'list_files' !== $params['view'] ) { return; } - $action = $this->get_list_table()->current_action(); + $action = $this->get_list_table( $params['view'] )->current_action(); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? wp_unslash( $_SERVER['REQUEST_URI'] ) : $this->get_logs_tab_url(); @@ -409,16 +456,7 @@ class PageController { $sendback = remove_query_arg( array( 'deleted' ), wp_get_referer() ); // Multiple file_id[] params will be filtered separately, but assigned to $files as an array. - $file_ids = filter_input( - INPUT_GET, - 'file_id', - FILTER_CALLBACK, - array( - 'options' => function( $file ) { - return sanitize_file_name( wp_unslash( $file ) ); - }, - ) - ); + $file_ids = $params['file_id']; if ( ! is_array( $file_ids ) || count( $file_ids ) < 1 ) { wp_safe_redirect( $sendback ); @@ -475,21 +513,21 @@ class PageController { /** * Format a log file line. * - * @param string $text The unformatted log file line. + * @param string $line The unformatted log file line. * @param int $line_number The line number. * * @return string */ - private function format_line( string $text, int $line_number ): string { + private function format_line( string $line, int $line_number ): string { $severity_levels = WC_Log_Levels::get_all_severity_levels(); $classes = array( 'line' ); - $text = esc_html( trim( $text ) ); - if ( empty( $text ) ) { - $text = ' '; + $line = esc_html( trim( $line ) ); + if ( empty( $line ) ) { + $line = ' '; } - $segments = explode( ' ', $text, 3 ); + $segments = explode( ' ', $line, 3 ); if ( isset( $segments[0] ) && false !== strtotime( $segments[0] ) ) { $classes[] = 'log-entry'; @@ -508,7 +546,7 @@ class PageController { } if ( count( $segments ) > 1 ) { - $text = implode( ' ', $segments ); + $line = implode( ' ', $segments ); } $classes = implode( ' ', $classes ); @@ -523,8 +561,65 @@ class PageController { ), sprintf( '%s', - wp_kses_post( $text ) + wp_kses_post( $line ) ) ); } + + /** + * Render a form for searching within log files. + * + * @return void + */ + private function render_search_field(): void { + $params = $this->get_query_params( array( 'search', 'source' ) ); + $defaults = $this->get_query_param_defaults(); + $file_count = $this->file_controller->get_files( $params, true ); + + if ( $file_count > 0 ) { + ?> + + assertEquals( 2, $deleted ); $this->assertEquals( 0, $this->sut->get_files( array(), true ) ); } + + /** + * @testdox The search_within_files method should return an associative array of case-insensitive search results. + */ + public function test_search_within_files(): void { + $log_time = time(); + + $this->handler->handle( $log_time, 'debug', 'Foo', array( 'source' => 'unit-testing1' ) ); + $this->handler->handle( $log_time, 'debug', 'Bar', array( 'source' => 'unit-testing1' ) ); + $this->handler->handle( $log_time, 'debug', 'foobar', array( 'source' => 'unit-testing1' ) ); + $this->handler->handle( $log_time, 'debug', 'A trip to the food bar', array( 'source' => 'unit-testing2' ) ); + $this->handler->handle( $log_time, 'debug', 'Hello world', array( 'source' => 'unit-testing2' ) ); + + $this->assertEquals( 2, $this->sut->get_files( array(), true ) ); + + $file_args = array( + 'order' => 'asc', + 'orderby' => 'source', + ); + + $results = $this->sut->search_within_files( 'foo', array(), $file_args ); + $this->assertCount( 3, $results ); + + $match = array_shift( $results ); + $this->assertArrayHasKey( 'file_id', $match ); + $this->assertArrayHasKey( 'line_number', $match ); + $this->assertArrayHasKey( 'line', $match ); + $this->assertEquals( 'unit-testing1-' . gmdate( 'Y-m-d', $log_time ), $match['file_id'] ); + $this->assertEquals( 1, $match['line_number'] ); + $this->assertStringContainsString( 'Foo', $match['line'] ); + + $match = array_shift( $results ); + $this->assertEquals( 3, $match['line_number'] ); + $this->assertStringContainsString( 'foobar', $match['line'] ); + + $match = array_shift( $results ); + $this->assertEquals( 1, $match['line_number'] ); + $this->assertStringContainsString( 'A trip to the food bar', $match['line'] ); + } } diff --git a/plugins/woocommerce/tests/php/src/Internal/Admin/Logging/FileV2/FileTest.php b/plugins/woocommerce/tests/php/src/Internal/Admin/Logging/FileV2/FileTest.php index 902e6f16320..f6f7105a627 100644 --- a/plugins/woocommerce/tests/php/src/Internal/Admin/Logging/FileV2/FileTest.php +++ b/plugins/woocommerce/tests/php/src/Internal/Admin/Logging/FileV2/FileTest.php @@ -125,7 +125,7 @@ class FileTest extends WC_Unit_Test_Case { /** * @testdox Check that get_stream returns a PHP resource representation of the file. */ - public function test_get_stream() { + public function test_get_and_close_stream() { $filename = Constants::get_constant( 'WC_LOG_DIR' ) . 'test-Source_1-1-2023-10-23-' . wp_hash( 'cheddar' ) . '.log'; $resource = fopen( $filename, 'a' ); fclose( $resource ); @@ -134,6 +134,10 @@ class FileTest extends WC_Unit_Test_Case { $stream = $file->get_stream(); $this->assertTrue( is_resource( $stream ) ); + + $file->close_stream(); + + $this->assertFalse( is_resource( $stream ) ); } /** @@ -141,7 +145,7 @@ class FileTest extends WC_Unit_Test_Case { */ public function test_delete() { $filename = Constants::get_constant( 'WC_LOG_DIR' ) . 'test-Source_1-1-' . wp_hash( 'cheddar' ) . '.5.log'; - $resource = fopen( $filename, 'a' ); // phpcs:ignore WordPress.PHP.NoSilencedErrors + $resource = fopen( $filename, 'a' ); fclose( $resource ); $file = new File( $filename ); From b1ac7300c710ee493ea173c7140661157a28bf90 Mon Sep 17 00:00:00 2001 From: Jason Kytros Date: Wed, 29 Nov 2023 17:45:14 +0200 Subject: [PATCH 41/51] Remove unused ) --- .../client/task-lists/fills/products/test/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/test/index.tsx b/plugins/woocommerce-admin/client/task-lists/fills/products/test/index.tsx index 7345f290bfa..0817aa2ce0f 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/test/index.tsx +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/test/index.tsx @@ -43,7 +43,6 @@ const confirmModalText = describe( 'Products', () => { beforeEach( () => { jest.clearAllMocks(); - ); } ); it( 'should render default products types when onboardingData.profile.productType is null', () => { From 03cac8bf89268580e352a23df84ab3c554eb256b Mon Sep 17 00:00:00 2001 From: louwie17 Date: Wed, 29 Nov 2023 14:00:23 -0400 Subject: [PATCH 42/51] Add rimraf to admin-layout package (#41784) * Add rimraf to admin-layout package * Add changelog --- packages/js/admin-layout/changelog.md | 1 + .../changelog/update-admin-layout-dependency | 4 + packages/js/admin-layout/package.json | 3 +- pnpm-lock.yaml | 1336 ++++++++--------- 4 files changed, 664 insertions(+), 680 deletions(-) create mode 100644 packages/js/admin-layout/changelog/update-admin-layout-dependency diff --git a/packages/js/admin-layout/changelog.md b/packages/js/admin-layout/changelog.md index e46046063e5..c3e6047f515 100644 --- a/packages/js/admin-layout/changelog.md +++ b/packages/js/admin-layout/changelog.md @@ -4,6 +4,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [1.0.0](https://www.npmjs.com/package/@woocommerce/admin-layout/v/1.0.0) - 2023-11-28 +- Patch - Update dependencies. - Minor - Adding LayoutContext component and hook. [#37720] - Minor - Adding support for modifying fill name to WooHeaderItem. [#37255] - Minor - Create @woocommerce/admin-layout package to house header, footer, and similar components and utilities. [#37094] diff --git a/packages/js/admin-layout/changelog/update-admin-layout-dependency b/packages/js/admin-layout/changelog/update-admin-layout-dependency new file mode 100644 index 00000000000..1a1aa8b4acb --- /dev/null +++ b/packages/js/admin-layout/changelog/update-admin-layout-dependency @@ -0,0 +1,4 @@ +Significance: patch +Type: tweak + +Add missing dev dependency - rimraf diff --git a/packages/js/admin-layout/package.json b/packages/js/admin-layout/package.json index 354b57e4536..6474a8cc3a5 100644 --- a/packages/js/admin-layout/package.json +++ b/packages/js/admin-layout/package.json @@ -46,14 +46,15 @@ "@woocommerce/eslint-plugin": "workspace:*", "@woocommerce/internal-style-build": "workspace:*", "@wordpress/browserslist-config": "wp-6.0", + "concurrently": "^7.0.0", "css-loader": "^3.6.0", "eslint": "^8.32.0", "jest": "^27.5.1", "jest-cli": "^27.5.1", - "concurrently": "^7.0.0", "postcss-loader": "^4.3.0", "react": "^17.0.2", "react-dom": "^17.0.2", + "rimraf": "^3.0.2", "sass-loader": "^10.2.1", "ts-jest": "^27.1.3", "typescript": "^5.1.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index edbe1426418..79d3c6fae8a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -117,7 +117,7 @@ importers: version: 1.1.2(webpack@5.76.3) webpack: specifier: ^5.76.2 - version: 5.76.3(webpack-cli@4.9.2) + version: 5.76.3(webpack-cli@3.3.12) packages/js/admin-e2e-tests: dependencies: @@ -234,6 +234,9 @@ importers: react-dom: specifier: ^17.0.2 version: 17.0.2(react@17.0.2) + rimraf: + specifier: ^3.0.2 + version: 3.0.2 sass-loader: specifier: ^10.2.1 version: 10.2.1(sass@1.60.0)(webpack@5.70.0) @@ -4217,7 +4220,7 @@ packages: /@ariakit/react-core@0.2.17(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-y8pHUR2lMcYHUontd33lpnenOBIT8E72IhbMQq/aROQHAevNxLr0JtSkQ+G439N9DfCpKxDaErikss6zqCEGGQ==} peerDependencies: - react: ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^17.0.0 || ^18.0.0 dependencies: '@ariakit/core': 0.2.9 @@ -4230,7 +4233,7 @@ packages: /@ariakit/react@0.2.17(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-fJG0JBoACasyIVb+K9rW1Vyo7gI5Iseu1sP3WvIMnt5VdWjC/63NLpBHdnwQLhSx4z83pBPY6zKfPmEJa9fYug==} peerDependencies: - react: ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^17.0.0 || ^18.0.0 dependencies: '@ariakit/react-core': 0.2.17(react-dom@17.0.2)(react@17.0.2) @@ -4291,7 +4294,7 @@ packages: resolution: {integrity: sha512-tUuWSb5iIzZpHpqCSeXw89+lX6Gpkz/Puh+FWrMyWe4ohgK/WrrAnMqEsA5O/UpEzHNtkuqVmo8haCJKL27mwg==} peerDependencies: '@wordpress/data': ^4 - react: ^16.8 + react: ^17.0.2 dependencies: '@automattic/format-currency': 1.0.0-alpha.0 '@wordpress/api-fetch': 3.23.1(react-native@0.70.0) @@ -4413,8 +4416,8 @@ packages: /@automattic/interpolate-components@1.2.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-YNQtJsrs9KQ3lkBdtLyDheVRijoBA3y/PuHdgJ0eB4AX9JyjkDX7jd79Inh79+01CGNLbMQGrEJby2zvbJr17A==} peerDependencies: - '@types/react': '>=16.14.23' - react: '>=16.2.0' + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -4452,7 +4455,7 @@ packages: '@wordpress/primitives': 3.38.0 '@wordpress/react-i18n': 3.8.0 classnames: 2.3.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) react: 17.0.2 react-dom: 17.0.2(react@17.0.2) react-popper: 2.2.5(@popperjs/core@2.11.4)(react@17.0.2) @@ -4491,7 +4494,7 @@ packages: '@wordpress/primitives': 3.38.0 '@wordpress/react-i18n': 3.8.0 classnames: 2.3.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) react: 17.0.2 react-dom: 17.0.2(react@17.0.2) react-popper: 2.2.5(@popperjs/core@2.11.4)(react@17.0.2) @@ -4514,7 +4517,7 @@ packages: /@automattic/viewport-react@1.0.0(react@17.0.2): resolution: {integrity: sha512-+6+l4jj14GXeoc5Jpic5E5eVvNL88Ezz8cMLmKAw0fpPDsz4gJv7o0hgShu0hjGjKTtBeUkBGfFWMCdRjZaVcA==} peerDependencies: - react: ^16.0.0 + react: ^17.0.2 dependencies: '@automattic/viewport': 1.1.0 '@wordpress/compose': 3.25.3(react@17.0.2) @@ -4576,7 +4579,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.16 commander: 4.1.1 convert-source-map: 1.8.0 fs-readdir-recursive: 1.1.0 @@ -4617,6 +4620,7 @@ packages: /@babel/compat-data@7.16.4: resolution: {integrity: sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==} engines: {node: '>=6.9.0'} + dev: true /@babel/compat-data@7.17.7: resolution: {integrity: sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==} @@ -4640,7 +4644,7 @@ packages: '@babel/traverse': 7.17.3 '@babel/types': 7.17.0 convert-source-map: 1.8.0 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.0 lodash: 4.17.21 @@ -4665,7 +4669,7 @@ packages: '@babel/traverse': 7.19.3 '@babel/types': 7.19.3 convert-source-map: 1.8.0 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.0 semver: 6.3.0 @@ -4687,7 +4691,7 @@ packages: '@babel/traverse': 7.21.3 '@babel/types': 7.22.15 convert-source-map: 1.8.0 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4813,6 +4817,7 @@ packages: '@babel/helper-validator-option': 7.22.15 browserslist: 4.19.3 semver: 6.3.1 + dev: true /@babel/helper-compilation-targets@7.17.7(@babel/core@7.12.9): resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} @@ -4877,6 +4882,7 @@ packages: browserslist: 4.21.4 lru-cache: 5.1.1 semver: 6.3.1 + dev: true /@babel/helper-compilation-targets@7.20.7(@babel/core@7.17.8): resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} @@ -4890,7 +4896,6 @@ packages: browserslist: 4.21.4 lru-cache: 5.1.1 semver: 6.3.1 - dev: true /@babel/helper-compilation-targets@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} @@ -4905,6 +4910,22 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 + /@babel/helper-create-class-features-plugin@7.17.6(@babel/core@7.12.9): + resolution: {integrity: sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.12.9) + '@babel/helper-split-export-declaration': 7.22.6 + dev: true + /@babel/helper-create-class-features-plugin@7.17.6(@babel/core@7.17.8): resolution: {integrity: sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==} engines: {node: '>=6.9.0'} @@ -4951,6 +4972,7 @@ packages: '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-replace-supers': 7.22.9(@babel/core@7.12.9) '@babel/helper-split-export-declaration': 7.22.6 + dev: true /@babel/helper-create-class-features-plugin@7.19.0(@babel/core@7.17.8): resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} @@ -4966,7 +4988,6 @@ packages: '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-replace-supers': 7.22.9(@babel/core@7.17.8) '@babel/helper-split-export-declaration': 7.22.6 - dev: true /@babel/helper-create-class-features-plugin@7.19.0(@babel/core@7.21.3): resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} @@ -4999,6 +5020,7 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 + dev: true /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.17.8): resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} @@ -5016,7 +5038,6 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 - dev: true /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.21.3): resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} @@ -5044,6 +5065,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.2.1 + dev: true /@babel/helper-create-regexp-features-plugin@7.19.0(@babel/core@7.17.8): resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} @@ -5054,7 +5076,6 @@ packages: '@babel/core': 7.17.8 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.2.1 - dev: true /@babel/helper-create-regexp-features-plugin@7.19.0(@babel/core@7.21.3): resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} @@ -5076,7 +5097,7 @@ packages: '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 '@babel/traverse': 7.21.3 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.1 semver: 6.3.1 @@ -5092,12 +5113,13 @@ packages: '@babel/core': 7.12.9 '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.1 semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.17.8): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} @@ -5107,13 +5129,12 @@ packages: '@babel/core': 7.17.8 '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.8) '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.3): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} @@ -5123,7 +5144,7 @@ packages: '@babel/core': 7.21.3 '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.1 semver: 6.3.1 @@ -5164,6 +5185,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.15 + dev: true /@babel/helper-module-imports@7.16.7: resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} @@ -5220,6 +5242,7 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.15 + dev: true /@babel/helper-module-transforms@7.22.15(@babel/core@7.17.8): resolution: {integrity: sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==} @@ -5233,7 +5256,6 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.15 - dev: true /@babel/helper-module-transforms@7.22.15(@babel/core@7.21.3): resolution: {integrity: sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==} @@ -5261,6 +5283,7 @@ packages: /@babel/helper-plugin-utils@7.14.5: resolution: {integrity: sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-plugin-utils@7.18.9: resolution: {integrity: sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==} @@ -5289,6 +5312,7 @@ packages: '@babel/types': 7.22.15 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-remap-async-to-generator@7.16.8: resolution: {integrity: sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==} @@ -5314,6 +5338,7 @@ packages: '@babel/types': 7.22.15 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.17.8): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} @@ -5328,7 +5353,6 @@ packages: '@babel/types': 7.22.15 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} @@ -5354,6 +5378,7 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-member-expression-to-functions': 7.22.15 '@babel/helper-optimise-call-expression': 7.22.5 + dev: true /@babel/helper-replace-supers@7.22.9(@babel/core@7.17.8): resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} @@ -5365,7 +5390,6 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-member-expression-to-functions': 7.22.15 '@babel/helper-optimise-call-expression': 7.22.5 - dev: true /@babel/helper-replace-supers@7.22.9(@babel/core@7.21.3): resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} @@ -5407,6 +5431,7 @@ packages: /@babel/helper-validator-option@7.14.5: resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-option@7.16.7: resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} @@ -5629,6 +5654,7 @@ packages: '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.12.9) transitivePeerDependencies: - supports-color + dev: true /@babel/plugin-proposal-async-generator-functions@7.16.8(@babel/core@7.12.9): resolution: {integrity: sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==} @@ -5686,6 +5712,7 @@ packages: '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.12.9) transitivePeerDependencies: - supports-color + dev: true /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.17.8): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} @@ -5701,7 +5728,6 @@ packages: '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.17.8) transitivePeerDependencies: - supports-color - dev: true /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} @@ -5727,6 +5753,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-proposal-class-properties@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==} @@ -5768,7 +5795,8 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-create-class-features-plugin': 7.19.0(@babel/core@7.12.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} @@ -5778,8 +5806,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-create-class-features-plugin': 7.19.0(@babel/core@7.17.8) - '@babel/helper-plugin-utils': 7.22.5 - dev: true + '@babel/helper-plugin-utils': 7.20.2 /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} @@ -5886,6 +5913,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-dynamic-import@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==} @@ -5955,15 +5983,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3) - /@babel/plugin-proposal-export-default-from@7.16.7(@babel/core@7.12.9): + /@babel/plugin-proposal-export-default-from@7.16.7(@babel/core@7.17.8): resolution: {integrity: sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-default-from': 7.16.7(@babel/core@7.12.9) + '@babel/plugin-syntax-export-default-from': 7.16.7(@babel/core@7.17.8) /@babel/plugin-proposal-export-default-from@7.16.7(@babel/core@7.21.3): resolution: {integrity: sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==} @@ -5984,6 +6012,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-export-namespace-from@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==} @@ -6062,6 +6091,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-json-strings@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==} @@ -6140,6 +6170,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-logical-assignment-operators@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==} @@ -6218,6 +6249,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-nullish-coalescing-operator@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==} @@ -6261,6 +6293,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} @@ -6272,7 +6305,6 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.8) - dev: true /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} @@ -6294,6 +6326,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-numeric-separator@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==} @@ -6387,6 +6420,7 @@ packages: '@babel/helper-plugin-utils': 7.14.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) '@babel/plugin-transform-parameters': 7.16.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-object-rest-spread@7.17.3(@babel/core@7.12.9): resolution: {integrity: sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==} @@ -6443,6 +6477,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.17.8): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} @@ -6457,7 +6492,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.8) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.17.8) - dev: true /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} @@ -6482,6 +6516,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-optional-catch-binding@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==} @@ -6526,6 +6561,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} @@ -6537,7 +6573,6 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.8) - dev: true /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} @@ -6560,6 +6595,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-optional-chaining@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==} @@ -6607,6 +6643,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.9) + dev: true /@babel/plugin-proposal-optional-chaining@7.18.9(@babel/core@7.17.8): resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} @@ -6619,7 +6656,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.8) - dev: true /@babel/plugin-proposal-optional-chaining@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} @@ -6642,6 +6678,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-proposal-private-methods@7.16.11(@babel/core@7.12.9): resolution: {integrity: sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==} @@ -6718,9 +6755,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.12.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-create-class-features-plugin': 7.17.6(@babel/core@7.12.9) + '@babel/helper-plugin-utils': 7.21.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.12.9) dev: true @@ -6744,9 +6781,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-create-class-features-plugin': 7.17.6(@babel/core@7.21.3) + '@babel/helper-plugin-utils': 7.21.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3) dev: true @@ -6800,6 +6837,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-proposal-unicode-property-regex@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==} @@ -6844,6 +6882,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} @@ -6883,7 +6922,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.3): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -6934,7 +6972,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.3): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} @@ -6990,6 +7027,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.17.8): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} @@ -6998,7 +7036,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} @@ -7008,13 +7045,13 @@ packages: '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-export-default-from@7.16.7(@babel/core@7.12.9): + /@babel/plugin-syntax-export-default-from@7.16.7(@babel/core@7.17.8): resolution: {integrity: sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-export-default-from@7.16.7(@babel/core@7.21.3): @@ -7033,6 +7070,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.17.8): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} @@ -7051,15 +7089,6 @@ packages: '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-flow@7.16.7(@babel/core@7.12.9): - resolution: {integrity: sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-flow@7.16.7(@babel/core@7.17.8): resolution: {integrity: sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==} engines: {node: '>=6.9.0'} @@ -7068,7 +7097,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-syntax-flow@7.16.7(@babel/core@7.21.3): resolution: {integrity: sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==} @@ -7198,15 +7226,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.12.9): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.17.8): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} @@ -7265,7 +7284,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} @@ -7315,7 +7333,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} @@ -7340,7 +7357,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} @@ -7365,7 +7381,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} @@ -7451,13 +7466,13 @@ packages: '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.12.9): + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.17.8): resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.21.3): @@ -7477,6 +7492,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-arrow-functions@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==} @@ -7516,6 +7532,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-arrow-functions@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} @@ -7525,7 +7542,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-arrow-functions@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} @@ -7548,6 +7564,7 @@ packages: '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.12.9) transitivePeerDependencies: - supports-color + dev: true /@babel/plugin-transform-async-to-generator@7.16.8(@babel/core@7.12.9): resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==} @@ -7556,9 +7573,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.12.9) + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-remap-async-to-generator': 7.16.8 transitivePeerDependencies: - supports-color dev: true @@ -7584,9 +7601,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-remap-async-to-generator': 7.16.8 transitivePeerDependencies: - supports-color dev: true @@ -7603,6 +7620,7 @@ packages: '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.12.9) transitivePeerDependencies: - supports-color + dev: true /@babel/plugin-transform-async-to-generator@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} @@ -7616,7 +7634,6 @@ packages: '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.17.8) transitivePeerDependencies: - supports-color - dev: true /@babel/plugin-transform-async-to-generator@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} @@ -7639,6 +7656,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-block-scoped-functions@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==} @@ -7678,6 +7696,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} @@ -7687,7 +7706,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} @@ -7706,6 +7724,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-block-scoping@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==} @@ -7745,6 +7764,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.17.8): resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} @@ -7754,7 +7774,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.3): resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} @@ -7779,6 +7798,7 @@ packages: '@babel/helper-replace-supers': 7.22.9(@babel/core@7.12.9) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 + dev: true /@babel/plugin-transform-classes@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==} @@ -7847,6 +7867,7 @@ packages: '@babel/helper-replace-supers': 7.22.9(@babel/core@7.12.9) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 + dev: true /@babel/plugin-transform-classes@7.21.0(@babel/core@7.17.8): resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} @@ -7864,7 +7885,6 @@ packages: '@babel/helper-replace-supers': 7.22.9(@babel/core@7.17.8) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 - dev: true /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.3): resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} @@ -7891,6 +7911,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-computed-properties@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==} @@ -7930,6 +7951,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-computed-properties@7.18.9(@babel/core@7.17.8): resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} @@ -7939,7 +7961,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-computed-properties@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} @@ -7958,6 +7979,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-destructuring@7.17.7(@babel/core@7.12.9): resolution: {integrity: sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==} @@ -7997,6 +8019,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.17.8): resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} @@ -8006,7 +8029,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.3): resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} @@ -8026,6 +8048,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-dotall-regex@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==} @@ -8069,6 +8092,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} @@ -8099,6 +8123,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-duplicate-keys@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==} @@ -8168,6 +8193,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-exponentiation-operator@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==} @@ -8211,6 +8237,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} @@ -8221,7 +8248,6 @@ packages: '@babel/core': 7.17.8 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} @@ -8233,16 +8259,6 @@ packages: '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-flow-strip-types@7.16.7(@babel/core@7.12.9): - resolution: {integrity: sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.16.7(@babel/core@7.12.9) - /@babel/plugin-transform-flow-strip-types@7.16.7(@babel/core@7.17.8): resolution: {integrity: sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==} engines: {node: '>=6.9.0'} @@ -8252,7 +8268,6 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-flow': 7.16.7(@babel/core@7.17.8) - dev: true /@babel/plugin-transform-flow-strip-types@7.16.7(@babel/core@7.21.3): resolution: {integrity: sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==} @@ -8272,6 +8287,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-for-of@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==} @@ -8311,6 +8327,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-for-of@7.18.8(@babel/core@7.17.8): resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} @@ -8320,7 +8337,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-for-of@7.18.8(@babel/core@7.21.3): resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} @@ -8340,6 +8356,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-function-name@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==} @@ -8387,6 +8404,7 @@ packages: '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.12.9) '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.17.8): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} @@ -8398,7 +8416,6 @@ packages: '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.8) '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} @@ -8419,6 +8436,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-literals@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==} @@ -8458,6 +8476,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-literals@7.18.9(@babel/core@7.17.8): resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} @@ -8467,7 +8486,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} @@ -8486,6 +8504,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-member-expression-literals@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==} @@ -8525,6 +8544,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} @@ -8534,7 +8554,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} @@ -8555,6 +8574,7 @@ packages: '@babel/helper-module-transforms': 7.22.15(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 babel-plugin-dynamic-import-node: 2.3.3 + dev: true /@babel/plugin-transform-modules-amd@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==} @@ -8635,6 +8655,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 babel-plugin-dynamic-import-node: 2.3.3 + dev: true /@babel/plugin-transform-modules-commonjs@7.17.7(@babel/core@7.12.9): resolution: {integrity: sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==} @@ -8686,17 +8707,6 @@ packages: '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.12.9): - resolution: {integrity: sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-module-transforms': 7.22.15(@babel/core@7.12.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.17.8): resolution: {integrity: sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==} engines: {node: '>=6.9.0'} @@ -8707,7 +8717,6 @@ packages: '@babel/helper-module-transforms': 7.22.15(@babel/core@7.17.8) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 - dev: true /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.21.3): resolution: {integrity: sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==} @@ -8732,6 +8741,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.15 babel-plugin-dynamic-import-node: 2.3.3 + dev: true /@babel/plugin-transform-modules-systemjs@7.17.8(@babel/core@7.12.9): resolution: {integrity: sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==} @@ -8822,6 +8832,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-module-transforms': 7.22.15(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-modules-umd@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==} @@ -8896,6 +8907,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.12.9) + dev: true /@babel/plugin-transform-named-capturing-groups-regex@7.16.8(@babel/core@7.12.9): resolution: {integrity: sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==} @@ -8936,6 +8948,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-named-capturing-groups-regex@7.19.1(@babel/core@7.17.8): resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} @@ -8946,7 +8959,6 @@ packages: '@babel/core': 7.17.8 '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.17.8) '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-named-capturing-groups-regex@7.19.1(@babel/core@7.21.3): resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} @@ -8966,6 +8978,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-new-target@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==} @@ -9035,6 +9048,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.9(@babel/core@7.12.9) + dev: true /@babel/plugin-transform-object-super@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==} @@ -9078,6 +9092,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.9(@babel/core@7.12.9) + dev: true /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} @@ -9088,7 +9103,6 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.9(@babel/core@7.17.8) - dev: true /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} @@ -9108,6 +9122,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-parameters@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} @@ -9147,6 +9162,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.17.8): resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} @@ -9156,7 +9172,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.3): resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} @@ -9175,6 +9190,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-property-literals@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==} @@ -9214,6 +9230,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} @@ -9223,7 +9240,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} @@ -9244,15 +9260,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.12.9): - resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} engines: {node: '>=6.9.0'} @@ -9261,7 +9268,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} @@ -9292,13 +9298,13 @@ packages: '@babel/plugin-transform-react-jsx': 7.22.3(@babel/core@7.21.3) dev: true - /@babel/plugin-transform-react-jsx-self@7.18.6(@babel/core@7.12.9): + /@babel/plugin-transform-react-jsx-self@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-react-jsx-self@7.18.6(@babel/core@7.21.3): @@ -9310,13 +9316,13 @@ packages: '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-react-jsx-source@7.18.6(@babel/core@7.12.9): + /@babel/plugin-transform-react-jsx-source@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-react-jsx-source@7.18.6(@babel/core@7.21.3): @@ -9383,19 +9389,6 @@ packages: '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.21.3) '@babel/types': 7.22.15 - /@babel/plugin-transform-react-jsx@7.22.3(@babel/core@7.12.9): - resolution: {integrity: sha512-JEulRWG2f04a7L8VWaOngWiK6p+JOSpB+DAtwfJgOaej1qdbNxqtK7MwTBHjUA10NeFcszlFNqCdbRcirzh2uQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.12.9) - '@babel/types': 7.22.15 - /@babel/plugin-transform-react-jsx@7.22.3(@babel/core@7.17.8): resolution: {integrity: sha512-JEulRWG2f04a7L8VWaOngWiK6p+JOSpB+DAtwfJgOaej1qdbNxqtK7MwTBHjUA10NeFcszlFNqCdbRcirzh2uQ==} engines: {node: '>=6.9.0'} @@ -9408,7 +9401,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.17.8) '@babel/types': 7.22.15 - dev: true /@babel/plugin-transform-react-jsx@7.22.3(@babel/core@7.21.3): resolution: {integrity: sha512-JEulRWG2f04a7L8VWaOngWiK6p+JOSpB+DAtwfJgOaej1qdbNxqtK7MwTBHjUA10NeFcszlFNqCdbRcirzh2uQ==} @@ -9453,6 +9445,7 @@ packages: dependencies: '@babel/core': 7.12.9 regenerator-transform: 0.14.5 + dev: true /@babel/plugin-transform-regenerator@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==} @@ -9524,6 +9517,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-reserved-words@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==} @@ -9608,28 +9602,28 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3) + '@babel/helper-module-imports': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + babel-plugin-polyfill-corejs2: 0.3.0(@babel/core@7.21.3) babel-plugin-polyfill-corejs3: 0.4.0(@babel/core@7.21.3) babel-plugin-polyfill-regenerator: 0.3.0(@babel/core@7.21.3) - semver: 6.3.1 + semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-runtime@7.19.1(@babel/core@7.12.9): + /@babel/plugin-transform-runtime@7.19.1(@babel/core@7.17.8): resolution: {integrity: sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.17.8 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.12.9) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.12.9) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.12.9) + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.17.8) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.17.8) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.17.8) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -9658,6 +9652,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-shorthand-properties@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==} @@ -9697,6 +9692,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} @@ -9706,7 +9702,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} @@ -9726,6 +9721,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true /@babel/plugin-transform-spread@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==} @@ -9769,6 +9765,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true /@babel/plugin-transform-spread@7.19.0(@babel/core@7.17.8): resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} @@ -9779,7 +9776,6 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true /@babel/plugin-transform-spread@7.19.0(@babel/core@7.21.3): resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} @@ -9799,6 +9795,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-sticky-regex@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==} @@ -9838,6 +9835,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} @@ -9847,7 +9845,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} @@ -9866,6 +9863,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-template-literals@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==} @@ -9905,6 +9903,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.17.8): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} @@ -9914,7 +9913,6 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} @@ -9933,6 +9931,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-typeof-symbol@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==} @@ -10027,17 +10026,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.21.3) - /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.12.9): + /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.17.8): resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.17.8 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.12.9) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.17.8) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.12.9) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.17.8) /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.21.3): resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} @@ -10059,6 +10058,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-unicode-escapes@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==} @@ -10128,6 +10128,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-unicode-regex@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==} @@ -10171,6 +10172,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.17.8): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} @@ -10181,7 +10183,6 @@ packages: '@babel/core': 7.17.8 '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.17.8) '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} @@ -10275,6 +10276,7 @@ packages: semver: 5.7.1 transitivePeerDependencies: - supports-color + dev: true /@babel/preset-env@7.16.11(@babel/core@7.12.9): resolution: {integrity: sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==} @@ -10822,6 +10824,7 @@ packages: '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.12.9) '@babel/types': 7.22.15 esutils: 2.0.3 + dev: true /@babel/preset-modules@0.1.5(@babel/core@7.17.8): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} @@ -11034,7 +11037,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.15 '@babel/types': 7.22.15 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -11051,7 +11054,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.15 '@babel/types': 7.22.15 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -11068,7 +11071,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.15 '@babel/types': 7.22.15 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -11079,6 +11082,7 @@ packages: dependencies: '@babel/helper-validator-identifier': 7.22.15 to-fast-properties: 2.0.0 + dev: true /@babel/types@7.17.0: resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} @@ -11277,7 +11281,7 @@ packages: /@emotion/core@10.3.1(react@17.0.2): resolution: {integrity: sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==} peerDependencies: - react: '>=16.3.0' + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@emotion/cache': 10.0.29 @@ -11359,7 +11363,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0 '@types/react': '*' - react: '>=16.8.0' + react: ^17.0.2 peerDependenciesMeta: '@babel/core': optional: true @@ -11383,7 +11387,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0 '@types/react': '*' - react: '>=16.8.0' + react: ^17.0.2 peerDependenciesMeta: '@babel/core': optional: true @@ -11445,7 +11449,7 @@ packages: '@babel/core': ^7.0.0 '@emotion/react': ^11.0.0-rc.0 '@types/react': '*' - react: '>=16.8.0' + react: ^17.0.2 peerDependenciesMeta: '@babel/core': optional: true @@ -11468,7 +11472,7 @@ packages: '@babel/core': ^7.0.0 '@emotion/react': ^11.0.0-rc.0 '@types/react': '*' - react: '>=16.8.0' + react: ^17.0.2 peerDependenciesMeta: '@babel/core': optional: true @@ -11499,7 +11503,7 @@ packages: /@emotion/use-insertion-effect-with-fallbacks@1.0.0(react@17.0.2): resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==} peerDependencies: - react: '>=16.8.0' + react: ^17.0.2 dependencies: react: 17.0.2 @@ -11542,7 +11546,7 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) espree: 7.3.1 globals: 13.19.0 ignore: 4.0.6 @@ -11559,7 +11563,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) espree: 9.4.1 globals: 13.19.0 ignore: 5.2.0 @@ -11612,7 +11616,7 @@ packages: /@floating-ui/react-dom@0.6.3(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-hC+pS5D6AgS2wWjbmSQ6UR6Kpy+drvWGJIri6e1EDGADTPsCaa4KzCgmCczHrQeInx9tqs81EyDmbKJYY2swKg==} peerDependencies: - react: '>=16.8.0' + react: ^17.0.2 react-dom: '>=16.8.0' dependencies: '@floating-ui/dom': 0.4.5 @@ -11626,7 +11630,7 @@ packages: /@floating-ui/react-dom@0.7.2(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} peerDependencies: - react: '>=16.8.0' + react: ^17.0.2 react-dom: '>=16.8.0' dependencies: '@floating-ui/dom': 0.5.4 @@ -11640,7 +11644,7 @@ packages: /@floating-ui/react-dom@1.0.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-uiOalFKPG937UCLm42RxjESTWUVpbbatvlphQAU6bsv+ence6IoVG8JOUZcy8eW81NkU+Idiwvx10WFLmR4MIg==} peerDependencies: - react: '>=16.8.0' + react: ^17.0.2 react-dom: '>=16.8.0' dependencies: '@floating-ui/dom': 1.5.1 @@ -11650,7 +11654,7 @@ packages: /@floating-ui/react-dom@2.0.1(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-rZtAmSht4Lry6gdhAJDrCp/6rKN7++JnL1/Anbr/DdeyYXQPxvg/ivrbYvJulbRf4vL8b212suwMM2lxbv+RQA==} peerDependencies: - react: '>=16.8.0' + react: ^17.0.2 react-dom: '>=16.8.0' dependencies: '@floating-ui/dom': 1.5.1 @@ -11710,7 +11714,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -11720,7 +11724,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -12768,7 +12772,6 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: true /@jridgewell/trace-mapping@0.3.19: resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} @@ -12789,7 +12792,7 @@ packages: /@kwsites/file-exists@1.1.1: resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -12828,7 +12831,7 @@ packages: /@mdx-js/react@1.6.22(react@17.0.2): resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==} peerDependencies: - react: ^16.13.1 || ^17.0.0 + react: ^17.0.2 dependencies: react: 17.0.2 dev: true @@ -13148,7 +13151,7 @@ packages: '@oclif/color': 1.0.1 '@oclif/core': 1.16.1 chalk: 4.1.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) fs-extra: 9.1.0 http-call: 5.3.0 load-json-file: 5.3.0 @@ -13166,7 +13169,7 @@ packages: dependencies: '@oclif/core': 1.16.1 chalk: 4.1.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) fs-extra: 9.1.0 http-call: 5.3.0 lodash: 4.17.21 @@ -13703,7 +13706,7 @@ packages: react-refresh: 0.11.0 schema-utils: 3.1.1 source-map: 0.7.3 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.14.0)(webpack-dev-server@4.12.0)(webpack@5.70.0): @@ -13787,7 +13790,7 @@ packages: /@radix-ui/react-arrow@1.0.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -13799,9 +13802,9 @@ packages: /@radix-ui/react-arrow@1.0.3(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -13819,7 +13822,7 @@ packages: /@radix-ui/react-collection@1.0.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -13834,9 +13837,9 @@ packages: /@radix-ui/react-collection@1.0.3(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -13857,7 +13860,7 @@ packages: /@radix-ui/react-compose-refs@1.0.0(react@17.0.2): resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 react: 17.0.2 @@ -13866,8 +13869,8 @@ packages: /@radix-ui/react-compose-refs@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -13880,7 +13883,7 @@ packages: /@radix-ui/react-context@1.0.0(react@17.0.2): resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 react: 17.0.2 @@ -13889,8 +13892,8 @@ packages: /@radix-ui/react-context@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -13903,7 +13906,7 @@ packages: /@radix-ui/react-dialog@1.0.0(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -13930,7 +13933,7 @@ packages: /@radix-ui/react-direction@1.0.0(react@17.0.2): resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 react: 17.0.2 @@ -13939,8 +13942,8 @@ packages: /@radix-ui/react-direction@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -13953,7 +13956,7 @@ packages: /@radix-ui/react-dismissable-layer@1.0.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -13969,7 +13972,7 @@ packages: /@radix-ui/react-dismissable-layer@1.0.3(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -13985,9 +13988,9 @@ packages: /@radix-ui/react-dismissable-layer@1.0.4(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14009,7 +14012,7 @@ packages: /@radix-ui/react-dropdown-menu@2.0.4(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14029,7 +14032,7 @@ packages: /@radix-ui/react-focus-guards@1.0.0(react@17.0.2): resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 react: 17.0.2 @@ -14038,8 +14041,8 @@ packages: /@radix-ui/react-focus-guards@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -14052,7 +14055,7 @@ packages: /@radix-ui/react-focus-scope@1.0.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14066,7 +14069,7 @@ packages: /@radix-ui/react-focus-scope@1.0.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14080,9 +14083,9 @@ packages: /@radix-ui/react-focus-scope@1.0.3(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14102,7 +14105,7 @@ packages: /@radix-ui/react-id@1.0.0(react@17.0.2): resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) @@ -14112,8 +14115,8 @@ packages: /@radix-ui/react-id@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -14127,7 +14130,7 @@ packages: /@radix-ui/react-menu@2.0.4(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14158,7 +14161,7 @@ packages: /@radix-ui/react-popper@1.1.1(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14181,9 +14184,9 @@ packages: /@radix-ui/react-popper@1.1.2(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14210,7 +14213,7 @@ packages: /@radix-ui/react-portal@1.0.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14222,7 +14225,7 @@ packages: /@radix-ui/react-portal@1.0.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14234,9 +14237,9 @@ packages: /@radix-ui/react-portal@1.0.3(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14254,7 +14257,7 @@ packages: /@radix-ui/react-presence@1.0.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14267,7 +14270,7 @@ packages: /@radix-ui/react-primitive@1.0.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14279,7 +14282,7 @@ packages: /@radix-ui/react-primitive@1.0.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14291,9 +14294,9 @@ packages: /@radix-ui/react-primitive@1.0.3(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14311,7 +14314,7 @@ packages: /@radix-ui/react-roving-focus@1.0.3(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 @@ -14331,9 +14334,9 @@ packages: /@radix-ui/react-roving-focus@1.0.4(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14359,9 +14362,9 @@ packages: /@radix-ui/react-select@1.2.2(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14399,9 +14402,9 @@ packages: /@radix-ui/react-separator@1.0.3(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14419,7 +14422,7 @@ packages: /@radix-ui/react-slot@1.0.0(react@17.0.2): resolution: {integrity: sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) @@ -14429,7 +14432,7 @@ packages: /@radix-ui/react-slot@1.0.1(react@17.0.2): resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) @@ -14439,8 +14442,8 @@ packages: /@radix-ui/react-slot@1.0.2(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -14454,9 +14457,9 @@ packages: /@radix-ui/react-toggle-group@1.0.4(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14480,9 +14483,9 @@ packages: /@radix-ui/react-toggle@1.0.3(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14502,9 +14505,9 @@ packages: /@radix-ui/react-toolbar@1.0.4(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14528,7 +14531,7 @@ packages: /@radix-ui/react-use-callback-ref@1.0.0(react@17.0.2): resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 react: 17.0.2 @@ -14537,8 +14540,8 @@ packages: /@radix-ui/react-use-callback-ref@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -14551,7 +14554,7 @@ packages: /@radix-ui/react-use-controllable-state@1.0.0(react@17.0.2): resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) @@ -14561,8 +14564,8 @@ packages: /@radix-ui/react-use-controllable-state@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -14576,7 +14579,7 @@ packages: /@radix-ui/react-use-escape-keydown@1.0.0(react@17.0.2): resolution: {integrity: sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) @@ -14586,7 +14589,7 @@ packages: /@radix-ui/react-use-escape-keydown@1.0.2(react@17.0.2): resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) @@ -14596,8 +14599,8 @@ packages: /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -14611,7 +14614,7 @@ packages: /@radix-ui/react-use-layout-effect@1.0.0(react@17.0.2): resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 react: 17.0.2 @@ -14620,8 +14623,8 @@ packages: /@radix-ui/react-use-layout-effect@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -14634,8 +14637,8 @@ packages: /@radix-ui/react-use-previous@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -14648,7 +14651,7 @@ packages: /@radix-ui/react-use-rect@1.0.0(react@17.0.2): resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@radix-ui/rect': 1.0.0 @@ -14658,8 +14661,8 @@ packages: /@radix-ui/react-use-rect@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -14673,7 +14676,7 @@ packages: /@radix-ui/react-use-size@1.0.0(react@17.0.2): resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) @@ -14683,8 +14686,8 @@ packages: /@radix-ui/react-use-size@1.0.1(@types/react@17.0.50)(react@17.0.2): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -14698,9 +14701,9 @@ packages: /@radix-ui/react-visually-hidden@1.0.3(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: - '@types/react': '*' + '@types/react': ^17.0.2 '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^17.0.2 react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -14812,7 +14815,7 @@ packages: transitivePeerDependencies: - encoding - /@react-native-community/cli-plugin-metro@9.1.1(@babel/core@7.12.9): + /@react-native-community/cli-plugin-metro@9.1.1(@babel/core@7.17.8): resolution: {integrity: sha512-8CBwEZrbYIeQw69Exg/oW20pV9C6mbYlDz0pxZJ0AYmC20Q+wFFs6sUh5zm28ZUh1L0LxNGmhle/YvMPqA+fMQ==} dependencies: '@react-native-community/cli-server-api': 9.1.0 @@ -14821,7 +14824,7 @@ packages: metro: 0.72.2 metro-config: 0.72.2 metro-core: 0.72.2 - metro-react-native-babel-transformer: 0.72.1(@babel/core@7.12.9) + metro-react-native-babel-transformer: 0.72.1(@babel/core@7.17.8) metro-resolver: 0.72.2 metro-runtime: 0.72.2 readline: 1.3.0 @@ -14870,7 +14873,7 @@ packages: dependencies: joi: 17.6.0 - /@react-native-community/cli@9.1.1(@babel/core@7.12.9): + /@react-native-community/cli@9.1.1(@babel/core@7.17.8): resolution: {integrity: sha512-LjXcYahjFzM7TlsGzQLH9bCx3yvBsHEj/5Ytdnk0stdDET329JdXWEh6JiSRjVWPVAoDAV5pRAFmEOEGDNIiAw==} engines: {node: '>=14'} hasBin: true @@ -14880,7 +14883,7 @@ packages: '@react-native-community/cli-debugger-ui': 9.0.0 '@react-native-community/cli-doctor': 9.1.1 '@react-native-community/cli-hermes': 9.1.0 - '@react-native-community/cli-plugin-metro': 9.1.1(@babel/core@7.12.9) + '@react-native-community/cli-plugin-metro': 9.1.1(@babel/core@7.17.8) '@react-native-community/cli-server-api': 9.1.0 '@react-native-community/cli-tools': 9.1.0 '@react-native-community/cli-types': 9.1.0 @@ -14911,7 +14914,7 @@ packages: /@react-spring/animated@9.4.4(react@17.0.2): resolution: {integrity: sha512-e9xnuBaUTD+NolKikUmrGWjX8AVCPyj1GcEgjgq9E+0sXKv46UY7cm2EmB6mUDTxWIDVKebARY++xT4nGDraBQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 dependencies: '@react-spring/shared': 9.4.4(react@17.0.2) '@react-spring/types': 9.4.4 @@ -14921,7 +14924,7 @@ packages: /@react-spring/animated@9.5.5(react@17.0.2): resolution: {integrity: sha512-glzViz7syQ3CE6BQOwAyr75cgh0qsihm5lkaf24I0DfU63cMm/3+br299UEYkuaHNmfDfM414uktiPlZCNJbQA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 dependencies: '@react-spring/shared': 9.5.5(react@17.0.2) '@react-spring/types': 9.5.5 @@ -14930,7 +14933,7 @@ packages: /@react-spring/core@9.4.4(react@17.0.2): resolution: {integrity: sha512-llgb0ljFyjMB0JhWsaFHOi9XFT8n1jBMVs1IFY2ipIBerWIRWrgUmIpakLPHTa4c4jwqTaDSwX90s2a0iN7dxQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 dependencies: '@react-spring/animated': 9.4.4(react@17.0.2) '@react-spring/rafz': 9.4.4 @@ -14942,7 +14945,7 @@ packages: /@react-spring/core@9.5.5(react@17.0.2): resolution: {integrity: sha512-shaJYb3iX18Au6gkk8ahaF0qx0LpS0Yd+ajb4asBaAQf6WPGuEdJsbsNSgei1/O13JyEATsJl20lkjeslJPMYA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 dependencies: '@react-spring/animated': 9.5.5(react@17.0.2) '@react-spring/rafz': 9.5.5 @@ -14960,7 +14963,7 @@ packages: /@react-spring/shared@9.4.4(react@17.0.2): resolution: {integrity: sha512-ySVgScDZlhm/+Iy2smY9i/DDrShArY0j6zjTS/Re1lasKnhq8qigoGiAxe8xMPJNlCaj3uczCqHy3TY9bKRtfQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 dependencies: '@react-spring/rafz': 9.4.4 '@react-spring/types': 9.4.4 @@ -14970,7 +14973,7 @@ packages: /@react-spring/shared@9.5.5(react@17.0.2): resolution: {integrity: sha512-YwW70Pa/YXPOwTutExHZmMQSHcNC90kJOnNR4G4mCDNV99hE98jWkIPDOsgqbYx3amIglcFPiYKMaQuGdr8dyQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 dependencies: '@react-spring/rafz': 9.5.5 '@react-spring/types': 9.5.5 @@ -14986,7 +14989,7 @@ packages: /@react-spring/web@9.4.4(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-iJmOLdhcuizriUlu/xqBc5y8KaFts+UI+iC+GxyTwBtzxA9czKiSAZW2ESuhG8stafa3jncwjfTQQp84KN36cw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 dependencies: '@react-spring/animated': 9.4.4(react@17.0.2) @@ -15000,7 +15003,7 @@ packages: /@react-spring/web@9.5.5(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-+moT8aDX/ho/XAhU+HRY9m0LVV9y9CK6NjSRaI+30Re150pB3iEip6QfnF4qnhSCQ5drpMF0XRXHgOTY/xbtFw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@react-spring/animated': 9.5.5(react@17.0.2) @@ -15148,7 +15151,7 @@ packages: /@storybook/addon-a11y@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-ZjYxGpuN7/euPscmgQys6QJ+ASVxrFHh28HPd8SqH+j1UmTiGnwPFYmUTm8sY8fMwormdy/H/phQ8FX6xNZ31Q==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: @@ -15179,7 +15182,7 @@ packages: /@storybook/addon-actions@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-prz8for4B0fSaoJbd4Qbif4K5GeVJg1pmgR93Z9R59vq42qIMLzFkLSB0n2oM+WiLNRPwiw5F+L9GANo/r7dBA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: @@ -15222,7 +15225,7 @@ packages: /@storybook/addon-controls@6.5.17-alpha.0(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.1.6)(webpack-cli@3.3.12): resolution: {integrity: sha512-HUlXBKjaAN/01+vF9Nr9tszHL06T+CCGHSo50yshCzc4Jt2ezZikyMrRJCWAVRFLx4C/dkY6qk57IiJbFLbBww==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: @@ -15257,7 +15260,7 @@ packages: resolution: {integrity: sha512-WpWNIAIW/NG3/OCwCH8GvowGDBvExsZw2gcyonMx1GH4TxdWYye7BwpIEpSEIqGtchzu43bk15kK5ViYOXF9RQ==} peerDependencies: '@storybook/mdx2-csf': ^0.0.3 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: '@storybook/mdx2-csf': @@ -15312,7 +15315,7 @@ packages: resolution: {integrity: sha512-WpWNIAIW/NG3/OCwCH8GvowGDBvExsZw2gcyonMx1GH4TxdWYye7BwpIEpSEIqGtchzu43bk15kK5ViYOXF9RQ==} peerDependencies: '@storybook/mdx2-csf': ^0.0.3 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: '@storybook/mdx2-csf': @@ -15372,7 +15375,7 @@ packages: '@storybook/components': ^6.4.0 '@storybook/core-events': ^6.4.0 '@storybook/theming': ^6.4.0 - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 peerDependenciesMeta: react: @@ -15408,7 +15411,7 @@ packages: '@storybook/components': ^7.0.0 '@storybook/core-events': ^7.0.0 '@storybook/theming': ^7.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: @@ -15442,7 +15445,7 @@ packages: /@storybook/addon-links@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-PHJughP/Tur0QpRmHdmvYSSvUosBGiDdN2i1Xa5zxRLIrlO2vmiagwj0NMb1dfR74SpJbtMZbQM3xVhlDo3SlA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: @@ -15469,7 +15472,7 @@ packages: /@storybook/addon-storysource@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-F82EUe5mM1tuB4wSEZ+3EJRlRji8Zip2vmd//4yPIlil1QZ7bXMnen9ECHEAEMHRfEC464Fyt6vgzNqXN99v3A==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: @@ -15497,7 +15500,7 @@ packages: /@storybook/addon-viewport@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-oadVlhI0rKI2g4IBVHXvQs0GDn71HLOmrxgrAQ1STQ63uzUaPjoozIko+xv09mYWWZMVsVRyek3+QqUGb036mg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: @@ -15523,7 +15526,7 @@ packages: /@storybook/addons@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-iv2EF2XBzZwTp5xo1kBQeW1mi+dvLLDYIVBay4m9FDWQGAPj4rzPrAavuGrkc+XMvXkbeWpJ1kadPoC/W6YtHw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/api': 6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2) @@ -15544,7 +15547,7 @@ packages: /@storybook/addons@7.3.1(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-NebVJI/E2Lw7XP0deazSpN9B5HUtgVgIo2wbdyzJsOzKYAHO7IY1gkgvRyJ84Xn9iVoszEOPIw/P/t0WUqX6dg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/manager-api': 7.3.1(react-dom@16.14.0)(react@17.0.2) @@ -15557,7 +15560,7 @@ packages: /@storybook/api@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-sj5XQXyTTxKDSqNVBlOO1h2+v8NO4EB7/7kBLOD8jpU4r4UUCLrf6G9b54j7R9/dIyi2XvrKVlp95q3yRE3zmg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/channels': 6.5.17-alpha.0 @@ -15584,7 +15587,7 @@ packages: /@storybook/api@7.3.1(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-QYXX9NWV+Ud1nWVX3Tfjkmxb1Vi1bRxmSXlfIo3HYqhPm4rOwDlpN6nso21Kz3QyON4Hm9XqgQA5qUIZU19bVg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: @@ -15601,7 +15604,7 @@ packages: /@storybook/builder-webpack4@6.5.17-alpha.0(acorn@7.4.1)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.1.6)(webpack-cli@3.3.12): resolution: {integrity: sha512-WMZ2obdoAo0TIxQIknR6NzQhCsthom9mfy/eExUqPSksVF/ifgCNeyhOaZt3hYOv+DAFTyK4uZYVk7kyG90rMw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' peerDependenciesMeta: @@ -15671,7 +15674,7 @@ packages: /@storybook/builder-webpack5@6.5.17-alpha.0(acorn@8.8.1)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.1.6): resolution: {integrity: sha512-j5DxqOSd7MAzi1vTTMEt7WEmAXvGGH4RGliprOCyjL0Yn4+9g0rydPG+dHut0gVoo5bF7aktyODquv6seAJGYQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' peerDependenciesMeta: @@ -15715,7 +15718,7 @@ packages: ts-dedent: 2.2.0 typescript: 5.1.6 util-deprecate: 1.0.2 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) webpack-dev-middleware: 4.3.0(webpack@5.76.3) webpack-hot-middleware: 2.25.1 webpack-virtual-modules: 0.4.3 @@ -15775,7 +15778,7 @@ packages: /@storybook/client-api@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-YLnKb3ieDkt1Qq0GiPoYyH4+Laa0DhnvsRBqDRhqS0y3orAt4xLpbucCIJzZFxs0jBXva0MNh1j6NpGDn6a0gA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/addons': 6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2) @@ -15818,7 +15821,7 @@ packages: /@storybook/components@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-RTeRq0bPdphq3XO3zTCyLKX/AI4IJ+xEt79k3eGnY7m56gAlwEcNAq6oUw1UuXZYQos78/G+tjS+MxaDMB/y4w==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 6.5.17-alpha.0 @@ -15836,7 +15839,7 @@ packages: /@storybook/components@7.3.1(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-8dk3WutobHvjxweVzA9Vqrp564vWOTQaV38JSi84ME8wzOdl20Xne9LoeMnqPHXFhnVZdm/Gkosfv4tqkDy4aw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@radix-ui/react-select': 1.2.2(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2) @@ -15860,7 +15863,7 @@ packages: /@storybook/core-client@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2)(typescript@5.1.6)(webpack@4.46.0): resolution: {integrity: sha512-j4UqRv16EwavjFUbFnB1CTdkJf70/yzAZNs78OZuTeMHAbTD8AuKpVZ/MBniymll11AIYV0ue7Hr1cwxYuTWDA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' webpack: '*' @@ -15897,7 +15900,7 @@ packages: /@storybook/core-client@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2)(typescript@5.1.6)(webpack@5.76.3): resolution: {integrity: sha512-j4UqRv16EwavjFUbFnB1CTdkJf70/yzAZNs78OZuTeMHAbTD8AuKpVZ/MBniymll11AIYV0ue7Hr1cwxYuTWDA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' webpack: '*' @@ -15928,13 +15931,13 @@ packages: typescript: 5.1.6 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /@storybook/core-common@6.5.17-alpha.0(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.1.6)(webpack-cli@3.3.12): resolution: {integrity: sha512-fXhM3kwvs8VVg1SsxE6uhfsnA5lZRX6scFS5m+O9I3Q4fDhe6/hf58sBKydxz+82rm4D1Z1NDAryeg1tEEaN2Q==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' peerDependenciesMeta: @@ -16017,7 +16020,7 @@ packages: peerDependencies: '@storybook/builder-webpack5': '*' '@storybook/manager-webpack5': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' peerDependenciesMeta: @@ -16097,7 +16100,7 @@ packages: peerDependencies: '@storybook/builder-webpack5': '*' '@storybook/manager-webpack5': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' peerDependenciesMeta: @@ -16175,7 +16178,7 @@ packages: peerDependencies: '@storybook/builder-webpack5': '*' '@storybook/manager-webpack5': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' webpack: '*' @@ -16194,7 +16197,7 @@ packages: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) typescript: 5.1.6 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) transitivePeerDependencies: - '@storybook/mdx2-csf' - acorn @@ -16214,7 +16217,7 @@ packages: peerDependencies: '@storybook/builder-webpack5': '*' '@storybook/manager-webpack5': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' webpack: '*' @@ -16308,7 +16311,7 @@ packages: resolution: {integrity: sha512-co5gDCYPojRAc5lRMnWxbjrR1V37/rTmAo9Vok4a1hDpHZIwkGTWesdzvYivSQXYFxZTpxdM1b5K3W87brnahw==} engines: {node: '>=14.0.0'} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: react: 17.0.2 @@ -16318,7 +16321,7 @@ packages: /@storybook/manager-api@7.3.1(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-jFH0EfWasdwHW8X5DUzTbH5mpdCZBHU7lIEUj6lVMBcBxbTniqBiG7mkwbW9VLocqEbBZimLCb/2RtTpK1Ue3Q==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/channels': 7.3.1 @@ -16343,7 +16346,7 @@ packages: /@storybook/manager-webpack4@6.5.17-alpha.0(acorn@7.4.1)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.1.6)(webpack-cli@3.3.12): resolution: {integrity: sha512-1sOZEFe073hVuZnNmvYj1pSUL2anLYSm7PuPewxBzVtvORk0vy+Mk0ZO/ToqV1KWYGZAHiFrfniQZXsamAfuMg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' peerDependenciesMeta: @@ -16402,7 +16405,7 @@ packages: /@storybook/manager-webpack5@6.5.17-alpha.0(acorn@8.8.1)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.1.6): resolution: {integrity: sha512-Z/Ct16aYWUusg+744MkxWs4eQveIivSMqDfROvfiGEsVnC/QuzLIcLPW1evozCoBAparwAoIUwbkeRkMDx8bJQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' peerDependenciesMeta: @@ -16441,7 +16444,7 @@ packages: ts-dedent: 2.2.0 typescript: 5.1.6 util-deprecate: 1.0.2 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) webpack-dev-middleware: 4.3.0(webpack@5.76.3) webpack-virtual-modules: 0.4.3 transitivePeerDependencies: @@ -16533,7 +16536,7 @@ packages: /@storybook/preview-web@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-aPGBojLY683+JxZmYNATT2eQ7eCxLDU61AN640MrsCN8Vsmi1fEvlh1lAcXK24rdDeQtC+ROjiSa/fl62wjT7A==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/addons': 6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2) @@ -16562,7 +16565,7 @@ packages: typescript: '>= 4.x' webpack: '>= 4' dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.0.4 @@ -16570,7 +16573,7 @@ packages: react-docgen-typescript: 2.2.2(typescript@5.1.6) tslib: 2.5.0 typescript: 5.1.6 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) transitivePeerDependencies: - supports-color dev: true @@ -16585,7 +16588,7 @@ packages: '@storybook/builder-webpack5': '*' '@storybook/manager-webpack4': '*' '@storybook/manager-webpack5': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 require-from-string: ^2.0.2 typescript: '*' @@ -16675,7 +16678,7 @@ packages: '@storybook/builder-webpack5': '*' '@storybook/manager-webpack4': '*' '@storybook/manager-webpack5': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 require-from-string: ^2.0.2 typescript: '*' @@ -16734,7 +16737,7 @@ packages: ts-dedent: 2.2.0 typescript: 5.1.6 util-deprecate: 1.0.2 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) transitivePeerDependencies: - '@storybook/mdx2-csf' - '@swc/core' @@ -16760,7 +16763,7 @@ packages: /@storybook/router@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-ogByZddCvA7VrDbD+0OA9cx5Rf6tAihffI/hIu1YjhysdBYzXz/C7cZDo1XduzasFb7EEDbHFC0pquDAdJz+Qw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 6.5.17-alpha.0 @@ -16775,7 +16778,7 @@ packages: /@storybook/router@7.3.1(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-KY+Mo0oF2xcRUDCXPJjAB5xy7d8Hi2dh8VqLahGa14ZHwhsZ/RxqE2bypwLXXkRpEiyOpfMbSsG73+1ml3fIUg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 7.3.1 @@ -16797,7 +16800,7 @@ packages: /@storybook/source-loader@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-/fTcfFeDY/AkToybJkcGZijGXvyzU9wSOCHWq2ViAPn5s9MDU9k0Se2oJDFawB9pw9ROe1LaUsSCLPrLLP2Efw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/addons': 6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2) @@ -16817,7 +16820,7 @@ packages: /@storybook/store@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-1rwSvU+8vjsdWMYzCz01WQ2ZA7S1qakRil9ACLN9qCC89rvfW2vee/pbUHQQvF1wjeYmx/hQTIXXk70K81X8Dw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/addons': 6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2) @@ -16869,7 +16872,7 @@ packages: /@storybook/theming@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-+hC5hhbG3xW0O/wYVIAVkVFoFThC7t/AEDAKn/3kf3gPAJ657jJVNnm4rCaYVtZc5soLGF78yNrLFmwU4UsvAg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 6.5.17-alpha.0 @@ -16883,7 +16886,7 @@ packages: /@storybook/theming@7.3.1(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-1CF6bT8o8pZcd/ptl1q4CiTGY4oLV19tE8Wnhd/TO934fdMp4fUx1FF4pFL6an98lxVeZT0JQ4uvkuaTvHJFRQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@17.0.2) @@ -16906,7 +16909,7 @@ packages: /@storybook/ui@6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-L188HSal+Jq6MNZuy3HUN/QlEE75B7okNBYj/ZR3/s6LIs2zceOZuxp2lk92CEh0dggoJ4HTRqPmKqMHNsXA8g==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/addons': 6.5.17-alpha.0(react-dom@17.0.2)(react@17.0.2) @@ -17409,7 +17412,7 @@ packages: resolution: {integrity: sha512-dYxpz8u9m4q1TuzfcUApqi8iFfR6R0FaMbr2hjZJy1uC8z+bO/K4v8Gs9eogGKYQop7QsrBTFkv/BCF7MzD2Cg==} engines: {node: '>=12'} peerDependencies: - react: '>=16.9.0' + react: ^17.0.2 react-dom: '>=16.9.0' react-test-renderer: '>=16.9.0' peerDependenciesMeta: @@ -17431,8 +17434,8 @@ packages: resolution: {integrity: sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==} engines: {node: '>=12'} peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 - react: ^16.9.0 || ^17.0.0 + '@types/react': ^17.0.2 + react: ^17.0.2 react-dom: ^16.9.0 || ^17.0.0 react-test-renderer: ^16.9.0 || ^17.0.0 peerDependenciesMeta: @@ -17454,7 +17457,7 @@ packages: resolution: {integrity: sha512-jiPKOm7vyUw311Hn/HlNQ9P8/lHNtArAx0PisXyFixDDvfl8DbD6EUdbshK5eqauvBSvzZd19itqQ9j3nferJA==} engines: {node: '>=12'} peerDependencies: - react: '*' + react: ^17.0.2 react-dom: '*' dependencies: '@babel/runtime': 7.21.0 @@ -17468,7 +17471,7 @@ packages: resolution: {integrity: sha512-jiPKOm7vyUw311Hn/HlNQ9P8/lHNtArAx0PisXyFixDDvfl8DbD6EUdbshK5eqauvBSvzZd19itqQ9j3nferJA==} engines: {node: '>=12'} peerDependencies: - react: '*' + react: ^17.0.2 react-dom: '*' dependencies: '@babel/runtime': 7.21.0 @@ -18309,7 +18312,7 @@ packages: '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@5.1.6) '@typescript-eslint/parser': 4.33.0(eslint@8.32.0)(typescript@5.1.6) '@typescript-eslint/scope-manager': 4.33.0 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) eslint: 7.32.0 functional-red-black-tree: 1.0.1 ignore: 5.2.0 @@ -18336,7 +18339,7 @@ packages: '@typescript-eslint/scope-manager': 5.54.0 '@typescript-eslint/type-utils': 5.54.0(eslint@8.32.0)(typescript@5.1.6) '@typescript-eslint/utils': 5.54.0(eslint@8.32.0)(typescript@5.1.6) - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.32.0 grapheme-splitter: 1.0.4 ignore: 5.2.0 @@ -18424,7 +18427,7 @@ packages: '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.1.6) - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.32.0 typescript: 5.1.6 transitivePeerDependencies: @@ -18444,7 +18447,7 @@ packages: '@typescript-eslint/scope-manager': 5.54.0 '@typescript-eslint/types': 5.54.0 '@typescript-eslint/typescript-estree': 5.54.0(typescript@5.1.6) - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.32.0 typescript: 5.1.6 transitivePeerDependencies: @@ -18477,7 +18480,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 5.54.0(typescript@5.1.6) '@typescript-eslint/utils': 5.54.0(eslint@8.32.0)(typescript@5.1.6) - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.32.0 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 @@ -18502,7 +18505,7 @@ packages: typescript: optional: true dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) eslint-visitor-keys: 1.3.0 glob: 7.2.3 is-glob: 4.0.3 @@ -18525,7 +18528,7 @@ packages: dependencies: '@typescript-eslint/types': 4.33.0 '@typescript-eslint/visitor-keys': 4.33.0 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.3 @@ -18546,7 +18549,7 @@ packages: dependencies: '@typescript-eslint/types': 5.54.0 '@typescript-eslint/visitor-keys': 5.54.0 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.3 @@ -18599,7 +18602,7 @@ packages: /@use-gesture/react@10.2.10(react@17.0.2): resolution: {integrity: sha512-znChnKVAMMGXD9J7fCKN686BJNBlUJaRtCu92IQXVWdcxg4MqS0SgsBslGnTWXTlsHVkg5zcGjKYf7qYkOf0Rg==} peerDependencies: - react: '>= 16.8.0' + react: ^17.0.2 dependencies: '@use-gesture/core': 10.2.10 react: 17.0.2 @@ -18608,7 +18611,7 @@ packages: /@use-gesture/react@10.2.27(react@17.0.2): resolution: {integrity: sha512-7E5vnWCxeslWlxwZ8uKIcnUZVMTRMZ8cvSnLLKF1NkyNb3PnNiAzoXM4G1vTKJKRhgOTeI6wK1YsEpwo9ABV5w==} peerDependencies: - react: '>= 16.8.0' + react: ^17.0.2 dependencies: '@use-gesture/core': 10.2.27 react: 17.0.2 @@ -18886,7 +18889,7 @@ packages: resolution: {integrity: sha512-gSfhg8CiL0Vwc2UgUblGVZIy7M0KyXaZsd8+QwzV8TSVRLkGyzdLtYEcs9wRWyQTsdmOd+oRGqbVgUX7AVJxug==} peerDependencies: enzyme: ^3.0.0 - react: ^17.0.0-0 + react: ^17.0.2 react-dom: ^17.0.0-0 dependencies: '@wojtekmaj/enzyme-adapter-utils': 0.1.2(react@17.0.2) @@ -18902,7 +18905,7 @@ packages: /@wojtekmaj/enzyme-adapter-utils@0.1.2(react@17.0.2): resolution: {integrity: sha512-MM/DqDqvxNVlWLqSVQiUbRN9MuDLJfefmPbJ8ZKdmdf5ID8G+i42XhFpoQh5bAZUCdwzRae3+WSZl2lXcFOrhw==} peerDependencies: - react: ^17.0.0-0 + react: ^17.0.2 dependencies: function.prototype.name: 1.1.5 has: 1.0.3 @@ -19196,7 +19199,7 @@ packages: resolution: {integrity: sha512-9Bxq9hY3WEqodn/K/WSE+PoIwv6jKkKBP0pxXFJTWV1yc8/Np9QHV/7wG7qjztxxgu00FrYF7u8OZyvjPrSNYw==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19254,7 +19257,7 @@ packages: resolution: {integrity: sha512-9Bxq9hY3WEqodn/K/WSE+PoIwv6jKkKBP0pxXFJTWV1yc8/Np9QHV/7wG7qjztxxgu00FrYF7u8OZyvjPrSNYw==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19312,7 +19315,7 @@ packages: resolution: {integrity: sha512-WQSWBAYM6iLN2+rAfZmQm4WMLPCe9woBcPybs0tKgOeXGZZBRgZ6FS01jzVmtWhttWXYZ3uH1PGPaKLJJc/Qyg==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19378,7 +19381,7 @@ packages: resolution: {integrity: sha512-Low88BcV7pUSULNytPbO8KWrrMnQA7FnbYW1UOj+GJt+zsYqIleYZccjI5DoFTsXAAKn8RYPytX0i6F6jDM6XQ==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19431,7 +19434,7 @@ packages: resolution: {integrity: sha512-zIPqEysaLFJMnVKU/yCoCEBT3Co9xsa4Ow91T/LI94ll3LeWG/pyiX4PSSQNTx74AqbcNO2p79LVON4FLdu+mQ==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19484,7 +19487,7 @@ packages: resolution: {integrity: sha512-zIPqEysaLFJMnVKU/yCoCEBT3Co9xsa4Ow91T/LI94ll3LeWG/pyiX4PSSQNTx74AqbcNO2p79LVON4FLdu+mQ==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19538,7 +19541,7 @@ packages: resolution: {integrity: sha512-iuFqo2Ms08z0s1t1MM4mI7Gt+oBmj7KW6hRPEdQst+8jaG6hpQX6TgOzBt2Nw+0P0w8QRdyJjoQsB1cipGcNgQ==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19592,7 +19595,7 @@ packages: resolution: {integrity: sha512-iuFqo2Ms08z0s1t1MM4mI7Gt+oBmj7KW6hRPEdQst+8jaG6hpQX6TgOzBt2Nw+0P0w8QRdyJjoQsB1cipGcNgQ==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19646,7 +19649,7 @@ packages: resolution: {integrity: sha512-KfB4gVnqUGZfksFXukeFNXZ1WnkMpLQaVEbBCg09PtJQVA8ZkquzDySFpouA3Q0cTeS830NOc2Mri+MO/zlooQ==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19717,7 +19720,7 @@ packages: resolution: {integrity: sha512-6YHyDQNa6UrAzF3oKFOyu/1F32u7h5q/gpsE1439KDGVLsrc8rSxx3rE6G6TXbJ5YC8MqDrOItMwbw14TGKPAQ==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/autop': 3.40.0 @@ -19750,7 +19753,7 @@ packages: resolution: {integrity: sha512-TVUk0WGVe4/Qzm4/i1KCHOBvbB581AJnYuCAi35nhgu9V//vqbKh9JRg2d49ZduFl0SakVmN6/xSTPPEYjmuYQ==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/autop': 3.40.0 @@ -19786,7 +19789,7 @@ packages: resolution: {integrity: sha512-vAEC0UqmzWe+X5p+xADMgpEVT8JnyHDyW6p49XXF7PGHJDAOplVZk/LGcjwwTV3V/jHuqMcTytQwj2XYqMpqCw==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/autop': 3.40.0 @@ -19835,7 +19838,7 @@ packages: resolution: {integrity: sha512-M1sfM9yhEAjUZPJcgvFqoRDafxyrIOnTb3mRA+NeFMEKexrmCJ/h/MrzPSugYYRMSzbZVe1FsabWZp+Zz8HsNA==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19865,7 +19868,7 @@ packages: resolution: {integrity: sha512-6g8l9Eedo8Wh6D41q8BFZB94KOoubHm1Egp2BVQeHKqClZr/f7CCasDiHse1zakYqnc1rX8FNawI82mM2Lragw==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/components': 25.6.0(@babel/core@7.17.8)(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2) @@ -19893,7 +19896,7 @@ packages: resolution: {integrity: sha512-Ac1+aIMM7NDgN3G7i5kcaETSvZfeqB4U6PubApPmM6FdBF5VfkYUZeqNcC7cuJdveyokRrqHg11/l+DcJGA7/g==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -19947,7 +19950,7 @@ packages: resolution: {integrity: sha512-Ac1+aIMM7NDgN3G7i5kcaETSvZfeqB4U6PubApPmM6FdBF5VfkYUZeqNcC7cuJdveyokRrqHg11/l+DcJGA7/g==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -20001,7 +20004,7 @@ packages: resolution: {integrity: sha512-O6hnJm9tfxkPnKknnJInpMy6qUS29CfRYtX5p5HdQMR2QFaOYvmwy7of3s5zBh7mubx3NeSzMy+ytZEWJ9ETJw==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -20055,7 +20058,7 @@ packages: resolution: {integrity: sha512-36d8fSk/nWfNv2nEZrC2gLx1rN9rGWFt425yXoH6JiakDvdXacN/04xcxZGBRkS+JDz6v22uyPMEol9TzwXOLg==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -20109,7 +20112,7 @@ packages: resolution: {integrity: sha512-36d8fSk/nWfNv2nEZrC2gLx1rN9rGWFt425yXoH6JiakDvdXacN/04xcxZGBRkS+JDz6v22uyPMEol9TzwXOLg==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -20163,7 +20166,7 @@ packages: resolution: {integrity: sha512-36d8fSk/nWfNv2nEZrC2gLx1rN9rGWFt425yXoH6JiakDvdXacN/04xcxZGBRkS+JDz6v22uyPMEol9TzwXOLg==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -20217,7 +20220,7 @@ packages: resolution: {integrity: sha512-RBPjtGLSoiV5YKhrBYh+/X8LbzbA99BJaB4Q+P0e1rVOwGzeBF3M7YEjmg1PrrzWaItqJZTvDoyZo+ql7c0KfA==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -20271,7 +20274,7 @@ packages: resolution: {integrity: sha512-RBPjtGLSoiV5YKhrBYh+/X8LbzbA99BJaB4Q+P0e1rVOwGzeBF3M7YEjmg1PrrzWaItqJZTvDoyZo+ql7c0KfA==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -20326,7 +20329,7 @@ packages: resolution: {integrity: sha512-pYz+EY+Tv/O2JuDBXpaFH/zv9Evty/e6NOGjOzddSeaShZ/mCq2DpUSWPuTFBEAjtv6h9HnpkakbNnEeio5yNA==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -20387,7 +20390,7 @@ packages: resolution: {integrity: sha512-pYz+EY+Tv/O2JuDBXpaFH/zv9Evty/e6NOGjOzddSeaShZ/mCq2DpUSWPuTFBEAjtv6h9HnpkakbNnEeio5yNA==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -20448,7 +20451,7 @@ packages: resolution: {integrity: sha512-VLzGS76MrgS6g5GMjk5q3+glSg1IYSzZAa/c5gZKy16c1a8rFWkc/IMhjw6w8Oyp3vvhB748J0itxsqCmTj5hw==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@ariakit/react': 0.2.17(react-dom@17.0.2)(react@17.0.2) @@ -20535,7 +20538,7 @@ packages: resolution: {integrity: sha512-ydtXLWdOC2roZmn4PLFGvd09uCbqp//e5rHi8KOYU6C+KsUYyrOBzb4oEMUusptZVDNwRe0txPBieB5bmFNxFg==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@types/mousetrap': 1.6.9 @@ -20555,7 +20558,7 @@ packages: resolution: {integrity: sha512-kGv3bI7H1UUAjYowIPvIKs/08gfM1+UIpwR43VFpuqmjFbtcLQXUSgg32Owc7Ig063NjhMDz7oWcFx+BKZ5+EQ==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@types/lodash': 4.14.184 @@ -20577,7 +20580,7 @@ packages: resolution: {integrity: sha512-YqbmZBqS+deq1PfOi019GUOloh43nXNeru3iFzWgogiWvHxVWPLKxfFFNJ2kOup1UvRrvpgBn81J8KxCd2aNLw==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@types/mousetrap': 1.6.9 @@ -20598,7 +20601,7 @@ packages: resolution: {integrity: sha512-kMfyANcDUmA2+4EfEZuDVNFOWKEOJe7oEaZtC6tFRR1wYAlPYOzaQJxbtQMBzqhvHlQMORaxDQNhaoJ8+ac8MQ==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/commands': 0.9.0(@babel/core@7.17.8)(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2) @@ -20629,7 +20632,7 @@ packages: resolution: {integrity: sha512-vhMbz/Q3xEMWTSFMs0D6n93qFSOhUZr/EgtRhLGRHdjskfgegFTlx13HrhDZ+U3xzkv1b8mH1klk4aZX+f0B8Q==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/api-fetch': 6.3.1 @@ -20653,7 +20656,7 @@ packages: resolution: {integrity: sha512-xuqJQkdTwZn1GwHBEjIAWh5aO+wHf4zqYmPRQvoNqSULxYPfpCC0q0hOM9jJgTOCCkfWF2yWiduAOPMMGG+Vng==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/api-fetch': 6.37.0 @@ -20679,7 +20682,7 @@ packages: resolution: {integrity: sha512-Jb7w6SOM9DyoknIOSnOs33Gp85/vbftDrtj9XUTFrQfmML8Ps4RnbX9us/XHvsAD79VgAGaBZrC5tSgZAkCYzQ==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -20763,7 +20766,7 @@ packages: resolution: {integrity: sha512-QbRLuEfwLyy/GVDHl7mzf/W6/hKMzCruggeR197JDOP7U3+HZXnbaZo7wb9YcdLKIyRNNwi4aNrFrgBgJAB72g==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/api-fetch': 6.37.0 @@ -20776,7 +20779,7 @@ packages: resolution: {integrity: sha512-Tj0VPcnEOvr05wuXV7ds9Uz7BAJzKraItiqBu8M/JVftPkm6mS/g/5EWFj6Zvy1SmRb4K/qik8RuGXbV2FD0Ug==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/api-fetch': 6.3.1 @@ -20810,7 +20813,7 @@ packages: resolution: {integrity: sha512-EReq6QQ3ASWPcB60q18GLfDBhQQrf2Ru9Vvkid/tk7tn4ttqy/axn09/ck/GQ1uwi9BoSRyydPOnQCsluPAgNA==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/compose': 5.17.0(react@17.0.2) @@ -20833,7 +20836,7 @@ packages: resolution: {integrity: sha512-QvXE8LoLqSTgkZub4A7EcfcPqAQQAXw1my9DRcxuCUYjYyxWdVM3I6JcQ+A5osy76Poh8b0Al6Kd7hUxg4SEoQ==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/compose': 5.4.1(react@17.0.2) @@ -20854,7 +20857,7 @@ packages: resolution: {integrity: sha512-tEnkYzobo1X889XZFbStcFnd9miqvaRhwdonfbhG1KgCPveTPU8Wb4cGav4obFwIJabvGPhlj9eNs5M4eBtbaQ==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/compose': 5.17.0(react@17.0.2) @@ -20876,7 +20879,7 @@ packages: resolution: {integrity: sha512-1CWz0/v8Qprnj95SFNQoYxu0WW6tfnW1VE2D47MnUWxGNZytuXT1pKeL2iV8PV+XoTLhA6UmoE6+LlzvLeZ3jg==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/compose': 6.21.0(react@17.0.2) @@ -20899,7 +20902,7 @@ packages: resolution: {integrity: sha512-xwdDHIMrq5rISElBTAgswY+G7os7kamM/bVe0HV6abcNxQgo22Urtp+XscTgR9sStBVkbBRPUy++mOI6TkFjbQ==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/compose': 6.21.0(react@17.0.2) @@ -21120,7 +21123,7 @@ packages: resolution: {integrity: sha512-haJff3ZougNwE7hLSYrm/cL66Tviqit5jGIGkxQ6A13/MwB44Y8+pMPf4kZvxbiV/ikoIvJixFEiK2AFENwj8A==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -21170,7 +21173,7 @@ packages: resolution: {integrity: sha512-EJh9yv7HpQCCEIxSvHyzWAksXx75bRr3ftIhyAT+y7XjyIONJ9uD7UH2vOFXfFRxU4RwZTxL/VTdo0W2BB2Nig==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -21243,7 +21246,7 @@ packages: resolution: {integrity: sha512-FEgNLDRAtOjGrXXNUXWucf3zMfM1rWCgc/eQrJFwj0atWGJmqQERvmF4H4jeUO6gqetOHmnko38fLVAnE7QWYw==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -21294,7 +21297,7 @@ packages: resolution: {integrity: sha512-dDDy+wejeEWRL8mL/kaSWohb8mplXn3kVD/LdRpybY14G3UM7MQdAOFWXmq9MGwaTqBBqywtBG0lZlbJGsJadQ==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -21790,7 +21793,7 @@ packages: resolution: {integrity: sha512-Sige1gYGJOvD7UvKIUA4VCezFOxr157NCSQXn8/x2krjKybJzemI07ZJcTApawEYW0gutZbBizoUzaR8YLiiVA==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -21819,7 +21822,7 @@ packages: resolution: {integrity: sha512-l+s5vgAuDZmrQreW39o3+B18WN6etl56jMuCHM9A1vum9QxbxOgYbFWI7u71osv1vG224gv+c1+W+vKpeGCkZg==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -22008,7 +22011,7 @@ packages: peerDependencies: '@babel/core': '>=7' jest: '>=27' - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/core': 7.17.8 @@ -22028,7 +22031,7 @@ packages: resolution: {integrity: sha512-rdajs6bBsrYCwM6eTs5TC6kv3LmVv3PO7FAaIDnUiRwyqUQ2ddUp3cg6cOw7ZK7VXRRBVu1WQNTyVV4+ibTu3w==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/data': 7.3.0(react@17.0.2) @@ -22041,7 +22044,7 @@ packages: resolution: {integrity: sha512-nzggUnSucc1kTtr+ZwSPNwyn5Bf5QFUPjjAwCeXa1ThfZxlOoYCODIkj6CdUAlPuaPwg92v8rl4JC71H6sswhw==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/data': 6.6.1(react@17.0.2) @@ -22056,7 +22059,7 @@ packages: resolution: {integrity: sha512-460xcjMzuBen6y8yOiWdpFpQ3PFjd+sE3L4cWa7uOALXOBAr5u37t3e7mBQFECKwX9k+6kWVlz1ThgobI3pERQ==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/data': 9.14.0(react@17.0.2) @@ -22153,7 +22156,7 @@ packages: resolution: {integrity: sha512-S+hOO+4NJJzaqcqm+XPa6uuvt/pkYjRz20HK3xt8Srb+HjO87D3X5feYGQMxEx5ueJl72+5/uOZwmXKJR4pzog==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/a11y': 3.6.1 @@ -22166,7 +22169,7 @@ packages: resolution: {integrity: sha512-VGPAbt6BC4+E17XbmgZRM3KVVbhQIIu2pBapCOk6pvsvbCy5ewvcl9dy/Wlf6YRrFSmT4nrVPayldea5OVIC6Q==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/a11y': 3.40.0 @@ -22196,7 +22199,7 @@ packages: resolution: {integrity: sha512-6y+UkYpMH+s+E+AO9k5HdlKL/0yaSF6kxdc/OirN1TFh0BzxoZZH0Qb7c6rShddk9W5m/5OJKwa1n4K3ER294A==} engines: {node: '>=16.0.0', npm: '>=8 <9'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@wordpress/block-editor': 12.8.0(@babel/core@7.17.8)(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2) @@ -22230,7 +22233,7 @@ packages: resolution: {integrity: sha512-/rUkBpHRc/5hXu4qNKjF0PfKqslMz3ZME2VhX1kfF6BVZmnMwkDNLjvS4vRpeQ9hG8FKqWQBZvmsqs2LKbFd9A==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/compose': 5.4.1(react@17.0.2) @@ -22246,7 +22249,7 @@ packages: resolution: {integrity: sha512-CgkRjPNvmuQkLZ5IDpZzFESqEheBL7cpaYHyFRIhIGfe6RgsJ58i5AOKUbvZ2lssqyangjYpJ2RfpNn+SVblHA==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -22322,7 +22325,7 @@ packages: resolution: {integrity: sha512-/AyotisluO81NI1weWBDSsU2Nfc+BzGB/Hrzp6u7cQiWH/HZjouAdjG7RvKMlicCu5R/v6FTCQcjmimRfaYhEA==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -22344,7 +22347,7 @@ packages: resolution: {integrity: sha512-57G0HrEy0Ym2zkT8/pI3ihXZot2tUnwQOFdO2GlhCaxxKgmVYkyQ44VneMcN2JbtFfjHzGueG09QeFt3rFyywQ==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -22479,7 +22482,7 @@ packages: resolution: {integrity: sha512-7ZfhtpWGvtT7xWqY/mCwC93zFHTVPQf8SZRjy2jAhcl7RNY6KZpW82rMRKNROEKJ4cYbTOMMf7WL2ulYi6cNFw==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@wordpress/block-editor': 10.2.0(@babel/core@7.17.8)(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2) @@ -22508,7 +22511,7 @@ packages: resolution: {integrity: sha512-7ZfhtpWGvtT7xWqY/mCwC93zFHTVPQf8SZRjy2jAhcl7RNY6KZpW82rMRKNROEKJ4cYbTOMMf7WL2ulYi6cNFw==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@wordpress/block-editor': 10.2.0(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2) @@ -22537,7 +22540,7 @@ packages: resolution: {integrity: sha512-Wpoc5kEhgTc2crGIGq2TRxl/8skc4R6yDaq3SczdYCMwLN2CmBnIb1fBZNzDFwmV/HLP39DesaWsbACTgsZhrA==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -22571,7 +22574,7 @@ packages: resolution: {integrity: sha512-Ql1o5PzShr7PQtdpwu9CAIpAhU7DCRHaXW3uViwJcA5koi4bMOr+8CNJIslp0LcQy8/UzLTPNfQYKswipFkq1Q==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/a11y': 3.40.0 @@ -22590,7 +22593,7 @@ packages: resolution: {integrity: sha512-UCjrV8D4JhTOcqWCo5ngEOXDYMCLjCdVAvYkXbE9TkfiZj+tQ6LS5NCuBV6d+5Dtk4dpw48m3Q95myMVCnjx7A==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/a11y': 3.6.1 @@ -22610,7 +22613,7 @@ packages: resolution: {integrity: sha512-jFduYBaKVc4AeTHjH/PU+hfOdxgBXBdvjvSICIyBObtcANL3chzikNJjPzJP4Z6O22Q9LwHoTktCtr3oyYE8RQ==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/a11y': 3.40.0 @@ -22630,7 +22633,7 @@ packages: resolution: {integrity: sha512-dOMbN8v6g9z8q6yDaAGS/7ZldVFVk0HvF/AvcMw2VFZ9QLOsP6VYRwuXgq8dAD2n8Rh42j1IfaMDTNznKScQpA==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/element': 5.21.0 @@ -22795,7 +22798,7 @@ packages: engines: {node: '>=14', npm: '>=6.14.4'} hasBin: true peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/core': 7.21.3 @@ -22891,7 +22894,7 @@ packages: resolution: {integrity: sha512-yJBM1hLl6n9w9X17deSsUc2Fbt/eBKDw2pzwbiPalKUGjP5RSKflzVb1uOwSr+KDUPo4vHj1hwkqO+RHssHHRg==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -22921,7 +22924,7 @@ packages: resolution: {integrity: sha512-yJBM1hLl6n9w9X17deSsUc2Fbt/eBKDw2pzwbiPalKUGjP5RSKflzVb1uOwSr+KDUPo4vHj1hwkqO+RHssHHRg==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -22951,7 +22954,7 @@ packages: resolution: {integrity: sha512-XbWacQHXteacql0d8d2/qYqHqD3HwBPKSg/TP/0RZghcAQZcwlk+xOD+httkfIR5Iux1dBcSVSl/zyhp6yxqFA==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -23111,7 +23114,7 @@ packages: resolution: {integrity: sha512-5FZCqXjsZjONoyCfjalRgdme//j4XJYHRXYh7ynoJW/qULq3YqZhyLtjFsEM4V+uuuURFSYnGnOD7V+K9wooPA==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/compose': 5.17.0(react@17.0.2) @@ -23124,7 +23127,7 @@ packages: resolution: {integrity: sha512-khCqUED/fXT3RlbWiCcE4gilcB0iZ5Y6d+VjwkJcoAtPLJn6HBiOS9qypNj8NmMYhkIGP1SMSnnp4u2jiHsqcg==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/compose': 5.4.1(react@17.0.2) @@ -23137,7 +23140,7 @@ packages: resolution: {integrity: sha512-R2gpbdHyguzVMc/G9xXIusZmXKus246s0uxCIFX8nWJuvGd7tCkknnf3EthTaW7Pw4CbVsXrFuUUkfYE8ikNJQ==} engines: {node: '>=12'} peerDependencies: - react: ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/compose': 5.4.1(react@17.0.2) @@ -23150,7 +23153,7 @@ packages: resolution: {integrity: sha512-w0C18oYRrFRGdk33Dp5KSOmU1NoJ0SABxOCtzRn8rPJ2ZssThAR/jGhoGd/As+/qHLtiXBQoW5UOzZAYPIWq6A==} engines: {node: '>=12'} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@wordpress/compose': 6.21.0(react@17.0.2) @@ -23174,7 +23177,7 @@ packages: /@wordpress/widgets@3.17.0(@babel/core@7.17.8)(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-mT9QDbkP+xbR1rYaCg4qSdTzVM4wWNtLqwk5c478SpFyv8kaHisM6733A0Dylsz2RlMmJOwHvuBtVONSQSTd4w==} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -23238,7 +23241,7 @@ packages: resolution: {integrity: sha512-L/mqYRxyBWVdIdSaXBHacfvS8NKn3sTKbPb31aRADbE9spsJ1p+tXil0GVQHPlzrmjGeozquLrxuYGiXsFNU7g==} peerDependencies: '@xstate/fsm': ^2.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 xstate: ^4.36.0 peerDependenciesMeta: '@xstate/fsm': @@ -23407,7 +23410,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -23415,7 +23418,7 @@ packages: resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} engines: {node: '>= 8.0.0'} dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) depd: 1.1.2 humanize-ms: 1.2.1 transitivePeerDependencies: @@ -23454,7 +23457,7 @@ packages: /airbnb-prop-types@2.16.0(react@17.0.2): resolution: {integrity: sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==} peerDependencies: - react: ^0.14 || ^15.0.0 || ^16.0.0-alpha + react: ^17.0.2 dependencies: array.prototype.find: 2.1.2 function.prototype.name: 1.1.5 @@ -24419,7 +24422,7 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /babel-loader@8.3.0(@babel/core@7.17.8)(webpack@4.46.0): @@ -24680,6 +24683,7 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.17.8): resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} @@ -24692,7 +24696,6 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.3): resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} @@ -24788,6 +24791,7 @@ packages: core-js-compat: 3.25.5 transitivePeerDependencies: - supports-color + dev: true /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.17.8): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} @@ -24799,7 +24803,6 @@ packages: core-js-compat: 3.25.5 transitivePeerDependencies: - supports-color - dev: true /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.3): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} @@ -24854,6 +24857,7 @@ packages: '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.12.9) transitivePeerDependencies: - supports-color + dev: true /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.17.8): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} @@ -24864,7 +24868,6 @@ packages: '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.17.8) transitivePeerDependencies: - supports-color - dev: true /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.3): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} @@ -25011,38 +25014,38 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3) - /babel-preset-fbjs@3.4.0(@babel/core@7.12.9): + /babel-preset-fbjs@3.4.0(@babel/core@7.17.8): resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.12.9 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.12.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.12.9) - '@babel/plugin-syntax-flow': 7.16.7(@babel/core@7.12.9) - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.12.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) - '@babel/plugin-transform-arrow-functions': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.12.9) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.12.9) - '@babel/plugin-transform-computed-properties': 7.18.9(@babel/core@7.12.9) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.12.9) - '@babel/plugin-transform-flow-strip-types': 7.16.7(@babel/core@7.12.9) - '@babel/plugin-transform-for-of': 7.18.8(@babel/core@7.12.9) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.12.9) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.12.9) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.12.9) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.12.9) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-react-jsx': 7.22.3(@babel/core@7.12.9) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-spread': 7.19.0(@babel/core@7.12.9) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.12.9) + '@babel/core': 7.17.8 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.17.8) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.17.8) + '@babel/plugin-syntax-flow': 7.16.7(@babel/core@7.17.8) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.17.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.8) + '@babel/plugin-transform-arrow-functions': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.17.8) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.17.8) + '@babel/plugin-transform-computed-properties': 7.18.9(@babel/core@7.17.8) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.17.8) + '@babel/plugin-transform-flow-strip-types': 7.16.7(@babel/core@7.17.8) + '@babel/plugin-transform-for-of': 7.18.8(@babel/core@7.17.8) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.17.8) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.17.8) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.17.8) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.17.8) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-react-jsx': 7.22.3(@babel/core@7.17.8) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-spread': 7.19.0(@babel/core@7.17.8) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.17.8) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 /babel-preset-fbjs@3.4.0(@babel/core@7.21.3): @@ -25984,7 +25987,7 @@ packages: resolution: {integrity: sha512-FwZ/wxjqe+5RgzF2SRsPSWsVB9+McAVRWW0tRkmbh7fBjrf3HFZZbcr8vr61p1K+NBaAPv57DRjxgIyfbHmd7g==} engines: {node: '>=7.6.0'} dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) puppeteer-core: 1.12.2 transitivePeerDependencies: - bufferutil @@ -26526,7 +26529,7 @@ packages: /cmdk@0.2.0(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-JQpKvEOb86SnvMZbYaFKYhvzFntWBeSZdyii0rZPhKJj9uwJBxu4DaVYDrRN7r3mPop56oPhRw+JYWTKs66TYw==} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 dependencies: '@radix-ui/react-dialog': 1.0.0(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2) @@ -27021,7 +27024,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.0.0 serialize-javascript: 6.0.0 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /copy-webpack-plugin@9.1.0(webpack@5.70.0): @@ -27059,6 +27062,7 @@ packages: dependencies: browserslist: 4.19.3 semver: 7.0.0 + dev: true /core-js-compat@3.21.1: resolution: {integrity: sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==} @@ -27399,7 +27403,7 @@ packages: postcss-value-parser: 4.2.0 schema-utils: 3.1.1 semver: 7.5.3 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /css-loader@6.7.1(webpack@5.70.0): @@ -27433,7 +27437,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.21) postcss-value-parser: 4.2.0 semver: 7.3.8 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /css-select-base-adapter@0.1.1: @@ -27927,6 +27931,7 @@ packages: dependencies: ms: 2.1.2 supports-color: 9.2.2 + dev: true /debuglog@1.0.1: resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} @@ -28501,7 +28506,7 @@ packages: /downshift@6.1.12(react@17.0.2): resolution: {integrity: sha512-7XB/iaSJVS4T8wGFT3WRXmSF1UlBHAA40DshZtkrIscIN+VC+Lh363skLxFTvJwtNgHxAMDGEHT4xsyQFWL+UA==} peerDependencies: - react: '>=16.12.0' + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 compute-scroll-into-view: 1.0.17 @@ -28513,7 +28518,7 @@ packages: /downshift@6.1.7(react@17.0.2): resolution: {integrity: sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg==} peerDependencies: - react: '>=16.12.0' + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 compute-scroll-into-view: 1.0.17 @@ -28744,7 +28749,7 @@ packages: resolution: {integrity: sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==} peerDependencies: enzyme: ^3.0.0 - react: ^16.0.0-0 + react: ^17.0.2 react-dom: ^16.0.0-0 dependencies: enzyme: 3.11.0 @@ -28764,7 +28769,7 @@ packages: /enzyme-adapter-utils@1.14.0(react@17.0.2): resolution: {integrity: sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg==} peerDependencies: - react: 0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0 + react: ^17.0.2 dependencies: airbnb-prop-types: 2.16.0(react@17.0.2) function.prototype.name: 1.1.5 @@ -29036,7 +29041,7 @@ packages: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.32.0 eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.54.0)(eslint-import-resolver-typescript@2.5.0)(eslint-import-resolver-webpack@0.13.2)(eslint@8.32.0) glob: 7.2.3 @@ -29307,7 +29312,7 @@ packages: eslint: ^5.0.0 || ^6.0.0 dependencies: comment-parser: 0.7.6 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.32.0 jsdoctypeparser: 6.1.0 lodash: 4.17.21 @@ -29326,7 +29331,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 dependencies: comment-parser: 0.7.6 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) eslint: 7.32.0 jsdoctypeparser: 9.0.0 lodash: 4.17.21 @@ -29345,7 +29350,7 @@ packages: dependencies: '@es-joy/jsdoccomment': 0.10.8 comment-parser: 1.2.4 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) eslint: 7.32.0 esquery: 1.4.0 jsdoc-type-pratt-parser: 1.2.0 @@ -29365,7 +29370,7 @@ packages: dependencies: '@es-joy/jsdoccomment': 0.36.1 comment-parser: 1.3.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint: 8.32.0 esquery: 1.4.0 @@ -29667,7 +29672,7 @@ packages: ajv: 6.12.6 chalk: 2.4.2 cross-spawn: 6.0.5 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 eslint-scope: 4.0.3 eslint-utils: 1.4.3 @@ -29712,7 +29717,7 @@ packages: ajv: 6.12.6 chalk: 2.4.2 cross-spawn: 6.0.5 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 eslint-scope: 5.1.1 eslint-utils: 1.4.3 @@ -29760,7 +29765,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 enquirer: 2.3.6 escape-string-regexp: 4.0.0 @@ -29810,7 +29815,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 @@ -30255,7 +30260,7 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -30604,7 +30609,7 @@ packages: dependencies: chalk: 4.1.2 commander: 5.1.0 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -30925,7 +30930,7 @@ packages: semver: 7.5.3 tapable: 1.1.3 typescript: 5.1.6 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.1.6)(webpack@5.70.0): @@ -31014,7 +31019,7 @@ packages: /framer-motion@10.16.1(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-K6TXr5mZtitC/dxQCBdg7xzdN0d5IAIrlaqCPKtIQVdzVPGC0qBuJKXggHX1vjnP5gPOFwB1KbCCTWcnFc3kWg==} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 react-dom: ^18.0.0 peerDependenciesMeta: react: @@ -31032,7 +31037,7 @@ packages: /framer-motion@6.2.8(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-4PtBWFJ6NqR350zYVt9AsFDtISTqsdqna79FvSYPfYDXuuqFmiKtZdkTnYPslnsOMedTW0pEvaQ7eqjD+sA+HA==} peerDependencies: - react: '>=16.8 || ^17.0.0 || ^18.0.0' + react: ^17.0.2 react-dom: '>=16.8 || ^17.0.0 || ^18.0.0' dependencies: framesync: 6.0.1 @@ -31049,7 +31054,7 @@ packages: /framer-motion@6.2.8(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-4PtBWFJ6NqR350zYVt9AsFDtISTqsdqna79FvSYPfYDXuuqFmiKtZdkTnYPslnsOMedTW0pEvaQ7eqjD+sA+HA==} peerDependencies: - react: '>=16.8 || ^17.0.0 || ^18.0.0' + react: ^17.0.2 react-dom: '>=16.8 || ^17.0.0 || ^18.0.0' dependencies: framesync: 6.0.1 @@ -31808,7 +31813,7 @@ packages: /gridicons@3.4.0(react@17.0.2): resolution: {integrity: sha512-GikyCOcfhwHSN8tfsZvcWwWSaRLebVZCvDzfFg0X50E+dIAnG2phfFUTNa06dXA09kqRYCdnu8sPO8pSYO3UVA==} peerDependencies: - react: 15 - 17 + react: ^17.0.2 dependencies: prop-types: 15.8.1 react: 17.0.2 @@ -32476,7 +32481,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) transitivePeerDependencies: - acorn dev: true @@ -32508,7 +32513,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: content-type: 1.0.4 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) is-retry-allowed: 1.2.0 is-stream: 2.0.1 parse-json: 4.0.0 @@ -32547,7 +32552,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -32557,7 +32562,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -32628,7 +32633,7 @@ packages: engines: {node: '>= 6.0.0'} dependencies: agent-base: 5.1.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -32637,7 +32642,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -32647,7 +32652,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -32680,7 +32685,7 @@ packages: dependencies: '@tannin/sprintf': 1.2.0 '@wordpress/compose': 3.25.3(react@17.0.2) - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) events: 3.3.0 hash.js: 1.1.7 interpolate-components: 1.1.1 @@ -32696,12 +32701,12 @@ packages: /i18n-calypso@5.0.0(react@17.0.2): resolution: {integrity: sha512-YgqLgshNiBOiifWxr4s33ODWQ4JIaHoBPWtgFyqcRy0+WGMX2CmTDbXaeZHkHxuIjzsGP+YrVTPNp7lfbiot4g==} peerDependencies: - react: ^16.8 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 '@tannin/sprintf': 1.2.0 '@wordpress/compose': 3.25.3(react@17.0.2) - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) events: 3.3.0 hash.js: 1.1.7 interpolate-components: 1.1.1 @@ -32723,7 +32728,7 @@ packages: '@babel/runtime': 7.21.0 '@tannin/sprintf': 1.2.0 '@wordpress/compose': 5.4.1(react@17.0.2) - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) events: 3.3.0 hash.js: 1.1.7 lodash: 4.17.21 @@ -33791,7 +33796,7 @@ packages: resolution: {integrity: sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==} engines: {node: '>=6'} dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 2.0.5 make-dir: 2.1.0 rimraf: 2.7.1 @@ -33804,7 +33809,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: @@ -36271,35 +36276,6 @@ packages: /jsc-android@250230.2.1: resolution: {integrity: sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==} - /jscodeshift@0.13.1(@babel/preset-env@7.12.7): - resolution: {integrity: sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==} - hasBin: true - peerDependencies: - '@babel/preset-env': ^7.1.6 - dependencies: - '@babel/core': 7.21.3 - '@babel/parser': 7.17.8 - '@babel/plugin-proposal-class-properties': 7.16.7(@babel/core@7.21.3) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7(@babel/core@7.21.3) - '@babel/plugin-proposal-optional-chaining': 7.16.7(@babel/core@7.21.3) - '@babel/plugin-transform-modules-commonjs': 7.17.7(@babel/core@7.21.3) - '@babel/preset-env': 7.12.7(@babel/core@7.12.9) - '@babel/preset-flow': 7.16.7(@babel/core@7.21.3) - '@babel/preset-typescript': 7.16.7(@babel/core@7.21.3) - '@babel/register': 7.18.9(@babel/core@7.21.3) - babel-core: 7.0.0-bridge.0(@babel/core@7.21.3) - chalk: 4.1.2 - flow-parser: 0.121.0 - graceful-fs: 4.2.9 - micromatch: 3.1.10(supports-color@6.1.0) - neo-async: 2.6.2 - node-dir: 0.1.17 - recast: 0.20.5 - temp: 0.8.4 - write-file-atomic: 2.4.1 - transitivePeerDependencies: - - supports-color - /jscodeshift@0.13.1(@babel/preset-env@7.20.2): resolution: {integrity: sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==} hasBin: true @@ -36328,7 +36304,6 @@ packages: write-file-atomic: 2.4.1 transitivePeerDependencies: - supports-color - dev: true /jsdoc-type-pratt-parser@1.1.1: resolution: {integrity: sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==} @@ -37926,48 +37901,48 @@ packages: dependencies: uglify-es: 3.3.9 - /metro-react-native-babel-preset@0.72.1(@babel/core@7.12.9): + /metro-react-native-babel-preset@0.72.1(@babel/core@7.17.8): resolution: {integrity: sha512-DlvMw2tFrCqD9OXBoN11fPM09kHC22FZpnkTmG4Pr4kecV+aDmEGxwakjUcjELrX1JCXz2MLPvqeJkbiP1f5CA==} peerDependencies: '@babel/core': '*' dependencies: - '@babel/core': 7.12.9 - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.12.9) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-proposal-export-default-from': 7.16.7(@babel/core@7.12.9) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.12.9) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-proposal-optional-chaining': 7.18.9(@babel/core@7.12.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.12.9) - '@babel/plugin-syntax-export-default-from': 7.16.7(@babel/core@7.12.9) - '@babel/plugin-syntax-flow': 7.16.7(@babel/core@7.12.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.9) - '@babel/plugin-transform-arrow-functions': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-async-to-generator': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.12.9) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.12.9) - '@babel/plugin-transform-computed-properties': 7.18.9(@babel/core@7.12.9) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.12.9) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-flow-strip-types': 7.16.7(@babel/core@7.12.9) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.12.9) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.12.9) - '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.12.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1(@babel/core@7.12.9) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.12.9) - '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-react-jsx': 7.22.3(@babel/core@7.12.9) - '@babel/plugin-transform-react-jsx-self': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-react-jsx-source': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-runtime': 7.19.1(@babel/core@7.12.9) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-spread': 7.19.0(@babel/core@7.12.9) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.12.9) - '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.12.9) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.12.9) + '@babel/core': 7.17.8 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.17.8) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-proposal-export-default-from': 7.16.7(@babel/core@7.17.8) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.17.8) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-proposal-optional-chaining': 7.18.9(@babel/core@7.17.8) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.8) + '@babel/plugin-syntax-export-default-from': 7.16.7(@babel/core@7.17.8) + '@babel/plugin-syntax-flow': 7.16.7(@babel/core@7.17.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.8) + '@babel/plugin-transform-arrow-functions': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-async-to-generator': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.17.8) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.17.8) + '@babel/plugin-transform-computed-properties': 7.18.9(@babel/core@7.17.8) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.17.8) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-flow-strip-types': 7.16.7(@babel/core@7.17.8) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.17.8) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.17.8) + '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.17.8) + '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1(@babel/core@7.17.8) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.17.8) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-react-jsx': 7.22.3(@babel/core@7.17.8) + '@babel/plugin-transform-react-jsx-self': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-react-jsx-source': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-runtime': 7.19.1(@babel/core@7.17.8) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-spread': 7.19.0(@babel/core@7.17.8) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.17.8) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.17.8) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.17.8) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.17.8) '@babel/template': 7.22.15 react-refresh: 0.4.3 transitivePeerDependencies: @@ -38020,16 +37995,16 @@ packages: transitivePeerDependencies: - supports-color - /metro-react-native-babel-transformer@0.72.1(@babel/core@7.12.9): + /metro-react-native-babel-transformer@0.72.1(@babel/core@7.17.8): resolution: {integrity: sha512-hMnN0MOgVloAk94YuXN7sLeDaZ51Y6xIcJXxIU1s/KaygAGXk6o7VAdwf2MY/IV1SIct5lkW4Gn71u/9/EvfXA==} peerDependencies: '@babel/core': '*' dependencies: - '@babel/core': 7.12.9 - babel-preset-fbjs: 3.4.0(@babel/core@7.12.9) + '@babel/core': 7.17.8 + babel-preset-fbjs: 3.4.0(@babel/core@7.17.8) hermes-parser: 0.8.0 metro-babel-transformer: 0.72.1 - metro-react-native-babel-preset: 0.72.1(@babel/core@7.12.9) + metro-react-native-babel-preset: 0.72.1(@babel/core@7.17.8) metro-source-map: 0.72.1 nullthrows: 1.1.1 transitivePeerDependencies: @@ -38208,7 +38183,7 @@ packages: /micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -38743,7 +38718,7 @@ packages: dependencies: carlo: 0.9.46 chokidar: 3.5.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) isbinaryfile: 3.0.3 mime: 2.5.2 opn: 5.5.0 @@ -39096,7 +39071,7 @@ packages: ajv-errors: 1.0.1(ajv@6.12.6) chalk: 4.1.2 cosmiconfig: 7.0.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 ignore: 5.2.0 is-plain-obj: 3.0.0 @@ -39376,7 +39351,7 @@ packages: '@oclif/plugin-warn-if-update-available': 2.0.4 aws-sdk: 2.1215.0 concurrently: 7.0.0 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) find-yarn-workspace-root: 2.0.0 fs-extra: 8.1.0 github-slugger: 1.4.0 @@ -39706,7 +39681,7 @@ packages: resolution: {integrity: sha512-UJKdSzgd3KOnXXAtqN5+/eeHcvTn1hBkesEmElVgvO/NAYcxAvmjzIGmnNd3Tb/gRAvMBdNRFD4qAWdHxY6QXg==} engines: {node: '>=12.10.0'} dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) p-queue: 6.6.2 transitivePeerDependencies: - supports-color @@ -40084,7 +40059,7 @@ packages: dependencies: '@babel/runtime': 7.21.0 crc32: 0.2.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) seed-random: 2.2.0 transitivePeerDependencies: - supports-color @@ -40481,7 +40456,7 @@ packages: postcss: 8.4.21 schema-utils: 3.1.1 semver: 7.5.3 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /postcss-loader@6.2.1(postcss@8.4.21)(webpack@5.76.3): @@ -41467,7 +41442,7 @@ packages: engines: {node: '>=6.4.0'} requiresBuild: true dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) extract-zip: 1.7.0 https-proxy-agent: 2.2.4 mime: 2.6.0 @@ -41508,7 +41483,7 @@ packages: engines: {node: '>=10.18.1'} dependencies: cross-fetch: 3.1.5 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) devtools-protocol: 0.0.981744 extract-zip: 2.0.1 https-proxy-agent: 5.0.1 @@ -41537,7 +41512,7 @@ packages: dependencies: chromium-bidi: 0.4.4(devtools-protocol@0.0.1094867) cross-fetch: 3.1.5 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) devtools-protocol: 0.0.1094867 extract-zip: 2.0.1 https-proxy-agent: 5.0.1 @@ -41558,7 +41533,7 @@ packages: engines: {node: '>=10.18.1'} dependencies: '@types/mime-types': 2.1.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) extract-zip: 2.0.1 https-proxy-agent: 4.0.0 mime: 2.6.0 @@ -41582,7 +41557,7 @@ packages: requiresBuild: true dependencies: '@types/mime-types': 2.1.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) extract-zip: 1.7.0 https-proxy-agent: 4.0.0 mime: 2.6.0 @@ -41608,7 +41583,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: chalk: 2.4.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) execa: 0.10.0 fs-extra: 6.0.1 get-stream: 5.2.0 @@ -41627,7 +41602,7 @@ packages: /qrcode.react@3.1.0(react@17.0.2): resolution: {integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 dependencies: react: 17.0.2 dev: false @@ -41790,7 +41765,7 @@ packages: /re-resizable@6.9.5(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-Q4+K8gOPbUBmbJCa0qfoVXBGnCwkAJrZ9KUca4GDn5FmxyV2HtLrBz7u43uUOb0y7xKbwcfuftweiOCIDEiCQA==} peerDependencies: - react: ^16.13.1 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.13.1 || ^17.0.0 dependencies: fast-memoize: 2.5.2 @@ -41800,7 +41775,7 @@ packages: /re-resizable@6.9.5(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-Q4+K8gOPbUBmbJCa0qfoVXBGnCwkAJrZ9KUca4GDn5FmxyV2HtLrBz7u43uUOb0y7xKbwcfuftweiOCIDEiCQA==} peerDependencies: - react: ^16.13.1 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.13.1 || ^17.0.0 dependencies: fast-memoize: 2.5.2 @@ -41824,7 +41799,7 @@ packages: /react-autosize-textarea@7.1.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-BHpjCDkuOlllZn3nLazY2F8oYO1tS2jHnWhcjTWQdcKiiMU6gHLNt/fzmqMSyerR0eTdKtfSIqtSeTtghNwS+g==} peerDependencies: - react: ^0.14.0 || ^15.0.0 || ^16.0.0 + react: ^17.0.2 react-dom: ^0.14.0 || ^15.0.0 || ^16.0.0 dependencies: autosize: 4.0.4 @@ -41836,7 +41811,7 @@ packages: /react-colorful@5.5.1(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg==} peerDependencies: - react: '>=16.8.0' + react: ^17.0.2 react-dom: '>=16.8.0' dependencies: react: 17.0.2 @@ -41845,7 +41820,7 @@ packages: /react-colorful@5.6.1(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} peerDependencies: - react: '>=16.8.0' + react: ^17.0.2 react-dom: '>=16.8.0' dependencies: react: 17.0.2 @@ -41854,7 +41829,7 @@ packages: /react-colorful@5.6.1(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} peerDependencies: - react: '>=16.8.0' + react: ^17.0.2 react-dom: '>=16.8.0' dependencies: react: 17.0.2 @@ -41864,7 +41839,7 @@ packages: resolution: {integrity: sha512-RDlerU8DdRRrlYS0MQ7Z9igPWABGLDwz6+ykBNff67RM3Sset2TDqeuOr+R5o00Ggn5U47GeLsGcSDxlZd9cHw==} peerDependencies: moment: ^2.18.1 - react: ^0.14 || ^15.5.4 || ^16.1.1 + react: ^17.0.2 react-dom: ^0.14 || ^15.5.4 || ^16.1.1 dependencies: airbnb-prop-types: 2.16.0(react@17.0.2) @@ -41891,7 +41866,7 @@ packages: resolution: {integrity: sha512-RDlerU8DdRRrlYS0MQ7Z9igPWABGLDwz6+ykBNff67RM3Sset2TDqeuOr+R5o00Ggn5U47GeLsGcSDxlZd9cHw==} peerDependencies: moment: ^2.18.1 - react: ^0.14 || ^15.5.4 || ^16.1.1 + react: ^17.0.2 react-dom: ^0.14 || ^15.5.4 || ^16.1.1 dependencies: airbnb-prop-types: 2.16.0(react@17.0.2) @@ -41919,7 +41894,7 @@ packages: peerDependencies: '@babel/runtime': ^7.0.0 moment: ^2.18.1 - react: ^0.14 || ^15.5.4 || ^16.1.1 + react: ^17.0.2 react-dom: ^0.14 || ^15.5.4 || ^16.1.1 react-with-direction: ^1.3.1 dependencies: @@ -41949,7 +41924,7 @@ packages: peerDependencies: '@babel/runtime': ^7.0.0 moment: ^2.18.1 - react: ^0.14 || ^15.5.4 || ^16.1.1 + react: ^17.0.2 react-dom: ^0.14 || ^15.5.4 || ^16.1.1 react-with-direction: ^1.3.1 dependencies: @@ -42013,7 +41988,7 @@ packages: /react-dom@16.14.0(react@17.0.2): resolution: {integrity: sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==} peerDependencies: - react: ^16.14.0 + react: ^17.0.2 dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 @@ -42024,7 +41999,7 @@ packages: /react-dom@17.0.2(react@17.0.2): resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} peerDependencies: - react: 17.0.2 + react: ^17.0.2 dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 @@ -42034,7 +42009,7 @@ packages: /react-dom@18.2.0(react@17.0.2): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: - react: ^18.2.0 + react: ^17.0.2 dependencies: loose-envify: 1.4.0 react: 17.0.2 @@ -42043,7 +42018,7 @@ packages: /react-easy-crop@3.5.3(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-ApTbh+lzKAvKqYW81ihd5J6ZTNN3vPDwi6ncFuUrHPI4bko2DlYOESkRm+0NYoW0H8YLaD7bxox+Z3EvIzAbUA==} peerDependencies: - react: '>=16.4.0' + react: ^17.0.2 react-dom: '>=16.4.0' dependencies: normalize-wheel: 1.0.1 @@ -42054,7 +42029,7 @@ packages: /react-easy-crop@4.5.1(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-MVzCWmKXTwZTK0iYqlF/gPLdLqvUGrLGX7SQ4g+DO3b/lCiVAwxZKLeZ1wjDfG+r/yEWUoL7At5a0kkDJeU+rQ==} peerDependencies: - react: '>=16.4.0' + react: ^17.0.2 react-dom: '>=16.4.0' dependencies: normalize-wheel: 1.0.1 @@ -42066,7 +42041,7 @@ packages: /react-element-to-jsx-string@14.3.4(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==} peerDependencies: - react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 + react: ^17.0.2 react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 dependencies: '@base2/pretty-print-object': 1.0.1 @@ -42080,7 +42055,7 @@ packages: resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} engines: {node: '>=10', npm: '>=6'} peerDependencies: - react: '>=16.13.1' + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 react: 17.0.2 @@ -42093,7 +42068,7 @@ packages: /react-input-autosize@3.0.0(react@17.0.2): resolution: {integrity: sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg==} peerDependencies: - react: ^16.3.0 || ^17.0.0 + react: ^17.0.2 dependencies: prop-types: 15.8.1 react: 17.0.2 @@ -42102,7 +42077,7 @@ packages: /react-inspector@5.1.1(react@17.0.2): resolution: {integrity: sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==} peerDependencies: - react: ^16.8.4 || ^17.0.0 + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 is-dom: 1.1.0 @@ -42126,7 +42101,7 @@ packages: resolution: {integrity: sha512-duB9bxOaYg7Zt6TMFldIFxQRtSP+Dg3F1ZX3FXxSUn+3tZZ/9JCgeAQKDg7rhZSAqopq8TFRw3yIbnx77gyFTw==} engines: {node: '>=8'} peerDependencies: - react: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 + react: ^17.0.2 react-dom: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 dependencies: exenv: 1.2.2 @@ -42153,12 +42128,12 @@ packages: moment: 2.29.4 dev: false - /react-native-codegen@0.70.4(@babel/preset-env@7.12.7): + /react-native-codegen@0.70.4(@babel/preset-env@7.20.2): resolution: {integrity: sha512-bPyd5jm840omfx24VRyMP+KPzAefpRDwE18w5ywMWHCWZBSqLn1qI9WgBPnavlIrjTEuzxznWQNcaA26lw8AMQ==} dependencies: '@babel/parser': 7.22.15 flow-parser: 0.121.0 - jscodeshift: 0.13.1(@babel/preset-env@7.12.7) + jscodeshift: 0.13.1(@babel/preset-env@7.20.2) nullthrows: 1.1.1 transitivePeerDependencies: - '@babel/preset-env' @@ -42172,18 +42147,18 @@ packages: peerDependencies: react-native: '*' dependencies: - react-native: 0.70.0(@babel/core@7.12.9)(@babel/preset-env@7.12.7)(react@17.0.2) + react-native: 0.70.0(@babel/core@7.17.8)(@babel/preset-env@7.20.2)(react@17.0.2) whatwg-url-without-unicode: 8.0.0-3 - /react-native@0.70.0(@babel/core@7.12.9)(@babel/preset-env@7.12.7)(react@17.0.2): + /react-native@0.70.0(@babel/core@7.17.8)(@babel/preset-env@7.20.2)(react@17.0.2): resolution: {integrity: sha512-QjXLbrK9f+/B2eCzn6kAvglLV/8nwPuFGaFv7ggPpAzFRyx5bVN1dwQLHL3MrP7iXR/M7Jc6Nnid7tmRSic6vA==} engines: {node: '>=14'} hasBin: true peerDependencies: - react: 18.1.0 + react: ^17.0.2 dependencies: '@jest/create-cache-key-function': 27.5.1 - '@react-native-community/cli': 9.1.1(@babel/core@7.12.9) + '@react-native-community/cli': 9.1.1(@babel/core@7.17.8) '@react-native-community/cli-platform-android': 9.1.0 '@react-native-community/cli-platform-ios': 9.1.0 '@react-native/assets': 1.0.0 @@ -42196,7 +42171,7 @@ packages: invariant: 2.2.4 jsc-android: 250230.2.1 memoize-one: 5.2.1 - metro-react-native-babel-transformer: 0.72.1(@babel/core@7.12.9) + metro-react-native-babel-transformer: 0.72.1(@babel/core@7.17.8) metro-runtime: 0.72.1 metro-source-map: 0.72.1 mkdirp: 0.5.5 @@ -42205,7 +42180,7 @@ packages: promise: 8.2.0 react: 17.0.2 react-devtools-core: 4.24.0 - react-native-codegen: 0.70.4(@babel/preset-env@7.12.7) + react-native-codegen: 0.70.4(@babel/preset-env@7.20.2) react-native-gradle-plugin: 0.70.2 react-refresh: 0.4.3 react-shallow-renderer: 16.15.0(react@17.0.2) @@ -42226,7 +42201,7 @@ packages: /react-outside-click-handler@1.3.0(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-Te/7zFU0oHpAnctl//pP3hEAeobfeHMyygHB8MnjP6sX5OR8KHT1G3jmLsV3U9RnIYo+Yn+peJYWu+D5tUS8qQ==} peerDependencies: - react: ^0.14 || >=15 + react: ^17.0.2 react-dom: ^0.14 || >=15 dependencies: airbnb-prop-types: 2.16.0(react@17.0.2) @@ -42241,7 +42216,7 @@ packages: /react-outside-click-handler@1.3.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-Te/7zFU0oHpAnctl//pP3hEAeobfeHMyygHB8MnjP6sX5OR8KHT1G3jmLsV3U9RnIYo+Yn+peJYWu+D5tUS8qQ==} peerDependencies: - react: ^0.14 || >=15 + react: ^17.0.2 react-dom: ^0.14 || >=15 dependencies: airbnb-prop-types: 2.16.0(react@17.0.2) @@ -42257,7 +42232,7 @@ packages: resolution: {integrity: sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==} peerDependencies: '@popperjs/core': ^2.0.0 - react: ^16.8.0 || ^17 + react: ^17.0.2 dependencies: '@popperjs/core': 2.11.4 react: 17.0.2 @@ -42268,7 +42243,7 @@ packages: /react-portal@4.2.1(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-fE9kOBagwmTXZ3YGRYb4gcMy+kSA+yLO0xnPankjRlfBv4uCpFXqKPfkpsGQQR15wkZ9EssnvTOl1yMzbkxhPQ==} peerDependencies: - react: ^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0 + react: ^17.0.2 react-dom: ^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0 dependencies: prop-types: 15.8.1 @@ -42279,7 +42254,7 @@ packages: /react-portal@4.2.1(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-fE9kOBagwmTXZ3YGRYb4gcMy+kSA+yLO0xnPankjRlfBv4uCpFXqKPfkpsGQQR15wkZ9EssnvTOl1yMzbkxhPQ==} peerDependencies: - react: ^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0 + react: ^17.0.2 react-dom: ^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0 dependencies: prop-types: 15.8.1 @@ -42290,7 +42265,7 @@ packages: /react-query@3.39.3(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: '*' react-native: '*' peerDependenciesMeta: @@ -42329,8 +42304,8 @@ packages: resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -42344,8 +42319,8 @@ packages: resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -42363,8 +42338,8 @@ packages: resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -42380,14 +42355,14 @@ packages: /react-resize-aware@3.1.1(react@17.0.2): resolution: {integrity: sha512-M8IyVLBN8D6tEUss+bxQlWte3ZYtNEGhg7rBxtCVG8yEBjUlZwUo5EFLq6tnvTZXcgAbCLjsQn+NCoTJKumRYg==} peerDependencies: - react: ^16.8.0 || 17.x + react: ^17.0.2 dependencies: react: 17.0.2 /react-router-dom@6.3.0(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==} peerDependencies: - react: '>=16.8' + react: ^17.0.2 react-dom: '>=16.8' dependencies: history: 5.3.0 @@ -42399,7 +42374,7 @@ packages: /react-router-dom@6.3.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==} peerDependencies: - react: '>=16.8' + react: ^17.0.2 react-dom: '>=16.8' dependencies: history: 5.3.0 @@ -42411,7 +42386,7 @@ packages: /react-router@6.3.0(react@17.0.2): resolution: {integrity: sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==} peerDependencies: - react: '>=16.8' + react: ^17.0.2 dependencies: history: 5.3.0 react: 17.0.2 @@ -42420,7 +42395,7 @@ packages: /react-select@3.2.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-B/q3TnCZXEKItO0fFN/I0tWOX3WJvi/X2wtdffmwSQVRwg5BpValScTO1vdic9AxlUgmeSzib2hAZAwIUQUZGQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -42438,7 +42413,7 @@ packages: /react-select@5.7.4(@babel/core@7.17.8)(@types/react@17.0.50)(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@babel/runtime': 7.21.0 @@ -42460,7 +42435,7 @@ packages: /react-shallow-renderer@16.14.1(react@17.0.2): resolution: {integrity: sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==} peerDependencies: - react: ^16.0.0 || ^17.0.0 + react: ^17.0.2 dependencies: object-assign: 4.1.1 react: 17.0.2 @@ -42469,7 +42444,7 @@ packages: /react-shallow-renderer@16.15.0(react@17.0.2): resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 dependencies: object-assign: 4.1.1 react: 17.0.2 @@ -42488,8 +42463,8 @@ packages: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -42503,7 +42478,7 @@ packages: /react-syntax-highlighter@15.5.0(react@17.0.2): resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==} peerDependencies: - react: '>= 0.14.0' + react: ^17.0.2 dependencies: '@babel/runtime': 7.21.0 highlight.js: 10.7.3 @@ -42516,7 +42491,7 @@ packages: /react-test-renderer@16.14.0(react@17.0.2): resolution: {integrity: sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==} peerDependencies: - react: ^16.14.0 + react: ^17.0.2 dependencies: object-assign: 4.1.1 prop-types: 15.8.1 @@ -42528,7 +42503,7 @@ packages: /react-test-renderer@17.0.2(react@17.0.2): resolution: {integrity: sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==} peerDependencies: - react: 17.0.2 + react: ^17.0.2 dependencies: object-assign: 4.1.1 react: 17.0.2 @@ -42539,7 +42514,7 @@ packages: /react-transition-group@4.4.2(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==} peerDependencies: - react: '>=16.6.0' + react: ^17.0.2 react-dom: '>=16.6.0' dependencies: '@babel/runtime': 7.21.0 @@ -42553,7 +42528,7 @@ packages: /react-transition-group@4.4.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==} peerDependencies: - react: '>=16.6.0' + react: ^17.0.2 react-dom: '>=16.6.0' dependencies: '@babel/runtime': 7.21.0 @@ -42566,7 +42541,7 @@ packages: /react-visibility-sensor@5.1.1(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-cTUHqIK+zDYpeK19rzW6zF9YfT4486TIgizZW53wEZ+/GPBbK7cNS0EHyJVyHYacwFEvvHLEKfgJndbemWhB/w==} peerDependencies: - react: '>=16.0.0' + react: ^17.0.2 react-dom: '>=16.0.0' dependencies: prop-types: 15.8.1 @@ -42577,7 +42552,7 @@ packages: /react-with-direction@1.4.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-ybHNPiAmaJpoWwugwqry9Hd1Irl2hnNXlo/2SXQBwbLn/jGMauMS2y9jw+ydyX5V9ICryCqObNSthNt5R94xpg==} peerDependencies: - react: ^0.14 || ^15 || ^16 + react: ^17.0.2 react-dom: ^0.14 || ^15 || ^16 dependencies: airbnb-prop-types: 2.16.0(react@17.0.2) @@ -42629,7 +42604,7 @@ packages: /react-with-styles@3.2.3(react-with-direction@1.4.0)(react@17.0.2): resolution: {integrity: sha512-MTI1UOvMHABRLj5M4WpODfwnveHaip6X7QUMI2x6zovinJiBXxzhA9AJP7MZNaKqg1JRFtHPXZdroUC8KcXwlQ==} peerDependencies: - react: '>=0.14' + react: ^17.0.2 react-with-direction: ^1.1.0 dependencies: hoist-non-react-statics: 3.3.2 @@ -42643,7 +42618,7 @@ packages: resolution: {integrity: sha512-tZCTY27KriRNhwHIbg1NkSdTTOSfXDg6Z7s+Q37mtz0Ym7Sc7IOr3PzVt4qJhJMW6Nkvfi3g34FuhtiGAJCBQA==} peerDependencies: '@babel/runtime': ^7.0.0 - react: '>=0.14' + react: ^17.0.2 react-with-direction: ^1.3.1 dependencies: '@babel/runtime': 7.17.7 @@ -42659,7 +42634,7 @@ packages: resolution: {integrity: sha512-tZCTY27KriRNhwHIbg1NkSdTTOSfXDg6Z7s+Q37mtz0Ym7Sc7IOr3PzVt4qJhJMW6Nkvfi3g34FuhtiGAJCBQA==} peerDependencies: '@babel/runtime': ^7.0.0 - react: '>=0.14' + react: ^17.0.2 react-with-direction: ^1.3.1 dependencies: '@babel/runtime': 7.21.0 @@ -42823,7 +42798,7 @@ packages: /reakit-system@0.15.2(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-TvRthEz0DmD0rcJkGamMYx+bATwnGNWJpe/lc8UV2Js8nnPvkaxrHk5fX9cVASFrWbaIyegZHCWUBfxr30bmmA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 dependencies: react: 17.0.2 @@ -42834,7 +42809,7 @@ packages: /reakit-system@0.15.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-TvRthEz0DmD0rcJkGamMYx+bATwnGNWJpe/lc8UV2Js8nnPvkaxrHk5fX9cVASFrWbaIyegZHCWUBfxr30bmmA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 dependencies: react: 17.0.2 @@ -42844,7 +42819,7 @@ packages: /reakit-utils@0.15.2(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-i/RYkq+W6hvfFmXw5QW7zvfJJT/K8a4qZ0hjA79T61JAFPGt23DsfxwyBbyK91GZrJ9HMrXFVXWMovsKBc1qEQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 dependencies: react: 17.0.2 @@ -42854,7 +42829,7 @@ packages: /reakit-utils@0.15.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-i/RYkq+W6hvfFmXw5QW7zvfJJT/K8a4qZ0hjA79T61JAFPGt23DsfxwyBbyK91GZrJ9HMrXFVXWMovsKBc1qEQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 dependencies: react: 17.0.2 @@ -42863,7 +42838,7 @@ packages: /reakit-warning@0.6.2(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-z/3fvuc46DJyD3nJAUOto6inz2EbSQTjvI/KBQDqxwB0y02HDyeP8IWOJxvkuAUGkWpeSx+H3QWQFSNiPcHtmw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 dependencies: react: 17.0.2 reakit-utils: 0.15.2(react-dom@16.14.0)(react@17.0.2) @@ -42874,7 +42849,7 @@ packages: /reakit-warning@0.6.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-z/3fvuc46DJyD3nJAUOto6inz2EbSQTjvI/KBQDqxwB0y02HDyeP8IWOJxvkuAUGkWpeSx+H3QWQFSNiPcHtmw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 dependencies: react: 17.0.2 reakit-utils: 0.15.2(react-dom@17.0.2)(react@17.0.2) @@ -42884,7 +42859,7 @@ packages: /reakit@1.3.11(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-mYxw2z0fsJNOQKAEn5FJCPTU3rcrY33YZ/HzoWqZX0G7FwySp1wkCYW79WhuYMNIUFQ8s3Baob1RtsEywmZSig==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 dependencies: '@popperjs/core': 2.11.4 @@ -42899,7 +42874,7 @@ packages: /reakit@1.3.11(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-mYxw2z0fsJNOQKAEn5FJCPTU3rcrY33YZ/HzoWqZX0G7FwySp1wkCYW79WhuYMNIUFQ8s3Baob1RtsEywmZSig==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 react-dom: ^16.8.0 || ^17.0.0 dependencies: '@popperjs/core': 2.11.4 @@ -43013,6 +42988,7 @@ packages: resolution: {integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==} dependencies: '@babel/runtime': 7.21.0 + dev: true /regenerator-transform@0.15.0: resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} @@ -43753,7 +43729,7 @@ packages: sass: 1.60.0 schema-utils: 3.1.1 semver: 7.5.0 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /sass-loader@12.6.0(sass@1.60.0)(webpack@5.76.3): @@ -43967,6 +43943,7 @@ packages: /semver@7.0.0: resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} hasBin: true + dev: true /semver@7.3.5: resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} @@ -44220,7 +44197,7 @@ packages: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -44231,7 +44208,7 @@ packages: resolution: {integrity: sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==} dependencies: buffer: 6.0.3 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) err-code: 3.0.1 get-browser-rtc: 1.1.0 queue-microtask: 1.2.3 @@ -44405,7 +44382,7 @@ packages: engines: {node: '>= 10'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) socks: 2.7.0 transitivePeerDependencies: - supports-color @@ -44416,7 +44393,7 @@ packages: engines: {node: '>= 10'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) socks: 2.7.0 transitivePeerDependencies: - supports-color @@ -44588,7 +44565,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -44601,7 +44578,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -45032,7 +45009,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.1.1 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /style-search@0.1.0: @@ -45223,7 +45200,7 @@ packages: balanced-match: 2.0.0 chalk: 4.1.2 cosmiconfig: 7.0.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) execall: 2.0.0 fast-glob: 3.2.7 fastest-levenshtein: 1.0.12 @@ -45282,7 +45259,7 @@ packages: balanced-match: 1.0.2 chalk: 4.1.2 cosmiconfig: 7.0.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) execall: 2.0.0 fast-glob: 3.2.11 fastest-levenshtein: 1.0.12 @@ -45339,7 +45316,7 @@ packages: colord: 2.9.2 cosmiconfig: 7.0.1 css-functions-list: 3.0.1 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) execall: 2.0.0 fast-glob: 3.2.11 fastest-levenshtein: 1.0.12 @@ -45402,7 +45379,7 @@ packages: dependencies: component-emitter: 1.3.0 cookiejar: 2.1.3 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.0.1 @@ -45469,6 +45446,7 @@ packages: /supports-color@9.2.2: resolution: {integrity: sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==} engines: {node: '>=12'} + dev: true /supports-hyperlinks@2.2.0: resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} @@ -45866,7 +45844,7 @@ packages: serialize-javascript: 6.0.0 source-map: 0.6.1 terser: 5.10.0(acorn@8.8.1) - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) transitivePeerDependencies: - acorn dev: true @@ -47080,7 +47058,7 @@ packages: loader-utils: 1.4.0 mime: 2.6.0 schema-utils: 1.0.0 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /url-loader@3.0.0(webpack@4.46.0): @@ -47163,8 +47141,8 @@ packages: resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -47176,7 +47154,7 @@ packages: /use-debounce@3.4.3(react@17.0.2): resolution: {integrity: sha512-nxy+opOxDccWfhMl36J5BSCTpvcj89iaQk2OZWLAtBJQj7ISCtx1gh+rFbdjGfMl6vtCZf6gke/kYvrkVfHMoA==} peerDependencies: - react: '>=16.8.0' + react: ^17.0.2 dependencies: react: 17.0.2 dev: false @@ -47185,7 +47163,7 @@ packages: resolution: {integrity: sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==} peerDependencies: '@types/react': '*' - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -47198,7 +47176,7 @@ packages: resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -47209,7 +47187,7 @@ packages: /use-lilius@2.0.3(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-+Q7nspdv+QGnyHGVMd6yAdLrqv5EGB4n3ix4GJH0JEE27weKCLCLmZSuAr5Nw+yPBCZn/iZ+KjL5+UykLCWXrw==} peerDependencies: - react: '*' + react: ^17.0.2 react-dom: '*' dependencies: date-fns: 2.29.3 @@ -47219,14 +47197,14 @@ packages: /use-memo-one@1.1.2(react@17.0.2): resolution: {integrity: sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 + react: ^17.0.2 dependencies: react: 17.0.2 /use-resize-observer@9.1.0(react-dom@16.14.0)(react@17.0.2): resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} peerDependencies: - react: 16.8.0 - 18 + react: ^17.0.2 react-dom: 16.8.0 - 18 dependencies: '@juggle/resize-observer': 3.4.0 @@ -47238,8 +47216,8 @@ packages: resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.2 + react: ^17.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -47252,14 +47230,14 @@ packages: /use-subscription@1.6.0(react@17.0.2): resolution: {integrity: sha512-0Y/cTLlZfw547tJhJMoRA16OUbVqRm6DmvGpiGbmLST6BIA5KU5cKlvlz8DVMrACnWpyEjCkgmhLatthP4jUbA==} peerDependencies: - react: ^18.0.0 + react: ^17.0.2 dependencies: react: 17.0.2 /use-sync-external-store@1.2.0(react@17.0.2): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^17.0.2 dependencies: react: 17.0.2 @@ -47421,7 +47399,7 @@ packages: '@babel/types': '>=7.13' aslemammad-vite-plugin-macro: '>=1.0.0-alpha.1' babel-plugin-macros: '>=3.0' - react: '>=16.8' + react: ^17.0.2 vite: '>=2.8.6' peerDependenciesMeta: '@babel/helper-module-imports': @@ -47450,7 +47428,7 @@ packages: '@babel/types': '>=7.13' aslemammad-vite-plugin-macro: '>=1.0.0-alpha.1' babel-plugin-macros: '>=3.0' - react: '>=16.8' + react: ^17.0.2 vite: '>=2.8.6' peerDependenciesMeta: '@babel/helper-module-imports': @@ -47628,7 +47606,7 @@ packages: dependencies: chalk: 2.4.2 commander: 3.0.2 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -47919,7 +47897,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 3.1.1 - webpack: 5.76.3(webpack-cli@4.9.2) + webpack: 5.76.3(webpack-cli@3.3.12) dev: true /webpack-dev-middleware@5.3.3(webpack@5.70.0): @@ -48629,7 +48607,7 @@ packages: resolution: {integrity: sha512-NMp0YsBM40CuI5vWtHpjWOuf96rPfbpGkamlJpVwYvgenIh1ynRzqVnGfsnjofgz13T2qcKkdwJY0Y2X7z+W+w==} dependencies: '@babel/runtime': 7.21.0 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) progress-event: 1.0.0 uuid: 7.0.3 wp-error: 1.3.0 @@ -49140,7 +49118,7 @@ packages: cli-table: 0.3.11 commander: 7.1.0 dateformat: 4.6.3 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) diff: 5.1.0 error: 10.4.0 escape-string-regexp: 4.0.0 @@ -49184,7 +49162,7 @@ packages: dependencies: chalk: 4.1.2 dargs: 7.0.0 - debug: 4.3.4(supports-color@9.2.2) + debug: 4.3.4(supports-color@8.1.1) execa: 5.1.1 github-username: 6.0.0 lodash: 4.17.21 From bffd013afe78d62841a86fa7d3f3f29287ca73cb Mon Sep 17 00:00:00 2001 From: Lourens Schep Date: Wed, 29 Nov 2023 14:45:03 -0400 Subject: [PATCH 43/51] Update parseNumber to handle empty string seperators --- packages/js/number/src/index.ts | 19 ++++++++++++----- packages/js/number/src/test/index.ts | 32 +++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/packages/js/number/src/index.ts b/packages/js/number/src/index.ts index 9910586c01e..dab680de57c 100644 --- a/packages/js/number/src/index.ts +++ b/packages/js/number/src/index.ts @@ -135,10 +135,19 @@ export function parseNumber( const [ , decimals ] = value.split( decimalSeparator ); parsedPrecision = decimals ? decimals.length : 0; } + let parsedValue = value; + if ( thousandSeparator ) { + parsedValue = parsedValue.replace( + new RegExp( `\\${ thousandSeparator }`, 'g' ), + '' + ); + } + if ( decimalSeparator ) { + parsedValue = parsedValue.replace( + new RegExp( `\\${ decimalSeparator }`, 'g' ), + '.' + ); + } - return Number.parseFloat( - value - .replace( new RegExp( `\\${ thousandSeparator }`, 'g' ), '' ) - .replace( new RegExp( `\\${ decimalSeparator }`, 'g' ), '.' ) - ).toFixed( parsedPrecision ); + return Number.parseFloat( parsedValue ).toFixed( parsedPrecision ); } diff --git a/packages/js/number/src/test/index.ts b/packages/js/number/src/test/index.ts index f2ec8b55053..91d07ea7bd0 100644 --- a/packages/js/number/src/test/index.ts +++ b/packages/js/number/src/test/index.ts @@ -6,7 +6,7 @@ import { partial } from 'lodash'; /** * Internal dependencies */ -import { numberFormat } from '../index'; +import { numberFormat, parseNumber } from '../index'; const defaultNumberFormat = partial( numberFormat, {} ); @@ -47,4 +47,34 @@ describe( 'numberFormat', () => { }; expect( numberFormat( config, '12345.6789' ) ).toBe( '12.345,679' ); } ); + +}); + +describe( 'parseNumber', () => { + it( 'should remove thousand seperator before parsing number', () => { + const config = { + decimalSeparator: ',', + thousandSeparator: '.', + precision: 3, + }; + expect( parseNumber( config, '12.345,679' ) ).toBe( '12345.679' ); + } ); + + it( 'supports empty string as the thousandSeperator', () => { + const config = { + decimalSeparator: ',', + thousandSeparator: '', + precision: 3, + }; + expect( parseNumber( config, '12345,679' ) ).toBe( '12345.679' ); + } ); + + it( 'supports empty string as the decimalSeperator', () => { + const config = { + decimalSeparator: '', + thousandSeparator: ',', + precision: 2, + }; + expect( parseNumber( config, '1,2345,679' ) ).toBe( '12345679.00' ); + } ); } ); From 476374049cd005cec8c5390aef8701ac9f0c4ff7 Mon Sep 17 00:00:00 2001 From: Lourens Schep Date: Wed, 29 Nov 2023 14:45:49 -0400 Subject: [PATCH 44/51] Add changelog --- packages/js/number/changelog/fix-41780_parse_number | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/js/number/changelog/fix-41780_parse_number diff --git a/packages/js/number/changelog/fix-41780_parse_number b/packages/js/number/changelog/fix-41780_parse_number new file mode 100644 index 00000000000..0fdcb8481d3 --- /dev/null +++ b/packages/js/number/changelog/fix-41780_parse_number @@ -0,0 +1,4 @@ +Significance: minor +Type: fix + +Fix parseNumber to allow for emptry string thousand & decimal seperators. From 423d5a86fa8d89fae3f8f2411c4ba031f7ffc130 Mon Sep 17 00:00:00 2001 From: Lourens Schep Date: Wed, 29 Nov 2023 15:13:43 -0400 Subject: [PATCH 45/51] Fix spelling mistake and lint issue --- packages/js/number/changelog/fix-41780_parse_number | 2 +- packages/js/number/src/test/index.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/js/number/changelog/fix-41780_parse_number b/packages/js/number/changelog/fix-41780_parse_number index 0fdcb8481d3..b9b0354abe3 100644 --- a/packages/js/number/changelog/fix-41780_parse_number +++ b/packages/js/number/changelog/fix-41780_parse_number @@ -1,4 +1,4 @@ Significance: minor Type: fix -Fix parseNumber to allow for emptry string thousand & decimal seperators. +Fix parseNumber to allow for emptry string thousand & decimal separators. diff --git a/packages/js/number/src/test/index.ts b/packages/js/number/src/test/index.ts index 91d07ea7bd0..b5d2ac089e3 100644 --- a/packages/js/number/src/test/index.ts +++ b/packages/js/number/src/test/index.ts @@ -47,8 +47,7 @@ describe( 'numberFormat', () => { }; expect( numberFormat( config, '12345.6789' ) ).toBe( '12.345,679' ); } ); - -}); +} ); describe( 'parseNumber', () => { it( 'should remove thousand seperator before parsing number', () => { From f24af0e197495c0c5a1e1d4b6293d69bd377117a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maikel=20David=20P=C3=A9rez=20G=C3=B3mez?= Date: Wed, 29 Nov 2023 18:05:16 -0300 Subject: [PATCH 46/51] [Grouped products] Add ordering support to the product list (#41709) * When the user clicks the search field, we immediately display the list of all existing products. It is sorted alphabetically. Clicking an item closes the search and adds the product to the list. * Fix linter errors * Create useDraggable hook * Add dragging to sort products in the modal * Fix product row padding * Improve product petching * Add changelog file --- .../js/product-editor/changelog/add-41663 | 4 + .../product-fields/product-list/edit.tsx | 59 ++++--- .../product-fields/product-list/editor.scss | 2 +- .../add-products-modal/add-products-modal.tsx | 27 ++- .../src/hooks/use-draggable/index.ts | 1 + .../src/hooks/use-draggable/styles.scss | 41 +++++ .../src/hooks/use-draggable/types.ts | 3 + .../src/hooks/use-draggable/use-draggable.ts | 164 ++++++++++++++++++ .../src/hooks/use-draggable/utils.ts | 35 ++++ packages/js/product-editor/src/style.scss | 3 + 10 files changed, 315 insertions(+), 24 deletions(-) create mode 100644 packages/js/product-editor/changelog/add-41663 create mode 100644 packages/js/product-editor/src/hooks/use-draggable/index.ts create mode 100644 packages/js/product-editor/src/hooks/use-draggable/styles.scss create mode 100644 packages/js/product-editor/src/hooks/use-draggable/types.ts create mode 100644 packages/js/product-editor/src/hooks/use-draggable/use-draggable.ts create mode 100644 packages/js/product-editor/src/hooks/use-draggable/utils.ts diff --git a/packages/js/product-editor/changelog/add-41663 b/packages/js/product-editor/changelog/add-41663 new file mode 100644 index 00000000000..c2d61e12fab --- /dev/null +++ b/packages/js/product-editor/changelog/add-41663 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add ordering support to the product list diff --git a/packages/js/product-editor/src/blocks/product-fields/product-list/edit.tsx b/packages/js/product-editor/src/blocks/product-fields/product-list/edit.tsx index 58c397db518..b6585cec9ca 100644 --- a/packages/js/product-editor/src/blocks/product-fields/product-list/edit.tsx +++ b/packages/js/product-editor/src/blocks/product-fields/product-list/edit.tsx @@ -41,6 +41,7 @@ export function Edit( { const blockProps = useWooBlockProps( attributes ); const [ openAddProductsModal, setOpenAddProductsModal ] = useState( false ); const [ isLoading, setIsLoading ] = useState( false ); + const [ preventFetch, setPreventFetch ] = useState( false ); const [ groupedProductIds, setGroupedProductIds ] = useEntityProp< number[] >( 'postType', postType, property ); @@ -49,6 +50,8 @@ export function Edit( { useEffect( function loadGroupedProducts() { + if ( preventFetch ) return; + if ( groupedProductIds.length ) { setIsLoading( false ); resolveSelect( PRODUCTS_STORE_NAME ) @@ -62,7 +65,7 @@ export function Edit( { setGroupedProducts( [] ); } }, - [ groupedProductIds ] + [ groupedProductIds, preventFetch ] ); function handleAddProductsButtonClick() { @@ -70,10 +73,12 @@ export function Edit( { } function handleAddProductsModalSubmit( value: Product[] ) { - setGroupedProductIds( [ - ...groupedProductIds, - ...value.map( ( product ) => product.id ), - ] ); + const newGroupedProducts = [ ...groupedProducts, ...value ]; + setPreventFetch( true ); + setGroupedProducts( newGroupedProducts ); + setGroupedProductIds( + newGroupedProducts.map( ( product ) => product.id ) + ); setOpenAddProductsModal( false ); } @@ -83,10 +88,16 @@ export function Edit( { function removeProductHandler( product: Product ) { return function handleRemoveClick() { - const newGroupedProductIds = groupedProductIds.filter( - ( productId ) => productId !== product.id + const newGroupedProducts = groupedProducts.filter( + ( groupedProduct ) => groupedProduct.id !== product.id + ); + setPreventFetch( true ); + setGroupedProducts( newGroupedProducts ); + setGroupedProductIds( + newGroupedProducts.map( + ( groupedProduct ) => groupedProduct.id + ) ); - setGroupedProductIds( newGroupedProductIds ); }; } @@ -199,23 +210,30 @@ export function Edit( { className="wp-block-woocommerce-product-list-field__table-cell" role="cell" > - { product.sale_price && ( + { product.on_sale && ( + { product.sale_price + ? formatAmount( + product.sale_price + ) + : formatAmount( + product.price + ) } + + ) } + + { product.regular_price && ( + { formatAmount( - product.sale_price + product.regular_price ) } ) } - - { formatAmount( - product.regular_price - ) } -
    ) }
    - { openAddProductsModal && ( 0 @@ -101,6 +103,10 @@ export function AddProductsModal( { }; } + const { container, draggable, handler } = useDraggable( { + onSort: setSelectedProducts, + } ); + return ( { Boolean( selectedProducts.length ) && ( -
      +
        { selectedProducts.map( ( item ) => (
      • +