diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..6e8dac2 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +resources/scripts/account* +resources/scripts/auth* +resources/scripts/site* \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..8772ccc --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,15 @@ +{ + "extends": [ "plugin:@wordpress/eslint-plugin/recommended" ], + "globals" : { + "App": "readonly", + "AuthData": "readonly", + "localStorage": "readonly", + "window": "readonly", + "location": "readonly" + }, + "settings": { + "react": { + "version": "18.3.1" + } + } +} \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/deploy-to-main.yml similarity index 97% rename from .github/workflows/ci.yml rename to .github/workflows/deploy-to-main.yml index e780b86..9cebff8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/deploy-to-main.yml @@ -1,4 +1,4 @@ -name: Build application +name: Build & Deploy to main on: push: @@ -6,7 +6,7 @@ on: jobs: web-deploy: - name: 🎉 Deploy to Mody Cloud + name: 🎉 Deploy to Mody Cloud - Main branch runs-on: ubuntu-latest steps: - name: 🚚 Get latest code diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..6b3949e --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,71 @@ +name: Verify Coding Standards + +on: + pull_request: + branches: + - main + - dev + +jobs: + web-deploy: + name: 🎉 Verify Coding Standards + runs-on: ubuntu-latest + steps: + - name: 🚚 Get latest code + uses: actions/checkout@v3 + + - name: ACF Auth + run: | + cp sample-auth.json auth.json + sed -i 's|"ENTER YOUR LICENSE KEY"|"${{ secrets.ACF_AUTH }}"|g' auth.json + sed -i 's|"ENTER YOUR WEBSITE URL"|"${{ vars.SITE_URL }}"|g' auth.json + cat auth.json + + - name: Cache Vendor + id: app-lint-cache-vendor + uses: actions/cache@v3 + env: + cache-name: app-lint-cache-vendor + with: + path: vendor + key: app-vendor-${{ runner.os }}-${{ hashFiles('composer.lock') }} + restore-keys: | + app-lint-cache-vendor-${{ runner.os }}- + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Cache Node Modules + id: app-lint-cache-node_modules + uses: actions/cache@v3 + env: + cache-name: app-lint-cache-node_modules + with: + path: node_modules + key: app-lint-cache-node_modules-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} + restore-keys: | + app-lint-cache-node_modules-${{ runner.os }}- + + - name: Composer Install + run: composer install + if: steps.app-lint-cache-vendor.outputs.cache-hit != 'true' + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: nvm use ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'pnpm' + + - name: pnpm install + run: pnpm install + if: steps.app-lint-cache-node_modules.outputs.cache-hit != 'true' + + - name: lint + run: pnpm lint \ No newline at end of file diff --git a/.gitignore b/.gitignore index d43d2c5..2d557cd 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ web/content/uploads/* !web/content/uploads/.gitkeep web/content/cache/* web/content/themes/cloud/dist +web/content/themes/cloud/blocks # WordPress web/wp diff --git a/.stylelint.config.js b/.stylelint.config.js new file mode 100644 index 0000000..3a36572 --- /dev/null +++ b/.stylelint.config.js @@ -0,0 +1,9 @@ +/** @type {import('stylelint').Config} */ +export default { + extends: "@wordpress/stylelint-config/scss", + rules: { + "unit-allowed-list": { + "line-height": ["px", "em", "rem", "unitless"] + } + } +}; \ No newline at end of file diff --git a/app/App.php b/app/App.php index 8a536f7..b3633c4 100644 --- a/app/App.php +++ b/app/App.php @@ -6,15 +6,17 @@ class App { - public static function start() : void { + public static function start(): void + { self::loader(Config::get('APP_PATH') . '/Hooks/*.php', 'App\\Hooks\\'); } - public static function loader(string $path, string $namespace = 'App\\') : void { - foreach(glob($path) as $config_file) { + public static function loader(string $path, string $namespace = 'App\\'): void + { + foreach (glob($path) as $config_file) { $class_name = $namespace; $class_name .= basename($config_file, '.php'); - if(method_exists($class_name, 'init')) { + if (method_exists($class_name, 'init')) { $class_name::init(); } } diff --git a/app/Features/Auth.php b/app/Features/Auth.php new file mode 100644 index 0000000..ef60d69 --- /dev/null +++ b/app/Features/Auth.php @@ -0,0 +1,5 @@ + $recaptcha_secret, 'response' => $recaptcha_token, - ), 'https://www.google.com/recaptcha/api/siteverify')); + ], 'https://www.google.com/recaptcha/api/siteverify')); $body = wp_remote_retrieve_body($response); $result = json_decode($body); if (!$result->success || $result->score < 0.5) { wp_send_json_error( - array( + [ 'success' => false, 'message' => __('Incorrect email or password.', APP_THEME_LOCALE), 'result' => $result, - ), - 400 + ], + 400, ); } } } -} \ No newline at end of file +} diff --git a/app/Hooks/Account.php b/app/Hooks/Account.php index e761687..e57ef18 100644 --- a/app/Hooks/Account.php +++ b/app/Hooks/Account.php @@ -6,13 +6,21 @@ use App\Hooks\Account\Block; use App\Hooks\Account\Service; use App\Hooks\Account\Routes; -use App\Hooks\Account\Scripts; use App\Hooks\User\Service as UserService; -class Account { - public static function init() : void { +class Account +{ + public const LAST_UPDATE = 'Hipe|Po|Sonya|Simple'; + public const ACCOUNT_PAGE_CONTENT = << +

Example – hello from the saved content!

+ +EOF; + + public static function init(): void + { + add_action('init', self::wp_init(...)); add_action('init', Routes::wp_init(...)); - add_action('wp_enqueue_scripts', Scripts::wp_enqueue_scripts(...), 100); add_action('rest_api_init', Api::register_rest_route(...)); add_action('rest_prepare_user', Service::rest_prepare_user(...), 10, 3); add_action('delete_user', UserService::delete_user(...), 10, 3); @@ -20,4 +28,37 @@ public static function init() : void { add_filter('query_vars', Routes::query_vars(...)); add_filter('app_before_render_block_profile', Block::app_before_render_block(...)); } -} \ No newline at end of file + + public static function wp_init(): void + { + $account_page_id = get_option('account_page_id'); + $account_module_last_update = get_option('account_option_last_update'); + if (! $account_page_id || $account_module_last_update !== self::LAST_UPDATE) { + if (!$account_page_id) { + $account_page_id = wp_insert_post([ + 'post_type' => 'page', + 'post_title' => __('Account', APP_THEME_LOCALE), + 'post_status' => 'publish', + 'post_author' => 1, + 'post_name' => 'account', + 'post_content' => self::ACCOUNT_PAGE_CONTENT, + ]); + } + + wp_update_post([ + 'ID' => $account_page_id, + 'post_content' => self::ACCOUNT_PAGE_CONTENT, + ]); + + $main_cta = [ + 'route' => '/invoices/new', + 'title' => __('New invoice', 'app'), + ]; + + update_post_meta($account_page_id, 'main_cta', $main_cta); + + update_option('account_option_last_update', self::LAST_UPDATE); + update_option('account_page_id', $account_page_id); + } + } +} diff --git a/app/Hooks/Account/Api.php b/app/Hooks/Account/Api.php index 011e532..04cec4d 100644 --- a/app/Hooks/Account/Api.php +++ b/app/Hooks/Account/Api.php @@ -3,45 +3,52 @@ namespace App\Hooks\Account; use Roots\WPConfig\Config; + use function Env\env; -class Api { - public static function register_rest_route(): void { - register_rest_route('app/v1', '/update-account/', array( +class Api +{ + public static function register_rest_route(): void + { + register_rest_route('app/v1', '/update-account/', [ 'methods' => \WP_REST_Server::CREATABLE, 'callback' => self::update_account_data(...), 'permission_callback' => function () { return is_user_logged_in(); - } - )); - register_rest_route('app/v1', '/update-account-settings/', array( + }, + ]); + register_rest_route('app/v1', '/update-account-settings/', [ 'methods' => \WP_REST_Server::CREATABLE, 'callback' => self::update_account_settings(...), 'permission_callback' => function () { return is_user_logged_in(); - } - )); - register_rest_route('app/v1', '/update-account-password/', array( + }, + ]); + register_rest_route('app/v1', '/update-account-password/', [ 'methods' => \WP_REST_Server::CREATABLE, 'callback' => self::update_account_password(...), 'permission_callback' => function () { return is_user_logged_in(); - } - )); - register_rest_route('app/v1', '/update-main-account-password/', array( + }, + ]); + register_rest_route('app/v1', '/update-main-account-password/', [ 'methods' => \WP_REST_Server::CREATABLE, 'callback' => self::update_main_account_password(...), 'permission_callback' => self::check_child_site_permission(...), - )); + ]); } - public static function update_account_data($data): \WP_Error|\WP_REST_Response|\WP_HTTP_Response { + public static function update_account_data($data): \WP_Error|\WP_REST_Response|\WP_HTTP_Response + { $user_id = get_current_user_id(); $data_user_id = (int) $data['user_id']; if (!$user_id || $user_id !== $data_user_id) { - return new \WP_Error('unauthorized', 'You are not authorized to perform this action', - array('status' => 401)); + return new \WP_Error( + 'unauthorized', + 'You are not authorized to perform this action', + ['status' => 401], + ); } $email = isset($data['email']) ? sanitize_email($data['email']) : false; @@ -50,41 +57,45 @@ public static function update_account_data($data): \WP_Error|\WP_REST_Response|\ $phone = isset($data['phone']) ? sanitize_text_field($data['phone']) : ''; if (!$email) { - return rest_ensure_response(array( + return rest_ensure_response([ 'success' => false, 'message' => __('Email address is required.', APP_THEME_LOCALE), - )); + ]); } if (!$name || !$last_name) { - return rest_ensure_response(array( + return rest_ensure_response([ 'success' => false, 'message' => __('Name and last name are required.', APP_THEME_LOCALE), - )); + ]); } - wp_update_user(array( + wp_update_user([ 'ID' => $user_id, 'user_email' => $email, 'first_name' => $name, 'last_name' => $last_name, - )); + ]); update_user_meta($user_id, 'phone', $phone); - return rest_ensure_response(array( + return rest_ensure_response([ 'success' => true, 'message' => __('User data updated successfully.', APP_THEME_LOCALE), - )); + ]); } - public static function update_account_settings($data): \WP_Error|\WP_REST_Response|\WP_HTTP_Response { + public static function update_account_settings($data): \WP_Error|\WP_REST_Response|\WP_HTTP_Response + { $user_id = get_current_user_id(); $data_user_id = (int) $data['user_id']; if (!$user_id || $user_id !== $data_user_id) { - return new \WP_Error('unauthorized', 'You are not authorized to perform this action.', - array('status' => 401)); + return new \WP_Error( + 'unauthorized', + 'You are not authorized to perform this action.', + ['status' => 401], + ); } $opt_in_updates = isset($data['opt_in_updates']) ? (int) $data['opt_in_updates'] : 1; @@ -100,19 +111,23 @@ public static function update_account_settings($data): \WP_Error|\WP_REST_Respon update_user_meta($user_id, 'opt_in_commercial', $opt_in_commercial); update_user_meta($user_id, 'preferred_language', $preferred_language); - return rest_ensure_response(array( + return rest_ensure_response([ 'success' => true, 'message' => __('User settings updated successfully.', APP_THEME_LOCALE), - )); + ]); } - public static function update_account_password($data): \WP_Error|\WP_REST_Response|\WP_HTTP_Response { + public static function update_account_password($data): \WP_Error|\WP_REST_Response|\WP_HTTP_Response + { $user_id = get_current_user_id(); $data_user_id = (int) $data['user_id']; if (!$user_id || $user_id !== $data_user_id) { - return new \WP_Error('unauthorized', 'You are not authorized to perform this action.', - array('status' => 401)); + return new \WP_Error( + 'unauthorized', + 'You are not authorized to perform this action.', + ['status' => 401], + ); } $current_password = $data['current_password'] ?? false; @@ -120,35 +135,37 @@ public static function update_account_password($data): \WP_Error|\WP_REST_Respon $confirm_new_password = $data['confirm_new_password'] ? trim($data['confirm_new_password']) : false; if (!$current_password || !$new_password || !$confirm_new_password) { - return rest_ensure_response(array( + return rest_ensure_response([ 'success' => false, - 'message' => __('All passwords are required., APP_THEME_LOCALE') - )); + 'message' => __('All passwords are required., APP_THEME_LOCALE'), + ]); } $user = get_user($user_id); $stored_password_hash = $user->user_pass; if (!wp_check_password($current_password, $stored_password_hash, $user_id)) { - return rest_ensure_response(array( + return rest_ensure_response([ 'success' => false, 'message' => __('Current password does not match with stored password.', APP_THEME_LOCALE), - )); + ]); } if ($new_password !== $confirm_new_password) { - return rest_ensure_response(array( + return rest_ensure_response([ 'success' => false, - 'message' => __('New password should match to password confirmation field., APP_THEME_LOCALE') - )); + 'message' => __('New password should match to password confirmation field., APP_THEME_LOCALE'), + ]); } if (!app_is_secure_password($new_password)) { - return rest_ensure_response(array( + return rest_ensure_response([ 'success' => false, - 'message' => __('Password must be at least 8 characters long, contain at least one uppercase letter, and one special character.', - APP_THEME_LOCALE), - )); + 'message' => __( + 'Password must be at least 8 characters long, contain at least one uppercase letter, and one special character.', + APP_THEME_LOCALE, + ), + ]); } global $wpdb; @@ -156,51 +173,53 @@ public static function update_account_password($data): \WP_Error|\WP_REST_Respon $old_user_data = get_userdata($user_id); $hash = wp_hash_password($new_password); - $wpdb->update($wpdb->users, array( - 'user_pass' => $hash, - 'user_activation_key' => '', - ), array('ID' => $user_id)); + $wpdb->update($wpdb->users, [ + 'user_pass' => $hash, + 'user_activation_key' => '', + ], ['ID' => $user_id]); clean_user_cache($user_id); wp_set_auth_cookie($user_id); do_action('wp_set_password', $new_password, $user_id, $old_user_data); - return rest_ensure_response(array( + return rest_ensure_response([ 'success' => true, 'message' => __('Password updated successfully.', APP_THEME_LOCALE), - )); + ]); } - public static function update_main_account_password(\WP_REST_Request $request): \WP_REST_Response { + public static function update_main_account_password(\WP_REST_Request $request): \WP_REST_Response + { $email = $request->get_param('email'); $hashed_password = $request->get_param('password'); $user = get_user_by('email', $email); - if(!$user) { - return rest_ensure_response(array( + if (!$user) { + return rest_ensure_response([ 'success' => false, - )); + ]); } $user_id = $user->ID; global $wpdb; $wpdb->update( $wpdb->users, - array( + [ 'user_pass' => $hashed_password, - ), - array( + ], + [ 'ID' => $user_id, - ) + ], ); - return rest_ensure_response(array( + return rest_ensure_response([ 'email' => $email, 'password' => $hashed_password, - )); + ]); } - public static function check_child_site_permission(\WP_REST_Request $request): bool { + public static function check_child_site_permission(\WP_REST_Request $request): bool + { if (Config::get('CHILD_SITE')) { return false; } @@ -218,4 +237,4 @@ public static function check_child_site_permission(\WP_REST_Request $request): b app_log("update-main-account-password: $token $valid_token"); return $token === $valid_token; } -} \ No newline at end of file +} diff --git a/app/Hooks/Account/Block.php b/app/Hooks/Account/Block.php index 7467998..f8b8326 100644 --- a/app/Hooks/Account/Block.php +++ b/app/Hooks/Account/Block.php @@ -2,17 +2,19 @@ namespace App\Hooks\Account; -class Block { - public static function app_before_render_block(array $context) : array { - $context['routes'] = array( +class Block +{ + public static function app_before_render_block(array $context): array + { + $context['routes'] = [ 'basic' => __('Basic info', APP_THEME_LOCALE), 'profile' => __('Profile info', APP_THEME_LOCALE), 'settings' => __('Account settings', APP_THEME_LOCALE), 'preferences' => __('Preferences', APP_THEME_LOCALE), 'extend' => __('Extend', APP_THEME_LOCALE), 'security' => __('Security', APP_THEME_LOCALE), - ); + ]; return $context; } -} \ No newline at end of file +} diff --git a/app/Hooks/Account/Cron.php b/app/Hooks/Account/Cron.php index 73f9849..d6a9aba 100644 --- a/app/Hooks/Account/Cron.php +++ b/app/Hooks/Account/Cron.php @@ -2,11 +2,7 @@ namespace App\Hooks\Account; -use Roots\WPConfig\Config; -use function Env\env; - -class Cron { - public static function sync_password(): void { - - } -} \ No newline at end of file +class Cron +{ + public static function sync_password(): void {} +} diff --git a/app/Hooks/Account/Password.php b/app/Hooks/Account/Password.php index b66a5af..e19ae76 100644 --- a/app/Hooks/Account/Password.php +++ b/app/Hooks/Account/Password.php @@ -3,16 +3,20 @@ namespace App\Hooks\Account; use Roots\WPConfig\Config; + use function Env\env; -class Password { - public static function wp_set_password(string $password, int $user_id) : void { - if(Config::get('CHILD_SITE')) { +class Password +{ + public static function wp_set_password(string $password, int $user_id): void + { + if (Config::get('CHILD_SITE')) { self::propagate_passwd_from_child($password, $user_id); } } - public static function propagate_passwd_from_child(string $password, int $user_id) : void { + public static function propagate_passwd_from_child(string $password, int $user_id): void + { $user = get_user($user_id); $response = wp_remote_post(env('APP_MAIN_SITE') . '/wp-json/app/v1/update-main-account-password/', [ 'body' => json_encode([ @@ -24,7 +28,7 @@ public static function propagate_passwd_from_child(string $password, int $user_i 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . env('APP_CHILD_SITES_TOKEN'), ], - 'sslverify' => env('WP_ENV') === 'production' + 'sslverify' => env('WP_ENV') === 'production', ]); if (is_wp_error($response)) { @@ -35,7 +39,5 @@ public static function propagate_passwd_from_child(string $password, int $user_i } } - public static function propagate_passwd_from_main(string $password, int $user_id) : void { - - } -} \ No newline at end of file + public static function propagate_passwd_from_main(string $password, int $user_id): void {} +} diff --git a/app/Hooks/Account/Routes.php b/app/Hooks/Account/Routes.php index 77bfe7c..184ee96 100644 --- a/app/Hooks/Account/Routes.php +++ b/app/Hooks/Account/Routes.php @@ -2,12 +2,14 @@ namespace App\Hooks\Account; -class Routes { - public static function wp_init(): void { +class Routes +{ + public static function wp_init(): void + { add_rewrite_rule( 'account/([^/]+)/?$', 'index.php?pagename=account&account_page=$matches[1]', - 'top' + 'top', ); $login_page = basename($_SERVER['PHP_SELF']); @@ -19,8 +21,9 @@ public static function wp_init(): void { } } - public static function query_vars(array $vars): array { + public static function query_vars(array $vars): array + { $vars[] = 'account_page'; return $vars; } -} \ No newline at end of file +} diff --git a/app/Hooks/Account/Scripts.php b/app/Hooks/Account/Scripts.php deleted file mode 100644 index c9129e3..0000000 --- a/app/Hooks/Account/Scripts.php +++ /dev/null @@ -1,23 +0,0 @@ - true, 'type' => 'module'] - ); - } -} \ No newline at end of file diff --git a/app/Hooks/Account/Service.php b/app/Hooks/Account/Service.php index cc80afc..ec0e20d 100644 --- a/app/Hooks/Account/Service.php +++ b/app/Hooks/Account/Service.php @@ -2,25 +2,26 @@ namespace App\Hooks\Account; -class Service { +class Service +{ public static function rest_prepare_user( $response, $user, - $request + $request, ) { $user_id = $user->ID; $preferred_language = get_user_meta($user_id, 'preferred_language', true); - $response->data = array_merge($response->data, array( + $response->data = array_merge($response->data, [ 'id' => $user_id, 'email' => $user->user_email, 'name' => $user->user_firstname, 'last_name' => $user->user_lastname, 'phone' => get_user_meta($user_id, 'phone', true), - 'opt_in_updates' => (int)get_user_meta($user_id, 'opt_in_updates', true), - 'opt_in_commercial' => (int)get_user_meta($user_id, 'opt_in_commercial', true), + 'opt_in_updates' => (int) get_user_meta($user_id, 'opt_in_updates', true), + 'opt_in_commercial' => (int) get_user_meta($user_id, 'opt_in_commercial', true), 'preferred_language' => $preferred_language ?? get_locale(), - )); + ]); return $response; } -} \ No newline at end of file +} diff --git a/app/Hooks/Acf.php b/app/Hooks/Acf.php index feb06f8..6f58586 100644 --- a/app/Hooks/Acf.php +++ b/app/Hooks/Acf.php @@ -2,15 +2,18 @@ namespace App\Hooks; -class Acf { - public static function init() : void { +class Acf +{ + public static function init(): void + { add_filter('acf/prepare_field/name=queue_info', self::acf_prepare_field(...)); add_filter('acf/prepare_field/name=queue_type', self::acf_prepare_field(...)); } - public static function acf_prepare_field(array $field) : array { + public static function acf_prepare_field(array $field): array + { $field['readonly'] = true; $field['disabled'] = $field['_name'] === 'queue_type'; return $field; } -} \ No newline at end of file +} diff --git a/app/Hooks/Auth.php b/app/Hooks/Auth.php index 465a1ee..e38807c 100644 --- a/app/Hooks/Auth.php +++ b/app/Hooks/Auth.php @@ -7,15 +7,27 @@ use App\Hooks\Auth\Block; use App\Hooks\Auth\Logout; use App\Hooks\Auth\Routes; -use App\Hooks\Auth\Scripts; -class Auth { - public static function init(): void { +class Auth +{ + public const LAST_UPDATE = 'Hipe|Tinky|Sonya|Simple'; + public const AUTH_PAGE_CONTENT = << +
+ + + +

Auth Module for Mody Cloud

+ +EOF; + + public static function init(): void + { + add_action('init', self::wp_init(...)); add_action('init', Routes::wp_init(...)); add_action('admin_init', Routes::admin_init(...)); add_action('template_redirect', Routes::template_redirect(...)); add_action('wp_set_password', Password::wp_set_password(...), 10, 2); - add_action('wp_enqueue_scripts', Scripts::wp_enqueue_scripts(...)); add_action('wp_ajax_nopriv_sign_in', Ajax::sign_in(...)); add_action('wp_ajax_nopriv_sign_up', Ajax::sign_up(...)); add_action('wp_ajax_nopriv_forgot_password', Ajax::forgot_password(...)); @@ -29,5 +41,32 @@ public static function init(): void { add_filter('lostpassword_url', Routes::lostpassword_url(...), 10, 3); add_filter('app_before_render_block_auth', Block::app_before_render_block(...)); + add_filter('render_block', Block::app_render_block(...), 10, 3); + } + + public static function wp_init(): void + { + $authentication_page_id = get_option('authentication_page_id'); + $auth_module_last_update = get_option('auth_option_last_update'); + if (! $authentication_page_id || $auth_module_last_update !== self::LAST_UPDATE) { + if (!$authentication_page_id) { + $authentication_page_id = wp_insert_post([ + 'post_type' => 'page', + 'post_title' => __('Auth', APP_THEME_LOCALE), + 'post_status' => 'publish', + 'post_author' => 1, + 'post_name' => 'auth', + 'post_content' => self::AUTH_PAGE_CONTENT, + ]); + } + + wp_update_post([ + 'ID' => $authentication_page_id, + 'post_content' => self::AUTH_PAGE_CONTENT, + ]); + + update_option('auth_option_last_update', self::LAST_UPDATE); + update_option('authentication_page_id', $authentication_page_id); + } } -} \ No newline at end of file +} diff --git a/app/Hooks/Auth/Ajax.php b/app/Hooks/Auth/Ajax.php index d3fae59..fb3218a 100644 --- a/app/Hooks/Auth/Ajax.php +++ b/app/Hooks/Auth/Ajax.php @@ -3,17 +3,15 @@ namespace App\Hooks\Auth; use App\Features\Recaptcha; -use App\Hooks\Queue\Post; -use Ramsey\Uuid\Uuid; -use Roots\WPConfig\Config; use Timber\Timber; -use function Env\env; -class Ajax { +class Ajax +{ use Recaptcha; - public static function sign_in(): void { + public static function sign_in(): void + { if (!defined('DOING_AJAX') || !DOING_AJAX) { - wp_send_json_error(array('message' => __('Invalid request.', APP_THEME_LOCALE))); + wp_send_json_error(['message' => __('Invalid request.', APP_THEME_LOCALE)]); } self::validate_recaptcha(); @@ -23,40 +21,40 @@ public static function sign_in(): void { $remember_me = !!$_POST['remember_me']; if (empty($email) || empty($password)) { - wp_send_json_error(array('message' => __('Email and password are required.', APP_THEME_LOCALE))); + wp_send_json_error(['message' => __('Email and password are required.', APP_THEME_LOCALE)]); } $userdata = get_user_by('email', $email); if (!$userdata) { - wp_send_json_error(array('message' => __('Incorrect email or password.', APP_THEME_LOCALE))); + wp_send_json_error(['message' => __('Incorrect email or password.', APP_THEME_LOCALE)]); } if ($userdata) { $user_is_active = get_user_meta($userdata->ID, '_user_is_active', true); if (!$user_is_active) { - wp_send_json_error(array( + wp_send_json_error([ 'message' => sprintf( __(implode('
', [ 'Your account is not yet active, please check your email.', - 'Haven\'t get an email, Reset your password to get one' + 'Haven\'t get an email, Reset your password to get one', ])), add_query_arg([ 'email' => urlencode($email), - ], wp_lostpassword_url()) - ) - )); + ], wp_lostpassword_url()), + ), + ]); } $lockout_time = get_user_meta($userdata->ID, '_failed_login_lockout', true); if ($lockout_time && $lockout_time > time()) { $remaining_time = $lockout_time - time(); - wp_send_json_error(array( + wp_send_json_error([ 'message' => sprintf( __('Account locked. Try again in %d minutes.', APP_THEME_LOCALE), - round($remaining_time / 60) - ) - )); + round($remaining_time / 60), + ), + ]); } } @@ -65,11 +63,11 @@ public static function sign_in(): void { $failed_attempts = 0; } - $user = wp_signon(array( + $user = wp_signon([ 'user_login' => $email, 'user_password' => $password, 'remember' => $remember_me, - )); + ]); if (is_wp_error($user)) { $failed_attempts++; @@ -77,14 +75,14 @@ public static function sign_in(): void { if ($failed_attempts >= 3) { update_user_meta($user->ID, '_failed_login_lockout', time() + (24 * 60 * 60)); - wp_send_json_error(array( - 'message' => __('Incorrect email or password.', APP_THEME_LOCALE) - )); + wp_send_json_error([ + 'message' => __('Incorrect email or password.', APP_THEME_LOCALE), + ]); } - wp_send_json_error(array( - 'message' => __('Incorrect email or password.', APP_THEME_LOCALE) - )); + wp_send_json_error([ + 'message' => __('Incorrect email or password.', APP_THEME_LOCALE), + ]); } update_user_meta($user->ID, '_failed_login_attempts', 0); @@ -93,14 +91,15 @@ public static function sign_in(): void { $initial_page = app_get_initial_page($user); - wp_send_json_success(array( + wp_send_json_success([ 'message' => sprintf(__('Login successful, welcome %s', APP_THEME_LOCALE), $userdata->first_name), 'initial_page' => $initial_page, 'user' => $user, - )); + ]); } - public static function sign_up(): void { + public static function sign_up(): void + { if (!isset($_POST['email'])) { wp_send_json_error([ 'message' => __('Invalid request.', APP_THEME_LOCALE), @@ -153,11 +152,11 @@ public static function sign_up(): void { $reset_pass_page .= 'reset-passwd'; } - $reset_url = add_query_arg(array( + $reset_url = add_query_arg([ 'key' => $reset_key, 'email' => urlencode($user->user_email), 'first_time' => 'true', - ), $reset_pass_page); + ], $reset_pass_page); $button = Timber::compile('@app/mail/button.twig', [ 'link' => $reset_url, @@ -169,13 +168,13 @@ public static function sign_up(): void { __('To complete your registration, please set your password using the link below:%s %s %s', APP_THEME_LOCALE), '

', $button, - '

' + '

', ); $message .= sprintf( __('If the button doesn\'t work, please copy the URL below in your browser: %s %s', APP_THEME_LOCALE), '

', - $reset_url + $reset_url, ); $headers = ['Content-Type: text/html; charset=UTF-8']; @@ -185,7 +184,7 @@ public static function sign_up(): void { global $wpdb; $wpdb->delete( $wpdb->usermeta, - array('user_id' => $user_id) + ['user_id' => $user_id], ); wp_delete_user($user_id); wp_send_json_error([ @@ -196,11 +195,12 @@ public static function sign_up(): void { wp_send_json_success([ 'message' => __('Registration successful! Please check your email to complete the process.', APP_THEME_LOCALE), 'uuid' => app_get_user_uuid($user_id), - 'callback' => 'hide_form' + 'callback' => 'hide_form', ]); } - public static function forgot_password(): void { + public static function forgot_password(): void + { if (!isset($_POST['email'])) { wp_send_json_error([ 'message' => __('Invalid request.', APP_THEME_LOCALE), @@ -255,13 +255,13 @@ public static function forgot_password(): void { __('Someone asked for a password reset on your account, click on the button below to set a new one:%s %s %s', APP_THEME_LOCALE), '

', $button, - '

' + '

', ); $message .= sprintf( __('If the button doesn\'t work, please copy the URL below in your browser: %s %s', APP_THEME_LOCALE), '

', - $reset_url + $reset_url, ); $headers = ['Content-Type: text/html; charset=UTF-8']; @@ -275,11 +275,12 @@ public static function forgot_password(): void { wp_send_json_success([ 'message' => sprintf(__('An email is coming to %s.', APP_THEME_LOCALE), $email), - 'callback' => 'hide_form' + 'callback' => 'hide_form', ]); } - public static function reset_password(): void { + public static function reset_password(): void + { if (empty($_POST['key']) || empty($_POST['email']) || empty($_POST['password'])) { wp_send_json_error([ 'message' => __('All fields are required.', APP_THEME_LOCALE), @@ -334,14 +335,16 @@ public static function reset_password(): void { ]); } - private static function _is_secure_password(string $password): bool { + private static function _is_secure_password(string $password): bool + { $pattern = '/^(?=.*[A-Z])(?=.*[\W])(?=.*[a-zA-Z0-9]).{8,}$/'; return preg_match($pattern, $password) === 1; } - private static function _authenticate_user($email, $password) : string { + private static function _authenticate_user($email, $password): string + { $user = wp_authenticate($email, $password); wp_set_auth_cookie($user->ID, true); return app_get_initial_page($user); } -} \ No newline at end of file +} diff --git a/app/Hooks/Auth/Block.php b/app/Hooks/Auth/Block.php index 6e65601..15f9afe 100644 --- a/app/Hooks/Auth/Block.php +++ b/app/Hooks/Auth/Block.php @@ -4,10 +4,15 @@ use Roots\WPConfig\Config; -class Block { - public static function app_before_render_block(array $context): array { +class Block +{ + public static function app_before_render_block(array $context): array + { + if (is_admin()) { + return $context; + } $action = get_query_var('action'); - if(empty($action)) { + if (empty($action)) { wp_redirect(wp_login_url()); exit; } @@ -20,7 +25,7 @@ public static function app_before_render_block(array $context): array { self::_maybe_populate_email($context['action'], $context); self::_maybe_populate_reset_passwd($context['action'], $context); - if(Config::get('CHILD_SITE')) { + if (Config::get('CHILD_SITE')) { wp_redirect(Config::get('APP_MAIN_SITE') . "/auth/{$context['action']}"); exit; } @@ -28,10 +33,37 @@ public static function app_before_render_block(array $context): array { return $context; } - private static function _maybe_sign_out($action) : void { - if($action === 'sign-out' && is_user_logged_in()) { + public static function app_render_block(string $block_content, array $block, \WP_Block $instance): string + { + if ($block['blockName'] != 'app/auth-v2' || is_admin()) { + return $block_content; + } + + $action = get_query_var('action'); + if (empty($action)) { + wp_redirect(wp_login_url()); + exit; + } + $allowed_actions = ['sign-in', 'sign-up', 'forgot-passwd', 'reset-passwd', 'sign-out']; + $action = in_array($action, $allowed_actions) ? $action : 'sign-in'; + + self::_maybe_sign_out($action); + self::_redirect_if_logged_in($action); + self::_maybe_auto_login($action); + + if (Config::get('CHILD_SITE')) { + wp_redirect(Config::get('APP_MAIN_SITE') . "/auth/{$action}"); + exit; + } + + return $block_content; + } + + private static function _maybe_sign_out($action): void + { + if ($action === 'sign-out' && is_user_logged_in()) { wp_logout(); - if(Config::get('CHILD_SITE')) { + if (Config::get('CHILD_SITE')) { wp_redirect(Config::get('APP_MAIN_SITE') . '/auth/sign-out'); } else { wp_redirect('/auth/sign-out'); @@ -40,8 +72,9 @@ private static function _maybe_sign_out($action) : void { } } - private static function _redirect_if_logged_in($action) : void { - if(in_array($action, array('sign-in', 'sign-up')) && is_user_logged_in()){ + private static function _redirect_if_logged_in($action): void + { + if (in_array($action, ['sign-in', 'sign-up']) && is_user_logged_in()) { $user = wp_get_current_user(); $initial_page = app_get_initial_page($user); wp_redirect($initial_page); @@ -49,21 +82,24 @@ private static function _redirect_if_logged_in($action) : void { } } - private static function _maybe_auto_login($action) : void { - if($action !== 'sign-in'){ return; } + private static function _maybe_auto_login($action): void + { + if ($action !== 'sign-in') { + return; + } $autologin_key = array_key_exists('autologin_key', $_GET) ? urldecode($_GET['autologin_key']) : null; $autologin_email = array_key_exists('email', $_GET) ? htmlentities(base64_decode($_GET['email'])) : null; - if((!$autologin_email && !$autologin_key)) { + if ((!$autologin_email && !$autologin_key)) { wp_redirect(Config::get('APP_MAIN_SITE')); exit; } $user = $autologin_email ? get_user_by('email', $autologin_email) : false; - if($user && $autologin_key) { - if(app_validate_autologin_token($user, $autologin_key)) { + if ($user && $autologin_key) { + if (app_validate_autologin_token($user, $autologin_key)) { wp_set_auth_cookie($user->ID); wp_redirect(app_get_initial_page($user)); exit; @@ -71,22 +107,24 @@ private static function _maybe_auto_login($action) : void { } } - private static function _maybe_populate_email($action, &$context) : void { - if($action === 'forgot-passwd') { + private static function _maybe_populate_email($action, &$context): void + { + if ($action === 'forgot-passwd') { $context['email'] = isset($_GET['email']) ? sanitize_text_field($_GET['email']) : null; } } - private static function _maybe_populate_reset_passwd($action, &$context) : void { + private static function _maybe_populate_reset_passwd($action, &$context): void + { if ($action === 'reset-passwd') { $context['key'] = isset($_GET['key']) ? sanitize_text_field($_GET['key']) : null; $context['email'] = isset($_GET['email']) ? sanitize_user($_GET['email']) : null; $context['first_time'] = isset($_GET['first_time']) ? 'yes' : null; - if(!$context['key'] && !$context['email']) { + if (!$context['key'] && !$context['email']) { wp_redirect(wp_lostpassword_url()); exit; } } } -} \ No newline at end of file +} diff --git a/app/Hooks/Auth/Cron.php b/app/Hooks/Auth/Cron.php index bbedd09..4c57f63 100644 --- a/app/Hooks/Auth/Cron.php +++ b/app/Hooks/Auth/Cron.php @@ -4,15 +4,17 @@ use Roots\WPConfig\Config; -class Cron { - public static function delete_expired_tokens() : void{ +class Cron +{ + public static function delete_expired_tokens(): void + { if (!is_dir(Config::get('MC_AUTOLOGIN_TOKENS_PATH'))) { return; } $tokens = glob(Config::get('MC_AUTOLOGIN_TOKENS_PATH') . '*.token'); - foreach($tokens as $token) { + foreach ($tokens as $token) { $last_modification_file = filemtime($token); $now = time(); @@ -21,4 +23,4 @@ public static function delete_expired_tokens() : void{ } } } -} \ No newline at end of file +} diff --git a/app/Hooks/Auth/Logout.php b/app/Hooks/Auth/Logout.php index 0f8d627..66b9f05 100644 --- a/app/Hooks/Auth/Logout.php +++ b/app/Hooks/Auth/Logout.php @@ -2,8 +2,7 @@ namespace App\Hooks\Auth; -use Roots\WPConfig\Config; - -class Logout { +class Logout +{ public static function wp_logout(int $user_id) {} -} \ No newline at end of file +} diff --git a/app/Hooks/Auth/Routes.php b/app/Hooks/Auth/Routes.php index 38f12c4..b4c8f83 100644 --- a/app/Hooks/Auth/Routes.php +++ b/app/Hooks/Auth/Routes.php @@ -3,10 +3,13 @@ namespace App\Hooks\Auth; use Roots\WPConfig\Config; + use function Env\env; -class Routes { - public static function wp_init(): void { +class Routes +{ + public static function wp_init(): void + { add_rewrite_rule('auth/([^/]+)/?$', 'index.php?pagename=auth&action=$matches[1]', 'top'); $login_page = basename($_SERVER['PHP_SELF']); @@ -18,7 +21,8 @@ public static function wp_init(): void { } } - public static function admin_init(): void { + public static function admin_init(): void + { if (env('WP_ENV') === 'local') { return; } @@ -40,7 +44,8 @@ public static function admin_init(): void { } } - public static function template_redirect(): void { + public static function template_redirect(): void + { if (is_category() || is_tag() || is_date() || is_author() || is_tax() || is_attachment()) { global $wp_query; $wp_query->set_404(); @@ -51,7 +56,8 @@ public static function template_redirect(): void { if (Config::get('CHILD_SITE')) { $is_allowed_page = app_is_page_allowed( $current_page_id, - ['invoices', 'print-invoice', 'account', 'auth']); + ['invoices', 'print-invoice', 'account', 'auth'], + ); if (!$is_allowed_page) { wp_redirect(home_url('/invoices')); @@ -65,35 +71,40 @@ public static function template_redirect(): void { wp_redirect(app_get_initial_page($current_user)); exit; } - } elseif(!is_user_logged_in() && !$is_allowed_page) { + } elseif (!is_user_logged_in() && !$is_allowed_page) { wp_redirect(wp_logout_url()); exit; } } } - public static function query_vars(array $vars): array { + public static function query_vars(array $vars): array + { $vars[] = 'action'; return $vars; } - public static function login_url(string $login, string $redirect, bool $force_re_auth): string { - $login_page = Config::get('APP_MAIN_SITE').'/auth/sign-in'; + public static function login_url(string $login, string $redirect, bool $force_re_auth): string + { + $login_page = Config::get('APP_MAIN_SITE') . '/auth/sign-in'; return $redirect ? add_query_arg('initial_page', $redirect, $login_page) : $login_page; } - public static function logout_url(string $logout_url, string $redirect): string { + public static function logout_url(string $logout_url, string $redirect): string + { $auth_page = get_option('authentication_page_id'); $page_permalink = get_permalink($auth_page); return trailingslashit("{$page_permalink}sign-out"); } - public static function register_url(string $register_url): string { - return trailingslashit(Config::get('APP_MAIN_SITE').'/auth/sign-up'); + public static function register_url(string $register_url): string + { + return trailingslashit(Config::get('APP_MAIN_SITE') . '/auth/sign-up'); } - public static function lostpassword_url(string $lostpassword_url, string $redirect): string { - $lostpassword_url = Config::get('APP_MAIN_SITE').'/auth/forgot-passwd'; + public static function lostpassword_url(string $lostpassword_url, string $redirect): string + { + $lostpassword_url = Config::get('APP_MAIN_SITE') . '/auth/forgot-passwd'; return $redirect ? add_query_arg('initial_page', $redirect, $lostpassword_url) : $lostpassword_url; } -} \ No newline at end of file +} diff --git a/app/Hooks/Auth/Scripts.php b/app/Hooks/Auth/Scripts.php index cefca4d..4f3b5db 100644 --- a/app/Hooks/Auth/Scripts.php +++ b/app/Hooks/Auth/Scripts.php @@ -2,22 +2,13 @@ namespace App\Hooks\Auth; -class Scripts { - public static function wp_enqueue_scripts(): void { +class Scripts +{ + public static function wp_enqueue_scripts(): void + { $authentication_page_id = get_option('authentication_page_id'); - if(!is_page($authentication_page_id)) { + if (!is_page($authentication_page_id)) { return; } - $account = include(APP_THEME_DIR.'/dist/auth.asset.php'); - foreach($account['dependencies'] as $dependency) { - wp_enqueue_script($dependency); - } - wp_enqueue_script( - 'account', - APP_THEME_URL.'/dist/auth.js', - $account['version'], - $account['dependencies'], - ['in_footer' => true, 'type' => 'module'] - ); } -} \ No newline at end of file +} diff --git a/app/Hooks/Blocks.php b/app/Hooks/Blocks.php index e68061f..81b0435 100644 --- a/app/Hooks/Blocks.php +++ b/app/Hooks/Blocks.php @@ -4,32 +4,27 @@ use Timber\Timber; -class Blocks { - public static function init() : void { +class Blocks +{ + public static function init(): void + { add_action('init', self::register_block_types(...)); - } + } public static function register_block_types(): void { - $block_types = glob(APP_THEME_DIR . '/dist/blocks/*'); - if (count($block_types) > 0) { - foreach ($block_types as $block) { + $block_types_v2 = glob(APP_THEME_DIR . '/blocks/*'); + if (count($block_types_v2) > 0) { + foreach ($block_types_v2 as $block) { if (is_dir($block)) { - $block_data = register_block_type($block); - - add_filter( - 'allowed_block_types_all', - function ($allowed_blocks) use ($block_data) { - if (!is_array($allowed_blocks)) return $allowed_blocks; - $allowed_blocks[] = $block_data->name; - return $allowed_blocks; - }, 99, 2); + register_block_type($block); } } } } - public static function render( $block, $content = '', $is_preview = false ) : void { + public static function render($block, $content = '', $is_preview = false): void + { $block_name = sanitize_title_with_dashes(str_replace('app/', '', $block['name'])); $block_template = $block_name . '.twig'; @@ -43,4 +38,4 @@ public static function render( $block, $content = '', $is_preview = false ) : vo $context = apply_filters("app_before_render_block_{$block_name}", $context); Timber::render('@app/blocks/' . $block_template, $context); } -} \ No newline at end of file +} diff --git a/app/Hooks/Cron.php b/app/Hooks/Cron.php index 3a1b2f6..06021da 100644 --- a/app/Hooks/Cron.php +++ b/app/Hooks/Cron.php @@ -4,11 +4,12 @@ use App\Hooks\Queue\Cron as Queue; use App\Hooks\Migrations\Cron as Migration; -use App\Hooks\Account\Cron as Account; use App\Hooks\Auth\Cron as Auth; -class Cron { - public static function init() : void { +class Cron +{ + public static function init(): void + { add_action('app_process_queue', Queue::process(...)); add_action('app_migrations', Migration::migrate(...)); add_filter('delete_expired_tokens', Auth::delete_expired_tokens(...)); @@ -17,29 +18,31 @@ public static function init() : void { self::_schedule(); } - public static function cron_schedules(array $schedules) : array { - $schedules['every_minute'] = array( + public static function cron_schedules(array $schedules): array + { + $schedules['every_minute'] = [ 'interval' => 60, 'display' => __('Every minute'), - ); - $schedules['every_five_minutes'] = array( + ]; + $schedules['every_five_minutes'] = [ 'interval' => 60 * 5, 'display' => __('Every five minutes'), - ); + ]; return $schedules; } - private static function _schedule() : void { - if(!wp_next_scheduled('app_process_queue')) { + private static function _schedule(): void + { + if (!wp_next_scheduled('app_process_queue')) { wp_schedule_event(time(), 'every_minute', 'app_process_queue'); } - if(!wp_next_scheduled('app_finish_install')) { + if (!wp_next_scheduled('app_finish_install')) { wp_schedule_event(time(), 'every_minute', 'app_finish_install'); } - if(!wp_next_scheduled('app_migrations')) { + if (!wp_next_scheduled('app_migrations')) { wp_schedule_event(time(), 'every_minute', 'app_migrations'); } } -} \ No newline at end of file +} diff --git a/app/Hooks/Gutenberg.php b/app/Hooks/Gutenberg.php index 38a2092..61b983d 100644 --- a/app/Hooks/Gutenberg.php +++ b/app/Hooks/Gutenberg.php @@ -2,61 +2,67 @@ namespace App\Hooks; -class Gutenberg { - public static function init() : void { +class Gutenberg +{ + public static function init(): void + { add_action('after_setup_theme', self::after_setup_theme(...)); add_action('enqueue_block_editor_assets', self::enqueue_block_editor_assets(...)); try { add_filter('allowed_block_types_all', self::allowed_block_types_all(...)); add_filter('block_categories_all', self::block_categories_all(...), 10, 2); - } catch(\Exception $e) { + } catch (\Exception $e) { wp_die($e->getMessage(), __(sprintf('Error: %s', $e->getCode()))); } - } + } - public static function after_setup_theme() : void { - remove_theme_support('core-block-patterns'); + public static function after_setup_theme(): void + { + remove_theme_support('core-block-patterns'); flush_rewrite_rules(); - } + } - public static function enqueue_block_editor_assets() : void { - $script = "window.onload = function() { const isFullscreenMode = wp.data.select( 'core/edit-post' ).isFeatureActive( 'fullscreenMode' ); if ( isFullscreenMode ) { wp.data.dispatch( 'core/edit-post' ).toggleFeature( 'fullscreenMode' ); } }"; - wp_add_inline_script( 'wp-blocks', $script ); + public static function enqueue_block_editor_assets(): void + { + $script = "window.onload = function() { const isFullscreenMode = wp.data.select( 'core/edit-post' ).isFeatureActive( 'fullscreenMode' ); if ( isFullscreenMode ) { wp.data.dispatch( 'core/edit-post' ).toggleFeature( 'fullscreenMode' ); } }"; + wp_add_inline_script('wp-blocks', $script); - $editor = require_once APP_THEME_DIR . '/dist/editor.asset.php'; - wp_enqueue_script( - 'app-editor', - APP_THEME_URL . '/dist/editor.js', - $editor['dependencies'], - $editor['version'] - ); - } + $editor = require_once APP_THEME_DIR . '/dist/editor.asset.php'; + wp_enqueue_script( + 'app-editor', + APP_THEME_URL . '/dist/editor.js', + $editor['dependencies'], + $editor['version'], + ); + } - public static function allowed_block_types_all($allowed_blocks) : array|bool { - return $allowed_blocks; - } + public static function allowed_block_types_all($allowed_blocks): array|bool + { + return $allowed_blocks; + } - public static function block_categories_all(array $categories, $post) : array { - return array_merge( - $categories, - array( - array( - 'slug' => 'content', - 'title' => __( 'Content' ), - ), - ), - array ( - array( - 'slug' => 'media', - 'title' => __( 'Media' ), - ), - ), - array ( - array( - 'slug' => 'utilities', - 'title' => __( 'Utilities' ), - ), - ), - ); - } -} \ No newline at end of file + public static function block_categories_all(array $categories, $post): array + { + return array_merge( + $categories, + [ + [ + 'slug' => 'content', + 'title' => __('Content'), + ], + ], + [ + [ + 'slug' => 'media', + 'title' => __('Media'), + ], + ], + [ + [ + 'slug' => 'utilities', + 'title' => __('Utilities'), + ], + ], + ); + } +} diff --git a/app/Hooks/Language.php b/app/Hooks/Language.php index b1ff161..95b7057 100644 --- a/app/Hooks/Language.php +++ b/app/Hooks/Language.php @@ -4,12 +4,15 @@ use Roots\WPConfig\Config; -class Language { - public static function init() : void { +class Language +{ + public static function init(): void + { add_filter('locale', self::locale(...)); } - public static function locale(string $locale) : string { + public static function locale(string $locale): string + { if (isset($_COOKIE['browser_language'])) { $browser_language = sanitize_text_field($_COOKIE['browser_language']); $lang_dir = Config::get('ROOT_DIR') . '/app/languages'; @@ -20,4 +23,4 @@ public static function locale(string $locale) : string { } return $locale; } -} \ No newline at end of file +} diff --git a/app/Hooks/Mail.php b/app/Hooks/Mail.php index b57e552..aad39ae 100644 --- a/app/Hooks/Mail.php +++ b/app/Hooks/Mail.php @@ -4,27 +4,30 @@ use Roots\WPConfig\Config; use Timber\Timber; -use function Env\env; -class Mail { - public static function init(): void { - if(WP_ENV === 'local') { +class Mail +{ + public static function init(): void + { + if (WP_ENV === 'local') { add_action('phpmailer_init', self::phpmailer_init(...), 100); add_action('wp_mail', self::wp_mail_smtp(...), 100); } else { add_filter('wp_mail', self::wp_mail_sendgrid(...), 100); } - add_filter( 'wp_mail_content_type', self::wp_mail_content_type(...)); + add_filter('wp_mail_content_type', self::wp_mail_content_type(...)); } - public static function phpmailer_init($phpmailer): void { + public static function phpmailer_init($phpmailer): void + { $phpmailer->isSMTP(); $phpmailer->Host = Config::get('SMTP_HOST'); $phpmailer->Port = Config::get('SMTP_PORT'); - add_filter( 'wp_mail_content_type', self::wp_mail_content_type(...)); + add_filter('wp_mail_content_type', self::wp_mail_content_type(...)); } - public static function wp_mail_sendgrid(array $args): bool { + public static function wp_mail_sendgrid(array $args): bool + { $context = Timber::context([ 'site_url' => home_url(), 'year' => gmdate('Y'), @@ -42,7 +45,8 @@ public static function wp_mail_sendgrid(array $args): bool { return self::sendgrid_send_mail($to, $subject, $message, $headers); } - public static function wp_mail_smtp(array $args) : array { + public static function wp_mail_smtp(array $args): array + { $context = Timber::context([ 'site_url' => home_url(), 'year' => gmdate('Y'), @@ -54,26 +58,28 @@ public static function wp_mail_smtp(array $args) : array { return $args; } - public static function wp_mail_content_type() : string { + public static function wp_mail_content_type(): string + { return 'text/html'; } - public static function sendgrid_send_mail($to, $subject, $message, $headers = []) : bool { + public static function sendgrid_send_mail($to, $subject, $message, $headers = []): bool + { $url = Config::get('SENDGRID_API_URL'); $email_data = [ 'personalizations' => [[ 'to' => is_array($to) ? array_map(fn($email) => ['email' => $email], $to) : [['email' => $to]], - 'subject' => $subject + 'subject' => $subject, ]], 'from' => [ 'email' => Config::get('EMAIL_FROM'), - 'name' => Config::get('EMAIL_FROM_NAME') + 'name' => Config::get('EMAIL_FROM_NAME'), ], 'content' => [[ 'type' => 'text/html', - 'value' => nl2br($message) - ]] + 'value' => nl2br($message), + ]], ]; $ch = curl_init(); @@ -83,7 +89,7 @@ public static function sendgrid_send_mail($to, $subject, $message, $headers = [] curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($email_data)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer ' . Config::get('SENDGRID_API_KEY'), - 'Content-Type: application/json' + 'Content-Type: application/json', ]); $response = curl_exec($ch); @@ -92,4 +98,4 @@ public static function sendgrid_send_mail($to, $subject, $message, $headers = [] return ($http_code >= 200 && $http_code < 300); } -} \ No newline at end of file +} diff --git a/app/Hooks/Migration.php b/app/Hooks/Migration.php index e66262d..1bb1a66 100644 --- a/app/Hooks/Migration.php +++ b/app/Hooks/Migration.php @@ -4,8 +4,10 @@ use App\Hooks\Migrations\Delta; -class Migration { - public static function init() : void { +class Migration +{ + public static function init(): void + { add_action('init', Delta::create_table(...)); } -} \ No newline at end of file +} diff --git a/app/Hooks/Migrations/Cron.php b/app/Hooks/Migrations/Cron.php index 6048ff7..b263f47 100644 --- a/app/Hooks/Migrations/Cron.php +++ b/app/Hooks/Migrations/Cron.php @@ -4,6 +4,7 @@ use App\Features\Migrate; -class Cron { +class Cron +{ use Migrate; -} \ No newline at end of file +} diff --git a/app/Hooks/Migrations/Delta.php b/app/Hooks/Migrations/Delta.php index e5e1eae..24befa2 100644 --- a/app/Hooks/Migrations/Delta.php +++ b/app/Hooks/Migrations/Delta.php @@ -2,9 +2,13 @@ namespace App\Hooks\Migrations; -class Delta { - public static function create_table() : void { - if(get_option('migration_table_created')) return; +class Delta +{ + public static function create_table(): void + { + if (get_option('migration_table_created')) { + return; + } global $wpdb; $table_name = $wpdb->prefix . 'migrations'; @@ -19,10 +23,10 @@ public static function create_table() : void { PRIMARY KEY (id) ) $charset_collate; EOF; -; + ; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta($sql); update_option('migration_table_created', 'created'); } -} \ No newline at end of file +} diff --git a/app/Hooks/Page.php b/app/Hooks/Page.php index 467e998..e344d37 100644 --- a/app/Hooks/Page.php +++ b/app/Hooks/Page.php @@ -4,8 +4,10 @@ use App\Hooks\Page\Service; -class Page { - public static function init() : void { +class Page +{ + public static function init(): void + { add_action('rest_api_init', Service::rest_api_init(...)); } -} \ No newline at end of file +} diff --git a/app/Hooks/Page/Service.php b/app/Hooks/Page/Service.php index f11254b..34ffda3 100644 --- a/app/Hooks/Page/Service.php +++ b/app/Hooks/Page/Service.php @@ -2,23 +2,27 @@ namespace App\Hooks\Page; -class Service { - public static function rest_api_init() : void { - register_rest_field('page', 'routes', array( +class Service +{ + public static function rest_api_init(): void + { + register_rest_field('page', 'routes', [ 'get_callback' => self::get_routes(...), - )); - register_rest_field('page', 'call_to_action', array( + ]); + register_rest_field('page', 'call_to_action', [ 'get_callback' => self::get_call_to_action(...), - )); + ]); } - public static function get_routes(array $page) : array { + public static function get_routes(array $page): array + { $routes = get_post_meta($page['id'], 'routes', true); - return !!$routes ? $routes : array(); + return !!$routes ? $routes : []; } - public static function get_call_to_action(array $page) : array { + public static function get_call_to_action(array $page): array + { $call_to_action = get_post_meta($page['id'], 'call_to_action', true); - return !!$call_to_action ? $call_to_action : array(); + return !!$call_to_action ? $call_to_action : []; } -} \ No newline at end of file +} diff --git a/app/Hooks/Plugin.php b/app/Hooks/Plugin.php index bf39d32..fdb3ce2 100644 --- a/app/Hooks/Plugin.php +++ b/app/Hooks/Plugin.php @@ -4,8 +4,10 @@ use App\Hooks\Plugin\Admin; -class Plugin { - public static function init() : void { +class Plugin +{ + public static function init(): void + { add_action('admin_init', Admin::admin_init(...)); } -} \ No newline at end of file +} diff --git a/app/Hooks/Plugin/Admin.php b/app/Hooks/Plugin/Admin.php index 1132ccd..815da69 100644 --- a/app/Hooks/Plugin/Admin.php +++ b/app/Hooks/Plugin/Admin.php @@ -4,17 +4,20 @@ use Roots\WPConfig\Config; -class Admin { - public static function admin_init() : void { +class Admin +{ + public static function admin_init(): void + { self::activate_invoice_app(); } - public static function activate_invoice_app() : void { - if(!defined('APP_INVOICE_DIR')) { + public static function activate_invoice_app(): void + { + if (!defined('APP_INVOICE_DIR')) { $plugin = Config::get('MC_PLUGINS_PATH') . '/invoice/invoice.php'; - if ( !is_plugin_active( $plugin ) ) { - activate_plugin( $plugin ); + if (!is_plugin_active($plugin)) { + activate_plugin($plugin); } } } -} \ No newline at end of file +} diff --git a/app/Hooks/Post.php b/app/Hooks/Post.php index ca98c8c..f85a8ee 100644 --- a/app/Hooks/Post.php +++ b/app/Hooks/Post.php @@ -4,32 +4,36 @@ use Ramsey\Uuid\Uuid; use Roots\WPConfig\Config; + use function Env\env; -class Post { - public static function init() : void { +class Post +{ + public static function init(): void + { add_action('save_post', self::save_post(...), 10, 3); add_filter('home_url', self::filter_the_permalink(...)); } - public static function save_post(int $post_id, \WP_Post $post, bool $update) : void { + public static function save_post(int $post_id, \WP_Post $post, bool $update): void + { $uuid_string = app_get_post_uuid($post_id); - if(!$uuid_string) { + if (!$uuid_string) { do { $uuid = Uuid::uuid4(); $uuid_string = $uuid->toString(); - } while(app_uuid_exists($uuid_string)); + } while (app_uuid_exists($uuid_string)); } $space_name = Config::get('SPACE_NAME') ?? 'modycloud'; $uuid_file_name = Config::get('MC_UUID_PATH') . "/{$uuid_string}.{$space_name}.{$post_id}.{$post->post_type}.uuid.json"; $space_directory = app_get_uuid_path(); - if(!is_dir($space_directory)) { + if (!is_dir($space_directory)) { mkdir($space_directory, 0755, true); } - if($uuid_string && !is_file($uuid_file_name)){ + if ($uuid_string && !is_file($uuid_file_name)) { touch($uuid_file_name); } @@ -37,15 +41,16 @@ public static function save_post(int $post_id, \WP_Post $post, bool $update) : v update_post_meta($post_id, 'uuid', $uuid_string); } - public static function filter_the_permalink(string $url) : string { -// $current_site = env('WP_HOME'); -// $current_post_id = get_the_ID(); -// if($current_post_id) { -// $app_filter_the_permalink = get_post_meta($current_post_id, 'app_filter_the_permalink', true); -// if($app_filter_the_permalink) { -// return str_replace($current_site, '', $url); -// } -// } + public static function filter_the_permalink(string $url): string + { + // $current_site = env('WP_HOME'); + // $current_post_id = get_the_ID(); + // if($current_post_id) { + // $app_filter_the_permalink = get_post_meta($current_post_id, 'app_filter_the_permalink', true); + // if($app_filter_the_permalink) { + // return str_replace($current_site, '', $url); + // } + // } return $url; } -} \ No newline at end of file +} diff --git a/app/Hooks/Queue.php b/app/Hooks/Queue.php index d753df6..2c42310 100644 --- a/app/Hooks/Queue.php +++ b/app/Hooks/Queue.php @@ -3,11 +3,12 @@ namespace App\Hooks; use App\Hooks\Queue\Post; -use function Env\env; -class Queue { - public static function init(): void { - add_action( 'init', Post::register_post_type(...)); +class Queue +{ + public static function init(): void + { + add_action('init', Post::register_post_type(...)); add_action('save_post_queue', Post::save_post_queue(...), 10, 3); } -} \ No newline at end of file +} diff --git a/app/Hooks/Queue/Cron.php b/app/Hooks/Queue/Cron.php index 85387ee..0aa5126 100644 --- a/app/Hooks/Queue/Cron.php +++ b/app/Hooks/Queue/Cron.php @@ -2,22 +2,24 @@ namespace App\Hooks\Queue; -class Cron { - public static function process() : void { - $queue_items = get_posts(array( +class Cron +{ + public static function process(): void + { + $queue_items = get_posts([ 'post_type' => 'queue', 'post_status' => 'draft', - )); + ]); - if(count($queue_items) === 0) { + if (count($queue_items) === 0) { return; } foreach ($queue_items as $queue_item) { - wp_update_post(array( + wp_update_post([ 'ID' => $queue_item->ID, 'post_status' => 'publish', - )); + ]); } } -} \ No newline at end of file +} diff --git a/app/Hooks/Queue/Post.php b/app/Hooks/Queue/Post.php index 7c758f9..f8343fc 100644 --- a/app/Hooks/Queue/Post.php +++ b/app/Hooks/Queue/Post.php @@ -4,10 +4,12 @@ use function Env\env; -class Post { - public static function register_post_type() : void { - register_post_type( 'queue', array( - 'labels' => array( +class Post +{ + public static function register_post_type(): void + { + register_post_type('queue', [ + 'labels' => [ 'name' => __('Queues', APP_THEME_LOCALE), 'singular_name' => __('Queue', APP_THEME_LOCALE), 'menu_name' => __('Queues', APP_THEME_LOCALE), @@ -37,7 +39,7 @@ public static function register_post_type() : void { 'item_updated' => __('Queue updated.', APP_THEME_LOCALE), 'item_link' => __('Queue Link', APP_THEME_LOCALE), 'item_link_description' => __('A link to a queue.', APP_THEME_LOCALE), - ), + ], 'public' => false, 'publicly_queryable' => true, 'show_ui' => true, @@ -45,21 +47,22 @@ public static function register_post_type() : void { 'show_in_rest' => true, 'menu_position' => 7, 'menu_icon' => 'dashicons-editor-ul', - 'supports' => array( + 'supports' => [ 0 => 'title', 1 => 'author', 2 => 'custom-fields', - ), - 'rewrite' => array( + ], + 'rewrite' => [ 'with_front' => false, 'pages' => false, - ), + ], 'can_export' => false, 'delete_with_user' => true, - ) ); + ]); } - public static function save_post_queue(int $queue_id, \WP_Post $post, bool $update): void { + public static function save_post_queue(int $queue_id, \WP_Post $post, bool $update): void + { if ($post->post_type !== 'queue') { return; } @@ -82,8 +85,8 @@ public static function save_post_queue(int $queue_id, \WP_Post $post, bool $upda app_log( sprintf( __('save_post_queue: variables not extracted from queue_info for %s.', APP_THEME_LOCALE), - $queue_id - ) + $queue_id, + ), ); return; } @@ -96,8 +99,8 @@ public static function save_post_queue(int $queue_id, \WP_Post $post, bool $upda app_log( sprintf( __('save_post_queue: required fields not present in queue_info variables for %s.', APP_THEME_LOCALE), - $queue_id - ) + $queue_id, + ), ); return; } @@ -115,19 +118,19 @@ public static function save_post_queue(int $queue_id, \WP_Post $post, bool $upda sprintf( __('save_post_queue: Database %s and user %s created.', APP_THEME_LOCALE), $db_name, - $db_user - ) + $db_user, + ), ); $site_exists = get_page_by_path($space_name, OBJECT, 'site'); - if(!$site_exists) { - $site_id = wp_insert_post(array( + if (!$site_exists) { + $site_id = wp_insert_post([ 'post_type' => 'site', 'post_title' => esc_html($company_name), 'post_name' => $space_name, 'post_status' => 'publish', 'post_author' => $site_owner->ID, - )); + ]); app_log("Site entry for {$company_name} created with ID {$site_id}"); } else { @@ -142,17 +145,18 @@ public static function save_post_queue(int $queue_id, \WP_Post $post, bool $upda } } catch (\PDOException $e) { self::_un_publish_queue($queue_id); - app_log("save_post_queue: Error creating database: ".$e->getMessage()); + app_log("save_post_queue: Error creating database: " . $e->getMessage()); return; } } - private static function _un_publish_queue(int $post_id): void { + private static function _un_publish_queue(int $post_id): void + { remove_action('save_post_queue', self::save_post_queue(...)); - wp_update_post(array( + wp_update_post([ 'ID' => $post_id, 'post_status' => 'draft', - )); + ]); add_action('save_post_queue', self::save_post_queue(...)); } -} \ No newline at end of file +} diff --git a/app/Hooks/Security.php b/app/Hooks/Security.php index 1c3ae3b..b34bd8b 100644 --- a/app/Hooks/Security.php +++ b/app/Hooks/Security.php @@ -6,11 +6,13 @@ use Roots\WPConfig\Config; use Timber\Timber; -class Security { - public static function init(): void { +class Security +{ + public static function init(): void + { add_action('rest_api_init', self::cors_headers(...)); - add_action('wp_head', array(Security::class, 'add_recaptcha')); - add_action('init', array(Security::class, 'limit_access_to_spain')); + add_action('wp_head', [Security::class, 'add_recaptcha']); + add_action('init', [Security::class, 'limit_access_to_spain']); remove_action('wp_head', 'rest_output_link_wp_head', 10); remove_action('wp_head', 'wp_oembed_add_discovery_links', 10); @@ -37,14 +39,16 @@ public static function init(): void { remove_action('wp_delete_temp_updater_backups', 'wp_delete_all_temp_backups'); } - public static function cors_headers(): void { + public static function cors_headers(): void + { header("Access-Control-Allow-Origin: https://*.modycloud.test"); header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS"); header("Access-Control-Allow-Headers: Authorization, Content-Type"); header("Access-Control-Allow-Credentials: true"); } - public static function add_recaptcha(): void { + public static function add_recaptcha(): void + { if (is_singular()) { global $post; $blocks = parse_blocks($post->post_content); @@ -59,6 +63,7 @@ public static function add_recaptcha(): void { } echo Timber::compile('@app/components/tags/script.twig', [ + 'id' => 'google-recaptcha', 'src' => add_query_arg([ 'render' => $recaptcha_site_key, ], 'https://www.google.com/recaptcha/api.js'), @@ -66,9 +71,10 @@ public static function add_recaptcha(): void { ]); }; - $protected_pages = array( - 'app/auth' - ); + $protected_pages = [ + 'app/auth', + 'app/auth-v2', + ]; foreach ($blocks as $block) { if (in_array($block['blockName'], $protected_pages)) { $add_script(); @@ -79,7 +85,8 @@ public static function add_recaptcha(): void { } } - public static function limit_access_to_spain(): void { + public static function limit_access_to_spain(): void + { $ip = $_SERVER['REMOTE_ADDR']; $dbPath = Config::get('SRC_PATH') . '/geodb/GeoLite2-Country.mmdb'; @@ -95,7 +102,7 @@ public static function limit_access_to_spain(): void { wp_die( __('Only Spain users allowed.', APP_THEME_LOCALE), __('Access denied', APP_THEME_LOCALE), - array('response' => 403) + ['response' => 403], ); } } catch (\Exception $e) { diff --git a/app/Hooks/Sites.php b/app/Hooks/Sites.php index 97efcf4..ca704b7 100644 --- a/app/Hooks/Sites.php +++ b/app/Hooks/Sites.php @@ -7,8 +7,10 @@ use App\Hooks\Sites\Post; use App\Hooks\Sites\Routes; -class Sites { - public static function init() : void { +class Sites +{ + public static function init(): void + { add_action('init', Routes::permalink_structure(...)); add_action('init', Post::register_post_type(...)); add_action('wp_install', Routes::migrate(...)); @@ -17,4 +19,4 @@ public static function init() : void { add_action('wp_ajax_create_space', Ajax::create_space(...)); add_filter('app_before_render_block_create-site', Block::app_before_render_block(...)); } -} \ No newline at end of file +} diff --git a/app/Hooks/Sites/Ajax.php b/app/Hooks/Sites/Ajax.php index 1eef0f6..28359d4 100644 --- a/app/Hooks/Sites/Ajax.php +++ b/app/Hooks/Sites/Ajax.php @@ -4,98 +4,101 @@ use Roots\WPConfig\Config; use Timber\Timber; -use function Env\env; -class Ajax { - public static function check_setup_finished(): void { +class Ajax +{ + public static function check_setup_finished(): void + { $queue_id = sanitize_text_field($_POST['queue_id']); $user = wp_get_current_user(); if (get_post_status($queue_id) === 'publish') { - wp_send_json_success(array( + wp_send_json_success([ 'done' => get_post_status($queue_id) === 'publish', 'initial_page' => app_get_initial_page($user), - )); + ]); } - wp_send_json_success(array('done' => false)); + wp_send_json_success(['done' => false]); } - public static function check_space_name_exists(): void { + public static function check_space_name_exists(): void + { if (empty($_POST['space_name'])) { - wp_send_json_error(array( + wp_send_json_error([ 'exists' => true, - 'message' => __('The space name is required., APP_THEME_LOCALE') - )); + 'message' => __('The space name is required., APP_THEME_LOCALE'), + ]); } $space_name = sanitize_text_field($_POST['space_name']); $exists = self::_check_space_name_exists($space_name); - wp_send_json_success(array( + wp_send_json_success([ 'exists' => $exists, 'message' => sprintf( __('The space name %s is already taken. Please try another.', APP_THEME_LOCALE), - $space_name - ) - )); + $space_name, + ), + ]); } - public static function create_space(): void { + public static function create_space(): void + { if (empty($_POST['space_name'])) { - wp_send_json_error(array( - 'message' => __('The space name is required.', APP_THEME_LOCALE) - )); + wp_send_json_error([ + 'message' => __('The space name is required.', APP_THEME_LOCALE), + ]); } if (empty($_POST['company_name'])) { - wp_send_json_error(array( - 'message' => __('The company name is required.', APP_THEME_LOCALE) - )); + wp_send_json_error([ + 'message' => __('The company name is required.', APP_THEME_LOCALE), + ]); } $space_name = sanitize_text_field($_POST['space_name']); $company_name = sanitize_text_field($_POST['company_name']); if (strlen($space_name) > 16) { - wp_send_json_error(array( + wp_send_json_error([ 'message' => __('The space name should be 16 characters maximum.', APP_THEME_LOCALE), - )); + ]); } if (self::_check_space_name_exists($space_name)) { - wp_send_json_error(array( + wp_send_json_error([ 'message' => sprintf( __('The space name %s is already taken. Please try another.', APP_THEME_LOCALE), - $space_name - ) - )); + $space_name, + ), + ]); } - $queue_id = wp_insert_post(array( + $queue_id = wp_insert_post([ 'post_type' => 'queue', 'post_title' => sprintf( __('Create space %s', APP_THEME_LOCALE), - $company_name + $company_name, ), 'post_status' => 'draft', - )); + ]); if (is_wp_error($queue_id)) { - wp_send_json_error(array( + wp_send_json_error([ 'message' => $queue_id->get_error_message(), - )); + ]); } update_field( 'install_key', array_key_exists('install_key', $_POST) ? sanitize_text_field($_POST['install_key']) : null, - $queue_id + $queue_id, ); $env_file_data = app_generate_env_file_info($queue_id, $space_name, $company_name); if (count($env_file_data) === 0) { - wp_send_json_error(array( + wp_send_json_error([ 'message' => __('There was an error generating the configuration file. Please contact with support', APP_THEME_LOCALE), - )); + ]); } $env_file = Timber::compile('@provision/env-template.twig', $env_file_data); @@ -115,25 +118,26 @@ public static function create_space(): void { mkdir($new_site_dir, 0755, true); } - $env_file_path = $new_site_dir.'/'.'.env'; + $env_file_path = $new_site_dir . '/' . '.env'; if (!is_file($env_file_path)) { touch($env_file_path); } file_put_contents($env_file_path, $env_file); - app_log(".env\n".print_r($env_file, 1)); + app_log(".env\n" . print_r($env_file, 1)); wp_send_json_success([ 'message' => __('We are provisioning your space, please wait, this could take a while', APP_THEME_LOCALE), - 'initial_page' => add_query_arg(array( + 'initial_page' => add_query_arg([ 'autologin_user' => base64_encode(md5(rand(111111, 999999))), - ), "{$env_file_data['wp_home']}/content/space-install-setup.php"), + ], "{$env_file_data['wp_home']}/content/space-install-setup.php"), 'queue_id' => $queue_id, ]); } - private static function _check_space_name_exists(string $space_name): bool { + private static function _check_space_name_exists(string $space_name): bool + { $site = get_page_by_path($space_name, OBJECT, 'site'); return !!$site; } -} \ No newline at end of file +} diff --git a/app/Hooks/Sites/Block.php b/app/Hooks/Sites/Block.php index 531f080..1c0bef5 100644 --- a/app/Hooks/Sites/Block.php +++ b/app/Hooks/Sites/Block.php @@ -2,28 +2,30 @@ namespace App\Hooks\Sites; -class Block { - public static function app_before_render_block(array $context) : array { - if(!is_user_logged_in()) { +class Block +{ + public static function app_before_render_block(array $context): array + { + if (!is_user_logged_in()) { wp_redirect(wp_login_url()); exit; } - if(current_user_can('administrator')) { + if (current_user_can('administrator')) { return $context; } - $account = include(APP_THEME_DIR.'/dist/site.asset.php'); - foreach($account['dependencies'] as $dependency) { + $account = include(APP_THEME_DIR . '/dist/site.asset.php'); + foreach ($account['dependencies'] as $dependency) { wp_enqueue_script($dependency); } wp_enqueue_script( 'site', - APP_THEME_URL.'/dist/site.js', + APP_THEME_URL . '/dist/site.js', $account['version'], $account['dependencies'], - ['in_footer' => true, 'type' => 'module'] + ['in_footer' => true, 'type' => 'module'], ); $current_user_id = get_current_user_id(); @@ -31,17 +33,17 @@ public static function app_before_render_block(array $context) : array { $site_uri = get_field('site_uri', $site_id); $site_is_active = $site_id && app_site_is_active($site_id); - if($site_id && $site_is_active) { + if ($site_id && $site_is_active) { wp_redirect($site_uri); exit; - } elseif($site_id && !$site_is_active) { - $space_install_setup = add_query_arg(array( - 'key' => base64_encode(md5(rand(11111,99999))), + } elseif ($site_id && !$site_is_active) { + $space_install_setup = add_query_arg([ + 'key' => base64_encode(md5(rand(11111, 99999))), 'installing' => true, - ), "{$site_uri}/content/space-install-setup.php"); + ], "{$site_uri}/content/space-install-setup.php"); wp_redirect($space_install_setup); exit; } return $context; } -} \ No newline at end of file +} diff --git a/app/Hooks/Sites/Post.php b/app/Hooks/Sites/Post.php index 3e141e9..6d9e8b9 100644 --- a/app/Hooks/Sites/Post.php +++ b/app/Hooks/Sites/Post.php @@ -2,10 +2,12 @@ namespace App\Hooks\Sites; -class Post { - public static function register_post_type() : void { - register_post_type( 'site', array( - 'labels' => array( +class Post +{ + public static function register_post_type(): void + { + register_post_type('site', [ + 'labels' => [ 'name' => __('Sites', APP_THEME_LOCALE), 'singular_name' => __('Site', APP_THEME_LOCALE), 'menu_name' => __('Sites', APP_THEME_LOCALE), @@ -35,22 +37,22 @@ public static function register_post_type() : void { 'item_updated' => __('Site updated.', APP_THEME_LOCALE), 'item_link' => __('Site Link', APP_THEME_LOCALE), 'item_link_description' => __('A link to a site.', APP_THEME_LOCALE), - ), + ], 'public' => false, 'show_ui' => true, 'show_in_nav_menus' => true, 'show_in_rest' => true, 'menu_position' => 6, 'menu_icon' => 'dashicons-admin-multisite', - 'supports' => array( + 'supports' => [ 0 => 'title', 1 => 'author', - ), - 'rewrite' => array( + ], + 'rewrite' => [ 'with_front' => false, 'pages' => false, - ), + ], 'delete_with_user' => true, - ) ); + ]); } -} \ No newline at end of file +} diff --git a/app/Hooks/Sites/Routes.php b/app/Hooks/Sites/Routes.php index 43cc72f..5722a11 100644 --- a/app/Hooks/Sites/Routes.php +++ b/app/Hooks/Sites/Routes.php @@ -4,12 +4,14 @@ use App\Features\Migrate; -class Routes { +class Routes +{ use Migrate; - public static function permalink_structure() : void { + public static function permalink_structure(): void + { $permalink_structure = get_option('permalink_structure'); - if($permalink_structure !== '/%postname%/') { + if ($permalink_structure !== '/%postname%/') { update_option('permalink_structure', '/%postname%/'); } } -} \ No newline at end of file +} diff --git a/app/Hooks/Theme.php b/app/Hooks/Theme.php index cebb8c7..80cdc0e 100644 --- a/app/Hooks/Theme.php +++ b/app/Hooks/Theme.php @@ -3,10 +3,13 @@ namespace App\Hooks; use Roots\WPConfig\Config; + use function Env\env; -class Theme { - public static function init(): void { +class Theme +{ + public static function init(): void + { add_action('init', self::wp_init(...), 100); add_action('after_setup_theme', self::after_setup_theme(...)); add_action('wp_enqueue_scripts', self::wp_enqueue_scripts(...), 100); @@ -18,11 +21,12 @@ public static function init(): void { add_filter('wpseo_metabox_prio', self::wpseo_metabox_prio(...)); } - public static function wp_init(): void { + public static function wp_init(): void + { register_nav_menus([ 'header_menu' => __('Header menu'), 'footer_top_menu' => __('Footer top menu'), - 'footer_bottom_menu' => __('Footer bottom menu') + 'footer_bottom_menu' => __('Footer bottom menu'), ]); remove_action('wp_head', 'feed_links_extra', 3); @@ -41,26 +45,28 @@ public static function wp_init(): void { wp_deregister_script('heartbeat'); - if(env('CHILD_SITE') || (!Config::get('CHILD_SITE') && !current_user_can('administrator'))) { + if (env('CHILD_SITE') || (!Config::get('CHILD_SITE') && !current_user_can('administrator'))) { show_admin_bar(false); } } - public static function after_setup_theme(): void { + public static function after_setup_theme(): void + { add_theme_support('post-thumbnails'); add_theme_support('title-tag'); - add_theme_support( 'custom-logo'); + add_theme_support('custom-logo'); load_theme_textdomain(Config::get('APP_THEME_DOMAIN'), Config::get('APP_PATH') . '/languages'); } - public static function wp_enqueue_scripts(): void { + public static function wp_enqueue_scripts(): void + { foreach (self::_scripts() as $script) { wp_register_script( $script['handle'], $script['url'], $script['deps'], $script['ver'], - $script['args'] + $script['args'], ); wp_localize_script($script['handle'], 'App', [ 'network_url' => network_home_url(), @@ -70,8 +76,8 @@ public static function wp_enqueue_scripts(): void { 'main_site' => Config::get('APP_MAIN_SITE'), 'mc_api_key' => Config::get('APP_CHILD_SITES_TOKEN'), 'connection_string' => Config::get('APP_MAIN_API_USER') && Config::get('APP_MAIN_API_KEY') ? - base64_encode(Config::get('APP_MAIN_API_USER').':'.Config::get('APP_MAIN_API_KEY')) : false, - 'recaptcha_key' => Config::get('RECAPTCHA_KEY') ?? false + base64_encode(Config::get('APP_MAIN_API_USER') . ':' . Config::get('APP_MAIN_API_KEY')) : false, + 'recaptcha_key' => Config::get('RECAPTCHA_KEY') ?? false, ]); wp_enqueue_script($script['handle']); } @@ -82,25 +88,29 @@ public static function wp_enqueue_scripts(): void { $style['url'], $style['deps'], $style['ver'], - $style['media'] + $style['media'], ); wp_enqueue_style($style['handle']); } } - public static function the_content(string $p): string { + public static function the_content(string $p): string + { return preg_replace('/

\\s*?(<\\/a>|)?\\s*<\\/p>/s', '$1', $p); } - public static function admin_head(): void { + public static function admin_head(): void + { echo ''; } - public static function wp_footer(): void { + public static function wp_footer(): void + { wp_deregister_script('wp-embed'); } - public static function admin_menu(): void { + public static function admin_menu(): void + { if (function_exists('remove_menu_page')) { remove_menu_page('edit-comments.php'); } @@ -108,33 +118,36 @@ public static function admin_menu(): void { remove_filter('update_footer', 'core_update_footer'); } - public static function wpseo_metabox_prio(): string { + public static function wpseo_metabox_prio(): string + { return 'low'; } - private static function _scripts(): array { - $app = include(APP_THEME_DIR.'/dist/app.asset.php'); + private static function _scripts(): array + { + $app = include(APP_THEME_DIR . '/dist/app.asset.php'); return [ [ 'handle' => 'app', - 'url' => APP_THEME_URL.'/dist/app.js', + 'url' => APP_THEME_URL . '/dist/app.js', 'ver' => $app['version'], 'deps' => array_merge($app['dependencies'], ['wp-api']), - 'args' => ['in_footer' => true, 'defer' => true] - ] + 'args' => ['in_footer' => true, 'defer' => true], + ], ]; } - private static function _styles(): array { - $app = include(APP_THEME_DIR.'/dist/app.asset.php'); + private static function _styles(): array + { + $app = include(APP_THEME_DIR . '/dist/app.asset.php'); return [ [ 'handle' => 'app', - 'url' => APP_THEME_URL.'/dist/app.css', + 'url' => APP_THEME_URL . '/dist/app.css', 'ver' => $app['version'], 'deps' => null, - 'media' => 'all' - ] + 'media' => 'all', + ], ]; } -} \ No newline at end of file +} diff --git a/app/Hooks/User.php b/app/Hooks/User.php index 644d26a..aaf318c 100644 --- a/app/Hooks/User.php +++ b/app/Hooks/User.php @@ -5,14 +5,16 @@ use App\Hooks\User\Api; use App\Hooks\User\Service; -class User { - public static function init() : void { +class User +{ + public static function init(): void + { add_action('rest_api_init', Api::register_rest_route(...)); add_filter( 'insert_custom_user_meta', Service::insert_custom_user_meta(...), 10, - 4 + 4, ); } -} \ No newline at end of file +} diff --git a/app/Hooks/User/Api.php b/app/Hooks/User/Api.php index c3748cb..fb181ea 100644 --- a/app/Hooks/User/Api.php +++ b/app/Hooks/User/Api.php @@ -4,43 +4,46 @@ use Roots\WPConfig\Config; -class Api { - public static function register_rest_route() : void { - register_rest_route('app/v1', '/users', array( +class Api +{ + public static function register_rest_route(): void + { + register_rest_route('app/v1', '/users', [ 'methods' => \WP_REST_Server::READABLE, 'callback' => self::get_user_data(...), - 'permission_callback' => function(){ + 'permission_callback' => function () { return is_user_logged_in(); }, - )); - register_rest_route('app/v1', '/get-user-token', array( + ]); + register_rest_route('app/v1', '/get-user-token', [ 'methods' => \WP_REST_Server::READABLE, 'callback' => self::get_current_user_token(...), - 'permission_callback' => function(){ + 'permission_callback' => function () { return is_user_logged_in(); }, - )); + ]); } - public static function get_user_data(\WP_REST_Request $request) : \WP_REST_Response { + public static function get_user_data(\WP_REST_Request $request): \WP_REST_Response + { $results = get_users(); - $response = array( - 'results' => array(), + $response = [ + 'results' => [], 'count' => count_users(), - ); + ]; - if($response['count'] === 0) { + if ($response['count'] === 0) { return rest_ensure_response($response); } - foreach($results as $user_data) { - $response['results'][] = array( + foreach ($results as $user_data) { + $response['results'][] = [ 'firstName' => $user_data->user_firstname, 'lastName' => $user_data->user_lastname, 'email' => $user_data->user_email, 'roles' => '', - ); + ]; } $response['count'] = count_users(); @@ -48,20 +51,21 @@ public static function get_user_data(\WP_REST_Request $request) : \WP_REST_Respo return rest_ensure_response($response); } - public static function get_current_user_token(\WP_REST_Request $request) : \WP_REST_Response { + public static function get_current_user_token(\WP_REST_Request $request): \WP_REST_Response + { $user_id = get_current_user_id(); $user_dir = Config::get('MC_USERS_PATH'); $uuid = get_user_meta($user_id, 'uuid', true); $token = false; - if($user_dir) { + if ($user_dir) { $file_name = "{$user_dir}/{$uuid}.json"; $file_data = json_decode(file_get_contents($file_name)); $token = $file_data->application_password; } - return rest_ensure_response(array( + return rest_ensure_response([ 'token' => $token, - )); + ]); } -} \ No newline at end of file +} diff --git a/app/Hooks/User/Service.php b/app/Hooks/User/Service.php index 2c51124..d3a1756 100644 --- a/app/Hooks/User/Service.php +++ b/app/Hooks/User/Service.php @@ -5,8 +5,10 @@ use Ramsey\Uuid\Uuid; use Roots\WPConfig\Config; -class Service { - public static function delete_user(int $user_id, int|null $reassign, \WP_User $user): void { +class Service +{ + public static function delete_user(int $user_id, int|null $reassign, \WP_User $user): void + { if (!current_user_can('administrator')) { return; } @@ -14,7 +16,7 @@ public static function delete_user(int $user_id, int|null $reassign, \WP_User $u $site_id = app_user_has_a_site($user_id); $site = get_post($site_id); - if(!$site) { + if (!$site) { return; } } @@ -23,30 +25,30 @@ public static function insert_custom_user_meta( array $custom_meta, \WP_User $user, bool $update, - array $userdata + array $userdata, ): array { $user_id = $user->ID; $user_uuid = app_get_user_uuid($user_id); - if(!$user_uuid) { + if (!$user_uuid) { do { $uuid = Uuid::uuid4(); $user_uuid = $uuid->toString(); - } while(app_uuid_exists($user_uuid)); + } while (app_uuid_exists($user_uuid)); } $custom_meta['uuid'] = $user_uuid; $uuid_file_name = app_get_user_uuid_file_name($user_uuid, $user_id); - if(!is_dir(Config::get('MC_UUID_PATH'))) { + if (!is_dir(Config::get('MC_UUID_PATH'))) { mkdir(Config::get('MC_UUID_PATH'), 0755, true); } - if($user_uuid && !is_file($uuid_file_name)){ + if ($user_uuid && !is_file($uuid_file_name)) { touch($uuid_file_name); } update_user_meta($user_id, 'uuid', $user_uuid); return $custom_meta; } -} \ No newline at end of file +} diff --git a/app/Hooks/Views.php b/app/Hooks/Views.php index 5fb020f..6a1610d 100644 --- a/app/Hooks/Views.php +++ b/app/Hooks/Views.php @@ -2,11 +2,12 @@ namespace App\Hooks; - use Roots\WPConfig\Config; -class Views { - static function init(): void { +class Views +{ + public static function init(): void + { if (\Timber::class) { add_action('timber/context', self::timber_context(...)); add_filter('timber/twig', self::timber_twig(...)); @@ -16,7 +17,8 @@ static function init(): void { } } - public static function admin_notice(): void { + public static function admin_notice(): void + { echo <<

@@ -26,7 +28,8 @@ public static function admin_notice(): void { EOF; } - public static function timber_context(array $context): array { + public static function timber_context(array $context): array + { if (function_exists('get_fields')) { $context['options'] = get_fields('options'); $context['auth_urls'] = [ @@ -58,7 +61,8 @@ public static function timber_context(array $context): array { return $context; } - public static function timber_twig(\Twig\Environment $twig): \Twig\Environment { + public static function timber_twig(\Twig\Environment $twig): \Twig\Environment + { $twig->addFilter(new \Twig\TwigFilter('admin_url', function ($filename) { return admin_url($filename); })); @@ -71,9 +75,10 @@ public static function timber_twig(\Twig\Environment $twig): \Twig\Environment { return $twig; } - public static function timber_locations(array $paths): array { + public static function timber_locations(array $paths): array + { $paths['app'] = [ - Config::get('SRC_PATH').'/views', + Config::get('SRC_PATH') . '/views', ]; $paths['provision'] = [ Config::get('SRC_PATH') . '/provision', @@ -82,19 +87,22 @@ public static function timber_locations(array $paths): array { return $paths; } - private static function _get_user_display_name($user) : string { - if($user->first_name && $user->last_name) { + private static function _get_user_display_name($user): string + { + if ($user->first_name && $user->last_name) { return ucwords(strtolower("{$user->first_name} {$user->last_name}")); } return $user->user_email; } - private static function _get_user_role_name($user) : string { + private static function _get_user_role_name($user): string + { return $user->roles[0] ?? false; } - private static function _get_static_pages() : array { + private static function _get_static_pages(): array + { $dashboard_page_id = get_option('dashboard_page_id'); $apps_page_id = get_option('apps_page_id'); $users_page_id = get_option('users_page_id'); @@ -102,47 +110,49 @@ private static function _get_static_pages() : array { $activity_page_id = get_option('activity_page_id'); $support_page_id = get_option('support_page_id'); - return array( - array( + return [ + [ 'link' => get_permalink($dashboard_page_id), 'title' => __('Dash'), 'icon' => get_page_icon($dashboard_page_id, '35px'), - ), - array( + ], + [ 'link' => get_permalink($apps_page_id), 'title' => get_the_title($apps_page_id), 'icon' => get_page_icon($apps_page_id, '35px'), - ), - array( + ], + [ 'link' => get_permalink($users_page_id), 'title' => get_the_title($users_page_id), 'icon' => get_page_icon($users_page_id, '35px'), - ), - array( + ], + [ 'link' => get_permalink($settings_page_id), 'title' => get_the_title($settings_page_id), 'icon' => get_page_icon($settings_page_id, '35px'), - ), - array( + ], + [ 'link' => get_permalink($activity_page_id), 'title' => get_the_title($activity_page_id), 'icon' => get_page_icon($activity_page_id, '35px'), - ), - array( + ], + [ 'link' => get_permalink($support_page_id), 'title' => get_the_title($support_page_id), 'icon' => get_page_icon($support_page_id, '35px'), - ), - ); + ], + ]; } - private static function _get_account_page() : string { + private static function _get_account_page(): string + { $account_page_id = get_option('account_page_id'); return get_permalink($account_page_id); } - private static function _get_page_routes() : array { + private static function _get_page_routes(): array + { $routes = get_post_meta(get_the_ID(), 'routes', true); - return !!$routes ? $routes : array(); + return !!$routes ? $routes : []; } -} \ No newline at end of file +} diff --git a/app/helpers/auth.php b/app/helpers/auth.php index e2942a9..d06ca1b 100644 --- a/app/helpers/auth.php +++ b/app/helpers/auth.php @@ -3,13 +3,14 @@ use Roots\WPConfig\Config; if (!function_exists('app_generate_autologin_token')) { - function app_generate_autologin_token(WP_User $user): string { + function app_generate_autologin_token(WP_User $user): string + { if (!is_dir(Config::get('MC_AUTOLOGIN_TOKENS_PATH'))) { mkdir(Config::get('MC_AUTOLOGIN_TOKENS_PATH')); } $hashed_email = base64_encode($user->user_email); - $filename = Config::get('MC_AUTOLOGIN_TOKENS_PATH')."/{$hashed_email}.token"; + $filename = Config::get('MC_AUTOLOGIN_TOKENS_PATH') . "/{$hashed_email}.token"; if (!file_exists($filename)) { touch($filename); } @@ -20,13 +21,14 @@ function app_generate_autologin_token(WP_User $user): string { } if (!function_exists('app_validate_autologin_token')) { - function app_validate_autologin_token(WP_User $user, string $token): bool { + function app_validate_autologin_token(WP_User $user, string $token): bool + { if (!is_dir(Config::get('MC_AUTOLOGIN_TOKENS_PATH'))) { mkdir(Config::get('MC_AUTOLOGIN_TOKENS_PATH'), 0755, true); } $hashed_email = base64_encode($user->user_email); - $filename = Config::get('MC_AUTOLOGIN_TOKENS_PATH')."/{$hashed_email}.token"; + $filename = Config::get('MC_AUTOLOGIN_TOKENS_PATH') . "/{$hashed_email}.token"; if (!file_exists($filename)) { return false; @@ -51,31 +53,31 @@ function app_validate_autologin_token(WP_User $user, string $token): bool { } } -if(!function_exists('app_update_sync_data')){ +if (!function_exists('app_update_sync_data')) { function app_update_sync_data( int $user_id, string $user_uuid, - string $uuid_file_name - ) : object { + string $uuid_file_name, + ): object { $last_modification_date = time(); $last_modification_hash = wp_generate_password(64); $user = get_user($user_id); $user_uuid_files = app_get_user_uuid_files($user_uuid); - $file_data = array(); + $file_data = []; $ext = '.user.uuid.json'; - foreach($user_uuid_files as $uuid_file) { + foreach ($user_uuid_files as $uuid_file) { $user_data = json_decode(file_get_contents($uuid_file)); $basename = basename($uuid_file, $ext); [$uuid, $user_id] = explode('.', $basename); - $file_data = (object)array( + $file_data = (object) [ 'wp_user' => $user, 'wp_user_meta' => get_user_meta($user_id), 'uuid' => $user_uuid, 'last_modification_hash' => $last_modification_hash, 'last_modification_date' => $last_modification_date, - ); - if(is_file($uuid_file)) { + ]; + if (is_file($uuid_file)) { $file_data = json_decode(file_get_contents($uuid_file)) ?? new \stdClass(); $file_data->wp_user->user_pass = $user->user_pass; $file_data->wp_user_meta = get_user_meta($user_id); diff --git a/app/helpers/cli.php b/app/helpers/cli.php index 14a1782..2099bed 100644 --- a/app/helpers/cli.php +++ b/app/helpers/cli.php @@ -1,7 +1,8 @@ exists()) { $user = $current_user->user_login; } - } else if (is_cli()) { + } elseif (is_cli()) { $user = __('Command Line Interface'); } @@ -27,4 +28,4 @@ function app_log($message): void { file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX); } -} \ No newline at end of file +} diff --git a/app/helpers/migrations.php b/app/helpers/migrations.php index 798399a..4888139 100644 --- a/app/helpers/migrations.php +++ b/app/helpers/migrations.php @@ -3,8 +3,9 @@ use Roots\WPConfig\Config; if (!function_exists('app_get_last_migration_from_code')) { - function app_get_last_migration_from_code(): ?string { - $migration_files = glob(Config::get('MC_MIGRATIONS_PATH').'/*.php'); + function app_get_last_migration_from_code(): ?string + { + $migration_files = glob(Config::get('MC_MIGRATIONS_PATH') . '/*.php'); if (!$migration_files) { return null; @@ -19,12 +20,13 @@ function app_get_last_migration_from_code(): ?string { } if (!function_exists('app_has_last_migration_run')) { - function app_has_last_migration_run($last_migration): bool { + function app_has_last_migration_run($last_migration): bool + { global $wpdb; - $table_name = $wpdb->prefix.'migrations'; + $table_name = $wpdb->prefix . 'migrations'; $applied_migrations = $wpdb->get_col("SELECT migration_name FROM $table_name"); return in_array($last_migration, $applied_migrations); } -} \ No newline at end of file +} diff --git a/app/helpers/pages.php b/app/helpers/pages.php index 02ff750..9900b60 100644 --- a/app/helpers/pages.php +++ b/app/helpers/pages.php @@ -1,7 +1,8 @@ 'site', 'author' => $user_id, 'posts_per_page' => 1, - )); + ]); if (count($user_has_a_site) > 0) { $site = $user_has_a_site[0]; @@ -24,7 +24,8 @@ function app_user_has_a_site(int $user_id): ?int { } if (!function_exists('app_site_is_active')) { - function app_site_is_active(int $site_id): bool { + function app_site_is_active(int $site_id): bool + { $site_conf = get_fields($site_id); if (!$site_conf) { return false; @@ -48,12 +49,15 @@ function app_site_is_active(int $site_id): bool { } if (!function_exists('app_generate_env_file_info')) { - function app_generate_env_file_info(int $queue_id, string $space_name, string $company_name): array { + function app_generate_env_file_info(int $queue_id, string $space_name, string $company_name): array + { $user_data = get_user(get_current_user_id()); - if (!$user_data) return array(); - $domain_current_site = $space_name.'.'.Config::get('APP_DOMAIN'); - $wp_home = Config::get('APP_PROTOCOL').$domain_current_site; - return array( + if (!$user_data) { + return []; + } + $domain_current_site = $space_name . '.' . Config::get('APP_DOMAIN'); + $wp_home = Config::get('APP_PROTOCOL') . $domain_current_site; + return [ 'wp_home' => $wp_home, 'domain_current_site' => $domain_current_site, 'company_name' => $company_name, @@ -72,19 +76,20 @@ function app_generate_env_file_info(int $queue_id, string $space_name, string $c 'logged_in_salt' => wp_generate_password(64), 'nonce_salt' => wp_generate_password(64), 'admin_email' => $user_data->user_email, - 'space_path' => Config::get('MC_SITES_PATH').'/'.$space_name, + 'space_path' => Config::get('MC_SITES_PATH') . '/' . $space_name, 'app_company' => Config::get('APP_COMPANY'), 'app_main_site' => Config::get('APP_MAIN_SITE'), 'sendgrid_api_key' => Config::get('SENDGRID_API_KEY'), 'sendgrid_api_url' => Config::get('SENDGRID_API_URL'), 'email_from' => Config::get('EMAIL_FROM'), 'email_from_name' => Config::get('EMAIL_FROM_NAME'), - ); + ]; } } if (!function_exists('app_generate_db_prefix')) { - function app_generate_db_prefix(int $length = 6): string { + function app_generate_db_prefix(int $length = 6): string + { $characters = 'abcdefghijklmnopqrstuvwxyz0123456789_'; $prefix = ''; @@ -92,12 +97,13 @@ function app_generate_db_prefix(int $length = 6): string { $prefix .= $characters[random_int(0, strlen($characters) - 1)]; } - return $prefix.'_'; + return $prefix . '_'; } } if (!function_exists('app_get_initial_page')) { - function app_get_initial_page(\WP_User $user): string { + function app_get_initial_page(\WP_User $user): string + { $dashboard_page_id = get_option('invoice_page_id'); $dashboard_url = get_permalink($dashboard_page_id); $is_child_site = Config::get('CHILD_SITE'); @@ -114,16 +120,16 @@ function app_get_initial_page(\WP_User $user): string { if ($site_id && $site_is_active) { $autologin_token = app_generate_autologin_token($user); - $initial_page = add_query_arg(array( + $initial_page = add_query_arg([ 'email' => urlencode(base64_encode($user->user_email)), 'autologin_key' => urlencode($autologin_token), - ), "{$site_uri}/auth/sign-in"); + ], "{$site_uri}/auth/sign-in"); } elseif ($site_id && !$site_is_active) { $autologin_token = app_generate_autologin_token($user); - $initial_page = add_query_arg(array( + $initial_page = add_query_arg([ 'autologin_key' => urlencode($autologin_token), 'installing' => true, - ), "{$site_uri}/content/space-install-setup.php"); + ], "{$site_uri}/content/space-install-setup.php"); } else { $create_page_id = get_option('create_page_id'); $initial_page = get_permalink($create_page_id); @@ -132,4 +138,4 @@ function app_get_initial_page(\WP_User $user): string { } return $initial_page; } -} \ No newline at end of file +} diff --git a/app/helpers/uuid.php b/app/helpers/uuid.php index a8864ff..b6113fb 100644 --- a/app/helpers/uuid.php +++ b/app/helpers/uuid.php @@ -4,7 +4,7 @@ if (!function_exists('app_get_user_uuid')) { function app_get_user_uuid( - int|\WP_User|null $user = null + int|\WP_User|null $user = null, ): string|null { $user_id = $user?->ID ?? $user ?? get_current_user_id(); if (!$user_id) { @@ -18,7 +18,7 @@ function app_get_user_uuid( if (!function_exists('app_get_post_uuid')) { function app_get_post_uuid( - int|\WP_Post|null $post = null + int|\WP_Post|null $post = null, ): string|null { $post_id = $post?->ID ?? $post ?? get_the_ID(); if (!$post_id) { @@ -29,13 +29,14 @@ function app_get_post_uuid( } } -if(!function_exists('app_uuid_exists')) { - function app_uuid_exists(string $uuid_string) : bool { +if (!function_exists('app_uuid_exists')) { + function app_uuid_exists(string $uuid_string): bool + { $exists = false; $space_directory = app_get_uuid_path(); $stored_uuids = glob($space_directory . '/*.uuid.json'); - if(count($stored_uuids)) { - $stored_uuids_basename = array_map(function($uuid_item) use ($uuid_string){ + if (count($stored_uuids)) { + $stored_uuids_basename = array_map(function ($uuid_item) use ($uuid_string) { $basename = basename($uuid_item, '.uuid.json'); $exploded_name = explode('.', $basename); return $exploded_name[0]; @@ -47,27 +48,29 @@ function app_uuid_exists(string $uuid_string) : bool { } } -if(!function_exists('app_get_uuid_path')) { - function app_get_uuid_path() : string { +if (!function_exists('app_get_uuid_path')) { + function app_get_uuid_path(): string + { $uuid_path = Config::get('MC_UUID_PATH'); - if(Config::get('SPACE_PATH')){ + if (Config::get('SPACE_PATH')) { $uuid_path = Config::get('SPACE_PATH') . '/uuid'; } return $uuid_path; } } -if(!function_exists('app_get_user_uuid_file_name')) { +if (!function_exists('app_get_user_uuid_file_name')) { function app_get_user_uuid_file_name( string $uuid, - int $id = null - ) : string { + int $id = null, + ): string { return Config::get('MC_UUID_PATH') . "/{$uuid}.{$id}.user.uuid.json"; } } -if(!function_exists('app_get_user_uuid_files')) { - function app_get_user_uuid_files($uuid) : array { +if (!function_exists('app_get_user_uuid_files')) { + function app_get_user_uuid_files($uuid): array + { return glob(Config::get('MC_UUID_PATH') . "/{$uuid}.*.user.uuid.json"); } -} \ No newline at end of file +} diff --git a/app/helpers/validation.php b/app/helpers/validation.php index abd1dc8..b106cd6 100644 --- a/app/helpers/validation.php +++ b/app/helpers/validation.php @@ -1,7 +1,8 @@ $label) { @@ -14,9 +15,9 @@ function app_validate_required($required_fields, $fields) : array { $message = sprintf(__('The %s field is required.'), $label); } } - return array( + return [ 'success' => $success, 'message' => $message, - ); + ]; } -} \ No newline at end of file +} diff --git a/app/migrations/1736518306-first-migration-for-all-sites-migration.php b/app/migrations/1736518306-first-migration-for-all-sites-migration.php index 06485de..a7f3087 100644 --- a/app/migrations/1736518306-first-migration-for-all-sites-migration.php +++ b/app/migrations/1736518306-first-migration-for-all-sites-migration.php @@ -13,110 +13,118 @@ wp_delete_comment(1, true); app_log("\t->Adding homepage on {$site_name}"); - $home_page_id = wp_insert_post(array( + $home_page_id = wp_insert_post([ 'post_type' => 'page', 'post_title' => __('Home', APP_THEME_LOCALE), 'post_status' => 'publish', 'post_author' => 1, 'post_name' => '', - 'page_template' => 'home.php' - )); + 'page_template' => 'home.php', + ]); update_option('page_on_front', $home_page_id); update_option('show_on_front', 'page'); app_log("\t->Adding auth page on {$site_name}"); - $auth_page_id = wp_insert_post(array( + $auth_page_id = wp_insert_post([ 'post_type' => 'page', 'post_title' => __('Auth', APP_THEME_LOCALE), 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'auth', 'page_template' => 'auth-template.php', - 'post_content' => '' - )); + 'post_content' => << +

+ + + +

Auth Module for Mody Cloud

+ +EOF, + ]); update_option('authentication_page_id', $auth_page_id); app_log("\t->Adding dashboard page on {$site_name}"); - $dashboard_page_id = wp_insert_post(array( + $dashboard_page_id = wp_insert_post([ 'post_type' => 'page', 'post_title' => __('Dashboard', APP_THEME_LOCALE), 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'dashboard', - 'post_content' => '' - )); + 'post_content' => '', + ]); update_option('dashboard_page_id', $dashboard_page_id); app_log("\t->Adding apps page on {$site_name}"); - $apps_page_id = wp_insert_post(array( + $apps_page_id = wp_insert_post([ 'post_type' => 'page', 'post_title' => __('Apps', APP_THEME_LOCALE), 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'apps', - 'post_content' => '' - )); + 'post_content' => '', + ]); update_option('apps_page_id', $apps_page_id); app_log("\t->Adding users page on {$site_name}"); - $users_page_id = wp_insert_post(array( + $users_page_id = wp_insert_post([ 'post_type' => 'page', 'post_title' => __('Users', APP_THEME_LOCALE), 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'users', - 'post_content' => '' - )); + 'post_content' => '', + ]); update_option('users_page_id', $users_page_id); app_log("\t->Adding settings page on {$site_name}"); - $settings_page_id = wp_insert_post(array( + $settings_page_id = wp_insert_post([ 'post_type' => 'page', 'post_title' => __('Settings', APP_THEME_LOCALE), 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'settings', - 'post_content' => '' - )); + 'post_content' => '', + ]); update_option('settings_page_id', $settings_page_id); app_log("\t->Adding activity page on {$site_name}"); - $activity_page_id = wp_insert_post(array( + $activity_page_id = wp_insert_post([ 'post_type' => 'page', 'post_title' => __('Activity', APP_THEME_LOCALE), 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'activity', - 'post_content' => '' - )); + 'post_content' => '', + ]); update_option('activity_page_id', $activity_page_id); app_log("\t->Adding support page on {$site_name}"); - $support_page_id = wp_insert_post(array( + $support_page_id = wp_insert_post([ 'post_type' => 'page', 'post_title' => __('Support', APP_THEME_LOCALE), 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'support', - 'post_content' => '' - )); + 'post_content' => '', + ]); update_option('support_page_id', $support_page_id); app_log("\t->Syncing admin password on {$site_name}"); $user_id = 1; $user = get_user($user_id); $email = $user->user_email; - $file_name = base64_encode($email).'.txt'; - $file_path = Config::get('MC_USERS_PATH')."/$file_name"; + $file_name = base64_encode($email) . '.txt'; + $file_path = Config::get('MC_USERS_PATH') . "/$file_name"; global $wpdb; if (is_file($file_path)) { $password_hash = file_get_contents($file_path); $wpdb->query( $wpdb->prepare( - "UPDATE {$wpdb->prefix}"."users SET user_pass = %s WHERE ID = %d", + "UPDATE {$wpdb->prefix}" . "users SET user_pass = %s WHERE ID = %d", $password_hash, - $user_id - ) + $user_id, + ), ); } update_user_meta($user_id, '_user_is_active', 1); @@ -128,8 +136,8 @@ $wpdb->update( $wpdb->options, - array('option_value' => '/%postname%/'), - array('option_name' => 'permalink_structure') + ['option_value' => '/%postname%/'], + ['option_name' => 'permalink_structure'], ); update_post_meta($dashboard_page_id, 'icon', ''); @@ -139,20 +147,24 @@ update_post_meta($activity_page_id, 'icon', ''); update_post_meta($support_page_id, 'icon', ''); - $main_cta = array( + $main_cta = [ 'route' => "/invoices/new", 'title' => __('New invoice', APP_THEME_LOCALE), - ); + ]; update_option('main_cta', $main_cta); - $account_page_id = wp_insert_post(array( + $account_page_id = wp_insert_post([ 'post_type' => 'page', 'post_title' => __('Account', APP_THEME_LOCALE), 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'account', - 'post_content' => '' - )); + 'post_content' => << + + +EOF, + ]); update_option('account_page_id', $account_page_id); update_post_meta($account_page_id, 'main_cta', $main_cta); @@ -160,41 +172,43 @@ $account_permalink = get_permalink($account_page_id); - $pages_slugs = array( - $dashboard_page_id => array( + $pages_slugs = [ + $dashboard_page_id => [ '/apps/market' => __('Add your , APP_THEME_LOCALEfirst app'), - ), - $apps_page_id => array( + ], + $apps_page_id => [ 'all' => __('All apps', APP_THEME_LOCALE), 'installed' => __('Installed'), APP_THEME_LOCALE, 'market' => __('Market'), APP_THEME_LOCALE, - ), - $users_page_id => array( + ], + $users_page_id => [ 'all' => __('All users', APP_THEME_LOCALE), 'add' => __('Add user', APP_THEME_LOCALE), $account_permalink => __('My account', APP_THEME_LOCALE), - ), - $account_page_id => array( + ], + $account_page_id => [ '/account/' => __('Account', APP_THEME_LOCALE), '/account/settings' => __('Settings', APP_THEME_LOCALE), '/account/security' => __('Security', APP_THEME_LOCALE), - ), - $settings_page_id => array( + ], + $settings_page_id => [ 'company-info' => __('Company info', APP_THEME_LOCALE), - ), - $activity_page_id => array( - 'all' => __('All activity', APP_THEME_LOCALE) - ) - ); + ], + $activity_page_id => [ + 'all' => __('All activity', APP_THEME_LOCALE), + ], + ]; - $invoice_page_id = wp_insert_post(array( + $invoice_page_id = wp_insert_post([ 'post_type' => 'page', 'post_title' => __('Invoices', APP_THEME_LOCALE), 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'invoices', - 'post_content' => '' - )); + 'post_content' => <<<'EOF' +

Example – hello from the saved content!

+EOF, + ]); update_option('invoice_page_id', $invoice_page_id); foreach ($pages_slugs as $page_id => $routes) { diff --git a/config/application.php b/config/application.php index 48cd864..8e359ee 100644 --- a/config/application.php +++ b/config/application.php @@ -236,6 +236,6 @@ function app_get_subdomain(): string define('ABSPATH', $webroot_dir . '/wp/'); } -if(!defined('COOKIE_DOMAIN')) { +if (!defined('COOKIE_DOMAIN')) { define('COOKIE_DOMAIN', env('COOKIE_DOMAIN') ?? null); -} \ No newline at end of file +} diff --git a/config/blocks.webpack.config.js b/config/blocks.webpack.config.js new file mode 100644 index 0000000..74e52e1 --- /dev/null +++ b/config/blocks.webpack.config.js @@ -0,0 +1,26 @@ +const path = require( 'path' ); +const defaults = require( '@wordpress/scripts/config/webpack.config.js' ); + +module.exports = { + ...defaults, + module: { + ...defaults.module, + rules: [ + ...defaults.module.rules, + { + test: /\.(png|svg|jpg|jpeg|gif)$/i, + type: 'asset/resource', + }, + { + test: /\.(js|jsx)$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: [ '@babel/preset-react' ], + }, + }, + }, + ], + }, +}; diff --git a/config/webpack.config.js b/config/webpack.config.js index 487e5d4..5d7a3e9 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -1,49 +1,50 @@ -const path = require('path'); -const defaults = require('@wordpress/scripts/config/webpack.config.js'); +const path = require( 'path' ); +const defaults = require( '@wordpress/scripts/config/webpack.config.js' ); -module.exports = (env) => ({ - ...defaults, - entry: { - 'app': path.resolve(process.cwd(), 'resources/scripts', 'app.js'), - 'editor': path.resolve(process.cwd(), 'resources/scripts', 'editor.js'), - 'auth': path.resolve(process.cwd(), 'resources/scripts', 'auth.js'), - 'site': path.resolve(process.cwd(), 'resources/scripts', 'site.js'), - 'account': path.resolve(process.cwd(), 'resources/scripts', 'account.js'), - }, - output: { - filename: '[name].js', - path: path.resolve(process.cwd(), 'dist'), - }, - resolve: { - ...defaults.resolve, - ...{ - alias: { - ...defaults.resolve.alias, - ...{ - '@modycloud': path.resolve(process.cwd(), 'resources/scripts'), - '@mcscss': path.resolve(process.cwd(), 'resources/scss'), - } - } - } - }, - module: { - ...defaults.module, - rules: [ - ...defaults.module.rules, - { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: 'asset/resource', - }, - { - test: /\.(js|jsx)$/, - exclude: /node_modules/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-react'], - }, - }, - }, - ] - } -}); \ No newline at end of file +module.exports = () => ( { + ...defaults, + entry: { + app: path.resolve( process.cwd(), 'resources/scripts', 'app.js' ), + editor: path.resolve( process.cwd(), 'resources/scripts', 'editor.js' ), + site: path.resolve( process.cwd(), 'resources/scripts', 'site.js' ), + }, + output: { + filename: '[name].js', + path: path.resolve( process.cwd(), 'dist' ), + }, + resolve: { + ...defaults.resolve, + ...{ + alias: { + ...defaults.resolve.alias, + ...{ + '@modycloud': path.resolve( + process.cwd(), + 'resources/scripts' + ), + '@mcscss': path.resolve( process.cwd(), 'resources/scss' ), + }, + }, + }, + }, + module: { + ...defaults.module, + rules: [ + ...defaults.module.rules, + { + test: /\.(png|svg|jpg|jpeg|gif)$/i, + type: 'asset/resource', + }, + { + test: /\.(js|jsx)$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: [ '@babel/preset-react' ], + }, + }, + }, + ], + }, +} ); diff --git a/package.json b/package.json index df1aec9..8cb0b2b 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,20 @@ "description": "", "main": "index.js", "scripts": { - "build": "wp-scripts build --webpack-src-dir=resources --output-path=web/content/themes/cloud/dist --config config/webpack.config.js", - "dev": "wp-scripts start --webpack-src-dir=resources --output-path=web/content/themes/cloud/dist --config config/webpack.config.js", - "translate": "pnpm run translate:pot", - "translate:twig": "wp i18n make-pot . $(pwd)/src/languages/twig.pot --include=\"$(pwd)src/app/**/*.twig\"", - "translate:react": "wp i18n make-pot . $(pwd)/src/languages/react.pot --include=\"src/script/**/*.jsx\"", - "translate:js": "wp i18n make-pot . $(pwd)/src/languages/app.pot --include=\"src/**/*.js\"", - "translate:pot": "wp i18n make-pot . $(pwd)/src/languages/app.pot --include=\"src\"" + "build": "pnpm run build:app && pnpm run build:blocks", + "build:app": "wp-scripts build --webpack-src-dir=resources --output-path=web/content/themes/cloud/dist --config config/webpack.config.js", + "build:blocks": "wp-scripts build --webpack-src-dir=resources/blocks --webpack-copy-php --output-path=web/content/themes/cloud/blocks --config config/blocks.webpack.config.js", + "dev": "concurrently \"pnpm run dev:app\" \"pnpm run dev:blocks\"", + "dev:app": "wp-scripts start --webpack-src-dir=resources --output-path=web/content/themes/cloud/dist --config config/webpack.config.js", + "dev:blocks": "wp-scripts start --webpack-src-dir=resources/blocks --webpack-copy-php --output-path=web/content/themes/cloud/blocks --config config/blocks.webpack.config.js", + "translate": "pnpm run translate:twig;pnpm run translate:react;pnpm run translate:js", + "translate:twig": "wp i18n make-pot . $(pwd)/web/content/languages/twig.pot --include=\"$(pwd)resources/views/**/*.twig\"", + "translate:react": "wp i18n make-pot . $(pwd)/web/content/languages/react.pot --include=\"resources/scripts/**/*.jsx\"", + "translate:js": "wp i18n make-pot . $(pwd)/web/content/languages/app.pot --include=\"resources/**/*.js\"", + "lint": "pnpm lint:css && pnpm lint:js && pnpm lint:jsx && composer run lint", + "lint:css": "wp-scripts lint-style 'resources/**/*.scss'", + "lint:js": "wp-scripts lint-js 'resources/**/*.js'", + "lint:jsx": "wp-scripts lint-js 'resources/**/*.jsx'" }, "repository": { "type": "git", @@ -23,33 +30,36 @@ }, "homepage": "https://github.com/ModySolutions/cloud-app", "dependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.26.10", "@babel/preset-react": "^7.26.3", - "@wordpress/components": "^28.1.0", - "@wordpress/dom-ready": "^4.15.0", - "@wordpress/element": "^6.15.1", - "@wordpress/i18n": "^5.14.0", - "aos": "^2.3.4", - "babel-loader": "^9.2.1", - "css-loader": "^7.1.2", + "@wordpress/components": "^29.6.0", + "@wordpress/dom-ready": "^4.20.0", + "@wordpress/element": "^6.20.0", + "@wordpress/i18n": "^5.20.0", "gettext-parser": "^8.0.0", "glob": "^11.0.1", - "react-router-dom": "^7.1.1", - "react-toastify": "^11.0.2", - "sass-loader": "^16.0.4", - "scss-loader": "^0.0.1", - "style-loader": "^4.0.0", - "swiper": "^11.1.4", - "uuid": "^11.0.5", - "validator": "^13.12.0" + "react-router-dom": "^7.4.0", + "react-toastify": "^11.0.5", + "swiper": "^11.2.6", + "uuid": "^11.1.0", + "validator": "^13.15.0" }, "devDependencies": { - "@wordpress/block-editor": "^13.1.0", - "@wordpress/blocks": "^13.1.0", - "@wordpress/icons": "^10.1.0", - "@wordpress/scripts": "^27.8.0", - "webpack": "^5.89.0", - "webpack-cli": "^5.1.4", - "webpack-manifest-plugin": "^5.0.0" + "@wordpress/block-editor": "^14.15.0", + "@wordpress/blocks": "^14.9.0", + "@wordpress/icons": "^10.20.0", + "@wordpress/scripts": "^30.13.0", + "@wordpress/stylelint-config": "^23.12.0", + "babel-loader": "^10.0.0", + "concurrently": "^9.1.2", + "css-loader": "^7.1.2", + "sass-loader": "^16.0.5", + "scss-loader": "^0.0.1", + "style-loader": "^4.0.0", + "stylelint": "^16.17.0", + "stylelint-config-recommended": "^15.0.0", + "webpack": "^5.98.0", + "webpack-cli": "^6.0.1", + "webpack-manifest-plugin": "^5.0.1" } } diff --git a/pint.json b/pint.json index caa0feb..5fea03b 100644 --- a/pint.json +++ b/pint.json @@ -1,8 +1,21 @@ { "preset": "per", "exclude": [ + "config/autologin-tokens", + "config/logout-info", + "config/sites", + "config/users", + "config/uuid", + "logs", + "node_modules", + "resources", "web/wp", - "web/app/mu-plugins/bedrock-disallow-indexing", - "web/app/plugins" + "web/content/mu-plugins", + "web/content/plugins", + "web/content/languages", + "web/content/themes/cloud/acf-json", + "web/content/themes/cloud/blocks", + "web/content/themes/cloud/dist", + "web/content/themes/cloud/images" ] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a6ae54..3ff8d12 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,32 +9,23 @@ importers: .: dependencies: '@babel/core': - specifier: ^7.26.0 - version: 7.26.0 + specifier: ^7.26.10 + version: 7.26.10 '@babel/preset-react': specifier: ^7.26.3 - version: 7.26.3(@babel/core@7.26.0) + version: 7.26.3(@babel/core@7.26.10) '@wordpress/components': - specifier: ^28.1.0 - version: 28.13.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + specifier: ^29.6.0 + version: 29.6.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/dom-ready': - specifier: ^4.15.0 - version: 4.15.0 + specifier: ^4.20.0 + version: 4.20.0 '@wordpress/element': - specifier: ^6.15.1 - version: 6.15.1 + specifier: ^6.20.0 + version: 6.20.0 '@wordpress/i18n': - specifier: ^5.14.0 - version: 5.15.1 - aos: - specifier: ^2.3.4 - version: 2.3.4 - babel-loader: - specifier: ^9.2.1 - version: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1) - css-loader: - specifier: ^7.1.2 - version: 7.1.2(webpack@5.97.1) + specifier: ^5.20.0 + version: 5.20.0 gettext-parser: specifier: ^8.0.0 version: 8.0.0 @@ -42,51 +33,69 @@ importers: specifier: ^11.0.1 version: 11.0.1 react-router-dom: - specifier: ^7.1.1 - version: 7.1.1(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + specifier: ^7.4.0 + version: 7.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-toastify: - specifier: ^11.0.2 - version: 11.0.2(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - sass-loader: - specifier: ^16.0.4 - version: 16.0.4(sass@1.83.1)(webpack@5.97.1) - scss-loader: - specifier: ^0.0.1 - version: 0.0.1 - style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.97.1) + specifier: ^11.0.5 + version: 11.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) swiper: - specifier: ^11.1.4 - version: 11.2.0 + specifier: ^11.2.6 + version: 11.2.6 uuid: - specifier: ^11.0.5 - version: 11.0.5 + specifier: ^11.1.0 + version: 11.1.0 validator: - specifier: ^13.12.0 - version: 13.12.0 + specifier: ^13.15.0 + version: 13.15.0 devDependencies: '@wordpress/block-editor': - specifier: ^13.1.0 - version: 13.4.0(@emotion/is-prop-valid@1.3.1)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + specifier: ^14.15.0 + version: 14.15.0(@babel/core@7.26.10)(@emotion/is-prop-valid@1.3.1)(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.98.0) '@wordpress/blocks': - specifier: ^13.1.0 - version: 13.10.0(react@18.3.1) + specifier: ^14.9.0 + version: 14.9.0(react@18.3.1) '@wordpress/icons': - specifier: ^10.1.0 - version: 10.15.1(react@18.3.1) + specifier: ^10.20.0 + version: 10.20.0(react@18.3.1) '@wordpress/scripts': - specifier: ^27.8.0 - version: 27.9.0(@playwright/test@1.49.1)(@types/eslint@9.6.1)(@types/node@22.10.5)(@types/webpack@4.41.40)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)(type-fest@3.13.1)(typescript@5.7.2) + specifier: ^30.13.0 + version: 30.13.0(@playwright/test@1.51.1)(@types/eslint@9.6.1)(@types/node@22.13.14)(@types/webpack@4.41.40)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@3.13.1)(typescript@5.8.2) + '@wordpress/stylelint-config': + specifier: ^23.12.0 + version: 23.12.0(postcss@8.5.3)(stylelint@16.17.0(typescript@5.8.2)) + babel-loader: + specifier: ^10.0.0 + version: 10.0.0(@babel/core@7.26.10)(webpack@5.98.0) + concurrently: + specifier: ^9.1.2 + version: 9.1.2 + css-loader: + specifier: ^7.1.2 + version: 7.1.2(webpack@5.98.0) + sass-loader: + specifier: ^16.0.5 + version: 16.0.5(sass@1.86.0)(webpack@5.98.0) + scss-loader: + specifier: ^0.0.1 + version: 0.0.1 + style-loader: + specifier: ^4.0.0 + version: 4.0.0(webpack@5.98.0) + stylelint: + specifier: ^16.17.0 + version: 16.17.0(typescript@5.8.2) + stylelint-config-recommended: + specifier: ^15.0.0 + version: 15.0.0(stylelint@16.17.0(typescript@5.8.2)) webpack: - specifier: ^5.89.0 - version: 5.97.1(webpack-cli@5.1.4) + specifier: ^5.98.0 + version: 5.98.0(webpack-cli@6.0.1) webpack-cli: - specifier: ^5.1.4 - version: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.97.1) + specifier: ^6.0.1 + version: 6.0.1(webpack-dev-server@4.15.2)(webpack@5.98.0) webpack-manifest-plugin: - specifier: ^5.0.0 - version: 5.0.0(webpack@5.97.1) + specifier: ^5.0.1 + version: 5.0.1(webpack@5.98.0) packages: @@ -113,47 +122,51 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.3': - resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.26.0': - resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + '@babel/core@7.25.7': + resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.25.9': - resolution: {integrity: sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==} + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/eslint-parser@7.25.7': + resolution: {integrity: sha512-B+BO9x86VYsQHimucBAL1fxTJKF4wyKY6ZVzee9QgzdZOUfs3BaR6AQrgoGrRI+7IFS1wUz/VyQ+SoBcSpdPbw==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.26.3': - resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} + '@babel/generator@7.27.0': + resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + '@babel/helper-compilation-targets@7.27.0': + resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.25.9': - resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + '@babel/helper-create-class-features-plugin@7.27.0': + resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.26.3': - resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + '@babel/helper-create-regexp-features-plugin@7.27.0': + resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.3': - resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + '@babel/helper-define-polyfill-provider@0.6.4': + resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -175,8 +188,8 @@ packages: resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} '@babel/helper-remap-async-to-generator@7.25.9': @@ -185,8 +198,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.25.9': - resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -211,12 +224,12 @@ packages: resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.26.0': - resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + '@babel/helpers@7.27.0': + resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.3': - resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} engines: {node: '>=6.0.0'} hasBin: true @@ -277,6 +290,16 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-export-namespace-from@7.8.3': + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.26.0': resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} engines: {node: '>=6.9.0'} @@ -365,8 +388,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.25.9': - resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} + '@babel/plugin-transform-async-generator-functions@7.26.8': + resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -377,14 +400,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.25.9': - resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} + '@babel/plugin-transform-block-scoped-functions@7.26.5': + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.25.9': - resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + '@babel/plugin-transform-block-scoping@7.27.0': + resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -455,8 +478,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.25.9': - resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + '@babel/plugin-transform-for-of@7.26.9': + resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -527,8 +550,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': - resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -605,6 +628,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.25.7': + resolution: {integrity: sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.25.9': resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} engines: {node: '>=6.9.0'} @@ -617,8 +646,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.25.9': - resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + '@babel/plugin-transform-regenerator@7.27.0': + resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -635,8 +664,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-runtime@7.25.9': - resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==} + '@babel/plugin-transform-runtime@7.25.7': + resolution: {integrity: sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -659,20 +688,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.25.9': - resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + '@babel/plugin-transform-template-literals@7.26.8': + resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.25.9': - resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} + '@babel/plugin-transform-typeof-symbol@7.27.0': + resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.26.3': - resolution: {integrity: sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==} + '@babel/plugin-transform-typescript@7.27.0': + resolution: {integrity: sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -701,8 +730,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.26.0': - resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} + '@babel/preset-env@7.25.7': + resolution: {integrity: sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-env@7.26.9': + resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -718,8 +753,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.26.0': - resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + '@babel/preset-typescript@7.25.7': + resolution: {integrity: sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.27.0': + resolution: {integrity: sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -728,35 +769,66 @@ packages: resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.26.0': - resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + '@babel/template@7.27.0': + resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.4': - resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} + '@babel/traverse@7.27.0': + resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.3': - resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + '@babel/types@7.27.0': + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@csstools/selector-specificity@2.2.0': - resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/css-parser-algorithms@3.0.4': + resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-tokenizer@3.0.3': + resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} + engines: {node: '>=18'} + + '@csstools/media-query-list-parser@3.0.1': + resolution: {integrity: sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.1 + '@csstools/css-tokenizer': ^3.0.1 + + '@csstools/media-query-list-parser@4.0.2': + resolution: {integrity: sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} + engines: {node: '>=18'} peerDependencies: - postcss-selector-parser: ^6.0.10 + postcss-selector-parser: ^7.0.0 '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} + '@discoveryjs/json-ext@0.6.3': + resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} + engines: {node: '>=14.17.0'} + + '@dual-bundle/import-meta-resolve@4.1.0': + resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -818,8 +890,8 @@ packages: resolution: {integrity: sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==} engines: {node: '>=16'} - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + '@eslint-community/eslint-utils@4.5.1': + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -828,38 +900,14 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.19.1': - resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.9.1': - resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/eslintrc@3.2.0': - resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.17.0': - resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.5': - resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.2.4': - resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/core@1.6.9': resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} @@ -875,20 +923,27 @@ packages: '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@formatjs/ecma402-abstract@2.3.4': + resolution: {integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==} + + '@formatjs/fast-memoize@2.2.7': + resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} + + '@formatjs/icu-messageformat-parser@2.11.2': + resolution: {integrity: sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==} + + '@formatjs/icu-skeleton-parser@1.8.14': + resolution: {integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==} + + '@formatjs/intl-localematcher@0.6.1': + resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==} + '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -902,14 +957,6 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.1': - resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} - engines: {node: '>=18.18'} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1009,6 +1056,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@keyv/serialize@1.0.3': + resolution: {integrity: sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==} + '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -1027,94 +1077,97 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@parcel/watcher-android-arm64@2.5.0': - resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.0': - resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.0': - resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.0': - resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.0': - resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm-musl@2.5.0': - resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm64-glibc@2.5.0': - resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-arm64-musl@2.5.0': - resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-x64-glibc@2.5.0': - resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-linux-x64-musl@2.5.0': - resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-win32-arm64@2.5.0': - resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.0': - resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] - '@parcel/watcher-win32-x64@2.5.0': - resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@parcel/watcher@2.5.0': - resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + '@paulirish/trace_engine@0.0.50': + resolution: {integrity: sha512-ktkbISnr0T9dkOxtnEadjYsbArMcvX2Wp8zwgyIP6KW0eOk2Oe2s49BY4v0qdE3uQdVv/GDdQ6MnoIFuYNJ9pg==} + + '@pkgr/core@0.2.0': + resolution: {integrity: sha512-vsJDAkYR6qCPu+ioGScGiMYR7LvZYIXh/dlQeviqoTWNCVfKTLYD/LkNWH4Mxsv2a5vpIRc77FN5DnmK1eBggQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.49.1': - resolution: {integrity: sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==} + '@playwright/test@1.51.1': + resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==} engines: {node: '>=18'} hasBin: true @@ -1147,15 +1200,15 @@ packages: '@polka/url@1.0.0-next.28': resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} - '@puppeteer/browsers@1.4.6': - resolution: {integrity: sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==} - engines: {node: '>=16.3.0'} + '@puppeteer/browsers@2.6.1': + resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==} + engines: {node: '>=18'} + hasBin: true + + '@puppeteer/browsers@2.8.0': + resolution: {integrity: sha512-yTwt2KWRmCQAfhvbCRjebaSX8pV1//I0Y3g+A7f/eS7gf0l4eRJoUCvcYdVtboeU4CTOZQuqYbZNS8aBYb8ROQ==} + engines: {node: '>=18'} hasBin: true - peerDependencies: - typescript: '>= 4.7.4' - peerDependenciesMeta: - typescript: - optional: true '@radix-ui/primitive@1.1.1': resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} @@ -1178,8 +1231,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.1.4': - resolution: {integrity: sha512-Ur7EV1IwQGCyaAuyDRiOLA5JIUZxELJljF+MbM/2NC0BYwfuRrbpS30BiQBJrVruscgUkieKkqXYDOoByaxIoA==} + '@radix-ui/react-dialog@1.1.6': + resolution: {integrity: sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1191,8 +1244,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dismissable-layer@1.1.3': - resolution: {integrity: sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==} + '@radix-ui/react-dismissable-layer@1.1.5': + resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1213,8 +1266,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-focus-scope@1.1.1': - resolution: {integrity: sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==} + '@radix-ui/react-focus-scope@1.1.2': + resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1235,8 +1288,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-portal@1.1.3': - resolution: {integrity: sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==} + '@radix-ui/react-portal@1.1.4': + resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1261,8 +1314,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@2.0.1': - resolution: {integrity: sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==} + '@radix-ui/react-primitive@2.0.2': + resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1274,8 +1327,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slot@1.1.1': - resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} + '@radix-ui/react-slot@1.1.2': + resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -1346,32 +1399,51 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@remote-ui/rpc@1.4.5': + resolution: {integrity: sha512-Cr+06niG/vmE4A9YsmaKngRuuVSWKMY42NMwtZfy+gctRWGu6Wj9BWuMJg5CEp+JTkRBPToqT5rqnrg1G/Wvow==} + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@sentry/core@6.19.7': - resolution: {integrity: sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==} - engines: {node: '>=6'} + '@sentry-internal/tracing@7.120.3': + resolution: {integrity: sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg==} + engines: {node: '>=8'} - '@sentry/hub@6.19.7': - resolution: {integrity: sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==} - engines: {node: '>=6'} + '@sentry/core@7.120.3': + resolution: {integrity: sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==} + engines: {node: '>=8'} - '@sentry/minimal@6.19.7': - resolution: {integrity: sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==} - engines: {node: '>=6'} + '@sentry/integrations@7.120.3': + resolution: {integrity: sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ==} + engines: {node: '>=8'} - '@sentry/node@6.19.7': - resolution: {integrity: sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==} - engines: {node: '>=6'} + '@sentry/node@7.120.3': + resolution: {integrity: sha512-t+QtekZedEfiZjbkRAk1QWJPnJlFBH/ti96tQhEq7wmlk3VszDXraZvLWZA0P2vXyglKzbWRGkT31aD3/kX+5Q==} + engines: {node: '>=8'} - '@sentry/types@6.19.7': - resolution: {integrity: sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==} - engines: {node: '>=6'} + '@sentry/types@7.120.3': + resolution: {integrity: sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==} + engines: {node: '>=8'} - '@sentry/utils@6.19.7': - resolution: {integrity: sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==} - engines: {node: '>=6'} + '@sentry/utils@7.120.3': + resolution: {integrity: sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==} + engines: {node: '>=8'} + + '@shopify/web-worker@6.4.0': + resolution: {integrity: sha512-RvY1mgRyAqawFiYBvsBkek2pVK4GVpV9mmhWFCZXwx01usxXd2HMhKNTFeRYhSp29uoUcfBlKZAwCwQzt826tg==} + engines: {node: '>=18.12.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + peerDependencies: + '@babel/core': ^7.0.0 + webpack: ^5.38.0 + webpack-virtual-modules: ^0.4.3 || ^0.5.0 || ^0.6.0 + peerDependenciesMeta: + '@babel/core': + optional: true + webpack: + optional: true + webpack-virtual-modules: + optional: true '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -1391,6 +1463,12 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@stylistic/stylelint-plugin@3.1.2': + resolution: {integrity: sha512-tylFJGMQo62alGazK74MNxFjMagYOHmBZiePZFOJK2n13JZta0uVkB3Bh5qodUmOLtRH+uxH297EibK14UKm8g==} + engines: {node: ^18.12 || >=20.9} + peerDependencies: + stylelint: ^16.8.0 + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -1501,8 +1579,8 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/babel__traverse@7.20.7': + resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -1525,14 +1603,14 @@ packages: '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - '@types/express-serve-static-core@5.0.4': - resolution: {integrity: sha512-5kz9ScmzBdzTgB/3susoCgfqNDzBjvLL4taparufgSvlwjdLy6UyUy9T/tCpYd2GIdIilCatC4iSQS0QSYHt0w==} + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} @@ -1552,8 +1630,8 @@ packages: '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - '@types/http-proxy@1.17.15': - resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} + '@types/http-proxy@1.17.16': + resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -1588,8 +1666,8 @@ packages: '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - '@types/node@22.10.5': - resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} + '@types/node@22.13.14': + resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1600,8 +1678,8 @@ packages: '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - '@types/qs@6.9.17': - resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -1611,14 +1689,14 @@ packages: peerDependencies: '@types/react': ^18.0.0 - '@types/react@18.3.18': - resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + '@types/react@18.3.20': + resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/semver@7.7.0': + resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} '@types/send@0.17.4': resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} @@ -1653,8 +1731,8 @@ packages: '@types/webpack@4.41.40': resolution: {integrity: sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw==} - '@types/ws@8.5.13': - resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} + '@types/ws@8.18.0': + resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -1750,8 +1828,8 @@ packages: resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} - '@ungap/structured-clone@1.2.1': - resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} '@use-gesture/core@10.3.1': resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} @@ -1813,6 +1891,13 @@ packages: webpack: 5.x.x webpack-cli: 5.x.x + '@webpack-cli/configtest@3.0.1': + resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==} + engines: {node: '>=18.12.0'} + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + '@webpack-cli/info@2.0.2': resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} engines: {node: '>=14.15.0'} @@ -1820,6 +1905,13 @@ packages: webpack: 5.x.x webpack-cli: 5.x.x + '@webpack-cli/info@3.0.1': + resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==} + engines: {node: '>=18.12.0'} + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + '@webpack-cli/serve@2.0.5': resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} engines: {node: '>=14.15.0'} @@ -1831,306 +1923,287 @@ packages: webpack-dev-server: optional: true - '@wordpress/a11y@4.15.1': - resolution: {integrity: sha512-FQmTpffgFw2M/7MbgD83OemFWMQM05oomnkqMYtTKaJo5WPn4eL5wjJ+wk+XjeT+SdflQK0ZOgeEns998USdVA==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/api-fetch@6.55.0': - resolution: {integrity: sha512-1HrCUsJdeRY5Y0IjplotINwqMRO81e7O7VhBScuKk7iOuDm/E1ioKv2uLGnPNWziYu+Zf025byxOqVzXDyM2gw==} - engines: {node: '>=12'} + '@webpack-cli/serve@3.0.1': + resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==} + engines: {node: '>=18.12.0'} + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true - '@wordpress/api-fetch@7.15.1': - resolution: {integrity: sha512-O8o/58GVLrCc5waA+IeyGcjCf/4dYNpZipKNY2y+slE6OwhjSPSvTKn4L9XhuAZsOdxe4Yqykg995+m6Y1Ivzg==} + '@wordpress/a11y@4.20.0': + resolution: {integrity: sha512-hyFKC3D1o0Cvy1HeFgujsuW9gTrwVL4DVIfnQytG2+gMFaDyux4Qmzyg2e3k71BKlHn7J28Q3i0xNqC2k7ZoFw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/autop@4.15.0': - resolution: {integrity: sha512-YurU5nwpxer43aQtaLC2UK4w6gccjfvYAaurlxFwC4b74+G7c1uS6PAjttIHUK8YsKVwWZTlDumuS7UeWTtXbg==} + '@wordpress/api-fetch@7.20.0': + resolution: {integrity: sha512-EeV8xaagQohoWdiVGtNxszGvWeTkkpmhm8EsAC6KM8Cb0qZminGKy0eDn33voD14UZHhNcm2bc2Ka9WZWnlIYQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/babel-plugin-import-jsx-pragma@4.41.0': - resolution: {integrity: sha512-hYxj2Uobxk86ctlfaJou9v13XqXZ30yx4ZwRNu5cH5/LWXe2MIXBTPv7dUk6wqN/qFOjsFvP9jCB0NsW6MnkrA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.12.9 + '@wordpress/autop@4.20.0': + resolution: {integrity: sha512-4IjY1sB/nzBciuz5NYsSqgbVEO185Z5YjmLhnJsk3kM1ub5UaLvA5f9TiJZuBcalJC3umA6GHqlF98owAREzbA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/babel-preset-default@7.42.0': - resolution: {integrity: sha512-AWSxWuEuzazt/nWomKiaVhYQeXuqxTniPCKhvks58wB3P4UXvSe3hRnO+nujz20IuxIk2xHT6x47HgpDZy30jw==} - engines: {node: '>=14'} + '@wordpress/babel-preset-default@8.20.0': + resolution: {integrity: sha512-UGfPuNFjN8RG1BsFc04jOHoJFi3ZINYo4nsmrrUx1PFSFD2qpttmV03dWFWfqSvLvrMlYPQPMkYyK5KS6THxVQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/base-styles@4.49.0': - resolution: {integrity: sha512-yFRYqNtd26ULZ0oAHhCu/IcaA0XHI3E7kRCKajZqUvyRQj7YprXnpD3o0/pnwvF6ZFTXzCX8pXHjUc2TIv97ig==} + '@wordpress/base-styles@5.20.0': + resolution: {integrity: sha512-obTnPDYwcsEj9bhDTB8MVHfBA7fqDcR7nVO6TNPURDL5wggFhuAWdYbgExsS0IRDTLX7P2NrhyRCD5VMR3J25Q==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/blob@4.15.0': - resolution: {integrity: sha512-or9KYxlQTOtUyM68D8EBDoLnVJ2KjiwXFOainfqm6lajWGVR6gjbd0AqPy/BwBYOBnCaB4fqYM7i76wP2yF4+w==} + '@wordpress/blob@4.20.0': + resolution: {integrity: sha512-mwzQjdx8vTGBn61s9b87lwp2idyENblN3OlE04XSBXjKpf8G6fVMH9/7TKsfhqZ40oD1zLvAE8zdbd1KZw+ViQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/block-editor@13.4.0': - resolution: {integrity: sha512-J2XwsngpxLaue8EROloT6KyRFjCk8JCl/K9UalEkrpYFFj084z7/px6LT6300Maue0ejkN8I3X4/XOe0tgOdbQ==} + '@wordpress/block-editor@14.15.0': + resolution: {integrity: sha512-cZm1c2tUQfBAAig+BYD7XY9zSNdn25o7s8mUcoslUTiTaEwXtB+T+r/FPtv4fLLBYWtFjo4LiQ2v18sl4QgmHQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/block-serialization-default-parser@5.15.0': - resolution: {integrity: sha512-FzhnLVnnHpZVnuKOwJgXY0iR6URlbQoYItQMCLlSdHGv3ov9QdMG5xhZt4ZWhkl2hQXRW/nxQfTXqNdlO74e7A==} + '@wordpress/block-serialization-default-parser@5.20.0': + resolution: {integrity: sha512-qe/1sWDTZPqtRqSFSBwBzmEDfktgdinA5PPtQKxm/jGryDVZW2g9lFo/gB+4zBp05gXf9+dOWuFu71VeqVJluA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/blocks@13.10.0': - resolution: {integrity: sha512-Csfw4BgrPEry1OGE0iHSHJlSbao1IA8ujaE8H0LjAXCvMHXET11avSVvFwuYOaDbeSVi2TD50xA+UpMiJnEo4A==} + '@wordpress/blocks@14.9.0': + resolution: {integrity: sha512-ytT9aFiSvkoW7WyFnLqR94M+NxkTyZDvcORyZxeeWJXPhPv91w6ZRQmq1NTtDp/94p1+9oD4i+VVwrCV2N4j6g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/browserslist-config@5.41.0': - resolution: {integrity: sha512-J7ejzzDpPZddVIiq2YiK8J/pNTJDy3X1s+5ZtwkwklCxBMZJurxf9pEhtbaf7us0Q6c1j8Ubv7Fpx3lqk2ypxA==} - engines: {node: '>=14'} - - '@wordpress/commands@1.15.1': - resolution: {integrity: sha512-oBHbB4pgXXl3AjNRyEV0C8gosKe5FYrGxjs0ZuMozvJdSlT5bGCCzFAMGfTAQWWlFE+zbqyGkuXurku8jS7aEw==} + '@wordpress/browserslist-config@6.20.0': + resolution: {integrity: sha512-n9Q1UN3QL4DuZLySZpbJoZbQvBTjMjRV5yaxnmQaEpOyqablX4GnYq39fwTY72hBN/c1b0oyOFcsbhsrx0wqzg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - '@wordpress/components@28.13.0': - resolution: {integrity: sha512-JaGcXYtFCvHqa62dtxMAMhu6afvefFOuwfUTNiLYg60CA4UDITt6gf+qhpvKNOzVg4qQRw10o/nryrOMoMAEEg==} + '@wordpress/commands@1.20.0': + resolution: {integrity: sha512-SCB1Vo+pgAlbOgd4XtgG9yxRJA0cHPkvtPgnHsJ2gBDUefVonmIYFla4y6VmPDcA5AwuUeaGU8DZFW6c8LQNbg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/components@29.1.1': - resolution: {integrity: sha512-rHYKLz62hDTXs+9WxyMRRPW0hWqAdIDlSp6FPYQi0utMtyD7yL+MQa9i4O/RVarzlKdj9Hv82KXU6cVFg7V3Vg==} + '@wordpress/components@29.6.0': + resolution: {integrity: sha512-kk9GxGnoGBqHz0S4gT2UJHQBwudE1AgTPOc3v3k72kZkDaT88ZayBd/4/gHsa659zImgrwXZ6SjQ6Nczt80Bgg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/compose@7.15.1': - resolution: {integrity: sha512-ILDpfUSLNqXhNX+qbVOzbokGO78oKhK/czHrUHWxKCPsopMSR2e/oNptcwE8zA13AKq8/hSlFJPsKS2hi4Y9zA==} + '@wordpress/compose@7.20.0': + resolution: {integrity: sha512-L84QUGXbXPdCAgNDNmmH+4tJuAl1MwH5an6CaQ+NaSXk4kM4xAc42znHo0n5LfsRmWxOPrtlGikxMXCaejvoyw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/data@10.15.1': - resolution: {integrity: sha512-7HRFUh2ea/CNpTgKJEJ56gY4ZmsN4y2tEGF0QOTdC/C3UPeZo2KpzhPyYxIwal3oW5wZ16KuwOnbyRCOOdrugg==} + '@wordpress/data@10.20.0': + resolution: {integrity: sha512-oj1Ci7mPZ2kbmI2cdqk7apfvd4nlWziPstlIZIKCb02rCEMqP8dC0lc/CDt8GVOXJ23iMhZgkfkvnFNaMXmBNQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/date@5.15.1': - resolution: {integrity: sha512-TaDAZVnZaLbGrxYFwd5JKYbyK/pwQYVUXa22em7ng8GAW5thbx/8w16NRDZBJBqY0HJD0EvgnA5FMLbJPzyCtA==} + '@wordpress/date@5.20.0': + resolution: {integrity: sha512-V34zSLveuXTe8wvnIpUXroP7dP9FK1HzMmGNB5JtoPhrqJeNvP4fzju8RJwBGpU1sFaqO3w+EZoNdTV9k0hqxA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/dependency-extraction-webpack-plugin@5.9.0': - resolution: {integrity: sha512-hXbCkbG1XES47t7hFSETRrLfaRSPyQPlCnhlCx7FfhYFD0wh1jVArApXX5dD+A6wTrayXX/a16MpfaNqE662XA==} - engines: {node: '>=18'} + '@wordpress/dependency-extraction-webpack-plugin@6.20.0': + resolution: {integrity: sha512-4u8t3KdGviAa4Z9/trMKmtvwsyNY2RodYjN3nkD3cgLokpa4gJ3adNxzXxfYfSrbAWgdB1DpWz0PcsUJkm5S0A==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: webpack: ^5.0.0 - '@wordpress/deprecated@4.15.1': - resolution: {integrity: sha512-+N0fzjoBzoxGSKOtmJnnQD/jOL8oLPCfST/b0AB/LNaqgxi5IdKNqoONxcvrwcBKQYPM3dgm8as5OSDgldg3BA==} + '@wordpress/deprecated@4.20.0': + resolution: {integrity: sha512-36JbtGUSQ49SM33fvfSAvN8ZGDqCxCPAj2PByAney4WhoVbznxGWnao8qKwWrNNG5xec1reQvXFxOsD7qab4rg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/dom-ready@4.15.0': - resolution: {integrity: sha512-Hzd4UZvsGhCrVOxdG++H3UseEj1rt5pNrvGvDg+hkLaBMnM1T4s8HUhHO77AYCYohyTvp6qR6SdiqMgiwnEnmg==} + '@wordpress/dom-ready@4.20.0': + resolution: {integrity: sha512-FkdfoITfj1yBSUMn+IKIqpm7zwA4AbHPkYdCXNgP9w5BRBpoTqXMGgDbe8rt4aSWkSEiRChZ9rGmtG84LByRTA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/dom@4.15.1': - resolution: {integrity: sha512-sE5PSo20Q08LQd1t+yeOzu968EOtSV1SUrjW4a9zgzEOufdbFWmH6vOoRMGTbrqLnISttT0hfFWGifVUhcA0+g==} + '@wordpress/dom@4.20.0': + resolution: {integrity: sha512-uLYH7hKfJDUHkooAy0uoFJXMCkraTP3gdybblAJT9a/dqAOVcsMODH9gTGI99IoFhsvJwWo5Vk94/kgqeOdarA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/e2e-test-utils-playwright@0.26.0': - resolution: {integrity: sha512-4KFyQ3IsYIJaIvOQ1qhAHhRISs9abNToF/bktfMNxQiEJsmbNn7lq/IbaY+shqwdBWVg8TQtLcL4MpSl0ISaxQ==} - engines: {node: '>=12'} + '@wordpress/e2e-test-utils-playwright@1.20.0': + resolution: {integrity: sha512-4Z14MmoMEvmzKguCGGQuE+LzQAQsIqjp+b2Z0g5kGrzdB+PPExeuxQCPT1Qb+JeS98lqD2Ca4Rcx37OlRYS+Yg==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: '@playwright/test': '>=1' - '@wordpress/element@6.15.1': - resolution: {integrity: sha512-RTKQwu+sgpdemzMPa/PT6XF+YqFxHIMH2MVEnCsDwaEusPYNmjJ3Lu8oTkgP+iWn2mhI21M/Xkb9jCgXeTnTyQ==} + '@wordpress/element@6.20.0': + resolution: {integrity: sha512-JsM1Cy283BusHOb1uyD3tG9GAb5hp/ycgPnBS/ScKT/8VD8yGzsX6Pz910GWo5udXP03d2+UI/BQ68KPqPQKqQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/escape-html@3.15.0': - resolution: {integrity: sha512-m+bdBFMbii7Bm0q3L6ntVH0jr+/sUJC4sgpPuVpsjZTFrxGIiXa0J5Kv6lQoBCFM6I3zaVdjroUA24l7JVjXaA==} + '@wordpress/escape-html@3.20.0': + resolution: {integrity: sha512-Jrm+RdTZo8cj1JUo4Vqx92/yw7B+XS6aClEyQ/xlHoQU0WIZ+xByWZHOPgDFBcKczuO34UkFTWmDFFHMSy1uyw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/eslint-plugin@18.1.0': - resolution: {integrity: sha512-5eGpXEwaZsKbEh9040nVr4ggmrpPmltP+Ie4iGruWvCme6ZIFYw70CyWEV8S102IkqjH/BaH6d+CWg8tN7sc/g==} - engines: {node: '>=14', npm: '>=6.14.4'} + '@wordpress/eslint-plugin@22.6.0': + resolution: {integrity: sha512-OzYAFXfq7la+73+DmsHRJgsEmQ/ACWCa8MWmsmullc2lHz06032gr2z/6tpehNvFtERpXhxywr9ZCYVdmC1DhA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: '@babel/core': '>=7' eslint: '>=8' prettier: '>=3' - typescript: '>=4' + typescript: '>=5' peerDependenciesMeta: prettier: optional: true typescript: optional: true - '@wordpress/hooks@3.58.0': - resolution: {integrity: sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==} - engines: {node: '>=12'} - - '@wordpress/hooks@4.15.0': - resolution: {integrity: sha512-cFf41dos4ng/XQ8cLBdR78kixNHUHoNooVIsK5b/W5d55UxPJViF2ifds0+1zFiytE7nKKfYM/SQDSSL1cY+cw==} + '@wordpress/hooks@4.20.0': + resolution: {integrity: sha512-nn6RbAER5EitMJVr+jpOg5HDIUEEOEv6jC/P1s5C0HvsOaldBeJ80A73Gsd/NFGlUqCc7o51uoZO36wGoPjIpg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/html-entities@4.15.0': - resolution: {integrity: sha512-fdvNXWHtylrVMurRXd9OXVR79FvyCgk7ypGSKyWkVplAaW2GR31t+vWAYhlufSB13dWcG/CRSngMnT30b4/7/w==} + '@wordpress/html-entities@4.20.0': + resolution: {integrity: sha512-ZOQ9zsfs5p32K+uAEy2vbY7rnAG5KjMdXwOn4v2FPeXF6A6jWQudK/smV7nRB3ZMaSZnzQ54tiUXbuSpCmmGYA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/i18n@4.58.0': - resolution: {integrity: sha512-VfvS3BWv/RDjRKD6PscIcvYfWKnGJcI/DEqyDgUMhxCM6NRwoL478CsUKTiGJIymeyRodNRfprdcF086DpGKYw==} - engines: {node: '>=12'} - hasBin: true - - '@wordpress/i18n@5.15.1': - resolution: {integrity: sha512-LDHGmFFevIVJoohvHnke2edCP5jPOfJJwjifANT/KrUvbulQhvYNeiBcecwvgVPZKyi0Jas/xGrtH6362YdhCg==} + '@wordpress/i18n@5.20.0': + resolution: {integrity: sha512-JrgVe5QT+nDHFbujeD0lJifDpdgmOt1SSnEK631jIISjfGjriYwphoOEAzBGRh9S9ThqOOfW4mLOOeXPYmJR7w==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} hasBin: true - '@wordpress/icons@10.15.1': - resolution: {integrity: sha512-62GlyUePiF7+AOUNWjVYQ6ghWtgdl0FU5Fl0wS1EKRP6oBFXJ1DdHgXKJImKSY72KC8Yk8uS6VfqIiK2tsOeGg==} + '@wordpress/icons@10.20.0': + resolution: {integrity: sha512-wGmmGDQoDKjmuGdC2I8C3JA9GlqVM9DK5FJZuUukHTh+Nz72W8CA30PzGKavxWOYd7cZ0B97VioE85aVwOAe3g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/is-shallow-equal@5.15.0': - resolution: {integrity: sha512-HiYwLkLbztEk4xUpMH+OCjq9RimuW1A2lf5joJEmD6rEdb0NyeMWaU//IvuqMVfoTRACFTbxioIk0T8X57dX/g==} + '@wordpress/is-shallow-equal@5.20.0': + resolution: {integrity: sha512-/m8P/6AQgZchMbeDhne5z8Wzde07mv8+l7qsYK6VhChEWonrYN7Sfig9uGPtWijkWwOkxYjWE6ggcJ5xn8KVlg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/jest-console@7.29.0': - resolution: {integrity: sha512-/9PZJhyszdRX4mka7t1WzoooM+Q/DwC4jkNVtJxqci5lbL3Lrhy1cCJGCgMr1n/9w+zs7eLmExFBvV4v44iyNw==} - engines: {node: '>=14'} + '@wordpress/jest-console@8.20.0': + resolution: {integrity: sha512-FkW+OHYhfJ0gdjNNtVI7eqHYI1rnksrme0ZVOlxEc8FN+q+lnWiwpUHucRRvpgw6QXuujCXM5sJzoNrOmkOclA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: jest: '>=29' - '@wordpress/jest-preset-default@11.29.0': - resolution: {integrity: sha512-7LA0ZS5t0Thn7xrdwPL3hLgjB9LKloneGhMwnnDUTgJP330lyfdDfJ+O6Lnz3iL+bg68mkA3AzrT9Fs9f3WKww==} - engines: {node: '>=14'} + '@wordpress/jest-preset-default@12.20.0': + resolution: {integrity: sha512-otAwg72ymPVn91O0Q8VQWVhUrSIlT+zcg2fLG3lkSIPhEjRL8tnWD5nb4jqatIeqUXW+pYuEJowxTvJO7kv+1w==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: '@babel/core': '>=7' jest: '>=29' - '@wordpress/keyboard-shortcuts@5.15.1': - resolution: {integrity: sha512-r7uIRIeBmgBxYAJwTb4bpi5PdTZy5R3x5eTOBxr5lphl+gfKfgRUOfAXLmQi+h1TcK1CgpS198I5ekou6G4ibg==} + '@wordpress/keyboard-shortcuts@5.20.0': + resolution: {integrity: sha512-1f71Zwx23W0iyox2o4cu0w3h21uEV/mra4s0Ol+ezhHJ2qg/ZG2FFS25lo9AYOCJZpP0cNvlI7js1wC4/taOQQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/keycodes@3.58.0': - resolution: {integrity: sha512-Q/LRKpx8ndzuHlkxSQ2BD+NTYYKQPIneNNMng8hTAfyU7RFwXpqj06HpeOFGh4XIdPKCs/8hmucoLJRmmLmZJA==} - engines: {node: '>=12'} - - '@wordpress/keycodes@4.15.1': - resolution: {integrity: sha512-j+Ow7HTZgnI3kO48KIR/hevfOkozpX+CfiRlMF8LU/+YupmBDUKRKj6ZeOC1oIFkCKmZIHlXAa8uIfPxVMiaQw==} + '@wordpress/keycodes@4.20.0': + resolution: {integrity: sha512-GLzp9uTSNOPvX378FInwvLj4riqq1N/By1kd40iAr1hXfRAjy0H//vktJ70r+AkwK0R07txtCPiLnDcW53hLmg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/notices@5.15.1': - resolution: {integrity: sha512-GozlClo8uWJ582WaAtGio2qfGns9IPRJxRI8tY7hPf8DQC9Uebz4CbVUHVndIEXULcDbUJQIQX3k3ZA5SDgmtA==} + '@wordpress/notices@5.20.0': + resolution: {integrity: sha512-AYRVzrrqrGo0zRvgVKbRsz7ViED7ik212Jje/zyaplOK9dffXUlFK3S8N6pipemfv39uX5N6YW6OJlIKK9lPKA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/npm-package-json-lint-config@4.43.0': - resolution: {integrity: sha512-XSb7AdDC7yGTBVYeRM4oqmOygEB+/+tk7lobLIGDmlZJs+M3F/NUvQq0Vcas1pojq2fyPYTUwOlu81ga33fNwQ==} - engines: {node: '>=14'} + '@wordpress/npm-package-json-lint-config@5.20.0': + resolution: {integrity: sha512-7F5wfAXBZLaww6ZXUeccqyPCFSx5bpx9LK5sdsrmflpfxU/b1pKONhy06z6qnEwtliHNnynUseUoYrdefcVAvQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: npm-package-json-lint: '>=6.0.0' - '@wordpress/postcss-plugins-preset@4.42.0': - resolution: {integrity: sha512-5xmKF7IUsqS5JcmJlHKHq7RaR6ZpaLj3n9c+X0X0/Oo7ZCIGp6WeDQngx13sH4NJoKXrZ9g4n1rbzhEKeo/Wtg==} - engines: {node: '>=14'} + '@wordpress/postcss-plugins-preset@5.20.0': + resolution: {integrity: sha512-zR9FY2c0dJCEWB9pUzB9Gcet1yqQ07qqT+IYtNtCPQQzrEYHAwlYOGpOjhy6UrP0XY3O6VlRa0SSDMXRbgXFQw==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: postcss: ^8.0.0 - '@wordpress/preferences@4.15.1': - resolution: {integrity: sha512-z/lLdRvEu73NFjdOeMiMXRt+QLi+EsDYv93DoB9rfVhUOjI8gQnvEIgLpDL+V9rW08bUc7P3WHqfvVKMaXADFw==} + '@wordpress/preferences@4.20.0': + resolution: {integrity: sha512-oW7N8RPkXeJFZe/6aRHyWgzj0y9CjT3ATF+JPtQOUcKnNcSuMdaOU22X7jGBaCgU0Yk7frC39a30156nkv9Gpw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/prettier-config@3.15.0': - resolution: {integrity: sha512-exC2rkEioTt//AnzPRyaaFv8FNYIvamPDytNol5bKQ6Qh65QSdZZE9V+GtRCrIPL7/Bq6xba03XuRVxl9TjtJg==} - engines: {node: '>=14'} + '@wordpress/prettier-config@4.20.0': + resolution: {integrity: sha512-YucOkFoglNTe96CcmorzmFVX94r+mEjXQZZWkZgLwq8dvdeRM3UO39+dETYAfo8HZ4BYx6KfpREIV7tZ8PDHmQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: prettier: '>=3' - '@wordpress/primitives@4.15.1': - resolution: {integrity: sha512-hLBgrnKoEjROuqqlRPjAI5A903LsnOCUnPgBJLuREXgSRFVmVJocRHmvD8o3HGSaaTLcHivfowUhhmdlVkeYfw==} + '@wordpress/primitives@4.20.0': + resolution: {integrity: sha512-fVs9EnuI2UV1xfAYY//OOfO+O3n4VvPVGcI/zHMAfIdJGWEbCQVDatAnteX/2hkjBe85jqErkU+0bAKsddhpcA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/priority-queue@3.15.0': - resolution: {integrity: sha512-7GVvayRW62f6Worl1uxYoodgEV5qMUOuTfrFdYailo9Ri++RdKKagPOSBHdHndqHeywmXFo8qgZYpHKy9HWnTg==} + '@wordpress/priority-queue@3.20.0': + resolution: {integrity: sha512-2gOa8LQaTLPgk1GDkkXWALA9yH47yhDZKHKBHy8YH61c+m8ai8RctWegzXA6pSInPW77nbBUNHSOzxWTsDN1Sw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/private-apis@1.15.0': - resolution: {integrity: sha512-6AArbUvOUHSF3aXKE9QXoPNTfFCtFhQA2P4DoIDPrA9S8orwjpK2NQWiBS7XhbFrnETHix/JcEGiTbHLwhhizw==} + '@wordpress/private-apis@1.20.0': + resolution: {integrity: sha512-DngnywYj6zDt9D0HgnX7k0il5SsdDYUxEg82GqNu3Jd879LlG9MtIxcoV+ErCsH7ryTydXw4sC17W09m2LEMBQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/redux-routine@5.15.0': - resolution: {integrity: sha512-wl9HO62FZZLGPYtcQHCJqRg0xq5BeZw14yRPsWjLPfTDab8C1VWvYfVG6SpgX3ztZ/eek3NDo0Io8Yp9ACKDYA==} + '@wordpress/redux-routine@5.20.0': + resolution: {integrity: sha512-6JZI75oMAWGBgo+x2rmfIGzqVuxiZ3wQBqNCdVDDOGYH9qcRzYgBWRSPVfh4rvGLTtpVnFHnnBQ+jr5iPGHOxQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: redux: '>=4' - '@wordpress/rich-text@7.15.1': - resolution: {integrity: sha512-jUlAmAz+h+FERf5OoHW5mfEWbZGFpr/XAXOTso4irGiVOdB2CyRFb7YqXQ3RkkObbEaPjx0M6LbXrrRg2wJjfQ==} + '@wordpress/rich-text@7.20.0': + resolution: {integrity: sha512-irx6cvmoxSSajzGGt5iVxek3vNfG5LslORQ1g7HXcNawfFBxhptU3vzPF2+ywvs6o3BCbTZVfa98rOfX3C2J/Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/scripts@27.9.0': - resolution: {integrity: sha512-ohiDHMnfTTBTi7qS7AVJZUi1dxwg0k3Aav1a8CzUoOE8YoT8tvMQ3W89H9XgqMgMTWUCdgTUBYLTJTivfVVbXQ==} - engines: {node: '>=18', npm: '>=6.14.4'} + '@wordpress/scripts@30.13.0': + resolution: {integrity: sha512-xzHvuTgGy9y3tdUHvwpkd90olnO96KVsxCmC2qaouGjPkeUQKn+j7m6zPrqzxkhSQO7JMzaJ5N74agkiaGr0Rw==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} hasBin: true peerDependencies: - '@playwright/test': ^1.43.0 + '@playwright/test': ^1.49.1 react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/shortcode@4.15.0': - resolution: {integrity: sha512-CVb8aHg81dNg3NlZGot+yV64m5jTHRnCEMnvowJj2K9WULN5866VnRUDuFiHm1dHdPCnwlaAORrP+0IunY0/4g==} + '@wordpress/shortcode@4.20.0': + resolution: {integrity: sha512-0z3RI+KctCQTIvs+E1u4QZTTAvgQKbKESk5Uowlm9j+0wTHCAicOblf66RN8lo6+RHYOo2+pNrCmeDYIghUm5A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/style-engine@2.15.0': - resolution: {integrity: sha512-zXh4d40BrQNNzT7JTTIHPCCzwp+uBbuIvs659jRUU5JKoydlbb60KbWsKApBlrd92S+99i38vdunAAo4o4mR5g==} + '@wordpress/style-engine@2.20.0': + resolution: {integrity: sha512-6hG3agp8+jpSFm9PG/c2uap7ub3uagdbFIkJjQflF2u1JkN7/8A7AUCmBiUVKBM3ovqZOcfRvCd2VBqfure/8g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/stylelint-config@21.41.0': - resolution: {integrity: sha512-2wxFu8ICeRGF3Lxz7H7o2SU1u6pTI4mjuog39DgtCNb+v+f6yhgREDuNQEeti3Svb0rjj63AJ7r2CqLZk+EQIQ==} - engines: {node: '>=14'} + '@wordpress/stylelint-config@23.12.0': + resolution: {integrity: sha512-1yWWUn6K7oQEmmuPrp+ejQ0MyPNT+Zzw4T0cyigmcAI/6aC1G9bliD4w1WrhkZ+tB/HZKIZNYlMvuSAxZsM1hw==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: - stylelint: ^14.2 + stylelint: ^16.8.2 - '@wordpress/token-list@3.15.0': - resolution: {integrity: sha512-Mupfwf7vjGZ2gmQMI6B3YSkoN1lClt/6I/gEkJKCIT/dm3z1zCJPcRqGixettx27FRZB0KHcpQpDL2eDE3Y5AQ==} + '@wordpress/token-list@3.20.0': + resolution: {integrity: sha512-34BQdrFVs2c/mh/ycNVXqKauFQBlg8D1Wxp89UgaCnaoUZSob/o3YYQTODNBcXaepDsLO5tc3VzyybXYDoMBtg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/undo-manager@1.15.1': - resolution: {integrity: sha512-OJ/MSgHEn0pizpF4/ukJsoHpAfie8kFnJOJat8kEsqUVCFC1T58FgUcLiDf6cdDRZULS215cMueqJ7RF2hy6Hg==} + '@wordpress/undo-manager@1.20.0': + resolution: {integrity: sha512-IG3/u0uR0nfZ/kXRfC6DVFK52hbbNx4aMB/c5DAMQgKtJElE7Mz1Mf5zgU1XNlpBOdguQp6oo/nMpyJUIasipQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/url@3.59.0': - resolution: {integrity: sha512-GxvoMjYCav0w4CiX0i0h3qflrE/9rhLIZg5aPCQjbrBdwTxYR3Exfw0IJYcmVaTKXQOUU8fOxlDxULsbLmKe9w==} - engines: {node: '>=12'} - - '@wordpress/url@4.15.0': - resolution: {integrity: sha512-kYi4A8aRiNCKI+7FgagSVfRNGnIs+hCKQW2t5VgOyM+Qhsxe6AaIa/k9PXMC+q4gCLQlhGj42ZMWMVjhfkV5mA==} + '@wordpress/upload-media@0.5.0': + resolution: {integrity: sha512-gwRO06ftesM8DnsAD5tvSF6Y+ZJY+h4dgr1d1S7xFu96zMULoQ99A3NVKKH5TLIOVAPYPZoITbJOFviSbv5PPQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 - '@wordpress/warning@2.58.0': - resolution: {integrity: sha512-9bZlORhyMY2nbWozeyC5kqJsFzEPP4DCLhGmjtbv+YWGHttUrxUZEfrKdqO+rUODA8rP5zeIly1nCQOUnkw4Lg==} - engines: {node: '>=12'} + '@wordpress/url@4.20.0': + resolution: {integrity: sha512-IUkph25ewBDTxuSC9wXvMbec6IB2A3pNz0Xkm1Ffzm2ngk/f+0+Ko2WSKdXqqR8U67Eyb+ZUZFtBPmEsKvEZ4A==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/warning@3.15.0': - resolution: {integrity: sha512-qBE1kWiyey9rlLGQHf3ngdWgov58CV2a8tQR8UMy1EwKUDAS56UXJcAvfAi7b7aMN5gZ+hVa4LWK9WbVuKEdRg==} + '@wordpress/warning@3.20.0': + resolution: {integrity: sha512-IQRvlWwNWO6kncZ/qQEX/KCvsrm/0FIcuCXrTXlGP4OslRG7XtU9xs2lOP34Y6G3onMwhpD8mXFUK7udq305EQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/wordcount@4.15.0': - resolution: {integrity: sha512-NfjI/CsVdsMGKeuAFdgqZ3t3Nxn+zQs+59Rrmoln4nP+27nbivxzjhwggYeOQW5FYAMP8zo/ElSyoU10b+MqIQ==} + '@wordpress/wordcount@4.20.0': + resolution: {integrity: sha512-3RP94Xt3TTnLrfuVOiQE80tUluq6jLoPeQD1V7IiZMTZUw2gpgxE6ZX81yoM1oYOUWCp1n9hqsiF4zaRQ/75cQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@xtuc/ieee754@1.2.0': @@ -2163,8 +2236,8 @@ packages: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} hasBin: true @@ -2259,9 +2332,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - aos@2.3.4: - resolution: {integrity: sha512-zh/ahtR2yME4I51z8IttIt4lC1Nw0ktsFtmeDzID1m9naJnWXhCoARaCgNOGXb5CLy3zm+wqmRAEgMYB5E2HUw==} - are-docs-informative@0.0.2: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} @@ -2315,8 +2385,8 @@ packages: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} engines: {node: '>= 0.4'} array.prototype.flat@1.3.3: @@ -2350,11 +2420,15 @@ packages: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - autoprefixer@10.4.20: - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -2367,16 +2441,12 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axe-core@4.10.2: - resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} - engines: {node: '>=4'} - - axe-core@4.7.2: - resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} + axe-core@4.10.3: + resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} engines: {node: '>=4'} - axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + axios@1.8.4: + resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} @@ -2391,12 +2461,12 @@ packages: peerDependencies: '@babel/core': ^7.8.0 - babel-loader@8.4.1: - resolution: {integrity: sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==} - engines: {node: '>= 8.9'} + babel-loader@10.0.0: + resolution: {integrity: sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==} + engines: {node: ^18.20.0 || ^20.10.0 || >=22.0.0} peerDependencies: - '@babel/core': ^7.0.0 - webpack: '>=2' + '@babel/core': ^7.12.0 + webpack: '>=5.61.0' babel-loader@9.2.1: resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} @@ -2417,8 +2487,8 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} - babel-plugin-polyfill-corejs2@0.4.12: - resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + babel-plugin-polyfill-corejs2@0.4.13: + resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -2427,8 +2497,13 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.3: - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + babel-plugin-polyfill-corejs3@0.11.1: + resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.4: + resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -2443,17 +2518,41 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - babel-runtime@6.25.0: - resolution: {integrity: sha512-zeCYxDePWYAT/DfmQWIHsMSFW2vv45UIwIAMjGvQVsTd47RwsiRH0uK1yzyWZ7LDBKdhnGDPM6NYEO5CZyhPrg==} - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} balanced-match@2.0.0: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} - bare-events@2.5.3: - resolution: {integrity: sha512-pCO3aoRJ0MBiRMu8B7vUga0qL3L7gO1+SW7ku6qlSsMLwuhaawnuvZDyzJY/kyC63Un0XAB0OPUcfF1eTO/V+Q==} + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + bare-fs@4.0.2: + resolution: {integrity: sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.6.1: + resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2472,9 +2571,6 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -2523,16 +2619,19 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + cacheable@1.8.9: + resolution: {integrity: sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} call-bind@1.0.8: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} - call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} callsites@3.1.0: @@ -2557,8 +2656,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001690: - resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} + caniuse-lite@1.0.30001707: + resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -2591,11 +2690,8 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - - chrome-launcher@0.15.2: - resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} + chrome-launcher@1.1.2: + resolution: {integrity: sha512-YclTJey34KUm5jB1aEJCq807bSievi7Nb/TU4Gu504fUYi3jw3KCIaH6L7nFWQhdEgH3V+wCh+kKD1P5cXnfxw==} engines: {node: '>=12.13.0'} hasBin: true @@ -2603,8 +2699,13 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - chromium-bidi@0.4.16: - resolution: {integrity: sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==} + chromium-bidi@0.11.0: + resolution: {integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==} + peerDependencies: + devtools-protocol: '*' + + chromium-bidi@2.1.2: + resolution: {integrity: sha512-vtRWBK2uImo5/W2oG6/cDkkHSm+2t6VHgnj+Rcwhb0pP74OoUb4GipyRX/T/y39gYQPhioP0DPShn+A7P6CHNw==} peerDependencies: devtools-protocol: '*' @@ -2612,11 +2713,8 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - cjs-module-lexer@1.4.1: - resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} - - classlist-polyfill@1.2.0: - resolution: {integrity: sha512-GzIjNdcEtH4ieA2S8NmrSxv7DfEV5fmixQeyTmqmRmRJPGpRBaSnA2a0VrCjyT8iW8JjEdMbKzDotAJf+ajgaQ==} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} clean-webpack-plugin@3.0.0: resolution: {integrity: sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==} @@ -2646,8 +2744,8 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - cmdk@1.0.4: - resolution: {integrity: sha512-AnsjfHyHpQ/EFeAnG216WY7A5LiYCoZzCSygiLvfXC3H3LFGCprErteUcszaVluGOhuOTbJS3jWHrSDYPBBygg==} + cmdk@1.1.1: + resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc @@ -2708,15 +2806,12 @@ packages: common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} - compression@1.7.5: - resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} + compression@1.8.0: + resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} engines: {node: '>= 0.8.0'} computed-style@0.1.4: @@ -2725,6 +2820,11 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concurrently@9.1.2: + resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==} + engines: {node: '>=18'} + hasBin: true + configstore@5.0.1: resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} engines: {node: '>=8'} @@ -2753,10 +2853,6 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} - cookie@0.7.1: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} @@ -2771,18 +2867,14 @@ packages: peerDependencies: webpack: ^5.1.0 - core-js-compat@3.40.0: - resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} + core-js-compat@3.41.0: + resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} - core-js-pure@3.40.0: - resolution: {integrity: sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==} + core-js-pure@3.41.0: + resolution: {integrity: sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==} - core-js@2.6.12: - resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} - deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. - - core-js@3.40.0: - resolution: {integrity: sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==} + core-js@3.41.0: + resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2800,20 +2892,20 @@ packages: typescript: optional: true + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true - cross-fetch@3.1.5: - resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} - - cross-fetch@4.0.0: - resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} - - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -2822,8 +2914,8 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} - csp_evaluator@1.1.1: - resolution: {integrity: sha512-N3ASg0C4kNPUaNxt1XAvzHIVuzdtr8KLgfk1O8WDyimp1GisPAHESupArO2ieHk9QWbrJ/WkQODyh21Ps/xhxw==} + csp_evaluator@1.1.5: + resolution: {integrity: sha512-EL/iN9etCTzw/fBnp0/uj0f5BOOGvZut2mzsiiBZ/FdT6gFQCKRO/tmcKOxn5drWZ2Ndm/xBb1SI4zwWbGtmIw==} css-declaration-sorter@7.2.0: resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} @@ -2870,6 +2962,10 @@ packages: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -2963,15 +3059,6 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -2989,8 +3076,8 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + decimal.js@10.5.0: + resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} dedent@1.5.3: resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} @@ -3069,14 +3156,14 @@ packages: detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - devtools-protocol@0.0.1147663: - resolution: {integrity: sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==} + devtools-protocol@0.0.1367902: + resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==} - devtools-protocol@0.0.1155343: - resolution: {integrity: sha512-oD9vGBV2wTc7fAzAM6KC0chSgs234V8+qDEeK+mcbRj2UvcuA7lgBztGi/opj/iahcXD3BSj8Ymvib628yy9FA==} + devtools-protocol@0.0.1413902: + resolution: {integrity: sha512-yRtvFD8Oyk7C9Os3GmnFZLu53yAfsnyw1s+mLmHHUK0GQEc9zthHWvS1r67Zqzm5t7v56PILHIVZ7kmFMaL2yQ==} - devtools-protocol@0.0.981744: - resolution: {integrity: sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==} + devtools-protocol@0.0.1436416: + resolution: {integrity: sha512-iGLhz2WOrlBLcTcoVsFy5dPPUqILG6cc8MITYd5lV6i38gWG14bMXRH/d8G5KITrWHBnbsOnWHfc9Qs4/jej9Q==} diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} @@ -3140,8 +3227,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.79: - resolution: {integrity: sha512-nYOxJNxQ9Om4EC88BE4pPoNI8xwSFf8pU/BAeOl4Hh/b/i6V4biTAzwV7pXi3ARKeoYO5JZKMIXTryXSVer5RA==} + electron-to-chromium@1.5.126: + resolution: {integrity: sha512-AtH1uLcTC72LA4vfYcEJJkrMk/MY/X0ub8Hv7QGAePW2JkeUFHEL/QfS4J77R6M87Sss8O0OcqReSaN1bpyA+Q==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -3174,8 +3261,8 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enhanced-resolve@5.18.0: - resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -3189,6 +3276,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + envinfo@7.14.0: resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} engines: {node: '>=4'} @@ -3222,16 +3313,17 @@ packages: es-module-lexer@1.6.0: resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} es-to-primitive@1.3.0: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} @@ -3335,13 +3427,13 @@ packages: eslint-plugin-jest: optional: true - eslint-plugin-prettier@5.2.1: - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + eslint-plugin-prettier@5.2.5: + resolution: {integrity: sha512-IKKP8R87pJyMl7WWamLgPkloB16dagPIdd2FjBDbyRYPKo93wS/NbCOPh6gH+ieNLC+XZrhJt/kWj0PS/DFdmg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' eslint: '>=8.0.0' - eslint-config-prettier: '*' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' prettier: '>=3.0.0' peerDependenciesMeta: '@types/eslint': @@ -3355,8 +3447,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react@7.37.3: - resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 @@ -3369,10 +3461,6 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.2.0: - resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} @@ -3381,30 +3469,12 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - eslint@9.17.0: - resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3496,15 +3566,15 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.0.5: - resolution: {integrity: sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} - fastq@1.18.0: - resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} @@ -3516,14 +3586,13 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + file-entry-cache@10.0.7: + resolution: {integrity: sha512-txsf5fu3anp2ff3+gOJJzRImtrtm/oa9tYLN0iTuINZ++EyVR/nRrg2fKYwvG/pXDofcrvvb0scEbX3NyW/COw==} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - filename-reserved-regex@2.0.0: resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} engines: {node: '>=4'} @@ -3540,10 +3609,6 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} - find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - find-cache-dir@4.0.0: resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} engines: {node: '>=14.16'} @@ -3559,8 +3624,8 @@ packages: resolution: {integrity: sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==} engines: {node: '>=0.10.0'} - find-process@1.4.9: - resolution: {integrity: sha512-x+1gcT3k+7ipx8chx1Z7cViSdeQ/RBwDk+6GiWnMTO0+YtGFrahToxarIZM6TzDZ9UFfYPUGpBf/85v5GpBXKA==} + find-process@1.4.10: + resolution: {integrity: sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==} hasBin: true find-root@1.1.0: @@ -3586,16 +3651,15 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} + flat-cache@6.1.7: + resolution: {integrity: sha512-qwZ4xf1v1m7Rc9XiORly31YaChvKt6oNVHuqqZcoED/7O+ToyNVGobKsIAopY9ODcWpEDKEBAbrSOCBHtNQvew==} flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.3.2: - resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} @@ -3606,8 +3670,9 @@ packages: debug: optional: true - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} for-in@0.1.8: resolution: {integrity: sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==} @@ -3621,12 +3686,12 @@ packages: resolution: {integrity: sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==} engines: {node: '>=0.10.0'} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} forwarded@0.2.0: @@ -3636,8 +3701,8 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - framer-motion@11.16.1: - resolution: {integrity: sha512-xsjhEUSWHn39g334PpBTH+QissgEJVJkpRGS/4QUyMSmoJSNxA+7FTuq61s+OXPMS4muu5k9Y6r7GpcNKhd1xA==} + framer-motion@11.18.2: + resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -3654,9 +3719,6 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-exists-sync@0.1.0: resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==} engines: {node: '>=0.10.0'} @@ -3695,8 +3757,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.7: - resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} get-nonce@1.0.1: @@ -3786,10 +3848,6 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -3877,6 +3935,9 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} + hookified@1.8.1: + resolution: {integrity: sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==} + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -3894,8 +3955,8 @@ packages: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} - html-entities@2.5.2: - resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} + html-entities@2.5.3: + resolution: {integrity: sha512-D3AfvN7SjhTgBSA8L1BN4FpPzuEd06uy4lHwSoRWr0lndi9BKaNzPLKGOWZ2ocSGguozr08TTb2jhCLHaemruw==} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -3919,8 +3980,8 @@ packages: resolution: {integrity: sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==} engines: {node: '>=6.0.0'} - http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + http-parser-js@0.5.9: + resolution: {integrity: sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==} http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} @@ -3984,19 +4045,22 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.3: + resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} + engines: {node: '>= 4'} + image-ssim@0.2.0: resolution: {integrity: sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==} - immutable@5.0.3: - resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + immutable@5.1.1: + resolution: {integrity: sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==} - import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} @@ -4036,12 +4100,8 @@ packages: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} - intl-messageformat-parser@1.8.1: - resolution: {integrity: sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==} - deprecated: We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser - - intl-messageformat@4.4.0: - resolution: {integrity: sha512-z+Bj2rS3LZSYU4+sNitdHrwnBhr0wO80ZJSW8EzKDBowwUe3Q/UsvgCGjrwa+HPzoGCLEb9HAjfJgo4j2Sac8w==} + intl-messageformat@10.7.16: + resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==} ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} @@ -4066,8 +4126,8 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.1.0: - resolution: {integrity: sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} is-bigint@1.1.0: @@ -4078,8 +4138,8 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.2.1: - resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} is-buffer@1.1.6: @@ -4235,8 +4295,8 @@ packages: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-weakref@1.1.0: - resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} engines: {node: '>= 0.4'} is-weakset@2.0.4: @@ -4292,8 +4352,8 @@ packages: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} - jackspeak@4.0.2: - resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} + jackspeak@4.1.0: + resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} engines: {node: 20 || >=22} jest-changed-files@29.7.0: @@ -4326,8 +4386,8 @@ packages: ts-node: optional: true - jest-dev-server@9.0.2: - resolution: {integrity: sha512-Zc/JB0IlNNrpXkhBw+h86cGrde/Mey52KvF+FER2eyrtYJTHObOwW7Iarxm3rPyTKby5+3Y2QZtl8pRz/5GCxg==} + jest-dev-server@10.1.4: + resolution: {integrity: sha512-bGQ6sedNGtT6AFHhCVqGTXMPz7UyJi/ZrhNBgyqsP0XU9N8acCEIfqZEA22rOaZ+NdEVsaltk6tL7UT6aXfI7w==} engines: {node: '>=16'} jest-diff@29.7.0: @@ -4507,6 +4567,9 @@ packages: json2php@0.0.7: resolution: {integrity: sha512-dnSoUiLAoVaMXxFsVi4CrPVYMKOuDBXTghXSmMINX44RZ8WM9cXlY7UqrQnlAcODCVO7FV3+8t/5nDKAjimLfg==} + json2php@0.0.9: + resolution: {integrity: sha512-fQMYwvPsQt8hxRnCGyg1r2JVi6yL8Um0DIIawiKiMK9yhAAkcRNj5UsBWoaFvFzPpcWbgw9L6wzj+UMYA702Mw==} + json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -4529,6 +4592,9 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@5.3.2: + resolution: {integrity: sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==} + kind-of@2.0.1: resolution: {integrity: sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==} engines: {node: '>=0.10.0'} @@ -4549,8 +4615,8 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} - known-css-properties@0.26.0: - resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==} + known-css-properties@0.35.0: + resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==} language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -4559,8 +4625,8 @@ packages: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} - launch-editor@2.9.1: - resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} + launch-editor@2.10.0: + resolution: {integrity: sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==} lazy-cache@0.2.7: resolution: {integrity: sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==} @@ -4578,15 +4644,18 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lighthouse-logger@1.4.2: - resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + + lighthouse-logger@2.0.1: + resolution: {integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==} - lighthouse-stack-packs@1.11.0: - resolution: {integrity: sha512-sRr0z1S/I26VffRLq9KJsKtLk856YrJlNGmcJmbLX8dFn3MuzVPUbstuChEhqnSxZb8TZmVfthuXuwhG9vRoSw==} + lighthouse-stack-packs@1.12.2: + resolution: {integrity: sha512-Ug8feS/A+92TMTCK6yHYLwaFMuelK/hAKRMdldYkMNwv+d9PtWxjXEg6rwKtsUXTADajhdrhXyuNCJ5/sfmPFw==} - lighthouse@10.4.0: - resolution: {integrity: sha512-XQWHEWkJ8YxSPsxttBJORy5+hQrzbvGkYfeP3fJjyYKioWkF2MXfFqNK4ZuV4jL8pBu7Z91qnQP6In0bq1yXww==} - engines: {node: '>=16.16'} + lighthouse@12.5.1: + resolution: {integrity: sha512-ooOIqtBxOEnuX3yKtc8WiMPI/fPqHtXHaXU4ey87icRcY5I2B9+imk8i6U7duIO+yrU0WwbIwhmCs8s/FFNRgA==} + engines: {node: '>=18.16'} hasBin: true lilconfig@3.1.3: @@ -4611,6 +4680,9 @@ packages: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} + localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -4627,6 +4699,9 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -4636,9 +4711,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.throttle@4.1.1: - resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} - lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} @@ -4666,13 +4738,10 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - lru-cache@11.0.2: - resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + lru-cache@11.1.0: + resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} engines: {node: 20 || >=22} - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -4684,9 +4753,6 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lru_map@0.3.3: - resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} - make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -4741,6 +4807,12 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + mdn-data@2.18.0: + resolution: {integrity: sha512-gtCy1yim/vpHF/tq3B4Z43x3zKWpYeb4IM3d/Mf4oMYcNuoXOYEaqtoFlLHw9zd7+WNN3jNh6/WXyUrD3OIiwQ==} + mdurl@1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} @@ -4755,6 +4827,10 @@ packages: memize@2.1.0: resolution: {integrity: sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg==} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + meow@9.0.0: resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} engines: {node: '>=10'} @@ -4788,8 +4864,8 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - mime-db@1.53.0: - resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} mime-types@2.1.35: @@ -4848,41 +4924,35 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mitt@3.0.0: - resolution: {integrity: sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} mixin-object@2.0.1: resolution: {integrity: sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==} engines: {node: '>=0.10.0'} - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - - moment-timezone@0.5.46: - resolution: {integrity: sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==} + moment-timezone@0.5.48: + resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==} moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - motion-dom@11.16.1: - resolution: {integrity: sha512-XVNf3iCfZn9OHPZYJQy5YXXLn0NuPNvtT3YCat89oAnr4D88Cr52KqFgKa8dWElBK8uIoQhpJMJEG+dyniYycQ==} + motion-dom@11.18.1: + resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} - motion-utils@11.16.0: - resolution: {integrity: sha512-ngdWPjg31rD4WGXFi0eZ00DQQqKKu04QExyv/ymlC+3k+WIgYVFbt6gS5JsFPbJODTF/r8XiE/X+SsoT9c0ocw==} + motion-utils@11.18.1: + resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} mousetrap@1.6.5: resolution: {integrity: sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==} - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -4890,8 +4960,8 @@ packages: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -4919,24 +4989,6 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -4988,8 +5040,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nwsapi@2.2.16: - resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + nwsapi@2.2.19: + resolution: {integrity: sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -4998,8 +5050,8 @@ packages: object-filter@1.0.2: resolution: {integrity: sha512-NahvP2vZcy1ZiiYah30CEPw0FpDcSkSePJBMpzl5EQgCmISijiGuJm3SPYp7U+Lf2TljyaIw3E5EgkEx/TNEVA==} - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} object-keys@1.1.1: @@ -5010,8 +5062,8 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} engines: {node: '>= 0.4'} object.fromentries@2.0.8: @@ -5104,8 +5156,8 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - pac-proxy-agent@7.1.0: - resolution: {integrity: sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==} + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} engines: {node: '>= 14'} pac-resolver@7.0.1: @@ -5136,6 +5188,9 @@ packages: parse5@7.2.1: resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parsel-js@1.2.1: + resolution: {integrity: sha512-omFBig09mUh/NjBGba4DxVFAsqCY4C/6UYIaJuDOxJw2GlpgUJdPlNF301971gCP3Gt727+F+NZIXN483VAKIg==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -5212,8 +5267,8 @@ packages: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} pkg-dir@4.2.0: @@ -5224,13 +5279,13 @@ packages: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} - playwright-core@1.49.1: - resolution: {integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==} + playwright-core@1.51.1: + resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} engines: {node: '>=18'} hasBin: true - playwright@1.49.1: - resolution: {integrity: sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==} + playwright@1.51.1: + resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} engines: {node: '>=18'} hasBin: true @@ -5238,8 +5293,8 @@ packages: resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==} engines: {node: '>=10'} - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} postcss-calc@9.0.1: @@ -5414,10 +5469,10 @@ packages: peerDependencies: postcss: ^8.4.31 - postcss-prefixwrap@1.53.0: - resolution: {integrity: sha512-eDd4IsLCGACR12rSwrL66dCpDBzL04nXTYvq6IOY+wmaRnVRiNf9IAe2bZgd7G0UYIgafTcXpBey/D9QeVHQQA==} + postcss-prefix-selector@1.16.1: + resolution: {integrity: sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==} peerDependencies: - postcss: '*' + postcss: '>4 <9' postcss-reduce-initial@6.1.0: resolution: {integrity: sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==} @@ -5434,11 +5489,11 @@ packages: postcss-resolve-nested-selector@0.1.6: resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} - postcss-safe-parser@6.0.0: - resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} - engines: {node: '>=12.0'} + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} peerDependencies: - postcss: ^8.3.3 + postcss: ^8.4.31 postcss-scss@4.0.9: resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} @@ -5450,8 +5505,8 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} - postcss-selector-parser@7.0.0: - resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} engines: {node: '>=4'} postcss-svgo@6.0.3: @@ -5474,8 +5529,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -5512,20 +5567,13 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-agent@6.3.0: - resolution: {integrity: sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==} + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} engines: {node: '>= 14'} proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - ps-list@8.1.1: - resolution: {integrity: sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} @@ -5536,18 +5584,13 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@13.7.0: - resolution: {integrity: sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==} - engines: {node: '>=10.18.1'} + puppeteer-core@23.11.1: + resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==} + engines: {node: '>=18'} - puppeteer-core@20.9.0: - resolution: {integrity: sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==} - engines: {node: '>=16.3.0'} - peerDependencies: - typescript: '>= 4.7.4' - peerDependenciesMeta: - typescript: - optional: true + puppeteer-core@24.4.0: + resolution: {integrity: sha512-eFw66gCnWo0X8Hyf9KxxJtms7a61NJVMiSaWfItsFPzFBsjsWdmcNlBdsA1WVwln6neoHhsG+uTVesKmTREn/g==} + engines: {node: '>=18'} pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} @@ -5562,9 +5605,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - queue-tick@1.0.1: - resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} @@ -5580,8 +5620,8 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - re-resizable@6.10.3: - resolution: {integrity: sha512-zvWb7X3RJMA4cuSrqoxgs3KR+D+pEXnGrD2FAD6BMYAULnZsSF4b7AOVyG6pC3VVNVOtlagGDCDmZSwWLjjBBw==} + re-resizable@6.11.2: + resolution: {integrity: sha512-2xI2P3OHs5qw7K0Ud1aLILK6MQxW50TcO+DetD9eIV58j84TqYeHoZcL9H4GXFXXIh7afhH8mv5iUCXII7OW7A==} peerDependencies: react: ^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -5603,13 +5643,8 @@ packages: peerDependencies: react: ^18.3.1 - react-dom@19.0.0: - resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} - peerDependencies: - react: ^19.0.0 - - react-easy-crop@5.2.0: - resolution: {integrity: sha512-gjb7jN+WnwfgpbNUI2jSwyoIxF1sJ0PVSNVgEysAgF1rj8AqR75fqmdvqZ6PFVgEX3rT1G4HJELesiQXr2ZvAg==} + react-easy-crop@5.4.1: + resolution: {integrity: sha512-Djtsi7bWO75vkKYkVxNRrJWY69pXLahIAkUN0mmt9cXNnaq2tpG59ctSY6P7ipJgBc7COJDRMRuwb2lYwtACNQ==} peerDependencies: react: '>=16.4.0' react-dom: '>=16.4.0' @@ -5634,8 +5669,8 @@ packages: '@types/react': optional: true - react-remove-scroll@2.6.2: - resolution: {integrity: sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==} + react-remove-scroll@2.6.3: + resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} engines: {node: '>=10'} peerDependencies: '@types/react': '*' @@ -5644,15 +5679,15 @@ packages: '@types/react': optional: true - react-router-dom@7.1.1: - resolution: {integrity: sha512-vSrQHWlJ5DCfyrhgo0k6zViOe9ToK8uT5XGSmnuC2R3/g261IdIMpZVqfjD6vWSXdnf5Czs4VA/V60oVR6/jnA==} + react-router-dom@7.4.0: + resolution: {integrity: sha512-VlksBPf3n2bijPvnA7nkTsXxMAKOj+bWp4R9c3i+bnwlSOFAGOkJkKhzy/OsRkWaBMICqcAl1JDzh9ZSOze9CA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.1.1: - resolution: {integrity: sha512-39sXJkftkKWRZ2oJtHhCxmoCrBCULr/HAH4IT5DHlgu/Q0FCPV0S4Lx+abjDTx/74xoZzNYDYbOZWlJjruyuDQ==} + react-router@7.4.0: + resolution: {integrity: sha512-Y2g5ObjkvX3VFeVt+0CIPuYd9PpgqCslG7ASSIdN73LwA1nNWzcMLaoMRJfP3prZFI92svxFwbn7XkLJ+UPQ6A==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -5671,8 +5706,8 @@ packages: '@types/react': optional: true - react-toastify@11.0.2: - resolution: {integrity: sha512-GjHuGaiXMvbls3ywqv8XdWONwrcO4DXCJIY1zVLkHU73gEElKvTTXNI5Vom3s/k/M8hnkrfsqgBSX3OwmlonbA==} + react-toastify@11.0.5: + resolution: {integrity: sha512-EpqHBGvnSTtHYhCPLxML05NLY2ZX0JURbAdNYa6BUkk+amz4wbKBQvoKQAB0ardvSarUBuY4Q4s1sluAzZwkmA==} peerDependencies: react: ^18 || ^19 react-dom: ^18 || ^19 @@ -5704,9 +5739,9 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readdirp@4.0.2: - resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} - engines: {node: '>= 14.16.0'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} @@ -5730,9 +5765,6 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.10.5: - resolution: {integrity: sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==} - regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -5817,8 +5849,8 @@ packages: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rimraf@2.7.1: @@ -5831,20 +5863,13 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} - hasBin: true - robots-parser@3.0.1: resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==} engines: {node: '>=10.0.0'} - rtlcss-webpack-plugin@4.0.7: - resolution: {integrity: sha512-ouSbJtgcLBBQIsMgarxsDnfgRqm/AS4BKls/mz/Xb6HSl+PdEzefTR+Wz5uWQx4odoX0g261Z7yb3QBz0MTm0g==} - - rtlcss@3.5.0: - resolution: {integrity: sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==} + rtlcss@4.3.0: + resolution: {integrity: sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==} + engines: {node: '>=12.0.0'} hasBin: true run-con@1.2.12: @@ -5857,8 +5882,8 @@ packages: rungen@0.3.2: resolution: {integrity: sha512-zWl10xu2D7zoR8zSC2U6bg5bYF6T/Wk7rxwp8IPaJH7f0Ge21G03kNHVgHR7tyVkSSfAOG0Rqf/Cl38JftSmtw==} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} safe-array-concat@1.1.3: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} @@ -5881,27 +5906,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-loader@12.6.0: - resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - - sass-loader@16.0.4: - resolution: {integrity: sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==} + sass-loader@16.0.5: + resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -5921,8 +5927,8 @@ packages: webpack: optional: true - sass@1.83.1: - resolution: {integrity: sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==} + sass@1.86.0: + resolution: {integrity: sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==} engines: {node: '>=14.0.0'} hasBin: true @@ -5933,13 +5939,6 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - scheduler@0.25.0: - resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} - - schema-utils@2.7.1: - resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} - engines: {node: '>= 8.9.0'} - schema-utils@3.3.0: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} @@ -5969,8 +5968,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true @@ -6024,18 +6023,10 @@ packages: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -6107,8 +6098,8 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} source-list-map@2.0.1: @@ -6142,8 +6133,8 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - spawnd@9.0.2: - resolution: {integrity: sha512-nl8DVHEDQ57IcKakzpjanspVChkMpGLuVwMR/eOn9cXE55Qr6luD2Kn06sA0ootRMdgrU4tInN6lA6ohTNvysw==} + spawnd@10.1.4: + resolution: {integrity: sha512-drqHc0mKJmtMsiGMOCwzlc5eZ0RPtRvT7tQAluW2A0qUc0G7TQ8KLcn3E6K5qzkLkH2UkS3nYQiVGULvvsD9dw==} engines: {node: '>=16'} spdx-correct@3.2.0: @@ -6158,8 +6149,8 @@ packages: spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.20: - resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} @@ -6193,8 +6184,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - streamx@2.21.1: - resolution: {integrity: sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==} + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} @@ -6292,24 +6283,37 @@ packages: peerDependencies: postcss: ^8.4.31 - stylelint-config-recommended-scss@5.0.2: - resolution: {integrity: sha512-b14BSZjcwW0hqbzm9b0S/ScN2+3CO3O4vcMNOw2KGf8lfVSwJ4p5TbNEXKwKl1+0FMtgRXZj6DqVUe/7nGnuBg==} + stylelint-config-recommended-scss@14.1.0: + resolution: {integrity: sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==} + engines: {node: '>=18.12.0'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^16.6.1 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended@14.0.1: + resolution: {integrity: sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==} + engines: {node: '>=18.12.0'} peerDependencies: - stylelint: ^14.0.0 + stylelint: ^16.1.0 - stylelint-config-recommended@6.0.0: - resolution: {integrity: sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==} + stylelint-config-recommended@15.0.0: + resolution: {integrity: sha512-9LejMFsat7L+NXttdHdTq94byn25TD+82bzGRiV1Pgasl99pWnwipXS5DguTpp3nP1XjvLXVnEJIuYBfsRjRkA==} + engines: {node: '>=18.12.0'} peerDependencies: - stylelint: ^14.0.0 + stylelint: ^16.13.0 - stylelint-scss@4.7.0: - resolution: {integrity: sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==} + stylelint-scss@6.11.1: + resolution: {integrity: sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA==} + engines: {node: '>=18.12.0'} peerDependencies: - stylelint: ^14.5.1 || ^15.0.0 + stylelint: ^16.0.2 - stylelint@14.16.1: - resolution: {integrity: sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + stylelint@16.17.0: + resolution: {integrity: sha512-I9OwVIWRMqVm2Br5iTbrfSqGRPWQUlvm6oXO1xZuYYu0Gpduy67N8wXOZv15p6E/JdlZiAtQaIoLKZEWk5hrjw==} + engines: {node: '>=18.12.0'} hasBin: true stylis@4.2.0: @@ -6323,9 +6327,9 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} @@ -6342,15 +6346,15 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - swiper@11.2.0: - resolution: {integrity: sha512-rjjAKgDEs+grR2eQshVDCcE4KNPC7CI294nfcbV9gE8WCsLdvOYXDeZKUYevqAZZp8j5hE7kpT3dAGVKFBWlxQ==} + swiper@11.2.6: + resolution: {integrity: sha512-8aXpYKtjy3DjcbzZfz+/OX/GhcU5h+looA6PbAzHMZT6ESSycSp9nAjPCenczgJyslV+rUGse64LMGpWE3PX9Q==} engines: {node: '>= 4.7.0'} symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + synckit@0.10.3: + resolution: {integrity: sha512-R1urvuyiTaWfeCggqEvpDJwAlDVdsT9NM+IP//Tk2x7qHCkSvBk/fwFgw/TLAHzZlrAnnazMcRw0ZD8HlYFTEQ==} engines: {node: ^14.18.0 || >=16.0.0} table@6.9.0: @@ -6364,21 +6368,14 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - - tar-fs@3.0.4: - resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} + tar-fs@3.0.8: + resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - terser-webpack-plugin@5.3.11: - resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -6393,8 +6390,8 @@ packages: uglify-js: optional: true - terser@5.37.0: - resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} + terser@5.39.0: + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} engines: {node: '>=10'} hasBin: true @@ -6408,8 +6405,8 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - third-party-web@0.23.4: - resolution: {integrity: sha512-kwYnSZRhEvv0SBW2fp8SBBKRglMoBjV8xz6C31m0ewqOtknB5UL+Ihg+M81hyFY5ldkZuGWPb+e4GVDkzf/gYg==} + third-party-web@0.26.5: + resolution: {integrity: sha512-tDuKQJUTfjvi9Fcrs1s6YAQAB9mzhTSbBZMfNgtWNmJlHuoFeXO6dzBFdGeCWRvYL50jQGK0jPsBZYxqZQJ2SA==} through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -6420,6 +6417,12 @@ packages: tiny-emitter@2.1.0: resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + tldts-core@6.1.85: + resolution: {integrity: sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==} + + tldts-icann@6.1.85: + resolution: {integrity: sha512-LIL8koGz5n2ni5wym7qw5vjeZxCgh5uI0Vs4LQu6M8k1IoknMttui/WTVI58jXBqRRSx76IniSJdeZDVFdALdw==} + tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -6439,9 +6442,6 @@ packages: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} @@ -6534,11 +6534,14 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typescript@5.7.2: - resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true @@ -6583,8 +6586,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - update-browserslist-db@1.1.2: - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -6648,8 +6651,8 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@11.0.5: - resolution: {integrity: sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==} + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true uuid@8.3.2: @@ -6660,9 +6663,6 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - v8-compile-cache@2.4.0: - resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} - v8-to-istanbul@9.3.0: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} @@ -6674,8 +6674,8 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - validator@13.12.0: - resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} + validator@13.15.0: + resolution: {integrity: sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==} engines: {node: '>= 0.10'} vary@1.1.2: @@ -6686,8 +6686,8 @@ packages: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} - wait-on@7.2.0: - resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==} + wait-on@8.0.3: + resolution: {integrity: sha512-nQFqAFzZDeRxsu7S3C7LbuxslHhk+gnJZHyethuGKAn2IVleIbTB9I3vJSQiSR+DifUqmdzfPMoMPJfLqMF2vw==} engines: {node: '>=12.0.0'} hasBin: true @@ -6701,11 +6701,8 @@ packages: wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - web-vitals@3.5.2: - resolution: {integrity: sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg==} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + web-vitals@4.2.4: + resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} @@ -6733,6 +6730,20 @@ packages: webpack-dev-server: optional: true + webpack-cli@6.0.1: + resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==} + engines: {node: '>=18.12.0'} + hasBin: true + peerDependencies: + webpack: ^5.82.0 + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + webpack-dev-middleware@5.3.4: resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} engines: {node: '>= 12.13.0'} @@ -6752,16 +6763,20 @@ packages: webpack-cli: optional: true - webpack-manifest-plugin@5.0.0: - resolution: {integrity: sha512-8RQfMAdc5Uw3QbCQ/CBV/AXqOR8mt03B6GJmRbhWopE8GzRfEpn+k0ZuWywxW+5QZsffhmFDY1J6ohqJo+eMuw==} - engines: {node: '>=12.22.0'} + webpack-manifest-plugin@5.0.1: + resolution: {integrity: sha512-xTlX7dC3hrASixA2inuWFMz6qHsNi6MT3Uiqw621sJjRTShtpMjbDYhPPZBwWUKdIYKIjSq9em6+uzWayf38aQ==} + engines: {node: '>=14'} peerDependencies: - webpack: ^5.47.0 + webpack: ^5.75.0 webpack-merge@5.10.0: resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} engines: {node: '>=10.0.0'} + webpack-merge@6.0.1: + resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} + engines: {node: '>=18.0.0'} + webpack-sources@2.3.1: resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} engines: {node: '>=10.13.0'} @@ -6770,8 +6785,8 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - webpack@5.97.1: - resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} + webpack@5.98.0: + resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -6800,9 +6815,6 @@ packages: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -6818,8 +6830,8 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} which@1.3.1: @@ -6865,6 +6877,10 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -6877,20 +6893,8 @@ packages: utf-8-validate: optional: true - ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -6901,18 +6905,6 @@ packages: utf-8-validate: optional: true - ws@8.5.0: - resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - xdg-basedir@4.0.0: resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} engines: {node: '>=8'} @@ -6931,9 +6923,6 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -6958,10 +6947,6 @@ packages: yargs@14.2.3: resolution: {integrity: sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==} - yargs@17.7.1: - resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} - engines: {node: '>=12'} - yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -6973,10 +6958,16 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + snapshots: '@ampproject/remapping@2.3.0': @@ -6986,19 +6977,19 @@ snapshots: '@ariakit/core@0.4.14': {} - '@ariakit/react-core@0.4.15(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@ariakit/react-core@0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/core': 0.4.14 '@floating-ui/dom': 1.6.13 react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.4.0(react@18.3.1) - '@ariakit/react@0.4.15(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@ariakit/react@0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@ariakit/react-core': 0.4.15(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + '@ariakit/react-core': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) '@babel/code-frame@7.26.2': dependencies: @@ -7006,20 +6997,40 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.3': {} + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.25.7': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.7) + '@babel/helpers': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@babel/core@7.26.0': + '@babel/core@7.26.10': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/generator': 7.27.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 convert-source-map: 2.0.0 debug: 4.4.0 gensync: 1.0.0-beta.2 @@ -7028,59 +7039,90 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@8.57.1)': + '@babel/eslint-parser@7.25.7(@babel/core@7.25.7)(eslint@8.57.1)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.25.7 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 8.57.1 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/generator@7.26.3': + '@babel/generator@7.27.0': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.27.0 - '@babel/helper-compilation-targets@7.25.9': + '@babel/helper-compilation-targets@7.27.0': dependencies: - '@babel/compat-data': 7.26.3 + '@babel/compat-data': 7.26.8 '@babel/helper-validator-option': 7.25.9 browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.25.7)': + dependencies: + '@babel/core': 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.26.5(@babel/core@7.25.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.27.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@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/core@7.26.0) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.27.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.0)': + '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.25.7 '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': + '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + debug: 4.4.0 + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 debug: 4.4.0 lodash.debounce: 4.0.8 resolve: 1.22.10 @@ -7089,55 +7131,82 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.27.0 - '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': + '@babel/helper-replace-supers@7.26.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.25.7 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color @@ -7149,680 +7218,1287 @@ snapshots: '@babel/helper-wrap-function@7.25.9': dependencies: - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/helpers@7.26.0': + '@babel/helpers@7.27.0': + dependencies: + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/parser@7.27.0': dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + '@babel/types': 7.27.0 - '@babel/parser@7.26.3': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/types': 7.26.3 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@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/core@7.26.0) - '@babel/traverse': 7.26.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/template': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.7) + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.25.7) + '@babel/traverse': 7.27.0 + globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + '@babel/traverse': 7.27.0 + globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.27.0 - '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.27.0 - '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@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/core@7.26.0) - '@babel/types': 7.26.3 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - regenerator-transform: 0.15.2 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typescript@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/preset-env@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/compat-data': 7.26.3 - '@babel/core': 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/core@7.26.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) - core-js-compat: 3.40.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/types': 7.26.3 - esutils: 2.0.3 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/preset-react@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/runtime@7.25.7': + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10)': dependencies: - regenerator-runtime: 0.14.1 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/runtime@7.26.0': + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.25.7)': dependencies: - regenerator-runtime: 0.14.1 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/template@7.25.9': + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse@7.26.4': + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.25.7)': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 - debug: 4.4.0 - globals: 11.12.0 + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/types@7.26.3': + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.7) + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.7) + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-runtime@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.25.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.7) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.25.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/preset-env@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.25.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.25.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.7) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.25.7) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.25.7) + '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.25.7) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.25.7) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.25.7) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.25.7) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.25.7) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.25.7) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.25.7) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.25.7) + '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.25.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.7) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.25.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.7) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.25.7) + core-js-compat: 3.41.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-env@7.26.9(@babel/core@7.26.10)': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10) + '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.10) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.10) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10) + '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10) + core-js-compat: 3.41.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.27.0 + esutils: 2.0.3 + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.27.0 + esutils: 2.0.3 + + '@babel/preset-react@7.26.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.25.7) + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.27.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.25.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/runtime@7.27.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/traverse@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.27.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@bcoe/v8-coverage@0.2.3': {} - '@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.1.2)': + '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': dependencies: - postcss-selector-parser: 6.1.2 + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-tokenizer@3.0.3': {} + + '@csstools/media-query-list-parser@3.0.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/media-query-list-parser@4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 '@discoveryjs/json-ext@0.5.7': {} + '@discoveryjs/json-ext@0.6.3': {} + + '@dual-bundle/import-meta-resolve@4.1.0': {} + '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.25.9 - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.7 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -7861,9 +8537,9 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1)': + '@emotion/react@11.14.0(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.7 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -7873,7 +8549,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 transitivePeerDependencies: - supports-color @@ -7887,18 +8563,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.20)(react@18.3.1))(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.7 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) + '@emotion/react': 11.14.0(@types/react@18.3.20)(react@18.3.1) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) '@emotion/utils': 1.4.2 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 transitivePeerDependencies: - supports-color @@ -7918,30 +8594,13 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 4.0.0 - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.5.1(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)': - dependencies: - eslint: 9.17.0 - eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.19.1': - dependencies: - '@eslint/object-schema': 2.1.5 - debug: 4.4.0 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/core@0.9.1': - dependencies: - '@types/json-schema': 7.0.15 - '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 @@ -7949,21 +8608,7 @@ snapshots: espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/eslintrc@3.2.0': - dependencies: - ajv: 6.12.6 - debug: 4.4.0 - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 @@ -7972,14 +8617,6 @@ snapshots: '@eslint/js@8.57.1': {} - '@eslint/js@9.17.0': {} - - '@eslint/object-schema@2.1.5': {} - - '@eslint/plugin-kit@0.2.4': - dependencies: - levn: 0.4.1 - '@floating-ui/core@1.6.9': dependencies: '@floating-ui/utils': 0.2.9 @@ -7989,26 +8626,45 @@ snapshots: '@floating-ui/core': 1.6.9 '@floating-ui/utils': 0.2.9 - '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/dom': 1.6.13 react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) '@floating-ui/utils@0.2.9': {} - '@hapi/hoek@9.3.0': {} + '@formatjs/ecma402-abstract@2.3.4': + dependencies: + '@formatjs/fast-memoize': 2.2.7 + '@formatjs/intl-localematcher': 0.6.1 + decimal.js: 10.5.0 + tslib: 2.8.1 - '@hapi/topo@5.1.0': + '@formatjs/fast-memoize@2.2.7': dependencies: - '@hapi/hoek': 9.3.0 + tslib: 2.8.1 + + '@formatjs/icu-messageformat-parser@2.11.2': + dependencies: + '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/icu-skeleton-parser': 1.8.14 + tslib: 2.8.1 - '@humanfs/core@0.19.1': {} + '@formatjs/icu-skeleton-parser@1.8.14': + dependencies: + '@formatjs/ecma402-abstract': 2.3.4 + tslib: 2.8.1 - '@humanfs/node@0.16.6': + '@formatjs/intl-localematcher@0.6.1': dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + tslib: 2.8.1 + + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 '@humanwhocodes/config-array@0.13.0': dependencies: @@ -8022,10 +8678,6 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.1': {} - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -8048,7 +8700,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.14 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -8061,14 +8713,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.14 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0) + jest-config: 29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8093,7 +8745,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.14 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -8111,7 +8763,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.10.5 + '@types/node': 22.13.14 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8133,7 +8785,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.10.5 + '@types/node': 22.13.14 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -8180,7 +8832,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -8192,7 +8844,7 @@ snapshots: jest-regex-util: 29.6.3 jest-util: 29.7.0 micromatch: 4.0.8 - pirates: 4.0.6 + pirates: 4.0.7 slash: 3.0.0 write-file-atomic: 4.0.2 transitivePeerDependencies: @@ -8203,7 +8855,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -8229,6 +8881,10 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@keyv/serialize@1.0.3': + dependencies: + buffer: 6.0.3 + '@leichtgewicht/ip-codec@2.0.5': {} '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': @@ -8245,241 +8901,258 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.18.0 + fastq: 1.19.1 - '@parcel/watcher-android-arm64@2.5.0': + '@parcel/watcher-android-arm64@2.5.1': optional: true - '@parcel/watcher-darwin-arm64@2.5.0': + '@parcel/watcher-darwin-arm64@2.5.1': optional: true - '@parcel/watcher-darwin-x64@2.5.0': + '@parcel/watcher-darwin-x64@2.5.1': optional: true - '@parcel/watcher-freebsd-x64@2.5.0': + '@parcel/watcher-freebsd-x64@2.5.1': optional: true - '@parcel/watcher-linux-arm-glibc@2.5.0': + '@parcel/watcher-linux-arm-glibc@2.5.1': optional: true - '@parcel/watcher-linux-arm-musl@2.5.0': + '@parcel/watcher-linux-arm-musl@2.5.1': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.0': + '@parcel/watcher-linux-arm64-glibc@2.5.1': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.0': + '@parcel/watcher-linux-arm64-musl@2.5.1': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.0': + '@parcel/watcher-linux-x64-glibc@2.5.1': optional: true - '@parcel/watcher-linux-x64-musl@2.5.0': + '@parcel/watcher-linux-x64-musl@2.5.1': optional: true - '@parcel/watcher-win32-arm64@2.5.0': + '@parcel/watcher-win32-arm64@2.5.1': optional: true - '@parcel/watcher-win32-ia32@2.5.0': + '@parcel/watcher-win32-ia32@2.5.1': optional: true - '@parcel/watcher-win32-x64@2.5.0': + '@parcel/watcher-win32-x64@2.5.1': optional: true - '@parcel/watcher@2.5.0': + '@parcel/watcher@2.5.1': dependencies: detect-libc: 1.0.3 is-glob: 4.0.3 micromatch: 4.0.8 node-addon-api: 7.1.1 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.0 - '@parcel/watcher-darwin-arm64': 2.5.0 - '@parcel/watcher-darwin-x64': 2.5.0 - '@parcel/watcher-freebsd-x64': 2.5.0 - '@parcel/watcher-linux-arm-glibc': 2.5.0 - '@parcel/watcher-linux-arm-musl': 2.5.0 - '@parcel/watcher-linux-arm64-glibc': 2.5.0 - '@parcel/watcher-linux-arm64-musl': 2.5.0 - '@parcel/watcher-linux-x64-glibc': 2.5.0 - '@parcel/watcher-linux-x64-musl': 2.5.0 - '@parcel/watcher-win32-arm64': 2.5.0 - '@parcel/watcher-win32-ia32': 2.5.0 - '@parcel/watcher-win32-x64': 2.5.0 + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 optional: true - '@pkgr/core@0.1.1': {} + '@paulirish/trace_engine@0.0.50': + dependencies: + third-party-web: 0.26.5 + + '@pkgr/core@0.2.0': {} - '@playwright/test@1.49.1': + '@playwright/test@1.51.1': dependencies: - playwright: 1.49.1 + playwright: 1.51.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@3.13.1)(webpack-dev-server@4.15.2)(webpack@5.97.1)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@3.13.1)(webpack-dev-server@4.15.2)(webpack@5.98.0)': dependencies: ansi-html: 0.0.9 - core-js-pure: 3.40.0 + core-js-pure: 3.41.0 error-stack-parser: 2.1.4 - html-entities: 2.5.2 + html-entities: 2.5.3 loader-utils: 2.0.4 react-refresh: 0.14.2 schema-utils: 4.3.0 source-map: 0.7.4 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) optionalDependencies: '@types/webpack': 4.41.40 type-fest: 3.13.1 - webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1) + webpack-dev-server: 4.15.2(webpack-cli@6.0.1)(webpack@5.98.0) '@polka/url@1.0.0-next.28': {} - '@puppeteer/browsers@1.4.6(typescript@5.7.2)': + '@puppeteer/browsers@2.6.1': dependencies: - debug: 4.3.4 + debug: 4.4.0 extract-zip: 2.0.1 progress: 2.0.3 - proxy-agent: 6.3.0 - tar-fs: 3.0.4 + proxy-agent: 6.5.0 + semver: 7.7.1 + tar-fs: 3.0.8 unbzip2-stream: 1.4.3 - yargs: 17.7.1 - optionalDependencies: - typescript: 5.7.2 + yargs: 17.7.2 transitivePeerDependencies: + - bare-buffer + - supports-color + + '@puppeteer/browsers@2.8.0': + dependencies: + debug: 4.4.0 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.1 + tar-fs: 3.0.8 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer - supports-color '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - '@radix-ui/react-context@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-context@1.1.1(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - '@radix-ui/react-dialog@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) - react-remove-scroll: 2.6.2(@types/react@18.3.18)(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.20)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-id@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-id@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - '@radix-ui/react-portal@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-primitive@2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-slot@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-slot@1.1.2(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 '@react-spring/animated@9.7.5(react@18.3.1)': dependencies: @@ -8504,56 +9177,57 @@ snapshots: '@react-spring/types@9.7.5': {} - '@react-spring/web@9.7.5(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@react-spring/web@9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-spring/animated': 9.7.5(react@18.3.1) '@react-spring/core': 9.7.5(react@18.3.1) '@react-spring/shared': 9.7.5(react@18.3.1) '@react-spring/types': 9.7.5 react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + + '@remote-ui/rpc@1.4.5': {} '@rtsao/scc@1.1.0': {} - '@sentry/core@6.19.7': + '@sentry-internal/tracing@7.120.3': dependencies: - '@sentry/hub': 6.19.7 - '@sentry/minimal': 6.19.7 - '@sentry/types': 6.19.7 - '@sentry/utils': 6.19.7 - tslib: 1.14.1 + '@sentry/core': 7.120.3 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 - '@sentry/hub@6.19.7': + '@sentry/core@7.120.3': dependencies: - '@sentry/types': 6.19.7 - '@sentry/utils': 6.19.7 - tslib: 1.14.1 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 - '@sentry/minimal@6.19.7': + '@sentry/integrations@7.120.3': dependencies: - '@sentry/hub': 6.19.7 - '@sentry/types': 6.19.7 - tslib: 1.14.1 + '@sentry/core': 7.120.3 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 + localforage: 1.10.0 - '@sentry/node@6.19.7': + '@sentry/node@7.120.3': dependencies: - '@sentry/core': 6.19.7 - '@sentry/hub': 6.19.7 - '@sentry/types': 6.19.7 - '@sentry/utils': 6.19.7 - cookie: 0.4.2 - https-proxy-agent: 5.0.1 - lru_map: 0.3.3 - tslib: 1.14.1 - transitivePeerDependencies: - - supports-color + '@sentry-internal/tracing': 7.120.3 + '@sentry/core': 7.120.3 + '@sentry/integrations': 7.120.3 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 - '@sentry/types@6.19.7': {} + '@sentry/types@7.120.3': {} - '@sentry/utils@6.19.7': + '@sentry/utils@7.120.3': dependencies: - '@sentry/types': 6.19.7 - tslib: 1.14.1 + '@sentry/types': 7.120.3 + + '@shopify/web-worker@6.4.0(@babel/core@7.26.10)(webpack@5.98.0)': + dependencies: + '@remote-ui/rpc': 1.4.5 + optionalDependencies: + '@babel/core': 7.26.10 + webpack: 5.98.0(webpack-cli@6.0.1) '@sideway/address@4.1.5': dependencies: @@ -8573,56 +9247,67 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.0)': + '@stylistic/stylelint-plugin@3.1.2(stylelint@16.17.0(typescript@5.8.2))': + dependencies: + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + '@csstools/media-query-list-parser': 3.0.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + is-plain-object: 5.0.0 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + style-search: 0.1.0 + stylelint: 16.17.0(typescript@5.8.2) + + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 - '@svgr/babel-preset@8.1.0(@babel/core@7.26.0)': + '@svgr/babel-preset@8.1.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.0) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.0) + '@babel/core': 7.26.10 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.10) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.10) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.10) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.10) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.10) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.10) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.10) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.10) - '@svgr/core@8.1.0(typescript@5.7.2)': + '@svgr/core@8.1.0(typescript@5.8.2)': dependencies: - '@babel/core': 7.26.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.26.0) + '@babel/core': 7.26.10 + '@svgr/babel-preset': 8.1.0(@babel/core@7.26.10) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.7.2) + cosmiconfig: 8.3.6(typescript@5.8.2) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -8630,38 +9315,38 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.27.0 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.7.2))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.8.2))': dependencies: - '@babel/core': 7.26.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.26.0) - '@svgr/core': 8.1.0(typescript@5.7.2) + '@babel/core': 7.26.10 + '@svgr/babel-preset': 8.1.0(@babel/core@7.26.10) + '@svgr/core': 8.1.0(typescript@5.8.2) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.7.2))(typescript@5.7.2)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.8.2))(typescript@5.8.2)': dependencies: - '@svgr/core': 8.1.0(typescript@5.7.2) - cosmiconfig: 8.3.6(typescript@5.7.2) + '@svgr/core': 8.1.0(typescript@5.8.2) + cosmiconfig: 8.3.6(typescript@5.8.2) deepmerge: 4.3.1 svgo: 3.3.2 transitivePeerDependencies: - typescript - '@svgr/webpack@8.1.0(typescript@5.7.2)': + '@svgr/webpack@8.1.0(typescript@5.8.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.0) - '@babel/preset-env': 7.26.0(@babel/core@7.26.0) - '@babel/preset-react': 7.26.3(@babel/core@7.26.0) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) - '@svgr/core': 8.1.0(typescript@5.7.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.7.2)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.7.2))(typescript@5.7.2) + '@babel/core': 7.26.10 + '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.10) + '@babel/preset-env': 7.26.9(@babel/core@7.26.10) + '@babel/preset-react': 7.26.3(@babel/core@7.26.10) + '@babel/preset-typescript': 7.27.0(@babel/core@7.26.10) + '@svgr/core': 8.1.0(typescript@5.8.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.2)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.8.2))(typescript@5.8.2) transitivePeerDependencies: - supports-color - typescript @@ -8687,68 +9372,68 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 + '@types/babel__traverse': 7.20.7 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.27.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 - '@types/babel__traverse@7.20.6': + '@types/babel__traverse@7.20.7': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.27.0 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/connect-history-api-fallback@1.5.4': dependencies: - '@types/express-serve-static-core': 5.0.4 - '@types/node': 22.10.5 + '@types/express-serve-static-core': 5.0.6 + '@types/node': 22.13.14 '@types/connect@3.4.38': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/cookie@0.6.0': {} '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 - '@types/estree@1.0.6': {} + '@types/estree@1.0.7': {} '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.10.5 - '@types/qs': 6.9.17 + '@types/node': 22.13.14 + '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - '@types/express-serve-static-core@5.0.4': + '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 22.10.5 - '@types/qs': 6.9.17 + '@types/node': 22.13.14 + '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -8756,17 +9441,17 @@ snapshots: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.17 + '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/gradient-parser@0.1.3': {} @@ -8774,9 +9459,9 @@ snapshots: '@types/http-errors@2.0.4': {} - '@types/http-proxy@1.17.15': + '@types/http-proxy@1.17.16': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/istanbul-lib-coverage@2.0.6': {} @@ -8790,7 +9475,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 @@ -8808,9 +9493,9 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 - '@types/node@22.10.5': + '@types/node@22.13.14': dependencies: undici-types: 6.20.0 @@ -8820,27 +9505,27 @@ snapshots: '@types/prop-types@15.7.14': {} - '@types/qs@6.9.17': {} + '@types/qs@6.9.18': {} '@types/range-parser@1.2.7': {} - '@types/react-dom@18.3.5(@types/react@18.3.18)': + '@types/react-dom@18.3.5(@types/react@18.3.20)': dependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - '@types/react@18.3.18': + '@types/react@18.3.20': dependencies: '@types/prop-types': 15.7.14 csstype: 3.1.3 '@types/retry@0.12.0': {} - '@types/semver@7.5.8': {} + '@types/semver@7.7.0': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/serve-index@1.9.4': dependencies: @@ -8849,12 +9534,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/source-list-map@0.1.6': {} @@ -8870,22 +9555,22 @@ snapshots: '@types/webpack-sources@3.2.3': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/source-list-map': 0.1.6 source-map: 0.7.4 '@types/webpack@4.41.40': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/tapable': 1.0.12 '@types/uglify-js': 3.17.5 '@types/webpack-sources': 3.2.3 anymatch: 3.1.3 source-map: 0.6.1 - '@types/ws@8.5.13': + '@types/ws@8.18.0': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 '@types/yargs-parser@21.0.3': {} @@ -8895,39 +9580,39 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 optional: true - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.7.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.4.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.7.2) + semver: 7.7.1 + ts-api-utils: 1.4.3(typescript@5.8.2) optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.4.0 eslint: 8.57.1 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -8941,15 +9626,15 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.8.2)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.2) debug: 4.4.0 eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.7.2) + ts-api-utils: 1.4.3(typescript@5.8.2) optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -8957,21 +9642,21 @@ snapshots: '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.7.2) + semver: 7.7.1 + tsutils: 3.21.0(typescript@5.8.2) optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.2)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 @@ -8979,38 +9664,38 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.7.2) + semver: 7.7.1 + ts-api-utils: 1.4.3(typescript@5.8.2) optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.8.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 + '@types/semver': 7.7.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.2) eslint: 8.57.1 eslint-scope: 5.1.1 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.8.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 + '@types/semver': 7.7.0 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) eslint: 8.57.1 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color - typescript @@ -9025,7 +9710,7 @@ snapshots: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.1': {} + '@ungap/structured-clone@1.3.0': {} '@use-gesture/core@10.3.1': {} @@ -9110,107 +9795,116 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.97.1)': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.98.0)': dependencies: - webpack: 5.97.1(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.97.1) + webpack: 5.98.0(webpack-cli@6.0.1) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.98.0) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.97.1)': + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.98.0)': dependencies: - webpack: 5.97.1(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.97.1) + webpack: 5.98.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@4.15.2)(webpack@5.98.0) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.97.1)': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.98.0)': dependencies: - webpack: 5.97.1(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.97.1) - optionalDependencies: - webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1) + webpack: 5.98.0(webpack-cli@6.0.1) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.98.0) - '@wordpress/a11y@4.15.1': + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.98.0)': dependencies: - '@babel/runtime': 7.25.7 - '@wordpress/dom-ready': 4.15.0 - '@wordpress/i18n': 5.15.1 + webpack: 5.98.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@4.15.2)(webpack@5.98.0) - '@wordpress/api-fetch@6.55.0': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.98.0)': dependencies: - '@babel/runtime': 7.26.0 - '@wordpress/i18n': 4.58.0 - '@wordpress/url': 3.59.0 + webpack: 5.98.0(webpack-cli@6.0.1) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.98.0) + optionalDependencies: + webpack-dev-server: 4.15.2(webpack-cli@6.0.1)(webpack@5.98.0) + + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@4.15.2)(webpack@5.98.0)': + dependencies: + webpack: 5.98.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@4.15.2)(webpack@5.98.0) + optionalDependencies: + webpack-dev-server: 4.15.2(webpack-cli@6.0.1)(webpack@5.98.0) - '@wordpress/api-fetch@7.15.1': + '@wordpress/a11y@4.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/i18n': 5.15.1 - '@wordpress/url': 4.15.0 + '@wordpress/dom-ready': 4.20.0 + '@wordpress/i18n': 5.20.0 - '@wordpress/autop@4.15.0': + '@wordpress/api-fetch@7.20.0': dependencies: '@babel/runtime': 7.25.7 + '@wordpress/i18n': 5.20.0 + '@wordpress/url': 4.20.0 - '@wordpress/babel-plugin-import-jsx-pragma@4.41.0(@babel/core@7.26.0)': + '@wordpress/autop@4.20.0': dependencies: - '@babel/core': 7.26.0 + '@babel/runtime': 7.25.7 - '@wordpress/babel-preset-default@7.42.0': + '@wordpress/babel-preset-default@8.20.0': dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) - '@babel/preset-env': 7.26.0(@babel/core@7.26.0) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) - '@babel/runtime': 7.26.0 - '@wordpress/babel-plugin-import-jsx-pragma': 4.41.0(@babel/core@7.26.0) - '@wordpress/browserslist-config': 5.41.0 - '@wordpress/warning': 2.58.0 + '@babel/core': 7.25.7 + '@babel/plugin-transform-react-jsx': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-runtime': 7.25.7(@babel/core@7.25.7) + '@babel/preset-env': 7.25.7(@babel/core@7.25.7) + '@babel/preset-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/runtime': 7.25.7 + '@wordpress/browserslist-config': 6.20.0 + '@wordpress/warning': 3.20.0 browserslist: 4.24.4 - core-js: 3.40.0 + core-js: 3.41.0 react: 18.3.1 transitivePeerDependencies: - supports-color - '@wordpress/base-styles@4.49.0': {} + '@wordpress/base-styles@5.20.0': {} - '@wordpress/blob@4.15.0': + '@wordpress/blob@4.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor@13.4.0(@emotion/is-prop-valid@1.3.1)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.26.0 - '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) - '@react-spring/web': 9.7.5(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@wordpress/a11y': 4.15.1 - '@wordpress/api-fetch': 7.15.1 - '@wordpress/blob': 4.15.0 - '@wordpress/blocks': 13.10.0(react@18.3.1) - '@wordpress/commands': 1.15.1(@emotion/is-prop-valid@1.3.1)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@wordpress/components': 28.13.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.15.1(react@18.3.1) - '@wordpress/data': 10.15.1(react@18.3.1) - '@wordpress/date': 5.15.1 - '@wordpress/deprecated': 4.15.1 - '@wordpress/dom': 4.15.1 - '@wordpress/element': 6.15.1 - '@wordpress/escape-html': 3.15.0 - '@wordpress/hooks': 4.15.0 - '@wordpress/html-entities': 4.15.0 - '@wordpress/i18n': 5.15.1 - '@wordpress/icons': 10.15.1(react@18.3.1) - '@wordpress/is-shallow-equal': 5.15.0 - '@wordpress/keyboard-shortcuts': 5.15.1(react@18.3.1) - '@wordpress/keycodes': 4.15.1 - '@wordpress/notices': 5.15.1(react@18.3.1) - '@wordpress/preferences': 4.15.1(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.15.0 - '@wordpress/rich-text': 7.15.1(react@18.3.1) - '@wordpress/style-engine': 2.15.0 - '@wordpress/token-list': 3.15.0 - '@wordpress/url': 4.15.0 - '@wordpress/warning': 3.15.0 - '@wordpress/wordcount': 4.15.0 + '@wordpress/block-editor@14.15.0(@babel/core@7.26.10)(@emotion/is-prop-valid@1.3.1)(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.98.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@emotion/react': 11.14.0(@types/react@18.3.20)(react@18.3.1) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.20)(react@18.3.1))(@types/react@18.3.20)(react@18.3.1) + '@react-spring/web': 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/a11y': 4.20.0 + '@wordpress/api-fetch': 7.20.0 + '@wordpress/blob': 4.20.0 + '@wordpress/block-serialization-default-parser': 5.20.0 + '@wordpress/blocks': 14.9.0(react@18.3.1) + '@wordpress/commands': 1.20.0(@emotion/is-prop-valid@1.3.1)(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.6.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.20.0(react@18.3.1) + '@wordpress/data': 10.20.0(react@18.3.1) + '@wordpress/date': 5.20.0 + '@wordpress/deprecated': 4.20.0 + '@wordpress/dom': 4.20.0 + '@wordpress/element': 6.20.0 + '@wordpress/escape-html': 3.20.0 + '@wordpress/hooks': 4.20.0 + '@wordpress/html-entities': 4.20.0 + '@wordpress/i18n': 5.20.0 + '@wordpress/icons': 10.20.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.20.0 + '@wordpress/keyboard-shortcuts': 5.20.0(react@18.3.1) + '@wordpress/keycodes': 4.20.0 + '@wordpress/notices': 5.20.0(react@18.3.1) + '@wordpress/preferences': 4.20.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.20.0 + '@wordpress/private-apis': 1.20.0 + '@wordpress/rich-text': 7.20.0(react@18.3.1) + '@wordpress/style-engine': 2.20.0 + '@wordpress/token-list': 3.20.0 + '@wordpress/upload-media': 0.5.0(@babel/core@7.26.10)(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.98.0) + '@wordpress/url': 4.20.0 + '@wordpress/warning': 3.20.0 + '@wordpress/wordcount': 4.20.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -9218,42 +9912,46 @@ snapshots: diff: 4.0.2 fast-deep-equal: 3.1.3 memize: 2.1.0 - postcss: 8.4.49 - postcss-prefixwrap: 1.53.0(postcss@8.4.49) - postcss-urlrebase: 1.4.0(postcss@8.4.49) + parsel-js: 1.2.1 + postcss: 8.5.3 + postcss-prefix-selector: 1.16.1(postcss@8.5.3) + postcss-urlrebase: 1.4.0(postcss@8.5.3) react: 18.3.1 - react-autosize-textarea: 7.1.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - react-dom: 19.0.0(react@18.3.1) - react-easy-crop: 5.2.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-easy-crop: 5.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remove-accents: 0.5.0 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - supports-color + - webpack + - webpack-virtual-modules - '@wordpress/block-serialization-default-parser@5.15.0': + '@wordpress/block-serialization-default-parser@5.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/blocks@13.10.0(react@18.3.1)': + '@wordpress/blocks@14.9.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/autop': 4.15.0 - '@wordpress/blob': 4.15.0 - '@wordpress/block-serialization-default-parser': 5.15.0 - '@wordpress/data': 10.15.1(react@18.3.1) - '@wordpress/deprecated': 4.15.1 - '@wordpress/dom': 4.15.1 - '@wordpress/element': 6.15.1 - '@wordpress/hooks': 4.15.0 - '@wordpress/html-entities': 4.15.0 - '@wordpress/i18n': 5.15.1 - '@wordpress/is-shallow-equal': 5.15.0 - '@wordpress/private-apis': 1.15.0 - '@wordpress/rich-text': 7.15.1(react@18.3.1) - '@wordpress/shortcode': 4.15.0 - '@wordpress/warning': 3.15.0 + '@wordpress/autop': 4.20.0 + '@wordpress/blob': 4.20.0 + '@wordpress/block-serialization-default-parser': 5.20.0 + '@wordpress/data': 10.20.0(react@18.3.1) + '@wordpress/deprecated': 4.20.0 + '@wordpress/dom': 4.20.0 + '@wordpress/element': 6.20.0 + '@wordpress/hooks': 4.20.0 + '@wordpress/html-entities': 4.20.0 + '@wordpress/i18n': 5.20.0 + '@wordpress/is-shallow-equal': 5.20.0 + '@wordpress/private-apis': 1.20.0 + '@wordpress/rich-text': 7.20.0(react@18.3.1) + '@wordpress/shortcode': 4.20.0 + '@wordpress/warning': 3.20.0 change-case: 4.1.2 colord: 2.9.3 fast-deep-equal: 3.1.3 @@ -9267,129 +9965,75 @@ snapshots: simple-html-tokenizer: 0.5.11 uuid: 9.0.1 - '@wordpress/browserslist-config@5.41.0': {} + '@wordpress/browserslist-config@6.20.0': {} - '@wordpress/commands@1.15.1(@emotion/is-prop-valid@1.3.1)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@wordpress/commands@1.20.0(@emotion/is-prop-valid@1.3.1)(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.1.1(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.15.1(react@18.3.1) - '@wordpress/element': 6.15.1 - '@wordpress/i18n': 5.15.1 - '@wordpress/icons': 10.15.1(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.15.1(react@18.3.1) - '@wordpress/private-apis': 1.15.0 + '@wordpress/components': 29.6.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.20.0(react@18.3.1) + '@wordpress/element': 6.20.0 + '@wordpress/i18n': 5.20.0 + '@wordpress/icons': 10.20.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.20.0(react@18.3.1) + '@wordpress/private-apis': 1.20.0 clsx: 2.1.1 - cmdk: 1.0.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + cmdk: 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - supports-color - '@wordpress/components@28.13.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@wordpress/components@29.6.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@ariakit/react': 0.4.15(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 '@emotion/cache': 11.14.0 '@emotion/css': 11.13.5 - '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) + '@emotion/react': 11.14.0(@types/react@18.3.20)(react@18.3.1) '@emotion/serialize': 1.3.3 - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.20)(react@18.3.1))(@types/react@18.3.20)(react@18.3.1) '@emotion/utils': 1.4.2 - '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/gradient-parser': 0.1.3 '@types/highlight-words-core': 1.2.1 '@use-gesture/react': 10.3.1(react@18.3.1) - '@wordpress/a11y': 4.15.1 - '@wordpress/compose': 7.15.1(react@18.3.1) - '@wordpress/date': 5.15.1 - '@wordpress/deprecated': 4.15.1 - '@wordpress/dom': 4.15.1 - '@wordpress/element': 6.15.1 - '@wordpress/escape-html': 3.15.0 - '@wordpress/hooks': 4.15.0 - '@wordpress/html-entities': 4.15.0 - '@wordpress/i18n': 5.15.1 - '@wordpress/icons': 10.15.1(react@18.3.1) - '@wordpress/is-shallow-equal': 5.15.0 - '@wordpress/keycodes': 4.15.1 - '@wordpress/primitives': 4.15.1(react@18.3.1) - '@wordpress/private-apis': 1.15.0 - '@wordpress/rich-text': 7.15.1(react@18.3.1) - '@wordpress/warning': 3.15.0 + '@wordpress/a11y': 4.20.0 + '@wordpress/compose': 7.20.0(react@18.3.1) + '@wordpress/date': 5.20.0 + '@wordpress/deprecated': 4.20.0 + '@wordpress/dom': 4.20.0 + '@wordpress/element': 6.20.0 + '@wordpress/escape-html': 3.20.0 + '@wordpress/hooks': 4.20.0 + '@wordpress/html-entities': 4.20.0 + '@wordpress/i18n': 5.20.0 + '@wordpress/icons': 10.20.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.20.0 + '@wordpress/keycodes': 4.20.0 + '@wordpress/primitives': 4.20.0(react@18.3.1) + '@wordpress/private-apis': 1.20.0 + '@wordpress/rich-text': 7.20.0(react@18.3.1) + '@wordpress/warning': 3.20.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 date-fns: 3.6.0 deepmerge: 4.3.1 fast-deep-equal: 3.1.3 - framer-motion: 11.16.1(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + framer-motion: 11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) gradient-parser: 0.1.5 highlight-words-core: 1.2.3 is-plain-object: 5.0.0 memize: 2.1.0 path-to-regexp: 6.3.0 - re-resizable: 6.10.3(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + re-resizable: 6.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - react-colorful: 5.6.1(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - react-dom: 19.0.0(react@18.3.1) - remove-accents: 0.5.0 - uuid: 9.0.1 - transitivePeerDependencies: - - '@emotion/is-prop-valid' - - '@types/react' - - supports-color - - '@wordpress/components@29.1.1(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': - dependencies: - '@ariakit/react': 0.4.15(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@babel/runtime': 7.25.7 - '@emotion/cache': 11.14.0 - '@emotion/css': 11.13.5 - '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) - '@emotion/serialize': 1.3.3 - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) - '@emotion/utils': 1.4.2 - '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@types/gradient-parser': 0.1.3 - '@types/highlight-words-core': 1.2.1 - '@use-gesture/react': 10.3.1(react@18.3.1) - '@wordpress/a11y': 4.15.1 - '@wordpress/compose': 7.15.1(react@18.3.1) - '@wordpress/date': 5.15.1 - '@wordpress/deprecated': 4.15.1 - '@wordpress/dom': 4.15.1 - '@wordpress/element': 6.15.1 - '@wordpress/escape-html': 3.15.0 - '@wordpress/hooks': 4.15.0 - '@wordpress/html-entities': 4.15.0 - '@wordpress/i18n': 5.15.1 - '@wordpress/icons': 10.15.1(react@18.3.1) - '@wordpress/is-shallow-equal': 5.15.0 - '@wordpress/keycodes': 4.15.1 - '@wordpress/primitives': 4.15.1(react@18.3.1) - '@wordpress/private-apis': 1.15.0 - '@wordpress/rich-text': 7.15.1(react@18.3.1) - '@wordpress/warning': 3.15.0 - change-case: 4.1.2 - clsx: 2.1.1 - colord: 2.9.3 - date-fns: 3.6.0 - deepmerge: 4.3.1 - fast-deep-equal: 3.1.3 - framer-motion: 11.16.1(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - gradient-parser: 0.1.5 - highlight-words-core: 1.2.3 - is-plain-object: 5.0.0 - memize: 2.1.0 - path-to-regexp: 6.3.0 - re-resizable: 6.10.3(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-colorful: 5.6.1(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - react-dom: 19.0.0(react@18.3.1) + react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) remove-accents: 0.5.0 uuid: 9.0.1 transitivePeerDependencies: @@ -9397,33 +10041,33 @@ snapshots: - '@types/react' - supports-color - '@wordpress/compose@7.15.1(react@18.3.1)': + '@wordpress/compose@7.20.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 '@types/mousetrap': 1.6.15 - '@wordpress/deprecated': 4.15.1 - '@wordpress/dom': 4.15.1 - '@wordpress/element': 6.15.1 - '@wordpress/is-shallow-equal': 5.15.0 - '@wordpress/keycodes': 4.15.1 - '@wordpress/priority-queue': 3.15.0 - '@wordpress/undo-manager': 1.15.1 + '@wordpress/deprecated': 4.20.0 + '@wordpress/dom': 4.20.0 + '@wordpress/element': 6.20.0 + '@wordpress/is-shallow-equal': 5.20.0 + '@wordpress/keycodes': 4.20.0 + '@wordpress/priority-queue': 3.20.0 + '@wordpress/undo-manager': 1.20.0 change-case: 4.1.2 clipboard: 2.0.11 mousetrap: 1.6.5 react: 18.3.1 use-memo-one: 1.1.3(react@18.3.1) - '@wordpress/data@10.15.1(react@18.3.1)': + '@wordpress/data@10.20.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/compose': 7.15.1(react@18.3.1) - '@wordpress/deprecated': 4.15.1 - '@wordpress/element': 6.15.1 - '@wordpress/is-shallow-equal': 5.15.0 - '@wordpress/priority-queue': 3.15.0 - '@wordpress/private-apis': 1.15.0 - '@wordpress/redux-routine': 5.15.0(redux@5.0.1) + '@wordpress/compose': 7.20.0(react@18.3.1) + '@wordpress/deprecated': 4.20.0 + '@wordpress/element': 6.20.0 + '@wordpress/is-shallow-equal': 5.20.0 + '@wordpress/priority-queue': 3.20.0 + '@wordpress/private-apis': 1.20.0 + '@wordpress/redux-routine': 5.20.0(redux@5.0.1) deepmerge: 4.3.1 equivalent-key-map: 0.2.2 is-plain-object: 5.0.0 @@ -9433,90 +10077,86 @@ snapshots: rememo: 4.0.2 use-memo-one: 1.1.3(react@18.3.1) - '@wordpress/date@5.15.1': + '@wordpress/date@5.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/deprecated': 4.15.1 + '@wordpress/deprecated': 4.20.0 moment: 2.30.1 - moment-timezone: 0.5.46 + moment-timezone: 0.5.48 - '@wordpress/dependency-extraction-webpack-plugin@5.9.0(webpack@5.97.1)': + '@wordpress/dependency-extraction-webpack-plugin@6.20.0(webpack@5.98.0)': dependencies: json2php: 0.0.7 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) - '@wordpress/deprecated@4.15.1': + '@wordpress/deprecated@4.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/hooks': 4.15.0 + '@wordpress/hooks': 4.20.0 - '@wordpress/dom-ready@4.15.0': + '@wordpress/dom-ready@4.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/dom@4.15.1': + '@wordpress/dom@4.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/deprecated': 4.15.1 + '@wordpress/deprecated': 4.20.0 - '@wordpress/e2e-test-utils-playwright@0.26.0(@playwright/test@1.49.1)(encoding@0.1.13)(typescript@5.7.2)': + '@wordpress/e2e-test-utils-playwright@1.20.0(@playwright/test@1.51.1)': dependencies: - '@playwright/test': 1.49.1 - '@wordpress/api-fetch': 6.55.0 - '@wordpress/keycodes': 3.58.0 - '@wordpress/url': 3.59.0 + '@playwright/test': 1.51.1 change-case: 4.1.2 - form-data: 4.0.1 + form-data: 4.0.2 get-port: 5.1.1 - lighthouse: 10.4.0(encoding@0.1.13)(typescript@5.7.2) + lighthouse: 12.5.1 mime: 3.0.0 - web-vitals: 3.5.2 + web-vitals: 4.2.4 transitivePeerDependencies: + - bare-buffer - bufferutil - - encoding - supports-color - - typescript - utf-8-validate - '@wordpress/element@6.15.1': + '@wordpress/element@6.20.0': dependencies: '@babel/runtime': 7.25.7 - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@wordpress/escape-html': 3.15.0 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) + '@wordpress/escape-html': 3.20.0 change-case: 4.1.2 is-plain-object: 5.0.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@wordpress/escape-html@3.15.0': + '@wordpress/escape-html@3.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/eslint-plugin@18.1.0(@babel/core@7.26.0)(@types/eslint@9.6.1)(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0))(typescript@5.7.2)(wp-prettier@3.0.3)': + '@wordpress/eslint-plugin@22.6.0(@babel/core@7.25.7)(@types/eslint@9.6.1)(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0))(typescript@5.8.2)(wp-prettier@3.0.3)': dependencies: - '@babel/core': 7.26.0 - '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@8.57.1) - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.7.2) - '@wordpress/babel-preset-default': 7.42.0 - '@wordpress/prettier-config': 3.15.0(wp-prettier@3.0.3) + '@babel/core': 7.25.7 + '@babel/eslint-parser': 7.25.7(@babel/core@7.25.7)(eslint@8.57.1) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) + '@wordpress/babel-preset-default': 8.20.0 + '@wordpress/prettier-config': 4.20.0(wp-prettier@3.0.3) cosmiconfig: 7.1.0 eslint: 8.57.1 eslint-config-prettier: 8.10.0(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0))(typescript@5.7.2) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0))(typescript@5.8.2) eslint-plugin-jsdoc: 46.10.1(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) - eslint-plugin-playwright: 0.15.3(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0))(typescript@5.7.2))(eslint@8.57.1) - eslint-plugin-prettier: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(wp-prettier@3.0.3) - eslint-plugin-react: 7.37.3(eslint@8.57.1) + eslint-plugin-playwright: 0.15.3(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0))(typescript@5.8.2))(eslint@8.57.1) + eslint-plugin-prettier: 5.2.5(@types/eslint@9.6.1)(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(wp-prettier@3.0.3) + eslint-plugin-react: 7.37.4(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) globals: 13.24.0 requireindex: 1.2.0 optionalDependencies: prettier: wp-prettier@3.0.3 - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - '@types/eslint' - eslint-import-resolver-typescript @@ -9524,139 +10164,121 @@ snapshots: - jest - supports-color - '@wordpress/hooks@3.58.0': - dependencies: - '@babel/runtime': 7.26.0 - - '@wordpress/hooks@4.15.0': + '@wordpress/hooks@4.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/html-entities@4.15.0': + '@wordpress/html-entities@4.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/i18n@4.58.0': - dependencies: - '@babel/runtime': 7.26.0 - '@wordpress/hooks': 3.58.0 - gettext-parser: 1.4.0 - memize: 2.1.0 - sprintf-js: 1.1.3 - tannin: 1.2.0 - - '@wordpress/i18n@5.15.1': + '@wordpress/i18n@5.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/hooks': 4.15.0 + '@wordpress/hooks': 4.20.0 gettext-parser: 1.4.0 memize: 2.1.0 sprintf-js: 1.1.3 tannin: 1.2.0 - '@wordpress/icons@10.15.1(react@18.3.1)': + '@wordpress/icons@10.20.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/element': 6.15.1 - '@wordpress/primitives': 4.15.1(react@18.3.1) + '@wordpress/element': 6.20.0 + '@wordpress/primitives': 4.20.0(react@18.3.1) transitivePeerDependencies: - react - '@wordpress/is-shallow-equal@5.15.0': + '@wordpress/is-shallow-equal@5.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/jest-console@7.29.0(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0))': + '@wordpress/jest-console@8.20.0(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0))': dependencies: - '@babel/runtime': 7.26.0 - jest: 29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0) + '@babel/runtime': 7.25.7 + jest: 29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0) jest-matcher-utils: 29.7.0 - '@wordpress/jest-preset-default@11.29.0(@babel/core@7.26.0)(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0))': + '@wordpress/jest-preset-default@12.20.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0))': dependencies: - '@babel/core': 7.26.0 - '@wordpress/jest-console': 7.29.0(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)) - babel-jest: 29.7.0(@babel/core@7.26.0) - jest: 29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0) + '@babel/core': 7.25.7 + '@wordpress/jest-console': 8.20.0(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0)) + babel-jest: 29.7.0(@babel/core@7.25.7) + jest: 29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - supports-color - '@wordpress/keyboard-shortcuts@5.15.1(react@18.3.1)': + '@wordpress/keyboard-shortcuts@5.20.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/data': 10.15.1(react@18.3.1) - '@wordpress/element': 6.15.1 - '@wordpress/keycodes': 4.15.1 + '@wordpress/data': 10.20.0(react@18.3.1) + '@wordpress/element': 6.20.0 + '@wordpress/keycodes': 4.20.0 react: 18.3.1 - '@wordpress/keycodes@3.58.0': - dependencies: - '@babel/runtime': 7.26.0 - '@wordpress/i18n': 4.58.0 - - '@wordpress/keycodes@4.15.1': + '@wordpress/keycodes@4.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/i18n': 5.15.1 + '@wordpress/i18n': 5.20.0 - '@wordpress/notices@5.15.1(react@18.3.1)': + '@wordpress/notices@5.20.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.15.1 - '@wordpress/data': 10.15.1(react@18.3.1) + '@wordpress/a11y': 4.20.0 + '@wordpress/data': 10.20.0(react@18.3.1) react: 18.3.1 - '@wordpress/npm-package-json-lint-config@4.43.0(npm-package-json-lint@6.4.0(typescript@5.7.2))': + '@wordpress/npm-package-json-lint-config@5.20.0(npm-package-json-lint@6.4.0(typescript@5.8.2))': dependencies: - npm-package-json-lint: 6.4.0(typescript@5.7.2) + npm-package-json-lint: 6.4.0(typescript@5.8.2) - '@wordpress/postcss-plugins-preset@4.42.0(postcss@8.4.49)': + '@wordpress/postcss-plugins-preset@5.20.0(postcss@8.5.3)': dependencies: - '@wordpress/base-styles': 4.49.0 - autoprefixer: 10.4.20(postcss@8.4.49) - postcss: 8.4.49 + '@wordpress/base-styles': 5.20.0 + autoprefixer: 10.4.21(postcss@8.5.3) + postcss: 8.5.3 - '@wordpress/preferences@4.15.1(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + '@wordpress/preferences@4.20.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.15.1 - '@wordpress/components': 29.1.1(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.15.1(react@18.3.1) - '@wordpress/data': 10.15.1(react@18.3.1) - '@wordpress/deprecated': 4.15.1 - '@wordpress/element': 6.15.1 - '@wordpress/i18n': 5.15.1 - '@wordpress/icons': 10.15.1(react@18.3.1) - '@wordpress/private-apis': 1.15.0 + '@wordpress/a11y': 4.20.0 + '@wordpress/components': 29.6.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.20.0(react@18.3.1) + '@wordpress/data': 10.20.0(react@18.3.1) + '@wordpress/deprecated': 4.20.0 + '@wordpress/element': 6.20.0 + '@wordpress/i18n': 5.20.0 + '@wordpress/icons': 10.20.0(react@18.3.1) + '@wordpress/private-apis': 1.20.0 clsx: 2.1.1 react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@emotion/is-prop-valid' - '@types/react' - supports-color - '@wordpress/prettier-config@3.15.0(wp-prettier@3.0.3)': + '@wordpress/prettier-config@4.20.0(wp-prettier@3.0.3)': dependencies: prettier: wp-prettier@3.0.3 - '@wordpress/primitives@4.15.1(react@18.3.1)': + '@wordpress/primitives@4.20.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/element': 6.15.1 + '@wordpress/element': 6.20.0 clsx: 2.1.1 react: 18.3.1 - '@wordpress/priority-queue@3.15.0': + '@wordpress/priority-queue@3.20.0': dependencies: '@babel/runtime': 7.25.7 requestidlecallback: 0.3.0 - '@wordpress/private-apis@1.15.0': + '@wordpress/private-apis@1.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/redux-routine@5.15.0(redux@5.0.1)': + '@wordpress/redux-routine@5.20.0(redux@5.0.1)': dependencies: '@babel/runtime': 7.25.7 is-plain-object: 5.0.0 @@ -9664,83 +10286,85 @@ snapshots: redux: 5.0.1 rungen: 0.3.2 - '@wordpress/rich-text@7.15.1(react@18.3.1)': + '@wordpress/rich-text@7.20.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.15.1 - '@wordpress/compose': 7.15.1(react@18.3.1) - '@wordpress/data': 10.15.1(react@18.3.1) - '@wordpress/deprecated': 4.15.1 - '@wordpress/element': 6.15.1 - '@wordpress/escape-html': 3.15.0 - '@wordpress/i18n': 5.15.1 - '@wordpress/keycodes': 4.15.1 + '@wordpress/a11y': 4.20.0 + '@wordpress/compose': 7.20.0(react@18.3.1) + '@wordpress/data': 10.20.0(react@18.3.1) + '@wordpress/deprecated': 4.20.0 + '@wordpress/element': 6.20.0 + '@wordpress/escape-html': 3.20.0 + '@wordpress/i18n': 5.20.0 + '@wordpress/keycodes': 4.20.0 memize: 2.1.0 react: 18.3.1 - '@wordpress/scripts@27.9.0(@playwright/test@1.49.1)(@types/eslint@9.6.1)(@types/node@22.10.5)(@types/webpack@4.41.40)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)(type-fest@3.13.1)(typescript@5.7.2)': - dependencies: - '@babel/core': 7.26.0 - '@playwright/test': 1.49.1 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@3.13.1)(webpack-dev-server@4.15.2)(webpack@5.97.1) - '@svgr/webpack': 8.1.0(typescript@5.7.2) - '@wordpress/babel-preset-default': 7.42.0 - '@wordpress/browserslist-config': 5.41.0 - '@wordpress/dependency-extraction-webpack-plugin': 5.9.0(webpack@5.97.1) - '@wordpress/e2e-test-utils-playwright': 0.26.0(@playwright/test@1.49.1)(encoding@0.1.13)(typescript@5.7.2) - '@wordpress/eslint-plugin': 18.1.0(@babel/core@7.26.0)(@types/eslint@9.6.1)(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0))(typescript@5.7.2)(wp-prettier@3.0.3) - '@wordpress/jest-preset-default': 11.29.0(@babel/core@7.26.0)(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)) - '@wordpress/npm-package-json-lint-config': 4.43.0(npm-package-json-lint@6.4.0(typescript@5.7.2)) - '@wordpress/postcss-plugins-preset': 4.42.0(postcss@8.4.49) - '@wordpress/prettier-config': 3.15.0(wp-prettier@3.0.3) - '@wordpress/stylelint-config': 21.41.0(postcss@8.4.49)(stylelint@14.16.1) + '@wordpress/scripts@30.13.0(@playwright/test@1.51.1)(@types/eslint@9.6.1)(@types/node@22.13.14)(@types/webpack@4.41.40)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@3.13.1)(typescript@5.8.2)': + dependencies: + '@babel/core': 7.25.7 + '@playwright/test': 1.51.1 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@3.13.1)(webpack-dev-server@4.15.2)(webpack@5.98.0) + '@svgr/webpack': 8.1.0(typescript@5.8.2) + '@wordpress/babel-preset-default': 8.20.0 + '@wordpress/browserslist-config': 6.20.0 + '@wordpress/dependency-extraction-webpack-plugin': 6.20.0(webpack@5.98.0) + '@wordpress/e2e-test-utils-playwright': 1.20.0(@playwright/test@1.51.1) + '@wordpress/eslint-plugin': 22.6.0(@babel/core@7.25.7)(@types/eslint@9.6.1)(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0))(typescript@5.8.2)(wp-prettier@3.0.3) + '@wordpress/jest-preset-default': 12.20.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0)) + '@wordpress/npm-package-json-lint-config': 5.20.0(npm-package-json-lint@6.4.0(typescript@5.8.2)) + '@wordpress/postcss-plugins-preset': 5.20.0(postcss@8.5.3) + '@wordpress/prettier-config': 4.20.0(wp-prettier@3.0.3) + '@wordpress/stylelint-config': 23.12.0(postcss@8.5.3)(stylelint@16.17.0(typescript@5.8.2)) adm-zip: 0.5.16 - babel-jest: 29.7.0(@babel/core@7.26.0) - babel-loader: 8.4.1(@babel/core@7.26.0)(webpack@5.97.1) + babel-jest: 29.7.0(@babel/core@7.25.7) + babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.98.0) browserslist: 4.24.4 chalk: 4.1.2 check-node-version: 4.2.1 - clean-webpack-plugin: 3.0.0(webpack@5.97.1) - copy-webpack-plugin: 10.2.4(webpack@5.97.1) - cross-spawn: 5.1.0 - css-loader: 6.11.0(webpack@5.97.1) - cssnano: 6.1.2(postcss@8.4.49) + clean-webpack-plugin: 3.0.0(webpack@5.98.0) + copy-webpack-plugin: 10.2.4(webpack@5.98.0) + cross-spawn: 7.0.6 + css-loader: 6.11.0(webpack@5.98.0) + cssnano: 6.1.2(postcss@8.5.3) cwd: 0.10.0 dir-glob: 3.0.1 eslint: 8.57.1 expect-puppeteer: 4.4.0 fast-glob: 3.3.3 filenamify: 4.3.0 - jest: 29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0) - jest-dev-server: 9.0.2 + jest: 29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0) + jest-dev-server: 10.1.4 jest-environment-jsdom: 29.7.0 jest-environment-node: 29.7.0 + json2php: 0.0.9 markdownlint-cli: 0.31.1 merge-deep: 3.0.3 - mini-css-extract-plugin: 2.9.2(webpack@5.97.1) + mini-css-extract-plugin: 2.9.2(webpack@5.98.0) minimist: 1.2.8 - npm-package-json-lint: 6.4.0(typescript@5.7.2) + npm-package-json-lint: 6.4.0(typescript@5.8.2) npm-packlist: 3.0.0 - postcss: 8.4.49 - postcss-loader: 6.2.1(postcss@8.4.49)(webpack@5.97.1) + postcss: 8.5.3 + postcss-loader: 6.2.1(postcss@8.5.3)(webpack@5.98.0) prettier: wp-prettier@3.0.3 - puppeteer-core: 13.7.0(encoding@0.1.13) + puppeteer-core: 23.11.1 react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) react-refresh: 0.14.2 read-pkg-up: 7.0.1 resolve-bin: 0.4.3 - rtlcss-webpack-plugin: 4.0.7 - sass: 1.83.1 - sass-loader: 12.6.0(sass@1.83.1)(webpack@5.97.1) - source-map-loader: 3.0.2(webpack@5.97.1) - stylelint: 14.16.1 - terser-webpack-plugin: 5.3.11(webpack@5.97.1) - url-loader: 4.1.1(webpack@5.97.1) - webpack: 5.97.1(webpack-cli@5.1.4) + rtlcss: 4.3.0 + sass: 1.86.0 + sass-loader: 16.0.5(sass@1.86.0)(webpack@5.98.0) + schema-utils: 4.3.0 + source-map-loader: 3.0.2(webpack@5.98.0) + stylelint: 16.17.0(typescript@5.8.2) + terser-webpack-plugin: 5.3.14(webpack@5.98.0) + url-loader: 4.1.1(webpack@5.98.0) + webpack: 5.98.0(webpack-cli@5.1.4) webpack-bundle-analyzer: 4.10.2 - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.97.1) - webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.98.0) + webpack-dev-server: 4.15.2(webpack-cli@6.0.1)(webpack@5.98.0) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -9749,16 +10373,14 @@ snapshots: - '@types/webpack' - '@webpack-cli/generators' - babel-plugin-macros + - bare-buffer - bufferutil - canvas - debug - - encoding - esbuild - eslint-import-resolver-typescript - eslint-import-resolver-webpack - - fibers - file-loader - - jiti - node-notifier - node-sass - sass-embedded @@ -9772,48 +10394,66 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@wordpress/shortcode@4.15.0': + '@wordpress/shortcode@4.20.0': dependencies: '@babel/runtime': 7.25.7 memize: 2.1.0 - '@wordpress/style-engine@2.15.0': + '@wordpress/style-engine@2.20.0': dependencies: '@babel/runtime': 7.25.7 change-case: 4.1.2 - '@wordpress/stylelint-config@21.41.0(postcss@8.4.49)(stylelint@14.16.1)': + '@wordpress/stylelint-config@23.12.0(postcss@8.5.3)(stylelint@16.17.0(typescript@5.8.2))': dependencies: - stylelint: 14.16.1 - stylelint-config-recommended: 6.0.0(stylelint@14.16.1) - stylelint-config-recommended-scss: 5.0.2(postcss@8.4.49)(stylelint@14.16.1) + '@stylistic/stylelint-plugin': 3.1.2(stylelint@16.17.0(typescript@5.8.2)) + stylelint: 16.17.0(typescript@5.8.2) + stylelint-config-recommended: 14.0.1(stylelint@16.17.0(typescript@5.8.2)) + stylelint-config-recommended-scss: 14.1.0(postcss@8.5.3)(stylelint@16.17.0(typescript@5.8.2)) transitivePeerDependencies: - postcss - '@wordpress/token-list@3.15.0': + '@wordpress/token-list@3.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/undo-manager@1.15.1': + '@wordpress/undo-manager@1.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/is-shallow-equal': 5.15.0 + '@wordpress/is-shallow-equal': 5.20.0 - '@wordpress/url@3.59.0': + '@wordpress/upload-media@0.5.0(@babel/core@7.26.10)(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.98.0)': dependencies: - '@babel/runtime': 7.26.0 - remove-accents: 0.5.0 + '@babel/runtime': 7.25.7 + '@shopify/web-worker': 6.4.0(@babel/core@7.26.10)(webpack@5.98.0) + '@wordpress/api-fetch': 7.20.0 + '@wordpress/blob': 4.20.0 + '@wordpress/compose': 7.20.0(react@18.3.1) + '@wordpress/data': 10.20.0(react@18.3.1) + '@wordpress/element': 6.20.0 + '@wordpress/i18n': 5.20.0 + '@wordpress/preferences': 4.20.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.20.0 + '@wordpress/url': 4.20.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - supports-color + - webpack + - webpack-virtual-modules - '@wordpress/url@4.15.0': + '@wordpress/url@4.20.0': dependencies: '@babel/runtime': 7.25.7 remove-accents: 0.5.0 - '@wordpress/warning@2.58.0': {} - - '@wordpress/warning@3.15.0': {} + '@wordpress/warning@3.20.0': {} - '@wordpress/wordcount@4.15.0': + '@wordpress/wordcount@4.20.0': dependencies: '@babel/runtime': 7.25.7 @@ -9834,18 +10474,18 @@ snapshots: acorn-globals@7.0.1: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 acorn-walk: 8.3.4 - acorn-jsx@5.3.2(acorn@8.14.0): + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: - acorn: 8.14.0 + acorn: 8.14.1 acorn-walk@8.3.4: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 - acorn@8.14.0: {} + acorn@8.14.1: {} adm-zip@0.5.16: {} @@ -9884,7 +10524,7 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.5 + fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -9921,12 +10561,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - aos@2.3.4: - dependencies: - classlist-polyfill: 1.2.0 - lodash.debounce: 4.0.8 - lodash.throttle: 4.1.1 - are-docs-informative@0.0.2: {} argparse@1.0.10: @@ -9945,7 +10579,7 @@ snapshots: array-buffer-byte-length@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-array-buffer: 3.0.5 array-flatten@1.1.1: {} @@ -9955,8 +10589,8 @@ snapshots: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.7 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 is-string: 1.1.1 array-union@1.0.2: @@ -9975,31 +10609,32 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 - array.prototype.findlastindex@1.2.5: + array.prototype.findlastindex@1.2.6: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 array.prototype.flat@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - es-shim-unscopables: 1.0.2 + es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - es-shim-unscopables: 1.0.2 + es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: dependencies: @@ -10007,7 +10642,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 + es-shim-unscopables: 1.1.0 arraybuffer.prototype.slice@1.0.4: dependencies: @@ -10016,7 +10651,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 arrify@1.0.1: {} @@ -10029,32 +10664,32 @@ snapshots: astral-regex@2.0.0: {} + async-function@1.0.0: {} + asynckit@0.4.0: {} - autoprefixer@10.4.20(postcss@8.4.49): + autoprefixer@10.4.21(postcss@8.5.3): dependencies: browserslist: 4.24.4 - caniuse-lite: 1.0.30001690 + caniuse-lite: 1.0.30001707 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 autosize@4.0.4: {} available-typed-arrays@1.0.7: dependencies: - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 - axe-core@4.10.2: {} + axe-core@4.10.3: {} - axe-core@4.7.2: {} - - axios@1.7.9: + axios@1.8.4: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.1 + form-data: 4.0.2 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -10063,38 +10698,48 @@ snapshots: b4a@1.6.7: {} - babel-jest@29.7.0(@babel/core@7.26.0): + babel-jest@29.7.0(@babel/core@7.25.7): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.25.7 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.26.0) + babel-preset-jest: 29.6.3(@babel/core@7.25.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-loader@8.4.1(@babel/core@7.26.0)(webpack@5.97.1): + babel-jest@29.7.0(@babel/core@7.26.10): dependencies: - '@babel/core': 7.26.0 - find-cache-dir: 3.3.2 - loader-utils: 2.0.4 - make-dir: 3.1.0 - schema-utils: 2.7.1 - webpack: 5.97.1(webpack-cli@5.1.4) + '@babel/core': 7.26.10 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.10) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-loader@10.0.0(@babel/core@7.26.10)(webpack@5.98.0): + dependencies: + '@babel/core': 7.26.10 + find-up: 5.0.0 + webpack: 5.98.0(webpack-cli@6.0.1) - babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1): + babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.98.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.25.7 find-cache-dir: 4.0.0 schema-utils: 4.3.0 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -10104,76 +10749,142 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 + '@types/babel__traverse': 7.20.7 babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.7 cosmiconfig: 7.1.0 resolve: 1.22.10 - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.25.7): dependencies: - '@babel/compat-data': 7.26.3 - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/compat-data': 7.26.8 + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) - core-js-compat: 3.40.0 + '@babel/compat-data': 7.26.8 + '@babel/core': 7.26.10 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) + semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.7): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.7) + core-js-compat: 3.41.0 transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10): dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) + '@babel/core': 7.26.10 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) + core-js-compat: 3.41.0 + transitivePeerDependencies: + - supports-color - babel-preset-jest@29.6.3(@babel/core@7.26.0): + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.25.7): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.7): + dependencies: + '@babel/core': 7.25.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.25.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.10) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.10) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10) + + babel-preset-jest@29.6.3(@babel/core@7.25.7): + dependencies: + '@babel/core': 7.25.7 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) - babel-runtime@6.25.0: + babel-preset-jest@29.6.3(@babel/core@7.26.10): dependencies: - core-js: 2.6.12 - regenerator-runtime: 0.10.5 + '@babel/core': 7.26.10 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) balanced-match@1.0.2: {} balanced-match@2.0.0: {} - bare-events@2.5.3: + bare-events@2.5.4: + optional: true + + bare-fs@4.0.2: + dependencies: + bare-events: 2.5.4 + bare-path: 3.0.0 + bare-stream: 2.6.5(bare-events@2.5.4) + optional: true + + bare-os@3.6.1: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.6.1 + optional: true + + bare-stream@2.6.5(bare-events@2.5.4): + dependencies: + streamx: 2.22.0 + optionalDependencies: + bare-events: 2.5.4 optional: true base64-js@1.5.1: {} @@ -10186,12 +10897,6 @@ snapshots: binary-extensions@2.3.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -10231,10 +10936,10 @@ snapshots: browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001690 - electron-to-chromium: 1.5.79 + caniuse-lite: 1.0.30001707 + electron-to-chromium: 1.5.126 node-releases: 2.0.19 - update-browserslist-db: 1.1.2(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.24.4) bser@2.1.1: dependencies: @@ -10258,22 +10963,27 @@ snapshots: bytes@3.1.2: {} - call-bind-apply-helpers@1.0.1: + cacheable@1.8.9: + dependencies: + hookified: 1.8.1 + keyv: 5.3.2 + + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 call-bind@1.0.8: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 - call-bound@1.0.3: + call-bound@1.0.4: dependencies: - call-bind-apply-helpers: 1.0.1 - get-intrinsic: 1.2.7 + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 callsites@3.1.0: {} @@ -10295,11 +11005,11 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.24.4 - caniuse-lite: 1.0.30001690 + caniuse-lite: 1.0.30001707 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001690: {} + caniuse-lite@1.0.30001707: {} capital-case@1.0.4: dependencies: @@ -10357,37 +11067,40 @@ snapshots: chokidar@4.0.3: dependencies: - readdirp: 4.0.2 - - chownr@1.1.4: {} + readdirp: 4.1.2 - chrome-launcher@0.15.2: + chrome-launcher@1.1.2: dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 - lighthouse-logger: 1.4.2 + lighthouse-logger: 2.0.1 transitivePeerDependencies: - supports-color chrome-trace-event@1.0.4: {} - chromium-bidi@0.4.16(devtools-protocol@0.0.1147663): + chromium-bidi@0.11.0(devtools-protocol@0.0.1367902): dependencies: - devtools-protocol: 0.0.1147663 - mitt: 3.0.0 + devtools-protocol: 0.0.1367902 + mitt: 3.0.1 + zod: 3.23.8 - ci-info@3.9.0: {} + chromium-bidi@2.1.2(devtools-protocol@0.0.1413902): + dependencies: + devtools-protocol: 0.0.1413902 + mitt: 3.0.1 + zod: 3.24.2 - cjs-module-lexer@1.4.1: {} + ci-info@3.9.0: {} - classlist-polyfill@1.2.0: {} + cjs-module-lexer@1.4.3: {} - clean-webpack-plugin@3.0.0(webpack@5.97.1): + clean-webpack-plugin@3.0.0(webpack@5.98.0): dependencies: '@types/webpack': 4.41.40 del: 4.1.1 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) clipboard@2.0.11: dependencies: @@ -10423,14 +11136,14 @@ snapshots: clsx@2.1.1: {} - cmdk@1.0.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + cmdk@1.1.1(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@radix-ui/react-dialog': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-dialog': 1.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) - use-sync-external-store: 1.4.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -10473,13 +11186,11 @@ snapshots: common-path-prefix@3.0.0: {} - commondir@1.0.1: {} - compressible@2.0.18: dependencies: - mime-db: 1.53.0 + mime-db: 1.54.0 - compression@1.7.5: + compression@1.8.0: dependencies: bytes: 3.1.2 compressible: 2.0.18 @@ -10495,6 +11206,16 @@ snapshots: concat-map@0.0.1: {} + concurrently@9.1.2: + dependencies: + chalk: 4.1.2 + lodash: 4.17.21 + rxjs: 7.8.2 + shell-quote: 1.8.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + configstore@5.0.1: dependencies: dot-prop: 5.3.0 @@ -10524,13 +11245,11 @@ snapshots: cookie-signature@1.0.6: {} - cookie@0.4.2: {} - cookie@0.7.1: {} cookie@1.0.2: {} - copy-webpack-plugin@10.2.4(webpack@5.97.1): + copy-webpack-plugin@10.2.4(webpack@5.98.0): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -10538,44 +11257,51 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) - core-js-compat@3.40.0: + core-js-compat@3.41.0: dependencies: browserslist: 4.24.4 - core-js-pure@3.40.0: {} + core-js-pure@3.41.0: {} - core-js@2.6.12: {} - - core-js@3.40.0: {} + core-js@3.41.0: {} core-util-is@1.0.3: {} cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@8.3.6(typescript@5.7.2): + cosmiconfig@8.3.6(typescript@5.8.2): dependencies: - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 + + cosmiconfig@9.0.0(typescript@5.8.2): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.8.2 - create-jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0): + create-jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0) + jest-config: 29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10584,24 +11310,6 @@ snapshots: - supports-color - ts-node - cross-fetch@3.1.5(encoding@0.1.13): - dependencies: - node-fetch: 2.6.7(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - cross-fetch@4.0.0(encoding@0.1.13): - dependencies: - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - cross-spawn@5.1.0: - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -10610,39 +11318,39 @@ snapshots: crypto-random-string@2.0.0: {} - csp_evaluator@1.1.1: {} + csp_evaluator@1.1.5: {} - css-declaration-sorter@7.2.0(postcss@8.4.49): + css-declaration-sorter@7.2.0(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 css-functions-list@3.2.3: {} - css-loader@6.11.0(webpack@5.97.1): + css-loader@6.11.0(webpack@5.98.0): dependencies: - icss-utils: 5.1.0(postcss@8.4.49) - postcss: 8.4.49 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) - postcss-modules-local-by-default: 4.2.0(postcss@8.4.49) - postcss-modules-scope: 3.2.1(postcss@8.4.49) - postcss-modules-values: 4.0.0(postcss@8.4.49) + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.3) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.3) + postcss-modules-scope: 3.2.1(postcss@8.5.3) + postcss-modules-values: 4.0.0(postcss@8.5.3) postcss-value-parser: 4.2.0 - semver: 7.6.3 + semver: 7.7.1 optionalDependencies: - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) - css-loader@7.1.2(webpack@5.97.1): + css-loader@7.1.2(webpack@5.98.0): dependencies: - icss-utils: 5.1.0(postcss@8.4.49) - postcss: 8.4.49 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) - postcss-modules-local-by-default: 4.2.0(postcss@8.4.49) - postcss-modules-scope: 3.2.1(postcss@8.4.49) - postcss-modules-values: 4.0.0(postcss@8.4.49) + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.3) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.3) + postcss-modules-scope: 3.2.1(postcss@8.5.3) + postcss-modules-values: 4.0.0(postcss@8.5.3) postcss-value-parser: 4.2.0 - semver: 7.6.3 + semver: 7.7.1 optionalDependencies: - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) css-select@5.1.0: dependencies: @@ -10662,53 +11370,58 @@ snapshots: mdn-data: 2.0.30 source-map-js: 1.2.1 + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + css-what@6.1.0: {} cssesc@3.0.0: {} - cssnano-preset-default@6.1.2(postcss@8.4.49): + cssnano-preset-default@6.1.2(postcss@8.5.3): dependencies: browserslist: 4.24.4 - css-declaration-sorter: 7.2.0(postcss@8.4.49) - cssnano-utils: 4.0.2(postcss@8.4.49) - postcss: 8.4.49 - postcss-calc: 9.0.1(postcss@8.4.49) - postcss-colormin: 6.1.0(postcss@8.4.49) - postcss-convert-values: 6.1.0(postcss@8.4.49) - postcss-discard-comments: 6.0.2(postcss@8.4.49) - postcss-discard-duplicates: 6.0.3(postcss@8.4.49) - postcss-discard-empty: 6.0.3(postcss@8.4.49) - postcss-discard-overridden: 6.0.2(postcss@8.4.49) - postcss-merge-longhand: 6.0.5(postcss@8.4.49) - postcss-merge-rules: 6.1.1(postcss@8.4.49) - postcss-minify-font-values: 6.1.0(postcss@8.4.49) - postcss-minify-gradients: 6.0.3(postcss@8.4.49) - postcss-minify-params: 6.1.0(postcss@8.4.49) - postcss-minify-selectors: 6.0.4(postcss@8.4.49) - postcss-normalize-charset: 6.0.2(postcss@8.4.49) - postcss-normalize-display-values: 6.0.2(postcss@8.4.49) - postcss-normalize-positions: 6.0.2(postcss@8.4.49) - postcss-normalize-repeat-style: 6.0.2(postcss@8.4.49) - postcss-normalize-string: 6.0.2(postcss@8.4.49) - postcss-normalize-timing-functions: 6.0.2(postcss@8.4.49) - postcss-normalize-unicode: 6.1.0(postcss@8.4.49) - postcss-normalize-url: 6.0.2(postcss@8.4.49) - postcss-normalize-whitespace: 6.0.2(postcss@8.4.49) - postcss-ordered-values: 6.0.2(postcss@8.4.49) - postcss-reduce-initial: 6.1.0(postcss@8.4.49) - postcss-reduce-transforms: 6.0.2(postcss@8.4.49) - postcss-svgo: 6.0.3(postcss@8.4.49) - postcss-unique-selectors: 6.0.4(postcss@8.4.49) - - cssnano-utils@4.0.2(postcss@8.4.49): - dependencies: - postcss: 8.4.49 - - cssnano@6.1.2(postcss@8.4.49): - dependencies: - cssnano-preset-default: 6.1.2(postcss@8.4.49) + css-declaration-sorter: 7.2.0(postcss@8.5.3) + cssnano-utils: 4.0.2(postcss@8.5.3) + postcss: 8.5.3 + postcss-calc: 9.0.1(postcss@8.5.3) + postcss-colormin: 6.1.0(postcss@8.5.3) + postcss-convert-values: 6.1.0(postcss@8.5.3) + postcss-discard-comments: 6.0.2(postcss@8.5.3) + postcss-discard-duplicates: 6.0.3(postcss@8.5.3) + postcss-discard-empty: 6.0.3(postcss@8.5.3) + postcss-discard-overridden: 6.0.2(postcss@8.5.3) + postcss-merge-longhand: 6.0.5(postcss@8.5.3) + postcss-merge-rules: 6.1.1(postcss@8.5.3) + postcss-minify-font-values: 6.1.0(postcss@8.5.3) + postcss-minify-gradients: 6.0.3(postcss@8.5.3) + postcss-minify-params: 6.1.0(postcss@8.5.3) + postcss-minify-selectors: 6.0.4(postcss@8.5.3) + postcss-normalize-charset: 6.0.2(postcss@8.5.3) + postcss-normalize-display-values: 6.0.2(postcss@8.5.3) + postcss-normalize-positions: 6.0.2(postcss@8.5.3) + postcss-normalize-repeat-style: 6.0.2(postcss@8.5.3) + postcss-normalize-string: 6.0.2(postcss@8.5.3) + postcss-normalize-timing-functions: 6.0.2(postcss@8.5.3) + postcss-normalize-unicode: 6.1.0(postcss@8.5.3) + postcss-normalize-url: 6.0.2(postcss@8.5.3) + postcss-normalize-whitespace: 6.0.2(postcss@8.5.3) + postcss-ordered-values: 6.0.2(postcss@8.5.3) + postcss-reduce-initial: 6.1.0(postcss@8.5.3) + postcss-reduce-transforms: 6.0.2(postcss@8.5.3) + postcss-svgo: 6.0.3(postcss@8.5.3) + postcss-unique-selectors: 6.0.4(postcss@8.5.3) + + cssnano-utils@4.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + cssnano@6.1.2(postcss@8.5.3): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.5.3) lilconfig: 3.1.3 - postcss: 8.4.49 + postcss: 8.5.3 csso@5.0.5: dependencies: @@ -10741,19 +11454,19 @@ snapshots: data-view-buffer@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 data-view-byte-length@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 data-view-byte-offset@1.0.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 @@ -10769,10 +11482,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.4: - dependencies: - ms: 2.1.2 - debug@4.4.0: dependencies: ms: 2.1.3 @@ -10784,7 +11493,7 @@ snapshots: decamelize@1.2.0: {} - decimal.js@10.4.3: {} + decimal.js@10.5.0: {} dedent@1.5.3(babel-plugin-macros@3.1.0): optionalDependencies: @@ -10849,11 +11558,11 @@ snapshots: detect-node@2.1.0: {} - devtools-protocol@0.0.1147663: {} + devtools-protocol@0.0.1367902: {} - devtools-protocol@0.0.1155343: {} + devtools-protocol@0.0.1413902: {} - devtools-protocol@0.0.981744: {} + devtools-protocol@0.0.1436416: {} diff-sequences@29.6.3: {} @@ -10908,7 +11617,7 @@ snapshots: dunder-proto@1.0.1: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 @@ -10918,7 +11627,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.79: {} + electron-to-chromium@1.5.126: {} emittery@0.13.1: {} @@ -10942,7 +11651,7 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.18.0: + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -10956,6 +11665,8 @@ snapshots: entities@4.5.0: {} + env-paths@2.2.1: {} + envinfo@7.14.0: {} equivalent-key-map@0.2.2: {} @@ -10974,17 +11685,17 @@ snapshots: arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 data-view-buffer: 1.0.2 data-view-byte-length: 1.0.2 data-view-byte-offset: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 es-set-tostringtag: 2.1.0 es-to-primitive: 1.3.0 function.prototype.name: 1.1.8 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 get-proto: 1.0.1 get-symbol-description: 1.1.0 globalthis: 1.0.4 @@ -11001,9 +11712,9 @@ snapshots: is-shared-array-buffer: 1.0.4 is-string: 1.1.1 is-typed-array: 1.1.15 - is-weakref: 1.1.0 + is-weakref: 1.1.1 math-intrinsics: 1.1.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 object-keys: 1.1.1 object.assign: 4.1.7 own-keys: 1.0.1 @@ -11020,7 +11731,7 @@ snapshots: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 es-define-property@1.0.1: {} @@ -11029,13 +11740,13 @@ snapshots: es-iterator-helpers@1.2.1: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 es-set-tostringtag: 2.1.0 function-bind: 1.1.2 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 globalthis: 1.0.4 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -11047,18 +11758,18 @@ snapshots: es-module-lexer@1.6.0: {} - es-object-atoms@1.0.0: + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 hasown: 2.0.2 - es-shim-unscopables@1.0.2: + es-shim-unscopables@1.1.0: dependencies: hasown: 2.0.2 @@ -11098,28 +11809,28 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 + array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -11131,19 +11842,19 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0))(typescript@5.7.2): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0))(typescript@5.8.2): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.2) eslint: 8.57.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) - jest: 29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) + jest: 29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - supports-color - typescript @@ -11158,7 +11869,7 @@ snapshots: eslint: 8.57.1 esquery: 1.6.0 is-builtin-module: 3.2.1 - semver: 7.6.3 + semver: 7.7.1 spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color @@ -11169,7 +11880,7 @@ snapshots: array-includes: 3.1.8 array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 - axe-core: 4.10.2 + axe-core: 4.10.3 axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 @@ -11182,18 +11893,18 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-playwright@0.15.3(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0))(typescript@5.7.2))(eslint@8.57.1): + eslint-plugin-playwright@0.15.3(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0))(typescript@5.8.2))(eslint@8.57.1): dependencies: eslint: 8.57.1 optionalDependencies: - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0))(typescript@5.7.2) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0))(typescript@5.8.2) - eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(wp-prettier@3.0.3): + eslint-plugin-prettier@5.2.5(@types/eslint@9.6.1)(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(wp-prettier@3.0.3): dependencies: eslint: 8.57.1 prettier: wp-prettier@3.0.3 prettier-linter-helpers: 1.0.0 - synckit: 0.9.2 + synckit: 0.10.3 optionalDependencies: '@types/eslint': 9.6.1 eslint-config-prettier: 8.10.0(eslint@8.57.1) @@ -11202,7 +11913,7 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-react@7.37.3(eslint@8.57.1): + eslint-plugin-react@7.37.4(eslint@8.57.1): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -11215,7 +11926,7 @@ snapshots: hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.8 + object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 prop-types: 15.8.1 @@ -11234,27 +11945,20 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@8.2.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - eslint-visitor-keys@2.1.0: {} eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.0: {} - eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.1 + '@ungap/structured-clone': 1.3.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -11288,55 +11992,10 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.17.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.1 - '@eslint/core': 0.9.1 - '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.17.0 - '@eslint/plugin-kit': 0.2.4 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.1 - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0 - escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - transitivePeerDependencies: - - supports-color - - espree@10.3.0: - dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 4.2.0 - espree@9.6.1: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -11455,13 +12114,13 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.0.5: {} + fast-uri@3.0.6: {} fastest-levenshtein@1.0.16: {} - fastq@1.18.0: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 faye-websocket@0.11.4: dependencies: @@ -11475,13 +12134,13 @@ snapshots: dependencies: pend: 1.2.0 - file-entry-cache@6.0.1: + file-entry-cache@10.0.7: dependencies: - flat-cache: 3.2.0 + flat-cache: 6.1.7 - file-entry-cache@8.0.0: + file-entry-cache@6.0.1: dependencies: - flat-cache: 4.0.1 + flat-cache: 3.2.0 filename-reserved-regex@2.0.0: {} @@ -11507,12 +12166,6 @@ snapshots: transitivePeerDependencies: - supports-color - find-cache-dir@3.3.2: - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - find-cache-dir@4.0.0: dependencies: common-path-prefix: 3.0.0 @@ -11529,18 +12182,11 @@ snapshots: dependencies: find-file-up: 0.1.3 - find-process@1.4.9: + find-process@1.4.10: dependencies: chalk: 4.1.2 commander: 12.1.0 - debug: 4.4.0 - eslint: 9.17.0 - glob: 11.0.1 loglevel: 1.9.2 - rimraf: 6.0.1 - transitivePeerDependencies: - - jiti - - supports-color find-root@1.1.0: {} @@ -11565,22 +12211,23 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.3.2 + flatted: 3.3.3 keyv: 4.5.4 rimraf: 3.0.2 - flat-cache@4.0.1: + flat-cache@6.1.7: dependencies: - flatted: 3.3.2 - keyv: 4.5.4 + cacheable: 1.8.9 + flatted: 3.3.3 + hookified: 1.8.1 flat@5.0.2: {} - flatted@3.3.2: {} + flatted@3.3.3: {} follow-redirects@1.15.9: {} - for-each@0.3.3: + for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -11592,35 +12239,34 @@ snapshots: dependencies: for-in: 1.0.2 - foreground-child@3.3.0: + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.1: + form-data@4.0.2: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 mime-types: 2.1.35 forwarded@0.2.0: {} fraction.js@4.3.7: {} - framer-motion@11.16.1(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + framer-motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - motion-dom: 11.16.1 - motion-utils: 11.16.0 + motion-dom: 11.18.1 + motion-utils: 11.18.1 tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 1.3.1 react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) fresh@0.5.2: {} - fs-constants@1.0.0: {} - fs-exists-sync@0.1.0: {} fs-monkey@1.0.6: {} @@ -11638,7 +12284,7 @@ snapshots: function.prototype.name@1.1.8: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 hasown: 2.0.2 @@ -11650,12 +12296,12 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.7: + get-intrinsic@1.3.0: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 @@ -11672,7 +12318,7 @@ snapshots: get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-stdin@9.0.0: {} @@ -11684,9 +12330,9 @@ snapshots: get-symbol-description@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 get-uri@6.0.4: dependencies: @@ -11720,8 +12366,8 @@ snapshots: glob@11.0.1: dependencies: - foreground-child: 3.3.0 - jackspeak: 4.0.2 + foreground-child: 3.3.1 + jackspeak: 4.1.0 minimatch: 10.0.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 @@ -11764,8 +12410,6 @@ snapshots: dependencies: type-fest: 0.20.2 - globals@14.0.0: {} - globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -11856,6 +12500,8 @@ snapshots: dependencies: parse-passwd: 1.0.0 + hookified@1.8.1: {} + hosted-git-info@2.8.9: {} hosted-git-info@4.1.0: @@ -11875,7 +12521,7 @@ snapshots: dependencies: whatwg-encoding: 2.0.0 - html-entities@2.5.2: {} + html-entities@2.5.3: {} html-escaper@2.0.2: {} @@ -11900,7 +12546,7 @@ snapshots: http-link-header@1.1.3: {} - http-parser-js@0.5.8: {} + http-parser-js@0.5.9: {} http-proxy-agent@5.0.0: dependencies: @@ -11919,7 +12565,7 @@ snapshots: http-proxy-middleware@2.0.7(@types/express@4.17.21): dependencies: - '@types/http-proxy': 1.17.15 + '@types/http-proxy': 1.17.16 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 @@ -11961,9 +12607,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.49): + icss-utils@5.1.0(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 ieee754@1.2.1: {} @@ -11975,17 +12621,19 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.3: {} + image-ssim@0.2.0: {} - immutable@5.0.3: {} + immediate@3.0.6: {} + + immutable@5.1.1: {} - import-fresh@3.3.0: + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - import-lazy@4.0.0: {} - import-local@3.2.0: dependencies: pkg-dir: 4.2.0 @@ -12016,11 +12664,12 @@ snapshots: interpret@3.1.1: {} - intl-messageformat-parser@1.8.1: {} - - intl-messageformat@4.4.0: + intl-messageformat@10.7.16: dependencies: - intl-messageformat-parser: 1.8.1 + '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/fast-memoize': 2.2.7 + '@formatjs/icu-messageformat-parser': 2.11.2 + tslib: 2.8.1 ip-address@9.0.5: dependencies: @@ -12036,14 +12685,15 @@ snapshots: is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 is-arrayish@0.2.1: {} - is-async-function@2.1.0: + is-async-function@2.1.1: dependencies: - call-bound: 1.0.3 + async-function: 1.0.0 + call-bound: 1.0.4 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -12056,9 +12706,9 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.2.1: + is-boolean-object@1.2.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-buffer@1.1.6: {} @@ -12075,13 +12725,13 @@ snapshots: is-data-view@1.0.2: dependencies: - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 is-typed-array: 1.1.15 is-date-object@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-docker@2.2.1: {} @@ -12092,7 +12742,7 @@ snapshots: is-finalizationregistry@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-fullwidth-code-point@2.0.0: {} @@ -12102,7 +12752,7 @@ snapshots: is-generator-function@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -12115,7 +12765,7 @@ snapshots: is-number-object@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -12150,7 +12800,7 @@ snapshots: is-regex@1.2.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -12159,24 +12809,24 @@ snapshots: is-shared-array-buffer@1.0.4: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-stream@2.0.1: {} is-string@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-symbol@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-symbols: 1.1.0 safe-regex-test: 1.1.0 is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 is-typedarray@1.0.0: {} @@ -12184,14 +12834,14 @@ snapshots: is-weakmap@2.0.2: {} - is-weakref@1.1.0: + is-weakref@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-weakset@2.0.4: dependencies: - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 is-windows@0.2.0: {} @@ -12211,8 +12861,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.26.0 - '@babel/parser': 7.26.3 + '@babel/core': 7.26.10 + '@babel/parser': 7.27.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -12221,11 +12871,11 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.26.0 - '@babel/parser': 7.26.3 + '@babel/core': 7.26.10 + '@babel/parser': 7.27.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -12251,13 +12901,13 @@ snapshots: iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.7 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 get-proto: 1.0.1 has-symbols: 1.1.0 set-function-name: 2.0.2 - jackspeak@4.0.2: + jackspeak@4.1.0: dependencies: '@isaacs/cliui': 8.0.2 @@ -12273,7 +12923,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.14 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -12293,16 +12943,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0): + jest-cli@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0): dependencies: '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0) + create-jest: 29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0) + jest-config: 29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -12312,12 +12962,12 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0): + jest-config@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.0) + babel-jest: 29.7.0(@babel/core@7.26.10) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -12337,24 +12987,22 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-dev-server@9.0.2: + jest-dev-server@10.1.4: dependencies: chalk: 4.1.2 cwd: 0.10.0 - find-process: 1.4.9 + find-process: 1.4.10 prompts: 2.4.2 - spawnd: 9.0.2 + spawnd: 10.1.4 tree-kill: 1.2.2 - wait-on: 7.2.0 + wait-on: 8.0.3 transitivePeerDependencies: - debug - - jiti - - supports-color jest-diff@29.7.0: dependencies: @@ -12381,7 +13029,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 22.10.5 + '@types/node': 22.13.14 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -12395,7 +13043,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.14 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12405,7 +13053,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.10.5 + '@types/node': 22.13.14 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12444,7 +13092,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.14 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -12479,7 +13127,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.14 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -12507,9 +13155,9 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.14 chalk: 4.1.2 - cjs-module-lexer: 1.4.1 + cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -12527,15 +13175,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.26.0 - '@babel/generator': 7.26.3 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.3 + '@babel/core': 7.26.10 + '@babel/generator': 7.27.0 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) + '@babel/types': 7.27.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -12546,14 +13194,14 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.14 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12572,7 +13220,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.14 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12581,23 +13229,23 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0): + jest@29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0): dependencies: '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0) + jest-cli: 29.7.0(@types/node@22.13.14)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12634,20 +13282,20 @@ snapshots: jsdom@20.0.3: dependencies: abab: 2.0.6 - acorn: 8.14.0 + acorn: 8.14.1 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 - decimal.js: 10.4.3 + decimal.js: 10.5.0 domexception: 4.0.0 escodegen: 2.1.0 - form-data: 4.0.1 + form-data: 4.0.2 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.16 + nwsapi: 2.2.19 parse5: 7.2.1 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -12657,7 +13305,7 @@ snapshots: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.18.0 + ws: 8.18.1 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -12680,6 +13328,8 @@ snapshots: json2php@0.0.7: {} + json2php@0.0.9: {} + json5@1.0.2: dependencies: minimist: 1.2.8 @@ -12701,6 +13351,10 @@ snapshots: dependencies: json-buffer: 3.0.1 + keyv@5.3.2: + dependencies: + '@keyv/serialize': 1.0.3 + kind-of@2.0.1: dependencies: is-buffer: 1.1.6 @@ -12715,7 +13369,7 @@ snapshots: klona@2.0.6: {} - known-css-properties@0.26.0: {} + known-css-properties@0.35.0: {} language-subtag-registry@0.3.23: {} @@ -12723,7 +13377,7 @@ snapshots: dependencies: language-subtag-registry: 0.3.23 - launch-editor@2.9.1: + launch-editor@2.10.0: dependencies: picocolors: 1.1.1 shell-quote: 1.8.2 @@ -12739,49 +13393,53 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lighthouse-logger@1.4.2: + lie@3.1.1: + dependencies: + immediate: 3.0.6 + + lighthouse-logger@2.0.1: dependencies: debug: 2.6.9 marky: 1.2.5 transitivePeerDependencies: - supports-color - lighthouse-stack-packs@1.11.0: {} + lighthouse-stack-packs@1.12.2: {} - lighthouse@10.4.0(encoding@0.1.13)(typescript@5.7.2): + lighthouse@12.5.1: dependencies: - '@sentry/node': 6.19.7 - axe-core: 4.7.2 - chrome-launcher: 0.15.2 + '@paulirish/trace_engine': 0.0.50 + '@sentry/node': 7.120.3 + axe-core: 4.10.3 + chrome-launcher: 1.1.2 configstore: 5.0.1 - csp_evaluator: 1.1.1 - devtools-protocol: 0.0.1155343 + csp_evaluator: 1.1.5 + devtools-protocol: 0.0.1436416 enquirer: 2.4.1 http-link-header: 1.1.3 - intl-messageformat: 4.4.0 + intl-messageformat: 10.7.16 jpeg-js: 0.4.4 js-library-detector: 6.7.0 - lighthouse-logger: 1.4.2 - lighthouse-stack-packs: 1.11.0 - lodash: 4.17.21 + lighthouse-logger: 2.0.1 + lighthouse-stack-packs: 1.12.2 + lodash-es: 4.17.21 lookup-closest-locale: 6.2.0 metaviewport-parser: 0.3.0 open: 8.4.2 parse-cache-control: 1.0.1 - ps-list: 8.1.1 - puppeteer-core: 20.9.0(encoding@0.1.13)(typescript@5.7.2) + puppeteer-core: 24.4.0 robots-parser: 3.0.1 semver: 5.7.2 speedline-core: 1.4.3 - third-party-web: 0.23.4 + third-party-web: 0.26.5 + tldts-icann: 6.1.85 ws: 7.5.10 yargs: 17.7.2 yargs-parser: 21.1.1 transitivePeerDependencies: + - bare-buffer - bufferutil - - encoding - supports-color - - typescript - utf-8-validate lilconfig@3.1.3: {} @@ -12804,6 +13462,10 @@ snapshots: emojis-list: 3.0.0 json5: 2.2.3 + localforage@1.10.0: + dependencies: + lie: 3.1.1 + locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -12821,14 +13483,14 @@ snapshots: dependencies: p-locate: 6.0.0 + lodash-es@4.17.21: {} + lodash.debounce@4.0.8: {} lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} - lodash.throttle@4.1.1: {} - lodash.truncate@4.4.2: {} lodash.uniq@4.5.0: {} @@ -12852,12 +13514,7 @@ snapshots: dependencies: tslib: 2.8.1 - lru-cache@11.0.2: {} - - lru-cache@4.1.5: - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 + lru-cache@11.1.0: {} lru-cache@5.1.1: dependencies: @@ -12869,15 +13526,13 @@ snapshots: lru-cache@7.18.3: {} - lru_map@0.3.3: {} - make-dir@3.1.0: dependencies: semver: 6.3.1 make-dir@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 makeerror@1.0.12: dependencies: @@ -12926,6 +13581,10 @@ snapshots: mdn-data@2.0.30: {} + mdn-data@2.12.2: {} + + mdn-data@2.18.0: {} + mdurl@1.0.1: {} media-typer@0.3.0: {} @@ -12936,6 +13595,8 @@ snapshots: memize@2.1.0: {} + meow@13.2.0: {} + meow@9.0.0: dependencies: '@types/minimist': 1.2.5 @@ -12974,7 +13635,7 @@ snapshots: mime-db@1.52.0: {} - mime-db@1.53.0: {} + mime-db@1.54.0: {} mime-types@2.1.35: dependencies: @@ -12988,11 +13649,11 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.2(webpack@5.97.1): + mini-css-extract-plugin@2.9.2(webpack@5.98.0): dependencies: schema-utils: 4.3.0 tapable: 2.2.1 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) minimalistic-assert@1.0.1: {} @@ -13022,35 +13683,31 @@ snapshots: minipass@7.1.2: {} - mitt@3.0.0: {} + mitt@3.0.1: {} mixin-object@2.0.1: dependencies: for-in: 0.1.8 is-extendable: 0.1.1 - mkdirp-classic@0.5.3: {} - - moment-timezone@0.5.46: + moment-timezone@0.5.48: dependencies: moment: 2.30.1 moment@2.30.1: {} - motion-dom@11.16.1: + motion-dom@11.18.1: dependencies: - motion-utils: 11.16.0 + motion-utils: 11.18.1 - motion-utils@11.16.0: {} + motion-utils@11.18.1: {} mousetrap@1.6.5: {} - mrmime@2.0.0: {} + mrmime@2.0.1: {} ms@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} multicast-dns@7.2.5: @@ -13058,7 +13715,7 @@ snapshots: dns-packet: 5.6.1 thunky: 1.1.0 - nanoid@3.3.8: {} + nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -13078,18 +13735,6 @@ snapshots: node-addon-api@7.1.1: optional: true - node-fetch@2.6.7(encoding@0.1.13): - dependencies: - whatwg-url: 5.0.0 - optionalDependencies: - encoding: 0.1.13 - - node-fetch@2.7.0(encoding@0.1.13): - dependencies: - whatwg-url: 5.0.0 - optionalDependencies: - encoding: 0.1.13 - node-forge@1.3.1: {} node-int64@0.4.0: {} @@ -13107,7 +13752,7 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 - semver: 7.6.3 + semver: 7.7.1 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -13122,12 +13767,12 @@ snapshots: npm-normalize-package-bin@1.0.1: {} - npm-package-json-lint@6.4.0(typescript@5.7.2): + npm-package-json-lint@6.4.0(typescript@5.8.2): dependencies: ajv: 6.12.6 ajv-errors: 1.0.1(ajv@6.12.6) chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.7.2) + cosmiconfig: 8.3.6(typescript@5.8.2) debug: 4.4.0 globby: 11.1.0 ignore: 5.3.2 @@ -13136,7 +13781,7 @@ snapshots: log-symbols: 4.1.0 meow: 9.0.0 plur: 4.0.0 - semver: 7.6.3 + semver: 7.7.1 slash: 3.0.0 strip-json-comments: 3.1.1 type-fest: 3.13.1 @@ -13160,37 +13805,38 @@ snapshots: dependencies: boolbase: 1.0.0 - nwsapi@2.2.16: {} + nwsapi@2.2.19: {} object-assign@4.1.1: {} object-filter@1.0.2: {} - object-inspect@1.13.3: {} + object-inspect@1.13.4: {} object-keys@1.1.1: {} object.assign@4.1.7: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.8: + object.entries@1.1.9: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 object.fromentries@2.0.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: @@ -13201,9 +13847,9 @@ snapshots: object.values@1.2.1: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 obuf@1.1.2: {} @@ -13242,7 +13888,7 @@ snapshots: own-keys@1.0.1: dependencies: - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 object-keys: 1.1.1 safe-push-apply: 1.0.0 @@ -13256,7 +13902,7 @@ snapshots: p-limit@4.0.0: dependencies: - yocto-queue: 1.1.1 + yocto-queue: 1.2.1 p-locate@3.0.0: dependencies: @@ -13283,7 +13929,7 @@ snapshots: p-try@2.2.0: {} - pac-proxy-agent@7.1.0: + pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.3 @@ -13327,6 +13973,8 @@ snapshots: dependencies: entities: 4.5.0 + parsel-js@1.2.1: {} + parseurl@1.3.3: {} pascal-case@3.1.2: @@ -13355,7 +14003,7 @@ snapshots: path-scurry@2.0.0: dependencies: - lru-cache: 11.0.2 + lru-cache: 11.1.0 minipass: 7.1.2 path-to-regexp@0.1.12: {} @@ -13380,7 +14028,7 @@ snapshots: pinkie@2.0.4: {} - pirates@4.0.6: {} + pirates@4.0.7: {} pkg-dir@4.2.0: dependencies: @@ -13390,11 +14038,11 @@ snapshots: dependencies: find-up: 6.3.0 - playwright-core@1.49.1: {} + playwright-core@1.51.1: {} - playwright@1.49.1: + playwright@1.51.1: dependencies: - playwright-core: 1.49.1 + playwright-core: 1.51.1 optionalDependencies: fsevents: 2.3.2 @@ -13402,220 +14050,220 @@ snapshots: dependencies: irregular-plurals: 3.5.0 - possible-typed-array-names@1.0.0: {} + possible-typed-array-names@1.1.0: {} - postcss-calc@9.0.1(postcss@8.4.49): + postcss-calc@9.0.1(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-colormin@6.1.0(postcss@8.4.49): + postcss-colormin@6.1.0(postcss@8.5.3): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-convert-values@6.1.0(postcss@8.4.49): + postcss-convert-values@6.1.0(postcss@8.5.3): dependencies: browserslist: 4.24.4 - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-discard-comments@6.0.2(postcss@8.4.49): + postcss-discard-comments@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-discard-duplicates@6.0.3(postcss@8.4.49): + postcss-discard-duplicates@6.0.3(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-discard-empty@6.0.3(postcss@8.4.49): + postcss-discard-empty@6.0.3(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-discard-overridden@6.0.2(postcss@8.4.49): + postcss-discard-overridden@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-loader@6.2.1(postcss@8.4.49)(webpack@5.97.1): + postcss-loader@6.2.1(postcss@8.5.3)(webpack@5.98.0): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 - postcss: 8.4.49 - semver: 7.6.3 - webpack: 5.97.1(webpack-cli@5.1.4) + postcss: 8.5.3 + semver: 7.7.1 + webpack: 5.98.0(webpack-cli@6.0.1) postcss-media-query-parser@0.2.3: {} - postcss-merge-longhand@6.0.5(postcss@8.4.49): + postcss-merge-longhand@6.0.5(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - stylehacks: 6.1.1(postcss@8.4.49) + stylehacks: 6.1.1(postcss@8.5.3) - postcss-merge-rules@6.1.1(postcss@8.4.49): + postcss-merge-rules@6.1.1(postcss@8.5.3): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.4.49) - postcss: 8.4.49 + cssnano-utils: 4.0.2(postcss@8.5.3) + postcss: 8.5.3 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@6.1.0(postcss@8.4.49): + postcss-minify-font-values@6.1.0(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-minify-gradients@6.0.3(postcss@8.4.49): + postcss-minify-gradients@6.0.3(postcss@8.5.3): dependencies: colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.4.49) - postcss: 8.4.49 + cssnano-utils: 4.0.2(postcss@8.5.3) + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-minify-params@6.1.0(postcss@8.4.49): + postcss-minify-params@6.1.0(postcss@8.5.3): dependencies: browserslist: 4.24.4 - cssnano-utils: 4.0.2(postcss@8.4.49) - postcss: 8.4.49 + cssnano-utils: 4.0.2(postcss@8.5.3) + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-minify-selectors@6.0.4(postcss@8.4.49): + postcss-minify-selectors@6.0.4(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-selector-parser: 6.1.2 - postcss-modules-extract-imports@3.1.0(postcss@8.4.49): + postcss-modules-extract-imports@3.1.0(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-modules-local-by-default@4.2.0(postcss@8.4.49): + postcss-modules-local-by-default@4.2.0(postcss@8.5.3): dependencies: - icss-utils: 5.1.0(postcss@8.4.49) - postcss: 8.4.49 - postcss-selector-parser: 7.0.0 + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.4.49): + postcss-modules-scope@3.2.1(postcss@8.5.3): dependencies: - postcss: 8.4.49 - postcss-selector-parser: 7.0.0 + postcss: 8.5.3 + postcss-selector-parser: 7.1.0 - postcss-modules-values@4.0.0(postcss@8.4.49): + postcss-modules-values@4.0.0(postcss@8.5.3): dependencies: - icss-utils: 5.1.0(postcss@8.4.49) - postcss: 8.4.49 + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 - postcss-normalize-charset@6.0.2(postcss@8.4.49): + postcss-normalize-charset@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-normalize-display-values@6.0.2(postcss@8.4.49): + postcss-normalize-display-values@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-normalize-positions@6.0.2(postcss@8.4.49): + postcss-normalize-positions@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@6.0.2(postcss@8.4.49): + postcss-normalize-repeat-style@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-normalize-string@6.0.2(postcss@8.4.49): + postcss-normalize-string@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@6.0.2(postcss@8.4.49): + postcss-normalize-timing-functions@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@6.1.0(postcss@8.4.49): + postcss-normalize-unicode@6.1.0(postcss@8.5.3): dependencies: browserslist: 4.24.4 - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-normalize-url@6.0.2(postcss@8.4.49): + postcss-normalize-url@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@6.0.2(postcss@8.4.49): + postcss-normalize-whitespace@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-ordered-values@6.0.2(postcss@8.4.49): + postcss-ordered-values@6.0.2(postcss@8.5.3): dependencies: - cssnano-utils: 4.0.2(postcss@8.4.49) - postcss: 8.4.49 + cssnano-utils: 4.0.2(postcss@8.5.3) + postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-prefixwrap@1.53.0(postcss@8.4.49): + postcss-prefix-selector@1.16.1(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-reduce-initial@6.1.0(postcss@8.4.49): + postcss-reduce-initial@6.1.0(postcss@8.5.3): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 - postcss: 8.4.49 + postcss: 8.5.3 - postcss-reduce-transforms@6.0.2(postcss@8.4.49): + postcss-reduce-transforms@6.0.2(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 postcss-resolve-nested-selector@0.1.6: {} - postcss-safe-parser@6.0.0(postcss@8.4.49): + postcss-safe-parser@7.0.1(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-scss@4.0.9(postcss@8.4.49): + postcss-scss@4.0.9(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@7.0.0: + postcss-selector-parser@7.1.0: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@6.0.3(postcss@8.4.49): + postcss-svgo@6.0.3(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-unique-selectors@6.0.4(postcss@8.4.49): + postcss-unique-selectors@6.0.4(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-selector-parser: 6.1.2 - postcss-urlrebase@1.4.0(postcss@8.4.49): + postcss-urlrebase@1.4.0(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 postcss-value-parser: 4.2.0 postcss-value-parser@4.2.0: {} - postcss@8.4.49: + postcss@8.5.3: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -13653,14 +14301,14 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-agent@6.3.0: + proxy-agent@6.5.0: dependencies: agent-base: 7.1.3 debug: 4.4.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 - pac-proxy-agent: 7.1.0 + pac-proxy-agent: 7.2.0 proxy-from-env: 1.1.0 socks-proxy-agent: 8.0.5 transitivePeerDependencies: @@ -13668,10 +14316,6 @@ snapshots: proxy-from-env@1.1.0: {} - ps-list@8.1.1: {} - - pseudomap@1.0.2: {} - psl@1.15.0: dependencies: punycode: 2.3.1 @@ -13683,39 +14327,31 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@13.7.0(encoding@0.1.13): + puppeteer-core@23.11.1: dependencies: - cross-fetch: 3.1.5(encoding@0.1.13) - debug: 4.3.4 - devtools-protocol: 0.0.981744 - extract-zip: 2.0.1 - https-proxy-agent: 5.0.1 - pkg-dir: 4.2.0 - progress: 2.0.3 - proxy-from-env: 1.1.0 - rimraf: 3.0.2 - tar-fs: 2.1.1 - unbzip2-stream: 1.4.3 - ws: 8.5.0 + '@puppeteer/browsers': 2.6.1 + chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + debug: 4.4.0 + devtools-protocol: 0.0.1367902 + typed-query-selector: 2.12.0 + ws: 8.18.1 transitivePeerDependencies: + - bare-buffer - bufferutil - - encoding - supports-color - utf-8-validate - puppeteer-core@20.9.0(encoding@0.1.13)(typescript@5.7.2): + puppeteer-core@24.4.0: dependencies: - '@puppeteer/browsers': 1.4.6(typescript@5.7.2) - chromium-bidi: 0.4.16(devtools-protocol@0.0.1147663) - cross-fetch: 4.0.0(encoding@0.1.13) - debug: 4.3.4 - devtools-protocol: 0.0.1147663 - ws: 8.13.0 - optionalDependencies: - typescript: 5.7.2 + '@puppeteer/browsers': 2.8.0 + chromium-bidi: 2.1.2(devtools-protocol@0.0.1413902) + debug: 4.4.0 + devtools-protocol: 0.0.1413902 + typed-query-selector: 2.12.0 + ws: 8.18.1 transitivePeerDependencies: + - bare-buffer - bufferutil - - encoding - supports-color - utf-8-validate @@ -13729,8 +14365,6 @@ snapshots: queue-microtask@1.2.3: {} - queue-tick@1.0.1: {} - quick-lru@4.0.1: {} randombytes@2.1.0: @@ -13746,23 +14380,23 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - re-resizable@6.10.3(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + re-resizable@6.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) - react-autosize-textarea@7.1.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + react-autosize-textarea@7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: autosize: 4.0.4 line-height: 0.3.1 prop-types: 15.8.1 react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) - react-colorful@5.6.1(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + react-colorful@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) react-dom@18.3.1(react@18.3.1): dependencies: @@ -13770,16 +14404,11 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-dom@19.0.0(react@18.3.1): - dependencies: - react: 18.3.1 - scheduler: 0.25.0 - - react-easy-crop@5.2.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + react-easy-crop@5.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: normalize-wheel: 1.0.1 react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 react-is@16.13.1: {} @@ -13788,32 +14417,32 @@ snapshots: react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): + react-remove-scroll-bar@2.3.8(@types/react@18.3.20)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.20)(react@18.3.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - react-remove-scroll@2.6.2(@types/react@18.3.18)(react@18.3.1): + react-remove-scroll@2.6.3(@types/react@18.3.20)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@18.3.1) - react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) + react-remove-scroll-bar: 2.3.8(@types/react@18.3.20)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.20)(react@18.3.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.3.18)(react@18.3.1) - use-sidecar: 1.1.3(@types/react@18.3.18)(react@18.3.1) + use-callback-ref: 1.3.3(@types/react@18.3.20)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@18.3.20)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - react-router-dom@7.1.1(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + react-router-dom@7.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) - react-router: 7.1.1(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-router: 7.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-router@7.1.1(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + react-router@7.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@types/cookie': 0.6.0 cookie: 1.0.2 @@ -13821,21 +14450,21 @@ snapshots: set-cookie-parser: 2.7.1 turbo-stream: 2.4.0 optionalDependencies: - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) - react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): + react-style-singleton@2.2.3(@types/react@18.3.20)(react@18.3.1): dependencies: get-nonce: 1.0.1 react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 - react-toastify@11.0.2(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + react-toastify@11.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: clsx: 2.1.1 react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) react@18.3.1: dependencies: @@ -13882,7 +14511,7 @@ snapshots: dependencies: picomatch: 2.3.1 - readdirp@4.0.2: {} + readdirp@4.1.2: {} rechoir@0.8.0: dependencies: @@ -13901,8 +14530,8 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.7 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 @@ -13912,13 +14541,11 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.10.5: {} - regenerator-runtime@0.14.1: {} regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 regexp.prototype.flags@1.5.4: dependencies: @@ -13993,7 +14620,7 @@ snapshots: retry@0.13.1: {} - reusify@1.0.4: {} + reusify@1.1.0: {} rimraf@2.7.1: dependencies: @@ -14003,23 +14630,13 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@6.0.1: - dependencies: - glob: 11.0.1 - package-json-from-dist: 1.0.1 - robots-parser@3.0.1: {} - rtlcss-webpack-plugin@4.0.7: - dependencies: - babel-runtime: 6.25.0 - rtlcss: 3.5.0 - - rtlcss@3.5.0: + rtlcss@4.3.0: dependencies: - find-up: 5.0.0 + escalade: 3.2.0 picocolors: 1.1.1 - postcss: 8.4.49 + postcss: 8.5.3 strip-json-comments: 3.1.1 run-con@1.2.12: @@ -14035,15 +14652,15 @@ snapshots: rungen@0.3.2: {} - rxjs@7.8.1: + rxjs@7.8.2: dependencies: tslib: 2.8.1 safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 has-symbols: 1.1.0 isarray: 2.0.5 @@ -14058,34 +14675,26 @@ snapshots: safe-regex-test@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-regex: 1.2.1 safer-buffer@2.1.2: {} - sass-loader@12.6.0(sass@1.83.1)(webpack@5.97.1): - dependencies: - klona: 2.0.6 - neo-async: 2.6.2 - webpack: 5.97.1(webpack-cli@5.1.4) - optionalDependencies: - sass: 1.83.1 - - sass-loader@16.0.4(sass@1.83.1)(webpack@5.97.1): + sass-loader@16.0.5(sass@1.86.0)(webpack@5.98.0): dependencies: neo-async: 2.6.2 optionalDependencies: - sass: 1.83.1 - webpack: 5.97.1(webpack-cli@5.1.4) + sass: 1.86.0 + webpack: 5.98.0(webpack-cli@6.0.1) - sass@1.83.1: + sass@1.86.0: dependencies: chokidar: 4.0.3 - immutable: 5.0.3 + immutable: 5.1.1 source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.0 + '@parcel/watcher': 2.5.1 saxes@6.0.0: dependencies: @@ -14095,14 +14704,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - scheduler@0.25.0: {} - - schema-utils@2.7.1: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 @@ -14131,7 +14732,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.3: {} + semver@7.7.1: {} send@0.19.0: dependencies: @@ -14191,7 +14792,7 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -14206,7 +14807,7 @@ snapshots: dependencies: dunder-proto: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 setprototypeof@1.1.0: {} @@ -14223,16 +14824,10 @@ snapshots: dependencies: kind-of: 6.0.3 - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} - shebang-regex@3.0.0: {} shell-quote@1.8.2: {} @@ -14244,27 +14839,27 @@ snapshots: side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-map@1.0.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 - object-inspect: 1.13.3 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 side-channel-weakmap@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 - object-inspect: 1.13.3 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 side-channel-map: 1.0.1 side-channel@1.1.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 @@ -14278,7 +14873,7 @@ snapshots: sirv@2.0.4: dependencies: '@polka/url': 1.0.0-next.28 - mrmime: 2.0.0 + mrmime: 2.0.1 totalist: 3.0.1 sisteransi@1.0.5: {} @@ -14310,11 +14905,11 @@ snapshots: dependencies: agent-base: 7.1.3 debug: 4.4.0 - socks: 2.8.3 + socks: 2.8.4 transitivePeerDependencies: - supports-color - socks@2.8.3: + socks@2.8.4: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 @@ -14323,12 +14918,12 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@3.0.2(webpack@5.97.1): + source-map-loader@3.0.2(webpack@5.98.0): dependencies: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) source-map-support@0.5.13: dependencies: @@ -14346,7 +14941,7 @@ snapshots: source-map@0.7.4: {} - spawnd@9.0.2: + spawnd@10.1.4: dependencies: signal-exit: 4.1.0 tree-kill: 1.2.2 @@ -14354,21 +14949,21 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.20 + spdx-license-ids: 3.0.21 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.20 + spdx-license-ids: 3.0.21 spdx-expression-parse@4.0.0: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.20 + spdx-license-ids: 3.0.21 - spdx-license-ids@3.0.20: {} + spdx-license-ids@3.0.21: {} spdy-transport@3.0.0: dependencies: @@ -14393,7 +14988,7 @@ snapshots: speedline-core@1.4.3: dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.14 image-ssim: 0.2.0 jpeg-js: 0.4.4 @@ -14411,13 +15006,12 @@ snapshots: statuses@2.0.1: {} - streamx@2.21.1: + streamx@2.22.0: dependencies: fast-fifo: 1.3.2 - queue-tick: 1.0.1 text-decoder: 1.2.3 optionalDependencies: - bare-events: 2.5.3 + bare-events: 2.5.4 string-length@4.0.2: dependencies: @@ -14451,12 +15045,12 @@ snapshots: string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.7 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 gopd: 1.2.0 has-symbols: 1.1.0 internal-slot: 1.1.0 @@ -14472,25 +15066,25 @@ snapshots: string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 es-abstract: 1.23.9 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string_decoder@1.1.1: dependencies: @@ -14528,81 +15122,90 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - style-loader@4.0.0(webpack@5.97.1): + style-loader@4.0.0(webpack@5.98.0): dependencies: - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) style-search@0.1.0: {} - stylehacks@6.1.1(postcss@8.4.49): + stylehacks@6.1.1(postcss@8.5.3): dependencies: browserslist: 4.24.4 - postcss: 8.4.49 + postcss: 8.5.3 postcss-selector-parser: 6.1.2 - stylelint-config-recommended-scss@5.0.2(postcss@8.4.49)(stylelint@14.16.1): + stylelint-config-recommended-scss@14.1.0(postcss@8.5.3)(stylelint@16.17.0(typescript@5.8.2)): dependencies: - postcss-scss: 4.0.9(postcss@8.4.49) - stylelint: 14.16.1 - stylelint-config-recommended: 6.0.0(stylelint@14.16.1) - stylelint-scss: 4.7.0(stylelint@14.16.1) - transitivePeerDependencies: - - postcss + postcss-scss: 4.0.9(postcss@8.5.3) + stylelint: 16.17.0(typescript@5.8.2) + stylelint-config-recommended: 14.0.1(stylelint@16.17.0(typescript@5.8.2)) + stylelint-scss: 6.11.1(stylelint@16.17.0(typescript@5.8.2)) + optionalDependencies: + postcss: 8.5.3 - stylelint-config-recommended@6.0.0(stylelint@14.16.1): + stylelint-config-recommended@14.0.1(stylelint@16.17.0(typescript@5.8.2)): dependencies: - stylelint: 14.16.1 + stylelint: 16.17.0(typescript@5.8.2) - stylelint-scss@4.7.0(stylelint@14.16.1): + stylelint-config-recommended@15.0.0(stylelint@16.17.0(typescript@5.8.2)): dependencies: + stylelint: 16.17.0(typescript@5.8.2) + + stylelint-scss@6.11.1(stylelint@16.17.0(typescript@5.8.2)): + dependencies: + css-tree: 3.1.0 + is-plain-object: 5.0.0 + known-css-properties: 0.35.0 + mdn-data: 2.18.0 postcss-media-query-parser: 0.2.3 postcss-resolve-nested-selector: 0.1.6 - postcss-selector-parser: 6.1.2 + postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - stylelint: 14.16.1 + stylelint: 16.17.0(typescript@5.8.2) - stylelint@14.16.1: + stylelint@16.17.0(typescript@5.8.2): dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + '@csstools/media-query-list-parser': 4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + '@dual-bundle/import-meta-resolve': 4.1.0 balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 7.1.0 + cosmiconfig: 9.0.0(typescript@5.8.2) css-functions-list: 3.2.3 + css-tree: 3.1.0 debug: 4.4.0 fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 - file-entry-cache: 6.0.1 + file-entry-cache: 10.0.7 global-modules: 2.0.0 globby: 11.1.0 globjoin: 0.1.4 html-tags: 3.3.1 - ignore: 5.3.2 - import-lazy: 4.0.0 + ignore: 7.0.3 imurmurhash: 0.1.4 is-plain-object: 5.0.0 - known-css-properties: 0.26.0 + known-css-properties: 0.35.0 mathml-tag-names: 2.1.3 - meow: 9.0.0 + meow: 13.2.0 micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.49 - postcss-media-query-parser: 0.2.3 + postcss: 8.5.3 postcss-resolve-nested-selector: 0.1.6 - postcss-safe-parser: 6.0.0(postcss@8.4.49) - postcss-selector-parser: 6.1.2 + postcss-safe-parser: 7.0.1(postcss@8.5.3) + postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 string-width: 4.2.3 - strip-ansi: 6.0.1 - style-search: 0.1.0 - supports-hyperlinks: 2.3.0 + supports-hyperlinks: 3.2.0 svg-tags: 1.0.0 table: 6.9.0 - v8-compile-cache: 2.4.0 - write-file-atomic: 4.0.2 + write-file-atomic: 5.0.1 transitivePeerDependencies: - supports-color + - typescript stylis@4.2.0: {} @@ -14614,7 +15217,7 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-hyperlinks@2.3.0: + supports-hyperlinks@3.2.0: dependencies: has-flag: 4.0.0 supports-color: 7.2.0 @@ -14635,13 +15238,13 @@ snapshots: csso: 5.0.5 picocolors: 1.1.1 - swiper@11.2.0: {} + swiper@11.2.6: {} symbol-tree@3.2.4: {} - synckit@0.9.2: + synckit@0.10.3: dependencies: - '@pkgr/core': 0.1.1 + '@pkgr/core': 0.2.0 tslib: 2.8.1 table@6.9.0: @@ -14658,46 +15261,35 @@ snapshots: tapable@2.2.1: {} - tar-fs@2.1.1: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.2 - tar-stream: 2.2.0 - - tar-fs@3.0.4: + tar-fs@3.0.8: dependencies: - mkdirp-classic: 0.5.3 pump: 3.0.2 tar-stream: 3.1.7 - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 + optionalDependencies: + bare-fs: 4.0.2 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer tar-stream@3.1.7: dependencies: b4a: 1.6.7 fast-fifo: 1.3.2 - streamx: 2.21.1 + streamx: 2.22.0 - terser-webpack-plugin@5.3.11(webpack@5.97.1): + terser-webpack-plugin@5.3.14(webpack@5.98.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.37.0 - webpack: 5.97.1(webpack-cli@5.1.4) + terser: 5.39.0 + webpack: 5.98.0(webpack-cli@6.0.1) - terser@5.37.0: + terser@5.39.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.14.0 + acorn: 8.14.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -14713,7 +15305,7 @@ snapshots: text-table@0.2.0: {} - third-party-web@0.23.4: {} + third-party-web@0.26.5: {} through@2.3.8: {} @@ -14721,6 +15313,12 @@ snapshots: tiny-emitter@2.1.0: {} + tldts-core@6.1.85: {} + + tldts-icann@6.1.85: + dependencies: + tldts-core: 6.1.85 + tmpl@1.0.5: {} to-regex-range@5.0.1: @@ -14738,8 +15336,6 @@ snapshots: universalify: 0.2.0 url-parse: 1.5.10 - tr46@0.0.3: {} - tr46@3.0.0: dependencies: punycode: 2.3.1 @@ -14752,9 +15348,9 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - ts-api-utils@1.4.3(typescript@5.7.2): + ts-api-utils@1.4.3(typescript@5.8.2): dependencies: - typescript: 5.7.2 + typescript: 5.8.2 tsconfig-paths@3.15.0: dependencies: @@ -14767,10 +15363,10 @@ snapshots: tslib@2.8.1: {} - tsutils@3.21.0(typescript@5.7.2): + tsutils@3.21.0(typescript@5.8.2): dependencies: tslib: 1.14.1 - typescript: 5.7.2 + typescript: 5.8.2 turbo-stream@2.4.0: {} @@ -14799,14 +15395,14 @@ snapshots: typed-array-buffer@1.0.3: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-typed-array: 1.1.15 typed-array-byte-length@1.0.3: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 @@ -14815,7 +15411,7 @@ snapshots: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 @@ -14824,23 +15420,25 @@ snapshots: typed-array-length@1.0.7: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 is-typed-array: 1.1.15 - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typed-query-selector@2.12.0: {} + typedarray-to-buffer@3.1.5: dependencies: is-typedarray: 1.0.0 - typescript@5.7.2: {} + typescript@5.8.2: {} uc.micro@1.0.6: {} unbox-primitive@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-bigints: 1.1.0 has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 @@ -14871,7 +15469,7 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.1.2(browserslist@4.24.4): + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: browserslist: 4.24.4 escalade: 3.2.0 @@ -14889,36 +15487,36 @@ snapshots: dependencies: punycode: 2.3.1 - url-loader@4.1.1(webpack@5.97.1): + url-loader@4.1.1(webpack@5.98.0): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) url-parse@1.5.10: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 - use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@18.3.20)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 use-memo-one@1.1.3(react@18.3.1): dependencies: react: 18.3.1 - use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): + use-sidecar@1.1.3(@types/react@18.3.20)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.20 use-sync-external-store@1.4.0(react@18.3.1): dependencies: @@ -14928,14 +15526,12 @@ snapshots: utils-merge@1.0.1: {} - uuid@11.0.5: {} + uuid@11.1.0: {} uuid@8.3.2: {} uuid@9.0.1: {} - v8-compile-cache@2.4.0: {} - v8-to-istanbul@9.3.0: dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -14949,7 +15545,7 @@ snapshots: validate-npm-package-name@5.0.1: {} - validator@13.12.0: {} + validator@13.15.0: {} vary@1.1.2: {} @@ -14957,13 +15553,13 @@ snapshots: dependencies: xml-name-validator: 4.0.0 - wait-on@7.2.0: + wait-on@8.0.3: dependencies: - axios: 1.7.9 + axios: 1.8.4 joi: 17.13.3 lodash: 4.17.21 minimist: 1.2.8 - rxjs: 7.8.1 + rxjs: 7.8.2 transitivePeerDependencies: - debug @@ -14980,16 +15576,14 @@ snapshots: dependencies: minimalistic-assert: 1.0.1 - web-vitals@3.5.2: {} - - webidl-conversions@3.0.1: {} + web-vitals@4.2.4: {} webidl-conversions@7.0.0: {} webpack-bundle-analyzer@4.10.2: dependencies: '@discoveryjs/json-ext': 0.5.7 - acorn: 8.14.0 + acorn: 8.14.1 acorn-walk: 8.3.4 commander: 7.2.0 debounce: 1.2.1 @@ -15004,12 +15598,12 @@ snapshots: - bufferutil - utf-8-validate - webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.97.1): + webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.98.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.97.1) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.97.1) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.97.1) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.98.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.98.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.98.0) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.6 @@ -15018,22 +15612,41 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) webpack-merge: 5.10.0 optionalDependencies: webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1) + webpack-dev-server: 4.15.2(webpack-cli@6.0.1)(webpack@5.98.0) + + webpack-cli@6.0.1(webpack-dev-server@4.15.2)(webpack@5.98.0): + dependencies: + '@discoveryjs/json-ext': 0.6.3 + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.98.0) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.98.0) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@4.15.2)(webpack@5.98.0) + colorette: 2.0.20 + commander: 12.1.0 + cross-spawn: 7.0.6 + envinfo: 7.14.0 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.98.0(webpack-cli@6.0.1) + webpack-merge: 6.0.1 + optionalDependencies: + webpack-dev-server: 4.15.2(webpack-cli@6.0.1)(webpack@5.98.0) - webpack-dev-middleware@5.3.4(webpack@5.97.1): + webpack-dev-middleware@5.3.4(webpack@5.98.0): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.0 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) - webpack-dev-server@4.15.2(webpack-cli@5.1.4)(webpack@5.97.1): + webpack-dev-server@4.15.2(webpack-cli@6.0.1)(webpack@5.98.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -15041,20 +15654,20 @@ snapshots: '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.7 '@types/sockjs': 0.3.36 - '@types/ws': 8.5.13 + '@types/ws': 8.18.0 ansi-html-community: 0.0.8 bonjour-service: 1.3.0 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.7.5 + compression: 1.8.0 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 express: 4.21.2 graceful-fs: 4.2.11 - html-entities: 2.5.2 + html-entities: 2.5.3 http-proxy-middleware: 2.0.7(@types/express@4.17.21) ipaddr.js: 2.2.0 - launch-editor: 2.9.1 + launch-editor: 2.10.0 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 @@ -15063,21 +15676,21 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.97.1) - ws: 8.18.0 + webpack-dev-middleware: 5.3.4(webpack@5.98.0) + ws: 8.18.1 optionalDependencies: - webpack: 5.97.1(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.97.1) + webpack: 5.98.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@4.15.2)(webpack@5.98.0) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-manifest-plugin@5.0.0(webpack@5.97.1): + webpack-manifest-plugin@5.0.1(webpack@5.98.0): dependencies: tapable: 2.2.1 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@6.0.1) webpack-sources: 2.3.1 webpack-merge@5.10.0: @@ -15086,6 +15699,12 @@ snapshots: flat: 5.0.2 wildcard: 2.0.1 + webpack-merge@6.0.1: + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + webpack-sources@2.3.1: dependencies: source-list-map: 2.0.1 @@ -15093,17 +15712,17 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.97.1(webpack-cli@5.1.4): + webpack@5.98.0(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.0 + acorn: 8.14.1 browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.0 + enhanced-resolve: 5.18.1 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -15113,13 +15732,45 @@ snapshots: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.3.0 + schema-utils: 4.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.14(webpack@5.98.0) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + optionalDependencies: + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.98.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpack@5.98.0(webpack-cli@6.0.1): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.7 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.1 + browserslist: 4.24.4 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.6.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(webpack@5.97.1) + terser-webpack-plugin: 5.3.14(webpack@5.98.0) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.97.1) + webpack-cli: 6.0.1(webpack-dev-server@4.15.2)(webpack@5.98.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -15127,7 +15778,7 @@ snapshots: websocket-driver@0.7.4: dependencies: - http-parser-js: 0.5.8 + http-parser-js: 0.5.9 safe-buffer: 5.2.1 websocket-extensions: 0.1.4 @@ -15144,34 +15795,29 @@ snapshots: tr46: 3.0.0 webidl-conversions: 7.0.0 - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 - is-boolean-object: 1.2.1 + is-boolean-object: 1.2.2 is-number-object: 1.1.1 is-string: 1.1.1 is-symbol: 1.1.1 which-builtin-type@1.2.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 - is-async-function: 2.1.0 + is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 is-generator-function: 1.1.0 is-regex: 1.2.1 - is-weakref: 1.1.0 + is-weakref: 1.1.1 isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 which-collection@1.0.2: dependencies: @@ -15182,12 +15828,13 @@ snapshots: which-module@2.0.1: {} - which-typed-array@1.1.18: + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - call-bound: 1.0.3 - for-each: 0.3.3 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 gopd: 1.2.0 has-tostringtag: 1.0.2 @@ -15237,13 +15884,14 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@7.5.10: {} - - ws@8.13.0: {} + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 - ws@8.18.0: {} + ws@7.5.10: {} - ws@8.5.0: {} + ws@8.18.1: {} xdg-basedir@4.0.0: {} @@ -15255,8 +15903,6 @@ snapshots: y18n@5.0.8: {} - yallist@2.1.2: {} - yallist@3.1.1: {} yallist@4.0.0: {} @@ -15286,16 +15932,6 @@ snapshots: y18n: 4.0.3 yargs-parser: 15.0.3 - yargs@17.7.1: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -15313,4 +15949,8 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.1.1: {} + yocto-queue@1.2.1: {} + + zod@3.23.8: {} + + zod@3.24.2: {} diff --git a/resources/blocks/account-v2/block.json b/resources/blocks/account-v2/block.json new file mode 100644 index 0000000..7754449 --- /dev/null +++ b/resources/blocks/account-v2/block.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "app/account-v2", + "version": "0.1.0", + "title": "Account V2", + "category": "invoice", + "description": "Account module.", + "example": {}, + "supports": { + "html": false + }, + "textdomain": "app", + "editorScript": "file:./index.js", + "editorStyle": "file:./index.css", + "style": "file:./style-index.css", + "viewScript": "file:./view.js", + "render": "file:./render.php" +} \ No newline at end of file diff --git a/resources/blocks/account-v2/edit.js b/resources/blocks/account-v2/edit.js new file mode 100644 index 0000000..e647c51 --- /dev/null +++ b/resources/blocks/account-v2/edit.js @@ -0,0 +1,10 @@ +import { __ } from '@wordpress/i18n'; +import { useBlockProps } from '@wordpress/block-editor'; +import './editor.scss'; +export default function Edit() { + return ( +

+ { __( 'Account Module for Mody Cloud', 'app' ) } +

+ ); +} diff --git a/resources/blocks/account-v2/editor.scss b/resources/blocks/account-v2/editor.scss new file mode 100644 index 0000000..5bf4a0f --- /dev/null +++ b/resources/blocks/account-v2/editor.scss @@ -0,0 +1,3 @@ +.wp-block-account { + background-color: var(--color-white); +} diff --git a/resources/blocks/account-v2/index.js b/resources/blocks/account-v2/index.js new file mode 100644 index 0000000..455288c --- /dev/null +++ b/resources/blocks/account-v2/index.js @@ -0,0 +1,21 @@ +import { registerBlockType } from '@wordpress/blocks'; +import './style.scss'; +import Edit from './edit'; +import save from './save'; +import metadata from './block.json'; + +registerBlockType( metadata.name, { + icon: ( + + + + ), + edit: Edit, + save, +} ); diff --git a/resources/blocks/account-v2/render.php b/resources/blocks/account-v2/render.php new file mode 100644 index 0000000..5b98778 --- /dev/null +++ b/resources/blocks/account-v2/render.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/blocks/account-v2/save.js b/resources/blocks/account-v2/save.js new file mode 100644 index 0000000..ad3fbb8 --- /dev/null +++ b/resources/blocks/account-v2/save.js @@ -0,0 +1,6 @@ +import { useBlockProps } from '@wordpress/block-editor'; +export default function save() { + return ( +

{ 'Account Module for Mody Cloud' }

+ ); +} diff --git a/resources/blocks/account-v2/src/components/Links.jsx b/resources/blocks/account-v2/src/components/Links.jsx new file mode 100644 index 0000000..33db6f4 --- /dev/null +++ b/resources/blocks/account-v2/src/components/Links.jsx @@ -0,0 +1,48 @@ +// eslint-disable-next-line import/no-unresolved +import { useState } from 'react'; + +const Links = ( { routes } ) => { + const [ currentPath, setCurrentPath ] = useState( + window.location.pathname + ); + if ( ! routes || Object.keys( routes ).length === 0 ) { + return ''; + } + + const navigate = ( event ) => { + event.preventDefault(); + const link = event.currentTarget.getAttribute( 'href' ); + setCurrentPath( link ); + window.history.pushState( {}, '', link ); + // eslint-disable-next-line no-undef + window.dispatchEvent( new PopStateEvent( 'popstate' ) ); + }; + + const routesEntries = Object.entries( routes ).map( + ( [ key, value ] ) => ( { + link: key.endsWith( '/' ) ? key : `${ key }/`, + title: value, + } ) + ); + + return ( + <> + { routesEntries.map( ( { link, title } ) => { + return ( + + { title } + + ); + } ) } + + ); +}; + +export default Links; diff --git a/resources/blocks/account-v2/src/context/AccountContext.js b/resources/blocks/account-v2/src/context/AccountContext.js new file mode 100644 index 0000000..70698ca --- /dev/null +++ b/resources/blocks/account-v2/src/context/AccountContext.js @@ -0,0 +1,33 @@ +// eslint-disable-next-line import/no-unresolved +import React, { createContext, useState, useContext, useEffect } from 'react'; +import apiFetch from '@wordpress/api-fetch'; + +const AccountContext = createContext( null ); + +export const AccountProvider = ( { children } ) => { + const [ user, setUser ] = useState( null ); + const [ loading, setLoading ] = useState( true ); + const [ error, setError ] = useState( null ); + + useEffect( () => { + apiFetch( { path: '/wp/v2/users/me' } ) + .then( ( userData ) => { + setUser( userData ); + setLoading( false ); + } ) + .catch( () => { + setError( 'Could not fetch user data' ); + setLoading( false ); + } ); + }, [] ); + + return ( + + { children } + + ); +}; + +export const useUser = () => { + return useContext( AccountContext ); +}; diff --git a/resources/blocks/account-v2/src/views/Account.jsx b/resources/blocks/account-v2/src/views/Account.jsx new file mode 100644 index 0000000..c429c79 --- /dev/null +++ b/resources/blocks/account-v2/src/views/Account.jsx @@ -0,0 +1,176 @@ +// eslint-disable-next-line import/no-unresolved +import { useState } from 'react'; +import { __ } from '@wordpress/i18n'; +import apiFetch from '@wordpress/api-fetch'; +import { useUser } from '../context/AccountContext'; +import { toast } from 'react-toastify'; + +const Account = () => { + const { user, setUser, loading, error } = useUser(); + const [ userId, setUserId ] = useState( null ); + const [ email, setEmail ] = useState( '' ); + const [ name, setName ] = useState( '' ); + const [ lastName, setLastName ] = useState( '' ); + const [ phone, setPhone ] = useState( '' ); + const [ updating, setUpdating ] = useState( false ); + + if ( ! ( email && userId ) && null !== user ) { + setUserId( user?.id ); + setEmail( user?.email ); + setName( user?.name ); + setLastName( user?.last_name ); + setPhone( user?.phone ); + } + + const capitalize = ( word ) => { + return word + .toLowerCase() + .replace( /\b\w/g, ( char ) => char.toUpperCase() ); + }; + + const handleEmailChange = ( e ) => setEmail( e.target.value ); + const handleNameChange = ( e ) => setName( capitalize( e.target.value ) ); + const handleLastNameChange = ( e ) => + setLastName( capitalize( e.target.value ) ); + const handlePhoneChange = ( e ) => setPhone( e.target.value ); + + const handleSubmit = ( e ) => { + e.preventDefault(); + setUpdating( true ); + + const userData = { + user_id: userId || user?.id, + email, + name, + last_name: lastName, + phone, + }; + + apiFetch( { + path: '/app/v1/update-account/', + method: 'POST', + data: userData, + } ) + .then( ( response ) => { + setUser( ( prevUser ) => ( { ...prevUser, ...userData } ) ); + setUpdating( false ); + + if ( response.success ) { + toast.success( + response.message || + __( 'User data updated successfully.', 'app' ), + { + autoClose: 3000, + } + ); + document.querySelector( + '.header .user .dropdown .name a' + ).innerText = capitalize( `${ name } ${ lastName }` ); + } else { + toast.error( + response.message || + __( 'Error updating user data.', 'app' ), + { + autoClose: 3000, + } + ); + } + } ) + .catch( () => { + toast.error( __( 'Error updating user data.', 'app' ), { + autoClose: 3000, + } ); + setUpdating( false ); + } ); + }; + + if ( loading ) { + return
; + } + + if ( error ) { + return

{ error }

; + } + + return ( + <> + { user && ! loading ? ( +
+
+ { +
+
+ { updating && ( +
+ ) } +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ ) : ( +

{ __( 'User not found', 'app' ) }

+ ) } + + ); +}; + +export default Account; diff --git a/resources/blocks/account-v2/src/views/Security.jsx b/resources/blocks/account-v2/src/views/Security.jsx new file mode 100644 index 0000000..d118c06 --- /dev/null +++ b/resources/blocks/account-v2/src/views/Security.jsx @@ -0,0 +1,251 @@ +// eslint-disable-next-line import/no-unresolved +import { useState } from 'react'; +import { __ } from '@wordpress/i18n'; +import apiFetch from '@wordpress/api-fetch'; +import { useUser } from '../context/AccountContext'; +import { toast } from 'react-toastify'; + +const Security = () => { + const { user, loading, error } = useUser(); + const [ userId, setUserId ] = useState(); + const [ currentPassword, setCurrentPassword ] = useState( '' ); + const [ newPassword, setNewPassword ] = useState( '' ); + const [ confirmNewPassword, setConfirmNewPassword ] = useState( '' ); + const [ updating, setUpdating ] = useState( false ); + const [ showCurrentPassword, setShowCurrentPassword ] = useState( false ); + const [ showNewPassword ] = useState( false ); + const [ showConfirmNewPassword, setShowConfirmNewPassword ] = + useState( false ); + + if ( ! userId && null !== user ) { + setUserId( user?.id ); + } + + const handleCurrentPasswordChange = ( e ) => + setCurrentPassword( e.target.value ); + const handleNewPasswordChange = ( e ) => setNewPassword( e.target.value ); + const handleConfirmNewPassword = ( e ) => + setConfirmNewPassword( e.target.value ); + + const handleSubmit = ( e ) => { + e.preventDefault(); + setUpdating( true ); + + const userData = { + user_id: userId, + current_password: currentPassword, + new_password: newPassword, + confirm_new_password: confirmNewPassword, + }; + + apiFetch( { + url: App.main_site, + path: '/app/v1/update-account-password/', + method: 'POST', + data: userData, + } ) + .then( async ( response ) => { + setUpdating( false ); + const { success, message } = response; + if ( success ) { + toast.success( + message || + __( 'Password changed successfully.', 'app' ), + { + autoClose: 3000, + } + ); + setTimeout( () => { + window.location.reload(); + }, 3000 ); + } else { + toast.error( + message || __( 'Error updating user password.', 'app' ), + { + autoClose: 3000, + } + ); + } + } ) + .catch( () => { + toast.error( __( 'Error updating user password.', 'app' ), { + autoClose: 10000, + } ); + setUpdating( false ); + } ); + }; + + if ( loading ) { + return
; + } + + if ( error ) { + return

{ error }

; + } + + return ( + <> + { user ? ( +
+
+

{ __( 'Change your password', 'app' ) }

+
+
+ { updating && ( +
+ ) } +
+
+ + + +
+
+
+ + + +
+
+ + + +
+ +
+ +
+
+ ) : ( +

{ __( 'Security settings not found', 'app' ) }

+ ) } + + ); +}; + +export default Security; diff --git a/resources/blocks/account-v2/src/views/Settings.jsx b/resources/blocks/account-v2/src/views/Settings.jsx new file mode 100644 index 0000000..295f26b --- /dev/null +++ b/resources/blocks/account-v2/src/views/Settings.jsx @@ -0,0 +1,161 @@ +// eslint-disable-next-line import/no-unresolved +import { useState } from 'react'; +import { __ } from '@wordpress/i18n'; +import apiFetch from '@wordpress/api-fetch'; +import { useUser } from '../context/AccountContext'; +import { toast } from 'react-toastify'; + +const Settings = () => { + const { user, setUser, loading, error } = useUser(); + const [ userId, setUserId ] = useState( null ); + const [ optInUpdates, setOptInUpdates ] = useState( false ); + const [ optInCommercial, setOptInCommercial ] = useState( false ); + const [ preferredLanguage, setPreferredLanguage ] = useState( 'ES' ); + const [ updating, setUpdating ] = useState( false ); + + if ( ! userId && null !== user ) { + setUserId( user?.id ); + setOptInUpdates( user?.opt_in_updates ); + setOptInCommercial( user?.opt_in_commercial ); + setPreferredLanguage( user?.preferred_language ); + } + + const handleOptInUpdatesChange = ( e ) => + setOptInUpdates( e.target.checked ); + const handleOptInCommercialChange = ( e ) => + setOptInCommercial( e.target.checked ); + const handlePreferredLanguageChange = ( e ) => + setPreferredLanguage( e.target.value ); + + const handleSubmit = ( e ) => { + e.preventDefault(); + setUpdating( true ); + + const userData = { + user_id: userId, + opt_in_updates: optInUpdates, + opt_in_commercial: optInCommercial, + preferred_language: preferredLanguage, + }; + + apiFetch( { + path: '/app/v1/update-account-settings/', + method: 'POST', + data: userData, + } ) + .then( ( response ) => { + setUser( ( prevUser ) => ( { ...prevUser, ...userData } ) ); + setUpdating( false ); + if ( response.success ) { + toast.success( + response.message || + __( 'User settings updated successfully.', 'app' ), + { + autoClose: 3000, + } + ); + } else { + toast.error( + response.message || + __( 'Error updating user settings.', 'app' ), + { + autoClose: 3000, + } + ); + } + } ) + .catch( () => { + toast.error( __( 'Error updating user settings.', 'app' ), { + autoClose: 10000, + } ); + setUpdating( false ); + } ); + }; + + if ( loading ) { + return
; + } + + if ( error ) { + return

{ error }

; + } + + return ( + <> + { user ? ( +
+
+

{ __( 'Notifications' ) }

+
+
+ { updating && ( +
+ ) } +
+
+ + +
+
+ + +
+
+

{ __( 'Localization' ) }

+
+ + +
+
+ +
+
+ ) : ( +

{ __( 'Settings not found', 'app' ) }

+ ) } + + ); +}; + +export default Settings; diff --git a/resources/blocks/account-v2/style.scss b/resources/blocks/account-v2/style.scss new file mode 100644 index 0000000..356742e --- /dev/null +++ b/resources/blocks/account-v2/style.scss @@ -0,0 +1,3 @@ +body { + color: var(--color-text); +} diff --git a/resources/blocks/account-v2/view.js b/resources/blocks/account-v2/view.js new file mode 100644 index 0000000..39ef4ad --- /dev/null +++ b/resources/blocks/account-v2/view.js @@ -0,0 +1,52 @@ +// eslint-disable-next-line import/no-unresolved +import React from 'react'; +import domReady from '@wordpress/dom-ready'; +import { createRoot } from '@wordpress/element'; +import { BrowserRouter, Routes, Route } from 'react-router-dom'; +import Account from './src/views/Account'; +import Settings from './src/views/Settings'; +import Security from './src/views/Security'; +import Links from './src/components/Links'; +import { AccountProvider } from './src/context/AccountContext'; +import { ToastContainer } from 'react-toastify'; + +const AccountContainer = () => { + return ( +
+ + + + } /> + } + /> + } + /> + + + + +
+ ); +}; + +domReady( () => { + const root = createRoot( + document.getElementById( 'app-account-container' ) + ); + + root.render( ); + + const accountPage = new wp.api.models.Page( { id: App.account_page_id } ); + accountPage.fetch().done( ( post ) => { + if ( post.routes ) { + const nav = createRoot( + document.getElementById( 'dynamic-sidebar-nav' ) + ); + nav.render( ); + } + } ); +} ); diff --git a/resources/blocks/account/block.json b/resources/blocks/account/block.json deleted file mode 100644 index 8d174b0..0000000 --- a/resources/blocks/account/block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "app/account", - "title": "Account", - "description": "", - "category": "utilities", - "icon": "", - "keywords": ["profile", "user"], - "acf": { - "mode": "edit", - "post_types": ["page"], - "renderCallback": "app_render" - }, - "supports": { - "anchor": true - } -} diff --git a/resources/blocks/auth-v2/block.json b/resources/blocks/auth-v2/block.json new file mode 100644 index 0000000..cee27a8 --- /dev/null +++ b/resources/blocks/auth-v2/block.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "app/auth-v2", + "version": "0.1.0", + "title": "Auth V2", + "category": "utilities", + "description": "Auth module.", + "example": {}, + "supports": { + "html": false + }, + "textdomain": "app", + "editorScript": "file:./index.js", + "editorStyle": "file:./index.css", + "style": "file:./style-index.css", + "viewScript": "file:./view.js", + "render": "file:./render.php" +} \ No newline at end of file diff --git a/resources/blocks/auth-v2/edit.js b/resources/blocks/auth-v2/edit.js new file mode 100644 index 0000000..7b0c43a --- /dev/null +++ b/resources/blocks/auth-v2/edit.js @@ -0,0 +1,10 @@ +import { __ } from '@wordpress/i18n'; +import { useBlockProps } from '@wordpress/block-editor'; +import './editor.scss'; +export default function Edit() { + return ( +

+ { __( 'Auth Module for Mody Cloud', 'app' ) } +

+ ); +} diff --git a/resources/blocks/auth-v2/editor.scss b/resources/blocks/auth-v2/editor.scss new file mode 100644 index 0000000..6f8835a --- /dev/null +++ b/resources/blocks/auth-v2/editor.scss @@ -0,0 +1,3 @@ +.wp-block-auth { + background-color: var(--color-white); +} diff --git a/resources/blocks/auth-v2/index.js b/resources/blocks/auth-v2/index.js new file mode 100644 index 0000000..dc63a0c --- /dev/null +++ b/resources/blocks/auth-v2/index.js @@ -0,0 +1,21 @@ +import { registerBlockType } from '@wordpress/blocks'; +import './style.scss'; +import Edit from './edit'; +import save from './save'; +import metadata from './block.json'; + +registerBlockType( metadata.name, { + icon: ( + + + + ), + edit: Edit, + save, +} ); diff --git a/resources/blocks/auth-v2/render.php b/resources/blocks/auth-v2/render.php new file mode 100644 index 0000000..777df25 --- /dev/null +++ b/resources/blocks/auth-v2/render.php @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/resources/blocks/auth-v2/save.js b/resources/blocks/auth-v2/save.js new file mode 100644 index 0000000..80fbbb0 --- /dev/null +++ b/resources/blocks/auth-v2/save.js @@ -0,0 +1,4 @@ +import { useBlockProps } from '@wordpress/block-editor'; +export default function save() { + return

{ 'Auth Module for Mody Cloud' }

; +} diff --git a/resources/blocks/auth-v2/src/AuthContext.js b/resources/blocks/auth-v2/src/AuthContext.js new file mode 100644 index 0000000..fb95c01 --- /dev/null +++ b/resources/blocks/auth-v2/src/AuthContext.js @@ -0,0 +1,34 @@ +// eslint-disable-next-line import/no-unresolved +import { createContext, useState, useContext } from 'react'; + +const AuthContext = createContext( null ); + +export const AuthProvider = ( { children } ) => { + const location = window.location.search; + const [ email, setEmail ] = useState( '' ); + const [ loading ] = useState( false ); + const [ error ] = useState( null ); + const queryParams = new URLSearchParams( location?.search ); + const emailParam = queryParams.get( 'email' ) || null; + if ( emailParam ) { + setEmail( emailParam ); + } + + return ( + + { children } + + ); +}; + +export const useAuth = () => { + return useContext( AuthContext ); +}; + +export const navigate = ( event ) => { + event.preventDefault(); + const link = event.currentTarget.getAttribute( 'href' ); + window.history.pushState( {}, '', link ); + // eslint-disable-next-line no-undef + window.dispatchEvent( new PopStateEvent( 'popstate' ) ); +}; diff --git a/resources/blocks/auth-v2/src/components/AuthLinks.jsx b/resources/blocks/auth-v2/src/components/AuthLinks.jsx new file mode 100644 index 0000000..dc9acc8 --- /dev/null +++ b/resources/blocks/auth-v2/src/components/AuthLinks.jsx @@ -0,0 +1,29 @@ +import { navigate } from '../AuthContext'; + +const AuthLinks = ( { + leftLink = '', + leftText = '', + rightLink = '', + rightText = '', +} ) => { + return ( +
+ { leftLink && leftText && ( + + ) } + { rightLink && rightText && ( + + ) } +
+ ); +}; + +export default AuthLinks; diff --git a/resources/blocks/auth-v2/src/components/ForgotPassword.jsx b/resources/blocks/auth-v2/src/components/ForgotPassword.jsx new file mode 100644 index 0000000..8505f05 --- /dev/null +++ b/resources/blocks/auth-v2/src/components/ForgotPassword.jsx @@ -0,0 +1,155 @@ +// eslint-disable-next-line import/no-unresolved +import { useState, useEffect } from 'react'; +import { __, sprintf } from '@wordpress/i18n'; +import { useAuth } from '../AuthContext'; +import { toast } from 'react-toastify'; +import { useLocation } from 'react-router-dom'; +import AuthLinks from '../components/AuthLinks'; +import handleRecaptchaVerify from '../../../../scripts/tools/validateRecaptcha'; + +const ForgotPassword = () => { + const { email, setEmail, loading, error } = useAuth(); + const [ sendingEmail, setSendingEmail ] = useState( false ); + const [ emailSent, setEmailSent ] = useState( false ); + const [ successMessage, setSuccessMessage ] = useState( '' ); + const [ recaptchaSiteKey ] = useState( App.recaptcha_key ); + + const location = useLocation(); + const queryParams = new URLSearchParams( location.search ); + const emailParam = queryParams.get( 'email' ); + // eslint-disable-next-line no-undef + const emailRef = React.useRef( null ); + + useEffect( () => { + if ( emailParam ) { + setEmail( emailParam ); + } + + if ( ! email ) { + emailRef.current.focus(); + } + }, [ email, emailParam, setEmail ] ); + + const handleEmailChange = ( e ) => setEmail( e.target.value ); + + const authLinks = ( + + ); + + const sendToRecaptcha = ( event ) => { + event.preventDefault(); + handleRecaptchaVerify( event, handleSubmit, recaptchaSiteKey ); + }; + + const handleSubmit = async ( token ) => { + setSendingEmail( true ); + + const userData = { + email, + action: 'forgot_password', + token, + }; + + const data = new URLSearchParams( userData ); + + const response = await fetch( App.ajax_url, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: data.toString(), + } ); + + if ( ! response.ok ) { + toast.error( __( 'Error sending email.', 'app' ), { + autoClose: 3000, + } ); + + setSendingEmail( false ); + } + + const { + success, + data: { message }, + } = await response.json(); + + if ( success ) { + setEmailSent( true ); + setSuccessMessage( message ); + const defaultSuccessMessage = sprintf( + // eslint-disable-next-line @wordpress/i18n-translator-comments + __( 'We sent an email to %s.', 'app' ), + email + ); + toast.success( successMessage || defaultSuccessMessage, { + autoClose: 3000, + } ); + } else { + setSendingEmail( false ); + toast.error( message || __( 'Error sending email.', 'app' ), { + autoClose: 3000, + } ); + } + }; + + if ( loading ) { + return
; + } + + if ( error ) { + return

{ error }

; + } + + return ( + <> + { ! emailSent ? ( +
+
+ + +
+ { authLinks } +
+ +
+
+ ) : ( + <> +
+ { successMessage } +
+ { authLinks } + + ) } + + ); +}; + +export default ForgotPassword; diff --git a/resources/blocks/auth-v2/src/components/ResetPassword.jsx b/resources/blocks/auth-v2/src/components/ResetPassword.jsx new file mode 100644 index 0000000..5be34e2 --- /dev/null +++ b/resources/blocks/auth-v2/src/components/ResetPassword.jsx @@ -0,0 +1,255 @@ +// eslint-disable-next-line import/no-unresolved +import { useState, useEffect } from 'react'; +import { __ } from '@wordpress/i18n'; +import { useAuth } from '../AuthContext'; +import { toast } from 'react-toastify'; +import { useLocation } from 'react-router-dom'; +import AuthLinks from './AuthLinks'; +import handleRecaptchaVerify from '../../../../scripts/tools/validateRecaptcha'; + +const ResetPassword = () => { + const { email, setEmail, loading, error } = useAuth(); + const [ password, setPassword ] = useState( '' ); + const [ confirmPassword, setConfirmPassword ] = useState( '' ); + const [ firstTime, setFirstTime ] = useState( 'no' ); + const [ resetPasswordKey, setResetPasswordKey ] = useState( '' ); + const [ resettingPassword, setResettingPassword ] = useState( false ); + const [ passwordReset ] = useState( false ); + const [ showPassword, setShowPassword ] = useState( false ); + const [ showConfirmPassword, setShowConfirmPassword ] = useState( false ); + const [ successMessage, setSuccessMessage ] = useState( '' ); + const [ recaptchaSiteKey ] = useState( App.recaptcha_key ); + + const location = useLocation(); + // eslint-disable-next-line no-undef + const passwordRef = React.useRef( null ); + + useEffect( () => { + const queryParams = new URLSearchParams( location.search ); + const emailParam = queryParams.get( 'email' ); + const resetPasswordKeyParam = queryParams.get( 'key' ); + const firstTimeParam = queryParams.get( 'first_time' ); + + if ( emailParam ) { + setEmail( emailParam ); + } + + if ( resetPasswordKeyParam ) { + setResetPasswordKey( resetPasswordKeyParam ); + } + + if ( firstTimeParam?.toString() === 'true' ) { + setFirstTime( 'yes' ); + } + + passwordRef.current.focus(); + }, [ location, setEmail ] ); + + const handlePasswordChange = ( e ) => setPassword( e.target.value ); + const handleConfirmPasswordChange = ( e ) => + setConfirmPassword( e.target.value ); + + const authLinks = ( + + ); + + const sendToRecaptcha = ( event ) => { + event.preventDefault(); + handleRecaptchaVerify( event, handleSubmit, recaptchaSiteKey ); + }; + + const handleSubmit = async ( token ) => { + setResettingPassword( true ); + + const userData = { + password, + confirm_password: confirmPassword, + key: resetPasswordKey, + email, + first_time: firstTime, + action: 'reset_password', + token, + }; + + const data = new URLSearchParams( userData ); + + const response = await fetch( App.ajax_url, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: data.toString(), + } ); + + if ( ! response.ok ) { + toast.error( __( 'Error resetting your password.' ), { + autoClose: 3000, + } ); + + setResettingPassword( false ); + } + + const { + success, + // eslint-disable-next-line camelcase + data: { initial_page, message }, + } = await response.json(); + + if ( success ) { + setSuccessMessage( message ); + toast.success( + successMessage || __( 'Reset password successful.', 'app' ), + { + autoClose: 3000, + } + ); + + // eslint-disable-next-line camelcase + if ( initial_page === 'navigate-to-sign-in' ) { + document.querySelector( '[href="/auth/sign-in"]' ).click(); + } else { + // eslint-disable-next-line camelcase + window.location.href = initial_page; + } + } else { + setResettingPassword( false ); + toast.error( + message || __( 'Error resetting your password.', 'app' ), + { + autoClose: 3000, + } + ); + } + }; + + if ( loading ) { + return
; + } + + if ( error ) { + return

{ error }

; + } + + return ( + <> + { ! passwordReset ? ( +
+
+ + + +
+
+ + + +
+ { authLinks } +
+ +
+
+ ) : ( + <> + { authLinks } +
+ { successMessage } +
+ + ) } + + ); +}; + +export default ResetPassword; diff --git a/resources/blocks/auth-v2/src/components/SignIn.jsx b/resources/blocks/auth-v2/src/components/SignIn.jsx new file mode 100644 index 0000000..9978306 --- /dev/null +++ b/resources/blocks/auth-v2/src/components/SignIn.jsx @@ -0,0 +1,199 @@ +// eslint-disable-next-line import/no-unresolved +import { useState, useEffect } from 'react'; +import { __ } from '@wordpress/i18n'; +import { useAuth } from '../AuthContext'; +import { toast } from 'react-toastify'; +import AuthLinks from './AuthLinks'; +import handleRecaptchaVerify from '../../../../scripts/tools/validateRecaptcha'; + +const SignIn = () => { + const { email, setEmail, loading, error } = useAuth(); + const [ password, setPassword ] = useState( '' ); + const [ showPassword, setShowPassword ] = useState( false ); + const [ rememberMe, setRememberMe ] = useState( '' ); + const [ signingIn, setSigningIn ] = useState( false ); + const [ initialRender, setInitialRender ] = useState( true ); + const [ recaptchaSiteKey ] = useState( App.recaptcha_key ); + + // eslint-disable-next-line no-undef + const emailRef = React.useRef( null ); + // eslint-disable-next-line no-undef + const passwordRef = React.useRef( null ); + + useEffect( () => { + if ( initialRender ) { + if ( ! email ) { + emailRef.current.focus(); + } else { + passwordRef.current.focus(); + } + setInitialRender( false ); + } + }, [ email, initialRender ] ); + + const handleEmailChange = ( e ) => setEmail( e.target.value ); + const handlePasswordChange = ( e ) => setPassword( e.target.value ); + const handleRememberMeChange = ( e ) => setRememberMe( e.target.checked ); + + const authLinks = ( + + ); + + const sendToRecaptcha = ( event ) => { + event.preventDefault(); + handleRecaptchaVerify( event, handleSubmit, recaptchaSiteKey ); + }; + + const handleSubmit = async ( token ) => { + setSigningIn( true ); + + const userData = { + email, + password, + remember_me: rememberMe, + token, + action: 'sign_in', + }; + + const data = new URLSearchParams( userData ); + + const response = await fetch( App.ajax_url, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: data.toString(), + } ); + + if ( ! response.ok ) { + toast.error( __( 'Error signing in.' ), { + autoClose: 3000, + } ); + + setSigningIn( false ); + } + + const { + success, + // eslint-disable-next-line camelcase + data: { initial_page, message }, + } = await response.json(); + + if ( success ) { + toast.success( + message || __( 'Sign in successful. Redirecting…', 'app' ), + { + autoClose: 3000, + } + ); + setTimeout( () => { + // eslint-disable-next-line camelcase + window.location.href = initial_page; + }, 500 ); + } else { + setSigningIn( false ); + toast.error( message || __( 'Error signing in.', 'app' ), { + autoClose: 3000, + } ); + } + }; + + if ( loading ) { + return
; + } + + if ( error ) { + return

{ error }

; + } + + return ( + <> +
+
+ + +
+
+ + + +
+
+ + +
+ { authLinks } +
+ +
+
+ + ); +}; + +export default SignIn; diff --git a/resources/blocks/auth-v2/src/components/SignOut.jsx b/resources/blocks/auth-v2/src/components/SignOut.jsx new file mode 100644 index 0000000..c4dc69b --- /dev/null +++ b/resources/blocks/auth-v2/src/components/SignOut.jsx @@ -0,0 +1,12 @@ +import { useNavigate } from 'react-router-dom'; +import { useEffect } from '@wordpress/element'; + +const SignOut = () => { + const navigate = useNavigate(); + useEffect( () => { + navigate( '/auth/sign-in' ); + }, [ navigate ] ); + return ''; +}; + +export default SignOut; diff --git a/resources/blocks/auth-v2/src/components/SignUp.jsx b/resources/blocks/auth-v2/src/components/SignUp.jsx new file mode 100644 index 0000000..804ec83 --- /dev/null +++ b/resources/blocks/auth-v2/src/components/SignUp.jsx @@ -0,0 +1,157 @@ +// eslint-disable-next-line import/no-unresolved +import { useState, useEffect } from 'react'; +import { __ } from '@wordpress/i18n'; +import { useAuth } from '../AuthContext'; +import { toast } from 'react-toastify'; +import { useLocation } from 'react-router-dom'; +import AuthLinks from './AuthLinks'; +import handleRecaptchaVerify from '../../../../scripts/tools/validateRecaptcha'; + +const SignUp = () => { + const { email, setEmail, loading, error } = useAuth(); + const [ signingUp, setSigningUp ] = useState( false ); + const [ signedUp, setSignedUp ] = useState( false ); + const [ successMessage, setSuccessMessage ] = useState( '' ); + const [ uuid, setUuid ] = useState( '' ); + const [ recaptchaSiteKey ] = useState( App.recaptcha_key ); + + // eslint-disable-next-line no-undef + const emailRef = React.useRef( null ); + const location = useLocation(); + const queryParams = new URLSearchParams( location.search ); + const emailParam = queryParams.get( 'email' ); + + useEffect( () => { + if ( ! email ) { + emailRef.current.focus(); + } + + localStorage.setItem( 'uuid', uuid ); + document.cookie = `uuid=${ uuid }; path=/; domain=.modycloud.test; Secure`; + }, [ email, uuid ] ); + + useEffect( () => { + if ( emailParam ) { + setEmail( emailParam ); + } + }, [ emailParam, setEmail ] ); + + const handleEmailChange = ( e ) => setEmail( e.target.value ); + + const authLinks = ( + + ); + + const sendToRecaptcha = ( event ) => { + event.preventDefault(); + handleRecaptchaVerify( event, handleSubmit, recaptchaSiteKey ); + }; + + const handleSubmit = async ( token ) => { + setSigningUp( true ); + + const userData = { + email, + action: 'sign_up', + token, + }; + + const data = new URLSearchParams( userData ); + + const response = await fetch( App.ajax_url, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: data.toString(), + } ); + + if ( ! response.ok ) { + toast.error( __( 'Error signing up.', 'app' ), { + autoClose: 3000, + } ); + + setSigningUp( false ); + } + + const { + success, + // eslint-disable-next-line no-shadow + data: { message, uuid }, + } = await response.json(); + + if ( success ) { + setSignedUp( true ); + setSuccessMessage( message ); + setUuid( uuid ); + toast.success( + successMessage || __( 'Sign up successful.', 'app' ), + { + autoClose: 3000, + } + ); + } else { + setSigningUp( false ); + toast.error( message || __( 'Error signing up.', 'app' ), { + autoClose: 3000, + } ); + } + }; + + if ( loading ) { + return
; + } + + if ( error ) { + return

{ error }

; + } + + return ( + <> + { ! signedUp ? ( +
+
+ + +
+ { authLinks } +
+ +
+
+ ) : ( + <> + { authLinks } +
+ { successMessage } +
+ + ) } + + ); +}; + +export default SignUp; diff --git a/resources/blocks/auth-v2/style.scss b/resources/blocks/auth-v2/style.scss new file mode 100644 index 0000000..356742e --- /dev/null +++ b/resources/blocks/auth-v2/style.scss @@ -0,0 +1,3 @@ +body { + color: var(--color-text); +} diff --git a/resources/blocks/auth-v2/view.js b/resources/blocks/auth-v2/view.js new file mode 100644 index 0000000..fce10ee --- /dev/null +++ b/resources/blocks/auth-v2/view.js @@ -0,0 +1,43 @@ +// eslint-disable-next-line import/no-unresolved +import React from 'react'; +import domReady from '@wordpress/dom-ready'; +import { createRoot } from '@wordpress/element'; +import { BrowserRouter, Routes, Route } from 'react-router-dom'; +import { ToastContainer } from 'react-toastify'; +import SignIn from './src/components/SignIn'; +import SignUp from './src/components/SignUp'; +import SignOut from './src/components/SignOut'; +import ForgotPassword from './src/components/ForgotPassword'; +import ResetPassword from './src/components/ResetPassword'; +import { AuthProvider } from './src/AuthContext'; + +const AuthContainer = () => { + return ( +
+ + + + } /> + } /> + } /> + } + /> + } + /> + + + + +
+ ); +}; + +domReady( () => { + const root = createRoot( document.getElementById( 'app-auth-container' ) ); + + root.render( ); +} ); diff --git a/resources/blocks/auth/block.json b/resources/blocks/auth/block.json deleted file mode 100644 index b09fc8e..0000000 --- a/resources/blocks/auth/block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "app/auth", - "title": "Auth", - "description": "", - "category": "utilities", - "icon": "", - "keywords": ["login", "register", "forgot", "password"], - "acf": { - "mode": "edit", - "post_types": ["page"], - "renderCallback": "app_render" - }, - "supports": { - "anchor": true - } -} diff --git a/resources/scripts/account.js b/resources/scripts/account.js deleted file mode 100644 index 8d0794e..0000000 --- a/resources/scripts/account.js +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; -import domReady from '@wordpress/dom-ready'; -import {createRoot} from '@wordpress/element'; -import {BrowserRouter, Routes, Route} from "react-router-dom"; -import Account from '@modycloud/account/views/Account'; -import Settings from "@modycloud/account/views/Settings"; -import Security from "@modycloud/account/views/Security"; -import Links from "@modycloud/account/components/Links"; -import {AccountProvider} from "@modycloud/account/context/AccountContext"; -import {ToastContainer} from "react-toastify"; - -const AccountContainer = () => { - return ( -
- - - - }/> - }/> - }/> - - - - -
- ) -} - -domReady(() => { - const root = createRoot( - document.getElementById('app-account-container') - ); - - root.render(); - - const accountPage = new wp.api.models.Page({id: App.account_page_id}); - accountPage.fetch() - .done((post) => { - if (post.routes) { - const nav = createRoot( - document.getElementById('dynamic-sidebar-nav') - ) - nav.render(); - } - }) -}); \ No newline at end of file diff --git a/resources/scripts/account/components/Links.jsx b/resources/scripts/account/components/Links.jsx deleted file mode 100644 index 4579422..0000000 --- a/resources/scripts/account/components/Links.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useState } from "@wordpress/element"; -import { __ } from "@wordpress/i18n"; - -const Links = ({ routes }) => { - if (!routes || Object.keys(routes).length === 0) { - return ''; - } - - const [currentPath, setCurrentPath] = useState(window.location.pathname); - - const navigate = (event) => { - event.preventDefault(); - const link = event.currentTarget.getAttribute('href'); - setCurrentPath(link); - window.history.pushState({}, '', link); - window.dispatchEvent(new PopStateEvent('popstate')); - } - - const routesEntries = Object.entries(routes).map(([key, value]) => ({ - link: key.endsWith('/') ? key : `${key}/`, - title: value - })); - - return ( - <> - {routesEntries.map(({ link, title }) => { - return - {__(title)} - - })} - - ); -}; - -export default Links; diff --git a/resources/scripts/account/context/AccountContext.js b/resources/scripts/account/context/AccountContext.js deleted file mode 100644 index 498d17c..0000000 --- a/resources/scripts/account/context/AccountContext.js +++ /dev/null @@ -1,32 +0,0 @@ -import React, { createContext, useState, useContext, useEffect } from 'react'; -import apiFetch from '@wordpress/api-fetch'; - -const AccountContext = createContext(null); - -export const AccountProvider = ({ children }) => { - const [user, setUser] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - - useEffect(() => { - apiFetch({ path: '/wp/v2/users/me' }) - .then(userData => { - setUser(userData); - setLoading(false); - }) - .catch(error => { - setError('Could not fetch user data'); - setLoading(false); - }); - }, []); - - return ( - - {children} - - ); -}; - -export const useUser = () => { - return useContext(AccountContext); -}; diff --git a/resources/scripts/account/views/Account.jsx b/resources/scripts/account/views/Account.jsx deleted file mode 100644 index 8f53332..0000000 --- a/resources/scripts/account/views/Account.jsx +++ /dev/null @@ -1,162 +0,0 @@ -import {useState} from 'react'; -import {__} from '@wordpress/i18n'; -import apiFetch from '@wordpress/api-fetch'; -import {useUser} from "@modycloud/account/context/AccountContext"; -import {toast} from "react-toastify"; - -const Account = () => { - const {user, setUser, loading, error} = useUser(); - const [userId, setUserId] = useState(null); - const [email, setEmail] = useState(null); - const [name, setName] = useState(null); - const [lastName, setLastName] = useState(null); - const [phone, setPhone] = useState(null); - const [updating, setUpdating] = useState(false); - - if (!(email && userId) && null !== user) { - setUserId(user?.id); - setEmail(user?.email); - setName(user?.name); - setLastName(user?.last_name); - setPhone(user?.phone); - } - - const capitalize = (word) => { - return word - .toLowerCase() - .replace(/\b\w/g, (char) => char.toUpperCase()); - } - - const handleEmailChange = (e) => setEmail(e.target.value); - const handleNameChange = (e) => setName(capitalize(e.target.value)); - const handleLastNameChange = (e) => setLastName(capitalize(e.target.value)); - const handlePhoneChange = (e) => setPhone(e.target.value); - - const handleSubmit = (e) => { - e.preventDefault(); - setUpdating(true); - - const userData = { - user_id: userId || user?.id, - email, - name, - last_name: lastName, - phone - }; - - apiFetch({ - path: '/app/v1/update-account/', - method: 'POST', - data: userData - }) - .then(response => { - setUser(prevUser => ({...prevUser, ...userData})); - setUpdating(false) - - if(response.success) { - toast.success( - response.message || __('User data updated successfully.', 'app'), - { - autoClose: 3000, - } - ) - document.querySelector('.header .user .dropdown .name a') - .innerText = capitalize(`${name} ${lastName}`); - } else { - toast.error( - response.message || __('Error updating user data.', 'app'), - { - autoClose: 3000, - } - ) - } - }) - .catch(error => { - console.error('Error updating user data:', error); - toast.error( - __('Error updating user data.', 'app'), - { - autoClose: 3000, - } - ) - setUpdating(false); - }); - }; - - - if (loading) { - return
; - } - - if (error) { - return

{error}

; - } - - return ( - <> - {user && !loading ? ( -
-
- {`${name} -
-
- {updating &&
} -
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
- ) : ( -

{__('User not found', 'app')}

- )} - - ); -}; - -export default Account; diff --git a/resources/scripts/account/views/Security.jsx b/resources/scripts/account/views/Security.jsx deleted file mode 100644 index bac71ba..0000000 --- a/resources/scripts/account/views/Security.jsx +++ /dev/null @@ -1,195 +0,0 @@ -import {useState} from 'react'; -import {__} from '@wordpress/i18n'; -import apiFetch from '@wordpress/api-fetch'; -import {useUser} from "@modycloud/account/context/AccountContext"; -import {toast} from "react-toastify"; -import {useLocation} from "react-router-dom"; -import {useEffect} from "@wordpress/element"; - -const Security = () => { - const {user, setUser, loading, error} = useUser(); - const [userId, setUserId] = useState(); - const [currentPassword, setCurrentPassword] = useState(''); - const [newPassword, setNewPassword] = useState(''); - const [confirmNewPassword, setConfirmNewPassword] = useState(''); - const [updating, setUpdating] = useState(false); - const [showCurrentPassword, setShowCurrentPassword] = useState(false) - const [showNewPassword, setShowNewPassword] = useState(false) - const [showConfirmNewPassword, setShowConfirmNewPassword] = useState(false) - const [code, setCode] = useState(''); - - if (!userId && null !== user) { - setUserId(user?.id); - } - - const handleCurrentPasswordChange = (e) => setCurrentPassword(e.target.value); - const handleNewPasswordChange = (e) => setNewPassword(e.target.value); - const handleConfirmNewPassword = (e) => setConfirmNewPassword(e.target.value); - - const handleSubmit = (e) => { - e.preventDefault(); - setUpdating(true); - - const userData = { - user_id: userId, - current_password: currentPassword, - new_password: newPassword, - confirm_new_password: confirmNewPassword - }; - - apiFetch({ - url: App.main_site, - path: '/app/v1/update-account-password/', - method: 'POST', - data: userData - }) - .then(async (response) => { - setUpdating(false); - const {success, message} = response; - if (success) { - toast.success( - message || __('Password changed successfully.', 'app'), - { - autoClose: 3000, - } - ) - setTimeout(() => { - window.location.reload(); - }, 3000) - } else { - toast.error( - message || __('Error updating user password.', 'app'), - { - autoClose: 3000, - } - ) - } - }) - .catch(error => { - console.error('Error updating user password:', error); - toast.error( - __('Error updating user password.', 'app'), - { - autoClose: 10000, - } - ) - setUpdating(false); - }); - }; - - if (loading) { - return
; - } - - if (error) { - return

{error}

; - } - - return ( - <> - {user ? ( -
-
-

{__('Change your password', 'app')}

-
-
- {updating &&
} -
-
- - - setShowCurrentPassword(!showCurrentPassword)}> - {!showCurrentPassword && - - - - } - {showCurrentPassword && - - - - } - -
-
-
- - - setShowNewPassword(!showNewPassword)}> - {!showNewPassword && - - - - } - {showNewPassword && - - - - } - -
-
- - - setShowConfirmNewPassword(!showConfirmNewPassword)}> - {!showConfirmNewPassword && - - - - } - {showConfirmNewPassword && - - - - } - -
- -
- -
-
- ) : ( -

{__('Security settings not found', 'app')}

- )} - - ); -}; - -export default Security; diff --git a/resources/scripts/account/views/Settings.jsx b/resources/scripts/account/views/Settings.jsx deleted file mode 100644 index 9b1cdb6..0000000 --- a/resources/scripts/account/views/Settings.jsx +++ /dev/null @@ -1,145 +0,0 @@ -import { useEffect, useState } from 'react'; -import { __ } from '@wordpress/i18n'; -import apiFetch from '@wordpress/api-fetch'; -import {useUser} from "@modycloud/account/context/AccountContext"; -import {toast} from "react-toastify"; - -const Settings = () => { - const { user, setUser, loading, error } = useUser(); - const [userId, setUserId] = useState(null); - const [optInUpdates, setOptInUpdates] = useState(null); - const [optInCommercial, setOptInCommercial] = useState(null); - const [preferredLanguage, setPreferredLanguage] = useState(null); - const [updating, setUpdating] = useState(false); - - if (!userId && null !== user) { - setUserId(user?.id); - setOptInUpdates(user?.opt_in_updates); - setOptInCommercial(user?.opt_in_commercial); - setPreferredLanguage(user?.preferred_language); - } - - const handleOptInUpdatesChange = (e) => setOptInUpdates(e.target.checked); - const handleOptInCommercialChange = (e) => setOptInCommercial(e.target.checked); - const handlePreferredLanguageChange = (e) => setPreferredLanguage(e.target.value); - - const handleSubmit = (e) => { - e.preventDefault(); - setUpdating(true); - - const userData = { - user_id: userId, - opt_in_updates: optInUpdates, - opt_in_commercial: optInCommercial, - preferred_language: preferredLanguage - }; - - apiFetch({ - path: '/app/v1/update-account-settings/', - method: 'POST', - data: userData - }) - .then(response => { - setUser(prevUser => ({ ...prevUser, ...userData })); - setUpdating(false); - if(response.success) { - toast.success( - response.message || __('User settings updated successfully.', 'app'), - { - autoClose: 3000, - } - ) - } else { - toast.error( - response.message || __('Error updating user settings.', 'app'), - { - autoClose: 3000, - } - ) - } - }) - .catch(error => { - console.error('Error updating user settings:', error); - toast.error( - __('Error updating user settings.', 'app'), - { - autoClose: 10000, - } - ) - setUpdating(false); - }); - }; - - if (loading) { - return
; - } - - if (error) { - return

{error}

; - } - - return ( - <> - {user ? ( -
-
-

{__('Notifications')}

-
-
- {updating &&
} -
-
- - -
-
- - -
-
-

{__('Localization')}

-
- - -
-
- -
-
- ) : ( -

{__('Settings not found', 'app')}

- )} - - ); -}; - -export default Settings; diff --git a/resources/scripts/app.js b/resources/scripts/app.js index e3d5cab..73f6de6 100644 --- a/resources/scripts/app.js +++ b/resources/scripts/app.js @@ -1,9 +1,5 @@ -import "@mcscss/app.scss"; +import '../scss/app.scss'; -window.addEventListener('load', () => { +window.addEventListener( 'load', () => {} ); -}) - -document.addEventListener('DOMContentLoaded', () => { - -}); \ No newline at end of file +document.addEventListener( 'DOMContentLoaded', () => {} ); diff --git a/resources/scripts/auth.js b/resources/scripts/auth.js deleted file mode 100644 index 951cb7c..0000000 --- a/resources/scripts/auth.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import domReady from '@wordpress/dom-ready'; -import {createRoot} from '@wordpress/element'; -import {BrowserRouter, Routes, Route} from "react-router-dom"; -import {ToastContainer} from "react-toastify"; -import SignIn from "@modycloud/auth/components/SignIn"; -import SignUp from "@modycloud/auth/components/SignUp"; -import SignOut from "@modycloud/auth/components/SignOut"; -import ForgotPassword from "@modycloud/auth/components/ForgotPassword"; -import ResetPassword from "@modycloud/auth/components/ResetPassword"; -import {AuthProvider} from "@modycloud/auth/AuthContext"; - -const AuthContainer = () => { - return ( -
- - - - }/> - }/> - }/> - }/> - }/> - - - - -
- ) -} - -domReady(() => { - const root = createRoot( - document.getElementById('app-auth-container') - ); - - root.render(); -}); \ No newline at end of file diff --git a/resources/scripts/auth/AuthContext.js b/resources/scripts/auth/AuthContext.js deleted file mode 100644 index 8be80fc..0000000 --- a/resources/scripts/auth/AuthContext.js +++ /dev/null @@ -1,32 +0,0 @@ -import React, { createContext, useState, useContext, useEffect } from 'react'; - -const AuthContext = createContext(null); - -export const AuthProvider = ({ children }) => { - const location = window.location.search; - const [email, setEmail] = useState(''); - const [loading, setLoading] = useState(false); - const [error, setError] = useState(null); - const queryParams = new URLSearchParams(location.search) - const emailParam = queryParams.get('email') || null; - if(emailParam) { - setEmail(emailParam); - } - - return ( - - {children} - - ); -}; - -export const useAuth = () => { - return useContext(AuthContext); -}; - -export const navigate = (event) => { - event.preventDefault(); - const link = event.currentTarget.getAttribute('href'); - window.history.pushState({}, '', link); - window.dispatchEvent(new PopStateEvent('popstate')); -} \ No newline at end of file diff --git a/resources/scripts/auth/components/AuthLinks.jsx b/resources/scripts/auth/components/AuthLinks.jsx deleted file mode 100644 index 02df2ca..0000000 --- a/resources/scripts/auth/components/AuthLinks.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import {navigate} from "@modycloud/auth/AuthContext"; - -const AuthLinks = ({leftLink = '', leftText = '', rightLink = '', rightText = ''}) => { - return ( -
- {leftLink && leftText && - - } - {rightLink && rightText && - - } -
- ) -} - -export default AuthLinks; \ No newline at end of file diff --git a/resources/scripts/auth/components/ForgotPassword.jsx b/resources/scripts/auth/components/ForgotPassword.jsx deleted file mode 100644 index d1e297b..0000000 --- a/resources/scripts/auth/components/ForgotPassword.jsx +++ /dev/null @@ -1,146 +0,0 @@ -import {useState, useEffect} from 'react'; -import {__, sprintf} from '@wordpress/i18n'; -import {useAuth} from "@modycloud/auth/AuthContext"; -import {toast} from "react-toastify"; -import {useLocation} from "react-router-dom"; -import AuthLinks from "@modycloud/auth/components/AuthLinks"; -import handleRecaptchaVerify from "../../tools/validateRecaptcha"; - -const ForgotPassword = () => { - const {email, setEmail, loading, error} = useAuth(); - const [sendingEmail, setSendingEmail] = useState(false); - const [emailSent, setEmailSent] = useState(false); - const [successMessage, setSuccessMessage] = useState(''); - const [recaptchaSiteKey] = useState(App.recaptcha_key); - - const location = useLocation(); - const queryParams = new URLSearchParams(location.search) - const emailParam = queryParams.get('email'); - const emailRef = React.useRef(null); - - useEffect(() => { - if (emailParam) { - setEmail(emailParam); - } - - if(!email) { - emailRef.current.focus(); - } - }, [emailParam]); - - const handleEmailChange = (e) => setEmail(e.target.value); - - const authLinks = ; - - const sendToRecaptcha = (event) => { - event.preventDefault(); - handleRecaptchaVerify(event, handleSubmit, recaptchaSiteKey) - }; - - const handleSubmit = async (token) => { - setSendingEmail(true); - - const userData = { - email, - action: 'forgot_password', - token: token, - }; - - const data = new URLSearchParams(userData); - - const response = await fetch(App.ajax_url, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: data.toString(), - }); - - if (!response.ok) { - toast.error( - __('Error sending email.', 'app'), - { - autoClose: 3000, - } - ) - console.error(sprintf(__('Error sending email. Code: %s', 'app'), response.statusText)) - setSendingEmail(false); - } - - const {success, data: {initial_page, message}} = await response.json(); - - if (success) { - setEmailSent(true); - setSuccessMessage(message) - toast.success( - successMessage || sprintf(__('We sent an email to %s.', 'app'), email), - { - autoClose: 3000, - } - ) - } else { - setSendingEmail(false); - toast.error( - message || __('Error sending email.', 'app'), - { - autoClose: 3000, - } - ) - } - }; - - - if (loading) { - return
; - } - - if (error) { - return

{error}

; - } - - return ( - <> - {!emailSent ? - ( -
-
- - -
- {authLinks} -
- -
-
- ) : ( - <> -
- {successMessage} -
- {authLinks} - - ) - } - - ); -}; - -export default ForgotPassword; diff --git a/resources/scripts/auth/components/ResetPassword.jsx b/resources/scripts/auth/components/ResetPassword.jsx deleted file mode 100644 index c1a9fed..0000000 --- a/resources/scripts/auth/components/ResetPassword.jsx +++ /dev/null @@ -1,222 +0,0 @@ -import {useState, useEffect} from 'react'; -import {__} from '@wordpress/i18n'; -import {useAuth} from "@modycloud/auth/AuthContext"; -import {toast} from "react-toastify"; -import {useLocation} from "react-router-dom"; -import AuthLinks from "./AuthLinks"; -import handleRecaptchaVerify from "../../tools/validateRecaptcha"; - -const ResetPassword = () => { - const {email, setEmail, loading, error} = useAuth(); - const [password, setPassword] = useState(''); - const [confirmPassword, setConfirmPassword] = useState(''); - const [firstTime, setFirstTime] = useState('no'); - const [resetPasswordKey, setResetPasswordKey] = useState(''); - const [resettingPassword, setResettingPassword] = useState(false); - const [passwordReset, setPasswordReset] = useState(false); - const [showPassword, setShowPassword] = useState(false); - const [showConfirmPassword, setShowConfirmPassword] = useState(false); - const [successMessage, setSuccessMessage] = useState(''); - const [recaptchaSiteKey] = useState(App.recaptcha_key); - - const location = useLocation(); - const passwordRef = React.useRef(null); - - useEffect(() => { - const queryParams = new URLSearchParams(location.search) - const emailParam = queryParams.get('email'); - const resetPasswordKeyParam = queryParams.get('key'); - const firstTimeParam = queryParams.get('first_time'); - - if (emailParam) { - setEmail(emailParam); - } - - if (resetPasswordKeyParam) { - setResetPasswordKey(resetPasswordKeyParam); - } - - if (firstTimeParam?.toString() === 'true') { - setFirstTime('yes'); - } - - passwordRef.current.focus(); - }, [location]); - - const handlePasswordChange = (e) => setPassword(e.target.value); - const handleConfirmPasswordChange = (e) => setConfirmPassword(e.target.value); - - const authLinks = ; - - const sendToRecaptcha = (event) => { - event.preventDefault(); - handleRecaptchaVerify(event, handleSubmit, recaptchaSiteKey) - }; - - const handleSubmit = async (token) => { - setResettingPassword(true); - - const userData = { - password, - confirm_password: confirmPassword, - key: resetPasswordKey, - email: email, - first_time: firstTime, - action: 'reset_password', - token: token - }; - - const data = new URLSearchParams(userData); - - const response = await fetch(App.ajax_url, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: data.toString(), - }); - - if (!response.ok) { - toast.error( - __('Error resetting your password.'), - { - autoClose: 3000, - } - ) - console.error( - sprintf( - __('Error resetting your password. Code: %s', 'app'), - response.statusText - ) - ) - setResettingPassword(false); - } - - const {success, data: {initial_page, message, uuid}} = await response.json(); - - if (success) { - setSuccessMessage(message) - toast.success( - successMessage || __('Reset password successful.', 'app'), - { - autoClose: 3000, - } - ) - - if (initial_page === 'navigate-to-sign-in') { - document.querySelector('[href="/auth/sign-in"]').click() - } else { - window.location.href = initial_page; - } - } else { - setResettingPassword(false); - toast.error( - message || __('Error resetting your password.', 'app'), - { - autoClose: 3000, - } - ) - } - }; - - - if (loading) { - return
; - } - - if (error) { - return

{error}

; - } - - return ( - <> - {!passwordReset ? - ( -
-
- - - setShowPassword(!showPassword)}> - {!showPassword ? - ( - - - - ) : ( - - - - ) - } - -
-
- - - setShowConfirmPassword(!showConfirmPassword)}> - {!showConfirmPassword ? - ( - - - - ) : ( - - - - ) - } - -
- {authLinks} -
- -
-
- ) : ( - <> - {authLinks} -
- {successMessage} -
- - ) - } - - ); -}; - -export default ResetPassword; diff --git a/resources/scripts/auth/components/SignIn.jsx b/resources/scripts/auth/components/SignIn.jsx deleted file mode 100644 index 5aab9fe..0000000 --- a/resources/scripts/auth/components/SignIn.jsx +++ /dev/null @@ -1,186 +0,0 @@ -import {useState, useEffect} from 'react'; -import {__, sprintf} from '@wordpress/i18n'; -import {useAuth} from "../AuthContext"; -import {toast} from "react-toastify"; -import AuthLinks from "./AuthLinks"; -import handleRecaptchaVerify from "../../tools/validateRecaptcha"; - -const SignIn = () => { - const {email, setEmail, loading, error} = useAuth(); - const [password, setPassword] = useState(''); - const [showPassword, setShowPassword] = useState(false); - const [rememberMe, setRememberMe] = useState(''); - const [signingIn, setSigningIn] = useState(false); - const [initialRender, setInitialRender] = useState(true); - const [recaptchaSiteKey] = useState(App.recaptcha_key); - - const emailRef = React.useRef(null); - const passwordRef = React.useRef(null); - - useEffect(() => { - if(initialRender) { - if (!email) { - emailRef.current.focus(); - } else { - passwordRef.current.focus(); - } - setInitialRender(false); - } - }, [email]); - - const handleEmailChange = (e) => setEmail(e.target.value); - const handlePasswordChange = (e) => setPassword(e.target.value); - const handleRememberMeChange = (e) => setRememberMe(e.target.checked); - - const authLinks = ; - - const sendToRecaptcha = (event) => { - event.preventDefault(); - handleRecaptchaVerify(event, handleSubmit, recaptchaSiteKey) - }; - - const handleSubmit = async (token) => { - setSigningIn(true); - - const userData = { - email, - password, - remember_me: rememberMe, - token: token, - action: 'sign_in' - }; - - const data = new URLSearchParams(userData); - - const response = await fetch(App.ajax_url, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: data.toString(), - }); - - if (!response.ok) { - toast.error( - __('Error signing in.'), - { - autoClose: 3000, - } - ) - console.error( - sprintf( - __('Error signing in. Code: %s', 'app'), - response.statusText - ) - ); - setSigningIn(false); - } - - const {success, data: {initial_page, message}} = await response.json(); - - if (success) { - toast.success( - message || __('Sign in successful. Redirecting...', 'app'), - { - autoClose: 3000, - } - ) - setTimeout(() => { - window.location.href = initial_page; - }, 500); - } else { - setSigningIn(false); - toast.error( - message || __('Error signing in.', 'app'), - { - autoClose: 3000, - } - ) - } - }; - - - if (loading) { - return
; - } - - if (error) { - return

{error}

; - } - - return ( - <> -
-
- - -
-
- - - setShowPassword(!showPassword)}> - {!showPassword ? - ( - - - - ) : ( - - - - ) - } - -
-
- - -
- {authLinks} -
- -
-
- - ); -}; - -export default SignIn; diff --git a/resources/scripts/auth/components/SignOut.jsx b/resources/scripts/auth/components/SignOut.jsx deleted file mode 100644 index 3626788..0000000 --- a/resources/scripts/auth/components/SignOut.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import {useNavigate} from "react-router-dom"; -import {useEffect} from "@wordpress/element"; - -const SignOut = () => { - const navigate = useNavigate(); - useEffect(() => { - navigate('/auth/sign-in'); - }, []); - return ''; -} - -export default SignOut; \ No newline at end of file diff --git a/resources/scripts/auth/components/SignUp.jsx b/resources/scripts/auth/components/SignUp.jsx deleted file mode 100644 index 364a766..0000000 --- a/resources/scripts/auth/components/SignUp.jsx +++ /dev/null @@ -1,158 +0,0 @@ -import {useState, useEffect} from 'react'; -import {__} from '@wordpress/i18n'; -import {useAuth} from "../AuthContext"; -import {toast} from "react-toastify"; -import {useLocation} from "react-router-dom"; -import AuthLinks from "./AuthLinks"; -import handleRecaptchaVerify from "../../tools/validateRecaptcha"; - -const SignUp = () => { - const {email, setEmail, loading, error} = useAuth(); - const [signingUp, setSigningUp] = useState(false); - const [signedUp, setSignedUp] = useState(false); - const [successMessage, setSuccessMessage] = useState(''); - const [uuid, setUuid] = useState(''); - const [recaptchaSiteKey] = useState(App.recaptcha_key); - - const emailRef = React.useRef(null); - const location = useLocation(); - const queryParams = new URLSearchParams(location.search) - const emailParam = queryParams.get('email'); - - useEffect(() => { - if(!email) { - emailRef.current.focus(); - } - - localStorage.setItem('uuid', uuid); - document.cookie = `uuid=${uuid}; path=/; domain=.modycloud.test; Secure`; - }, [uuid]); - - useEffect(() => { - if(emailParam) { - setEmail(emailParam); - } - }, [emailParam]); - - const handleEmailChange = (e) => setEmail(e.target.value); - - const authLinks = ; - - const sendToRecaptcha = (event) => { - event.preventDefault(); - handleRecaptchaVerify(event, handleSubmit, recaptchaSiteKey) - }; - - const handleSubmit = async (token) => { - setSigningUp(true); - - const userData = { - email, - action: 'sign_up', - token: token - }; - - const data = new URLSearchParams(userData); - - const response = await fetch(App.ajax_url, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: data.toString(), - }); - - if (!response.ok) { - toast.error( - __('Error signing up.', 'app'), - { - autoClose: 3000, - } - ) - console.error( - sprintf( - __('Error signing up. Code: %s', 'app'), - response.statusText - ) - ); - setSigningUp(false); - } - - const {success, data: {message, uuid}} = await response.json(); - - if (success) { - setSignedUp(true); - setSuccessMessage(message) - setUuid(uuid) - toast.success( - successMessage || __('Sign up successful.', 'app'), - { - autoClose: 3000, - } - ) - } else { - setSigningUp(false); - toast.error( - message || __('Error signing up.', 'app'), - { - autoClose: 3000, - } - ) - } - }; - - - if (loading) { - return
; - } - - if (error) { - return

{error}

; - } - - return ( - <> - {!signedUp ? - ( -
-
- - -
- {authLinks} -
- -
-
- ) : ( - <> - {authLinks} -
- {successMessage} -
- - ) - } - - ); -}; - -export default SignUp; diff --git a/resources/scripts/editor.js b/resources/scripts/editor.js index af4e983..e636890 100644 --- a/resources/scripts/editor.js +++ b/resources/scripts/editor.js @@ -1 +1 @@ -import "@mcscss/editor.scss"; +import '../scss/editor.scss'; diff --git a/resources/scripts/site.js b/resources/scripts/site.js index 2eb2f3f..d36f57f 100644 --- a/resources/scripts/site.js +++ b/resources/scripts/site.js @@ -1,24 +1,25 @@ +// eslint-disable-next-line import/no-unresolved import React from 'react'; import domReady from '@wordpress/dom-ready'; -import {createRoot} from '@wordpress/element'; -import {ToastContainer} from "react-toastify"; -import CreateSiteIntro from "@modycloud/site/components/CreateSiteIntro"; -import CreateSiteForm from "@modycloud/site/components/CreateSiteForm"; +import { createRoot } from '@wordpress/element'; +import { ToastContainer } from 'react-toastify'; +import CreateSiteIntro from './site/components/CreateSiteIntro'; +import CreateSiteForm from './site/components/CreateSiteForm'; const AccountContainer = () => { - return ( - <> - - - - - ) -} + return ( + <> + + + + + ); +}; -domReady(() => { - const root = createRoot( - document.getElementById('app-create-site-container') - ); +domReady( () => { + const root = createRoot( + document.getElementById( 'app-create-site-container' ) + ); - root.render(); -}); \ No newline at end of file + root.render( ); +} ); diff --git a/resources/scripts/site/components/CreateSiteForm.jsx b/resources/scripts/site/components/CreateSiteForm.jsx index 0e947a3..8b7308a 100644 --- a/resources/scripts/site/components/CreateSiteForm.jsx +++ b/resources/scripts/site/components/CreateSiteForm.jsx @@ -1,195 +1,220 @@ -import {useState} from 'react'; -import {__, sprintf} from '@wordpress/i18n'; -import {toast} from "react-toastify"; -import toKebabCase from "@modycloud/tools/kebabcase"; +import { useState } from 'react'; +import { __, sprintf } from '@wordpress/i18n'; +import { toast } from 'react-toastify'; +import toKebabCase from '@modycloud/tools/kebabcase'; const CreateSiteForm = () => { - const [companyName, setCompanyName] = useState(''); - const [spaceName, setSpaceName] = useState(''); - const [isCreating, setIsCreating] = useState(false); - const [loadingMessage, setLoadingMessage] = useState('We are creating your space, please wait...'); - const [counter, setCounter] = useState(0); - - const maskSpaceNameInput = (event) => { - setSpaceName( - toKebabCase(event.target.value) - .substring(0, 24) - ); - } - - const handleCompanyName = (event) => { - setCompanyName(event.target.value) - }; - const handleSpaceName = (event) => setSpaceName(event.target.value); - - const messages = [ - __('Chopping some bananas...', 'app'), - __('Grabbing oranges from the tree...', 'app'), - __('Measuring a cup of flour...', 'app'), - __('Making sure everything is correct...', 'app'), - __('Were not we doing a cake?...', 'app'), - __('Huh! It\'s been a long time...', 'app'), - __('I got somewhere to be man...', 'app'), - __('Oh! You\'re still here? Man what am I doing...', 'app'), - ] - - const checkInstallFinished = async (queue_ui) => { - const data = new URLSearchParams({ - 'action': 'check_setup_finished', - 'queue_id': queue_ui, - }); - - try { - const response = await fetch(App.ajax_url, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: data.toString(), - }); - if (!response.ok) { - return false; - } - return await response.json(); - } catch (error) { - return false; - } - } - - const handleSubmit = async (e) => { - e.preventDefault(); - if(isCreating) return; - setIsCreating(true); - - const siteData = { - company_name: companyName, - space_name: spaceName, - action: 'create_space' - }; - - const data = new URLSearchParams(siteData); - - const response = await fetch(App.ajax_url, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: data.toString(), - }); - - if (!response.ok) { - toast.error( - __('Error creating site.'), - { - autoClose: 3000, - } - ) - console.error( - sprintf( - __('Error creating site. Code: %s', 'app'), - response.statusText - ) - ); - setIsCreating(false); - } - - const {success, data: {initial_page, message, queue_id}} = await response.json(); - - if (success) { - toast.success( - message || __('Site queued for creation... Please wait...', 'app'), - { - autoClose: 3000, - } - ) - - const toastId = toast.loading(message); - - const intervalId = setInterval(async () => { - setLoadingMessage(messages[Math.floor(Math.random() * 8)]); - toast.update(toastId, {render: loadingMessage, type: 'info', isLoading: true}); - const { - data: {done, initial_page} - } = await checkInstallFinished(queue_id); - - if (done) { - clearInterval(intervalId); - toast.update( - toastId, - { - render: __('Provision completed, let\'s set your first run'), - type: 'success', - isLoading: false - } - ); - setTimeout(() => { - location.href = initial_page - }, 3000); - } - }, 3 * 1000); - } else { - setIsCreating(false); - toast.error( - message || __('Error creating site.', 'app'), - { - autoClose: 3000, - } - ) - } - }; - - return ( -
-
-
- - -
-
- - -
-
- https://{spaceName ?? 'mysite'}.mody.cloud -
- - {__('This will be the URL where you\'ll use to access your Space')} - -
-
-
- -
-
- ) -} -export default CreateSiteForm; \ No newline at end of file + const [ companyName, setCompanyName ] = useState( '' ); + const [ spaceName, setSpaceName ] = useState( '' ); + const [ isCreating, setIsCreating ] = useState( false ); + const [ loadingMessage, setLoadingMessage ] = useState( + 'We are creating your space, please wait...' + ); + const [ counter, setCounter ] = useState( 0 ); + + const maskSpaceNameInput = ( event ) => { + setSpaceName( toKebabCase( event.target.value ).substring( 0, 24 ) ); + }; + + const handleCompanyName = ( event ) => { + setCompanyName( event.target.value ); + }; + const handleSpaceName = ( event ) => setSpaceName( event.target.value ); + + const messages = [ + __( 'Chopping some bananas…', 'app' ), + __( 'Grabbing oranges from the tree…', 'app' ), + __( 'Measuring a cup of flour…', 'app' ), + __( 'Making sure everything is correct…', 'app' ), + __( 'Were not we doing a cake?…', 'app' ), + __( "Huh! It's been a long time…", 'app' ), + __( 'I got somewhere to be man…', 'app' ), + __( "Oh! You're still here? Man what am I doing…", 'app' ), + ]; + + const checkInstallFinished = async ( queue_ui ) => { + const data = new URLSearchParams( { + action: 'check_setup_finished', + queue_id: queue_ui, + } ); + + try { + const response = await fetch( App.ajax_url, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: data.toString(), + } ); + if ( ! response.ok ) { + return false; + } + return await response.json(); + } catch ( error ) { + return false; + } + }; + + const handleSubmit = async ( e ) => { + e.preventDefault(); + if ( isCreating ) { + return; + } + setIsCreating( true ); + + const siteData = { + company_name: companyName, + space_name: spaceName, + action: 'create_space', + }; + + const data = new URLSearchParams( siteData ); + + const response = await fetch( App.ajax_url, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: data.toString(), + } ); + + if ( ! response.ok ) { + toast.error( __( 'Error creating site.' ), { + autoClose: 3000, + } ); + console.error( + sprintf( + __( 'Error creating site. Code: %s', 'app' ), + response.statusText + ) + ); + setIsCreating( false ); + } + + const { + success, + data: { initial_page, message, queue_id }, + } = await response.json(); + + if ( success ) { + toast.success( + message || + __( 'Site queued for creation… Please wait…', 'app' ), + { + autoClose: 3000, + } + ); + + const toastId = toast.loading( message ); + + const intervalId = setInterval( async () => { + setLoadingMessage( + messages[ Math.floor( Math.random() * 8 ) ] + ); + toast.update( toastId, { + render: loadingMessage, + type: 'info', + isLoading: true, + } ); + const { + data: { done, initial_page }, + } = await checkInstallFinished( queue_id ); + + if ( done ) { + clearInterval( intervalId ); + toast.update( toastId, { + render: __( + "Provision completed, let's set your first run" + ), + type: 'success', + isLoading: false, + } ); + setTimeout( () => { + location.href = initial_page; + }, 3000 ); + } + }, 3 * 1000 ); + } else { + setIsCreating( false ); + toast.error( message || __( 'Error creating site.', 'app' ), { + autoClose: 3000, + } ); + } + }; + + return ( +
+
+
+ + +
+
+ + +
+
+ https://{ spaceName ?? 'mysite' } + .mody.cloud +
+ + { __( + "This will be the URL where you'll use to access your Space" + ) } + +
+
+
+ +
+
+ ); +}; +export default CreateSiteForm; diff --git a/resources/scripts/site/components/CreateSiteIntro.jsx b/resources/scripts/site/components/CreateSiteIntro.jsx index 3dee3d6..fa5079d 100644 --- a/resources/scripts/site/components/CreateSiteIntro.jsx +++ b/resources/scripts/site/components/CreateSiteIntro.jsx @@ -1,18 +1,42 @@ import { __ } from '@wordpress/i18n'; const CreateSiteIntro = () => { - return ( -
-

{ __('Set up your Space in just a few steps!', 'app') }

-

{ __('Fill out the form with your company name and site URL. Once ready, we will:', 'app') }

-
    -
  1. { __('Create your site within our platform.', 'app') }
  2. -
  3. { __('Set up the theme and essential tools for you.', 'app') }
  4. -
  5. { __('Redirect you to your personalized dashboard, so you can start right away.', 'app') }
  6. -
-

{ __('Click "Create my Space" to begin your digital journey.', 'app') }

-
- ) -} + return ( +
+

+ { __( 'Set up your Space in just a few steps!', 'app' ) } +

+

+ { __( + 'Fill out the form with your company name and site URL. Once ready, we will:', + 'app' + ) } +

+
    +
  1. + { __( 'Create your site within our platform.', 'app' ) } +
  2. +
  3. + { __( + 'Set up the theme and essential tools for you.', + 'app' + ) } +
  4. +
  5. + { __( + 'Redirect you to your personalized dashboard, so you can start right away.', + 'app' + ) } +
  6. +
+

+ { __( + 'Click "Create my Space" to begin your digital journey.', + 'app' + ) } +

+
+ ); +}; -export default CreateSiteIntro; \ No newline at end of file +export default CreateSiteIntro; diff --git a/resources/scripts/tools/getcookie.js b/resources/scripts/tools/getcookie.js index f3caa49..683b607 100644 --- a/resources/scripts/tools/getcookie.js +++ b/resources/scripts/tools/getcookie.js @@ -1,10 +1,10 @@ -export default function getCookie(name) { - const cookies = document.cookie.split("; "); - for (let i = 0; i < cookies.length; i++) { - let [cookieName, cookieValue] = cookies[i].split("="); - if (cookieName === name) { - return decodeURIComponent(cookieValue); - } - } - return null; -} \ No newline at end of file +export default function getCookie( name ) { + const cookies = document.cookie.split( '; ' ); + for ( let i = 0; i < cookies.length; i++ ) { + const [ cookieName, cookieValue ] = cookies[ i ].split( '=' ); + if ( cookieName === name ) { + return decodeURIComponent( cookieValue ); + } + } + return null; +} diff --git a/resources/scripts/tools/kebabcase.js b/resources/scripts/tools/kebabcase.js index 04a2e46..747c43b 100644 --- a/resources/scripts/tools/kebabcase.js +++ b/resources/scripts/tools/kebabcase.js @@ -1,7 +1,7 @@ -export default function toKebabCase(str) { - return str - .toString() - .replace(/([a-z0-9])([A-Z])/g, '$1-$2') - .replace(/\s+/g, '-') - .toLowerCase(); +export default function toKebabCase( str ) { + return str + .toString() + .replace( /([a-z0-9])([A-Z])/g, '$1-$2' ) + .replace( /\s+/g, '-' ) + .toLowerCase(); } diff --git a/resources/scripts/tools/navigate.js b/resources/scripts/tools/navigate.js index 3c3b3c4..f4a732a 100644 --- a/resources/scripts/tools/navigate.js +++ b/resources/scripts/tools/navigate.js @@ -1,6 +1,7 @@ -export const navigate = (event) => { - event.preventDefault(); - const link = event.currentTarget.getAttribute('href'); - window.history.pushState({}, '', link); - window.dispatchEvent(new PopStateEvent('popstate')); -} \ No newline at end of file +export const navigate = ( event ) => { + event.preventDefault(); + const link = event.currentTarget.getAttribute( 'href' ); + window.history.pushState( {}, '', link ); + // eslint-disable-next-line no-undef + window.dispatchEvent( new PopStateEvent( 'popstate' ) ); +}; diff --git a/resources/scripts/tools/nl2br.js b/resources/scripts/tools/nl2br.js index b9ecc68..1372708 100644 --- a/resources/scripts/tools/nl2br.js +++ b/resources/scripts/tools/nl2br.js @@ -1,3 +1,3 @@ -export default function(string) { - return string.replace(/\n/g, '
'); -} \ No newline at end of file +export default function ( string ) { + return string.replace( /\n/g, '
' ); +} diff --git a/resources/scripts/tools/validateRecaptcha.js b/resources/scripts/tools/validateRecaptcha.js index a73e762..78fecd5 100644 --- a/resources/scripts/tools/validateRecaptcha.js +++ b/resources/scripts/tools/validateRecaptcha.js @@ -1,32 +1,27 @@ -import {toast} from "react-toastify"; -import {__} from "@wordpress/i18n"; +import { toast } from 'react-toastify'; +import { __ } from '@wordpress/i18n'; -const handleRecaptchaVerify = (event, callback, recaptchaSiteKey) => { - event.preventDefault(); +const handleRecaptchaVerify = ( event, callback, recaptchaSiteKey ) => { + event.preventDefault(); - if(!window?.grecaptcha) { - callback(null) - .then(response => console.log(response)) - } else { - window.grecaptcha.ready(() => { - window.grecaptcha - .execute(recaptchaSiteKey, {action: 'submit'}) - .then((token) => { - if (!token) { - toast.error( - __('Error signing in.', 'app'), - { - autoClose: 3000, - } - ) - return; - } + if ( ! window?.grecaptcha ) { + callback( null ).then( () => {} ); + } else { + window.grecaptcha.ready( () => { + window.grecaptcha + .execute( recaptchaSiteKey, { action: 'submit' } ) + .then( ( token ) => { + if ( ! token ) { + toast.error( __( 'Error signing in.', 'app' ), { + autoClose: 3000, + } ); + return; + } - callback(token) - .then(response => console.log(response)) - }); - }); - } + callback( token ).then( () => {} ); + } ); + } ); + } }; -export default handleRecaptchaVerify; \ No newline at end of file +export default handleRecaptchaVerify; diff --git a/resources/scss/app.scss b/resources/scss/app.scss index 70664bd..7cba6e0 100644 --- a/resources/scss/app.scss +++ b/resources/scss/app.scss @@ -1,49 +1,21 @@ -//================================================================== -// 1. HELPERS -//================================================================== -@use 'helpers/normalize'; -@use 'helpers/variables'; -@use 'helpers/media-queries'; -@use 'helpers/mixins'; -@use 'helpers/alpine'; -@use 'helpers/tostify'; -//================================================================== -// 2. LAYOUT -//================================================================== -@use 'layout/base'; -@use 'layout/container'; -@use 'layout/typography'; -@use 'layout/spacing'; -@use 'layout/borders'; - -//================================================================== -// 3. COMMON -//================================================================== -@use 'common/sidebars/static'; -@use 'common/sidebars/dynamic'; -@use 'common/main-content'; -@use 'common/topbars/static-top'; - -//================================================================== -// 4. COMPONENTS -//================================================================== -@use 'components/forms'; -@use 'components/inputs'; -@use 'components/buttons'; -@use 'components/labels'; - -//================================================================== -// 5. PAGES -//================================================================== - - -//================================================================== -// 6. BLOCKS -//================================================================== - - -//================================================================== -// 7. TEMPLATES -//================================================================== -@use 'templates/auth'; -@use 'templates/wizard'; \ No newline at end of file +@use "helpers/normalize"; +@use "helpers/variables"; +@use "helpers/media-queries"; +@use "helpers/mixins"; +@use "helpers/alpine"; +@use "helpers/tostify"; +@use "layout/base"; +@use "layout/container"; +@use "layout/typography"; +@use "layout/spacing"; +@use "layout/borders"; +@use "common/sidebars/static"; +@use "common/sidebars/dynamic"; +@use "common/main-content"; +@use "common/topbars/static-top"; +@use "components/forms"; +@use "components/inputs"; +@use "components/buttons"; +@use "components/labels"; +@use "templates/auth"; +@use "templates/wizard"; diff --git a/resources/scss/common/_main-content.scss b/resources/scss/common/_main-content.scss index 986cae6..d38a0db 100644 --- a/resources/scss/common/_main-content.scss +++ b/resources/scss/common/_main-content.scss @@ -1,21 +1,21 @@ -@use '../helpers/variables'; -@use '../helpers/media-queries'; +@use "../helpers/variables"; +@use "../helpers/media-queries"; .content { - background-color: variables.$white; - margin-top: 1.5rem; - margin-right: 1.5rem; - height: 100vh; - border-radius: calc(2 * #{variables.$border-radius-md}); + background-color: variables.$white; + margin-top: 1.5rem; + margin-right: 1.5rem; + height: 100vh; + border-radius: calc(2 * #{variables.$border-radius-md}); - @include media-queries.for-laptop-down { - margin: 1.5rem auto; - max-width: 95vw; - } + @include media-queries.for-laptop-down { + margin: 1.5rem auto; + max-width: 95vw; + } - main { - height: 100%; - overflow-y: auto; - padding: 1rem 2rem 5rem 2rem; - } -} \ No newline at end of file + main { + height: 100%; + overflow-y: auto; + padding: 1rem 2rem 5rem 2rem; + } +} diff --git a/resources/scss/common/sidebars/_dynamic.scss b/resources/scss/common/sidebars/_dynamic.scss index 240ba35..c487624 100644 --- a/resources/scss/common/sidebars/_dynamic.scss +++ b/resources/scss/common/sidebars/_dynamic.scss @@ -1,50 +1,52 @@ -@use '../../helpers/variables'; -@use '../../helpers/media-queries'; +@use "../../helpers/variables"; +@use "../../helpers/media-queries"; aside { - &.sidebar { - &.dynamic { - height: 100vh; - display: flex; - gap: 3rem; - flex-direction: column; - justify-content: start; - align-items: center; - padding: 1.5rem 1.75rem; - @include media-queries.for-laptop-down { - height: auto; - border-bottom: 1px solid var(--color-chinese-white); - position: fixed; - top: 0; - background-color: var(--color-cultured); - width: 100%; - z-index: 9999; - display: none; - } + &.sidebar { - nav { - display: flex; - flex-direction: column; - gap: .1rem; - justify-content: start; - width: 100%; + &.dynamic { + height: 100vh; + display: flex; + gap: 3rem; + flex-direction: column; + justify-content: start; + align-items: center; + padding: 1.5rem 1.75rem; - .link { - width: 100%; - padding: .3rem .5rem; - border-radius: variables.$border-radius-md; - overflow: hidden; - display: inline-block; - white-space: nowrap; - text-overflow: ellipsis; + @include media-queries.for-laptop-down { + height: auto; + border-bottom: 1px solid var(--color-chinese-white); + position: fixed; + top: 0; + background-color: var(--color-cultured); + width: 100%; + z-index: 9999; + display: none; + } - &:hover, - &.active { - background-color: variables.$accent-light; - } - } - } - } - } -} \ No newline at end of file + nav { + display: flex; + flex-direction: column; + gap: 0.1rem; + justify-content: start; + width: 100%; + + .link { + width: 100%; + padding: 0.3rem 0.5rem; + border-radius: variables.$border-radius-md; + overflow: hidden; + display: inline-block; + white-space: nowrap; + text-overflow: ellipsis; + + &:hover, + &.active { + background-color: variables.$accent-light; + } + } + } + } + } +} diff --git a/resources/scss/common/sidebars/_static.scss b/resources/scss/common/sidebars/_static.scss index 6437d23..cbd2073 100644 --- a/resources/scss/common/sidebars/_static.scss +++ b/resources/scss/common/sidebars/_static.scss @@ -1,66 +1,68 @@ -@use '../../helpers/variables'; -@use '../../helpers/media-queries'; +@use "../../helpers/variables"; +@use "../../helpers/media-queries"; aside { - &.sidebar { - &.main { - display: flex; - flex-direction: column; - justify-content: space-between; - gap: 0.75rem; - padding: 1.5rem 0.75rem 3rem; - box-sizing: border-box; - height: 100vh; - border-right: 1px solid variables.$light; - @include media-queries.for-laptop-down { - width: 100%; - height: 6.25rem; - flex-direction: row; - position: fixed; - bottom: 0; - border-top: 1px solid var(--color-chinese-white); - border-right: 0; - background-color: variables.$cultured; - z-index: 9; + &.sidebar { - .logo { - width: 3.25rem; - } - } + &.main { + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 0.75rem; + padding: 1.5rem 0.75rem 3rem; + box-sizing: border-box; + height: 100vh; + border-right: 1px solid variables.$light; - nav { - display: flex; - flex-direction: column; - align-items: center; - justify-content: start; - gap: 2rem; + @include media-queries.for-laptop-down { + width: 100%; + height: 6.25rem; + flex-direction: row; + position: fixed; + bottom: 0; + border-top: 1px solid var(--color-chinese-white); + border-right: 0; + background-color: variables.$cultured; + z-index: 9; - @include media-queries.for-laptop-down { - flex-direction: row; - } + .logo { + width: 3.25rem; + } + } - .link { - text-align: center; - padding: .5rem; - border-radius: .5rem; + nav { + display: flex; + flex-direction: column; + align-items: center; + justify-content: start; + gap: 2rem; - &:hover { - background-color: variables.$primary-lighter; - } + @include media-queries.for-laptop-down { + flex-direction: row; + } - svg { - margin-bottom:0; - } + .link { + text-align: center; + padding: 0.5rem; + border-radius: 0.5rem; - span { - font-size: .6rem; - display: block; - margin-top:-.3rem; - width: 2.625rem; - } - } - } - } - } -} \ No newline at end of file + &:hover { + background-color: variables.$primary-lighter; + } + + svg { + margin-bottom: 0; + } + + span { + font-size: 0.6rem; + display: block; + margin-top: -0.3rem; + width: 2.625rem; + } + } + } + } + } +} diff --git a/resources/scss/common/topbars/_static-top.scss b/resources/scss/common/topbars/_static-top.scss index cf46e1b..300519b 100644 --- a/resources/scss/common/topbars/_static-top.scss +++ b/resources/scss/common/topbars/_static-top.scss @@ -1,93 +1,94 @@ -@use '../../helpers/variables'; -@use '../../helpers/media-queries'; +@use "../../helpers/variables"; +@use "../../helpers/media-queries"; .header { - display: flex; - justify-content: space-between; - padding: .8rem 1.5rem .3rem 2rem; - border-bottom: 1px solid variables.$light; + display: flex; + justify-content: space-between; + padding: 0.8rem 1.5rem 0.3rem 2rem; + border-bottom: 1px solid variables.$light; - .title { - display: flex; - gap: .3rem; - align-items: center; - justify-content: center; + .title { + display: flex; + gap: 0.3rem; + align-items: center; + justify-content: center; - svg { - margin-top: -0.3125rem; - } - } + svg { + margin-top: -0.3125rem; + } + } - .user { - position: relative; - display: flex; - align-content: center; - align-items: center; - justify-content: space-between; - gap: .5rem; + .user { + position: relative; + display: flex; + align-content: center; + align-items: center; + justify-content: space-between; + gap: 0.5rem; - .photo { - width: 2.3125rem; - height: 2.3125rem; - border-radius: 50%; - } - } + .photo { + width: 2.3125rem; + height: 2.3125rem; + border-radius: 50%; + } + } - .dropdown { - position: relative; - display: inline-block; + .dropdown { + position: relative; + display: inline-block; - .dropdown-btn { - background: none; - border: none; - cursor: pointer; + .dropdown-btn { + background: none; + border: none; + cursor: pointer; - .name { - @include media-queries.for-laptop-down { - display: none; - } - } + .name { - .role { - font-size: .7rem; - text-transform: capitalize; - display: block; - } + @include media-queries.for-laptop-down { + display: none; + } + } - .arrow { - margin-left: 5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid #005f6b; - display: inline-block; - vertical-align: middle; - } - } + .role { + font-size: 0.7rem; + text-transform: capitalize; + display: block; + } - .dropdown-content { - display: none; - position: absolute; - background-color: #fff; - min-width: 10rem; - box-shadow: 0 .5rem 1rem rgba(variables.$primary, 0.2); - z-index: 1; - border-radius: 5px; - padding: 5px 0; - right: 0; + .arrow { + margin-left: 5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #005f6b; + display: inline-block; + vertical-align: middle; + } + } - a { - padding: 0.625rem 0.9375rem; - text-decoration: none; - display: block; + .dropdown-content { + display: none; + position: absolute; + background-color: #fff; + min-width: 10rem; + box-shadow: 0 0.5rem 1rem rgba(variables.$primary, 0.2); + z-index: 1; + border-radius: 5px; + padding: 5px 0; + right: 0; - &:hover { - background-color: variables.$background; - } - } - } + a { + padding: 0.625rem 0.9375rem; + text-decoration: none; + display: block; - &:hover .dropdown-content { - display: block; - } - } -} \ No newline at end of file + &:hover { + background-color: variables.$background; + } + } + } + + &:hover .dropdown-content { + display: block; + } + } +} diff --git a/resources/scss/components/_buttons.scss b/resources/scss/components/_buttons.scss index 4885ebe..6f66512 100644 --- a/resources/scss/components/_buttons.scss +++ b/resources/scss/components/_buttons.scss @@ -6,103 +6,110 @@ // BUTTONS //================================================================== @mixin button { - position: relative; - display: inline-flex; - align-items: center; - justify-content: center; - font-size: 1rem; - color: variables.$white; - line-height: 1.5rem; - padding: 0.5rem 1.25rem; - background-color: variables.$primary; - border-radius: variables.$border-radius-sm; - transition: background-color .3s ease; - cursor: pointer; - text-align: center; - - @each $size_key, $size in variables.$text-sizes { - &.btn-#{$size_key} { - @include mixins.text-size($size); - padding: calc(#{$size} * .4rem); - } - } - - @each $color_key, $color in variables.$color_list { - &.btn-#{'' + $color_key} { - background-color: $color; - - &[disabled], - &:hover, - &:focus { - background-color: color.adjust($color, $lightness: 5%); - } - } - - &.btn-text-#{'' + $color_key} { - color: #{$color}; - } - } - - &.btn-outline { - background-color: transparent; - color: variables.$primary; - border-color: variables.$primary; - - @each $color_key, $color in variables.$color_list { - &.btn-#{'' + $color_key} { - border-color: $color; - color: $color; - } - } - - &.green { - border-color: variables.$secondary; - } - } - - &.btn-wide { - width: 100%; - } - - &:hover, &:focus, &[disabled] { - //background-color: color.adjust(variables.$primary, $lightness: 10%); - } - - > svg { - fill: variables.$white; - margin-right: .2rem; - } + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 1rem; + color: variables.$white; + line-height: 1.5; + padding: 0.5rem 1.25rem; + background-color: variables.$primary; + border-radius: variables.$border-radius-sm; + transition: background-color 0.3s ease; + cursor: pointer; + text-align: center; + + @each $size_key, $size in variables.$text-sizes { + &.btn-#{$size_key} { + + @include mixins.text-size($size); + padding: calc(#{$size} * 0.4rem); + } + } + + @each $color_key, $color in variables.$color_list { + &.btn-#{'' + $color_key} { + background-color: $color; + + &[disabled], + &:hover, + &:focus { + background-color: color.adjust($color, $lightness: 5%); + } + } + + &.btn-text-#{'' + $color_key} { + color: #{$color}; + } + } + + &.btn-outline { + background-color: transparent; + color: variables.$primary; + border-color: variables.$primary; + + @each $color_key, $color in variables.$color_list { + &.btn-#{'' + $color_key} { + border-color: $color; + color: $color; + } + } + + &.green { + border-color: variables.$secondary; + } + } + + &.btn-wide { + width: 100%; + } + + &:hover, + &:focus, + &[disabled] { + //background-color: color.adjust(variables.$primary, $lightness: 10%); + } + + > svg { + fill: variables.$white; + margin-right: 0.2rem; + } } -button, .btn { - @include button; + +.btn { + + @include button; } .dropdown { - .button, .btn { - display: grid; - grid-template-columns: 2fr .5fr; - padding-right: 0; - } - - .dropdown-menu { - position: absolute; - z-index: 9; - background-color: var(--color-white); - width: 20%; - margin: 0 .5rem 0; - - li { - list-style: none; - cursor: pointer; - - &:hover { - background-color: var(--color-primary-light); - color: var(--color-white); - } - - &:before { - content: ''; - } - } - } + + .button, + .btn { + display: grid; + grid-template-columns: 2fr 0.5fr; + padding-right: 0; + } + + .dropdown-menu { + position: absolute; + z-index: 9; + background-color: var(--color-white); + width: 20%; + margin: 0 0.5rem 0; + + li { + list-style: none; + cursor: pointer; + + &:hover { + background-color: var(--color-primary-light); + color: var(--color-white); + } + + &::before { + content: ""; + } + } + } } diff --git a/resources/scss/components/_footer.scss b/resources/scss/components/_footer.scss index 3fcfd50..06bdfae 100644 --- a/resources/scss/components/_footer.scss +++ b/resources/scss/components/_footer.scss @@ -1,4 +1,2 @@ @use "../helpers/media-queries"; @use "../helpers/variables"; - -.footer {} diff --git a/resources/scss/components/_forms.scss b/resources/scss/components/_forms.scss index 88c72ee..bdd8423 100644 --- a/resources/scss/components/_forms.scss +++ b/resources/scss/components/_forms.scss @@ -1,23 +1,24 @@ -@use '../helpers/variables'; +@use "../helpers/variables"; .form-group { - padding: .25rem; - box-sizing: border-box; - margin: .5rem 0; - position: relative; + padding: 0.25rem; + box-sizing: border-box; + margin: 0.5rem 0; + position: relative; - .toggle-password { - position: absolute; - top: 45%; - right: 1rem; - cursor: pointer; - color: variables.$light; - width: 1.875rem; - height: 1.875rem; - overflow: hidden; + .toggle-password { + position: absolute; + top: 45%; + right: 1rem; + cursor: pointer; + color: variables.$light; + width: 1.875rem; + height: 1.875rem; + overflow: hidden; + background: none; - svg { - fill: variables.$text-light; - } - } + svg { + fill: variables.$text-light; + } + } } diff --git a/resources/scss/components/_inputs.scss b/resources/scss/components/_inputs.scss index 7fc0887..54a66b2 100644 --- a/resources/scss/components/_inputs.scss +++ b/resources/scss/components/_inputs.scss @@ -1,30 +1,31 @@ -@use '../helpers/variables'; +@use "../helpers/variables"; input, textarea, select { - &:not([type=checkbox], [type=radio], [type=file]) { - width: 100%; - background-color: variables.$white; - border: 1px solid variables.$light; - padding: .3rem; - border-radius: variables.$border-radius-sm; - color: variables.$text-light; - } - &.input-lg { - padding: .5rem; - } + &:not([type="checkbox"], [type="radio"], [type="file"]) { + width: 100%; + background-color: variables.$white; + border: 1px solid variables.$light; + padding: 0.3rem; + border-radius: variables.$border-radius-sm; + color: variables.$text-light; + } - &:focus { - box-shadow: 0 0 .3rem .3rem variables.$primary-light; - } + &.input-lg { + padding: 0.5rem; + } - &[disabled] { - background-color: variables.$background; - } + &:focus { + box-shadow: 0 0 0.3rem 0.3rem variables.$primary-light; + } - &.no-resize { - resize: none; - } -} \ No newline at end of file + &[disabled] { + background-color: variables.$background; + } + + &.no-resize { + resize: none; + } +} diff --git a/resources/scss/components/_labels.scss b/resources/scss/components/_labels.scss index 03d8c44..5613aa7 100644 --- a/resources/scss/components/_labels.scss +++ b/resources/scss/components/_labels.scss @@ -1,5 +1,5 @@ -@use '../helpers/variables'; +@use "../helpers/variables"; label { - color: variables.$text-light; -} \ No newline at end of file + color: variables.$text-light; +} diff --git a/resources/scss/editor.scss b/resources/scss/editor.scss index e69de29..ecaad41 100644 --- a/resources/scss/editor.scss +++ b/resources/scss/editor.scss @@ -0,0 +1,3 @@ +body { + background-color: var(--color-white); +} diff --git a/resources/scss/helpers/_alpine.scss b/resources/scss/helpers/_alpine.scss index 7428900..adefb06 100644 --- a/resources/scss/helpers/_alpine.scss +++ b/resources/scss/helpers/_alpine.scss @@ -1 +1,3 @@ -[x-cloak] { display: none !important; } \ No newline at end of file +[x-cloak] { + display: none !important; +} diff --git a/resources/scss/helpers/_colors.scss b/resources/scss/helpers/_colors.scss index f447831..93148c5 100644 --- a/resources/scss/helpers/_colors.scss +++ b/resources/scss/helpers/_colors.scss @@ -1,13 +1,16 @@ -@use 'variables'; -@use 'mixins'; +@use "variables"; +@use "mixins"; + @each $color, $color_value in variables.$loading_color_list { - @each $size, $size_value in variables.$loading_icon_sizes { - .loading-icon-#{$color}-#{$size} { - width: $size_value; - height: $size_value; - background: url('images/loading-icon-#{$color}.png') no-repeat center; - background-size: contain; - @include mixins.spin(); - } - } -} \ No newline at end of file + + @each $size, $size_value in variables.$loading_icon_sizes { + .loading-icon-#{$color}-#{$size} { + width: $size_value; + height: $size_value; + background: url("images/loading-icon-#{$color}.png") no-repeat center; + background-size: contain; + + @include mixins.spin(); + } + } +} diff --git a/resources/scss/helpers/_fonts.scss b/resources/scss/helpers/_fonts.scss index e69de29..609d322 100644 --- a/resources/scss/helpers/_fonts.scss +++ b/resources/scss/helpers/_fonts.scss @@ -0,0 +1,3 @@ +body { + font-family: inherit; +} diff --git a/resources/scss/helpers/_media-queries.scss b/resources/scss/helpers/_media-queries.scss index 6cb1298..cdbd607 100644 --- a/resources/scss/helpers/_media-queries.scss +++ b/resources/scss/helpers/_media-queries.scss @@ -4,22 +4,96 @@ // MEDIA QUERY MIXINS //================================================================== //==== MIN WIDTHS ================================================== -@mixin for-phone-up { @media (min-width: variables.$phone-breakpoint) { @content; } } -@mixin for-tablet-up { @media (min-width: variables.$tablet-breakpoint) { @content; } } -@mixin for-laptop-up { @media (min-width: variables.$laptop-breakpoint) { @content; } } -@mixin for-desktop-up { @media (min-width: variables.$desktop-breakpoint) { @content; } } -@mixin for-custom-up($screen-width) { @media (min-width: $screen-width) { @content; } } +@mixin for-phone-up { + + @media (min-width: variables.$phone-breakpoint) { + @content; + } +} + +@mixin for-tablet-up { + + @media (min-width: variables.$tablet-breakpoint) { + @content; + } +} + +@mixin for-laptop-up { + + @media (min-width: variables.$laptop-breakpoint) { + @content; + } +} + +@mixin for-desktop-up { + + @media (min-width: variables.$desktop-breakpoint) { + @content; + } +} + +@mixin for-custom-up($screen-width) { + + @media (min-width: $screen-width) { + @content; + } +} //==== MAX WIDTHS ================================================== -@mixin for-phone-down { @media (max-width: variables.$phone-breakpoint - 0.0625rem) { @content; } } -@mixin for-tablet-down { @media (max-width: variables.$tablet-breakpoint - 0.0625rem) { @content; } } -@mixin for-laptop-down { @media (max-width: variables.$laptop-breakpoint - 0.0625rem) { @content; } } -@mixin for-desktop-down { @media (max-width: variables.$desktop-breakpoint - 0.0625rem) { @content; } } -@mixin for-custom-down($screen-width) { @media (max-width: $screen-width - 0.0625rem) { @content; } } +@mixin for-phone-down { + + @media (max-width: variables.$phone-breakpoint - 0.0625rem) { + @content; + } +} + +@mixin for-tablet-down { + + @media (max-width: variables.$tablet-breakpoint - 0.0625rem) { + @content; + } +} + +@mixin for-laptop-down { + + @media (max-width: variables.$laptop-breakpoint - 0.0625rem) { + @content; + } +} + +@mixin for-desktop-down { + + @media (max-width: variables.$desktop-breakpoint - 0.0625rem) { + @content; + } +} + +@mixin for-custom-down($screen-width) { + + @media (max-width: $screen-width - 0.0625rem) { + @content; + } +} //==== BROWSER SPECIFIC ============================================= -@mixin for-ie11 { @media (-ms-high-contrast: none), (-ms-high-contrast: active) { @content; } } -@mixin for-ms-edge { @supports (-ms-ime-align:auto) { @content; } } +@mixin for-ie11 { + + @media (-ms-high-contrast: none), (-ms-high-contrast: active) { + @content; + } +} + +@mixin for-ms-edge { + + @supports (-ms-ime-align:auto) { + @content; + } +} //==== SPECIAL CASES ================================================= -@mixin for-laptop-up-with-hover { @media (min-width: variables.$laptop-breakpoint) and (hover: hover), (-ms-high-contrast: none), (-ms-high-contrast: active) { @content; } } \ No newline at end of file +@mixin for-laptop-up-with-hover { + + @media (min-width: variables.$laptop-breakpoint) and (hover: hover), (-ms-high-contrast: none), (-ms-high-contrast: active) { + @content; + } +} diff --git a/resources/scss/helpers/_mixins.scss b/resources/scss/helpers/_mixins.scss index c6d3ee7..7b8b479 100644 --- a/resources/scss/helpers/_mixins.scss +++ b/resources/scss/helpers/_mixins.scss @@ -1,226 +1,291 @@ @use "sass:map"; -@use '../helpers/variables'; -@use '../helpers/media-queries'; +@use "../helpers/variables"; +@use "../helpers/media-queries"; //================================================================= // MIXINS //================================================================= //================================================================= + /* UTILITY MIXINS //================================================================= /* ---- invisible ---- */ @mixin invisible { - position: absolute; - opacity: 0; - line-height: 0; - height: 0; - width: 0; - overflow: hidden; + position: absolute; + opacity: 0; + line-height: 0; + height: 0; + width: 0; + overflow: hidden; } /* ---- bg-image ---- */ @mixin bg-image { - background-size: cover; - background-position: center; - background-repeat: no-repeat; + background-size: cover; + background-position: center; + background-repeat: no-repeat; } /* normalize lists */ @mixin list-reset { - list-style: none; - padding-left: 0; - margin-bottom: 0; - li { - padding-left: 0; - padding-bottom: 0; - margin-bottom: 0; - line-height: 1; - &::before { - display: none; - } - a { - border: 0; - } - a:not(.btn) { - border: 0; - } - } + list-style: none; + padding-left: 0; + margin-bottom: 0; + + li { + padding-left: 0; + padding-bottom: 0; + margin-bottom: 0; + line-height: 1; + + &::before { + display: none; + } + + a { + border: 0; + } + + a:not(.btn) { + border: 0; + } + } } /* ---- get values function ---- */ @function map-get-values($map, $keys...) { - @each $key in $keys { - $map: map.get($map, $key); - } - @return $map; + + @each $key in $keys { + $map: map.get($map, $key); + } + + @return $map; } @mixin set-container($width: variables.$container-width, $padding: variables.$container-padding) { - max-width: calc(#{$width} + (#{$padding} * 2)); - padding-left: $padding; - padding-right: $padding; + max-width: calc(#{$width} + (#{$padding} * 2)); + padding-left: $padding; + padding-right: $padding; } @mixin generate-spacing-classes($type, $name) { - @each $key, $value in variables.$spacing-values { - .#{$name}t-#{$key} { #{$type}-top: $value; } - .#{$name}r-#{$key} { #{$type}-right: $value; } - .#{$name}b-#{$key} { #{$type}-bottom: $value; } - .#{$name}l-#{$key} { #{$type}-left: $value; } - .#{$name}x-#{$key} { #{$type}-left: $value; #{$type}-right: $value; } - .#{$name}y-#{$key} { #{$type}-top: $value; #{$type}-bottom: $value; } - - .#{$name}-#{$key} { #{$type}: $value; } - } + @each $key, $value in variables.$spacing-values { + .#{$name}t-#{$key} { + #{$type}-top: $value; + } + .#{$name}r-#{$key} { + #{$type}-right: $value; + } + .#{$name}b-#{$key} { + #{$type}-bottom: $value; + } + .#{$name}l-#{$key} { + #{$type}-left: $value; + } + + .#{$name}x-#{$key} { + #{$type}-left: $value; + #{$type}-right: $value; + } + .#{$name}y-#{$key} { + #{$type}-top: $value; + #{$type}-bottom: $value; + } + + .#{$name}-#{$key} { + #{$type}: $value; + } + } } @mixin generate-flex-classes { - @each $direction in variables.$flex-directions { - .flex-#{$direction} { flex-direction: #{$direction}; } - } - - @each $value in variables.$justify-values { - .justify-#{$value} { justify-content: #{$value}; } - } - - // Alinear items - @each $value in variables.$align-values { - .items-#{$value} { align-items: #{$value}; } - .content-#{$value} { align-content: #{$value}; } - } - - // Alinear self - @each $value in variables.$align-values { - .self-#{$value} { align-self: #{$value}; } - } + + @each $direction in variables.$flex-directions { + .flex-#{$direction} { + flex-direction: #{$direction}; + } + } + + @each $value in variables.$justify-values { + .justify-#{$value} { + justify-content: #{$value}; + } + } + + // Alinear items + @each $value in variables.$align-values { + .items-#{$value} { + align-items: #{$value}; + } + .content-#{$value} { + align-content: #{$value}; + } + } + + // Alinear self + @each $value in variables.$align-values { + .self-#{$value} { + align-self: #{$value}; + } + } } @mixin generate-grid-classes { - @each $key, $value in variables.$grid-template-values { - .grid-cols-#{$key} { grid-template-columns: #{$value}; } - } - - @each $key, $value in variables.$grid-template-values { - .grid-rows-#{$key} { grid-template-rows: #{$value}; } - } - - @each $key, $value in variables.$grid-columns-custom { - .grid-cols-#{$key} { - grid-template-columns: #{$value}; - @include media-queries.for-laptop-down { - grid-template-columns: repeat(2, 1fr); - } - @include media-queries.for-tablet-down { - grid-template-columns: 1fr; - } - } - } - - @each $key, $value in variables.$gap-values { - .gap-#{$key} { gap: $value; } - .gap-x-#{$key} { column-gap: $value; } - .gap-y-#{$key} { row-gap: $value; } - } - - @each $value in variables.$justify-values { - .justify-#{$value} { justify-content: #{$value}; } - } - - @each $value in variables.$align-values { - .items-#{$value} { align-items: #{$value}; } - } + + @each $key, $value in variables.$grid-template-values { + .grid-cols-#{$key} { + grid-template-columns: #{$value}; + } + } + + @each $key, $value in variables.$grid-template-values { + .grid-rows-#{$key} { + grid-template-rows: #{$value}; + } + } + + @each $key, $value in variables.$grid-columns-custom { + .grid-cols-#{$key} { + grid-template-columns: #{$value}; + + @include media-queries.for-laptop-down { + grid-template-columns: repeat(2, 1fr); + } + + @include media-queries.for-tablet-down { + grid-template-columns: 1fr; + } + } + } + + @each $key, $value in variables.$gap-values { + .gap-#{$key} { + gap: $value; + } + .gap-x-#{$key} { + column-gap: $value; + } + .gap-y-#{$key} { + row-gap: $value; + } + } + + @each $value in variables.$justify-values { + .justify-#{$value} { + justify-content: #{$value}; + } + } + + @each $value in variables.$align-values { + .items-#{$value} { + align-items: #{$value}; + } + } } @mixin generate-flex-grid-utilities { - .flex { display: flex; } - .grid { display: grid; } + .flex { + display: flex; + } - @each $key, $value in variables.$gap-values { - .gap-#{$key} { gap: $value; } - } + .grid { + display: grid; + } - @include generate-flex-classes; - @include generate-grid-classes; + @each $key, $value in variables.$gap-values { + .gap-#{$key} { + gap: $value; + } + } + + @include generate-flex-classes; + @include generate-grid-classes; } @mixin grid-columns($col1, $col2) { - display: grid; - grid-template-columns: $col1 $col2; - gap: 1rem; + display: grid; + grid-template-columns: $col1 $col2; + gap: 1rem; } @mixin border-radius($radius) { - &.rounded { - border-radius: $radius; - } - - &.rounded-top { - border-top-left-radius: $radius; - border-top-right-radius: $radius; - } - &.rounded-top-left { - border-top-left-radius: $radius; - } - &.rounded-top-right { - border-top-right-radius: $radius; - } - - &.rounded-bottom { - border-bottom-left-radius: $radius; - border-bottom-right-radius: $radius; - } - &.rounded-bottom-left { - border-bottom-left-radius: $radius; - } - &.rounded-bottom-right { - border-bottom-right-radius: $radius; - } - - &.rounded-left { - border-top-left-radius: $radius; - border-bottom-left-radius: $radius; - } - - &.rounded-right { - border-top-right-radius: $radius; - border-bottom-right-radius: $radius; - } + + &.rounded { + border-radius: $radius; + } + + &.rounded-top { + border-top-left-radius: $radius; + border-top-right-radius: $radius; + } + + &.rounded-top-left { + border-top-left-radius: $radius; + } + + &.rounded-top-right { + border-top-right-radius: $radius; + } + + &.rounded-bottom { + border-bottom-left-radius: $radius; + border-bottom-right-radius: $radius; + } + + &.rounded-bottom-left { + border-bottom-left-radius: $radius; + } + + &.rounded-bottom-right { + border-bottom-right-radius: $radius; + } + + &.rounded-left { + border-top-left-radius: $radius; + border-bottom-left-radius: $radius; + } + + &.rounded-right { + border-top-right-radius: $radius; + border-bottom-right-radius: $radius; + } } @mixin animate-display($duration: 0.5s, $easing: ease-in-out) { - opacity: 0; - transition: opacity $duration $easing; - - &.is-visible { - display: block; - opacity: 1; - } - - &.is-hidden { - display: none; - opacity: 0; - } + opacity: 0; + transition: opacity $duration $easing; + + &.is-visible { + display: block; + opacity: 1; + } + + &.is-hidden { + display: none; + opacity: 0; + } } @mixin spin { - animation: spin 1s linear infinite; + animation: spin 1s linear infinite; } @keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } + + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } } @mixin text-size($size) { - font-size: $size; - line-height: $size * 1.4; + font-size: $size; + line-height: $size * 1.4; } - diff --git a/resources/scss/helpers/_normalize.scss b/resources/scss/helpers/_normalize.scss index 298a4c0..63e8e7c 100644 --- a/resources/scss/helpers/_normalize.scss +++ b/resources/scss/helpers/_normalize.scss @@ -1,351 +1,180 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ - -/* Document - ========================================================================== */ - -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ - html { - font-size: 16px; - line-height: 1.35; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ + font-size: 16px; + line-height: 1.35; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ } -/* Sections - ========================================================================== */ - -/** - * Remove the margin in all browsers. - */ - body { - margin: 0; + margin: 0; } -/** - * Render the `main` element consistently in IE. - */ - main { - display: block; + display: block; } -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ - h1 { - font-size: 2em; - margin: 0.67em 0; + font-size: 2em; + margin: 0.67em 0; } -/* Grouping content - ========================================================================== */ - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ - hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ } -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ + font-family: monospace; /* 1 */ + font-size: 1em; /* 2 */ } -/* Text-level semantics - ========================================================================== */ - -/** - * Remove the gray background on active links in IE 10. - */ - a { - background-color: transparent; + background-color: transparent; } -/** - * 1. Remove the bottom border in Chrome 57- - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ - abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ + border-bottom: none; /* 1 */ + text-decoration: underline dotted; /* 2 */ } -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - b, strong { - font-weight: bolder; + font-weight: bolder; } -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - code, kbd, samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ + font-family: monospace; /* 1 */ + font-size: 1em; /* 2 */ } -/** - * Add the correct font size in all browsers. - */ - small { - font-size: 80%; + font-size: 80%; } -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; } sub { - bottom: -0.25em; + bottom: -0.25em; } sup { - top: -0.5em; + top: -0.5em; } -/* Embedded content - ========================================================================== */ - -/** - * Remove the border on images inside links in IE 10. - */ - img { - border-style: none; + border-style: none; } -/* Forms - ========================================================================== */ - -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ - button, input, optgroup, select, textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ } -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - button, input { /* 1 */ - overflow: visible; + overflow: visible; } -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ - button, select { /* 1 */ - text-transform: none; + text-transform: none; } -/** - * Correct the inability to style clickable types in iOS and Safari. - */ - button, [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; + -webkit-appearance: button; } -/** - * Remove the inner border and padding in Firefox. - */ - button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; + border-style: none; + padding: 0; } -/** - * Restore the focus styles unset by the previous rule. - */ - button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { - outline: 1px dotted ButtonText; + outline: 1px dotted ButtonText; } -/** - * Correct the padding in Firefox. - */ - fieldset { - padding: 0.35em 0.75em 0.625em; + padding: 0.35em 0.75em 0.625em; } -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ - legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ } -/** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - progress { - vertical-align: baseline; + vertical-align: baseline; } -/** - * Remove the default vertical scrollbar in IE 10+. - */ - textarea { - overflow: auto; + overflow: auto; } -/** - * 1. Add the correct box sizing in IE 10. - * 2. Remove the padding in IE 10. - */ - [type="checkbox"], [type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ } -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ - [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; + height: auto; } -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ - [type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ } -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ - [type="search"]::-webkit-search-decoration { - -webkit-appearance: none; + -webkit-appearance: none; } -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ - ::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ } -/* Interactive - ========================================================================== */ - -/* - * Add the correct display in Edge, IE 10+, and Firefox. - */ - details { - display: block; + display: block; } -/* - * Add the correct display in all browsers. - */ - summary { - display: list-item; + display: list-item; } -/* Misc - ========================================================================== */ - -/** - * Add the correct display in IE 10+. - */ - template { - display: none; + display: none; } -/** - * Add the correct display in IE 10. - */ - [hidden], .d-none { - display: none !important; -} \ No newline at end of file + display: none !important; +} diff --git a/resources/scss/helpers/_tostify.scss b/resources/scss/helpers/_tostify.scss index 0cfaae2..ddf803d 100644 --- a/resources/scss/helpers/_tostify.scss +++ b/resources/scss/helpers/_tostify.scss @@ -1,56 +1,59 @@ -@use 'variables'; +@use "variables"; + :root { - --toastify-color-light: #{variables.$text}; - --toastify-color-dark: #{variables.$text}; - --toastify-color-info: #{variables.$info}; - --toastify-color-success: #{variables.$success}; - --toastify-color-warning: #{variables.$warning}; - --toastify-color-error: #{variables.$danger}; - --toastify-color-transparent: rgba(255, 255, 255, 0.7); - - --toastify-icon-color-info: var(--toastify-color-info); - --toastify-icon-color-success: var(--toastify-color-success); - --toastify-icon-color-warning: var(--toastify-color-warning); - --toastify-icon-color-error: var(--toastify-color-error); - - --toastify-container-width: fit-content; - --toastify-toast-width: 320px; - --toastify-toast-offset: 16px; - --toastify-toast-top: max(var(--toastify-toast-offset), env(safe-area-inset-top)); - --toastify-toast-right: max(var(--toastify-toast-offset), env(safe-area-inset-right)); - --toastify-toast-left: max(var(--toastify-toast-offset), env(safe-area-inset-left)); - --toastify-toast-bottom: max(var(--toastify-toast-offset), env(safe-area-inset-bottom)); - --toastify-toast-background: #{variables.$text}; - --toastify-toast-padding: 14px; - --toastify-toast-min-height: 64px; - --toastify-toast-max-height: 800px; - --toastify-toast-bd-radius: #{variables.$border-radius-md}; - --toastify-toast-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1); - --toastify-font-family: #{variables.$body-font}; - --toastify-z-index: 9999; - --toastify-text-color-light: #{variables.$text-inverse}; - --toastify-text-color-dark: #{variables.$text-inverse}; - - /* Used only for colored theme */ - --toastify-text-color-info: #{variables.$info-dark}; - --toastify-text-color-success: #{variables.$success-dark}; - --toastify-text-color-warning: #{variables.$warning-dark}; - --toastify-text-color-error: #{variables.$danger-dark}; - - --toastify-spinner-color: #{variables.$text-inverse}; - --toastify-spinner-color-empty-area: #{variables.$text}; - --toastify-color-progress-light: linear-gradient(to right, #{variables.$success}, #{variables.$info-light}, #{variables.$info}, #{variables.$info-dark}, #{variables.$accent}, #{variables.$accent-dark}); - --toastify-color-progress-dark: #{variables.$accent}; - --toastify-color-progress-info: var(--toastify-color-info); - --toastify-color-progress-success: var(--toastify-color-success); - --toastify-color-progress-warning: var(--toastify-color-warning); - --toastify-color-progress-error: var(--toastify-color-error); - /* used to control the opacity of the progress trail */ - --toastify-color-progress-bgo: 0.2; + --toastify-color-light: #{variables.$text}; + --toastify-color-dark: #{variables.$text}; + --toastify-color-info: #{variables.$info}; + --toastify-color-success: #{variables.$success}; + --toastify-color-warning: #{variables.$warning}; + --toastify-color-error: #{variables.$danger}; + --toastify-color-transparent: rgba(255, 255, 255, 0.7); + + --toastify-icon-color-info: var(--toastify-color-info); + --toastify-icon-color-success: var(--toastify-color-success); + --toastify-icon-color-warning: var(--toastify-color-warning); + --toastify-icon-color-error: var(--toastify-color-error); + + --toastify-container-width: fit-content; + --toastify-toast-width: 320px; + --toastify-toast-offset: 16px; + --toastify-toast-top: max(var(--toastify-toast-offset), env(safe-area-inset-top)); + --toastify-toast-right: max(var(--toastify-toast-offset), env(safe-area-inset-right)); + --toastify-toast-left: max(var(--toastify-toast-offset), env(safe-area-inset-left)); + --toastify-toast-bottom: max(var(--toastify-toast-offset), env(safe-area-inset-bottom)); + --toastify-toast-background: #{variables.$text}; + --toastify-toast-padding: 14px; + --toastify-toast-min-height: 64px; + --toastify-toast-max-height: 800px; + --toastify-toast-bd-radius: #{variables.$border-radius-md}; + --toastify-toast-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + --toastify-font-family: #{variables.$body-font}; + --toastify-z-index: 9999; + --toastify-text-color-light: #{variables.$text-inverse}; + --toastify-text-color-dark: #{variables.$text-inverse}; + + /* Used only for colored theme */ + --toastify-text-color-info: #{variables.$info-dark}; + --toastify-text-color-success: #{variables.$success-dark}; + --toastify-text-color-warning: #{variables.$warning-dark}; + --toastify-text-color-error: #{variables.$danger-dark}; + + --toastify-spinner-color: #{variables.$text-inverse}; + --toastify-spinner-color-empty-area: #{variables.$text}; + --toastify-color-progress-light: linear-gradient(to right, #{variables.$success}, #{variables.$info-light}, #{variables.$info}, #{variables.$info-dark}, #{variables.$accent}, #{variables.$accent-dark}); + --toastify-color-progress-dark: #{variables.$accent}; + --toastify-color-progress-info: var(--toastify-color-info); + --toastify-color-progress-success: var(--toastify-color-success); + --toastify-color-progress-warning: var(--toastify-color-warning); + --toastify-color-progress-error: var(--toastify-color-error); + + /* used to control the opacity of the progress trail */ + --toastify-color-progress-bgo: 0.2; } .Toastify__close-button { - &--light { - color: variables.$white; - } -} \ No newline at end of file + + &--light { + color: variables.$white; + } +} diff --git a/resources/scss/helpers/_variables.scss b/resources/scss/helpers/_variables.scss index 974b419..d5370ab 100644 --- a/resources/scss/helpers/_variables.scss +++ b/resources/scss/helpers/_variables.scss @@ -11,12 +11,12 @@ $secondary: #7a4f94; $secondary-light: #a97bb8; $secondary-dark: #512e64; -$text: #333333; -$text-light: #666666; -$text-inverse: #ffffff; +$text: #333; +$text-light: #666; +$text-inverse: #fff; $cultured: #f5f5f5; -$cultured-light: #ffffff; +$cultured-light: #fff; $cultured-dark: #e0e0e0; $background: $cultured; @@ -48,16 +48,16 @@ $warning-dark: #b5881a; $lighter: #f5f5f5; $light: #e0e0e0; -$white: #FFFFFF; -$black: #000000; +$white: #fff; +$black: #000; $grey-10: #e6e6e6; -$grey-20: #cccccc; +$grey-20: #ccc; $grey-30: #b3b3b3; -$grey-40: #999999; +$grey-40: #999; $grey-50: #808080; -$grey-60: #666666; +$grey-60: #666; $grey-70: #4d4d4d; -$grey-80: #333333; +$grey-80: #333; $grey-90: #1a1a1a; $error-color: $danger; @@ -65,45 +65,45 @@ $error-color: $danger; $body-font-color: $text; $color_list: ( - primary: $primary, - primary-light: $primary-light, - primary-dark: $primary-dark, - secondary: $secondary, - secondary-light: $secondary-light, - secondary-dark: $secondary-dark, - accent: $accent, - accent-light: $accent-light, - accent-dark: $accent-dark, - charcoal: $text, - charcoal-light: $text-light, - charcoal-inverse: $text-inverse, - cultured: $cultured, - cultured-light: $cultured-light, - cultured-dark: $cultured-dark, - chinese-white: $background-dark, - success: $success, - success-light: $success-light, - success-dark: $success-dark, - danger: $danger, - danger-light: $danger-light, - danger-dark: $danger-dark, - info: $info, - info-light: $info-light, - info-dark: $info-dark, - warning: $warning, - warning-light: $warning-light, - warning-dark: $warning-dark, - white: $white, - black: $black, - grey-10: $grey-10, - grey-20: $grey-20, - grey-30: $grey-30, - grey-40: $grey-40, - grey-50: $grey-50, - grey-60: $grey-60, - grey-70: $grey-70, - grey-80: $grey-80, - grey-90: $grey-90, + primary: $primary, + primary-light: $primary-light, + primary-dark: $primary-dark, + secondary: $secondary, + secondary-light: $secondary-light, + secondary-dark: $secondary-dark, + accent: $accent, + accent-light: $accent-light, + accent-dark: $accent-dark, + charcoal: $text, + charcoal-light: $text-light, + charcoal-inverse: $text-inverse, + cultured: $cultured, + cultured-light: $cultured-light, + cultured-dark: $cultured-dark, + chinese-white: $background-dark, + success: $success, + success-light: $success-light, + success-dark: $success-dark, + danger: $danger, + danger-light: $danger-light, + danger-dark: $danger-dark, + info: $info, + info-light: $info-light, + info-dark: $info-dark, + warning: $warning, + warning-light: $warning-light, + warning-dark: $warning-dark, + white: $white, + black: $black, + grey-10: $grey-10, + grey-20: $grey-20, + grey-30: $grey-30, + grey-40: $grey-40, + grey-50: $grey-50, + grey-60: $grey-60, + grey-70: $grey-70, + grey-80: $grey-80, + grey-90: $grey-90, ); //================================================================== @@ -112,52 +112,52 @@ $color_list: ( $body-font: "Open Sans", sans-serif; $heading-font: "League Spartan", sans-serif; $base-font-size: 16px; -$small-font-size: .75rem; +$small-font-size: 0.75rem; $heading-config: ( - h1: ( - mobile: ( - font-size: 2.5rem, - font-weight: 600, - color: $primary, - margin: initial, - ), - desktop: () - ), - h2: ( - mobile: ( - font-size: 2rem, - color: $primary, - ), - desktop: () - ), - h3: ( - mobile: ( - font-size: 1.75rem, - color: $primary, - ), - desktop: () - ), - h4: ( - mobile: ( - font-size: 1.5rem, - color: $text, - ), - desktop: () - ), - h5: ( - mobile: ( - font-size: 1.25rem, - color: $text, - ), - desktop: () - ), - h6: ( - mobile: ( - font-size: 1rem, - color: $text, - ), - desktop: () - ) + h1: ( + mobile: ( + font-size: 2.5rem, + font-weight: 600, + color: $primary, + margin: initial, + ), + desktop: () + ), + h2: ( + mobile: ( + font-size: 2rem, + color: $primary, + ), + desktop: () + ), + h3: ( + mobile: ( + font-size: 1.75rem, + color: $primary, + ), + desktop: () + ), + h4: ( + mobile: ( + font-size: 1.5rem, + color: $text, + ), + desktop: () + ), + h5: ( + mobile: ( + font-size: 1.25rem, + color: $text, + ), + desktop: () + ), + h6: ( + mobile: ( + font-size: 1rem, + color: $text, + ), + desktop: () + ) ); //================================================================== @@ -184,19 +184,19 @@ $transition: 0.3s ease-in-out; // SPACING VARIABLES //================================================================== $spacing-values: ( - 0: 0, - 1: 0.25rem, - 2: 0.5rem, - 3: 1rem, - 4: 1.5rem, - 5: 2rem + 0: 0, + 1: 0.25rem, + 2: 0.5rem, + 3: 1rem, + 4: 1.5rem, + 5: 2rem ); //================================================================== // BORDER //================================================================== -$border-radius-xs: .25rem; -$border-radius-sm: .5rem; -$border-radius-md: .75rem; +$border-radius-xs: 0.25rem; +$border-radius-sm: 0.5rem; +$border-radius-md: 0.75rem; $border-radius-lg: 1rem; $border-circle: 50%; @@ -207,12 +207,12 @@ $flex-directions: (row, row-reverse, column, column-reverse); $justify-values: (start, end, center, space-between, space-around, space-evenly); $align-values: (start, end, center, stretch, baseline); $gap-values: ( - 0: 0, - 1: 0.25rem, - 2: 0.5rem, - 3: 1rem, - 4: 1.5rem, - 5: 2rem + 0: 0, + 1: 0.25rem, + 2: 0.5rem, + 3: 1rem, + 4: 1.5rem, + 5: 2rem ); //================================================================== @@ -220,23 +220,23 @@ $gap-values: ( //================================================================== $grid-columns: 12; $grid-template-values: ( - 1: repeat(1, 1fr), - 2: repeat(2, 1fr), - 3: repeat(3, 1fr), - 4: repeat(4, 1fr), - 5: repeat(5, 1fr) + 1: repeat(1, 1fr), + 2: repeat(2, 1fr), + 3: repeat(3, 1fr), + 4: repeat(4, 1fr), + 5: repeat(5, 1fr) ); $grid-columns-custom: ( - "1-9": "10% 90%", - "2-8": "20% 80%", - "3-7": "30% 70%", - "4-6": "40% 60%", - "5-5": "50% 50%", - "6-4": "60% 40%", - "7-3": "70% 30%", - "8-2": "80% 20%", - "9-1": "90% 10%", + "1-9": "10% 90%", + "2-8": "20% 80%", + "3-7": "30% 70%", + "4-6": "40% 60%", + "5-5": "50% 50%", + "6-4": "60% 40%", + "7-3": "70% 30%", + "8-2": "80% 20%", + "9-1": "90% 10%", ); //================================================================== @@ -245,50 +245,50 @@ $grid-columns-custom: ( $text-alignments: (left, right, center); $text-sizes: ( - "xs": 0.75rem, - "sm": 0.875rem, - "md": 1rem, - "lg": 1.25rem, - "xl": 1.5rem, - "2xl": 2rem, - "3xl": 2.5rem, - "4xl": 3rem, - "5xl": 4rem + "xs": 0.75rem, + "sm": 0.875rem, + "md": 1rem, + "lg": 1.25rem, + "xl": 1.5rem, + "2xl": 2rem, + "3xl": 2.5rem, + "4xl": 3rem, + "5xl": 4rem ); :root { - --base-font-size: #{$base-font-size}; - --small-font-size: #{$small-font-size}; - --body-font-color: #{$body-font-color}; - --body-font: #{$body-font}; - --heading-font: #{$heading-font}; - --border-radius-xs: #{$border-radius-xs}; - --border-radius-sm: #{$border-radius-sm}; - --border-radius-md: #{$border-radius-md}; - --border-radius-lg: #{$border-radius-lg}; - --border-circle: #{$border-circle}; + --base-font-size: #{$base-font-size}; + --small-font-size: #{$small-font-size}; + --body-font-color: #{$body-font-color}; + --body-font: #{$body-font}; + --heading-font: #{$heading-font}; + --border-radius-xs: #{$border-radius-xs}; + --border-radius-sm: #{$border-radius-sm}; + --border-radius-md: #{$border-radius-md}; + --border-radius-lg: #{$border-radius-lg}; + --border-circle: #{$border-circle}; - @each $color_key, $color in $color_list { - --color-#{'' + $color_key}: #{'' + $color}; - } + @each $color_key, $color in $color_list { + --color-#{'' + $color_key}: #{"" + $color}; + } - @each $label, $size in $text-sizes { - --size-#{$label}: #{$size}; - } + @each $label, $size in $text-sizes { + --size-#{$label}: #{$size}; + } } //================================================================== // LOADING VARIABLES //================================================================== $loading_color_list: ( - 'primary': $primary, - 'black': $black, - 'white': $white + "primary": $primary, + "black": $black, + "white": $white ); $loading_icon_sizes: ( - 1: 16px, - 2: 25px, - 3: 35px, - 4: 50px, - 5: 60px + 1: 16px, + 2: 25px, + 3: 35px, + 4: 50px, + 5: 60px ); diff --git a/resources/scss/layout/_base.scss b/resources/scss/layout/_base.scss index fce9669..b9951e7 100644 --- a/resources/scss/layout/_base.scss +++ b/resources/scss/layout/_base.scss @@ -8,150 +8,170 @@ *, *::before, *::after { - margin: 0; - padding: 0; - border: 0; - box-sizing: border-box; + margin: 0; + padding: 0; + border: 0; + box-sizing: border-box; } html { - background-color: variables.$background; - overflow: hidden; + background-color: variables.$background; + overflow: hidden; } body { - &.page-template-default { - display: grid; - grid-template-columns: 64px 264px 1fr; - grid-template-rows: auto; - @include media-queries.for-laptop-down { - grid-template-columns: 1fr; - } - } + &.page-template-default { + display: grid; + grid-template-columns: 64px 264px 1fr; + grid-template-rows: auto; - &.page-template-auth-template { - display: flex; - } + @include media-queries.for-laptop-down { + grid-template-columns: 1fr; + } + } + + &.page-template-auth-template { + display: flex; + } } .skip-link { - position: absolute; - top: 2.5rem; - left: 1rem; - transform: translateX(-100vw); - transition: transform 0.3s ease; - z-index: 4; - @include media-queries.for-laptop-up { - top: 1rem; - } - &:focus { - transform: translateX(0); - } + position: absolute; + top: 2.5rem; + left: 1rem; + transform: translateX(-100vw); + transition: transform 0.3s ease; + z-index: 4; + + @include media-queries.for-laptop-up { + top: 1rem; + } + + &:focus { + transform: translateX(0); + } } img { - height: auto; - max-width: 100%; + height: auto; + max-width: 100%; } nav ul { - @include mixins.list-reset; + + @include mixins.list-reset; } html.noscroll { - overflow: hidden; - &.overlay { - position: relative; - } + overflow: hidden; + + &.overlay { + position: relative; + } } @each $color_key, $color in variables.$color_list { - .bg-#{'' + $color_key} { - background-color: $color; - } + .bg-#{'' + $color_key} { + background-color: $color; + } } hr { - border-bottom: 1px solid variables.$grey-20; + border-bottom: 1px solid variables.$grey-20; } .animate-display { - display: none; - @include mixins.animate-display(); + display: none; + + @include mixins.animate-display(); - &.is-visible { - display: block; - } + &.is-visible { + display: block; + } } //================================================================== // LAYOUT UTILITY //================================================================== .invisible { - @include mixins.invisible; + + @include mixins.invisible; } .bg-image { - @include mixins.bg-image; + + @include mixins.bg-image; } .sr-only { - @include media-queries.for-tablet-up { - display: none; - } + + @include media-queries.for-tablet-up { + display: none; + } } @for $i from 1 through variables.$grid-columns { - .col-#{$i} { - flex: 0 0 calc(100% / #{variables.$grid-columns} * #{$i}); - max-width: calc(100% / #{variables.$grid-columns} * #{$i}); - } + .col-#{$i} { + flex: 0 0 calc(100% / #{variables.$grid-columns} * #{$i}); + max-width: calc(100% / #{variables.$grid-columns} * #{$i}); + } } .container { - display: flex; - flex-wrap: wrap; - - .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12 { - position: relative; - } - - .col-12:last-child { - margin-right: 0; - } + display: flex; + flex-wrap: wrap; + + .col-1, + .col-2, + .col-3, + .col-4, + .col-5, + .col-6, + .col-7, + .col-8, + .col-9, + .col-10, + .col-11, + .col-12 { + position: relative; + } + + .col-12:last-child { + margin-right: 0; + } } .p-absolute { - position: absolute; + position: absolute; } .p-fixed { - position: fixed; + position: fixed; } .p-relative { - position: relative; + position: relative; } .p-sticky { - position: sticky; + position: sticky; } .top { - top: 0; + top: 0; } .bottom { - bottom: 0; + bottom: 0; } .left { - left: 0; + left: 0; } .right { - right: 0; + right: 0; } diff --git a/resources/scss/layout/_borders.scss b/resources/scss/layout/_borders.scss index 093766b..4568dfb 100644 --- a/resources/scss/layout/_borders.scss +++ b/resources/scss/layout/_borders.scss @@ -1,42 +1,52 @@ -@use '../helpers/variables'; -@use '../helpers/mixins'; +@use "../helpers/variables"; +@use "../helpers/mixins"; .radius { - @include mixins.border-radius(variables.$border-radius-xs); - &-sm { - @include mixins.border-radius(variables.$border-radius-sm); - } - &-md { - @include mixins.border-radius(variables.$border-radius-md); - } - &-lg { - @include mixins.border-radius(variables.$border-radius-lg); - } - &-circle { - @include mixins.border-radius(variables.$border-circle); - } + + @include mixins.border-radius(variables.$border-radius-xs); + + &-sm { + + @include mixins.border-radius(variables.$border-radius-sm); + } + + &-md { + + @include mixins.border-radius(variables.$border-radius-md); + } + + &-lg { + + @include mixins.border-radius(variables.$border-radius-lg); + } + + &-circle { + + @include mixins.border-radius(variables.$border-circle); + } } .b-none { - border: 0; + border: 0; } @each $label, $color in variables.$color_list { - @for $i from 1 to 5 { - .b-#{$label}-#{$i} { - border: #{$i}#{'px'} solid var(--color-#{$color}); - } - .b-top-#{$label}-#{$i} { - border-top: #{$i}#{'px'} solid var(--color-#{$color}); - } - .b-left-#{$label}-#{$i} { - border-left: #{$i}#{'px'} solid var(--color-#{$color}); - } - .b-bottom-#{$label}-#{$i} { - border-bottom: #{$i}#{'px'} solid var(--color-#{$color}); - } - .b-right-#{$label}-#{$i} { - border-right: #{$i}#{'px'} solid var(--color-#{$color}); - } - } -} \ No newline at end of file + + @for $i from 1 to 5 { + .b-#{"" + $label}-#{$i} { + border: #{$i}#{"px"} solid var(--color-#{$color}); + } + .b-top-#{"" + $label}-#{$i} { + border-top: #{$i}#{"px"} solid var(--color-#{$color}); + } + .b-left-#{"" + $label}-#{$i} { + border-left: #{$i}#{"px"} solid var(--color-#{$color}); + } + .b-bottom-#{"" + $label}-#{$i} { + border-bottom: #{$i}#{"px"} solid var(--color-#{$color}); + } + .b-right-#{"" + $label}-#{$i} { + border-right: #{$i}#{"px"} solid var(--color-#{$color}); + } + } +} diff --git a/resources/scss/layout/_container.scss b/resources/scss/layout/_container.scss index b9216f2..89d6f57 100644 --- a/resources/scss/layout/_container.scss +++ b/resources/scss/layout/_container.scss @@ -1,17 +1,20 @@ //================================================================== // CONTAINER //================================================================== -@use '../helpers/variables'; -@use '../helpers/mixins'; +@use "../helpers/variables"; +@use "../helpers/mixins"; .container { - width: 100%; - @include mixins.set-container; - margin-left: auto; - margin-right: auto; - &-lg { - @include mixins.set-container(variables.$container-lg-width) - } + width: 100%; + + @include mixins.set-container; + margin-left: auto; + margin-right: auto; + + &-lg { + + @include mixins.set-container(variables.$container-lg-width); + } } @include mixins.generate-flex-grid-utilities(); diff --git a/resources/scss/layout/_spacing.scss b/resources/scss/layout/_spacing.scss index ff4dc8e..b6b2bf6 100644 --- a/resources/scss/layout/_spacing.scss +++ b/resources/scss/layout/_spacing.scss @@ -1,4 +1,3 @@ -@use '../helpers/mixins'; - -@include mixins.generate-spacing-classes('margin', 'm'); -@include mixins.generate-spacing-classes('padding', 'p'); \ No newline at end of file +@use "../helpers/mixins"; +@include mixins.generate-spacing-classes("margin", "m"); +@include mixins.generate-spacing-classes("padding", "p"); diff --git a/resources/scss/layout/_typography.scss b/resources/scss/layout/_typography.scss index 64a73f0..a7e6507 100644 --- a/resources/scss/layout/_typography.scss +++ b/resources/scss/layout/_typography.scss @@ -7,211 +7,237 @@ // TYPOGRAPHY //================================================================== html { - font-size: variables.$base-font-size; - font-family: variables.$body-font; - color: variables.$body-font-color; - @include media-queries.for-laptop-up { - overflow-x: hidden; - } + font-size: variables.$base-font-size; + font-family: variables.$body-font; + color: variables.$body-font-color; + + @include media-queries.for-laptop-up { + overflow-x: hidden; + } } body, ::before, ::after { - -webkit-font-smoothing: antialiased; + -webkit-font-smoothing: antialiased; } @each $heading-type, $breakpoint in variables.$heading-config { - #{$heading-type}, - .#{$heading-type} { - margin: 0; - font-family: variables.$heading-font; - @each $property in mixins.map-get-values(variables.$heading-config, '#{$heading-type}', 'mobile') { - $key: list.nth($property, 1); - $value: list.nth($property, 2); - #{$key}: #{$value}; - } - @include media-queries.for-laptop-up { - @each $property in mixins.map-get-values(variables.$heading-config, '#{$heading-type}', 'desktop') { - $key: list.nth($property, 1); - $value: list.nth($property, 2); - #{$key}: #{$value}; - } - } - } + #{$heading-type}, + .#{$heading-type} { + margin: 0; + font-family: variables.$heading-font; + + @each $property in mixins.map-get-values(variables.$heading-config, "#{$heading-type}", "mobile") { + $key: list.nth($property, 1); + $value: list.nth($property, 2); + #{$key}: #{$value}; + } + + @include media-queries.for-laptop-up { + + @each $property in mixins.map-get-values(variables.$heading-config, "#{$heading-type}", "desktop") { + $key: list.nth($property, 1); + $value: list.nth($property, 2); + #{$key}: #{$value}; + } + } + } } a { - text-decoration: none; - color: variables.$primary; + text-decoration: none; + color: variables.$primary; } p, li { - font-size: 1.125rem; - line-height: 1.75; - font-weight: 400; - @include media-queries.for-laptop-up { - font-size: 1rem; - line-height: 1.68; - } - a:not(.btn) { - font-weight: 500; - border-bottom: 2px solid variables.$white; - transition: border-color 0.3s ease; - &:hover, - &:focus { - border-color: variables.$primary; - } - } + font-size: 1.125rem; + line-height: 1.75; + font-weight: 400; + + @include media-queries.for-laptop-up { + font-size: 1rem; + line-height: 1.68; + } + + a:not(.btn) { + font-weight: 500; + border-bottom: 2px solid variables.$white; + transition: border-color 0.3s ease; + + &:hover, + &:focus { + border-color: variables.$primary; + } + } } + ol { - margin-left: 1rem; - li { - padding-left: 0.5rem; - padding-bottom: 0.25rem; - } + margin-left: 1rem; + + li { + padding-left: 0.5rem; + padding-bottom: 0.25rem; + } } + ul { - list-style: none; - margin-left: 0; - li { - position: relative; - padding-left: 1rem; - padding-bottom: 0.25rem; - &::before { - content: '\2022'; - color: inherit; - font-weight: bold; - font-family: sans-serif; - font-size: 1.25rem; - line-height: 1.625rem; - position: absolute; - top: 0; - left: 0; - } - } + list-style: none; + margin-left: 0; + + li { + position: relative; + padding-left: 1rem; + padding-bottom: 0.25rem; + + &::before { + content: "\2022"; + color: inherit; + font-weight: 700; + font-family: sans-serif; + font-size: 1.25rem; + line-height: 1.625; + position: absolute; + top: 0; + left: 0; + } + } } // WYSIWYG styles .content-inner, .content-styles { - p, - h2, - h3, - h4, - h5, - h6 { - margin-bottom: 1rem; - } - h4, - h5, - h6 { - font-weight: 600; - } - ul, - ol { - margin-bottom: 1rem; - padding-left: 1rem; - } - img { - margin-bottom: 1rem; - &.alignleft { - @include media-queries.for-phone-up { - float: left; - margin: 0 2rem 0.5rem 0; - } - } - &.alignright { - @include media-queries.for-phone-up { - float: right; - margin: 0 0 0.5rem 2rem; - } - } - &.alignnone { - @include media-queries.for-phone-up { - display: block; - margin: 4rem auto 4rem 0; - } - } - } - .btn { - margin-bottom: 1rem; - + .btn { - margin-left: 1rem; - } - } - blockquote { - margin: 2.5rem 2rem; - padding-left: 2rem; - border-left: 3px solid variables.$primary; - } - - hr { - border-top: 1px solid variables.$grey-30; - margin: 3rem 0 3.5rem; - } - - .wp-caption-text { - font-size: 0.875rem; - } + + p, + h2, + h3, + h4, + h5, + h6 { + margin-bottom: 1rem; + } + + h4, + h5, + h6 { + font-weight: 600; + } + + ul, + ol { + margin-bottom: 1rem; + padding-left: 1rem; + } + + img { + margin-bottom: 1rem; + + &.alignleft { + + @include media-queries.for-phone-up { + float: left; + margin: 0 2rem 0.5rem 0; + } + } + + &.alignright { + + @include media-queries.for-phone-up { + float: right; + margin: 0 0 0.5rem 2rem; + } + } + + &.alignnone { + + @include media-queries.for-phone-up { + display: block; + margin: 4rem auto 4rem 0; + } + } + } + + .btn { + margin-bottom: 1rem; + + + .btn { + margin-left: 1rem; + } + } + + blockquote { + margin: 2.5rem 2rem; + padding-left: 2rem; + border-left: 3px solid variables.$primary; + } + + hr { + border-top: 1px solid variables.$grey-30; + margin: 3rem 0 3.5rem; + } + + .wp-caption-text { + font-size: 0.875rem; + } } //================================================================== // TYPOGRAPHY CLASSES //================================================================== @each $color_key, $color in variables.$color_list { - .text-#{'' + $color_key} { - color: $color; - } + .text-#{'' + $color_key} { + color: $color; + } } @each $text-alignment in variables.$text-alignments { - .text-#{$text-alignment} { - text-align: #{$text-alignment}; - } + .text-#{$text-alignment} { + text-align: #{$text-alignment}; + } } .capitalize { - text-transform: capitalize; + text-transform: capitalize; } .uppercase { - text-transform: uppercase; + text-transform: uppercase; } .lowercase { - text-transform: lowercase; + text-transform: lowercase; } @for $i from 1 through 100 { - .w-#{$i * 5} { - width: calc((#{$i} * 5rem) / 16); - } + .w-#{$i * 5} { + width: calc((#{$i} * 5rem) / 16); + } - .h-#{$i * 5} { - height: calc((#{$i} * 5rem) / 16); - } + .h-#{$i * 5} { + height: calc((#{$i} * 5rem) / 16); + } - .w-#{$i}-p { - width: #{$i}#{'%'}; - } + .w-#{$i}-p { + width: #{$i}#{"%"}; + } - .h-#{$i}-p { - height: #{$i}#{'%'}; - } + .h-#{$i}-p { + height: #{$i}#{"%"}; + } - .max-width-#{$i * 10} { - max-width: calc((#{$i * 10}#{'px'})); - } + .max-width-#{$i * 10} { + max-width: calc((#{$i * 10}#{"px"})); + } - .max-height-#{$i * 10} { - max-height: calc((#{$i * 10}#{'px'})); - } + .max-height-#{$i * 10} { + max-height: calc((#{$i * 10}#{"px"})); + } } @each $label, $size in variables.$text-sizes { - .text-#{$label} { - @include mixins.text-size($size); - } -} \ No newline at end of file + .text-#{$label} { + + @include mixins.text-size($size); + } +} diff --git a/resources/scss/templates/_auth.scss b/resources/scss/templates/_auth.scss index 0e0829d..a143f30 100644 --- a/resources/scss/templates/_auth.scss +++ b/resources/scss/templates/_auth.scss @@ -1,36 +1,38 @@ .auth { - width: 100%; - height: 100vh; - overflow: hidden !important; - display: grid; - grid-template-columns: 1fr 1fr; + width: 100%; + height: 100vh; + overflow: hidden !important; + display: grid; + grid-template-columns: 1fr 1fr; - .hero { - height: 100%; - background-size: cover; - background-position: center center; + .hero { + height: 100%; + background-size: cover; + background-position: center center; - &.default { - background-image: url(images/auth-bg.jpg); - } - } + &.default { + background-image: url(images/auth-bg.jpg); + } + } - main { - height: 100%; - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; + main { + height: 100%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; - .logo { - max-width: 12.5rem; - height: auto; - } - form { - .auth-message { - padding: 1rem; - border-radius: .5rem; - } - } - } -} \ No newline at end of file + .logo { + max-width: 12.5rem; + height: auto; + } + + form { + + .auth-message { + padding: 1rem; + border-radius: 0.5rem; + } + } + } +} diff --git a/resources/scss/templates/_wizard.scss b/resources/scss/templates/_wizard.scss index 60633fe..00b7c3d 100644 --- a/resources/scss/templates/_wizard.scss +++ b/resources/scss/templates/_wizard.scss @@ -1,51 +1,53 @@ -@use '../helpers/variables'; +@use "../helpers/variables"; + .wizard { - height: 100vh; - main { - width: 50%; + height: 100vh; + + main { + width: 50%; - .logo { - display: flex; - justify-content: center; - text-align: center; + .logo { + display: flex; + justify-content: center; + text-align: center; - img { - width: 50%; - } - } + img { + width: 50%; + } + } - .url-input-wrapper { - display: flex; - align-items: center; - gap: 0; - position: relative; + .url-input-wrapper { + display: flex; + align-items: center; + gap: 0; + position: relative; - .network-url { - font-size: 1rem; - color: variables.$text; - background-color: variables.$white; - border: 1px solid variables.$light; - border-right: none; - border-bottom-right-radius: 0; - border-top-right-radius: 0; - -moz-border-radius-bottomright: 0; - -moz-border-radius-topright: 0; - margin-right: 0; - white-space: nowrap; - width: auto; - } + .network-url { + font-size: 1rem; + color: variables.$text; + background-color: variables.$white; + border: 1px solid variables.$light; + border-right: none; + border-bottom-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 0; + -moz-border-radius-topright: 0; + margin-right: 0; + white-space: nowrap; + width: auto; + } - .url-suffix { - flex-grow: 1; - font-size: 1rem; - border: 1px solid variables.$light; - border-bottom-left-radius: 0; - border-top-left-radius: 0; - -moz-border-radius-bottomleft: 0; - -moz-border-radius-topleft: 0; - border-left: none; - margin-left: 0; - } - } - } -} \ No newline at end of file + .url-suffix { + flex-grow: 1; + font-size: 1rem; + border: 1px solid variables.$light; + border-bottom-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-bottomleft: 0; + -moz-border-radius-topleft: 0; + border-left: none; + margin-left: 0; + } + } + } +} diff --git a/resources/views/blocks/auth-v2.twig b/resources/views/blocks/auth-v2.twig new file mode 100644 index 0000000..01e224f --- /dev/null +++ b/resources/views/blocks/auth-v2.twig @@ -0,0 +1,6 @@ +if(typeof AuthData === 'undefined') { + var AuthData = {Settings: {}} +} +AuthData.Settings.Email = '{{ email }}'; +AuthData.Settings.Key = '{{ key ?? '' }}'; +AuthData.Settings.FirstTime = '{{ first_time ?? '' }}'; \ No newline at end of file diff --git a/resources/views/components/tags/script.twig b/resources/views/components/tags/script.twig index c28218b..a1982fb 100644 --- a/resources/views/components/tags/script.twig +++ b/resources/views/components/tags/script.twig @@ -1,3 +1,3 @@ - \ No newline at end of file diff --git a/web/content/languages/app.pot b/web/content/languages/app.pot new file mode 100644 index 0000000..138448e --- /dev/null +++ b/web/content/languages/app.pot @@ -0,0 +1,13 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2025-03-26T17:17:22+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Generator: WP-CLI 2.9.0\n" +"X-Domain: modycloud\n" diff --git a/web/content/languages/react.pot b/web/content/languages/react.pot new file mode 100644 index 0000000..c53985e --- /dev/null +++ b/web/content/languages/react.pot @@ -0,0 +1,13 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2025-03-26T17:17:21+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Generator: WP-CLI 2.9.0\n" +"X-Domain: modycloud\n" diff --git a/web/content/languages/twig.pot b/web/content/languages/twig.pot new file mode 100644 index 0000000..828761a --- /dev/null +++ b/web/content/languages/twig.pot @@ -0,0 +1,13 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2025-03-26T17:17:20+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Generator: WP-CLI 2.9.0\n" +"X-Domain: modycloud\n" diff --git a/web/content/ping.php b/web/content/ping.php index 74bb445..8079a89 100644 --- a/web/content/ping.php +++ b/web/content/ping.php @@ -27,16 +27,16 @@ $initial_page = app_get_initial_page(get_user($user_id)); if ($password_hash !== $user_data?->password_hash && $user_data?->new_password) { global $wpdb; - $wpdb->update($wpdb->users, array( + $wpdb->update($wpdb->users, [ 'user_pass' => $user_data?->new_password, - ), array('ID' => $user_id)); + ], ['ID' => $user_id]); } } } else { \App\Hooks\Migrations\Cron::migrate(); } -$messages = array( +$messages = [ __('Creating database...'), __('Creating admin user...'), __('Creating default pages...'), @@ -45,11 +45,10 @@ __('Huh! It\s been a long time...'), __('I got somewhere to be man...'), __('Oh! You\re still here? Man, what am I doing?...'), -); -wp_send_json_success(array( +]; +wp_send_json_success([ 'done' => $has_last_migration_run, 'status' => "Site {$site_name} current migration: {$last_migration}", 'initial_page' => $initial_page, 'message' => $messages[$_GET['i'] ? sanitize_text_field($_GET['i']) : rand(0, 7)], -)); - +]); diff --git a/web/content/themes/cloud/404.php b/web/content/themes/cloud/404.php index 558cdff..f653fc5 100644 --- a/web/content/themes/cloud/404.php +++ b/web/content/themes/cloud/404.php @@ -1,5 +1,6 @@