From bffcf74c1cbe8af270a79cdfe79bf3a010b00e68 Mon Sep 17 00:00:00 2001 From: "Alex P." Date: Thu, 5 Sep 2024 10:45:54 +0300 Subject: [PATCH 01/54] Do not add pay later button in editor --- modules/ppcp-blocks/resources/js/checkout-block.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-blocks/resources/js/checkout-block.js b/modules/ppcp-blocks/resources/js/checkout-block.js index d1b6ad990..ab914f27a 100644 --- a/modules/ppcp-blocks/resources/js/checkout-block.js +++ b/modules/ppcp-blocks/resources/js/checkout-block.js @@ -657,7 +657,7 @@ const PayPalComponent = ( { ); }; -const BlockEditorPayPalComponent = () => { +const BlockEditorPayPalComponent = ( fundingSource ) => { const urlParams = { clientId: 'test', ...config.scriptData.url_params, @@ -670,6 +670,7 @@ const BlockEditorPayPalComponent = () => { onClick={ ( data, actions ) => { return false; } } + fundingSource={ fundingSource } /> ); @@ -758,7 +759,7 @@ if ( block_enabled && config.enabled ) { name: config.id, label:
, content: , - edit: , + edit: , ariaLabel: config.title, canMakePayment: () => { return true; @@ -784,7 +785,9 @@ if ( block_enabled && config.enabled ) { fundingSource={ fundingSource } /> ), - edit: , + edit: , ariaLabel: config.title, canMakePayment: async () => { if ( ! paypalScriptPromise ) { From 2675132deddba04d30b9fdb958d8c4d3c556d9f7 Mon Sep 17 00:00:00 2001 From: "Alex P." Date: Thu, 19 Sep 2024 16:42:44 +0300 Subject: [PATCH 02/54] Fix funding source parameter --- modules/ppcp-blocks/resources/js/checkout-block.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ppcp-blocks/resources/js/checkout-block.js b/modules/ppcp-blocks/resources/js/checkout-block.js index ab914f27a..7248d3a2b 100644 --- a/modules/ppcp-blocks/resources/js/checkout-block.js +++ b/modules/ppcp-blocks/resources/js/checkout-block.js @@ -657,7 +657,7 @@ const PayPalComponent = ( { ); }; -const BlockEditorPayPalComponent = ( fundingSource ) => { +const BlockEditorPayPalComponent = ({ fundingSource } ) => { const urlParams = { clientId: 'test', ...config.scriptData.url_params, From a453e4e88102742c0cbb42f71c3ac044757f77f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=BCsken?= Date: Thu, 17 Oct 2024 14:18:19 +0200 Subject: [PATCH 03/54] Display payment gateways also when the are set to display:none with css and the stylesheet is removed from DOM --- modules/ppcp-applepay/resources/js/ApplepayButton.js | 5 +++++ .../js/modules/Renderer/CardFieldsFreeTrialRenderer.js | 6 ++++++ .../resources/js/modules/Renderer/CardFieldsRenderer.js | 6 ++++++ .../resources/js/modules/Renderer/HostedFieldsRenderer.js | 6 ++++++ .../resources/js/modules/Renderer/PaymentButton.js | 5 +++++ 5 files changed, 28 insertions(+) diff --git a/modules/ppcp-applepay/resources/js/ApplepayButton.js b/modules/ppcp-applepay/resources/js/ApplepayButton.js index 0f217f606..8b187318a 100644 --- a/modules/ppcp-applepay/resources/js/ApplepayButton.js +++ b/modules/ppcp-applepay/resources/js/ApplepayButton.js @@ -407,6 +407,11 @@ class ApplePayButton { .querySelectorAll( 'style#ppcp-hide-apple-pay' ) .forEach( ( el ) => el.remove() ); + const paymentMethodAppleLi = document.querySelector('.wc_payment_method.payment_method_ppcp-applepay' ); + if (paymentMethodAppleLi.style.display === 'none' || paymentMethodAppleLi.style.display === '') { + paymentMethodAppleLi.style.display = 'block'; + } + this.allElements.forEach( ( element ) => { element.style.display = ''; } ); diff --git a/modules/ppcp-button/resources/js/modules/Renderer/CardFieldsFreeTrialRenderer.js b/modules/ppcp-button/resources/js/modules/Renderer/CardFieldsFreeTrialRenderer.js index b97569762..93e6ddf3e 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/CardFieldsFreeTrialRenderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/CardFieldsFreeTrialRenderer.js @@ -38,6 +38,12 @@ class CardFieldsFreeTrialRenderer { if ( hideDccGateway ) { hideDccGateway.parentNode.removeChild( hideDccGateway ); } + const dccGatewayLi = document.querySelector( + '.wc_payment_method.payment_method_ppcp-credit-card-gateway' + ); + if (dccGatewayLi.style.display === 'none' || dccGatewayLi.style.display === '') { + dccGatewayLi.style.display = 'block'; + } this.errorHandler.clear(); diff --git a/modules/ppcp-button/resources/js/modules/Renderer/CardFieldsRenderer.js b/modules/ppcp-button/resources/js/modules/Renderer/CardFieldsRenderer.js index 4a0ec09f2..96196d0cd 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/CardFieldsRenderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/CardFieldsRenderer.js @@ -44,6 +44,12 @@ class CardFieldsRenderer { if ( hideDccGateway ) { hideDccGateway.parentNode.removeChild( hideDccGateway ); } + const dccGatewayLi = document.querySelector( + '.wc_payment_method.payment_method_ppcp-credit-card-gateway' + ); + if (dccGatewayLi.style.display === 'none' || dccGatewayLi.style.display === '') { + dccGatewayLi.style.display = 'block'; + } const cardFields = paypal.CardFields( { createOrder: contextConfig.createOrder, diff --git a/modules/ppcp-button/resources/js/modules/Renderer/HostedFieldsRenderer.js b/modules/ppcp-button/resources/js/modules/Renderer/HostedFieldsRenderer.js index f49d9e9ed..5160c5cde 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/HostedFieldsRenderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/HostedFieldsRenderer.js @@ -52,6 +52,12 @@ class HostedFieldsRenderer { if ( hideDccGateway ) { hideDccGateway.parentNode.removeChild( hideDccGateway ); } + const dccGatewayLi = document.querySelector( + '.wc_payment_method.payment_method_ppcp-credit-card-gateway' + ); + if (dccGatewayLi.style.display === 'none' || dccGatewayLi.style.display === '') { + dccGatewayLi.style.display = 'block'; + } const cardNumberField = document.querySelector( '#ppcp-credit-card-gateway-card-number' diff --git a/modules/ppcp-button/resources/js/modules/Renderer/PaymentButton.js b/modules/ppcp-button/resources/js/modules/Renderer/PaymentButton.js index 3ce35c9b5..e3df4c969 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/PaymentButton.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/PaymentButton.js @@ -763,11 +763,16 @@ export default class PaymentButton { const styleSelector = `style[data-hide-gateway="${ this.methodId }"]`; const wrapperSelector = `#${ this.wrappers.Default }`; + const paymentMethodLi = document.querySelector(`.wc_payment_method.payment_method_${ this.methodId }`); document .querySelectorAll( styleSelector ) .forEach( ( el ) => el.remove() ); + if (paymentMethodLi.style.display === 'none' || paymentMethodLi.style.display === '') { + paymentMethodLi.style.display = 'block'; + } + document .querySelectorAll( wrapperSelector ) .forEach( ( el ) => el.remove() ); From 407f5260641c5f171b528ddaa025aba8d645556d Mon Sep 17 00:00:00 2001 From: Daniel Dudzic Date: Thu, 17 Oct 2024 23:56:03 +0200 Subject: [PATCH 04/54] Axo: Add support for shipping locations limiting --- .../resources/js/hooks/useAllowedLocations.js | 21 ++++++ .../resources/js/hooks/useFastlaneSdk.js | 14 +++- modules/ppcp-axo-block/services.php | 3 +- .../src/AxoBlockPaymentMethod.php | 54 ++++++++------ modules/ppcp-axo/resources/js/AxoManager.js | 8 +- modules/ppcp-axo/services.php | 74 +++++++++++++++---- modules/ppcp-axo/src/Assets/AxoManager.php | 55 ++++++++------ 7 files changed, 166 insertions(+), 63 deletions(-) create mode 100644 modules/ppcp-axo-block/resources/js/hooks/useAllowedLocations.js diff --git a/modules/ppcp-axo-block/resources/js/hooks/useAllowedLocations.js b/modules/ppcp-axo-block/resources/js/hooks/useAllowedLocations.js new file mode 100644 index 000000000..67b36036a --- /dev/null +++ b/modules/ppcp-axo-block/resources/js/hooks/useAllowedLocations.js @@ -0,0 +1,21 @@ +import { useMemo } from '@wordpress/element'; + +/** + * Custom hook returning the allowed shipping locations based on configuration. + * + * @param {Object} axoConfig - The AXO configuration object. + * @param {Array|undefined} axoConfig.enabled_shipping_locations - The list of enabled shipping locations. + * @return {Array} The final list of allowed shipping locations. + */ +const useAllowedLocations = ( axoConfig ) => { + return useMemo( () => { + const enabledShippingLocations = + axoConfig.enabled_shipping_locations || []; + + return Array.isArray( enabledShippingLocations ) + ? enabledShippingLocations + : []; + }, [ axoConfig.enabled_shipping_locations ] ); +}; + +export default useAllowedLocations; diff --git a/modules/ppcp-axo-block/resources/js/hooks/useFastlaneSdk.js b/modules/ppcp-axo-block/resources/js/hooks/useFastlaneSdk.js index 7e68ccab1..ae93a67af 100644 --- a/modules/ppcp-axo-block/resources/js/hooks/useFastlaneSdk.js +++ b/modules/ppcp-axo-block/resources/js/hooks/useFastlaneSdk.js @@ -3,6 +3,7 @@ import { useSelect } from '@wordpress/data'; import Fastlane from '../../../../ppcp-axo/resources/js/Connection/Fastlane'; import { log } from '../../../../ppcp-axo/resources/js/Helper/Debug'; import { useDeleteEmptyKeys } from './useDeleteEmptyKeys'; +import useAllowedLocations from './useAllowedLocations'; import { STORE_NAME } from '../stores/axoStore'; /** @@ -30,6 +31,8 @@ const useFastlaneSdk = ( namespace, axoConfig, ppcpConfig ) => { return deleteEmptyKeys( configRef.current.axoConfig.style_options ); }, [ deleteEmptyKeys ] ); + const allowedLocations = useAllowedLocations( axoConfig ); + // Effect to initialize Fastlane SDK useEffect( () => { const initFastlane = async () => { @@ -52,6 +55,9 @@ const useFastlaneSdk = ( namespace, axoConfig, ppcpConfig ) => { await fastlane.connect( { locale: configRef.current.ppcpConfig.locale, styles: styleOptions, + shippingAddressOptions: { + allowedLocations, + }, } ); // Set locale (hardcoded to 'en_us' for now) @@ -66,7 +72,13 @@ const useFastlaneSdk = ( namespace, axoConfig, ppcpConfig ) => { }; initFastlane(); - }, [ fastlaneSdk, styleOptions, isPayPalLoaded, namespace ] ); + }, [ + fastlaneSdk, + styleOptions, + isPayPalLoaded, + namespace, + allowedLocations, + ] ); // Effect to update the config ref when configs change useEffect( () => { diff --git a/modules/ppcp-axo-block/services.php b/modules/ppcp-axo-block/services.php index 270b69260..35a253881 100644 --- a/modules/ppcp-axo-block/services.php +++ b/modules/ppcp-axo-block/services.php @@ -37,7 +37,8 @@ return array( $container->get( 'wcgateway.settings' ), $container->get( 'wcgateway.configuration.dcc' ), $container->get( 'onboarding.environment' ), - $container->get( 'wcgateway.url' ) + $container->get( 'wcgateway.url' ), + $container->get( 'axo.shipping-wc-enabled-locations' ) ); }, ); diff --git a/modules/ppcp-axo-block/src/AxoBlockPaymentMethod.php b/modules/ppcp-axo-block/src/AxoBlockPaymentMethod.php index 136db8233..e7d43608d 100644 --- a/modules/ppcp-axo-block/src/AxoBlockPaymentMethod.php +++ b/modules/ppcp-axo-block/src/AxoBlockPaymentMethod.php @@ -79,6 +79,13 @@ class AxoBlockPaymentMethod extends AbstractPaymentMethodType { */ private $wcgateway_module_url; + /** + * The list of WooCommerce enabled shipping locations. + * + * @var array + */ + private array $enabled_shipping_locations; + /** * AdvancedCardPaymentMethod constructor. * @@ -91,6 +98,7 @@ class AxoBlockPaymentMethod extends AbstractPaymentMethodType { * @param DCCGatewayConfiguration $dcc_configuration The DCC gateway settings. * @param Environment $environment The environment object. * @param string $wcgateway_module_url The WcGateway module URL. + * @param array $enabled_shipping_locations The list of WooCommerce enabled shipping locations. */ public function __construct( string $module_url, @@ -100,18 +108,19 @@ class AxoBlockPaymentMethod extends AbstractPaymentMethodType { Settings $settings, DCCGatewayConfiguration $dcc_configuration, Environment $environment, - string $wcgateway_module_url + string $wcgateway_module_url, + array $enabled_shipping_locations ) { - $this->name = AxoGateway::ID; - $this->module_url = $module_url; - $this->version = $version; - $this->gateway = $gateway; - $this->smart_button = $smart_button; - $this->settings = $settings; - $this->dcc_configuration = $dcc_configuration; - $this->environment = $environment; - $this->wcgateway_module_url = $wcgateway_module_url; - + $this->name = AxoGateway::ID; + $this->module_url = $module_url; + $this->version = $version; + $this->gateway = $gateway; + $this->smart_button = $smart_button; + $this->settings = $settings; + $this->dcc_configuration = $dcc_configuration; + $this->environment = $environment; + $this->wcgateway_module_url = $wcgateway_module_url; + $this->enabled_shipping_locations = $enabled_shipping_locations; } /** @@ -187,13 +196,13 @@ class AxoBlockPaymentMethod extends AbstractPaymentMethodType { } return array( - 'environment' => array( + 'environment' => array( 'is_sandbox' => $this->environment->current_environment() === 'sandbox', ), - 'widgets' => array( + 'widgets' => array( 'email' => 'render', ), - 'insights' => array( + 'insights' => array( 'enabled' => defined( 'WP_DEBUG' ) && WP_DEBUG, 'client_id' => ( $this->settings->has( 'client_id' ) ? $this->settings->get( 'client_id' ) : null ), 'session_id' => @@ -207,7 +216,8 @@ class AxoBlockPaymentMethod extends AbstractPaymentMethodType { : null, // Set to null if WC()->cart is null or get_total doesn't exist. ), ), - 'style_options' => array( + 'enabled_shipping_locations' => $this->enabled_shipping_locations, + 'style_options' => array( 'root' => array( 'backgroundColor' => $this->settings->has( 'axo_style_root_bg_color' ) ? $this->settings->get( 'axo_style_root_bg_color' ) : '', 'errorColor' => $this->settings->has( 'axo_style_root_error_color' ) ? $this->settings->get( 'axo_style_root_error_color' ) : '', @@ -226,23 +236,23 @@ class AxoBlockPaymentMethod extends AbstractPaymentMethodType { 'focusBorderColor' => $this->settings->has( 'axo_style_input_focus_border_color' ) ? $this->settings->get( 'axo_style_input_focus_border_color' ) : '', ), ), - 'name_on_card' => $this->dcc_configuration->show_name_on_card(), - 'woocommerce' => array( + 'name_on_card' => $this->dcc_configuration->show_name_on_card(), + 'woocommerce' => array( 'states' => array( 'US' => WC()->countries->get_states( 'US' ), 'CA' => WC()->countries->get_states( 'CA' ), ), ), - 'icons_directory' => esc_url( $this->wcgateway_module_url ) . 'assets/images/axo/', - 'module_url' => untrailingslashit( $this->module_url ), - 'ajax' => array( + 'icons_directory' => esc_url( $this->wcgateway_module_url ) . 'assets/images/axo/', + 'module_url' => untrailingslashit( $this->module_url ), + 'ajax' => array( 'frontend_logger' => array( 'endpoint' => \WC_AJAX::get_endpoint( FrontendLoggerEndpoint::ENDPOINT ), 'nonce' => wp_create_nonce( FrontendLoggerEndpoint::nonce() ), ), ), - 'logging_enabled' => $this->settings->has( 'logging_enabled' ) ? $this->settings->get( 'logging_enabled' ) : '', - 'wp_debug' => defined( 'WP_DEBUG' ) && WP_DEBUG, + 'logging_enabled' => $this->settings->has( 'logging_enabled' ) ? $this->settings->get( 'logging_enabled' ) : '', + 'wp_debug' => defined( 'WP_DEBUG' ) && WP_DEBUG, ); } } diff --git a/modules/ppcp-axo/resources/js/AxoManager.js b/modules/ppcp-axo/resources/js/AxoManager.js index 0bd204672..de9fcff5c 100644 --- a/modules/ppcp-axo/resources/js/AxoManager.js +++ b/modules/ppcp-axo/resources/js/AxoManager.js @@ -53,7 +53,7 @@ class AxoManager { cardView = null; constructor( namespace, axoConfig, ppcpConfig ) { - this.namespace = namespace; + this.namespace = namespace; this.axoConfig = axoConfig; this.ppcpConfig = ppcpConfig; @@ -85,6 +85,9 @@ class AxoManager { }, }; + this.enabledShippingLocations = + this.axoConfig.enabled_shipping_locations; + this.registerEventHandlers(); this.shippingView = new ShippingView( @@ -661,6 +664,9 @@ class AxoManager { await this.fastlane.connect( { locale: this.locale, styles: this.styles, + shippingAddressOptions: { + allowedLocations: this.enabledShippingLocations, + }, } ); this.fastlane.setLocale( 'en_us' ); diff --git a/modules/ppcp-axo/services.php b/modules/ppcp-axo/services.php index ebeb0f394..10062b290 100644 --- a/modules/ppcp-axo/services.php +++ b/modules/ppcp-axo/services.php @@ -22,14 +22,14 @@ use WooCommerce\PayPalCommerce\WcGateway\Helper\DCCGatewayConfiguration; return array( // If AXO can be configured. - 'axo.eligible' => static function ( ContainerInterface $container ): bool { + 'axo.eligible' => static function ( ContainerInterface $container ): bool { $apm_applies = $container->get( 'axo.helpers.apm-applies' ); assert( $apm_applies instanceof ApmApplies ); return $apm_applies->for_country_currency(); }, - 'axo.helpers.apm-applies' => static function ( ContainerInterface $container ) : ApmApplies { + 'axo.helpers.apm-applies' => static function ( ContainerInterface $container ) : ApmApplies { return new ApmApplies( $container->get( 'axo.supported-country-currency-matrix' ), $container->get( 'api.shop.currency.getter' ), @@ -37,16 +37,16 @@ return array( ); }, - 'axo.helpers.settings-notice-generator' => static function ( ContainerInterface $container ) : SettingsNoticeGenerator { + 'axo.helpers.settings-notice-generator' => static function ( ContainerInterface $container ) : SettingsNoticeGenerator { return new SettingsNoticeGenerator( $container->get( 'axo.fastlane-incompatible-plugin-names' ) ); }, // If AXO is configured and onboarded. - 'axo.available' => static function ( ContainerInterface $container ): bool { + 'axo.available' => static function ( ContainerInterface $container ): bool { return true; }, - 'axo.url' => static function ( ContainerInterface $container ): string { + 'axo.url' => static function ( ContainerInterface $container ): string { $path = realpath( __FILE__ ); if ( false === $path ) { return ''; @@ -57,7 +57,7 @@ return array( ); }, - 'axo.manager' => static function ( ContainerInterface $container ): AxoManager { + 'axo.manager' => static function ( ContainerInterface $container ): AxoManager { return new AxoManager( $container->get( 'axo.url' ), $container->get( 'ppcp.asset-version' ), @@ -67,11 +67,12 @@ return array( $container->get( 'wcgateway.settings.status' ), $container->get( 'api.shop.currency.getter' ), $container->get( 'woocommerce.logger.woocommerce' ), - $container->get( 'wcgateway.url' ) + $container->get( 'wcgateway.url' ), + $container->get( 'axo.shipping-wc-enabled-locations' ) ); }, - 'axo.gateway' => static function ( ContainerInterface $container ): AxoGateway { + 'axo.gateway' => static function ( ContainerInterface $container ): AxoGateway { return new AxoGateway( $container->get( 'wcgateway.settings.render' ), $container->get( 'wcgateway.settings' ), @@ -92,7 +93,7 @@ return array( /** * The matrix which countries and currency combinations can be used for AXO. */ - 'axo.supported-country-currency-matrix' => static function ( ContainerInterface $container ) : array { + 'axo.supported-country-currency-matrix' => static function ( ContainerInterface $container ) : array { /** * Returns which countries and currency combinations can be used for AXO. */ @@ -111,7 +112,7 @@ return array( ); }, - 'axo.settings-conflict-notice' => static function ( ContainerInterface $container ) : string { + 'axo.settings-conflict-notice' => static function ( ContainerInterface $container ) : string { $settings_notice_generator = $container->get( 'axo.helpers.settings-notice-generator' ); assert( $settings_notice_generator instanceof SettingsNoticeGenerator ); @@ -121,21 +122,21 @@ return array( return $settings_notice_generator->generate_settings_conflict_notice( $settings ); }, - 'axo.checkout-config-notice' => static function ( ContainerInterface $container ) : string { + 'axo.checkout-config-notice' => static function ( ContainerInterface $container ) : string { $settings_notice_generator = $container->get( 'axo.helpers.settings-notice-generator' ); assert( $settings_notice_generator instanceof SettingsNoticeGenerator ); return $settings_notice_generator->generate_checkout_notice(); }, - 'axo.incompatible-plugins-notice' => static function ( ContainerInterface $container ) : string { + 'axo.incompatible-plugins-notice' => static function ( ContainerInterface $container ) : string { $settings_notice_generator = $container->get( 'axo.helpers.settings-notice-generator' ); assert( $settings_notice_generator instanceof SettingsNoticeGenerator ); return $settings_notice_generator->generate_incompatible_plugins_notice(); }, - 'axo.smart-button-location-notice' => static function ( ContainerInterface $container ) : string { + 'axo.smart-button-location-notice' => static function ( ContainerInterface $container ) : string { $dcc_configuration = $container->get( 'wcgateway.configuration.dcc' ); assert( $dcc_configuration instanceof DCCGatewayConfiguration ); @@ -163,7 +164,7 @@ return array( return '

' . $notice_content . '

'; }, - 'axo.endpoint.frontend-logger' => static function ( ContainerInterface $container ): FrontendLoggerEndpoint { + 'axo.endpoint.frontend-logger' => static function ( ContainerInterface $container ): FrontendLoggerEndpoint { return new FrontendLoggerEndpoint( $container->get( 'button.request-data' ), $container->get( 'woocommerce.logger.woocommerce' ) @@ -175,7 +176,7 @@ return array( * * @returns array */ - 'axo.fastlane-incompatible-plugins' => static function () : array { + 'axo.fastlane-incompatible-plugins' => static function () : array { /** * Filters the list of Fastlane incompatible plugins. */ @@ -230,7 +231,7 @@ return array( ); }, - 'axo.fastlane-incompatible-plugin-names' => static function ( ContainerInterface $container ) : array { + 'axo.fastlane-incompatible-plugin-names' => static function ( ContainerInterface $container ) : array { $incompatible_plugins = $container->get( 'axo.fastlane-incompatible-plugins' ); $active_plugins_list = array_filter( @@ -251,4 +252,45 @@ return array( $active_plugins_list ); }, + + 'axo.shipping-wc-enabled-locations' => static function ( ContainerInterface $container ): array { + $default_zone = new \WC_Shipping_Zone( 0 ); + + $is_method_enabled = fn( $method) => $method->enabled === 'yes'; + + $is_default_zone_enabled = ! empty( + array_filter( + $default_zone->get_shipping_methods(), + $is_method_enabled + ) + ); + + if ( $is_default_zone_enabled ) { + return array(); + } + + $shipping_zones = \WC_Shipping_Zones::get_zones(); + + $get_zone_locations = fn($zone) => + !empty(array_filter($zone->get_shipping_methods(), $is_method_enabled)) + ? array_map( + fn($location) => $location->code, + $zone->get_zone_locations() + ) + : []; + + $enabled_locations = array_unique( + array_merge( + ...array_map( + $get_zone_locations, + array_map( + fn( $zone) => $zone instanceof \WC_Shipping_Zone ? $zone : new \WC_Shipping_Zone( $zone['id'] ), + $shipping_zones + ) + ) + ) + ); + + return $enabled_locations; + }, ); diff --git a/modules/ppcp-axo/src/Assets/AxoManager.php b/modules/ppcp-axo/src/Assets/AxoManager.php index 6fa196719..f0ad8b012 100644 --- a/modules/ppcp-axo/src/Assets/AxoManager.php +++ b/modules/ppcp-axo/src/Assets/AxoManager.php @@ -87,6 +87,13 @@ class AxoManager { */ private $wcgateway_module_url; + /** + * The list of WooCommerce enabled shipping locations. + * + * @var array + */ + private array $enabled_shipping_locations; + /** * AxoManager constructor. * @@ -99,6 +106,7 @@ class AxoManager { * @param CurrencyGetter $currency The getter of the 3-letter currency code of the shop. * @param LoggerInterface $logger The logger. * @param string $wcgateway_module_url The WcGateway module URL. + * @param array $enabled_shipping_locations The list of WooCommerce enabled shipping locations. */ public function __construct( string $module_url, @@ -109,18 +117,20 @@ class AxoManager { SettingsStatus $settings_status, CurrencyGetter $currency, LoggerInterface $logger, - string $wcgateway_module_url + string $wcgateway_module_url, + array $enabled_shipping_locations ) { - $this->module_url = $module_url; - $this->version = $version; - $this->session_handler = $session_handler; - $this->settings = $settings; - $this->environment = $environment; - $this->settings_status = $settings_status; - $this->currency = $currency; - $this->logger = $logger; - $this->wcgateway_module_url = $wcgateway_module_url; + $this->module_url = $module_url; + $this->version = $version; + $this->session_handler = $session_handler; + $this->settings = $settings; + $this->environment = $environment; + $this->settings_status = $settings_status; + $this->currency = $currency; + $this->logger = $logger; + $this->wcgateway_module_url = $wcgateway_module_url; + $this->enabled_shipping_locations = $enabled_shipping_locations; } /** @@ -163,13 +173,13 @@ class AxoManager { */ private function script_data() { return array( - 'environment' => array( + 'environment' => array( 'is_sandbox' => $this->environment->current_environment() === 'sandbox', ), - 'widgets' => array( + 'widgets' => array( 'email' => 'render', ), - 'insights' => array( + 'insights' => array( 'enabled' => defined( 'WP_DEBUG' ) && WP_DEBUG, 'client_id' => ( $this->settings->has( 'client_id' ) ? $this->settings->get( 'client_id' ) : null ), 'session_id' => @@ -183,7 +193,8 @@ class AxoManager { 'value' => WC()->cart->get_total( 'numeric' ), ), ), - 'style_options' => array( + 'enabled_shipping_locations' => $this->enabled_shipping_locations, + 'style_options' => array( 'root' => array( 'backgroundColor' => $this->settings->has( 'axo_style_root_bg_color' ) ? $this->settings->get( 'axo_style_root_bg_color' ) : '', 'errorColor' => $this->settings->has( 'axo_style_root_error_color' ) ? $this->settings->get( 'axo_style_root_error_color' ) : '', @@ -202,24 +213,24 @@ class AxoManager { 'focusBorderColor' => $this->settings->has( 'axo_style_input_focus_border_color' ) ? $this->settings->get( 'axo_style_input_focus_border_color' ) : '', ), ), - 'name_on_card' => $this->settings->has( 'axo_name_on_card' ) ? $this->settings->get( 'axo_name_on_card' ) : '', - 'woocommerce' => array( + 'name_on_card' => $this->settings->has( 'axo_name_on_card' ) ? $this->settings->get( 'axo_name_on_card' ) : '', + 'woocommerce' => array( 'states' => array( 'US' => WC()->countries->get_states( 'US' ), 'CA' => WC()->countries->get_states( 'CA' ), ), ), - 'icons_directory' => esc_url( $this->wcgateway_module_url ) . 'assets/images/axo/', - 'module_url' => untrailingslashit( $this->module_url ), - 'ajax' => array( + 'icons_directory' => esc_url( $this->wcgateway_module_url ) . 'assets/images/axo/', + 'module_url' => untrailingslashit( $this->module_url ), + 'ajax' => array( 'frontend_logger' => array( 'endpoint' => \WC_AJAX::get_endpoint( FrontendLoggerEndpoint::ENDPOINT ), 'nonce' => wp_create_nonce( FrontendLoggerEndpoint::nonce() ), ), ), - 'logging_enabled' => $this->settings->has( 'logging_enabled' ) ? $this->settings->get( 'logging_enabled' ) : '', - 'wp_debug' => defined( 'WP_DEBUG' ) && WP_DEBUG, - 'billing_email_button_text' => __( 'Continue', 'woocommerce-paypal-payments' ), + 'logging_enabled' => $this->settings->has( 'logging_enabled' ) ? $this->settings->get( 'logging_enabled' ) : '', + 'wp_debug' => defined( 'WP_DEBUG' ) && WP_DEBUG, + 'billing_email_button_text' => __( 'Continue', 'woocommerce-paypal-payments' ), ); } From 763d4a648211de9a421690131ae1c134d3a3a46b Mon Sep 17 00:00:00 2001 From: Daniel Dudzic Date: Fri, 18 Oct 2024 10:44:02 +0200 Subject: [PATCH 05/54] Fix Psalm errors --- modules/ppcp-axo/services.php | 49 ++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/modules/ppcp-axo/services.php b/modules/ppcp-axo/services.php index 10062b290..4e7748032 100644 --- a/modules/ppcp-axo/services.php +++ b/modules/ppcp-axo/services.php @@ -22,14 +22,14 @@ use WooCommerce\PayPalCommerce\WcGateway\Helper\DCCGatewayConfiguration; return array( // If AXO can be configured. - 'axo.eligible' => static function ( ContainerInterface $container ): bool { + 'axo.eligible' => static function ( ContainerInterface $container ): bool { $apm_applies = $container->get( 'axo.helpers.apm-applies' ); assert( $apm_applies instanceof ApmApplies ); return $apm_applies->for_country_currency(); }, - 'axo.helpers.apm-applies' => static function ( ContainerInterface $container ) : ApmApplies { + 'axo.helpers.apm-applies' => static function ( ContainerInterface $container ) : ApmApplies { return new ApmApplies( $container->get( 'axo.supported-country-currency-matrix' ), $container->get( 'api.shop.currency.getter' ), @@ -37,16 +37,16 @@ return array( ); }, - 'axo.helpers.settings-notice-generator' => static function ( ContainerInterface $container ) : SettingsNoticeGenerator { + 'axo.helpers.settings-notice-generator' => static function ( ContainerInterface $container ) : SettingsNoticeGenerator { return new SettingsNoticeGenerator( $container->get( 'axo.fastlane-incompatible-plugin-names' ) ); }, // If AXO is configured and onboarded. - 'axo.available' => static function ( ContainerInterface $container ): bool { + 'axo.available' => static function ( ContainerInterface $container ): bool { return true; }, - 'axo.url' => static function ( ContainerInterface $container ): string { + 'axo.url' => static function ( ContainerInterface $container ): string { $path = realpath( __FILE__ ); if ( false === $path ) { return ''; @@ -57,7 +57,7 @@ return array( ); }, - 'axo.manager' => static function ( ContainerInterface $container ): AxoManager { + 'axo.manager' => static function ( ContainerInterface $container ): AxoManager { return new AxoManager( $container->get( 'axo.url' ), $container->get( 'ppcp.asset-version' ), @@ -72,7 +72,7 @@ return array( ); }, - 'axo.gateway' => static function ( ContainerInterface $container ): AxoGateway { + 'axo.gateway' => static function ( ContainerInterface $container ): AxoGateway { return new AxoGateway( $container->get( 'wcgateway.settings.render' ), $container->get( 'wcgateway.settings' ), @@ -93,7 +93,7 @@ return array( /** * The matrix which countries and currency combinations can be used for AXO. */ - 'axo.supported-country-currency-matrix' => static function ( ContainerInterface $container ) : array { + 'axo.supported-country-currency-matrix' => static function ( ContainerInterface $container ) : array { /** * Returns which countries and currency combinations can be used for AXO. */ @@ -112,7 +112,7 @@ return array( ); }, - 'axo.settings-conflict-notice' => static function ( ContainerInterface $container ) : string { + 'axo.settings-conflict-notice' => static function ( ContainerInterface $container ) : string { $settings_notice_generator = $container->get( 'axo.helpers.settings-notice-generator' ); assert( $settings_notice_generator instanceof SettingsNoticeGenerator ); @@ -122,21 +122,21 @@ return array( return $settings_notice_generator->generate_settings_conflict_notice( $settings ); }, - 'axo.checkout-config-notice' => static function ( ContainerInterface $container ) : string { + 'axo.checkout-config-notice' => static function ( ContainerInterface $container ) : string { $settings_notice_generator = $container->get( 'axo.helpers.settings-notice-generator' ); assert( $settings_notice_generator instanceof SettingsNoticeGenerator ); return $settings_notice_generator->generate_checkout_notice(); }, - 'axo.incompatible-plugins-notice' => static function ( ContainerInterface $container ) : string { + 'axo.incompatible-plugins-notice' => static function ( ContainerInterface $container ) : string { $settings_notice_generator = $container->get( 'axo.helpers.settings-notice-generator' ); assert( $settings_notice_generator instanceof SettingsNoticeGenerator ); return $settings_notice_generator->generate_incompatible_plugins_notice(); }, - 'axo.smart-button-location-notice' => static function ( ContainerInterface $container ) : string { + 'axo.smart-button-location-notice' => static function ( ContainerInterface $container ) : string { $dcc_configuration = $container->get( 'wcgateway.configuration.dcc' ); assert( $dcc_configuration instanceof DCCGatewayConfiguration ); @@ -164,7 +164,7 @@ return array( return '

' . $notice_content . '

'; }, - 'axo.endpoint.frontend-logger' => static function ( ContainerInterface $container ): FrontendLoggerEndpoint { + 'axo.endpoint.frontend-logger' => static function ( ContainerInterface $container ): FrontendLoggerEndpoint { return new FrontendLoggerEndpoint( $container->get( 'button.request-data' ), $container->get( 'woocommerce.logger.woocommerce' ) @@ -176,7 +176,7 @@ return array( * * @returns array */ - 'axo.fastlane-incompatible-plugins' => static function () : array { + 'axo.fastlane-incompatible-plugins' => static function () : array { /** * Filters the list of Fastlane incompatible plugins. */ @@ -231,7 +231,7 @@ return array( ); }, - 'axo.fastlane-incompatible-plugin-names' => static function ( ContainerInterface $container ) : array { + 'axo.fastlane-incompatible-plugin-names' => static function ( ContainerInterface $container ) : array { $incompatible_plugins = $container->get( 'axo.fastlane-incompatible-plugins' ); $active_plugins_list = array_filter( @@ -253,10 +253,10 @@ return array( ); }, - 'axo.shipping-wc-enabled-locations' => static function ( ContainerInterface $container ): array { + 'axo.shipping-wc-enabled-locations' => static function ( ContainerInterface $container ): array { $default_zone = new \WC_Shipping_Zone( 0 ); - $is_method_enabled = fn( $method) => $method->enabled === 'yes'; + $is_method_enabled = fn( \WC_Shipping_Method $method): bool => $method->enabled === 'yes'; $is_default_zone_enabled = ! empty( array_filter( @@ -271,20 +271,21 @@ return array( $shipping_zones = \WC_Shipping_Zones::get_zones(); - $get_zone_locations = fn($zone) => - !empty(array_filter($zone->get_shipping_methods(), $is_method_enabled)) + $get_zone_locations = fn( \WC_Shipping_Zone $zone): array => + ! empty( array_filter( $zone->get_shipping_methods(), $is_method_enabled ) ) ? array_map( - fn($location) => $location->code, - $zone->get_zone_locations() - ) - : []; + fn( object $location): string => $location->code, + $zone->get_zone_locations() + ) + : array(); $enabled_locations = array_unique( array_merge( ...array_map( $get_zone_locations, array_map( - fn( $zone) => $zone instanceof \WC_Shipping_Zone ? $zone : new \WC_Shipping_Zone( $zone['id'] ), + fn( $zone): \WC_Shipping_Zone => + $zone instanceof \WC_Shipping_Zone ? $zone : new \WC_Shipping_Zone( $zone['id'] ), $shipping_zones ) ) From bf52b48ae8d31dbb1bb8872f5da2e3a71b5f0c66 Mon Sep 17 00:00:00 2001 From: Daniel Dudzic Date: Mon, 21 Oct 2024 11:05:12 +0200 Subject: [PATCH 06/54] Axo: Remove the submit button when Fastlane is disabled --- modules/ppcp-axo/src/AxoModule.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/ppcp-axo/src/AxoModule.php b/modules/ppcp-axo/src/AxoModule.php index a0470aeac..512f61cb2 100644 --- a/modules/ppcp-axo/src/AxoModule.php +++ b/modules/ppcp-axo/src/AxoModule.php @@ -222,8 +222,10 @@ class AxoModule implements ServiceModule, ExtendingModule, ExecutableModule { // Render submit button. add_action( $manager->checkout_button_renderer_hook(), - static function () use ( $c, $manager ) { - $manager->render_checkout_button(); + static function () use ( $c, $manager, $module ) { + if ( $module->should_render_fastlane( $c ) ) { + $manager->render_checkout_button(); + } } ); From cc3e52046b9168a441157704faaea7f3c9d7f72d Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Fri, 25 Oct 2024 12:34:15 +0200 Subject: [PATCH 07/54] =?UTF-8?q?=F0=9F=A7=90=20Add=20console=20tool=20to?= =?UTF-8?q?=20dump=20the=20store=20contents?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ppcp-settings/resources/js/data/store.js | 19 +++++++++++++++++++ modules/ppcp-settings/src/SettingsModule.php | 1 + 2 files changed, 20 insertions(+) diff --git a/modules/ppcp-settings/resources/js/data/store.js b/modules/ppcp-settings/resources/js/data/store.js index f5a1a4b13..f416cb94f 100644 --- a/modules/ppcp-settings/resources/js/data/store.js +++ b/modules/ppcp-settings/resources/js/data/store.js @@ -27,4 +27,23 @@ export const initStore = () => { } ); register( store ); + + /* eslint-disable no-console */ + // Provide a debug tool to inspect the Redux store via the JS console. + if ( window.ppcpSettings?.debug && console?.groupCollapsed ) { + window.ppcpSettings.dumpStore = () => { + const storeSelector = `wp.data.select('${ STORE_NAME }')`; + console.group( `[STORE] ${ storeSelector }` ); + + const storeState = wp.data.select( STORE_NAME ); + Object.keys( selectors ).forEach( ( selector ) => { + console.groupCollapsed( `[SELECTOR] .${ selector }()` ); + console.table( storeState[ selector ]() ); + console.groupEnd(); + } ); + + console.groupEnd(); + }; + } + /* eslint-enable no-console */ }; diff --git a/modules/ppcp-settings/src/SettingsModule.php b/modules/ppcp-settings/src/SettingsModule.php index fdc286521..3533c2394 100644 --- a/modules/ppcp-settings/src/SettingsModule.php +++ b/modules/ppcp-settings/src/SettingsModule.php @@ -86,6 +86,7 @@ class SettingsModule implements ServiceModule, ExecutableModule { 'assets' => array( 'imagesUrl' => $module_url . '/images/', ), + 'debug' => defined( 'WP_DEBUG' ) && WP_DEBUG, ) ); } From 3c577c8b2d78823edf93c0c22eab20fc5fc2edd2 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Fri, 25 Oct 2024 13:01:01 +0200 Subject: [PATCH 08/54] =?UTF-8?q?=E2=9C=A8=20Add=20new=20eligibility=20fla?= =?UTF-8?q?gs=20to=20Redux=20store?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/js/data/onboarding/reducer.js | 3 + .../src/Data/OnboardingProfile.php | 57 +++++++++++++++++++ .../src/Endpoint/OnboardingRestEndpoint.php | 22 +++++-- 3 files changed, 77 insertions(+), 5 deletions(-) diff --git a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js index 954801995..e37d145b0 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js @@ -8,6 +8,9 @@ const defaultState = { useManualConnection: false, clientId: '', clientSecret: '', + canUseCasualSelling: false, + canUseVaulting: false, + canUseCardPayments: false, }, }; diff --git a/modules/ppcp-settings/src/Data/OnboardingProfile.php b/modules/ppcp-settings/src/Data/OnboardingProfile.php index 9cfd29d46..a59960af7 100644 --- a/modules/ppcp-settings/src/Data/OnboardingProfile.php +++ b/modules/ppcp-settings/src/Data/OnboardingProfile.php @@ -37,6 +37,9 @@ class OnboardingProfile extends AbstractDataModel { 'use_manual_connection' => false, 'client_id' => '', 'client_secret' => '', + 'can_use_casual_selling' => false, + 'can_use_vaulting' => false, + 'can_use_card_payments' => false, ); } @@ -131,4 +134,58 @@ class OnboardingProfile extends AbstractDataModel { public function set_client_secret( string $client_secret ) : void { $this->data['client_secret'] = sanitize_text_field( $client_secret ); } + + /** + * Gets whether casual selling can be used. + * + * @return bool + */ + public function get_can_use_casual_selling() : bool { + return (bool) $this->data['can_use_casual_selling']; + } + + /** + * Sets whether casual selling can be used. + * + * @param bool $can_use_casual_selling Whether casual selling can be used. + */ + public function set_can_use_casual_selling( bool $can_use_casual_selling ) : void { + $this->data['can_use_casual_selling'] = $can_use_casual_selling; + } + + /** + * Gets whether vaulting can be used. + * + * @return bool + */ + public function get_can_use_vaulting() : bool { + return (bool) $this->data['can_use_vaulting']; + } + + /** + * Sets whether vaulting can be used. + * + * @param bool $can_use_vaulting Whether vaulting can be used. + */ + public function set_can_use_vaulting( bool $can_use_vaulting ) : void { + $this->data['can_use_vaulting'] = $can_use_vaulting; + } + + /** + * Gets whether Credit Card payments can be used. + * + * @return bool + */ + public function get_can_use_card_payments() : bool { + return (bool) $this->data['can_use_card_payments']; + } + + /** + * Sets whether Credit Card payments can be used. + * + * @param bool $can_use_card_payments Whether Credit Card payments can be used. + */ + public function set_can_use_card_payments( bool $can_use_card_payments ) : void { + $this->data['can_use_card_payments'] = $can_use_card_payments; + } } diff --git a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php index dd8f19e67..eff234218 100644 --- a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php @@ -41,26 +41,38 @@ class OnboardingRestEndpoint extends RestEndpoint { * @var array */ private array $field_map = array( - 'step' => array( + 'step' => array( 'js_name' => 'step', 'sanitize' => 'to_number', ), - 'use_sandbox' => array( + 'use_sandbox' => array( 'js_name' => 'useSandbox', 'sanitize' => 'to_boolean', ), - 'use_manual_connection' => array( + 'use_manual_connection' => array( 'js_name' => 'useManualConnection', 'sanitize' => 'to_boolean', ), - 'client_id' => array( + 'client_id' => array( 'js_name' => 'clientId', 'sanitize' => 'sanitize_text_field', ), - 'client_secret' => array( + 'client_secret' => array( 'js_name' => 'clientSecret', 'sanitize' => 'sanitize_text_field', ), + 'can_use_casual_selling' => array( + 'js_name' => 'canUseCasualSelling', + 'sanitize' => 'to_boolean', + ), + 'can_use_vaulting' => array( + 'js_name' => 'canUseVaulting', + 'sanitize' => 'to_boolean', + ), + 'can_use_card_payments' => array( + 'js_name' => 'canUseCardPayments', + 'sanitize' => 'to_boolean', + ), ); /** From 7b596dbea5cda723ba1c9a895ab9f5b4191b8075 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Fri, 25 Oct 2024 13:02:22 +0200 Subject: [PATCH 09/54] =?UTF-8?q?=F0=9F=91=94=20Resolve=20eligibility=20fl?= =?UTF-8?q?ags=20on=20server=20side?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/services.php | 15 ++++++- .../src/Data/OnboardingProfile.php | 39 +++++++++++++++---- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/modules/ppcp-settings/services.php b/modules/ppcp-settings/services.php index c8bb64144..f34257f79 100644 --- a/modules/ppcp-settings/services.php +++ b/modules/ppcp-settings/services.php @@ -26,7 +26,20 @@ return array( ); }, 'settings.data.onboarding' => static function ( ContainerInterface $container ) : OnboardingProfile { - return new OnboardingProfile(); + $can_use_casual_selling = false; + $can_use_vaulting = $container->has( 'save-payment-methods.eligible' ) && $container->get( 'save-payment-methods.eligible' ); + $can_use_card_payments = $container->has( 'card-fields.eligible' ) && $container->get( 'card-fields.eligible' ); + + // Card payments are disabled for this plugin when WooPayments is active. + if ( class_exists( '\WC_Payments' ) ) { + $can_use_card_payments = false; + } + + return new OnboardingProfile( + $can_use_casual_selling, + $can_use_vaulting, + $can_use_card_payments + ); }, 'settings.rest.onboarding' => static function ( ContainerInterface $container ) : OnboardingRestEndpoint { return new OnboardingRestEndpoint( $container->get( 'settings.data.onboarding' ) ); diff --git a/modules/ppcp-settings/src/Data/OnboardingProfile.php b/modules/ppcp-settings/src/Data/OnboardingProfile.php index a59960af7..c30dd7301 100644 --- a/modules/ppcp-settings/src/Data/OnboardingProfile.php +++ b/modules/ppcp-settings/src/Data/OnboardingProfile.php @@ -9,12 +9,16 @@ declare( strict_types = 1 ); namespace WooCommerce\PayPalCommerce\Settings\Data; +use RuntimeException; + /** * Class OnboardingProfile * * This class serves as a container for managing the onboarding profile details - * within the WooCommerce PayPal Commerce plugin. It provides methods to retrieve - * and save the onboarding profile data using WordPress options. + * within the WooCommerce PayPal Commerce plugin. + * + * This profile impacts the onboarding wizard and help to apply default + * settings. The details here should not be used outside the onboarding process. */ class OnboardingProfile extends AbstractDataModel { @@ -25,6 +29,27 @@ class OnboardingProfile extends AbstractDataModel { */ protected const OPTION_KEY = 'woocommerce-ppcp-data-onboarding'; + /** + * Constructor. + * + * @param bool $can_use_casual_selling Whether casual selling is enabled in the store's country. + * @param bool $can_use_vaulting Whether vaulting is enabled in the store's country. + * @param bool $can_use_card_payments Whether credit card payments are possible. + * + * @throws RuntimeException If the OPTION_KEY is not defined in the child class. + */ + public function __construct( + bool $can_use_casual_selling = false, + bool $can_use_vaulting = false, + bool $can_use_card_payments = false + ) { + parent::__construct(); + + $this->set_can_use_casual_selling( $can_use_casual_selling ); + $this->set_can_use_vaulting( $can_use_vaulting ); + $this->set_can_use_card_payments( $can_use_card_payments ); + } + /** * Get default values for the model. * @@ -32,11 +57,11 @@ class OnboardingProfile extends AbstractDataModel { */ protected function get_defaults() : array { return array( - 'step' => 0, - 'use_sandbox' => false, - 'use_manual_connection' => false, - 'client_id' => '', - 'client_secret' => '', + 'step' => 0, + 'use_sandbox' => false, + 'use_manual_connection' => false, + 'client_id' => '', + 'client_secret' => '', 'can_use_casual_selling' => false, 'can_use_vaulting' => false, 'can_use_card_payments' => false, From 3b274d02afba616a23b3d2718048791aa7caabcb Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Fri, 25 Oct 2024 13:29:21 +0200 Subject: [PATCH 10/54] =?UTF-8?q?=F0=9F=91=94=20Make=20eligibility=20flags?= =?UTF-8?q?=20read-only?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Data/AbstractDataModel.php | 7 ++-- .../src/Data/OnboardingProfile.php | 39 +++---------------- .../src/Endpoint/OnboardingRestEndpoint.php | 6 +-- .../src/Endpoint/RestEndpoint.php | 7 +++- 4 files changed, 17 insertions(+), 42 deletions(-) diff --git a/modules/ppcp-settings/src/Data/AbstractDataModel.php b/modules/ppcp-settings/src/Data/AbstractDataModel.php index d9cd0fbae..1d711cbe5 100644 --- a/modules/ppcp-settings/src/Data/AbstractDataModel.php +++ b/modules/ppcp-settings/src/Data/AbstractDataModel.php @@ -57,8 +57,9 @@ abstract class AbstractDataModel { * Loads the model data from WordPress options. */ public function load() : void { - $saved_data = get_option( static::OPTION_KEY, array() ); - $this->data = array_merge( $this->data, $saved_data ); + $saved_data = get_option( static::OPTION_KEY, array() ); + $filtered_data = array_intersect_key( $saved_data, $this->data ); + $this->data = array_merge( $this->data, $filtered_data ); } /** @@ -91,8 +92,6 @@ abstract class AbstractDataModel { $setter = "set_$key"; if ( method_exists( $this, $setter ) ) { $this->$setter( $value ); - } else { - $this->data[ $key ] = $value; } } } diff --git a/modules/ppcp-settings/src/Data/OnboardingProfile.php b/modules/ppcp-settings/src/Data/OnboardingProfile.php index c30dd7301..c9a45ead0 100644 --- a/modules/ppcp-settings/src/Data/OnboardingProfile.php +++ b/modules/ppcp-settings/src/Data/OnboardingProfile.php @@ -45,9 +45,9 @@ class OnboardingProfile extends AbstractDataModel { ) { parent::__construct(); - $this->set_can_use_casual_selling( $can_use_casual_selling ); - $this->set_can_use_vaulting( $can_use_vaulting ); - $this->set_can_use_card_payments( $can_use_card_payments ); + $this->data['can_use_casual_selling'] = $can_use_casual_selling; + $this->data['can_use_vaulting'] = $can_use_vaulting; + $this->data['can_use_card_payments'] = $can_use_card_payments; } /** @@ -62,9 +62,9 @@ class OnboardingProfile extends AbstractDataModel { 'use_manual_connection' => false, 'client_id' => '', 'client_secret' => '', - 'can_use_casual_selling' => false, - 'can_use_vaulting' => false, - 'can_use_card_payments' => false, + 'can_use_casual_selling' => null, + 'can_use_vaulting' => null, + 'can_use_card_payments' => null, ); } @@ -169,15 +169,6 @@ class OnboardingProfile extends AbstractDataModel { return (bool) $this->data['can_use_casual_selling']; } - /** - * Sets whether casual selling can be used. - * - * @param bool $can_use_casual_selling Whether casual selling can be used. - */ - public function set_can_use_casual_selling( bool $can_use_casual_selling ) : void { - $this->data['can_use_casual_selling'] = $can_use_casual_selling; - } - /** * Gets whether vaulting can be used. * @@ -187,15 +178,6 @@ class OnboardingProfile extends AbstractDataModel { return (bool) $this->data['can_use_vaulting']; } - /** - * Sets whether vaulting can be used. - * - * @param bool $can_use_vaulting Whether vaulting can be used. - */ - public function set_can_use_vaulting( bool $can_use_vaulting ) : void { - $this->data['can_use_vaulting'] = $can_use_vaulting; - } - /** * Gets whether Credit Card payments can be used. * @@ -204,13 +186,4 @@ class OnboardingProfile extends AbstractDataModel { public function get_can_use_card_payments() : bool { return (bool) $this->data['can_use_card_payments']; } - - /** - * Sets whether Credit Card payments can be used. - * - * @param bool $can_use_card_payments Whether Credit Card payments can be used. - */ - public function set_can_use_card_payments( bool $can_use_card_payments ) : void { - $this->data['can_use_card_payments'] = $can_use_card_payments; - } } diff --git a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php index eff234218..e5a38af5d 100644 --- a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php @@ -63,15 +63,15 @@ class OnboardingRestEndpoint extends RestEndpoint { ), 'can_use_casual_selling' => array( 'js_name' => 'canUseCasualSelling', - 'sanitize' => 'to_boolean', + 'sanitize' => 'read_only', ), 'can_use_vaulting' => array( 'js_name' => 'canUseVaulting', - 'sanitize' => 'to_boolean', + 'sanitize' => 'read_only', ), 'can_use_card_payments' => array( 'js_name' => 'canUseCardPayments', - 'sanitize' => 'to_boolean', + 'sanitize' => 'read_only', ), ); diff --git a/modules/ppcp-settings/src/Endpoint/RestEndpoint.php b/modules/ppcp-settings/src/Endpoint/RestEndpoint.php index 63e543d59..9bb98dfac 100644 --- a/modules/ppcp-settings/src/Endpoint/RestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/RestEndpoint.php @@ -53,7 +53,11 @@ class RestEndpoint extends WC_REST_Controller { $source_key = $details['js_name'] ?? ''; $sanitation_cb = $details['sanitize'] ?? null; - if ( ! $source_key || ! isset( $params[ $source_key ] ) ) { + if ( + ! $source_key + || ! isset( $params[ $source_key ] ) + || 'read_only' === $sanitation_cb + ) { continue; } @@ -121,5 +125,4 @@ class RestEndpoint extends WC_REST_Controller { protected function to_number( $value ) { return $value !== null ? ( is_numeric( $value ) ? $value + 0 : null ) : null; } - } From 3c31297e10d6c68d7182ed10a8977bfa1643ca0e Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 15:44:27 +0100 Subject: [PATCH 11/54] =?UTF-8?q?=E2=9C=A8=20New=20utility=20method=20to?= =?UTF-8?q?=20determine=20visible=20tabs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/Components/Screens/Settings.js | 2 + .../resources/js/Components/Screens/tabs.js | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 modules/ppcp-settings/resources/js/Components/Screens/tabs.js diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Settings.js b/modules/ppcp-settings/resources/js/Components/Screens/Settings.js index ee112096d..9bbf41bb7 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Settings.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Settings.js @@ -1,9 +1,11 @@ import Onboarding from './Onboarding/Onboarding'; import { useState } from '@wordpress/element'; import Dashboard from './Dashboard/Dashboard'; +import { getSettingsTabs } from './tabs'; const Settings = () => { const [ onboarded, setOnboarded ] = useState( true ); + const tabs = getSettingsTabs(); return <>{ onboarded ? : }; }; diff --git a/modules/ppcp-settings/resources/js/Components/Screens/tabs.js b/modules/ppcp-settings/resources/js/Components/Screens/tabs.js new file mode 100644 index 000000000..dea1869d1 --- /dev/null +++ b/modules/ppcp-settings/resources/js/Components/Screens/tabs.js @@ -0,0 +1,42 @@ +import { __ } from '@wordpress/i18n'; +import Dashboard from './Dashboard/Dashboard'; +import Onboarding from './Onboarding/Onboarding'; + +export const getSettingsTabs = () => { + const tabs = []; + + // TODO: Use the store to find out if onboarding is complete + + if ( 0 ) { + tabs.push( { + name: 'onboarding', + component: , + } ); + } + + if ( 1 ) { + tabs.push( { + name: 'dashboard', + title: __( 'Dashboard', 'woocommerce-paypal-payments' ), + component: , + } ); + + tabs.push( { + name: 'payment-methods', + title: __( 'Payment Methods', 'woocommerce-paypal-payments' ), + component: , + } ); + + tabs.push( { + name: 'settings', + title: __( 'Settings', 'woocommerce-paypal-payments' ), + } ); + + tabs.push( { + name: 'styling', + title: __( 'Styling', 'woocommerce-paypal-payments' ), + } ); + } + + return tabs; +}; From 7ecbd6a1ca0eb904dbfa855843fd2a689d6ff0d1 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 15:47:53 +0100 Subject: [PATCH 12/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Integrate=20the=20ne?= =?UTF-8?q?w=20TabNavigation=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReusableComponents/TabNavigation.js | 44 +++++-------------- .../Components/Screens/Dashboard/Dashboard.js | 6 +-- .../js/Components/Screens/Settings.js | 7 +-- 3 files changed, 13 insertions(+), 44 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js index 487847e72..ff20c66e8 100644 --- a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js +++ b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js @@ -1,43 +1,19 @@ import { TabPanel } from '@wordpress/components'; -import { __ } from '@wordpress/i18n'; -const onSelect = ( tabName ) => { - console.log( 'Selecting tab', tabName ); -}; +const TabNavigation = ( { tabs } ) => { + + const updatePanelUri = ( tabName ) => { + }; -const TabNavigation = () => { return ( - { ( tab ) =>

{ tab.title }

} + { ( tab ) => { + return tab.component || <>{ tab.title ?? tab.name }; + } }
); }; diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Dashboard/Dashboard.js b/modules/ppcp-settings/resources/js/Components/Screens/Dashboard/Dashboard.js index 62dd76cf6..2c095e88b 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Dashboard/Dashboard.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Dashboard/Dashboard.js @@ -1,11 +1,7 @@ import TabNavigation from '../../ReusableComponents/TabNavigation'; const Dashboard = () => { - return ( -
- -
- ); + return
Settings Page
; }; export default Dashboard; diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Settings.js b/modules/ppcp-settings/resources/js/Components/Screens/Settings.js index 9bbf41bb7..0a233c353 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Settings.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Settings.js @@ -1,13 +1,10 @@ -import Onboarding from './Onboarding/Onboarding'; -import { useState } from '@wordpress/element'; -import Dashboard from './Dashboard/Dashboard'; +import TabNavigation from '../ReusableComponents/TabNavigation'; import { getSettingsTabs } from './tabs'; const Settings = () => { - const [ onboarded, setOnboarded ] = useState( true ); const tabs = getSettingsTabs(); - return <>{ onboarded ? : }; + return ; }; export default Settings; From be216f3e50748913e8086d61978ef1ee30fe8933 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 15:48:36 +0100 Subject: [PATCH 13/54] =?UTF-8?q?=F0=9F=92=84=20Style=20the=20new=20TabNav?= =?UTF-8?q?igation=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/css/_variables.scss | 1 + .../reusable-components/_tab-navigation.scss | 18 ++++++++++++++++++ modules/ppcp-settings/resources/css/style.scss | 1 + 3 files changed, 20 insertions(+) create mode 100644 modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss diff --git a/modules/ppcp-settings/resources/css/_variables.scss b/modules/ppcp-settings/resources/css/_variables.scss index 4e5f07bc5..2c967ae7c 100644 --- a/modules/ppcp-settings/resources/css/_variables.scss +++ b/modules/ppcp-settings/resources/css/_variables.scss @@ -6,6 +6,7 @@ $color-gray-800: #2F2F2F; $color-gray-700: #757575; $color-gray-600: #949494; $color-gray-500: #BBBBBB; +$color-gray-400: #CCCCCC; $color-gray-200: #E0E0E0; $color-gray: #646970; diff --git a/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss b/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss new file mode 100644 index 000000000..fa5e8bc4f --- /dev/null +++ b/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss @@ -0,0 +1,18 @@ +.ppcp-r-tabs { + --wp-components-color-accent: #{$color-blueberry}; + --wp-admin-border-width-focus: 3px; + + .components-tab-panel__tabs { + box-shadow: 0 -1px 0 0 $color-gray-400 inset; + margin-bottom: 48px; + gap: 12px; + + .components-button { + padding: 16px 20px; + + &.is-active { + background-color: #fff4; + } + } + } +} diff --git a/modules/ppcp-settings/resources/css/style.scss b/modules/ppcp-settings/resources/css/style.scss index 95b407d67..db9624c7b 100644 --- a/modules/ppcp-settings/resources/css/style.scss +++ b/modules/ppcp-settings/resources/css/style.scss @@ -11,6 +11,7 @@ @import './components/reusable-components/payment-method-icons'; @import './components/reusable-components/settings-wrapper'; @import './components/reusable-components/select-box'; + @import './components/reusable-components/tab-navigation'; @import './components/reusable-components/navigation'; @import './components/screens/onboarding/step-welcome'; @import './components/screens/onboarding/step-business'; From cdd277d7efd008caa3d55d195d18c40a5b83eaba Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 15:49:30 +0100 Subject: [PATCH 14/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Fix=20node=20depende?= =?UTF-8?q?ncy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Data and Data-Controls are dev dependencies --- modules/ppcp-settings/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/ppcp-settings/package.json b/modules/ppcp-settings/package.json index f413a2a89..a2c868599 100644 --- a/modules/ppcp-settings/package.json +++ b/modules/ppcp-settings/package.json @@ -7,10 +7,10 @@ "build": "wp-scripts build --webpack-src-dir=resources/js --output-path=assets" }, "devDependencies": { + "@wordpress/data": "^10.10.0", + "@wordpress/data-controls": "^4.10.0", "@wordpress/scripts": "^30.3.0" }, "dependencies": { - "@wordpress/data": "^10.10.0", - "@wordpress/data-controls": "^4.10.0" } } From 5f0fb376fbd4b7e0a40a9ab8352067eeb0e8d3cb Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 15:50:51 +0100 Subject: [PATCH 15/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Combine=20the=20impo?= =?UTF-8?q?rt=20of=20onboarding=20styles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/css/components/screens/_onboarding.scss | 3 +++ modules/ppcp-settings/resources/css/style.scss | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 modules/ppcp-settings/resources/css/components/screens/_onboarding.scss diff --git a/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss b/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss new file mode 100644 index 000000000..bf9e403ba --- /dev/null +++ b/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss @@ -0,0 +1,3 @@ +@import './onboarding/step-welcome'; +@import './onboarding/step-business'; +@import './onboarding/step-products'; diff --git a/modules/ppcp-settings/resources/css/style.scss b/modules/ppcp-settings/resources/css/style.scss index db9624c7b..a6ce1cb76 100644 --- a/modules/ppcp-settings/resources/css/style.scss +++ b/modules/ppcp-settings/resources/css/style.scss @@ -13,7 +13,5 @@ @import './components/reusable-components/select-box'; @import './components/reusable-components/tab-navigation'; @import './components/reusable-components/navigation'; - @import './components/screens/onboarding/step-welcome'; - @import './components/screens/onboarding/step-business'; - @import './components/screens/onboarding/step-products'; + @import './components/screens/onboarding'; } From 69ca811b968157cedc89037c056efafcb6f0c864 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 15:56:11 +0100 Subject: [PATCH 16/54] =?UTF-8?q?=E2=9C=A8=20Set=20container=20width=20bas?= =?UTF-8?q?ed=20on=20active=20tab=20panel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/resources/css/_variables.scss | 10 ++++++++++ .../reusable-components/_settings-wrapper.scss | 2 -- .../reusable-components/_tab-navigation.scss | 4 ++++ .../resources/css/components/screens/_onboarding.scss | 4 ++++ .../js/Components/ReusableComponents/TabNavigation.js | 7 ++++++- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-settings/resources/css/_variables.scss b/modules/ppcp-settings/resources/css/_variables.scss index 2c967ae7c..69d1912e1 100644 --- a/modules/ppcp-settings/resources/css/_variables.scss +++ b/modules/ppcp-settings/resources/css/_variables.scss @@ -14,3 +14,13 @@ $shadow-card: 0 3px 6px 0 rgba(0, 0, 0, 0.15); $shadow-selection-box: 0 2px 4px 0 rgba(0, 0, 0, 0.1); $color-gradient-dark: #001435; $gradient-header: linear-gradient(87.03deg, #003087 -0.49%, #001E51 29.22%, $color-gradient-dark 100%); + +$max-width-onboarding: 1024px; +$max-width-settings: 938px; + +#ppcp-settings-container { + --max-width-settings: #{$max-width-settings}; + --max-width-onboarding: #{$max-width-onboarding}; + + --max-tabbar-width: var(--max-width-settings); +} diff --git a/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss b/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss index c38fb5ae1..6c20b8646 100644 --- a/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss +++ b/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss @@ -10,8 +10,6 @@ &-container { box-shadow: $shadow-card; - max-width: 1024px; - margin: 0 auto; } &-card { diff --git a/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss b/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss index fa5e8bc4f..376cdea63 100644 --- a/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss +++ b/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss @@ -2,6 +2,10 @@ --wp-components-color-accent: #{$color-blueberry}; --wp-admin-border-width-focus: 3px; + max-width: var(--max-tabbar-width); + margin: 0 auto; + transition: max-width 0.2s; + .components-tab-panel__tabs { box-shadow: 0 -1px 0 0 $color-gray-400 inset; margin-bottom: 48px; diff --git a/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss b/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss index bf9e403ba..1a6433392 100644 --- a/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss +++ b/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss @@ -1,3 +1,7 @@ @import './onboarding/step-welcome'; @import './onboarding/step-business'; @import './onboarding/step-products'; + +.ppcp-r-tabs.onboarding { + --max-tabbar-width: var(--max-width-onboarding); +} diff --git a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js index ff20c66e8..9b628df8c 100644 --- a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js +++ b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js @@ -1,13 +1,18 @@ import { TabPanel } from '@wordpress/components'; +import { useState } from '@wordpress/element'; const TabNavigation = ( { tabs } ) => { + const initialPanel = tabs[ 0 ].name; + const [ activePanel, setActivePanel ] = useState( initialPanel ); const updatePanelUri = ( tabName ) => { + setActivePanel( tabName ); }; return ( From b95af5c1b3ae0b5d7ae1b5c025e3c1991bde5418 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 15:58:40 +0100 Subject: [PATCH 17/54] =?UTF-8?q?=E2=9C=A8=20Sync=20active=20tab=20with=20?= =?UTF-8?q?browser=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/package.json | 2 + .../ReusableComponents/TabNavigation.js | 9 +- modules/ppcp-settings/yarn.lock | 1176 ++++++++++++++++- 3 files changed, 1163 insertions(+), 24 deletions(-) diff --git a/modules/ppcp-settings/package.json b/modules/ppcp-settings/package.json index a2c868599..ffae57b52 100644 --- a/modules/ppcp-settings/package.json +++ b/modules/ppcp-settings/package.json @@ -7,10 +7,12 @@ "build": "wp-scripts build --webpack-src-dir=resources/js --output-path=assets" }, "devDependencies": { + "@woocommerce/navigation": "^8.2.0", "@wordpress/data": "^10.10.0", "@wordpress/data-controls": "^4.10.0", "@wordpress/scripts": "^30.3.0" }, "dependencies": { + "@woocommerce/settings": "^1.0.0" } } diff --git a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js index 9b628df8c..48c2a85e5 100644 --- a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js +++ b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js @@ -1,14 +1,19 @@ import { TabPanel } from '@wordpress/components'; -import { useState } from '@wordpress/element'; +import { getQuery, updateQueryString } from '@woocommerce/navigation'; +import { useEffect, useState } from '@wordpress/element'; const TabNavigation = ( { tabs } ) => { - const initialPanel = tabs[ 0 ].name; + const initialPanel = getQuery()?.panel ?? tabs[ 0 ].name; const [ activePanel, setActivePanel ] = useState( initialPanel ); const updatePanelUri = ( tabName ) => { setActivePanel( tabName ); }; + useEffect( () => { + updateQueryString( { panel: activePanel }, '/', getQuery() ); + }, [ activePanel ] ); + return ( =1.6.0, moment@^2.22.1, moment@^2.29.4: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + mousetrap@^1.6.5: version "1.6.5" resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9" @@ -7831,7 +8729,7 @@ nwsapi@^2.2.2: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.13.tgz#e56b4e98960e7a040e5474536587e599c4ff4655" integrity sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ== -object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -7846,7 +8744,7 @@ object-inspect@^1.13.1: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== -object-is@^1.1.5: +object-is@^1.1.2, object-is@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== @@ -7859,7 +8757,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.4, object.assign@^4.1.5: +object.assign@^4.1.0, object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -7869,7 +8767,7 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.8: +object.entries@^1.1.2, object.entries@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== @@ -7897,7 +8795,7 @@ object.groupby@^1.0.3: define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.1.6, object.values@^1.2.0: +object.values@^1.0.4, object.values@^1.1.0, object.values@^1.1.5, object.values@^1.1.6, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -8216,6 +9114,16 @@ plur@^4.0.0: dependencies: irregular-plurals "^3.2.0" +popmotion@11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-11.0.3.tgz#565c5f6590bbcddab7a33a074bb2ba97e24b0cc9" + integrity sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA== + dependencies: + framesync "6.0.1" + hey-listen "^1.0.8" + style-value-types "5.0.0" + tslib "^2.1.0" + possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" @@ -8549,7 +9457,19 @@ prompts@^2.0.1, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.8.1: +prop-types-exact@^1.2.0: + version "1.2.5" + resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.5.tgz#f275e7dc0d629c2f7414782e8189b3e2d2e9e158" + integrity sha512-wHDhA5TSSvU07gdzsdeT/FZg6zay94K4Y7swSK4YsRG3moWB0Qsp9g1Y5BBausP1HF8K4UeVe2Xt7ZFJByKp6A== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + hasown "^2.0.2" + isarray "^2.0.5" + object.assign "^4.1.5" + reflect.ownkeys "^1.1.4" + +prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -8656,7 +9576,7 @@ pure-rand@^6.0.0: resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== -qs@6.13.0: +qs@6.13.0, qs@^6.11.2: version "6.13.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== @@ -8705,6 +9625,51 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" +re-resizable@^6.4.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.10.0.tgz#d684a096ab438f1a93f59ad3a580a206b0ce31ee" + integrity sha512-hysSK0xmA5nz24HBVztlk4yCqCLCvS32E6ZpWxVKop9x3tqCa4yAj1++facrmkOf62JsJHjmjABdKxXofYioCw== + +react-addons-shallow-compare@^15.6.2: + version "15.6.3" + resolved "https://registry.yarnpkg.com/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.3.tgz#28a94b0dfee71530852c66a69053d59a1baf04cb" + integrity sha512-EDJbgKTtGRLhr3wiGDXK/+AEJ59yqGS+tKE6mue0aNXT6ZMR7VJbbzIiT6akotmHg1BLj46ElJSb+NBMp80XBg== + dependencies: + object-assign "^4.1.0" + +react-colorful@^5.3.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b" + integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== + +react-dates@^17.1.1: + version "17.2.0" + resolved "https://registry.yarnpkg.com/react-dates/-/react-dates-17.2.0.tgz#d8cfe29ceecb3fbe37abbaa385683504cc53cdf6" + integrity sha512-RDlerU8DdRRrlYS0MQ7Z9igPWABGLDwz6+ykBNff67RM3Sset2TDqeuOr+R5o00Ggn5U47GeLsGcSDxlZd9cHw== + dependencies: + airbnb-prop-types "^2.10.0" + consolidated-events "^1.1.1 || ^2.0.0" + is-touch-device "^1.0.1" + lodash "^4.1.1" + object.assign "^4.1.0" + object.values "^1.0.4" + prop-types "^15.6.1" + react-addons-shallow-compare "^15.6.2" + react-moment-proptypes "^1.6.0" + react-outside-click-handler "^1.2.0" + react-portal "^4.1.5" + react-with-styles "^3.2.0" + react-with-styles-interface-css "^4.0.2" + +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + react-dom@^18.3.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" @@ -8713,21 +9678,111 @@ react-dom@^18.3.0: loose-envify "^1.1.0" scheduler "^0.23.2" -react-is@^16.13.1: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + react-is@^18.0.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== +react-moment-proptypes@^1.6.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/react-moment-proptypes/-/react-moment-proptypes-1.8.1.tgz#7ba4076147f6b5998f0d4f51d302d6d8c62049fd" + integrity sha512-Er940DxWoObfIqPrZNfwXKugjxMIuk1LAuEzn23gytzV6hKS/sw108wibi9QubfMN4h+nrlje8eUCSbQRJo2fQ== + dependencies: + moment ">=1.6.0" + +react-outside-click-handler@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-outside-click-handler/-/react-outside-click-handler-1.3.0.tgz#3831d541ac059deecd38ec5423f81e80ad60e115" + integrity sha512-Te/7zFU0oHpAnctl//pP3hEAeobfeHMyygHB8MnjP6sX5OR8KHT1G3jmLsV3U9RnIYo+Yn+peJYWu+D5tUS8qQ== + dependencies: + airbnb-prop-types "^2.15.0" + consolidated-events "^1.1.1 || ^2.0.0" + document.contains "^1.0.1" + object.values "^1.1.0" + prop-types "^15.7.2" + +react-portal@^4.1.5: + version "4.2.2" + resolved "https://registry.yarnpkg.com/react-portal/-/react-portal-4.2.2.tgz#bff1e024147d6041ba8c530ffc99d4c8248f49fa" + integrity sha512-vS18idTmevQxyQpnde0Td6ZcUlv+pD8GTyR42n3CHUQq9OHi1C4jDE4ZWEbEsrbrLRhSECYiao58cvocwMtP7Q== + dependencies: + prop-types "^15.5.8" + react-refresh@^0.14.0: version "0.14.2" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== +react-resize-aware@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/react-resize-aware/-/react-resize-aware-3.1.0.tgz#fa1da751d1d72f90c3b79969d05c2c577dfabd92" + integrity sha512-bIhHlxVTX7xKUz14ksXMEHjzCZPTpQZKZISY3nbTD273pDKPABGFNFBP6Tr42KECxzC5YQiKpMchjTVJCqaxpA== + +react-router-dom@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d" + integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== + dependencies: + history "^5.2.0" + react-router "6.3.0" + +react-router@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" + integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== + dependencies: + history "^5.2.0" + +react-with-direction@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/react-with-direction/-/react-with-direction-1.4.0.tgz#ebdf64d685d0650ce966e872e6431ad5a2485444" + integrity sha512-ybHNPiAmaJpoWwugwqry9Hd1Irl2hnNXlo/2SXQBwbLn/jGMauMS2y9jw+ydyX5V9ICryCqObNSthNt5R94xpg== + dependencies: + airbnb-prop-types "^2.16.0" + brcast "^2.0.2" + deepmerge "^1.5.2" + direction "^1.0.4" + hoist-non-react-statics "^3.3.2" + object.assign "^4.1.2" + object.values "^1.1.5" + prop-types "^15.7.2" + +react-with-styles-interface-css@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/react-with-styles-interface-css/-/react-with-styles-interface-css-4.0.3.tgz#c4a61277b2b8e4126b2cd25eca3ac4097bd2af09" + integrity sha512-wE43PIyjal2dexxyyx4Lhbcb+E42amoYPnkunRZkb9WTA+Z+9LagbyxwsI352NqMdFmghR0opg29dzDO4/YXbw== + dependencies: + array.prototype.flat "^1.2.1" + global-cache "^1.2.1" + +react-with-styles@^3.2.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/react-with-styles/-/react-with-styles-3.2.3.tgz#b058584065bb36c0d80ccc911725492692db8a61" + integrity sha512-MTI1UOvMHABRLj5M4WpODfwnveHaip6X7QUMI2x6zovinJiBXxzhA9AJP7MZNaKqg1JRFtHPXZdroUC8KcXwlQ== + dependencies: + hoist-non-react-statics "^3.2.1" + object.assign "^4.1.0" + prop-types "^15.6.2" + react-with-direction "^1.3.0" + +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + react@^18.3.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" @@ -8795,6 +9850,36 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +reakit-system@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/reakit-system/-/reakit-system-0.15.2.tgz#a485fab84b3942acbed6212c3b56a6ef8611c457" + integrity sha512-TvRthEz0DmD0rcJkGamMYx+bATwnGNWJpe/lc8UV2Js8nnPvkaxrHk5fX9cVASFrWbaIyegZHCWUBfxr30bmmA== + dependencies: + reakit-utils "^0.15.2" + +reakit-utils@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/reakit-utils/-/reakit-utils-0.15.2.tgz#b4d5836e534576bfd175171541d43182ad97f2d2" + integrity sha512-i/RYkq+W6hvfFmXw5QW7zvfJJT/K8a4qZ0hjA79T61JAFPGt23DsfxwyBbyK91GZrJ9HMrXFVXWMovsKBc1qEQ== + +reakit-warning@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/reakit-warning/-/reakit-warning-0.6.2.tgz#9c346ae483eb1f284f2088653f90cabd26dbee56" + integrity sha512-z/3fvuc46DJyD3nJAUOto6inz2EbSQTjvI/KBQDqxwB0y02HDyeP8IWOJxvkuAUGkWpeSx+H3QWQFSNiPcHtmw== + dependencies: + reakit-utils "^0.15.2" + +reakit@^1.3.8: + version "1.3.11" + resolved "https://registry.yarnpkg.com/reakit/-/reakit-1.3.11.tgz#c15360ac43e94fbe4291d233af3ac5040428252e" + integrity sha512-mYxw2z0fsJNOQKAEn5FJCPTU3rcrY33YZ/HzoWqZX0G7FwySp1wkCYW79WhuYMNIUFQ8s3Baob1RtsEywmZSig== + dependencies: + "@popperjs/core" "^2.5.4" + body-scroll-lock "^3.1.5" + reakit-system "^0.15.2" + reakit-utils "^0.15.2" + reakit-warning "^0.6.2" + rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -8830,6 +9915,17 @@ reflect.getprototypeof@^1.0.4: globalthis "^1.0.3" which-builtin-type "^1.1.3" +reflect.ownkeys@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-1.1.4.tgz#3cf21da448f2aff8aba63ca601f65c99482e692c" + integrity sha512-iUNmtLgzudssL+qnTUosCmnq3eczlrVd1wXrgx/GhiI/8FvwrTYWtCJ9PNvWIRX+4ftupj2WUfB5mu5s9t6LnA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-set-tostringtag "^2.0.1" + globalthis "^1.0.3" + regenerate-unicode-properties@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" @@ -8847,6 +9943,11 @@ regenerator-runtime@^0.10.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" integrity sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w== +regenerator-runtime@^0.13.2: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" @@ -8893,7 +9994,7 @@ regjsparser@^0.11.0: dependencies: jsesc "~3.0.2" -rememo@^4.0.2: +rememo@^4.0.0, rememo@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/rememo/-/rememo-4.0.2.tgz#8af1f09fd3bf5809ca0bfd0b803926c67ead8c1e" integrity sha512-NVfSP9NstE3QPNs/TnegQY0vnJnstKQSpcrsI2kBTB3dB2PkdfKdTa+abbjMIDqpc63fE5LfjLgfMst0ULMFxQ== @@ -8965,7 +10066,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.4: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -9118,6 +10219,14 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler@^0.23.2: version "0.23.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" @@ -9435,6 +10544,11 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -9709,6 +10823,14 @@ style-search@^0.1.0: resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== +style-value-types@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-5.0.0.tgz#76c35f0e579843d523187989da866729411fc8ad" + integrity sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA== + dependencies: + hey-listen "^1.0.8" + tslib "^2.1.0" + stylehacks@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6" @@ -9789,6 +10911,11 @@ stylelint@^16.8.2: table "^6.8.2" write-file-atomic "^5.0.1" +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -10057,7 +11184,7 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.6.2: +tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.6.2: version "2.8.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== @@ -10069,6 +11196,11 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +turbo-combine-reducers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/turbo-combine-reducers/-/turbo-combine-reducers-1.0.2.tgz#aa3650b3c63daa6804d35a4042014f6d31df1e47" + integrity sha512-gHbdMZlA6Ym6Ur5pSH/UWrNQMIM9IqTH6SoL1DbHpqEdQ8i+cFunSmSlFykPt0eGQwZ4d/XTHOl74H0/kFBVWw== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -10314,7 +11446,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^8.3.2: +uuid@^8.3.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== From 48d87100de767fae1f7b8709450caf8a5c62a045 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 16:33:26 +0100 Subject: [PATCH 18/54] =?UTF-8?q?=F0=9F=91=94=20Simplify=20settings=20page?= =?UTF-8?q?=20header=20for=20new=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/src/SettingsModule.php | 25 ++++++++++++++++-- .../ppcp-wc-gateway/src/WCGatewayModule.php | 26 ++++++++++--------- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/modules/ppcp-settings/src/SettingsModule.php b/modules/ppcp-settings/src/SettingsModule.php index 3533c2394..e2d556b19 100644 --- a/modules/ppcp-settings/src/SettingsModule.php +++ b/modules/ppcp-settings/src/SettingsModule.php @@ -94,11 +94,12 @@ class SettingsModule implements ServiceModule, ExecutableModule { add_action( 'woocommerce_paypal_payments_gateway_admin_options_wrapper', - static function () : void { + function () : void { global $hide_save_button; $hide_save_button = true; - echo '
'; + $this->render_header(); + $this->render_content(); } ); @@ -112,4 +113,24 @@ class SettingsModule implements ServiceModule, ExecutableModule { return true; } + + /** + * Outputs the settings page header (title and back-link). + * + * @return void + */ + protected function render_header() : void { + echo '

' . esc_html__( 'PayPal', 'woocommerce-paypal-payments' ); + wc_back_link( __( 'Return to payments', 'woocommerce-paypal-payments' ), admin_url( 'admin.php?page=wc-settings&tab=checkout' ) ); + echo '

'; + } + + /** + * Renders the container for the React app. + * + * @return void + */ + protected function render_content() : void { + echo '
'; + } } diff --git a/modules/ppcp-wc-gateway/src/WCGatewayModule.php b/modules/ppcp-wc-gateway/src/WCGatewayModule.php index 7dcf4544f..d31d072ae 100644 --- a/modules/ppcp-wc-gateway/src/WCGatewayModule.php +++ b/modules/ppcp-wc-gateway/src/WCGatewayModule.php @@ -94,20 +94,22 @@ class WCGatewayModule implements ServiceModule, ExtendingModule, ExecutableModul $this->register_wc_tasks( $c ); $this->register_void_button( $c ); - add_action( - 'woocommerce_sections_checkout', - function() use ( $c ) { - $header_renderer = $c->get( 'wcgateway.settings.header-renderer' ); - assert( $header_renderer instanceof HeaderRenderer ); + if ( ! $c->get( 'wcgateway.settings.admin-settings-enabled' ) ) { + add_action( + 'woocommerce_sections_checkout', + function () use ( $c ) { + $header_renderer = $c->get( 'wcgateway.settings.header-renderer' ); + assert( $header_renderer instanceof HeaderRenderer ); - $section_renderer = $c->get( 'wcgateway.settings.sections-renderer' ); - assert( $section_renderer instanceof SectionsRenderer ); + $section_renderer = $c->get( 'wcgateway.settings.sections-renderer' ); + assert( $section_renderer instanceof SectionsRenderer ); - // phpcs:ignore WordPress.Security.EscapeOutput - echo $header_renderer->render() . $section_renderer->render(); - }, - 20 - ); + // phpcs:ignore WordPress.Security.EscapeOutput + echo $header_renderer->render() . $section_renderer->render(); + }, + 20 + ); + } add_action( 'woocommerce_paypal_payments_order_captured', From b369756cfda89c90ce9ed916636ec5d88fca4357 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 16:58:50 +0100 Subject: [PATCH 19/54] =?UTF-8?q?=F0=9F=90=9B=20Validate=20the=20initial?= =?UTF-8?q?=20tab,=20improve=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReusableComponents/TabNavigation.js | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js index 48c2a85e5..e68c91892 100644 --- a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js +++ b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js @@ -1,15 +1,34 @@ +import { memo, useCallback, useEffect, useState } from '@wordpress/element'; import { TabPanel } from '@wordpress/components'; import { getQuery, updateQueryString } from '@woocommerce/navigation'; -import { useEffect, useState } from '@wordpress/element'; const TabNavigation = ( { tabs } ) => { - const initialPanel = getQuery()?.panel ?? tabs[ 0 ].name; - const [ activePanel, setActivePanel ] = useState( initialPanel ); + const { panel } = getQuery(); - const updatePanelUri = ( tabName ) => { - setActivePanel( tabName ); + const isValidTab = ( tabsList, checkTab ) => { + return tabsList.some( ( tab ) => tab.name === checkTab ); }; + const getValidInitialPanel = () => { + if ( ! panel || ! isValidTab( tabs, panel ) ) { + return tabs[ 0 ].name; + } + return panel; + }; + + const [ activePanel, setActivePanel ] = useState( getValidInitialPanel ); + + const updatePanelUri = useCallback( + ( tabName ) => { + if ( isValidTab( tabs, tabName ) ) { + setActivePanel( tabName ); + } else { + console.warn( `Invalid tab name: ${ tabName }` ); + } + }, + [ tabs ] + ); + useEffect( () => { updateQueryString( { panel: activePanel }, '/', getQuery() ); }, [ activePanel ] ); From dbd37fc282764c0c6bdeab864440feb800a44c8b Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 17:00:07 +0100 Subject: [PATCH 20/54] =?UTF-8?q?=E2=9C=A8=20Introduce=20=E2=80=9Ccomplete?= =?UTF-8?q?d=E2=80=9D=20flag=20for=20Redux=20store?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/data/onboarding/action-types.js | 1 + .../resources/js/data/onboarding/actions.js | 13 ++++++++++++ .../resources/js/data/onboarding/reducer.js | 1 + .../src/Data/OnboardingProfile.php | 21 ++++++++++++++++++- .../src/Endpoint/OnboardingRestEndpoint.php | 4 ++++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-settings/resources/js/data/onboarding/action-types.js b/modules/ppcp-settings/resources/js/data/onboarding/action-types.js index 232c6b1fc..06b55f0d6 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/action-types.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/action-types.js @@ -3,6 +3,7 @@ export default { SET_IS_SAVING_ONBOARDING_DETAILS: 'SET_IS_SAVING_ONBOARDING_DETAILS', // Persistent data. + SET_ONBOARDING_COMPLETED: 'SET_ONBOARDING_COMPLETED', SET_ONBOARDING_DETAILS: 'SET_ONBOARDING_DETAILS', SET_ONBOARDING_STEP: 'SET_ONBOARDING_STEP', SET_SANDBOX_MODE: 'SET_SANDBOX_MODE', diff --git a/modules/ppcp-settings/resources/js/data/onboarding/actions.js b/modules/ppcp-settings/resources/js/data/onboarding/actions.js index 8deb822c3..d60fba409 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/actions.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/actions.js @@ -16,6 +16,19 @@ export const setIsSaving = ( isSaving ) => { }; }; +/** + * Persistent.Set the "onboarding completed" flag which shows or hides the wizard. + * + * @param {boolean} completed + * @return {{type: string, payload}} The action. + */ +export const setCompleted = ( completed ) => { + return { + type: ACTION_TYPES.SET_ONBOARDING_COMPLETED, + completed, + }; +}; + /** * Persistent. Set the full onboarding details, usually during app initialization. * diff --git a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js index e37d145b0..03dab52d5 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js @@ -3,6 +3,7 @@ import ACTION_TYPES from './action-types'; const defaultState = { isSaving: false, data: { + completed: false, step: 0, useSandbox: false, useManualConnection: false, diff --git a/modules/ppcp-settings/src/Data/OnboardingProfile.php b/modules/ppcp-settings/src/Data/OnboardingProfile.php index c9a45ead0..9f4f2ce2b 100644 --- a/modules/ppcp-settings/src/Data/OnboardingProfile.php +++ b/modules/ppcp-settings/src/Data/OnboardingProfile.php @@ -57,6 +57,7 @@ class OnboardingProfile extends AbstractDataModel { */ protected function get_defaults() : array { return array( + 'completed' => false, 'step' => 0, 'use_sandbox' => false, 'use_manual_connection' => false, @@ -70,6 +71,24 @@ class OnboardingProfile extends AbstractDataModel { // ----- + /** + * Gets the 'completed' flag. + * + * @return bool + */ + public function get_completed() : bool { + return (bool) $this->data['completed']; + } + + /** + * Sets the 'completed' flag. + * + * @param bool $step Whether the onboarding process has been completed. + */ + public function set_completed( bool $step ) : void { + $this->data['completed'] = $step; + } + /** * Gets the 'step' setting. * @@ -82,7 +101,7 @@ class OnboardingProfile extends AbstractDataModel { /** * Sets the 'step' setting. * - * @param int $step Whether to use sandbox mode. + * @param int $step The current onboarding step. */ public function set_step( int $step ) : void { $this->data['step'] = $step; diff --git a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php index e5a38af5d..6e5e47bb5 100644 --- a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php @@ -41,6 +41,10 @@ class OnboardingRestEndpoint extends RestEndpoint { * @var array */ private array $field_map = array( + 'completed' => array( + 'js_name' => 'completed', + 'sanitize' => 'to_boolean', + ), 'step' => array( 'js_name' => 'step', 'sanitize' => 'to_number', From 2bf9832844a5b3ce56a738554b1ad716763f9a42 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 17:56:23 +0100 Subject: [PATCH 21/54] =?UTF-8?q?=E2=9C=A8=20Separate=20logic=20for=20onbo?= =?UTF-8?q?arding=20and=20settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReusableComponents/TabNavigation.js | 6 +-- .../js/Components/Screens/Settings.js | 10 +++- .../resources/js/Components/Screens/tabs.js | 52 +++++++------------ .../resources/js/data/onboarding/hooks.js | 19 +++++++ 4 files changed, 51 insertions(+), 36 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js index e68c91892..4c5d40675 100644 --- a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js +++ b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js @@ -1,4 +1,4 @@ -import { memo, useCallback, useEffect, useState } from '@wordpress/element'; +import { useCallback, useEffect, useState } from '@wordpress/element'; import { TabPanel } from '@wordpress/components'; import { getQuery, updateQueryString } from '@woocommerce/navigation'; @@ -18,7 +18,7 @@ const TabNavigation = ( { tabs } ) => { const [ activePanel, setActivePanel ] = useState( getValidInitialPanel ); - const updatePanelUri = useCallback( + const updateActivePanel = useCallback( ( tabName ) => { if ( isValidTab( tabs, tabName ) ) { setActivePanel( tabName ); @@ -37,7 +37,7 @@ const TabNavigation = ( { tabs } ) => { { ( tab ) => { diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Settings.js b/modules/ppcp-settings/resources/js/Components/Screens/Settings.js index 0a233c353..ba2fcb0e9 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Settings.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Settings.js @@ -1,8 +1,16 @@ import TabNavigation from '../ReusableComponents/TabNavigation'; import { getSettingsTabs } from './tabs'; +import { useOnboardingStep } from '../../data'; +import Onboarding from './Onboarding/Onboarding'; const Settings = () => { - const tabs = getSettingsTabs(); + const onboardingProgress = useOnboardingStep(); + + if ( ! onboardingProgress.completed ) { + return ; + } + + const tabs = getSettingsTabs( onboardingProgress ); return ; }; diff --git a/modules/ppcp-settings/resources/js/Components/Screens/tabs.js b/modules/ppcp-settings/resources/js/Components/Screens/tabs.js index 3c9a760a1..1856ece49 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/tabs.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/tabs.js @@ -1,5 +1,4 @@ import { __ } from '@wordpress/i18n'; -import Onboarding from './Onboarding/Onboarding'; import TabDashboard from './Dashboard/TabDashboard'; import TabPaymentMethods from './Dashboard/TabPaymentMethods'; import TabSettings from './Dashboard/TabSettings'; @@ -8,40 +7,29 @@ import TabStyling from './Dashboard/TabStyling'; export const getSettingsTabs = () => { const tabs = []; - // TODO: Use the store to find out if onboarding is complete + tabs.push( { + name: 'dashboard', + title: __( 'Dashboard', 'woocommerce-paypal-payments' ), + component: , + } ); - if ( 0 ) { - tabs.push( { - name: 'onboarding', - component: , - } ); - } + tabs.push( { + name: 'payment-methods', + title: __( 'Payment Methods', 'woocommerce-paypal-payments' ), + component: , + } ); - if ( 1 ) { - tabs.push( { - name: 'dashboard', - title: __( 'Dashboard', 'woocommerce-paypal-payments' ), - component: , - } ); + tabs.push( { + name: 'settings', + title: __( 'Settings', 'woocommerce-paypal-payments' ), + component: , + } ); - tabs.push( { - name: 'payment-methods', - title: __( 'Payment Methods', 'woocommerce-paypal-payments' ), - component: , - } ); - - tabs.push( { - name: 'settings', - title: __( 'Settings', 'woocommerce-paypal-payments' ), - component: , - } ); - - tabs.push( { - name: 'styling', - title: __( 'Styling', 'woocommerce-paypal-payments' ), - component: , - } ); - } + tabs.push( { + name: 'styling', + title: __( 'Styling', 'woocommerce-paypal-payments' ), + component: , + } ); return tabs; }; diff --git a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js index 730ec060c..62cb6d1a8 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js @@ -60,3 +60,22 @@ export const useOnboardingDetails = () => { setDetailAndPersist( setManualConnectionMode, state ), }; }; + +export const useOnboardingStep = () => { + const { setOnboardingStep, setCompleted } = useDispatch( STORE_NAME ); + + const onboardingStep = useSelect( ( select ) => { + return select( STORE_NAME ).getPersistentData().step || 0; + } ); + + const completed = useSelect( ( select ) => { + return select( STORE_NAME ).getPersistentData().completed; + } ); + + return { + onboardingStep, + setOnboardingStep: ( step ) => setOnboardingStep( step ), + completed, + setCompleted: ( state ) => setCompleted( state ), + }; +}; From 0f523d7aaee60baeeeb85fd85a57e7121db91040 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 17:57:05 +0100 Subject: [PATCH 22/54] =?UTF-8?q?=F0=9F=92=84=20Adjust=20SCSS=20to=20addre?= =?UTF-8?q?ss=20new=20component=20hierarchy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/resources/css/_variables.scss | 4 +++- .../reusable-components/_settings-wrapper.scss | 10 +++++++--- .../reusable-components/_tab-navigation.scss | 2 +- .../resources/css/components/screens/_onboarding.scss | 9 +++++++-- .../components/screens/onboarding/_step-business.scss | 1 - .../components/screens/onboarding/_step-products.scss | 1 - 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/modules/ppcp-settings/resources/css/_variables.scss b/modules/ppcp-settings/resources/css/_variables.scss index 2c14894d3..c1f2c8725 100644 --- a/modules/ppcp-settings/resources/css/_variables.scss +++ b/modules/ppcp-settings/resources/css/_variables.scss @@ -17,11 +17,13 @@ $color-gradient-dark: #001435; $gradient-header: linear-gradient(87.03deg, #003087 -0.49%, #001E51 29.22%, $color-gradient-dark 100%); $max-width-onboarding: 1024px; +$max-width-onboarding-content: 662px; $max-width-settings: 938px; #ppcp-settings-container { --max-width-settings: #{$max-width-settings}; --max-width-onboarding: #{$max-width-onboarding}; + --max-width-onboarding-content: #{$max-width-onboarding-content}; - --max-tabbar-width: var(--max-width-settings); + --max-container-width: var(--max-width-settings); } diff --git a/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss b/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss index b83a1a94f..08874f1bb 100644 --- a/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss +++ b/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss @@ -1,9 +1,13 @@ .ppcp-r { + &-container { + max-width: var(--max-container-width, none); + margin-left: auto; + margin-right: auto; + } &-inner-container { - width: 652px; - max-width: 100%; - margin: 0 auto; + margin-left: auto; + margin-right: auto; padding: 0 16px; box-sizing: border-box; } diff --git a/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss b/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss index 376cdea63..51380f052 100644 --- a/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss +++ b/modules/ppcp-settings/resources/css/components/reusable-components/_tab-navigation.scss @@ -2,7 +2,7 @@ --wp-components-color-accent: #{$color-blueberry}; --wp-admin-border-width-focus: 3px; - max-width: var(--max-tabbar-width); + max-width: var(--max-container-width); margin: 0 auto; transition: max-width 0.2s; diff --git a/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss b/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss index 1a6433392..5a00adc9d 100644 --- a/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss +++ b/modules/ppcp-settings/resources/css/components/screens/_onboarding.scss @@ -2,6 +2,11 @@ @import './onboarding/step-business'; @import './onboarding/step-products'; -.ppcp-r-tabs.onboarding { - --max-tabbar-width: var(--max-width-onboarding); +.ppcp-r-tabs.onboarding, +.ppcp-r-container--onboarding { + --max-container-width: var(--max-width-onboarding); + + .ppcp-r-inner-container { + max-width: var(--max-width-onboarding-content); + } } diff --git a/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-business.scss b/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-business.scss index 8b149bab5..f4c7c45bc 100644 --- a/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-business.scss +++ b/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-business.scss @@ -1,6 +1,5 @@ .ppcp-r-page-business { .ppcp-r-inner-container { - width: 622px; padding-bottom: 84px; @media screen and (max-width: 480px) { padding-bottom: 42px; diff --git a/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-products.scss b/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-products.scss index bad8a194a..0b8a5909e 100644 --- a/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-products.scss +++ b/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-products.scss @@ -20,7 +20,6 @@ .ppcp-r-page-products { .ppcp-r-inner-container { - width: 622px; padding-bottom: 48px; @media screen and (max-width: 480px) { padding-bottom: 24px; From 7a27c02763828f730b3a01089b1319d8a90d0e93 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 18:00:23 +0100 Subject: [PATCH 23/54] =?UTF-8?q?=F0=9F=92=84=20Use=20same=20padding=20for?= =?UTF-8?q?=20all=20onboarding=20screens?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/reusable-components/_settings-wrapper.scss | 6 +++++- .../css/components/screens/onboarding/_step-business.scss | 7 ------- .../css/components/screens/onboarding/_step-products.scss | 7 ------- .../css/components/screens/onboarding/_step-welcome.scss | 7 ------- 4 files changed, 5 insertions(+), 22 deletions(-) diff --git a/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss b/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss index 08874f1bb..1ef63aee4 100644 --- a/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss +++ b/modules/ppcp-settings/resources/css/components/reusable-components/_settings-wrapper.scss @@ -8,8 +8,12 @@ &-inner-container { margin-left: auto; margin-right: auto; - padding: 0 16px; + padding: 0 16px 72px; box-sizing: border-box; + + @media screen and (max-width: 480px) { + padding-bottom: 36px; + } } &-container { diff --git a/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-business.scss b/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-business.scss index f4c7c45bc..e1b8a2af1 100644 --- a/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-business.scss +++ b/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-business.scss @@ -1,11 +1,4 @@ .ppcp-r-page-business { - .ppcp-r-inner-container { - padding-bottom: 84px; - @media screen and (max-width: 480px) { - padding-bottom: 42px; - } - } - .ppcp-r-payment-method-icons { justify-content: flex-start; } diff --git a/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-products.scss b/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-products.scss index 0b8a5909e..2947c8fab 100644 --- a/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-products.scss +++ b/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-products.scss @@ -19,13 +19,6 @@ } .ppcp-r-page-products { - .ppcp-r-inner-container { - padding-bottom: 48px; - @media screen and (max-width: 480px) { - padding-bottom: 24px; - } - } - .ppcp-r-payment-method-icons { justify-content: flex-start; } diff --git a/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-welcome.scss b/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-welcome.scss index c37822b41..6017864fa 100644 --- a/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-welcome.scss +++ b/modules/ppcp-settings/resources/css/components/screens/onboarding/_step-welcome.scss @@ -1,11 +1,4 @@ .ppcp-r-page-welcome { - .ppcp-r-inner-container { - padding-bottom: 72px; - @media screen and (max-width: 480px) { - padding-bottom: 36px; - } - } - .ppcp-r-welcome-features { margin: 0 0 32px 0; } From 4944c2427b45f5eec94ce1f17d72b8ed482b9355 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 18:10:30 +0100 Subject: [PATCH 24/54] =?UTF-8?q?=F0=9F=A7=90=20Add=20debug=20tool=20to=20?= =?UTF-8?q?restart=20onboarding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/resources/js/data/store.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/ppcp-settings/resources/js/data/store.js b/modules/ppcp-settings/resources/js/data/store.js index f416cb94f..32a05411f 100644 --- a/modules/ppcp-settings/resources/js/data/store.js +++ b/modules/ppcp-settings/resources/js/data/store.js @@ -44,6 +44,10 @@ export const initStore = () => { console.groupEnd(); }; + window.ppcpSettings.startOnboarding = () => { + wp.data.dispatch( STORE_NAME ).setCompleted( false ); + wp.data.dispatch( STORE_NAME ).setOnboardingStep( 0 ); + }; } /* eslint-enable no-console */ }; From 164af7f515ab5890486dfc1ba969bd48854d3f95 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 18:11:04 +0100 Subject: [PATCH 25/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20MInor=20reorganizati?= =?UTF-8?q?on=20of=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/js/data/onboarding/actions.js | 26 +++++++++---------- .../resources/js/data/onboarding/hooks.js | 26 +++++++++---------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/modules/ppcp-settings/resources/js/data/onboarding/actions.js b/modules/ppcp-settings/resources/js/data/onboarding/actions.js index d60fba409..3abf80e65 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/actions.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/actions.js @@ -16,19 +16,6 @@ export const setIsSaving = ( isSaving ) => { }; }; -/** - * Persistent.Set the "onboarding completed" flag which shows or hides the wizard. - * - * @param {boolean} completed - * @return {{type: string, payload}} The action. - */ -export const setCompleted = ( completed ) => { - return { - type: ACTION_TYPES.SET_ONBOARDING_COMPLETED, - completed, - }; -}; - /** * Persistent. Set the full onboarding details, usually during app initialization. * @@ -42,6 +29,19 @@ export const setOnboardingDetails = ( payload ) => { }; }; +/** + * Persistent.Set the "onboarding completed" flag which shows or hides the wizard. + * + * @param {boolean} completed + * @return {{type: string, payload}} The action. + */ +export const setCompleted = ( completed ) => { + return { + type: ACTION_TYPES.SET_ONBOARDING_COMPLETED, + completed, + }; +}; + /** * Persistent. Sets the onboarding wizard to a new step. * diff --git a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js index 62cb6d1a8..6d489e0dd 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js @@ -3,10 +3,9 @@ import { STORE_NAME } from '../constants'; export const useOnboardingDetails = () => { const { - setOnboardingStep, + persist, setSandboxMode, setManualConnectionMode, - persist, setClientId, setClientSecret, } = useDispatch( STORE_NAME ); @@ -25,10 +24,6 @@ export const useOnboardingDetails = () => { return select( STORE_NAME ).getPersistentData().clientSecret; }, [] ); - const onboardingStep = useSelect( ( select ) => { - return select( STORE_NAME ).getPersistentData().step || 0; - }, [] ); - const isSandboxMode = useSelect( ( select ) => { return select( STORE_NAME ).getPersistentData().useSandbox; }, [] ); @@ -43,7 +38,6 @@ export const useOnboardingDetails = () => { }; return { - onboardingStep, isSaving, isSandboxMode, isManualConnectionMode, @@ -52,8 +46,6 @@ export const useOnboardingDetails = () => { clientSecret, setClientSecret: ( value ) => setDetailAndPersist( setClientSecret, value ), - setOnboardingStep: ( step ) => - setDetailAndPersist( setOnboardingStep, step ), setSandboxMode: ( state ) => setDetailAndPersist( setSandboxMode, state ), setManualConnectionMode: ( state ) => @@ -62,9 +54,10 @@ export const useOnboardingDetails = () => { }; export const useOnboardingStep = () => { - const { setOnboardingStep, setCompleted } = useDispatch( STORE_NAME ); + const { persist, setOnboardingStep, setCompleted } = + useDispatch( STORE_NAME ); - const onboardingStep = useSelect( ( select ) => { + const step = useSelect( ( select ) => { return select( STORE_NAME ).getPersistentData().step || 0; } ); @@ -72,10 +65,15 @@ export const useOnboardingStep = () => { return select( STORE_NAME ).getPersistentData().completed; } ); + const setDetailAndPersist = async ( setter, value ) => { + setter( value ); + await persist(); + }; + return { - onboardingStep, - setOnboardingStep: ( step ) => setOnboardingStep( step ), + step, + setStep: ( value ) => setDetailAndPersist( setOnboardingStep, value ), completed, - setCompleted: ( state ) => setCompleted( state ), + setCompleted: ( state ) => setDetailAndPersist( setCompleted, state ), }; }; From ef60cca6066c7fe3654569e93aa351eecda3ac2e Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 18:27:12 +0100 Subject: [PATCH 26/54] =?UTF-8?q?=E2=9C=A8=20Integrate=20Redux=20store=20t?= =?UTF-8?q?o=20onboarding=20naviagtion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReusableComponents/Navigation.js | 22 +++++++++++++------ .../Screens/Onboarding/Onboarding.js | 13 +++++++---- .../Screens/Onboarding/StepBusiness.js | 8 ++++++- .../Screens/Onboarding/StepProducts.js | 8 ++++++- 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/ReusableComponents/Navigation.js b/modules/ppcp-settings/resources/js/Components/ReusableComponents/Navigation.js index d4e5fae4b..05950f13d 100644 --- a/modules/ppcp-settings/resources/js/Components/ReusableComponents/Navigation.js +++ b/modules/ppcp-settings/resources/js/Components/ReusableComponents/Navigation.js @@ -3,27 +3,35 @@ import { __ } from '@wordpress/i18n'; const Navigation = ( { setStep, + setCompleted, currentStep, stepperOrder, canProceeedCallback = () => true, } ) => { - const setNextStep = ( nextStep ) => { - let newStep = currentStep + nextStep; - if ( newStep > stepperOrder.length - 1 ) { - newStep = currentStep; + const navigateBy = ( stepDirection ) => { + let newStep = currentStep + stepDirection; + + if ( isNaN( newStep ) || newStep < 0 ) { + console.warn( 'Invalid next step:', newStep ); + newStep = 0; + } + + if ( newStep >= stepperOrder.length ) { + setCompleted( true ); + } else { + setStep( newStep ); } - setStep( newStep ); }; return (
- diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js index 767f1c304..deddb5e6f 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js @@ -4,21 +4,25 @@ import Container, { import StepWelcome from './StepWelcome.js'; import StepBusiness from './StepBusiness.js'; import StepProducts from './StepProducts.js'; -import { useState } from '@wordpress/element'; +import { useOnboardingStep } from '../../../data'; const Onboarding = () => { - const [ step, setStep ] = useState( 0 ); + const { step, setStep, setCompleted } = useOnboardingStep(); return (
- +
); }; -const Stepper = ( { currentStep, setStep } ) => { +const Stepper = ( { currentStep, setStep, setCompleted } ) => { const stepperOrder = [ StepWelcome, StepBusiness, StepProducts ]; const renderSteps = () => { @@ -31,6 +35,7 @@ const Stepper = ( { currentStep, setStep } ) => {
diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js index dda0f39a4..9ac7de1c2 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js @@ -6,7 +6,12 @@ import PaymentMethodIcons from '../../ReusableComponents/PaymentMethodIcons'; import { useState } from '@wordpress/element'; import Navigation from '../../ReusableComponents/Navigation'; -const StepBusiness = ( { setStep, currentStep, stepperOrder } ) => { +const StepBusiness = ( { + setStep, + currentStep, + stepperOrder, + setCompleted, +} ) => { const [ businessCategory, setBusinessCategory ] = useState( null ); const BUSINESS_RADIO_GROUP_NAME = 'business'; const CASUAL_SELLER_CHECKBOX_VALUE = 'casual_seller'; @@ -91,6 +96,7 @@ const StepBusiness = ( { setStep, currentStep, stepperOrder } ) => { setStep={ setStep } currentStep={ currentStep } stepperOrder={ stepperOrder } + setCompleted={ setCompleted } canProceeedCallback={ () => businessCategory !== null } />
diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js index f155dab62..6ceaf0f4d 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js @@ -5,7 +5,12 @@ import SelectBox from '../../ReusableComponents/SelectBox'; import SelectBoxWrapper from '../../ReusableComponents/SelectBoxWrapper'; import { useState } from '@wordpress/element'; -const StepProducts = ( { setStep, currentStep, stepperOrder } ) => { +const StepProducts = ( { + setStep, + currentStep, + stepperOrder, + setCompleted, +} ) => { const [ products, setProducts ] = useState( [] ); const PRODUCTS_CHECKBOX_GROUP_NAME = 'products'; const VIRTUAL_CHECKBOX_VALUE = 'virtual'; @@ -118,6 +123,7 @@ const StepProducts = ( { setStep, currentStep, stepperOrder } ) => { setStep={ setStep } currentStep={ currentStep } stepperOrder={ stepperOrder } + setCompleted={ setCompleted } canProceeedCallback={ () => products.length > 0 } /> From 46c7b840888e5b148deb2bd15f087d238f9b6864 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 18:27:57 +0100 Subject: [PATCH 27/54] =?UTF-8?q?=F0=9F=90=9B=20Add=20missing=20reducer=20?= =?UTF-8?q?for=20the=20=E2=80=9Ccompleted=E2=80=9D=20flag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/resources/js/data/onboarding/reducer.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js index 03dab52d5..4b85521a7 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js @@ -44,6 +44,9 @@ export const onboardingReducer = ( return setTransient( { isSaving: action.isSaving } ); // Persistent data. + case ACTION_TYPES.SET_ONBOARDING_COMPLETED: + return setPersistent( { completed: action.completed } ); + case ACTION_TYPES.SET_CLIENT_ID: return setPersistent( { clientId: action.clientId } ); From 6a80a016cf82ed3ce71537fa100af2e5b94c9d05 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 18:56:25 +0100 Subject: [PATCH 28/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20MInor=20code=20organ?= =?UTF-8?q?ization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/js/data/onboarding/action-types.js | 2 +- .../ppcp-settings/resources/js/data/onboarding/actions.js | 2 +- .../ppcp-settings/resources/js/data/onboarding/reducer.js | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/ppcp-settings/resources/js/data/onboarding/action-types.js b/modules/ppcp-settings/resources/js/data/onboarding/action-types.js index 06b55f0d6..49ceed612 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/action-types.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/action-types.js @@ -1,6 +1,6 @@ export default { // Transient data. - SET_IS_SAVING_ONBOARDING_DETAILS: 'SET_IS_SAVING_ONBOARDING_DETAILS', + SET_IS_SAVING_ONBOARDING: 'SET_IS_SAVING_ONBOARDING', // Persistent data. SET_ONBOARDING_COMPLETED: 'SET_ONBOARDING_COMPLETED', diff --git a/modules/ppcp-settings/resources/js/data/onboarding/actions.js b/modules/ppcp-settings/resources/js/data/onboarding/actions.js index 3abf80e65..db469d9d7 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/actions.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/actions.js @@ -11,7 +11,7 @@ import { NAMESPACE, STORE_NAME } from '../constants'; */ export const setIsSaving = ( isSaving ) => { return { - type: ACTION_TYPES.SET_IS_SAVING_ONBOARDING_DETAILS, + type: ACTION_TYPES.SET_IS_SAVING_ONBOARDING, isSaving, }; }; diff --git a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js index 4b85521a7..202e15381 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js @@ -40,10 +40,13 @@ export const onboardingReducer = ( switch ( type ) { // Transient data. - case ACTION_TYPES.SET_IS_SAVING_ONBOARDING_DETAILS: + case ACTION_TYPES.SET_IS_SAVING_ONBOARDING: return setTransient( { isSaving: action.isSaving } ); // Persistent data. + case ACTION_TYPES.SET_ONBOARDING_DETAILS: + return setPersistent( action.payload ); + case ACTION_TYPES.SET_ONBOARDING_COMPLETED: return setPersistent( { completed: action.completed } ); @@ -53,9 +56,6 @@ export const onboardingReducer = ( case ACTION_TYPES.SET_CLIENT_SECRET: return setPersistent( { clientSecret: action.clientSecret } ); - case ACTION_TYPES.SET_ONBOARDING_DETAILS: - return setPersistent( action.payload ); - case ACTION_TYPES.SET_ONBOARDING_STEP: return setPersistent( { step: action.step } ); From 3d05c65f5026cd1c5737e8b058e5b05ae0fa30c3 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 28 Oct 2024 18:57:39 +0100 Subject: [PATCH 29/54] =?UTF-8?q?=E2=9C=A8=20New=20=E2=80=9CisReady?= =?UTF-8?q?=E2=80=9D=20flag=20to=20avoid=20invalid=20page=20content?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before this change, the onboarding wizard was briefly displayed on every page load --- .../resources/js/Components/Screens/Settings.js | 5 +++++ .../resources/js/data/onboarding/action-types.js | 1 + .../resources/js/data/onboarding/actions.js | 13 +++++++++++++ .../resources/js/data/onboarding/hooks.js | 5 +++++ .../resources/js/data/onboarding/reducer.js | 4 ++++ .../resources/js/data/onboarding/resolvers.js | 3 ++- 6 files changed, 30 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Settings.js b/modules/ppcp-settings/resources/js/Components/Screens/Settings.js index ba2fcb0e9..c74805499 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Settings.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Settings.js @@ -6,6 +6,11 @@ import Onboarding from './Onboarding/Onboarding'; const Settings = () => { const onboardingProgress = useOnboardingStep(); + if ( ! onboardingProgress.isReady ) { + // TODO: Use better loading state indicator. + return
Loading...
; + } + if ( ! onboardingProgress.completed ) { return ; } diff --git a/modules/ppcp-settings/resources/js/data/onboarding/action-types.js b/modules/ppcp-settings/resources/js/data/onboarding/action-types.js index 49ceed612..ac5a6a0df 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/action-types.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/action-types.js @@ -1,5 +1,6 @@ export default { // Transient data. + SET_ONBOARDING_IS_READY: 'SET_ONBOARDING_IS_READY', SET_IS_SAVING_ONBOARDING: 'SET_IS_SAVING_ONBOARDING', // Persistent data. diff --git a/modules/ppcp-settings/resources/js/data/onboarding/actions.js b/modules/ppcp-settings/resources/js/data/onboarding/actions.js index db469d9d7..6ac070d3a 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/actions.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/actions.js @@ -3,6 +3,19 @@ import { apiFetch } from '@wordpress/data-controls'; import ACTION_TYPES from './action-types'; import { NAMESPACE, STORE_NAME } from '../constants'; +/** + * Non-persistent. Marks the onboarding details as "ready", i.e., fully initialized. + * + * @param {boolean} isReady + * @return {{type: string, isReady}} The action. + */ +export const setIsReady = ( isReady ) => { + return { + type: ACTION_TYPES.SET_ONBOARDING_IS_READY, + isReady, + }; +}; + /** * Non-persistent. Changes the "saving" flag. * diff --git a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js index 6d489e0dd..66bfec24a 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js @@ -57,6 +57,10 @@ export const useOnboardingStep = () => { const { persist, setOnboardingStep, setCompleted } = useDispatch( STORE_NAME ); + const isReady = useSelect( ( select ) => { + return select( STORE_NAME ).getTransientData().isReady; + } ); + const step = useSelect( ( select ) => { return select( STORE_NAME ).getPersistentData().step || 0; } ); @@ -71,6 +75,7 @@ export const useOnboardingStep = () => { }; return { + isReady, step, setStep: ( value ) => setDetailAndPersist( setOnboardingStep, value ), completed, diff --git a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js index 202e15381..e349d1f14 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js @@ -1,6 +1,7 @@ import ACTION_TYPES from './action-types'; const defaultState = { + isReady: false, isSaving: false, data: { completed: false, @@ -40,6 +41,9 @@ export const onboardingReducer = ( switch ( type ) { // Transient data. + case ACTION_TYPES.SET_ONBOARDING_IS_READY: + return setTransient( { isReady: action.isReady } ); + case ACTION_TYPES.SET_IS_SAVING_ONBOARDING: return setTransient( { isSaving: action.isSaving } ); diff --git a/modules/ppcp-settings/resources/js/data/onboarding/resolvers.js b/modules/ppcp-settings/resources/js/data/onboarding/resolvers.js index 71002f371..18f2a7528 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/resolvers.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/resolvers.js @@ -2,7 +2,7 @@ import { dispatch } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; import { apiFetch } from '@wordpress/data-controls'; import { NAMESPACE } from '../constants'; -import { setOnboardingDetails } from './actions'; +import { setIsReady, setOnboardingDetails } from './actions'; /** * Retrieve settings from the site's REST API. @@ -13,6 +13,7 @@ export function* getPersistentData() { try { const result = yield apiFetch( { path } ); yield setOnboardingDetails( result ); + yield setIsReady( true ); } catch ( e ) { yield dispatch( 'core/notices' ).createErrorNotice( __( From dcb8d01370f52f2655fd73c49ef7e65183dadfb3 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Tue, 29 Oct 2024 11:40:38 +0100 Subject: [PATCH 30/54] =?UTF-8?q?=E2=AC=87=EF=B8=8F=20Use=20older=20versio?= =?UTF-8?q?n=20of=20navigation=20package?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v 8.2.0 requires node 20, which we did not test yet --- modules/ppcp-settings/package.json | 2 +- modules/ppcp-settings/yarn.lock | 1956 +++++++++++++--------------- 2 files changed, 895 insertions(+), 1063 deletions(-) diff --git a/modules/ppcp-settings/package.json b/modules/ppcp-settings/package.json index ffae57b52..ccdd55043 100644 --- a/modules/ppcp-settings/package.json +++ b/modules/ppcp-settings/package.json @@ -7,7 +7,7 @@ "build": "wp-scripts build --webpack-src-dir=resources/js --output-path=assets" }, "devDependencies": { - "@woocommerce/navigation": "^8.2.0", + "@woocommerce/navigation": "8.1.0", "@wordpress/data": "^10.10.0", "@wordpress/data-controls": "^4.10.0", "@wordpress/scripts": "^30.3.0" diff --git a/modules/ppcp-settings/yarn.lock b/modules/ppcp-settings/yarn.lock index a0c364e2d..990cb1c0c 100644 --- a/modules/ppcp-settings/yarn.lock +++ b/modules/ppcp-settings/yarn.lock @@ -10,15 +10,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.25.7.tgz#438f2c524071531d643c6f0188e1e28f130cebc7" - integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g== - dependencies: - "@babel/highlight" "^7.25.7" - picocolors "^1.0.0" - -"@babel/code-frame@^7.25.9": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.7", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.0.tgz#9374b5cd068d128dac0b94ff482594273b1c2815" integrity sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g== @@ -27,10 +19,10 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.7", "@babel/compat-data@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.8.tgz#0376e83df5ab0eb0da18885c0140041f0747a402" - integrity sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.7", "@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.0.tgz#f02ba6d34e88fadd5e8861e8b38902f43cc1c819" + integrity sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA== "@babel/core@7.25.7": version "7.25.7" @@ -54,20 +46,20 @@ semver "^6.3.1" "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.21.3", "@babel/core@^7.23.9": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.8.tgz#a57137d2a51bbcffcfaeba43cb4dd33ae3e0e1c6" - integrity sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg== + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.25.7" - "@babel/generator" "^7.25.7" - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helpers" "^7.25.7" - "@babel/parser" "^7.25.8" - "@babel/template" "^7.25.7" - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.8" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -83,17 +75,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.25.7", "@babel/generator@^7.7.2": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.7.tgz#de86acbeb975a3e11ee92dd52223e6b03b479c56" - integrity sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA== - dependencies: - "@babel/types" "^7.25.7" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/generator@^7.25.9": +"@babel/generator@^7.25.7", "@babel/generator@^7.25.9", "@babel/generator@^7.26.0", "@babel/generator@^7.7.2": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.0.tgz#505cc7c90d92513f458a477e5ef0703e7c91b8d7" integrity sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w== @@ -104,51 +86,51 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" -"@babel/helper-annotate-as-pure@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz#63f02dbfa1f7cb75a9bdb832f300582f30bb8972" - integrity sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA== +"@babel/helper-annotate-as-pure@^7.25.7", "@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== dependencies: - "@babel/types" "^7.25.7" + "@babel/types" "^7.25.9" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz#d721650c1f595371e0a23ee816f1c3c488c0d622" - integrity sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz#f41752fe772a578e67286e6779a68a5a92de1ee9" + integrity sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz#11260ac3322dda0ef53edfae6e97b961449f5fa4" - integrity sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.7", "@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== dependencies: - "@babel/compat-data" "^7.25.7" - "@babel/helper-validator-option" "^7.25.7" + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz#5d65074c76cae75607421c00d6bd517fe1892d6b" - integrity sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw== +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-member-expression-to-functions" "^7.25.7" - "@babel/helper-optimise-call-expression" "^7.25.7" - "@babel/helper-replace-supers" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz#dcb464f0e2cdfe0c25cc2a0a59c37ab940ce894e" - integrity sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz#3e8999db94728ad2b2458d7a470e7770b7764e26" + integrity sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" regexpu-core "^6.1.1" semver "^6.3.1" @@ -163,15 +145,15 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-member-expression-to-functions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz#541a33b071f0355a63a0fa4bdf9ac360116b8574" - integrity sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA== +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-module-imports@^7.16.7": +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.25.7", "@babel/helper-module-imports@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== @@ -179,174 +161,138 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/helper-module-imports@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz#dba00d9523539152906ba49263e36d7261040472" - integrity sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw== +"@babel/helper-module-transforms@^7.25.7", "@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/helper-module-transforms@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz#2ac9372c5e001b19bc62f1fe7d96a18cb0901d1a" - integrity sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ== +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== dependencies: - "@babel/helper-module-imports" "^7.25.7" - "@babel/helper-simple-access" "^7.25.7" - "@babel/helper-validator-identifier" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.9" -"@babel/helper-optimise-call-expression@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz#1de1b99688e987af723eed44fa7fc0ee7b97d77a" - integrity sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.7", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== dependencies: - "@babel/types" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz#8ec5b21812d992e1ef88a9b068260537b6f0e36c" - integrity sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw== - -"@babel/helper-remap-async-to-generator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz#9efdc39df5f489bcd15533c912b6c723a0a65021" - integrity sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw== +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-wrap-function" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/helper-replace-supers@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz#38cfda3b6e990879c71d08d0fef9236b62bd75f5" - integrity sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw== +"@babel/helper-simple-access@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz#6d51783299884a2c74618d6ef0f86820ec2e7739" + integrity sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q== dependencies: - "@babel/helper-member-expression-to-functions" "^7.25.7" - "@babel/helper-optimise-call-expression" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-simple-access@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz#5eb9f6a60c5d6b2e0f76057004f8dacbddfae1c0" - integrity sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ== +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz#382831c91038b1a6d32643f5f49505b8442cb87c" - integrity sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA== - dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" - -"@babel/helper-string-parser@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz#d50e8d37b1176207b4fe9acedec386c565a44a54" - integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" "@babel/helper-string-parser@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== -"@babel/helper-validator-identifier@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5" - integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== - "@babel/helper-validator-identifier@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== -"@babel/helper-validator-option@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz#97d1d684448228b30b506d90cace495d6f492729" - integrity sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ== +"@babel/helper-validator-option@^7.25.7", "@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== -"@babel/helper-wrap-function@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz#9f6021dd1c4fdf4ad515c809967fc4bac9a70fe7" - integrity sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg== +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== dependencies: - "@babel/template" "^7.25.7" - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helpers@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.7.tgz#091b52cb697a171fe0136ab62e54e407211f09c2" - integrity sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA== +"@babel/helpers@^7.25.7", "@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== dependencies: - "@babel/template" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" -"@babel/highlight@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.7.tgz#20383b5f442aa606e7b5e3043b0b1aafe9f37de5" - integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw== - dependencies: - "@babel/helper-validator-identifier" "^7.25.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.7", "@babel/parser@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.8.tgz#f6aaf38e80c36129460c1657c0762db584c9d5e2" - integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== - dependencies: - "@babel/types" "^7.25.8" - -"@babel/parser@^7.25.9", "@babel/parser@^7.26.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0": version "7.26.1" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.1.tgz#44e02499960df2cdce2c456372a3e8e0c3c5c975" integrity sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw== dependencies: "@babel/types" "^7.26.0" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz#93969ac50ef4d68b2504b01b758af714e4cbdd64" - integrity sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.7", "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz#a338d611adb9dcd599b8b1efa200c88ebeffe046" - integrity sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.7", "@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz#c5f755e911dfac7ef6957300c0f9c4a8c18c06f4" - integrity sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz#3b7ea04492ded990978b6deaa1dfca120ad4455a" - integrity sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" - "@babel/plugin-transform-optional-chaining" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz#9622b1d597a703aa3a921e6f58c9c2d9a028d2c5" - integrity sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.7", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -395,19 +341,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz#8ce248f9f4ed4b7ed4cb2e0eb4ed9efd9f52921f" - integrity sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ== +"@babel/plugin-syntax-import-assertions@^7.25.7", "@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz#d78dd0499d30df19a598e63ab895e21b909bc43f" - integrity sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw== +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.25.7", "@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" @@ -423,12 +369,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.25.7", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz#5352d398d11ea5e7ef330c854dea1dae0bf18165" - integrity sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw== +"@babel/plugin-syntax-jsx@^7.25.7", "@babel/plugin-syntax-jsx@^7.25.9", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -486,12 +432,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.25.7", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz#bfc05b0cc31ebd8af09964650cee723bb228108b" - integrity sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g== +"@babel/plugin-syntax-typescript@^7.25.9", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -501,327 +447,327 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz#1b9ed22e6890a0e9ff470371c73b8c749bcec386" - integrity sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg== +"@babel/plugin-transform-arrow-functions@^7.25.7", "@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-async-generator-functions@^7.25.7", "@babel/plugin-transform-async-generator-functions@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz#3331de02f52cc1f2c75b396bec52188c85b0b1ec" - integrity sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA== +"@babel/plugin-transform-async-generator-functions@^7.25.7", "@babel/plugin-transform-async-generator-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-remap-async-to-generator" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-async-to-generator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz#a44c7323f8d4285a6c568dd43c5c361d6367ec52" - integrity sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg== +"@babel/plugin-transform-async-to-generator@^7.25.7", "@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== dependencies: - "@babel/helper-module-imports" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-remap-async-to-generator" "^7.25.7" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" -"@babel/plugin-transform-block-scoped-functions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz#e0b8843d5571719a2f1bf7e284117a3379fcc17c" - integrity sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ== +"@babel/plugin-transform-block-scoped-functions@^7.25.7", "@babel/plugin-transform-block-scoped-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458" + integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-block-scoping@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz#6dab95e98adf780ceef1b1c3ab0e55cd20dd410a" - integrity sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow== +"@babel/plugin-transform-block-scoping@^7.25.7", "@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-class-properties@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz#a389cfca7a10ac80e3ff4c75fca08bd097ad1523" - integrity sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g== +"@babel/plugin-transform-class-properties@^7.25.7", "@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-class-static-block@^7.25.7", "@babel/plugin-transform-class-static-block@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz#a8af22028920fe404668031eceb4c3aadccb5262" - integrity sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ== +"@babel/plugin-transform-class-static-block@^7.25.7", "@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-classes@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz#5103206cf80d02283bbbd044509ea3b65d0906bb" - integrity sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg== +"@babel/plugin-transform-classes@^7.25.7", "@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-replace-supers" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz#7f621f0aa1354b5348a935ab12e3903842466f65" - integrity sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA== +"@babel/plugin-transform-computed-properties@^7.25.7", "@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/template" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" -"@babel/plugin-transform-destructuring@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz#f6f26a9feefb5aa41fd45b6f5838901b5333d560" - integrity sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA== +"@babel/plugin-transform-destructuring@^7.25.7", "@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dotall-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz#9d775c4a3ff1aea64045300fcd4309b4a610ef02" - integrity sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ== +"@babel/plugin-transform-dotall-regex@^7.25.7", "@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-keys@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz#fbba7d1155eab76bd4f2a038cbd5d65883bd7a93" - integrity sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg== +"@babel/plugin-transform-duplicate-keys@^7.25.7", "@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz#102b31608dcc22c08fbca1894e104686029dc141" - integrity sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.7", "@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dynamic-import@^7.25.7", "@babel/plugin-transform-dynamic-import@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz#f1edbe75b248cf44c70c8ca8ed3818a668753aaa" - integrity sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A== +"@babel/plugin-transform-dynamic-import@^7.25.7", "@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-exponentiation-operator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz#5961a3a23a398faccd6cddb34a2182807d75fb5f" - integrity sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg== +"@babel/plugin-transform-exponentiation-operator@^7.25.7", "@babel/plugin-transform-exponentiation-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz#ece47b70d236c1d99c263a1e22b62dc20a4c8b0f" + integrity sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-export-namespace-from@^7.25.7", "@babel/plugin-transform-export-namespace-from@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz#d1988c3019a380b417e0516418b02804d3858145" - integrity sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw== +"@babel/plugin-transform-export-namespace-from@^7.25.7", "@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-for-of@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz#0acfea0f27aa290818b5b48a5a44b3f03fc13669" - integrity sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw== +"@babel/plugin-transform-for-of@^7.25.7", "@babel/plugin-transform-for-of@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-function-name@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz#7e394ccea3693902a8b50ded8b6ae1fa7b8519fd" - integrity sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ== +"@babel/plugin-transform-function-name@^7.25.7", "@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== dependencies: - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-json-strings@^7.25.7", "@babel/plugin-transform-json-strings@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz#6fb3ec383a2ea92652289fdba653e3f9de722694" - integrity sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA== +"@babel/plugin-transform-json-strings@^7.25.7", "@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz#70cbdc742f2cfdb1a63ea2cbd018d12a60b213c3" - integrity sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w== +"@babel/plugin-transform-literals@^7.25.7", "@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-logical-assignment-operators@^7.25.7", "@babel/plugin-transform-logical-assignment-operators@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz#01868ff92daa9e525b4c7902aa51979082a05710" - integrity sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g== +"@babel/plugin-transform-logical-assignment-operators@^7.25.7", "@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-member-expression-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz#0a36c3fbd450cc9e6485c507f005fa3d1bc8fca5" - integrity sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw== +"@babel/plugin-transform-member-expression-literals@^7.25.7", "@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-amd@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz#bb4e543b5611f6c8c685a2fd485408713a3adf3d" - integrity sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA== +"@babel/plugin-transform-modules-amd@^7.25.7", "@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-commonjs@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz#173f0c791bb7407c092ce6d77ee90eb3f2d1d2fd" - integrity sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg== +"@babel/plugin-transform-modules-commonjs@^7.25.7", "@babel/plugin-transform-modules-commonjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz#d165c8c569a080baf5467bda88df6425fc060686" + integrity sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-simple-access" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-simple-access" "^7.25.9" -"@babel/plugin-transform-modules-systemjs@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz#8b14d319a177cc9c85ef8b0512afd429d9e2e60b" - integrity sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g== +"@babel/plugin-transform-modules-systemjs@^7.25.7", "@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-identifier" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-modules-umd@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz#00ee7a7e124289549381bfb0e24d87fd7f848367" - integrity sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw== +"@babel/plugin-transform-modules-umd@^7.25.7", "@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz#a2f3f6d7f38693b462542951748f0a72a34d196d" - integrity sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow== +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.7", "@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-new-target@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz#52b2bde523b76c548749f38dc3054f1f45e82bc9" - integrity sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA== +"@babel/plugin-transform-new-target@^7.25.7", "@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-nullish-coalescing-operator@^7.25.7", "@babel/plugin-transform-nullish-coalescing-operator@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz#befb4900c130bd52fccf2b926314557987f1b552" - integrity sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ== +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.7", "@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" + integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-numeric-separator@^7.25.7", "@babel/plugin-transform-numeric-separator@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz#91e370486371637bd42161052f2602c701386891" - integrity sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q== +"@babel/plugin-transform-numeric-separator@^7.25.7", "@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-object-rest-spread@^7.25.7", "@babel/plugin-transform-object-rest-spread@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz#0904ac16bcce41df4db12d915d6780f85c7fb04b" - integrity sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g== +"@babel/plugin-transform-object-rest-spread@^7.25.7", "@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== dependencies: - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-transform-parameters" "^7.25.7" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" -"@babel/plugin-transform-object-super@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz#582a9cea8cf0a1e02732be5b5a703a38dedf5661" - integrity sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA== +"@babel/plugin-transform-object-super@^7.25.7", "@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-replace-supers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" -"@babel/plugin-transform-optional-catch-binding@^7.25.7", "@babel/plugin-transform-optional-catch-binding@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz#2649b86a3bb202c6894ec81a6ddf41b94d8f3103" - integrity sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg== +"@babel/plugin-transform-optional-catch-binding@^7.25.7", "@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-optional-chaining@^7.25.7", "@babel/plugin-transform-optional-chaining@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz#f46283b78adcc5b6ab988a952f989e7dce70653f" - integrity sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg== +"@babel/plugin-transform-optional-chaining@^7.25.7", "@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-parameters@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz#80c38b03ef580f6d6bffe1c5254bb35986859ac7" - integrity sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ== +"@babel/plugin-transform-parameters@^7.25.7", "@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-methods@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz#c790a04f837b4bd61d6b0317b43aa11ff67dce80" - integrity sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA== +"@babel/plugin-transform-private-methods@^7.25.7", "@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-property-in-object@^7.25.7", "@babel/plugin-transform-private-property-in-object@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz#1234f856ce85e061f9688764194e51ea7577c434" - integrity sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow== +"@babel/plugin-transform-private-property-in-object@^7.25.7", "@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-property-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz#a8612b4ea4e10430f00012ecf0155662c7d6550d" - integrity sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw== +"@babel/plugin-transform-property-literals@^7.25.7", "@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.7.tgz#b7f18dcdfac137a635a3f1242ea7c931df82a666" - integrity sha512-/qXt69Em8HgsjCLu7G3zdIQn7A2QwmYND7Wa0LTp09Na+Zn8L5d0A7wSXrKi18TJRc/Q5S1i1De/SU1LzVkSvA== + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz#08a1de35a301929b60fdf2788a54b46cd8ecd0ef" + integrity sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-display-name@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz#2753e875a1b702fb1d806c4f5d4c194d64cadd88" - integrity sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA== +"@babel/plugin-transform-react-display-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx-development@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz#2fbd77887b8fa2942d7cb61edf1029ea1b048554" - integrity sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg== +"@babel/plugin-transform-react-jsx-development@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" + integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== dependencies: - "@babel/plugin-transform-react-jsx" "^7.25.7" + "@babel/plugin-transform-react-jsx" "^7.25.9" -"@babel/plugin-transform-react-jsx@7.25.7", "@babel/plugin-transform-react-jsx@^7.25.7": +"@babel/plugin-transform-react-jsx@7.25.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz#f5e2af6020a562fe048dd343e571c4428e6c5632" integrity sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q== @@ -832,28 +778,47 @@ "@babel/plugin-syntax-jsx" "^7.25.7" "@babel/types" "^7.25.7" -"@babel/plugin-transform-react-pure-annotations@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz#6d0b8dadb2d3c5cbb8ade68c5efd49470b0d65f7" - integrity sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA== +"@babel/plugin-transform-react-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-transform-regenerator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz#6eb006e6d26f627bc2f7844a9f19770721ad6f3e" - integrity sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ== +"@babel/plugin-transform-react-pure-annotations@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" + integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-regenerator@^7.25.7", "@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz#dc56b25e02afaabef3ce0c5b06b0916e8523e995" - integrity sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng== +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-reserved-words@^7.25.7", "@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-runtime@7.25.7": version "7.25.7" @@ -867,83 +832,83 @@ babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz#92690a9c671915602d91533c278cc8f6bf12275f" - integrity sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA== +"@babel/plugin-transform-shorthand-properties@^7.25.7", "@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-spread@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz#df83e899a9fc66284ee601a7b738568435b92998" - integrity sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw== +"@babel/plugin-transform-spread@^7.25.7", "@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-sticky-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz#341c7002bef7f29037be7fb9684e374442dd0d17" - integrity sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw== +"@babel/plugin-transform-sticky-regex@^7.25.7", "@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-template-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz#e566c581bb16d8541dd8701093bb3457adfce16b" - integrity sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA== +"@babel/plugin-transform-template-literals@^7.25.7", "@babel/plugin-transform-template-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" + integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-typeof-symbol@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz#debb1287182efd20488f126be343328c679b66eb" - integrity sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA== +"@babel/plugin-transform-typeof-symbol@^7.25.7", "@babel/plugin-transform-typeof-symbol@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b" + integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-typescript@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz#8fc7c3d28ddd36bce45b9b48594129d0e560cfbe" - integrity sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q== +"@babel/plugin-transform-typescript@^7.25.7", "@babel/plugin-transform-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz#69267905c2b33c2ac6d8fe765e9dc2ddc9df3849" + integrity sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" - "@babel/plugin-syntax-typescript" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" -"@babel/plugin-transform-unicode-escapes@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz#973592b6d13a914794e1de8cf1383e50e0f87f81" - integrity sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ== +"@babel/plugin-transform-unicode-escapes@^7.25.7", "@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-property-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz#25349197cce964b1343f74fa7cfdf791a1b1919e" - integrity sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w== +"@babel/plugin-transform-unicode-property-regex@^7.25.7", "@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz#f93a93441baf61f713b6d5552aaa856bfab34809" - integrity sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g== +"@babel/plugin-transform-unicode-regex@^7.25.7", "@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-sets-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz#d1b3295d29e0f8f4df76abc909ad1ebee919560c" - integrity sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw== +"@babel/plugin-transform-unicode-sets-regex@^7.25.7", "@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/preset-env@7.25.7": version "7.25.7" @@ -1035,72 +1000,73 @@ semver "^6.3.1" "@babel/preset-env@^7.20.2": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.8.tgz#dc6b719627fb29cd9cccbbbe041802fd575b524c" - integrity sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg== + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1" + integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== dependencies: - "@babel/compat-data" "^7.25.8" - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-option" "^7.25.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.7" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.7" + "@babel/compat-data" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.25.7" - "@babel/plugin-syntax-import-attributes" "^7.25.7" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.25.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.8" - "@babel/plugin-transform-async-to-generator" "^7.25.7" - "@babel/plugin-transform-block-scoped-functions" "^7.25.7" - "@babel/plugin-transform-block-scoping" "^7.25.7" - "@babel/plugin-transform-class-properties" "^7.25.7" - "@babel/plugin-transform-class-static-block" "^7.25.8" - "@babel/plugin-transform-classes" "^7.25.7" - "@babel/plugin-transform-computed-properties" "^7.25.7" - "@babel/plugin-transform-destructuring" "^7.25.7" - "@babel/plugin-transform-dotall-regex" "^7.25.7" - "@babel/plugin-transform-duplicate-keys" "^7.25.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.7" - "@babel/plugin-transform-dynamic-import" "^7.25.8" - "@babel/plugin-transform-exponentiation-operator" "^7.25.7" - "@babel/plugin-transform-export-namespace-from" "^7.25.8" - "@babel/plugin-transform-for-of" "^7.25.7" - "@babel/plugin-transform-function-name" "^7.25.7" - "@babel/plugin-transform-json-strings" "^7.25.8" - "@babel/plugin-transform-literals" "^7.25.7" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.8" - "@babel/plugin-transform-member-expression-literals" "^7.25.7" - "@babel/plugin-transform-modules-amd" "^7.25.7" - "@babel/plugin-transform-modules-commonjs" "^7.25.7" - "@babel/plugin-transform-modules-systemjs" "^7.25.7" - "@babel/plugin-transform-modules-umd" "^7.25.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.7" - "@babel/plugin-transform-new-target" "^7.25.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.8" - "@babel/plugin-transform-numeric-separator" "^7.25.8" - "@babel/plugin-transform-object-rest-spread" "^7.25.8" - "@babel/plugin-transform-object-super" "^7.25.7" - "@babel/plugin-transform-optional-catch-binding" "^7.25.8" - "@babel/plugin-transform-optional-chaining" "^7.25.8" - "@babel/plugin-transform-parameters" "^7.25.7" - "@babel/plugin-transform-private-methods" "^7.25.7" - "@babel/plugin-transform-private-property-in-object" "^7.25.8" - "@babel/plugin-transform-property-literals" "^7.25.7" - "@babel/plugin-transform-regenerator" "^7.25.7" - "@babel/plugin-transform-reserved-words" "^7.25.7" - "@babel/plugin-transform-shorthand-properties" "^7.25.7" - "@babel/plugin-transform-spread" "^7.25.7" - "@babel/plugin-transform-sticky-regex" "^7.25.7" - "@babel/plugin-transform-template-literals" "^7.25.7" - "@babel/plugin-transform-typeof-symbol" "^7.25.7" - "@babel/plugin-transform-unicode-escapes" "^7.25.7" - "@babel/plugin-transform-unicode-property-regex" "^7.25.7" - "@babel/plugin-transform-unicode-regex" "^7.25.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.7" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.25.9" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.25.9" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.25.9" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.25.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.25.9" + "@babel/plugin-transform-typeof-symbol" "^7.25.9" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.6" @@ -1118,18 +1084,18 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.25.7.tgz#081cbe1dea363b732764d06a0fdda67ffa17735d" - integrity sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg== + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.25.9.tgz#5f473035dc2094bcfdbc7392d0766bd42dce173e" + integrity sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-option" "^7.25.7" - "@babel/plugin-transform-react-display-name" "^7.25.7" - "@babel/plugin-transform-react-jsx" "^7.25.7" - "@babel/plugin-transform-react-jsx-development" "^7.25.7" - "@babel/plugin-transform-react-pure-annotations" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-transform-react-display-name" "^7.25.9" + "@babel/plugin-transform-react-jsx" "^7.25.9" + "@babel/plugin-transform-react-jsx-development" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations" "^7.25.9" -"@babel/preset-typescript@7.25.7", "@babel/preset-typescript@^7.21.0": +"@babel/preset-typescript@7.25.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz#43c5b68eccb856ae5b52274b77b1c3c413cde1b7" integrity sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw== @@ -1140,6 +1106,17 @@ "@babel/plugin-transform-modules-commonjs" "^7.25.7" "@babel/plugin-transform-typescript" "^7.25.7" +"@babel/preset-typescript@^7.21.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" + integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-typescript" "^7.25.9" + "@babel/runtime-corejs2@7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.5.5.tgz#c3214c08ef20341af4187f1c9fbdc357fbec96b2" @@ -1148,30 +1125,21 @@ core-js "^2.6.5" regenerator-runtime "^0.13.2" -"@babel/runtime@7.25.7", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@7.25.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.7.tgz#7ffb53c37a8f247c8c4d335e89cdf16a2e0d0fb6" integrity sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w== dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.7.6": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.25.7", "@babel/template@^7.3.3": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.7.tgz#27f69ce382855d915b14ab0fe5fb4cbf88fa0769" - integrity sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA== - dependencies: - "@babel/code-frame" "^7.25.7" - "@babel/parser" "^7.25.7" - "@babel/types" "^7.25.7" - -"@babel/template@^7.25.9": +"@babel/template@^7.25.7", "@babel/template@^7.25.9", "@babel/template@^7.3.3": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== @@ -1180,20 +1148,7 @@ "@babel/parser" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/traverse@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.7.tgz#83e367619be1cab8e4f2892ef30ba04c26a40fa8" - integrity sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg== - dependencies: - "@babel/code-frame" "^7.25.7" - "@babel/generator" "^7.25.7" - "@babel/parser" "^7.25.7" - "@babel/template" "^7.25.7" - "@babel/types" "^7.25.7" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/traverse@^7.25.9": +"@babel/traverse@^7.25.7", "@babel/traverse@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84" integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw== @@ -1206,16 +1161,7 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.25.7", "@babel/types@^7.25.8", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.8.tgz#5cf6037258e8a9bcad533f4979025140cb9993e1" - integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== - dependencies: - "@babel/helper-string-parser" "^7.25.7" - "@babel/helper-validator-identifier" "^7.25.7" - to-fast-properties "^2.0.0" - -"@babel/types@^7.25.9", "@babel/types@^7.26.0": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.25.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff" integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA== @@ -1229,14 +1175,14 @@ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@csstools/css-parser-algorithms@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.2.tgz#be03c710a60b34f95ea62e332c9ca0c2674f6d5f" - integrity sha512-6tC/MnlEvs5suR4Ahef4YlBccJDHZuxGsAlxXmybWjZ5jPxlzLSMlRZ9mVHSRvlD+CmtE7+hJ+UQbfXrws/rUQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.3.tgz#f0bffb2faa0f054eda350c1abd25306f15465323" + integrity sha512-15WQTALDyxAwSgAvLt7BksAssiSrNNhTv4zM7qX9U6R7FtpNskVVakzWQlYODlwPwXhGpKPmB10LM943pxMe7w== "@csstools/css-tokenizer@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.2.tgz#1c1d7298f6a7b3db94afe53d949b9a7d6a8ebc57" - integrity sha512-IuTRcD53WHsXPCZ6W7ubfGqReTJ9Ra0yRRFmXYP/Re8hFYYfoIYIK4080X5luslVLWimhIeFq0hj09urVMQzTw== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz#a5502c8539265fecbd873c1e395a890339f119c2" + integrity sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw== "@csstools/media-query-list-parser@^3.0.1": version "3.0.1" @@ -1403,16 +1349,16 @@ jsdoc-type-pratt-parser "~4.0.0" "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== dependencies: - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.11.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" - integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -1434,6 +1380,26 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== +"@floating-ui/core@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-0.6.2.tgz#f2813f0e5f3d5ed7af5029e1a082203dadf02b7d" + integrity sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg== + +"@floating-ui/dom@^0.4.5": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-0.4.5.tgz#2e88d16646119cc67d44683f75ee99840475bbfa" + integrity sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw== + dependencies: + "@floating-ui/core" "^0.6.2" + +"@floating-ui/react-dom@0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-0.6.3.tgz#7b64cfd4fd12e4a0515dbf1b2be16e48c9a06c5a" + integrity sha512-hC+pS5D6AgS2wWjbmSQ6UR6Kpy+drvWGJIri6e1EDGADTPsCaa4KzCgmCczHrQeInx9tqs81EyDmbKJYY2swKg== + dependencies: + "@floating-ui/dom" "^0.4.5" + use-isomorphic-layout-effect "^1.1.1" + "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" @@ -2263,9 +2229,9 @@ integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz#91f06cda1049e8f17eeab364798ed79c97488a1c" - integrity sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw== + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz#3c9997ae9d00bc236e45c6374e84f2596458d9db" + integrity sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2367,11 +2333,6 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/lodash@^4.14.172": - version "4.17.12" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.12.tgz#25d71312bf66512105d71e55d42e22c36bcfc689" - integrity sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ== - "@types/mime@^1": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" @@ -2400,11 +2361,11 @@ "@types/node" "*" "@types/node@*": - version "22.7.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.6.tgz#3ec3e2b071e136cd11093c19128405e1d1f92f33" - integrity sha512-/d7Rnj0/ExXDMcioS78/kf1lMzYk4BZV8MZGTBKzTGZ6/406ukkbYlIsZmMPhcR5KlkunDHQLrtAVmSq7r+mSw== + version "22.8.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.8.2.tgz#8e82bb8201c0caf751dcdc61b0a262d2002d438b" + integrity sha512-NzaRNFV+FZkvK/KLCsNdTvID0SThyrs5SHB6tsD/lajr22FGC73N2QeDPM2wHtVde8mgcXuSsHQkH5cX1pbPLw== dependencies: - undici-types "~6.19.2" + undici-types "~6.19.8" "@types/normalize-package-data@^2.4.0": version "2.4.4" @@ -2446,9 +2407,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.2.79": - version "18.3.11" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.11.tgz#9d530601ff843ee0d7030d4227ea4360236bd537" - integrity sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ== + version "18.3.12" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60" + integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -2545,9 +2506,9 @@ source-map "^0.7.3" "@types/webpack@^4.4.31": - version "4.41.39" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.39.tgz#ab6feaeef8e074d0b584bbe4a4e2dc604b58eed7" - integrity sha512-otxUJvoi6FbBq/64gGH34eblpKLgdi+gf08GaAh8Bx6So0ZZic028Ev/SUxD22gbthMKCkeeiXEat1kHLDJfYg== + version "4.41.40" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.40.tgz#41ea11cfafe08de24c3ef410c58976350667e2d1" + integrity sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw== dependencies: "@types/node" "*" "@types/tapable" "^1" @@ -2869,22 +2830,20 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== -"@woocommerce/navigation@^8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@woocommerce/navigation/-/navigation-8.2.0.tgz#6fdd1e2db7407a6a90102823279e5e0b585e8d12" - integrity sha512-joAbrzdhrnWf91kEwuNO3hzT0IiUuh8SNOs0Qbth/heZaN+SixA5yJ98UqEHNa2Mitjm5BTC4M0Qk7X+I8uUvQ== +"@woocommerce/navigation@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@woocommerce/navigation/-/navigation-8.1.0.tgz#dc0183e61d0fb139844f5471839b723dbb289b4a" + integrity sha512-Ifl8IYRLYlbxk6RNuuVorMaCoOs8aFWEo8oSU++SqFfyjPi893Nuk6NJYVvAVhxFdwPfw9RptvQ/q8sIusPihA== dependencies: - "@wordpress/api-fetch" wp-6.0 - "@wordpress/components" wp-6.0 - "@wordpress/compose" wp-6.0 - "@wordpress/element" wp-6.0 - "@wordpress/hooks" wp-6.0 - "@wordpress/i18n" wp-6.0 - "@wordpress/notices" wp-6.0 - "@wordpress/url" wp-6.0 + "@wordpress/api-fetch" "^6.0.1" + "@wordpress/components" "^19.5.0" + "@wordpress/compose" "^5.1.2" + "@wordpress/element" "^4.1.1" + "@wordpress/hooks" "^3.5.0" + "@wordpress/notices" "^3.3.2" + "@wordpress/url" "^3.4.1" history "^5.3.0" - qs "^6.11.2" - react-router-dom "~6.3.0" + qs "^6.10.3" "@woocommerce/settings@^1.0.0": version "1.0.0" @@ -2893,7 +2852,7 @@ dependencies: "@babel/runtime-corejs2" "7.5.5" -"@wordpress/a11y@^3.22.0", "@wordpress/a11y@^3.6.1": +"@wordpress/a11y@^3.15.0", "@wordpress/a11y@^3.22.0", "@wordpress/a11y@^3.31.0": version "3.58.0" resolved "https://registry.yarnpkg.com/@wordpress/a11y/-/a11y-3.58.0.tgz#8e8853709061b3042ca6cb9ac1bc6a5ec2bc9232" integrity sha512-7NnJKl4+pxP6kV/jvXaJcZZCGzW7zaj6YeMnyjUd96cH4ta1ykBIveWgejerFOGsbK+88FnStcxSFj+dbDXs/w== @@ -2902,6 +2861,15 @@ "@wordpress/dom-ready" "^3.58.0" "@wordpress/i18n" "^4.58.0" +"@wordpress/api-fetch@^6.0.1": + version "6.55.0" + resolved "https://registry.yarnpkg.com/@wordpress/api-fetch/-/api-fetch-6.55.0.tgz#a28883cfa3a31590838cb1f0ae863d7c3d391499" + integrity sha512-1HrCUsJdeRY5Y0IjplotINwqMRO81e7O7VhBScuKk7iOuDm/E1ioKv2uLGnPNWziYu+Zf025byxOqVzXDyM2gw== + dependencies: + "@babel/runtime" "^7.16.0" + "@wordpress/i18n" "^4.58.0" + "@wordpress/url" "^3.59.0" + "@wordpress/api-fetch@^7.10.0": version "7.10.0" resolved "https://registry.yarnpkg.com/@wordpress/api-fetch/-/api-fetch-7.10.0.tgz#25fc63c531c905e6a917074dd0fd6b945bab809e" @@ -2911,15 +2879,6 @@ "@wordpress/i18n" "^5.10.0" "@wordpress/url" "^4.10.0" -"@wordpress/api-fetch@wp-6.0": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@wordpress/api-fetch/-/api-fetch-6.3.1.tgz#35f62f4da0c520ab94282fadf160b3d08e19fa3f" - integrity sha512-jfa5c+sffADJCz36oYr5xY5IihNUJPg0II+rZ6SyJfHQyA3NuUJfRk63hS2GF2vaD8Zgp2p5s7uD1h9ZMi+5iA== - dependencies: - "@babel/runtime" "^7.16.0" - "@wordpress/i18n" "^4.6.1" - "@wordpress/url" "^3.7.1" - "@wordpress/babel-preset-default@^8.10.0": version "8.10.0" resolved "https://registry.yarnpkg.com/@wordpress/babel-preset-default/-/babel-preset-default-8.10.0.tgz#4a95c09ec206c3a219698488cfc3731dbe0b67f4" @@ -2947,10 +2906,10 @@ resolved "https://registry.yarnpkg.com/@wordpress/browserslist-config/-/browserslist-config-6.10.0.tgz#09e569dd518649c011f5acbc743eae8645f75cd8" integrity sha512-X5BG4xWvr1Qq9S2x5ERCF7V4bpa24zbj8cWYbIJaGiCfi6vp6dFI1SbvuZPXfKyThyytTVYBvEIr6CSm6G8fuQ== -"@wordpress/components@wp-6.0": - version "19.8.6" - resolved "https://registry.yarnpkg.com/@wordpress/components/-/components-19.8.6.tgz#15ec24be88d45a643a9ad7e1b4e245a24dc24563" - integrity sha512-Coj5R03nYVZs2ge8YHhTHfJ2VvFVcBS3T1itxYCnaRF/wo2lLHnJz/C8bVQTmH59ocEGeVVaBIRtEqKMqcSd1A== +"@wordpress/components@^19.5.0": + version "19.17.0" + resolved "https://registry.yarnpkg.com/@wordpress/components/-/components-19.17.0.tgz#c15b1467aaa7056d3fbd74c04644074ef43d49de" + integrity sha512-6FsLq1WS924fjZjRGSuen3Tzaa4mEWRtCTHM2JS5eE5+rnuhddiHNNgvw26IZCwhQYQwIvIKq9m9in0F0fSOzg== dependencies: "@babel/runtime" "^7.16.0" "@emotion/cache" "^11.7.1" @@ -2959,22 +2918,23 @@ "@emotion/serialize" "^1.0.2" "@emotion/styled" "^11.6.0" "@emotion/utils" "1.0.0" + "@floating-ui/react-dom" "0.6.3" "@use-gesture/react" "^10.2.6" - "@wordpress/a11y" "^3.6.1" - "@wordpress/compose" "^5.4.2" - "@wordpress/date" "^4.6.1" - "@wordpress/deprecated" "^3.6.1" - "@wordpress/dom" "^3.6.1" - "@wordpress/element" "^4.4.1" - "@wordpress/escape-html" "^2.6.1" - "@wordpress/hooks" "^3.6.1" - "@wordpress/i18n" "^4.6.1" - "@wordpress/icons" "^8.2.3" - "@wordpress/is-shallow-equal" "^4.6.1" - "@wordpress/keycodes" "^3.6.1" - "@wordpress/primitives" "^3.4.1" - "@wordpress/rich-text" "^5.4.3" - "@wordpress/warning" "^2.6.1" + "@wordpress/a11y" "^3.15.0" + "@wordpress/compose" "^5.13.0" + "@wordpress/date" "^4.15.0" + "@wordpress/deprecated" "^3.15.0" + "@wordpress/dom" "^3.15.0" + "@wordpress/element" "^4.13.0" + "@wordpress/escape-html" "^2.15.0" + "@wordpress/hooks" "^3.15.0" + "@wordpress/i18n" "^4.15.0" + "@wordpress/icons" "^9.6.0" + "@wordpress/is-shallow-equal" "^4.15.0" + "@wordpress/keycodes" "^3.15.0" + "@wordpress/primitives" "^3.13.0" + "@wordpress/rich-text" "^5.13.0" + "@wordpress/warning" "^2.15.0" classnames "^2.3.1" colord "^2.7.0" dom-scroll-into-view "^1.2.1" @@ -2984,15 +2944,15 @@ highlight-words-core "^1.2.2" lodash "^4.17.21" memize "^1.1.0" - moment "^2.22.1" + moment "^2.26.0" re-resizable "^6.4.0" react-colorful "^5.3.1" - react-dates "^17.1.1" - react-resize-aware "3.1.0" + react-dates "^21.8.0" reakit "^1.3.8" + remove-accents "^0.4.2" uuid "^8.3.0" -"@wordpress/compose@^5.13.0", "@wordpress/compose@^5.20.0", "@wordpress/compose@^5.4.2": +"@wordpress/compose@^5.1.2", "@wordpress/compose@^5.13.0", "@wordpress/compose@^5.20.0": version "5.20.0" resolved "https://registry.yarnpkg.com/@wordpress/compose/-/compose-5.20.0.tgz#e5c5181bca058f73b13fb7007d96f800b6501f71" integrity sha512-IcmXeAIgZoJUFIO3bxBpPYfAre41H6zxQTC5N6nqhGqpISvbO1SsAIikd6B4AoSHUZmYV5UoTxk9kECqZZGVOw== @@ -3010,6 +2970,25 @@ mousetrap "^1.6.5" use-memo-one "^1.1.1" +"@wordpress/compose@^6.35.0": + version "6.35.0" + resolved "https://registry.yarnpkg.com/@wordpress/compose/-/compose-6.35.0.tgz#411a1929bb28102cf4c508a13dc4d46812bbc871" + integrity sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA== + dependencies: + "@babel/runtime" "^7.16.0" + "@types/mousetrap" "^1.6.8" + "@wordpress/deprecated" "^3.58.0" + "@wordpress/dom" "^3.58.0" + "@wordpress/element" "^5.35.0" + "@wordpress/is-shallow-equal" "^4.58.0" + "@wordpress/keycodes" "^3.58.0" + "@wordpress/priority-queue" "^2.58.0" + "@wordpress/undo-manager" "^0.18.0" + change-case "^4.1.2" + clipboard "^2.0.11" + mousetrap "^1.6.5" + use-memo-one "^1.1.1" + "@wordpress/compose@^7.10.0": version "7.10.0" resolved "https://registry.yarnpkg.com/@wordpress/compose/-/compose-7.10.0.tgz#b2e094dfb82f8b19c4619516ab78fc3f520029da" @@ -3029,26 +3008,6 @@ mousetrap "^1.6.5" use-memo-one "^1.1.1" -"@wordpress/compose@wp-6.0": - version "5.4.2" - resolved "https://registry.yarnpkg.com/@wordpress/compose/-/compose-5.4.2.tgz#dc8b60329eceb3c79869cdfcffdf7dd8d41797bd" - integrity sha512-tgFZVmK16LjJM2XkAYD+VSVGY+0hTd6a7Z66Lv/w58+LjcsVaXFho1pELfBOWJ/Gw0aucKrdiqI2XJKimwRNrw== - dependencies: - "@babel/runtime" "^7.16.0" - "@types/lodash" "^4.14.172" - "@types/mousetrap" "^1.6.8" - "@wordpress/deprecated" "^3.6.1" - "@wordpress/dom" "^3.6.1" - "@wordpress/element" "^4.4.1" - "@wordpress/is-shallow-equal" "^4.6.1" - "@wordpress/keycodes" "^3.6.1" - "@wordpress/priority-queue" "^2.6.1" - clipboard "^2.0.8" - lodash "^4.17.21" - mousetrap "^1.6.5" - react-resize-aware "3.1.0" - use-memo-one "^1.1.1" - "@wordpress/data-controls@^4.10.0": version "4.10.0" resolved "https://registry.yarnpkg.com/@wordpress/data-controls/-/data-controls-4.10.0.tgz#100dcf4700f7efcd289823d76e019d85b31343ea" @@ -3080,26 +3039,6 @@ rememo "^4.0.2" use-memo-one "^1.1.1" -"@wordpress/data@^6.6.2": - version "6.15.0" - resolved "https://registry.yarnpkg.com/@wordpress/data/-/data-6.15.0.tgz#4a5c71121b1befc1ecabaa6931a028decf6f0187" - integrity sha512-EReq6QQ3ASWPcB60q18GLfDBhQQrf2Ru9Vvkid/tk7tn4ttqy/axn09/ck/GQ1uwi9BoSRyydPOnQCsluPAgNA== - dependencies: - "@babel/runtime" "^7.16.0" - "@wordpress/compose" "^5.13.0" - "@wordpress/deprecated" "^3.15.0" - "@wordpress/element" "^4.13.0" - "@wordpress/is-shallow-equal" "^4.15.0" - "@wordpress/priority-queue" "^2.15.0" - "@wordpress/redux-routine" "^4.15.0" - equivalent-key-map "^0.2.2" - is-plain-obj "^4.1.0" - is-promise "^4.0.0" - lodash "^4.17.21" - redux "^4.1.2" - turbo-combine-reducers "^1.0.2" - use-memo-one "^1.1.1" - "@wordpress/data@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@wordpress/data/-/data-7.6.0.tgz#16e5d03653e527baeb00607d8c9cdacbb6c59bcc" @@ -3120,7 +3059,28 @@ turbo-combine-reducers "^1.0.2" use-memo-one "^1.1.1" -"@wordpress/date@^4.6.1": +"@wordpress/data@^9.1.0": + version "9.28.0" + resolved "https://registry.yarnpkg.com/@wordpress/data/-/data-9.28.0.tgz#64efd691384ba26faa1b460549fad9a237728818" + integrity sha512-EDPpZdkngdoW7EMzPpGj0BmNcr7syJO67pgTODtN/4XFIdYL2RKzFyn3nlLBKhX17UsE/ALq9WdijacH4QJ9qw== + dependencies: + "@babel/runtime" "^7.16.0" + "@wordpress/compose" "^6.35.0" + "@wordpress/deprecated" "^3.58.0" + "@wordpress/element" "^5.35.0" + "@wordpress/is-shallow-equal" "^4.58.0" + "@wordpress/priority-queue" "^2.58.0" + "@wordpress/private-apis" "^0.40.0" + "@wordpress/redux-routine" "^4.58.0" + deepmerge "^4.3.0" + equivalent-key-map "^0.2.2" + is-plain-object "^5.0.0" + is-promise "^4.0.0" + redux "^4.1.2" + rememo "^4.0.2" + use-memo-one "^1.1.1" + +"@wordpress/date@^4.15.0": version "4.58.0" resolved "https://registry.yarnpkg.com/@wordpress/date/-/date-4.58.0.tgz#6803e0bde8e8ccb62ebf57554f9543a14cc4433c" integrity sha512-yFT7DU0H9W0lsDytMaVMmjho08X1LeBMIQMppxdtKB04Ujx58hVh7gtunOsstUQ7pVg23nE2eLaVfx5JOdjzAw== @@ -3137,7 +3097,7 @@ dependencies: json2php "^0.0.7" -"@wordpress/deprecated@^3.15.0", "@wordpress/deprecated@^3.22.0", "@wordpress/deprecated@^3.58.0", "@wordpress/deprecated@^3.6.1": +"@wordpress/deprecated@^3.15.0", "@wordpress/deprecated@^3.22.0", "@wordpress/deprecated@^3.58.0": version "3.58.0" resolved "https://registry.yarnpkg.com/@wordpress/deprecated/-/deprecated-3.58.0.tgz#c8b9442167bc20aef4888af4a4d081b4553adb4c" integrity sha512-knweE2lLEUxWRr6A48sHiO0ww5pPybGe2NVIZVq/y7EaYCMdpy6gYA0ZdVqMKZvtxKKqicJfwigcn+hinsTvUQ== @@ -3160,7 +3120,7 @@ dependencies: "@babel/runtime" "^7.16.0" -"@wordpress/dom@^3.22.0", "@wordpress/dom@^3.6.1": +"@wordpress/dom@^3.15.0", "@wordpress/dom@^3.22.0", "@wordpress/dom@^3.58.0": version "3.58.0" resolved "https://registry.yarnpkg.com/@wordpress/dom/-/dom-3.58.0.tgz#c9afe87ce29d00a2baecfcf61a284232ce821612" integrity sha512-t3xSr/nqekj2qwUGRAqSeGx6116JOBxzI+VBiUfZrjGEnuyKdLelXDEeYtcwbb7etMkj/6F60/NB7GTl5IwizQ== @@ -3188,7 +3148,7 @@ mime "^3.0.0" web-vitals "^4.2.1" -"@wordpress/element@^4.13.0", "@wordpress/element@^4.20.0", "@wordpress/element@^4.4.1", "@wordpress/element@^4.6.0": +"@wordpress/element@^4.1.1", "@wordpress/element@^4.13.0", "@wordpress/element@^4.20.0": version "4.20.0" resolved "https://registry.yarnpkg.com/@wordpress/element/-/element-4.20.0.tgz#d78499521cbb471b97e011a81ec6236daeac24ad" integrity sha512-Ou7EoGtGe4FUL6fKALINXJLKoSfyWTBJzkJfN2HzSgM1wira9EuWahl8MQN0HAUaWeOoDqMKPvnglfS+kC8JLA== @@ -3230,20 +3190,7 @@ react "^18.3.0" react-dom "^18.3.0" -"@wordpress/element@wp-6.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@wordpress/element/-/element-4.4.1.tgz#b814e1ddfab54e29dd97f2138dcbd50ba06135e6" - integrity sha512-2QZdyv0IOIzk8jmJ/BKCDO1TjkdBQeujqjhfL+Ff6P9uX4vcKc9JCvNVQZ3k4Zx3bAxZm9staxfQUz27qvSQXw== - dependencies: - "@babel/runtime" "^7.16.0" - "@types/react" "^17.0.37" - "@types/react-dom" "^17.0.11" - "@wordpress/escape-html" "^2.6.1" - lodash "^4.17.21" - react "^17.0.2" - react-dom "^17.0.2" - -"@wordpress/escape-html@^2.22.0", "@wordpress/escape-html@^2.58.0", "@wordpress/escape-html@^2.6.1": +"@wordpress/escape-html@^2.15.0", "@wordpress/escape-html@^2.22.0", "@wordpress/escape-html@^2.58.0": version "2.58.0" resolved "https://registry.yarnpkg.com/@wordpress/escape-html/-/escape-html-2.58.0.tgz#37fa8c74c31b7a481d56bab6a8f0bfa415311b2f" integrity sha512-9YJXMNfzkrhHEVP1jFEhgijbZqW8Mt3NHIMZjIQoWtBf7QE86umpYpGGBXzYC0YlpGTRGzZTBwYaqFKxjeaSgA== @@ -3280,7 +3227,7 @@ globals "^13.12.0" requireindex "^1.2.0" -"@wordpress/hooks@^3.58.0", "@wordpress/hooks@^3.6.1": +"@wordpress/hooks@^3.15.0", "@wordpress/hooks@^3.5.0", "@wordpress/hooks@^3.58.0": version "3.58.0" resolved "https://registry.yarnpkg.com/@wordpress/hooks/-/hooks-3.58.0.tgz#68094f7e7e3f8cbc3ab68a0fe9ac2a9b3cfe55d6" integrity sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q== @@ -3294,14 +3241,7 @@ dependencies: "@babel/runtime" "7.25.7" -"@wordpress/hooks@wp-6.0": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@wordpress/hooks/-/hooks-3.6.1.tgz#4fa24f571e9bcc2fb24e1bbd33b32e45f6ef383e" - integrity sha512-4sIngmH64M1jzcprfkffo1GHsQbd/QNbTweq6cSPIJNorKfE63Inf59NQ6r0pq6+Nz+cuq64eMz5v4eyngjZ/A== - dependencies: - "@babel/runtime" "^7.16.0" - -"@wordpress/i18n@^4.22.0", "@wordpress/i18n@^4.58.0", "@wordpress/i18n@^4.6.1": +"@wordpress/i18n@^4.15.0", "@wordpress/i18n@^4.22.0", "@wordpress/i18n@^4.58.0": version "4.58.0" resolved "https://registry.yarnpkg.com/@wordpress/i18n/-/i18n-4.58.0.tgz#d4327fa4dee4f82be7753e900700670fea316d30" integrity sha512-VfvS3BWv/RDjRKD6PscIcvYfWKnGJcI/DEqyDgUMhxCM6NRwoL478CsUKTiGJIymeyRodNRfprdcF086DpGKYw== @@ -3325,29 +3265,16 @@ sprintf-js "^1.1.1" tannin "^1.2.0" -"@wordpress/i18n@wp-6.0": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@wordpress/i18n/-/i18n-4.6.1.tgz#072c26da8a892629348320f40757f558ffbb4009" - integrity sha512-hdi+hyEzIqZhEFSmiwApTCfsu5qRpFDSKzpPf5uJbCeCGcY/BVB2m8kh7E0M5Ltva9Hct/4AKR34bR6bm9INFA== +"@wordpress/icons@^9.6.0": + version "9.49.0" + resolved "https://registry.yarnpkg.com/@wordpress/icons/-/icons-9.49.0.tgz#3886fcb99c01caae97f25bfa15a7fd6b0a818d88" + integrity sha512-Z8F+ledkfkcKDuS1c/RkM0dEWdfv2AXs6bCgey89p0atJSscf7qYbMJR9zE5rZ5aqXyFfV0DAFKJEgayNqneNQ== dependencies: "@babel/runtime" "^7.16.0" - "@wordpress/hooks" "^3.6.1" - gettext-parser "^1.3.1" - lodash "^4.17.21" - memize "^1.1.0" - sprintf-js "^1.1.1" - tannin "^1.2.0" + "@wordpress/element" "^5.35.0" + "@wordpress/primitives" "^3.56.0" -"@wordpress/icons@^8.2.3": - version "8.4.0" - resolved "https://registry.yarnpkg.com/@wordpress/icons/-/icons-8.4.0.tgz#f872f8505f6c10a0b2b2cbe9b9b29b95a9406ed6" - integrity sha512-N/bzt5z534JyAWdTyDdsu9G+6NQ5FvykmNbKZrZuUHTuEI8KbxYaN/5lT6W6Lkwq32D/B6ibpt1LpSQJ37IZWw== - dependencies: - "@babel/runtime" "^7.16.0" - "@wordpress/element" "^4.6.0" - "@wordpress/primitives" "^3.6.0" - -"@wordpress/is-shallow-equal@^4.15.0", "@wordpress/is-shallow-equal@^4.22.0", "@wordpress/is-shallow-equal@^4.6.1": +"@wordpress/is-shallow-equal@^4.15.0", "@wordpress/is-shallow-equal@^4.22.0", "@wordpress/is-shallow-equal@^4.58.0": version "4.58.0" resolved "https://registry.yarnpkg.com/@wordpress/is-shallow-equal/-/is-shallow-equal-4.58.0.tgz#52f400dc9fac721a0763b1c3f2932d383286b581" integrity sha512-NH2lbXo/6ix1t4Zu9UBXpXNtoLwSaYmIRSyDH34XNb0ic8a7yjEOhYWVW3LTfSCv9dJVyxlM5TJPtL85q7LdeQ== @@ -3377,7 +3304,7 @@ "@wordpress/jest-console" "^8.10.0" babel-jest "29.7.0" -"@wordpress/keycodes@^3.22.0", "@wordpress/keycodes@^3.6.1": +"@wordpress/keycodes@^3.15.0", "@wordpress/keycodes@^3.22.0", "@wordpress/keycodes@^3.58.0": version "3.58.0" resolved "https://registry.yarnpkg.com/@wordpress/keycodes/-/keycodes-3.58.0.tgz#cc4d2a7c2eb47c2b4718dd6ec0e47c1a77d1f8ba" integrity sha512-Q/LRKpx8ndzuHlkxSQ2BD+NTYYKQPIneNNMng8hTAfyU7RFwXpqj06HpeOFGh4XIdPKCs/8hmucoLJRmmLmZJA== @@ -3393,15 +3320,14 @@ "@babel/runtime" "7.25.7" "@wordpress/i18n" "^5.10.0" -"@wordpress/notices@wp-6.0": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@wordpress/notices/-/notices-3.6.2.tgz#d9772dcb5221c5826d37c07b5975ef52cfa5d6f8" - integrity sha512-A+B1EVAIjvWO2nAJGNUC2rEOpZ6HqVi4uq3r4Re5TShjl2s9sudTMB3Elz1hYgCIyz5Sspx+e19iV5f70SKK+g== +"@wordpress/notices@^3.3.2": + version "3.31.0" + resolved "https://registry.yarnpkg.com/@wordpress/notices/-/notices-3.31.0.tgz#a278767eaa2e7b704fe1f4d68f95c7984779737c" + integrity sha512-9WyaFaSr/vQc1K7cZLyPw1xBKqWfjpAKMJzWMzHYjwk1ldibhBWVLukicuolD6Y+9l+97IZHCoESBQwUeFo79Q== dependencies: "@babel/runtime" "^7.16.0" - "@wordpress/a11y" "^3.6.1" - "@wordpress/data" "^6.6.2" - lodash "^4.17.21" + "@wordpress/a11y" "^3.31.0" + "@wordpress/data" "^9.1.0" "@wordpress/npm-package-json-lint-config@^5.10.0": version "5.10.0" @@ -3421,7 +3347,7 @@ resolved "https://registry.yarnpkg.com/@wordpress/prettier-config/-/prettier-config-4.10.0.tgz#33376a39005b1645287c511853aa9666ce0e7b78" integrity sha512-zT06uXepAWoXiBY8t1M5dz+DcyZ00Sm005YTJvjrLeMRLCEX9lZuZtqA/rYZsABzT90KJvdDTNP+2FsoZSOQcQ== -"@wordpress/primitives@^3.4.1", "@wordpress/primitives@^3.6.0": +"@wordpress/primitives@^3.13.0", "@wordpress/primitives@^3.56.0": version "3.56.0" resolved "https://registry.yarnpkg.com/@wordpress/primitives/-/primitives-3.56.0.tgz#4513180bd783edeb09c4eb721fb1adff84c0e5bd" integrity sha512-NXBq1ODjl6inMWx/l7KCbATcjdoeIOqYeL9i9alqdAfWeKx1EH9PIvKWylIkqZk7erXxCxldiRkuyjTtwjNBxw== @@ -3430,7 +3356,7 @@ "@wordpress/element" "^5.35.0" clsx "^2.1.1" -"@wordpress/priority-queue@^2.15.0", "@wordpress/priority-queue@^2.22.0", "@wordpress/priority-queue@^2.6.1": +"@wordpress/priority-queue@^2.22.0", "@wordpress/priority-queue@^2.58.0": version "2.58.0" resolved "https://registry.yarnpkg.com/@wordpress/priority-queue/-/priority-queue-2.58.0.tgz#02564bbb0700d9fdd93039149e44e9992b16ebd3" integrity sha512-W+qCS8HJWsXG8gE6yK/H/IObowcghPrQMM3cQHtfd/U05yFNU1Bd/fbj3AO1fVRztktS47lIpi9m3ll1evPEHA== @@ -3446,6 +3372,13 @@ "@babel/runtime" "7.25.7" requestidlecallback "^0.3.0" +"@wordpress/private-apis@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@wordpress/private-apis/-/private-apis-0.40.0.tgz#0b2eb46599db5a669cf5d950a36745c7c17eb59b" + integrity sha512-ZX/9Y8eA3C3K6LOj32bHFj+9tNV819CBd8+chqMmmlvQRcTngiuXbMbnSdZnnAr1gLQgNpH9PJ60dIwJnGSEtQ== + dependencies: + "@babel/runtime" "^7.16.0" + "@wordpress/private-apis@^1.10.0": version "1.10.0" resolved "https://registry.yarnpkg.com/@wordpress/private-apis/-/private-apis-1.10.0.tgz#90d69128566a0a1d0b41e510098b4ed99892380a" @@ -3453,7 +3386,7 @@ dependencies: "@babel/runtime" "7.25.7" -"@wordpress/redux-routine@^4.15.0", "@wordpress/redux-routine@^4.22.0": +"@wordpress/redux-routine@^4.22.0", "@wordpress/redux-routine@^4.58.0": version "4.58.0" resolved "https://registry.yarnpkg.com/@wordpress/redux-routine/-/redux-routine-4.58.0.tgz#b4d10267d196f9bb50059a322191c86684ef366d" integrity sha512-r0mMWFeJr93yPy2uY/M5+gdUUYj0Zu8+21OFFb5hyQ0z7UHIa3IdgQxzCaTbV1LDA1ZYJrjHeCnA6s4gNHjA2Q== @@ -3473,7 +3406,7 @@ is-promise "^4.0.0" rungen "^0.3.2" -"@wordpress/rich-text@^5.4.3": +"@wordpress/rich-text@^5.13.0": version "5.20.0" resolved "https://registry.yarnpkg.com/@wordpress/rich-text/-/rich-text-5.20.0.tgz#c1e367f3503b5e9d89e949afe60fa11cc4facc40" integrity sha512-7W4PksJ6/SnQ+KuwvZ0dlKSwbaS6ejvWBm2N8R5S79AzbdmB69BpDCz0U/GUfGDXDhrU9dpzg5NIivoW2LC8Kg== @@ -3566,6 +3499,14 @@ stylelint-config-recommended "^14.0.1" stylelint-config-recommended-scss "^14.1.0" +"@wordpress/undo-manager@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@wordpress/undo-manager/-/undo-manager-0.18.0.tgz#f087eaf7c42b67f96af2d3bc90ccdf27c741c988" + integrity sha512-upbzPEToa095XG+2JXLHaolF1LfXEMFS0lNMYV37myoUS+eZ7/tl9Gx+yU2+OqWy57TMwx33NlWUX/n+ynzPRw== + dependencies: + "@babel/runtime" "^7.16.0" + "@wordpress/is-shallow-equal" "^4.58.0" + "@wordpress/undo-manager@^1.10.0": version "1.10.0" resolved "https://registry.yarnpkg.com/@wordpress/undo-manager/-/undo-manager-1.10.0.tgz#beec1d89d44e01e3fa3fa01b28eafe897101c47d" @@ -3574,7 +3515,7 @@ "@babel/runtime" "7.25.7" "@wordpress/is-shallow-equal" "^5.10.0" -"@wordpress/url@^3.7.1": +"@wordpress/url@^3.4.1", "@wordpress/url@^3.59.0": version "3.59.0" resolved "https://registry.yarnpkg.com/@wordpress/url/-/url-3.59.0.tgz#6453180452d2e00f3ba45177c4340cf0ca4ad90d" integrity sha512-GxvoMjYCav0w4CiX0i0h3qflrE/9rhLIZg5aPCQjbrBdwTxYR3Exfw0IJYcmVaTKXQOUU8fOxlDxULsbLmKe9w== @@ -3590,15 +3531,7 @@ "@babel/runtime" "7.25.7" remove-accents "^0.5.0" -"@wordpress/url@wp-6.0": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@wordpress/url/-/url-3.7.1.tgz#c979504410c55ce73e628a3d20c66762b91e6b70" - integrity sha512-wX/Uck/If+/b8nLhB3UazLMlG7s6jjHv7isG/+/QCaJ01cf/VXXg8x6bRWnoB84ObhwBbBiM4rDTperge7+elg== - dependencies: - "@babel/runtime" "^7.16.0" - lodash "^4.17.21" - -"@wordpress/warning@^2.6.1": +"@wordpress/warning@^2.15.0": version "2.58.0" resolved "https://registry.yarnpkg.com/@wordpress/warning/-/warning-2.58.0.tgz#1f2f2cd10302daa4e6d391037a49f875e8d12fcc" integrity sha512-9bZlORhyMY2nbWozeyC5kqJsFzEPP4DCLhGmjtbv+YWGHttUrxUZEfrKdqO+rUODA8rP5zeIly1nCQOUnkw4Lg== @@ -3657,9 +3590,9 @@ acorn-walk@^8.0.0, acorn-walk@^8.0.2: acorn "^8.11.0" acorn@^8.0.4, acorn@^8.1.0, acorn@^8.11.0, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.13.0.tgz#2a30d670818ad16ddd6a35d3842dacec9e5d7ca3" - integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== adm-zip@^0.5.9: version "0.5.16" @@ -3680,7 +3613,7 @@ agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1: dependencies: debug "^4.3.4" -airbnb-prop-types@^2.10.0, airbnb-prop-types@^2.15.0, airbnb-prop-types@^2.16.0: +airbnb-prop-types@^2.14.0, airbnb-prop-types@^2.15.0, airbnb-prop-types@^2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz#b96274cefa1abb14f623f804173ee97c13971dc2" integrity sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg== @@ -3766,13 +3699,6 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -3810,19 +3736,17 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" +aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -4001,9 +3925,9 @@ axe-core@4.7.2: integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== axe-core@^4.10.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.1.tgz#7d2589b0183f05b0f23e55c2f4cdf97b5bdc66d9" - integrity sha512-qPC9o+kD8Tir0lzNGLeghbOrWMr3ZJpaRlCIb6Uobt/7N4FiEDvqUMnxzCHRHmg8vOg14kr5gVNyScRmbMaJ9g== + version "4.10.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.2.tgz#85228e3e1d8b8532a27659b332e39b7fa0e022df" + integrity sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w== axios@^1.6.1: version "1.7.7" @@ -4173,9 +4097,9 @@ bare-path@^2.0.0, bare-path@^2.1.0: bare-os "^2.1.0" bare-stream@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.3.1.tgz#812d48d5ddcbcbc44f8493d2dd00aa5e3604373b" - integrity sha512-Vm8kAeOcfzHPTH8sq0tHBnUqYrkXdroaBVVylqFT4cF5wnMfKEIxxy2jIGu2zKVNl9P8MAP9XBWwXJ9N2+jfEw== + version "2.3.2" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.3.2.tgz#3bc62b429bcf850d2f265719b7a49ee0630a3ae4" + integrity sha512-EFZHSIBkDgSHIwj2l2QZfP4U5OcD4xFAOwhSb/vlr9PIqyGJGvB/nfClJbcnh3EY4jtPE4zsb5ztae96bVF79A== dependencies: streamx "^2.20.0" @@ -4268,14 +4192,14 @@ brcast@^2.0.2: integrity sha512-Tfn5JSE7hrUlFcOoaLzVvkbgIemIorMIyoMr3TgvszWW7jFt2C9PdeMLtysYD9RU0MmU17b69+XJG1eRY2OBRg== browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.23.0, browserslist@^4.23.3, browserslist@^4.24.0: - version "4.24.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4" - integrity sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A== + version "4.24.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" + integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== dependencies: - caniuse-lite "^1.0.30001663" - electron-to-chromium "^1.5.28" + caniuse-lite "^1.0.30001669" + electron-to-chromium "^1.5.41" node-releases "^2.0.18" - update-browserslist-db "^1.1.0" + update-browserslist-db "^1.1.1" bser@2.1.1: version "2.1.1" @@ -4370,10 +4294,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001663: - version "1.0.30001669" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz#fda8f1d29a8bfdc42de0c170d7f34a9cf19ed7a3" - integrity sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: + version "1.0.30001674" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001674.tgz#eb200a716c3e796d33d30b9c8890517a72f862c8" + integrity sha512-jOsKlZVRnzfhLojb+Ykb+gyUSp9Xb57So+fAiFlLzzTKpqg8xxSav0e40c8/4F/v9N8QSvrRRaLeVzQbLqomYw== capital-case@^1.0.4: version "1.0.4" @@ -4384,15 +4308,6 @@ capital-case@^1.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" @@ -4573,13 +4488,6 @@ collect-v8-coverage@^1.0.0: resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -4587,11 +4495,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -5122,30 +5025,6 @@ dedent@^1.0.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -5396,10 +5275,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.28: - version "1.5.41" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.41.tgz#eae1ba6c49a1a61d84cf8263351d3513b2bcc534" - integrity sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ== +electron-to-chromium@^1.5.41: + version "1.5.49" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz#9358f514ab6eeed809a8689f4b39ea5114ae729c" + integrity sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A== emittery@^0.13.1: version "0.13.1" @@ -5481,6 +5360,14 @@ envinfo@^7.7.3: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== +enzyme-shallow-equal@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz#4e3aa678022387a68e6c47aff200587851885b5e" + integrity sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg== + dependencies: + hasown "^2.0.0" + object-is "^1.1.5" + equivalent-key-map@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/equivalent-key-map/-/equivalent-key-map-0.2.2.tgz#be4d57049bb8d46a81d6e256c1628465620c2a13" @@ -5564,22 +5451,7 @@ es-errors@^1.2.1, es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-iterator-helpers@^1.0.19: +es-iterator-helpers@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz#f6d745d342aea214fe09497e7152170dc333a7a6" integrity sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw== @@ -5646,7 +5518,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== @@ -5741,11 +5613,11 @@ eslint-plugin-jsdoc@^46.4.6: spdx-expression-parse "^4.0.0" eslint-plugin-jsx-a11y@^6.5.1: - version "6.10.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz#36fb9dead91cafd085ddbe3829602fb10ef28339" - integrity sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg== + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== dependencies: - aria-query "~5.1.3" + aria-query "^5.3.2" array-includes "^3.1.8" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" @@ -5753,14 +5625,13 @@ eslint-plugin-jsx-a11y@^6.5.1: axobject-query "^4.1.0" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.19" hasown "^2.0.2" jsx-ast-utils "^3.3.5" language-tags "^1.0.9" minimatch "^3.1.2" object.fromentries "^2.0.8" safe-regex-test "^1.0.3" - string.prototype.includes "^2.0.0" + string.prototype.includes "^2.0.1" eslint-plugin-playwright@^0.15.3: version "0.15.3" @@ -5781,16 +5652,16 @@ eslint-plugin-react-hooks@^4.3.0: integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== eslint-plugin-react@^7.27.0: - version "7.37.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz#56493d7d69174d0d828bc83afeffe96903fdadbd" - integrity sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg== + version "7.37.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz#cd0935987876ba2900df2f58339f6d92305acc7a" + integrity sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w== dependencies: array-includes "^3.1.8" array.prototype.findlast "^1.2.5" array.prototype.flatmap "^1.3.2" array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.19" + es-iterator-helpers "^1.1.0" estraverse "^5.3.0" hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" @@ -6371,7 +6242,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -6620,11 +6491,6 @@ has-bigints@^1.0.1, has-bigints@^1.0.2: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" @@ -6679,7 +6545,7 @@ highlight-words-core@^1.2.2: resolved "https://registry.yarnpkg.com/highlight-words-core/-/highlight-words-core-1.2.3.tgz#781f37b2a220bf998114e4ef8c8cb6c7a4802ea8" integrity sha512-m1O9HW3/GNHxzSIXWw1wCNXXsgLlxrP0OI6+ycGUhiUHkikqW3OrwVHz+lxeNBe5yqLESdIcj8PowHQ2zLvUvQ== -history@^5.2.0, history@^5.3.0: +history@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== @@ -6948,7 +6814,7 @@ ini@~3.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== -internal-slot@^1.0.4, internal-slot@^1.0.7: +internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -6997,15 +6863,7 @@ irregular-plurals@^3.2.0: resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.5.0.tgz#0835e6639aa8425bdc8b0d33d0dc4e89d9c01d2b" integrity sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ== -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: +is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -7131,7 +6989,7 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-map@^2.0.2, is-map@^2.0.3: +is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== @@ -7192,11 +7050,6 @@ is-plain-obj@^3.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== -is-plain-obj@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - is-plain-object@^2.0.1, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -7227,7 +7080,7 @@ is-regex@^1.1.0, is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.2, is-set@^2.0.3: +is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== @@ -8326,9 +8179,9 @@ mdn-data@2.10.0: integrity sha512-qq7C3EtK3yJXMwz1zAab65pjl+UhohqMOctTgcqjLOWABqmwj+me02LSsCuEUxnst9X1lCBpoE0WArGKgdGDzw== mdn-data@^2.11.1: - version "2.11.1" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.11.1.tgz#bb973c4272a446005444259fd8227d7f727dc047" - integrity sha512-Hdx3wmyqPFrhd6YHVuSkUK2eIGAcxR0xlndcgZqjA68yMJTbfXrjJwbgsBOsNjI7LnBIVUQnmyMVSdi/ob0GpQ== + version "2.12.0" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.12.0.tgz#852dbb20004a670ce616cb6ef36d3cb019442dd6" + integrity sha512-WF52f/zAu7qiEqYxapSt+LW6Pc/jw8zfn0fx3G9fSckaWDvFLUminV0y0w/3hx8Z5pbMZTYZrXuSnBBxwT48Bg== mdurl@^1.0.1: version "1.0.1" @@ -8537,7 +8390,7 @@ moment-timezone@^0.5.40: dependencies: moment "^2.29.4" -moment@>=1.6.0, moment@^2.22.1, moment@^2.29.4: +moment@>=1.6.0, moment@^2.26.0, moment@^2.29.4: version "2.30.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== @@ -8729,7 +8582,7 @@ nwsapi@^2.2.2: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.13.tgz#e56b4e98960e7a040e5474536587e599c4ff4655" integrity sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -8795,7 +8648,7 @@ object.groupby@^1.0.3: define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.0.4, object.values@^1.1.0, object.values@^1.1.5, object.values@^1.1.6, object.values@^1.2.0: +object.values@^1.1.0, object.values@^1.1.5, object.values@^1.1.6, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -8984,9 +8837,9 @@ parse-passwd@^1.0.0: integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== parse5@^7.0.0, parse5@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.0.tgz#8a0591ce9b7c5e2027173ab737d4d3fc3d826fab" - integrity sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA== + version "7.2.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" + integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== dependencies: entities "^4.5.0" @@ -9056,6 +8909,11 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" @@ -9469,7 +9327,7 @@ prop-types-exact@^1.2.0: object.assign "^4.1.5" reflect.ownkeys "^1.1.4" -prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.5.8, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -9560,9 +9418,9 @@ puppeteer-core@^20.8.0: ws "8.13.0" puppeteer-core@^23.1.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-23.6.0.tgz#a3e1e09c05f47fb8ca2bc9d4ca200d18e3704303" - integrity sha512-se1bhgUpR9C529SgHGr/eyT92mYyQPAhA2S9pGtGrVG2xob9qE6Pbp7TlqiSPlnnY1lINqhn6/67EwkdzOmKqQ== + version "23.6.1" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-23.6.1.tgz#0f74d74ba02fbec79606b0b112b6dd930395cea4" + integrity sha512-DoNLAzQfGklPauEn33N4h9cM9GubJSINEn+AUMwAXwW159Y9JLk5y34Jsbv4c7kG8P0puOYWV9leu2siMZ/QpQ== dependencies: "@puppeteer/browsers" "2.4.0" chromium-bidi "0.8.0" @@ -9576,7 +9434,7 @@ pure-rand@^6.0.0: resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== -qs@6.13.0, qs@^6.11.2: +qs@6.13.0, qs@^6.10.3: version "6.13.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== @@ -9603,6 +9461,13 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -9630,36 +9495,31 @@ re-resizable@^6.4.0: resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.10.0.tgz#d684a096ab438f1a93f59ad3a580a206b0ce31ee" integrity sha512-hysSK0xmA5nz24HBVztlk4yCqCLCvS32E6ZpWxVKop9x3tqCa4yAj1++facrmkOf62JsJHjmjABdKxXofYioCw== -react-addons-shallow-compare@^15.6.2: - version "15.6.3" - resolved "https://registry.yarnpkg.com/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.3.tgz#28a94b0dfee71530852c66a69053d59a1baf04cb" - integrity sha512-EDJbgKTtGRLhr3wiGDXK/+AEJ59yqGS+tKE6mue0aNXT6ZMR7VJbbzIiT6akotmHg1BLj46ElJSb+NBMp80XBg== - dependencies: - object-assign "^4.1.0" - react-colorful@^5.3.1: version "5.6.1" resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b" integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== -react-dates@^17.1.1: - version "17.2.0" - resolved "https://registry.yarnpkg.com/react-dates/-/react-dates-17.2.0.tgz#d8cfe29ceecb3fbe37abbaa385683504cc53cdf6" - integrity sha512-RDlerU8DdRRrlYS0MQ7Z9igPWABGLDwz6+ykBNff67RM3Sset2TDqeuOr+R5o00Ggn5U47GeLsGcSDxlZd9cHw== +react-dates@^21.8.0: + version "21.8.0" + resolved "https://registry.yarnpkg.com/react-dates/-/react-dates-21.8.0.tgz#355c3c7a243a7c29568fe00aca96231e171a5e94" + integrity sha512-PPriGqi30CtzZmoHiGdhlA++YPYPYGCZrhydYmXXQ6RAvAsaONcPtYgXRTLozIOrsQ5mSo40+DiA5eOFHnZ6xw== dependencies: - airbnb-prop-types "^2.10.0" + airbnb-prop-types "^2.15.0" consolidated-events "^1.1.1 || ^2.0.0" + enzyme-shallow-equal "^1.0.0" is-touch-device "^1.0.1" lodash "^4.1.1" object.assign "^4.1.0" - object.values "^1.0.4" - prop-types "^15.6.1" - react-addons-shallow-compare "^15.6.2" + object.values "^1.1.0" + prop-types "^15.7.2" + raf "^3.4.1" react-moment-proptypes "^1.6.0" - react-outside-click-handler "^1.2.0" - react-portal "^4.1.5" - react-with-styles "^3.2.0" - react-with-styles-interface-css "^4.0.2" + react-outside-click-handler "^1.2.4" + react-portal "^4.2.0" + react-with-direction "^1.3.1" + react-with-styles "^4.1.0" + react-with-styles-interface-css "^6.0.0" react-dom@^17.0.2: version "17.0.2" @@ -9700,7 +9560,7 @@ react-moment-proptypes@^1.6.0: dependencies: moment ">=1.6.0" -react-outside-click-handler@^1.2.0: +react-outside-click-handler@^1.2.4: version "1.3.0" resolved "https://registry.yarnpkg.com/react-outside-click-handler/-/react-outside-click-handler-1.3.0.tgz#3831d541ac059deecd38ec5423f81e80ad60e115" integrity sha512-Te/7zFU0oHpAnctl//pP3hEAeobfeHMyygHB8MnjP6sX5OR8KHT1G3jmLsV3U9RnIYo+Yn+peJYWu+D5tUS8qQ== @@ -9711,7 +9571,7 @@ react-outside-click-handler@^1.2.0: object.values "^1.1.0" prop-types "^15.7.2" -react-portal@^4.1.5: +react-portal@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/react-portal/-/react-portal-4.2.2.tgz#bff1e024147d6041ba8c530ffc99d4c8248f49fa" integrity sha512-vS18idTmevQxyQpnde0Td6ZcUlv+pD8GTyR42n3CHUQq9OHi1C4jDE4ZWEbEsrbrLRhSECYiao58cvocwMtP7Q== @@ -9723,27 +9583,7 @@ react-refresh@^0.14.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== -react-resize-aware@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/react-resize-aware/-/react-resize-aware-3.1.0.tgz#fa1da751d1d72f90c3b79969d05c2c577dfabd92" - integrity sha512-bIhHlxVTX7xKUz14ksXMEHjzCZPTpQZKZISY3nbTD273pDKPABGFNFBP6Tr42KECxzC5YQiKpMchjTVJCqaxpA== - -react-router-dom@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d" - integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== - dependencies: - history "^5.2.0" - react-router "6.3.0" - -react-router@6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" - integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== - dependencies: - history "^5.2.0" - -react-with-direction@^1.3.0: +react-with-direction@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/react-with-direction/-/react-with-direction-1.4.0.tgz#ebdf64d685d0650ce966e872e6431ad5a2485444" integrity sha512-ybHNPiAmaJpoWwugwqry9Hd1Irl2hnNXlo/2SXQBwbLn/jGMauMS2y9jw+ydyX5V9ICryCqObNSthNt5R94xpg== @@ -9757,23 +9597,24 @@ react-with-direction@^1.3.0: object.values "^1.1.5" prop-types "^15.7.2" -react-with-styles-interface-css@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/react-with-styles-interface-css/-/react-with-styles-interface-css-4.0.3.tgz#c4a61277b2b8e4126b2cd25eca3ac4097bd2af09" - integrity sha512-wE43PIyjal2dexxyyx4Lhbcb+E42amoYPnkunRZkb9WTA+Z+9LagbyxwsI352NqMdFmghR0opg29dzDO4/YXbw== +react-with-styles-interface-css@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/react-with-styles-interface-css/-/react-with-styles-interface-css-6.0.0.tgz#b53da7fa8359d452cb934cface8738acaef7b5fe" + integrity sha512-6khSG1Trf4L/uXOge/ZAlBnq2O2PEXlQEqAhCRbvzaQU4sksIkdwpCPEl6d+DtP3+IdhyffTWuHDO9lhe1iYvA== dependencies: array.prototype.flat "^1.2.1" global-cache "^1.2.1" -react-with-styles@^3.2.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/react-with-styles/-/react-with-styles-3.2.3.tgz#b058584065bb36c0d80ccc911725492692db8a61" - integrity sha512-MTI1UOvMHABRLj5M4WpODfwnveHaip6X7QUMI2x6zovinJiBXxzhA9AJP7MZNaKqg1JRFtHPXZdroUC8KcXwlQ== +react-with-styles@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/react-with-styles/-/react-with-styles-4.2.0.tgz#0b8a8e5d94d082518b9f564f6fcf6103e28096c5" + integrity sha512-tZCTY27KriRNhwHIbg1NkSdTTOSfXDg6Z7s+Q37mtz0Ym7Sc7IOr3PzVt4qJhJMW6Nkvfi3g34FuhtiGAJCBQA== dependencies: + airbnb-prop-types "^2.14.0" hoist-non-react-statics "^3.2.1" object.assign "^4.1.0" - prop-types "^15.6.2" - react-with-direction "^1.3.0" + prop-types "^15.7.2" + react-with-direction "^1.3.1" react@^17.0.2: version "17.0.2" @@ -9960,7 +9801,7 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.2: version "1.5.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== @@ -9988,9 +9829,9 @@ regjsgen@^0.8.0: integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== regjsparser@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.11.1.tgz#ae55c74f646db0c8fcb922d4da635e33da405149" - integrity sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ== + version "0.11.2" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.11.2.tgz#7404ad42be00226d72bcf1f003f1f441861913d8" + integrity sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA== dependencies: jsesc "~3.0.2" @@ -9999,6 +9840,11 @@ rememo@^4.0.0, rememo@^4.0.2: resolved "https://registry.yarnpkg.com/rememo/-/rememo-4.0.2.tgz#8af1f09fd3bf5809ca0bfd0b803926c67ead8c1e" integrity sha512-NVfSP9NstE3QPNs/TnegQY0vnJnstKQSpcrsI2kBTB3dB2PkdfKdTa+abbjMIDqpc63fE5LfjLgfMst0ULMFxQ== +remove-accents@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.4.tgz#73704abf7dae3764295d475d2b6afac4ea23e4d9" + integrity sha512-EpFcOa/ISetVHEXqu+VwI96KZBmq+a8LJnGkaeFw45epGlxIZz5dhEEnNZMsQXgORu3qaMoLX4qJCzOik6ytAg== + remove-accents@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" @@ -10203,9 +10049,9 @@ sass-loader@^12.1.0: neo-async "^2.6.2" sass@^1.35.2: - version "1.80.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.80.2.tgz#9d13d85a4f81bb17e09d1dc3e1c0944f7fd7315e" - integrity sha512-9wXY8cGBlUmoUoT+vwOZOFCiS+naiWVjqlreN9ar9PudXbGwlMTFwCR5K9kB4dFumJ6ib98wZyAObJKsWf1nAA== + version "1.80.4" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.80.4.tgz#bc0418fd796cad2f1a1309d8b4d7fe44b7027de0" + integrity sha512-rhMQ2tSF5CsuuspvC94nPM9rToiAFw2h3JTrLlgmNw1MH79v8Cr3DH6KF6o6r+8oofY3iYVPUf66KzC8yuVN1w== dependencies: "@parcel/watcher" "^2.4.1" chokidar "^4.0.0" @@ -10665,13 +10511,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - streamx@^2.15.0, streamx@^2.20.0: version "2.20.1" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.20.1.tgz#471c4f8b860f7b696feb83d5b125caab2fdbb93c" @@ -10700,7 +10539,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.includes@^2.0.0: +string.prototype.includes@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== @@ -10916,13 +10755,6 @@ stylis@4.2.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -11103,11 +10935,6 @@ tmpl@1.0.5: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -11330,7 +11157,7 @@ unbzip2-stream@1.4.3, unbzip2-stream@^1.4.3: buffer "^5.2.1" through "^2.3.8" -undici-types@~6.19.2: +undici-types@~6.19.8: version "6.19.8" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== @@ -11380,7 +11207,7 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.1.0: +update-browserslist-db@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== @@ -11431,6 +11258,11 @@ urlpattern-polyfill@10.0.0: resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec" integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + use-memo-one@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" @@ -11519,9 +11351,9 @@ wbuf@^1.1.0, wbuf@^1.7.3: minimalistic-assert "^1.0.0" web-vitals@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-4.2.3.tgz#270c4baecfbc6ec6fc15da1989e465e5f9b94fb7" - integrity sha512-/CFAm1mNxSmOj6i0Co+iGFJ58OS4NRGVP+AWS/l509uIK5a1bSoIVaHz/ZumpHTfHSZBpgrJ+wjfpAOrTHok5Q== + version "4.2.4" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-4.2.4.tgz#1d20bc8590a37769bd0902b289550936069184b7" + integrity sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw== webidl-conversions@^3.0.0: version "3.0.1" @@ -11731,7 +11563,7 @@ which-builtin-type@^1.1.3: which-collection "^1.0.2" which-typed-array "^1.1.15" -which-collection@^1.0.1, which-collection@^1.0.2: +which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -11741,7 +11573,7 @@ which-collection@^1.0.1, which-collection@^1.0.2: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: +which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== From 98224690eecc846163d36fbb1eadbacdd1bf51dc Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Tue, 29 Oct 2024 12:31:58 +0100 Subject: [PATCH 31/54] =?UTF-8?q?=F0=9F=90=9B=20Ensure=20the=20wizard=20di?= =?UTF-8?q?splays=20a=20valid=20step?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Screens/Onboarding/Onboarding.js | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js index deddb5e6f..195e3a089 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js @@ -12,7 +12,7 @@ const Onboarding = () => { return (
- { ); }; -const Stepper = ( { currentStep, setStep, setCompleted } ) => { +const OnboardingStep = ( { currentStep, setStep, setCompleted } ) => { const stepperOrder = [ StepWelcome, StepBusiness, StepProducts ]; - const renderSteps = () => { - return stepperOrder.map( ( Step, index ) => { - return ( -
- -
- ); - } ); - }; + const isValidStep = ( step ) => + typeof step === 'number' && + Number.isInteger( step ) && + step >= 0 && + step < stepperOrder.length; - return <>{ renderSteps() }; + const safeCurrentStep = isValidStep( currentStep ) ? currentStep : 0; + + const CurrentStepComponent = stepperOrder[ safeCurrentStep ]; + + return ( + + ); }; export default Onboarding; From 52a1bb7383874761de963c4fb47c8b80bb74a936 Mon Sep 17 00:00:00 2001 From: inpsyde-maticluznar Date: Tue, 29 Oct 2024 13:03:24 +0100 Subject: [PATCH 32/54] Insert missing links --- .../css/components/reusable-components/_select-box.scss | 4 ++++ .../js/Components/Screens/Onboarding/StepProducts.js | 7 +++++-- .../js/Components/Screens/Onboarding/StepWelcome.js | 6 +++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/modules/ppcp-settings/resources/css/components/reusable-components/_select-box.scss b/modules/ppcp-settings/resources/css/components/reusable-components/_select-box.scss index 17ad62a80..c32bfe706 100644 --- a/modules/ppcp-settings/resources/css/components/reusable-components/_select-box.scss +++ b/modules/ppcp-settings/resources/css/components/reusable-components/_select-box.scss @@ -82,6 +82,10 @@ &__checkbox-presentation { @include fake-input-field(2px); } + &__additional-content{ + position: relative; + z-index: 1; + } @media screen and (max-width: 480px) { gap: 16px; diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js index f155dab62..384f47fe2 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js @@ -106,9 +106,12 @@ const StepProducts = ( { setStep, currentStep, stepperOrder } ) => { currentValue={ products } type="checkbox" > - + { __( - 'WooCommerce Subscriptions - TODO missing link', + 'WooCommerce Subscriptions', 'woocommerce-paypal-payments' ) } diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js index bb4da1c65..b6a5bb097 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js @@ -89,10 +89,10 @@ const WelcomeForm = () => { const advancedUsersDescription = sprintf( // translators: %s: Link to PayPal REST application guide __( - 'For advanced users: Connect a custom PayPal REST app for full control over your integration. For more information on creating a PayPal REST application, click here.', + 'For advanced users: Connect a custom PayPal REST app for full control over your integration. For more information on creating a PayPal REST application, click here.', 'woocommerce-paypal-payments' ), - '#' + 'https://woocommerce.com/document/woocommerce-paypal-payments/#manual-credential-input ' ); return ( @@ -116,7 +116,7 @@ const WelcomeForm = () => { Date: Wed, 30 Oct 2024 16:52:06 +0100 Subject: [PATCH 33/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Separate=20eligibili?= =?UTF-8?q?ty=20flags=20from=20user=20input?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/js/data/onboarding/actions.js | 2 +- .../resources/js/data/onboarding/reducer.js | 14 ++++- .../resources/js/data/onboarding/selectors.js | 6 ++- .../src/Data/OnboardingProfile.php | 54 +++++++------------ .../src/Endpoint/OnboardingRestEndpoint.php | 41 +++++++++----- 5 files changed, 67 insertions(+), 50 deletions(-) diff --git a/modules/ppcp-settings/resources/js/data/onboarding/actions.js b/modules/ppcp-settings/resources/js/data/onboarding/actions.js index 6ac070d3a..44fb37667 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/actions.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/actions.js @@ -32,7 +32,7 @@ export const setIsSaving = ( isSaving ) => { /** * Persistent. Set the full onboarding details, usually during app initialization. * - * @param {Object} payload + * @param {{data: {}, flags?: {}}} payload * @return {{type: string, payload}} The action. */ export const setOnboardingDetails = ( payload ) => { diff --git a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js index e349d1f14..b932b3b9a 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js @@ -3,6 +3,8 @@ import ACTION_TYPES from './action-types'; const defaultState = { isReady: false, isSaving: false, + + // Data persisted to the server. data: { completed: false, step: 0, @@ -10,6 +12,10 @@ const defaultState = { useManualConnection: false, clientId: '', clientSecret: '', + }, + + // Read only values, provided by the server. + flags: { canUseCasualSelling: false, canUseVaulting: false, canUseCardPayments: false, @@ -49,7 +55,13 @@ export const onboardingReducer = ( // Persistent data. case ACTION_TYPES.SET_ONBOARDING_DETAILS: - return setPersistent( action.payload ); + const newState = setPersistent( action.payload.data ); + + if ( action.payload.flags ) { + newState.flags = { ...newState.flags, ...action.payload.flags }; + } + + return newState; case ACTION_TYPES.SET_ONBOARDING_COMPLETED: return setPersistent( { completed: action.completed } ); diff --git a/modules/ppcp-settings/resources/js/data/onboarding/selectors.js b/modules/ppcp-settings/resources/js/data/onboarding/selectors.js index 357ef963b..b7721b992 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/selectors.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/selectors.js @@ -13,6 +13,10 @@ export const getPersistentData = ( state ) => { }; export const getTransientData = ( state ) => { - const { data, ...transientState } = getOnboardingState( state ); + const { data, flags, ...transientState } = getOnboardingState( state ); return transientState || EMPTY_OBJ; }; + +export const getFlags = ( state ) => { + return getOnboardingState( state ).flags || EMPTY_OBJ; +}; diff --git a/modules/ppcp-settings/src/Data/OnboardingProfile.php b/modules/ppcp-settings/src/Data/OnboardingProfile.php index 9f4f2ce2b..b0f4b5121 100644 --- a/modules/ppcp-settings/src/Data/OnboardingProfile.php +++ b/modules/ppcp-settings/src/Data/OnboardingProfile.php @@ -29,6 +29,13 @@ class OnboardingProfile extends AbstractDataModel { */ protected const OPTION_KEY = 'woocommerce-ppcp-data-onboarding'; + /** + * List of customization flags, provided by the server (read-only). + * + * @var array + */ + protected array $flags = array(); + /** * Constructor. * @@ -45,9 +52,9 @@ class OnboardingProfile extends AbstractDataModel { ) { parent::__construct(); - $this->data['can_use_casual_selling'] = $can_use_casual_selling; - $this->data['can_use_vaulting'] = $can_use_vaulting; - $this->data['can_use_card_payments'] = $can_use_card_payments; + $this->flags['can_use_casual_selling'] = $can_use_casual_selling; + $this->flags['can_use_vaulting'] = $can_use_vaulting; + $this->flags['can_use_card_payments'] = $can_use_card_payments; } /** @@ -57,15 +64,12 @@ class OnboardingProfile extends AbstractDataModel { */ protected function get_defaults() : array { return array( - 'completed' => false, - 'step' => 0, - 'use_sandbox' => false, - 'use_manual_connection' => false, - 'client_id' => '', - 'client_secret' => '', - 'can_use_casual_selling' => null, - 'can_use_vaulting' => null, - 'can_use_card_payments' => null, + 'completed' => false, + 'step' => 0, + 'use_sandbox' => false, + 'use_manual_connection' => false, + 'client_id' => '', + 'client_secret' => '', ); } @@ -180,29 +184,11 @@ class OnboardingProfile extends AbstractDataModel { } /** - * Gets whether casual selling can be used. + * Returns the list of read-only customization flags * - * @return bool + * @return array */ - public function get_can_use_casual_selling() : bool { - return (bool) $this->data['can_use_casual_selling']; - } - - /** - * Gets whether vaulting can be used. - * - * @return bool - */ - public function get_can_use_vaulting() : bool { - return (bool) $this->data['can_use_vaulting']; - } - - /** - * Gets whether Credit Card payments can be used. - * - * @return bool - */ - public function get_can_use_card_payments() : bool { - return (bool) $this->data['can_use_card_payments']; + public function get_flags() : array { + return $this->flags; } } diff --git a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php index 6e5e47bb5..bd8e57eee 100644 --- a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php @@ -41,41 +41,46 @@ class OnboardingRestEndpoint extends RestEndpoint { * @var array */ private array $field_map = array( - 'completed' => array( + 'completed' => array( 'js_name' => 'completed', 'sanitize' => 'to_boolean', ), - 'step' => array( + 'step' => array( 'js_name' => 'step', 'sanitize' => 'to_number', ), - 'use_sandbox' => array( + 'use_sandbox' => array( 'js_name' => 'useSandbox', 'sanitize' => 'to_boolean', ), - 'use_manual_connection' => array( + 'use_manual_connection' => array( 'js_name' => 'useManualConnection', 'sanitize' => 'to_boolean', ), - 'client_id' => array( + 'client_id' => array( 'js_name' => 'clientId', 'sanitize' => 'sanitize_text_field', ), - 'client_secret' => array( + 'client_secret' => array( 'js_name' => 'clientSecret', 'sanitize' => 'sanitize_text_field', ), + ); + + /** + * Map the internal flags to JS names. + * + * @var array + */ + private array $flag_map = array( 'can_use_casual_selling' => array( - 'js_name' => 'canUseCasualSelling', - 'sanitize' => 'read_only', + 'js_name' => 'canUseCasualSelling', ), 'can_use_vaulting' => array( - 'js_name' => 'canUseVaulting', - 'sanitize' => 'read_only', + 'js_name' => 'canUseVaulting', ), 'can_use_card_payments' => array( - 'js_name' => 'canUseCardPayments', - 'sanitize' => 'read_only', + 'js_name' => 'canUseCardPayments', ), ); @@ -128,7 +133,17 @@ class OnboardingRestEndpoint extends RestEndpoint { $this->field_map ); - return rest_ensure_response( $js_data ); + $js_flags = $this->sanitize_for_javascript( + $this->profile->get_flags(), + $this->flag_map + ); + + return rest_ensure_response( + array( + 'data' => $js_data, + 'flags' => $js_flags, + ) + ); } /** From 49c24f56d010f12bfad360a949475d74511faf83 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Wed, 30 Oct 2024 16:55:44 +0100 Subject: [PATCH 34/54] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Add?= =?UTF-8?q?=20a=20Reset-Store=20action=20for=20testing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/js/data/onboarding/action-types.js | 2 ++ .../resources/js/data/onboarding/actions.js | 9 +++++++++ .../resources/js/data/onboarding/reducer.js | 4 ++++ modules/ppcp-settings/resources/js/data/store.js | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/modules/ppcp-settings/resources/js/data/onboarding/action-types.js b/modules/ppcp-settings/resources/js/data/onboarding/action-types.js index ac5a6a0df..b5f634ea5 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/action-types.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/action-types.js @@ -1,4 +1,6 @@ export default { + RESET_ONBOARDING: 'RESET_ONBOARDING', + // Transient data. SET_ONBOARDING_IS_READY: 'SET_ONBOARDING_IS_READY', SET_IS_SAVING_ONBOARDING: 'SET_IS_SAVING_ONBOARDING', diff --git a/modules/ppcp-settings/resources/js/data/onboarding/actions.js b/modules/ppcp-settings/resources/js/data/onboarding/actions.js index 44fb37667..635e72da6 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/actions.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/actions.js @@ -3,6 +3,15 @@ import { apiFetch } from '@wordpress/data-controls'; import ACTION_TYPES from './action-types'; import { NAMESPACE, STORE_NAME } from '../constants'; +/** + * Special. Resets all values in the onboarding store to initial defaults. + * + * @return {{type: string}} The action. + */ +export const resetOnboarding = () => { + return { type: ACTION_TYPES.RESET_ONBOARDING }; +}; + /** * Non-persistent. Marks the onboarding details as "ready", i.e., fully initialized. * diff --git a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js index b932b3b9a..47c0b034d 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js @@ -46,6 +46,10 @@ export const onboardingReducer = ( }; switch ( type ) { + // Reset store to initial state. + case ACTION_TYPES.RESET_ONBOARDING: + return setPersistent( defaultState.data ); + // Transient data. case ACTION_TYPES.SET_ONBOARDING_IS_READY: return setTransient( { isReady: action.isReady } ); diff --git a/modules/ppcp-settings/resources/js/data/store.js b/modules/ppcp-settings/resources/js/data/store.js index 32a05411f..a4acaf548 100644 --- a/modules/ppcp-settings/resources/js/data/store.js +++ b/modules/ppcp-settings/resources/js/data/store.js @@ -44,9 +44,14 @@ export const initStore = () => { console.groupEnd(); }; + window.ppcpSettings.resetStore = () => { + wp.data.dispatch( STORE_NAME ).resetOnboarding(); + wp.data.dispatch( STORE_NAME ).persist(); + }; window.ppcpSettings.startOnboarding = () => { wp.data.dispatch( STORE_NAME ).setCompleted( false ); wp.data.dispatch( STORE_NAME ).setOnboardingStep( 0 ); + wp.data.dispatch( STORE_NAME ).persist(); }; } /* eslint-enable no-console */ From 6a30bb01b3c962716fed45aa8ab8bd37cb0253be Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Wed, 30 Oct 2024 16:56:42 +0100 Subject: [PATCH 35/54] =?UTF-8?q?=F0=9F=91=94=20Introduce=20new=20props=20?= =?UTF-8?q?in=20the=20Redux=20store?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/data/onboarding/action-types.js | 2 ++ .../resources/js/data/onboarding/actions.js | 26 +++++++++++++++++++ .../resources/js/data/onboarding/reducer.js | 8 ++++++ 3 files changed, 36 insertions(+) diff --git a/modules/ppcp-settings/resources/js/data/onboarding/action-types.js b/modules/ppcp-settings/resources/js/data/onboarding/action-types.js index b5f634ea5..5d719f417 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/action-types.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/action-types.js @@ -13,4 +13,6 @@ export default { SET_MANUAL_CONNECTION_MODE: 'SET_MANUAL_CONNECTION_MODE', SET_CLIENT_ID: 'SET_CLIENT_ID', SET_CLIENT_SECRET: 'SET_CLIENT_SECRET', + SET_IS_CASUAL_SELLER: 'SET_IS_CASUAL_SELLER', + SET_PRODUCTS: 'SET_PRODUCTS', }; diff --git a/modules/ppcp-settings/resources/js/data/onboarding/actions.js b/modules/ppcp-settings/resources/js/data/onboarding/actions.js index 635e72da6..1409c471a 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/actions.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/actions.js @@ -129,6 +129,32 @@ export const setClientSecret = ( clientSecret ) => { }; }; +/** + * Persistent. Sets the "isCasualSeller" value. + * + * @param {boolean} isCasualSeller + * @return {{type: string, isCasualSeller}} The action. + */ +export const setIsCasualSeller = ( isCasualSeller ) => { + return { + type: ACTION_TYPES.SET_IS_CASUAL_SELLER, + isCasualSeller, + }; +}; + +/** + * Persistent. Sets the "products" array. + * + * @param {string[]} products + * @return {{type: string, products}} The action. + */ +export const setProducts = ( products ) => { + return { + type: ACTION_TYPES.SET_PRODUCTS, + products, + }; +}; + /** * Saves the persistent details to the WP database. * diff --git a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js index 47c0b034d..c0a47cb5e 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/reducer.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/reducer.js @@ -12,6 +12,8 @@ const defaultState = { useManualConnection: false, clientId: '', clientSecret: '', + isCasualSeller: null, // null value will uncheck both options in the UI. + products: [], }, // Read only values, provided by the server. @@ -87,6 +89,12 @@ export const onboardingReducer = ( useManualConnection: action.useManualConnection, } ); + case ACTION_TYPES.SET_IS_CASUAL_SELLER: + return setPersistent( { isCasualSeller: action.isCasualSeller } ); + + case ACTION_TYPES.SET_PRODUCTS: + return setPersistent( { products: action.products } ); + default: return state; } From ee2c374f790908e1362032d13b45c9c051bdaa43 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Wed, 30 Oct 2024 17:02:01 +0100 Subject: [PATCH 36/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Move=20constants=20t?= =?UTF-8?q?o=20a=20central=20config=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reason: The constants are also used by the store and are synced to the server. Their use is not isolated to the specific component --- .../Components/Screens/Onboarding/StepBusiness.js | 10 +++++----- .../Components/Screens/Onboarding/StepProducts.js | 13 ++++++------- .../ppcp-settings/resources/js/data/constants.js | 11 +++++++++++ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js index 9ac7de1c2..fe7deeb90 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js @@ -5,6 +5,9 @@ import { __ } from '@wordpress/i18n'; import PaymentMethodIcons from '../../ReusableComponents/PaymentMethodIcons'; import { useState } from '@wordpress/element'; import Navigation from '../../ReusableComponents/Navigation'; +import { BUSINESS_TYPES } from '../../../data/constants'; + +const BUSINESS_RADIO_GROUP_NAME = 'business'; const StepBusiness = ( { setStep, @@ -13,9 +16,6 @@ const StepBusiness = ( { setCompleted, } ) => { const [ businessCategory, setBusinessCategory ] = useState( null ); - const BUSINESS_RADIO_GROUP_NAME = 'business'; - const CASUAL_SELLER_CHECKBOX_VALUE = 'casual_seller'; - const BUSINESS_CHECKBOX_VALUE = 'business'; return (
@@ -38,7 +38,7 @@ const StepBusiness = ( { ) } icon="icon-business-casual-seller.svg" name={ BUSINESS_RADIO_GROUP_NAME } - value={ CASUAL_SELLER_CHECKBOX_VALUE } + value={ BUSINESS_TYPES.CASUAL_SELLER } changeCallback={ setBusinessCategory } currentValue={ businessCategory } checked={ @@ -69,7 +69,7 @@ const StepBusiness = ( { ) } icon="icon-business-business.svg" name={ BUSINESS_RADIO_GROUP_NAME } - value={ BUSINESS_CHECKBOX_VALUE } + value={ BUSINESS_TYPES.BUSINESS } currentValue={ businessCategory } changeCallback={ setBusinessCategory } checked={ diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js index efc477d2b..c2ce87012 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js @@ -4,6 +4,9 @@ import { __ } from '@wordpress/i18n'; import SelectBox from '../../ReusableComponents/SelectBox'; import SelectBoxWrapper from '../../ReusableComponents/SelectBoxWrapper'; import { useState } from '@wordpress/element'; +import { PRODUCT_TYPES } from '../../../data/constants'; + +const PRODUCTS_CHECKBOX_GROUP_NAME = 'products'; const StepProducts = ( { setStep, @@ -12,10 +15,6 @@ const StepProducts = ( { setCompleted, } ) => { const [ products, setProducts ] = useState( [] ); - const PRODUCTS_CHECKBOX_GROUP_NAME = 'products'; - const VIRTUAL_CHECKBOX_VALUE = 'virtual'; - const PHYSICAL_CHECKBOX_VALUE = 'physical'; - const SUBSCRIPTIONS_CHECKBOX_VALUE = 'subscriptions'; return (
@@ -35,7 +34,7 @@ const StepProducts = ( { ) } icon="icon-product-virtual.svg" name={ PRODUCTS_CHECKBOX_GROUP_NAME } - value={ VIRTUAL_CHECKBOX_VALUE } + value={ PRODUCT_TYPES.VIRTUAL } changeCallback={ setProducts } currentValue={ products } type="checkbox" @@ -78,7 +77,7 @@ const StepProducts = ( { ) } icon="icon-product-physical.svg" name={ PRODUCTS_CHECKBOX_GROUP_NAME } - value={ PHYSICAL_CHECKBOX_VALUE } + value={ PRODUCT_TYPES.PHYSICAL } changeCallback={ setProducts } currentValue={ products } type="checkbox" @@ -106,7 +105,7 @@ const StepProducts = ( { ) } icon="icon-product-subscription.svg" name={ PRODUCTS_CHECKBOX_GROUP_NAME } - value={ SUBSCRIPTIONS_CHECKBOX_VALUE } + value={ PRODUCT_TYPES.SUBSCRIPTIONS } changeCallback={ setProducts } currentValue={ products } type="checkbox" diff --git a/modules/ppcp-settings/resources/js/data/constants.js b/modules/ppcp-settings/resources/js/data/constants.js index 61ebf948e..e6f8f9de5 100644 --- a/modules/ppcp-settings/resources/js/data/constants.js +++ b/modules/ppcp-settings/resources/js/data/constants.js @@ -1,2 +1,13 @@ export const NAMESPACE = '/wc/v3/wc_paypal'; export const STORE_NAME = 'wc/paypal'; + +export const BUSINESS_TYPES = { + CASUAL_SELLER: 'casual_seller', + BUSINESS: 'business', +}; + +export const PRODUCT_TYPES = { + VIRTUAL: 'virtual', + PHYSICAL: 'physical', + SUBSCRIPTIONS: 'subscriptions', +}; From fcf2a972a71b4f3f694a18158e079f174c6cbebb Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Wed, 30 Oct 2024 17:17:36 +0100 Subject: [PATCH 37/54] =?UTF-8?q?=F0=9F=91=94=20Introduce=20new=20hook=20d?= =?UTF-8?q?etails?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/js/data/onboarding/hooks.js | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js index 66bfec24a..5db54f95c 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js @@ -1,5 +1,5 @@ import { useSelect, useDispatch } from '@wordpress/data'; -import { STORE_NAME } from '../constants'; +import { PRODUCT_TYPES, STORE_NAME } from '../constants'; export const useOnboardingDetails = () => { const { @@ -8,6 +8,8 @@ export const useOnboardingDetails = () => { setManualConnectionMode, setClientId, setClientSecret, + setIsCasualSeller, + setProducts, } = useDispatch( STORE_NAME ); // Transient accessors. @@ -32,6 +34,21 @@ export const useOnboardingDetails = () => { return select( STORE_NAME ).getPersistentData().useManualConnection; }, [] ); + const isCasualSeller = useSelect( ( select ) => { + return select( STORE_NAME ).getPersistentData().isCasualSeller; + }, [] ); + + const products = useSelect( ( select ) => { + return select( STORE_NAME ).getPersistentData().products || []; + }, [] ); + + const toggleProduct = ( list ) => { + const validProducts = list.filter( ( item ) => + Object.values( PRODUCT_TYPES ).includes( item ) + ); + return setDetailAndPersist( setProducts, validProducts ); + }; + const setDetailAndPersist = async ( setter, value ) => { setter( value ); await persist(); @@ -50,6 +67,11 @@ export const useOnboardingDetails = () => { setDetailAndPersist( setSandboxMode, state ), setManualConnectionMode: ( state ) => setDetailAndPersist( setManualConnectionMode, state ), + isCasualSeller, + setIsCasualSeller: ( value ) => + setDetailAndPersist( setIsCasualSeller, value ), + products, + toggleProduct, }; }; From cff9919c7810a891785eb6be8db68cdbf1280945 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Wed, 30 Oct 2024 17:19:47 +0100 Subject: [PATCH 38/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Consolidate=20hook?= =?UTF-8?q?=20props?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/js/data/onboarding/hooks.js | 56 +++++++++---------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js index 5db54f95c..b5f478afb 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js @@ -4,6 +4,8 @@ import { PRODUCT_TYPES, STORE_NAME } from '../constants'; export const useOnboardingDetails = () => { const { persist, + setOnboardingStep, + setCompleted, setSandboxMode, setManualConnectionMode, setClientId, @@ -17,7 +19,19 @@ export const useOnboardingDetails = () => { return select( STORE_NAME ).getTransientData().isSaving; }, [] ); + const isReady = useSelect( ( select ) => { + return select( STORE_NAME ).getTransientData().isReady; + } ); + // Persistent accessors. + const step = useSelect( ( select ) => { + return select( STORE_NAME ).getPersistentData().step || 0; + } ); + + const completed = useSelect( ( select ) => { + return select( STORE_NAME ).getPersistentData().completed; + } ); + const clientId = useSelect( ( select ) => { return select( STORE_NAME ).getPersistentData().clientId; }, [] ); @@ -56,17 +70,22 @@ export const useOnboardingDetails = () => { return { isSaving, + isReady, + step, + setStep: ( value ) => setDetailAndPersist( setOnboardingStep, value ), + completed, + setCompleted: ( state ) => setDetailAndPersist( setCompleted, state ), isSandboxMode, + setSandboxMode: ( state ) => + setDetailAndPersist( setSandboxMode, state ), isManualConnectionMode, + setManualConnectionMode: ( state ) => + setDetailAndPersist( setManualConnectionMode, state ), clientId, setClientId: ( value ) => setDetailAndPersist( setClientId, value ), clientSecret, setClientSecret: ( value ) => setDetailAndPersist( setClientSecret, value ), - setSandboxMode: ( state ) => - setDetailAndPersist( setSandboxMode, state ), - setManualConnectionMode: ( state ) => - setDetailAndPersist( setManualConnectionMode, state ), isCasualSeller, setIsCasualSeller: ( value ) => setDetailAndPersist( setIsCasualSeller, value ), @@ -76,31 +95,8 @@ export const useOnboardingDetails = () => { }; export const useOnboardingStep = () => { - const { persist, setOnboardingStep, setCompleted } = - useDispatch( STORE_NAME ); + const { isReady, step, setStep, completed, setCompleted } = + useOnboardingDetails(); - const isReady = useSelect( ( select ) => { - return select( STORE_NAME ).getTransientData().isReady; - } ); - - const step = useSelect( ( select ) => { - return select( STORE_NAME ).getPersistentData().step || 0; - } ); - - const completed = useSelect( ( select ) => { - return select( STORE_NAME ).getPersistentData().completed; - } ); - - const setDetailAndPersist = async ( setter, value ) => { - setter( value ); - await persist(); - }; - - return { - isReady, - step, - setStep: ( value ) => setDetailAndPersist( setOnboardingStep, value ), - completed, - setCompleted: ( state ) => setDetailAndPersist( setCompleted, state ), - }; + return { isReady, step, setStep, completed, setCompleted }; }; From 6e3664ade80771ae0c4af0484dbd1c2f5cccbf02 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Wed, 30 Oct 2024 17:33:48 +0100 Subject: [PATCH 39/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Extract=20onboarding?= =?UTF-8?q?=20state=20to=20custom=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Screens/Onboarding/StepBusiness.js | 37 ++++++++++------- .../Screens/Onboarding/StepProducts.js | 10 ++--- .../Screens/Onboarding/StepWelcome.js | 4 +- .../resources/js/data/onboarding/hooks.js | 40 ++++++++++++++++++- 4 files changed, 69 insertions(+), 22 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js index fe7deeb90..1c38ecc86 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepBusiness.js @@ -3,7 +3,7 @@ import SelectBoxWrapper from '../../ReusableComponents/SelectBoxWrapper.js'; import SelectBox from '../../ReusableComponents/SelectBox.js'; import { __ } from '@wordpress/i18n'; import PaymentMethodIcons from '../../ReusableComponents/PaymentMethodIcons'; -import { useState } from '@wordpress/element'; +import { useOnboardingStepBusiness } from '../../../data'; import Navigation from '../../ReusableComponents/Navigation'; import { BUSINESS_TYPES } from '../../../data/constants'; @@ -15,7 +15,21 @@ const StepBusiness = ( { stepperOrder, setCompleted, } ) => { - const [ businessCategory, setBusinessCategory ] = useState( null ); + const { isCasualSeller, setIsCasualSeller } = useOnboardingStepBusiness(); + + const handleSellerTypeChange = ( value ) => { + setIsCasualSeller( BUSINESS_TYPES.CASUAL_SELLER === value ); + }; + + const getCurrentValue = () => { + if ( isCasualSeller === null ) { + return ''; + } + + return isCasualSeller + ? BUSINESS_TYPES.CASUAL_SELLER + : BUSINESS_TYPES.BUSINESS; + }; return (
@@ -39,12 +53,9 @@ const StepBusiness = ( { icon="icon-business-casual-seller.svg" name={ BUSINESS_RADIO_GROUP_NAME } value={ BUSINESS_TYPES.CASUAL_SELLER } - changeCallback={ setBusinessCategory } - currentValue={ businessCategory } - checked={ - businessCategory === - { CASUAL_SELLER_CHECKBOX_VALUE } - } + changeCallback={ handleSellerTypeChange } + currentValue={ getCurrentValue() } + checked={ isCasualSeller === true } type="radio" > businessCategory !== null } + canProceeedCallback={ () => isCasualSeller !== null } />
diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js index c2ce87012..fecdc6029 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepProducts.js @@ -3,7 +3,7 @@ import Navigation from '../../ReusableComponents/Navigation'; import { __ } from '@wordpress/i18n'; import SelectBox from '../../ReusableComponents/SelectBox'; import SelectBoxWrapper from '../../ReusableComponents/SelectBoxWrapper'; -import { useState } from '@wordpress/element'; +import { useOnboardingStepProducts } from '../../../data'; import { PRODUCT_TYPES } from '../../../data/constants'; const PRODUCTS_CHECKBOX_GROUP_NAME = 'products'; @@ -14,7 +14,7 @@ const StepProducts = ( { stepperOrder, setCompleted, } ) => { - const [ products, setProducts ] = useState( [] ); + const { products, toggleProduct } = useOnboardingStepProducts(); return (
@@ -35,7 +35,7 @@ const StepProducts = ( { icon="icon-product-virtual.svg" name={ PRODUCTS_CHECKBOX_GROUP_NAME } value={ PRODUCT_TYPES.VIRTUAL } - changeCallback={ setProducts } + changeCallback={ toggleProduct } currentValue={ products } type="checkbox" > @@ -78,7 +78,7 @@ const StepProducts = ( { icon="icon-product-physical.svg" name={ PRODUCTS_CHECKBOX_GROUP_NAME } value={ PRODUCT_TYPES.PHYSICAL } - changeCallback={ setProducts } + changeCallback={ toggleProduct } currentValue={ products } type="checkbox" > @@ -106,7 +106,7 @@ const StepProducts = ( { icon="icon-product-subscription.svg" name={ PRODUCTS_CHECKBOX_GROUP_NAME } value={ PRODUCT_TYPES.SUBSCRIPTIONS } - changeCallback={ setProducts } + changeCallback={ toggleProduct } currentValue={ products } type="checkbox" > diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js index b6a5bb097..368b4d9c9 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js @@ -4,7 +4,7 @@ import { Button, TextControl } from '@wordpress/components'; import PaymentMethodIcons from '../../ReusableComponents/PaymentMethodIcons'; import SettingsToggleBlock from '../../ReusableComponents/SettingsToggleBlock'; import Separator from '../../ReusableComponents/Separator'; -import { useOnboardingDetails } from '../../../data'; +import { useOnboardingStepWelcome } from '../../../data'; import DataStoreControl from '../../ReusableComponents/DataStoreControl'; const StepWelcome = ( { setStep, currentStep } ) => { @@ -84,7 +84,7 @@ const WelcomeForm = () => { setClientId, clientSecret, setClientSecret, - } = useOnboardingDetails(); + } = useOnboardingStepWelcome(); const advancedUsersDescription = sprintf( // translators: %s: Link to PayPal REST application guide diff --git a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js index b5f478afb..9481e047d 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js @@ -1,7 +1,7 @@ import { useSelect, useDispatch } from '@wordpress/data'; import { PRODUCT_TYPES, STORE_NAME } from '../constants'; -export const useOnboardingDetails = () => { +const useOnboardingDetails = () => { const { persist, setOnboardingStep, @@ -94,6 +94,44 @@ export const useOnboardingDetails = () => { }; }; +export const useOnboardingStepWelcome = () => { + const { + isSaving, + isSandboxMode, + setSandboxMode, + isManualConnectionMode, + setManualConnectionMode, + clientId, + setClientId, + clientSecret, + setClientSecret, + } = useOnboardingDetails(); + + return { + isSaving, + isSandboxMode, + setSandboxMode, + isManualConnectionMode, + setManualConnectionMode, + clientId, + setClientId, + clientSecret, + setClientSecret, + }; +}; + +export const useOnboardingStepBusiness = () => { + const { isCasualSeller, setIsCasualSeller } = useOnboardingDetails(); + + return { isCasualSeller, setIsCasualSeller }; +}; + +export const useOnboardingStepProducts = () => { + const { products, toggleProduct } = useOnboardingDetails(); + + return { products, toggleProduct }; +}; + export const useOnboardingStep = () => { const { isReady, step, setStep, completed, setCompleted } = useOnboardingDetails(); From e28b6e35aa2b73a7bcc04f5d31dd42a3729b30bd Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Wed, 30 Oct 2024 18:52:10 +0100 Subject: [PATCH 40/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Rename=20boolean=20g?= =?UTF-8?q?etters/setters=20for=20data=20models?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To make the function names more semantic --- .../src/Data/AbstractDataModel.php | 32 +++++++++++++++++-- .../src/Data/OnboardingProfile.php | 8 ++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/modules/ppcp-settings/src/Data/AbstractDataModel.php b/modules/ppcp-settings/src/Data/AbstractDataModel.php index 1d711cbe5..780ad40bd 100644 --- a/modules/ppcp-settings/src/Data/AbstractDataModel.php +++ b/modules/ppcp-settings/src/Data/AbstractDataModel.php @@ -89,10 +89,38 @@ abstract class AbstractDataModel { continue; } - $setter = "set_$key"; - if ( method_exists( $this, $setter ) ) { + $setter = $this->get_setter_name( $key ); + + if ( $setter && method_exists( $this, $setter ) ) { $this->$setter( $value ); } } } + + /** + * Generates a setter method name for a given key, stripping the prefix from + * boolean fields (is_, use_, has_). + * + * @param int|string $field_key The key for which to generate a setter name. + * + * @return string The generated setter method name. + */ + private function get_setter_name( $field_key ) : string { + if ( ! is_string( $field_key ) ) { + return ''; + } + + $prefixes_to_strip = array( 'is_', 'use_', 'has_' ); + $stripped_key = $field_key; + + foreach ( $prefixes_to_strip as $prefix ) { + if ( str_starts_with( $field_key, $prefix ) ) { + $stripped_key = substr( $field_key, strlen( $prefix ) ); + break; + } + } + + return $stripped_key ? "set_$stripped_key" : ''; + } + } diff --git a/modules/ppcp-settings/src/Data/OnboardingProfile.php b/modules/ppcp-settings/src/Data/OnboardingProfile.php index b0f4b5121..df894e85a 100644 --- a/modules/ppcp-settings/src/Data/OnboardingProfile.php +++ b/modules/ppcp-settings/src/Data/OnboardingProfile.php @@ -116,7 +116,7 @@ class OnboardingProfile extends AbstractDataModel { * * @return bool */ - public function get_use_sandbox() : bool { + public function get_sandbox() : bool { return (bool) $this->data['use_sandbox']; } @@ -125,7 +125,7 @@ class OnboardingProfile extends AbstractDataModel { * * @param bool $use_sandbox Whether to use sandbox mode. */ - public function set_use_sandbox( bool $use_sandbox ) : void { + public function set_sandbox( bool $use_sandbox ) : void { $this->data['use_sandbox'] = $use_sandbox; } @@ -134,7 +134,7 @@ class OnboardingProfile extends AbstractDataModel { * * @return bool */ - public function get_use_manual_connection() : bool { + public function get_manual_connection() : bool { return (bool) $this->data['use_manual_connection']; } @@ -143,7 +143,7 @@ class OnboardingProfile extends AbstractDataModel { * * @param bool $use_manual_connection Whether to use manual connection. */ - public function set_use_manual_connection( bool $use_manual_connection ) : void { + public function set_manual_connection( bool $use_manual_connection ) : void { $this->data['use_manual_connection'] = $use_manual_connection; } From 4102ba285b601dc2eb5a24b1521452360eab2f39 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Wed, 30 Oct 2024 18:55:07 +0100 Subject: [PATCH 41/54] =?UTF-8?q?=F0=9F=91=94=20Add=20server-side=20onboar?= =?UTF-8?q?ding=20profile=20details?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Data/OnboardingProfile.php | 38 +++++++++++++++++++ .../src/Endpoint/OnboardingRestEndpoint.php | 7 ++++ 2 files changed, 45 insertions(+) diff --git a/modules/ppcp-settings/src/Data/OnboardingProfile.php b/modules/ppcp-settings/src/Data/OnboardingProfile.php index df894e85a..e1f9e16b4 100644 --- a/modules/ppcp-settings/src/Data/OnboardingProfile.php +++ b/modules/ppcp-settings/src/Data/OnboardingProfile.php @@ -70,6 +70,8 @@ class OnboardingProfile extends AbstractDataModel { 'use_manual_connection' => false, 'client_id' => '', 'client_secret' => '', + 'is_casual_seller' => null, + 'products' => array(), ); } @@ -183,6 +185,42 @@ class OnboardingProfile extends AbstractDataModel { $this->data['client_secret'] = sanitize_text_field( $client_secret ); } + /** + * Gets the casual seller flag. + * + * @return bool|null + */ + public function get_casual_seller() : ?bool { + return $this->data['is_casual_seller']; + } + + /** + * Sets the casual-seller flag. + * + * @param bool|null $casual_seller Whether the merchant uses a personal account for selling. + */ + public function set_casual_seller( ?bool $casual_seller ) : void { + $this->data['is_casual_seller'] = $casual_seller; + } + + /** + * Gets the active product types for this store. + * + * @return string[] + */ + public function get_products() : array { + return $this->data['products']; + } + + /** + * Sets the list of active product types. + * + * @param string[] $products Any of ['virtual'|'physical'|'subscriptions']. + */ + public function set_products( array $products ) : void { + $this->data['products'] = $products; + } + /** * Returns the list of read-only customization flags * diff --git a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php index bd8e57eee..afb2d7f1f 100644 --- a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php @@ -65,6 +65,13 @@ class OnboardingRestEndpoint extends RestEndpoint { 'js_name' => 'clientSecret', 'sanitize' => 'sanitize_text_field', ), + 'is_casual_seller' => array( + 'js_name' => 'isCasualSeller', + 'sanitize' => 'to_boolean', + ), + 'products' => array( + 'js_name' => 'products', + ), ); /** From 37beb591d5b17365a120b25eb9e2e8074554d948 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Wed, 30 Oct 2024 18:57:51 +0100 Subject: [PATCH 42/54] =?UTF-8?q?=F0=9F=94=92=EF=B8=8F=20Add=20array=20san?= =?UTF-8?q?itizer=20for=20products=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php | 2 ++ modules/ppcp-settings/src/Endpoint/RestEndpoint.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php index afb2d7f1f..6c59b1622 100644 --- a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php @@ -98,6 +98,8 @@ class OnboardingRestEndpoint extends RestEndpoint { */ public function __construct( OnboardingProfile $profile ) { $this->profile = $profile; + + $this->field_map['products']['sanitize'] = fn( $list ) => array_map( 'sanitize_text_field', $list ); } /** diff --git a/modules/ppcp-settings/src/Endpoint/RestEndpoint.php b/modules/ppcp-settings/src/Endpoint/RestEndpoint.php index 9bb98dfac..08191276b 100644 --- a/modules/ppcp-settings/src/Endpoint/RestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/RestEndpoint.php @@ -65,7 +65,7 @@ class RestEndpoint extends WC_REST_Controller { if ( null === $sanitation_cb ) { $sanitized[ $key ] = $value; - } elseif ( method_exists( $this, $sanitation_cb ) ) { + } elseif ( is_string( $sanitation_cb ) && method_exists( $this, $sanitation_cb ) ) { $sanitized[ $key ] = $this->{$sanitation_cb}( $value ); } elseif ( is_callable( $sanitation_cb ) ) { $sanitized[ $key ] = $sanitation_cb( $value ); From f521b3532a2073edba2484c2b4dd07c23234e448 Mon Sep 17 00:00:00 2001 From: "Alex P." Date: Thu, 31 Oct 2024 09:36:52 +0200 Subject: [PATCH 43/54] Exclude node_modules in psalm --- psalm.xml.dist | 3 +++ 1 file changed, 3 insertions(+) diff --git a/psalm.xml.dist b/psalm.xml.dist index 33986e444..73b74f690 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -28,6 +28,9 @@ + + + From 6f205ee730ac63af8a23eb19205af9d481f4717a Mon Sep 17 00:00:00 2001 From: "Alex P." Date: Thu, 31 Oct 2024 09:44:04 +0200 Subject: [PATCH 44/54] Add dummy connect_manual endpoint --- modules/ppcp-settings/services.php | 10 +- .../Endpoint/ConnectManualRestEndpoint.php | 92 +++++++++++++++++++ modules/ppcp-settings/src/SettingsModule.php | 7 ++ 3 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php diff --git a/modules/ppcp-settings/services.php b/modules/ppcp-settings/services.php index f34257f79..40c965cbb 100644 --- a/modules/ppcp-settings/services.php +++ b/modules/ppcp-settings/services.php @@ -9,12 +9,13 @@ declare( strict_types = 1 ); namespace WooCommerce\PayPalCommerce\Settings; +use WooCommerce\PayPalCommerce\Settings\Endpoint\ConnectManualRestEndpoint; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; use WooCommerce\PayPalCommerce\Settings\Endpoint\OnboardingRestEndpoint; use WooCommerce\PayPalCommerce\Settings\Data\OnboardingProfile; return array( - 'settings.url' => static function ( ContainerInterface $container ) : string { + 'settings.url' => static function ( ContainerInterface $container ) : string { /** * The path cannot be false. * @@ -25,7 +26,7 @@ return array( dirname( realpath( __FILE__ ), 3 ) . '/woocommerce-paypal-payments.php' ); }, - 'settings.data.onboarding' => static function ( ContainerInterface $container ) : OnboardingProfile { + 'settings.data.onboarding' => static function ( ContainerInterface $container ) : OnboardingProfile { $can_use_casual_selling = false; $can_use_vaulting = $container->has( 'save-payment-methods.eligible' ) && $container->get( 'save-payment-methods.eligible' ); $can_use_card_payments = $container->has( 'card-fields.eligible' ) && $container->get( 'card-fields.eligible' ); @@ -41,7 +42,10 @@ return array( $can_use_card_payments ); }, - 'settings.rest.onboarding' => static function ( ContainerInterface $container ) : OnboardingRestEndpoint { + 'settings.rest.onboarding' => static function ( ContainerInterface $container ) : OnboardingRestEndpoint { return new OnboardingRestEndpoint( $container->get( 'settings.data.onboarding' ) ); }, + 'settings.rest.connect_manual' => static function ( ContainerInterface $container ) : ConnectManualRestEndpoint { + return new ConnectManualRestEndpoint(); + }, ); diff --git a/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php new file mode 100644 index 000000000..904f415d4 --- /dev/null +++ b/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php @@ -0,0 +1,92 @@ + array( + 'js_name' => 'clientId', + 'sanitize' => 'sanitize_text_field', + ), + 'client_secret' => array( + 'js_name' => 'clientSecret', + 'sanitize' => 'sanitize_text_field', + ), + 'use_sandbox' => array( + 'js_name' => 'useSandbox', + 'sanitize' => 'to_boolean', + ), + ); + + /** + * Configure REST API routes. + */ + public function register_routes() { + register_rest_route( + $this->namespace, + '/' . $this->rest_base, + array( + array( + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => array( $this, 'connect_manual' ), + 'permission_callback' => array( $this, 'check_permission' ), + ), + ) + ); + } + + /** + * Retrieves merchantId and email. + * + * @param WP_REST_Request $request Full data about the request. + */ + public function connect_manual( WP_REST_Request $request ) : WP_REST_Response { + $data = $this->sanitize_for_wordpress( + $request->get_params(), + $this->field_map + ); + + if ( ! isset( $data['client_id'] ) || empty( $data['client_id'] ) + || ! isset( $data['client_secret'] ) || empty( $data['client_secret'] ) ) { + return rest_ensure_response( + array( + 'success' => false, + ) + ); + } + + $result = array( + 'merchantId' => 'bt_us@woocommerce.com', + 'email' => 'AT45V2DGMKLRY', + 'success' => true, + ); + + return rest_ensure_response( $result ); + } +} diff --git a/modules/ppcp-settings/src/SettingsModule.php b/modules/ppcp-settings/src/SettingsModule.php index e2d556b19..ef7340fe1 100644 --- a/modules/ppcp-settings/src/SettingsModule.php +++ b/modules/ppcp-settings/src/SettingsModule.php @@ -9,6 +9,8 @@ declare( strict_types = 1 ); namespace WooCommerce\PayPalCommerce\Settings; +use WooCommerce\PayPalCommerce\Settings\Endpoint\ConnectManualRestEndpoint; +use WooCommerce\PayPalCommerce\Settings\Endpoint\OnboardingRestEndpoint; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ExecutableModule; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ModuleClassNameIdTrait; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ServiceModule; @@ -107,7 +109,12 @@ class SettingsModule implements ServiceModule, ExecutableModule { 'rest_api_init', static function () use ( $container ) : void { $onboarding_endpoint = $container->get( 'settings.rest.onboarding' ); + assert( $onboarding_endpoint instanceof OnboardingRestEndpoint ); $onboarding_endpoint->register_routes(); + + $connect_manual_endpoint = $container->get( 'settings.rest.connect_manual' ); + assert( $connect_manual_endpoint instanceof ConnectManualRestEndpoint ); + $connect_manual_endpoint->register_routes(); } ); From 2ec94b111321ced0f49c587fd06474977a03c912 Mon Sep 17 00:00:00 2001 From: "Alex P." Date: Thu, 31 Oct 2024 09:44:57 +0200 Subject: [PATCH 45/54] Update manual inputs labels for sandbox/live --- .../Screens/Onboarding/StepWelcome.js | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js index b6a5bb097..b99caca25 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js @@ -125,19 +125,33 @@ const WelcomeForm = () => { > Date: Thu, 31 Oct 2024 09:47:06 +0200 Subject: [PATCH 46/54] Perform manual connection request --- .../Screens/Onboarding/StepWelcome.js | 30 +++++++++++++++---- .../resources/js/data/onboarding/hooks.js | 21 ++++++++++++- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js index b99caca25..1aab910fd 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js @@ -4,10 +4,10 @@ import { Button, TextControl } from '@wordpress/components'; import PaymentMethodIcons from '../../ReusableComponents/PaymentMethodIcons'; import SettingsToggleBlock from '../../ReusableComponents/SettingsToggleBlock'; import Separator from '../../ReusableComponents/Separator'; -import { useOnboardingDetails } from '../../../data'; +import { useManualConnect, useOnboardingDetails } from '../../../data'; import DataStoreControl from '../../ReusableComponents/DataStoreControl'; -const StepWelcome = ( { setStep, currentStep } ) => { +const StepWelcome = ( { setStep, currentStep, setCompleted } ) => { return (
{ className="ppcp-r-page-welcome-or-separator" text={ __( 'or', 'woocommerce-paypal-payments' ) } /> - +
); @@ -74,7 +74,7 @@ const WelcomeFeatures = () => { ); }; -const WelcomeForm = () => { +const WelcomeForm = ( { setCompleted } ) => { const { isSandboxMode, setSandboxMode, @@ -86,6 +86,26 @@ const WelcomeForm = () => { setClientSecret, } = useOnboardingDetails(); + const { connectManual } = useManualConnect(); + + const handleConnect = async () => { + try { + const res = await connectManual( + clientId, + clientSecret, + isSandboxMode + ); + if ( ! res.success ) { + throw new Error( 'Request failed.' ); + } + + setCompleted( true ); + } catch ( exc ) { + console.error( exc ); + alert( 'Connection failed.' ); + } + }; + const advancedUsersDescription = sprintf( // translators: %s: Link to PayPal REST application guide __( @@ -156,7 +176,7 @@ const WelcomeForm = () => { onChange={ setClientSecret } type="password" /> - diff --git a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js index 66bfec24a..909f9b66b 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js @@ -1,5 +1,6 @@ import { useSelect, useDispatch } from '@wordpress/data'; -import { STORE_NAME } from '../constants'; +import { NAMESPACE, STORE_NAME } from '../constants'; +import apiFetch from '@wordpress/api-fetch'; export const useOnboardingDetails = () => { const { @@ -82,3 +83,21 @@ export const useOnboardingStep = () => { setCompleted: ( state ) => setDetailAndPersist( setCompleted, state ), }; }; + +export const useManualConnect = () => { + const connectManual = async ( clientId, clientSecret, isSandboxMode ) => { + return await apiFetch( { + path: `${ NAMESPACE }/connect_manual`, + method: 'POST', + data: { + clientId, + clientSecret, + useSandbox: isSandboxMode, + }, + } ); + }; + + return { + connectManual, + }; +}; From a98618d5aa6386444b0f73193d30caefdf9003ee Mon Sep 17 00:00:00 2001 From: "Alex P." Date: Thu, 31 Oct 2024 09:51:29 +0200 Subject: [PATCH 47/54] Fix psalm --- modules/ppcp-settings/node_modules/.gitkeep | 0 node_modules/.gitkeep | 0 psalm.xml.dist | 3 ++- 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 modules/ppcp-settings/node_modules/.gitkeep create mode 100644 node_modules/.gitkeep diff --git a/modules/ppcp-settings/node_modules/.gitkeep b/modules/ppcp-settings/node_modules/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/.gitkeep b/node_modules/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/psalm.xml.dist b/psalm.xml.dist index 73b74f690..46f4e8a49 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -29,7 +29,8 @@ - + + From 847bce3510afee90a87e9c77c01095ddebee7a55 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Thu, 31 Oct 2024 14:44:45 +0100 Subject: [PATCH 48/54] =?UTF-8?q?=F0=9F=8E=A8=20Standardize=20imports,=20r?= =?UTF-8?q?emove=20unneccesary=20consts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/Components/ReusableComponents/Container.js | 3 --- .../js/Components/Screens/Onboarding/Onboarding.js | 12 +++++------- .../js/Components/Screens/Onboarding/StepBusiness.js | 6 +++--- .../js/Components/Screens/Onboarding/StepWelcome.js | 2 +- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/ReusableComponents/Container.js b/modules/ppcp-settings/resources/js/Components/ReusableComponents/Container.js index e6b83e691..fd91017bf 100644 --- a/modules/ppcp-settings/resources/js/Components/ReusableComponents/Container.js +++ b/modules/ppcp-settings/resources/js/Components/ReusableComponents/Container.js @@ -1,6 +1,3 @@ -export const PAGE_ONBOARDING = 'onboarding'; -export const PAGE_SETTINGS = 'settings'; - const Container = ( { isCard = true, page, children } ) => { let className = 'ppcp-r-container'; diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js index 195e3a089..712b17f86 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js @@ -1,16 +1,14 @@ -import Container, { - PAGE_ONBOARDING, -} from '../../ReusableComponents/Container.js'; -import StepWelcome from './StepWelcome.js'; -import StepBusiness from './StepBusiness.js'; -import StepProducts from './StepProducts.js'; +import Container from '../../ReusableComponents/Container'; +import StepWelcome from './StepWelcome'; +import StepBusiness from './StepBusiness'; +import StepProducts from './StepProducts'; import { useOnboardingStep } from '../../../data'; const Onboarding = () => { const { step, setStep, setCompleted } = useOnboardingStep(); return ( - +
Date: Thu, 31 Oct 2024 15:03:25 +0100 Subject: [PATCH 49/54] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20Add=20conditional?= =?UTF-8?q?=20routing=20to=20onboarding=20steps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/Components/Screens/Onboarding/Onboarding.js | 11 +++++------ .../Screens/Onboarding/availableSteps.js | 14 ++++++++++++++ .../resources/js/data/onboarding/hooks.js | 11 +++++++++-- 3 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js index 712b17f86..212776a0a 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js @@ -1,11 +1,9 @@ import Container from '../../ReusableComponents/Container'; -import StepWelcome from './StepWelcome'; -import StepBusiness from './StepBusiness'; -import StepProducts from './StepProducts'; import { useOnboardingStep } from '../../../data'; +import { getSteps } from './availableSteps'; const Onboarding = () => { - const { step, setStep, setCompleted } = useOnboardingStep(); + const { step, setStep, setCompleted, flags } = useOnboardingStep(); return ( @@ -14,14 +12,15 @@ const Onboarding = () => { currentStep={ step } setStep={ setStep } setCompleted={ setCompleted } + flags={ flags } />
); }; -const OnboardingStep = ( { currentStep, setStep, setCompleted } ) => { - const stepperOrder = [ StepWelcome, StepBusiness, StepProducts ]; +const OnboardingStep = ( { currentStep, setStep, setCompleted, flags } ) => { + const stepperOrder = getSteps( flags ); const isValidStep = ( step ) => typeof step === 'number' && diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js new file mode 100644 index 000000000..dbb25f57e --- /dev/null +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js @@ -0,0 +1,14 @@ +import StepWelcome from './StepWelcome'; +import StepBusiness from './StepBusiness'; +import StepProducts from './StepProducts'; + +export const getSteps = ( flags ) => { + console.log( 'Step Flags:', flags ); + const allSteps = [ StepWelcome, StepBusiness, StepProducts ]; + + if ( ! flags.canUseCasualSelling ) { + return allSteps.filter( ( step ) => step !== StepBusiness ); + } + + return allSteps; +}; diff --git a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js index 9481e047d..e21cc5016 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js @@ -1,5 +1,6 @@ import { useSelect, useDispatch } from '@wordpress/data'; import { PRODUCT_TYPES, STORE_NAME } from '../constants'; +import { getFlags } from './selectors'; const useOnboardingDetails = () => { const { @@ -23,6 +24,11 @@ const useOnboardingDetails = () => { return select( STORE_NAME ).getTransientData().isReady; } ); + // Read-only flags. + const flags = useSelect( ( select ) => { + return select( STORE_NAME ).getFlags(); + } ); + // Persistent accessors. const step = useSelect( ( select ) => { return select( STORE_NAME ).getPersistentData().step || 0; @@ -91,6 +97,7 @@ const useOnboardingDetails = () => { setDetailAndPersist( setIsCasualSeller, value ), products, toggleProduct, + flags, }; }; @@ -133,8 +140,8 @@ export const useOnboardingStepProducts = () => { }; export const useOnboardingStep = () => { - const { isReady, step, setStep, completed, setCompleted } = + const { isReady, step, setStep, completed, setCompleted, flags } = useOnboardingDetails(); - return { isReady, step, setStep, completed, setCompleted }; + return { isReady, step, setStep, completed, setCompleted, flags }; }; From 05657b8b27d7996c7cc179ef9c54ff0eae42e070 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Thu, 31 Oct 2024 15:11:36 +0100 Subject: [PATCH 50/54] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20Onboardin?= =?UTF-8?q?g=20component=20and=20step=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Screens/Onboarding/Onboarding.js | 43 ++++++++----------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js index 212776a0a..20c18fc33 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js @@ -2,44 +2,35 @@ import Container from '../../ReusableComponents/Container'; import { useOnboardingStep } from '../../../data'; import { getSteps } from './availableSteps'; +const getCurrentStep = ( requestedStep, steps ) => { + const isValidStep = ( step ) => + typeof step === 'number' && + Number.isInteger( step ) && + step >= 0 && + step < steps.length; + + const safeCurrentStep = isValidStep( requestedStep ) ? requestedStep : 0; + return steps[ safeCurrentStep ]; +}; + const Onboarding = () => { const { step, setStep, setCompleted, flags } = useOnboardingStep(); + const steps = getSteps( flags ); + + const CurrentStepComponent = getCurrentStep( step, steps ); return (
-
); }; -const OnboardingStep = ( { currentStep, setStep, setCompleted, flags } ) => { - const stepperOrder = getSteps( flags ); - - const isValidStep = ( step ) => - typeof step === 'number' && - Number.isInteger( step ) && - step >= 0 && - step < stepperOrder.length; - - const safeCurrentStep = isValidStep( currentStep ) ? currentStep : 0; - - const CurrentStepComponent = stepperOrder[ safeCurrentStep ]; - - return ( - - ); -}; - export default Onboarding; From 654b2e40e99456686be869ba7929642542e95121 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Thu, 31 Oct 2024 16:17:15 +0100 Subject: [PATCH 51/54] =?UTF-8?q?=E2=9C=A8=20Add=20casual=20selling=20elig?= =?UTF-8?q?ibility=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/services.php | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/modules/ppcp-settings/services.php b/modules/ppcp-settings/services.php index f34257f79..3620957f9 100644 --- a/modules/ppcp-settings/services.php +++ b/modules/ppcp-settings/services.php @@ -14,7 +14,7 @@ use WooCommerce\PayPalCommerce\Settings\Endpoint\OnboardingRestEndpoint; use WooCommerce\PayPalCommerce\Settings\Data\OnboardingProfile; return array( - 'settings.url' => static function ( ContainerInterface $container ) : string { + 'settings.url' => static function ( ContainerInterface $container ) : string { /** * The path cannot be false. * @@ -25,12 +25,13 @@ return array( dirname( realpath( __FILE__ ), 3 ) . '/woocommerce-paypal-payments.php' ); }, - 'settings.data.onboarding' => static function ( ContainerInterface $container ) : OnboardingProfile { - $can_use_casual_selling = false; + 'settings.data.onboarding' => static function ( ContainerInterface $container ) : OnboardingProfile { + $can_use_casual_selling = $container->get( 'settings.casual-selling.eligible' ); $can_use_vaulting = $container->has( 'save-payment-methods.eligible' ) && $container->get( 'save-payment-methods.eligible' ); $can_use_card_payments = $container->has( 'card-fields.eligible' ) && $container->get( 'card-fields.eligible' ); // Card payments are disabled for this plugin when WooPayments is active. + // TODO: Move this condition to the card-fields.eligible service? if ( class_exists( '\WC_Payments' ) ) { $can_use_card_payments = false; } @@ -41,7 +42,26 @@ return array( $can_use_card_payments ); }, - 'settings.rest.onboarding' => static function ( ContainerInterface $container ) : OnboardingRestEndpoint { + 'settings.rest.onboarding' => static function ( ContainerInterface $container ) : OnboardingRestEndpoint { return new OnboardingRestEndpoint( $container->get( 'settings.data.onboarding' ) ); }, + 'settings.casual-selling.supported-countries' => static function ( ContainerInterface $container ) : array { + // TODO: This is a dummy list, while we wait for the official eligibility list. + + return array( + 'US', + 'CA', + 'DE', + 'ES', + 'AT', + 'CH', + 'NL', + ); + }, + 'settings.casual-selling.eligible' => static function ( ContainerInterface $container ) : bool { + $country = $container->get( 'api.shop.country' ); + $eligible_countries = $container->get( 'settings.casual-selling.supported-countries' ); + + return in_array( $country, $eligible_countries, true ); + }, ); From a881838cf44eca7ec2848513c6519afec98572b2 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Thu, 31 Oct 2024 16:22:07 +0100 Subject: [PATCH 52/54] =?UTF-8?q?=F0=9F=94=87=20Remove=20console.log=20fro?= =?UTF-8?q?m=20getSteps=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/js/Components/Screens/Onboarding/availableSteps.js | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js index dbb25f57e..32034ec57 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js @@ -3,7 +3,6 @@ import StepBusiness from './StepBusiness'; import StepProducts from './StepProducts'; export const getSteps = ( flags ) => { - console.log( 'Step Flags:', flags ); const allSteps = [ StepWelcome, StepBusiness, StepProducts ]; if ( ! flags.canUseCasualSelling ) { From 0b9fd40d3a5b7cfdea941fa63a6f4a3d06053566 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Thu, 31 Oct 2024 17:49:15 +0100 Subject: [PATCH 53/54] Fix phpcs --- modules/ppcp-settings/services.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/ppcp-settings/services.php b/modules/ppcp-settings/services.php index 6794fb60c..692e4a8f4 100644 --- a/modules/ppcp-settings/services.php +++ b/modules/ppcp-settings/services.php @@ -46,9 +46,9 @@ return array( 'settings.rest.onboarding' => static function ( ContainerInterface $container ) : OnboardingRestEndpoint { return new OnboardingRestEndpoint( $container->get( 'settings.data.onboarding' ) ); }, - 'settings.rest.connect_manual' => static function ( ContainerInterface $container ) : ConnectManualRestEndpoint { + 'settings.rest.connect_manual' => static function ( ContainerInterface $container ) : ConnectManualRestEndpoint { return new ConnectManualRestEndpoint(); - }, + }, 'settings.casual-selling.supported-countries' => static function ( ContainerInterface $container ) : array { // TODO: This is a dummy list, while we wait for the official eligibility list. From 836badd48c07aa0f30881641fff2e10ce0873386 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Mon, 4 Nov 2024 11:29:21 +0100 Subject: [PATCH 54/54] Fix settings ui merge conflict --- .../resources/js/Components/Screens/Onboarding/StepWelcome.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js index 734caf0da..2f51f605a 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/StepWelcome.js @@ -85,8 +85,7 @@ const WelcomeForm = ( { setCompleted } ) => { setClientId, clientSecret, setClientSecret, - } = - (); + } = useOnboardingStepWelcome(); const { connectManual } = useManualConnect();