From ae05c1f177c5f0209d2ea560e7ea501e6142135b Mon Sep 17 00:00:00 2001 From: Javier Troya Date: Wed, 26 Mar 2025 18:11:42 +0100 Subject: [PATCH 01/17] Add lint scripts. --- .eslintrc.json | 12 ++++++++++++ app/Features/Auth.php | 5 +++++ package.json | 13 ++++++++----- pint.json | 15 +++++++++++++-- 4 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 .eslintrc.json create mode 100644 app/Features/Auth.php diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..3909ff8 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,12 @@ +{ + "extends": [ "plugin:@wordpress/eslint-plugin/recommended" ], + "globals" : { + "window": "readonly", + "location": "readonly" + }, + "settings": { + "react": { + "version": "18.3.1" + } + } +} \ No newline at end of file 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 @@ + Date: Wed, 26 Mar 2025 18:31:02 +0100 Subject: [PATCH 02/17] Lint js. --- .eslintrc.json | 1 + .../workflows/{ci.yml => deploy-to-main.yml} | 4 +- app/App.php | 10 +- app/Features/Migrate.php | 13 +- app/Features/Recaptcha.php | 20 +- app/Hooks/Account.php | 8 +- app/Hooks/Account/Api.php | 143 ++++--- app/Hooks/Account/Block.php | 12 +- app/Hooks/Account/Cron.php | 12 +- app/Hooks/Account/Password.php | 20 +- app/Hooks/Account/Routes.php | 13 +- app/Hooks/Account/Scripts.php | 18 +- app/Hooks/Account/Service.php | 15 +- app/Hooks/Acf.php | 11 +- app/Hooks/Auth.php | 8 +- app/Hooks/Auth/Ajax.php | 89 ++-- app/Hooks/Auth/Block.php | 47 ++- app/Hooks/Auth/Cron.php | 10 +- app/Hooks/Auth/Logout.php | 7 +- app/Hooks/Auth/Routes.php | 41 +- app/Hooks/Auth/Scripts.php | 18 +- app/Hooks/Blocks.php | 22 +- app/Hooks/Cron.php | 29 +- app/Hooks/Gutenberg.php | 96 +++-- app/Hooks/Language.php | 11 +- app/Hooks/Mail.php | 40 +- app/Hooks/Migration.php | 8 +- app/Hooks/Migrations/Cron.php | 5 +- app/Hooks/Migrations/Delta.php | 14 +- app/Hooks/Page.php | 8 +- app/Hooks/Page/Service.php | 26 +- app/Hooks/Plugin.php | 8 +- app/Hooks/Plugin/Admin.php | 17 +- app/Hooks/Post.php | 39 +- app/Hooks/Queue.php | 11 +- app/Hooks/Queue/Cron.php | 18 +- app/Hooks/Queue/Post.php | 54 +-- app/Hooks/Security.php | 27 +- app/Hooks/Sites.php | 8 +- app/Hooks/Sites/Ajax.php | 86 ++-- app/Hooks/Sites/Block.php | 30 +- app/Hooks/Sites/Post.php | 24 +- app/Hooks/Sites/Routes.php | 10 +- app/Hooks/Theme.php | 69 +-- app/Hooks/User.php | 10 +- app/Hooks/User/Api.php | 46 +- app/Hooks/User/Service.php | 20 +- app/Hooks/Views.php | 70 ++-- app/helpers/auth.php | 26 +- app/helpers/cli.php | 7 +- app/helpers/icons.php | 9 +- app/helpers/log.php | 9 +- app/helpers/migrations.php | 12 +- app/helpers/pages.php | 7 +- app/helpers/parse.php | 7 +- app/helpers/password.php | 5 +- app/helpers/render.php | 7 +- app/helpers/sites.php | 46 +- app/helpers/uuid.php | 33 +- app/helpers/validation.php | 11 +- ...irst-migration-for-all-sites-migration.php | 108 ++--- config/application.php | 4 +- package.json | 8 +- pint.json | 1 + resources/scripts/account.js | 84 ++-- .../scripts/account/context/AccountContext.js | 45 +- resources/scripts/app.js | 10 +- resources/scripts/auth.js | 69 +-- resources/scripts/auth/AuthContext.js | 50 +-- resources/scripts/editor.js | 2 +- resources/scripts/site.js | 37 +- resources/scripts/tools/getcookie.js | 20 +- resources/scripts/tools/kebabcase.js | 12 +- resources/scripts/tools/navigate.js | 13 +- resources/scripts/tools/nl2br.js | 6 +- resources/scripts/tools/validateRecaptcha.js | 49 +-- resources/scss/app.scss | 42 +- resources/scss/common/_main-content.scss | 34 +- resources/scss/common/sidebars/_dynamic.scss | 90 ++-- resources/scss/common/sidebars/_static.scss | 114 ++--- .../scss/common/topbars/_static-top.scss | 157 +++---- resources/scss/components/_buttons.scss | 198 ++++----- resources/scss/components/_forms.scss | 36 +- resources/scss/components/_inputs.scss | 45 +- resources/scss/components/_labels.scss | 6 +- resources/scss/helpers/_alpine.scss | 4 +- resources/scss/helpers/_colors.scss | 27 +- resources/scss/helpers/_media-queries.scss | 100 ++++- resources/scss/helpers/_mixins.scss | 393 ++++++++++-------- resources/scss/helpers/_normalize.scss | 118 +++--- resources/scss/helpers/_tostify.scss | 107 ++--- resources/scss/helpers/_variables.scss | 312 +++++++------- resources/scss/layout/_base.scss | 164 ++++---- resources/scss/layout/_borders.scss | 78 ++-- resources/scss/layout/_container.scss | 20 +- resources/scss/layout/_spacing.scss | 7 +- resources/scss/layout/_typography.scss | 336 ++++++++------- resources/scss/templates/_auth.scss | 64 +-- resources/scss/templates/_wizard.scss | 92 ++-- web/content/ping.php | 13 +- web/content/themes/cloud/404.php | 1 + web/content/themes/cloud/archive.php | 1 + web/content/themes/cloud/auth-template.php | 4 +- .../themes/cloud/block-center-template.php | 4 +- web/content/themes/cloud/functions.php | 11 +- web/content/themes/cloud/index.php | 1 + web/content/themes/cloud/page.php | 1 + web/content/themes/cloud/single.php | 1 + 108 files changed, 2517 insertions(+), 2087 deletions(-) rename .github/workflows/{ci.yml => deploy-to-main.yml} (97%) diff --git a/.eslintrc.json b/.eslintrc.json index 3909ff8..54a29c7 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,7 @@ { "extends": [ "plugin:@wordpress/eslint-plugin/recommended" ], "globals" : { + "App": "readonly", "window": "readonly", "location": "readonly" }, 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/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/Migrate.php b/app/Features/Migrate.php index 1d97a9a..a21d0ef 100644 --- a/app/Features/Migrate.php +++ b/app/Features/Migrate.php @@ -3,13 +3,14 @@ namespace App\Features; use Roots\WPConfig\Config; -use function Env\env; -trait Migrate { - public static function migrate() : void { +trait Migrate +{ + public static function migrate(): void + { $migration_files = glob(Config::get('MC_MIGRATIONS_PATH') . '/*.php'); - app_log(print_r($migration_files,1)); + app_log(print_r($migration_files, 1)); if (!$migration_files) { return; } @@ -22,7 +23,7 @@ public static function migrate() : void { $site_name = get_bloginfo(); - if(!Config::get('CHILD_SITE')) { + if (!Config::get('CHILD_SITE')) { return; } @@ -59,4 +60,4 @@ public static function migrate() : void { } } } -} \ No newline at end of file +} diff --git a/app/Features/Recaptcha.php b/app/Features/Recaptcha.php index 881d7cc..958e38a 100644 --- a/app/Features/Recaptcha.php +++ b/app/Features/Recaptcha.php @@ -4,29 +4,31 @@ use Roots\WPConfig\Config; -trait Recaptcha { - public static function validate_recaptcha() : void { +trait Recaptcha +{ + public static function validate_recaptcha(): void + { $recaptcha_token = $_POST['token'] ?? ''; $recaptcha_secret = Config::get('RECAPTCHA_SECRET'); - if($recaptcha_secret && $recaptcha_token) { - $response = wp_remote_get(add_query_arg(array( + if ($recaptcha_secret && $recaptcha_token) { + $response = wp_remote_get(add_query_arg([ 'secret' => $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..5531816 100644 --- a/app/Hooks/Account.php +++ b/app/Hooks/Account.php @@ -9,8 +9,10 @@ use App\Hooks\Account\Scripts; use App\Hooks\User\Service as UserService; -class Account { - public static function init() : void { +class Account +{ + public static function init(): void + { 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(...)); @@ -20,4 +22,4 @@ 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 +} 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 index c9129e3..3c1c4b7 100644 --- a/app/Hooks/Account/Scripts.php +++ b/app/Hooks/Account/Scripts.php @@ -2,22 +2,24 @@ namespace App\Hooks\Account; -class Scripts { - public static function wp_enqueue_scripts(): void { +class Scripts +{ + public static function wp_enqueue_scripts(): void + { $account_page_id = get_option('account_page_id'); - if(!is_page($account_page_id)) { + if (!is_page($account_page_id)) { return; } - $account = include(APP_THEME_DIR.'/dist/account.asset.php'); - foreach($account['dependencies'] as $dependency) { + $account = include(APP_THEME_DIR . '/dist/account.asset.php'); + foreach ($account['dependencies'] as $dependency) { wp_enqueue_script($dependency); } wp_enqueue_script( 'account', - APP_THEME_URL.'/dist/account.js', + APP_THEME_URL . '/dist/account.js', $account['version'], $account['dependencies'], - ['in_footer' => true, 'type' => 'module'] + ['in_footer' => 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..d6729c0 100644 --- a/app/Hooks/Auth.php +++ b/app/Hooks/Auth.php @@ -9,8 +9,10 @@ use App\Hooks\Auth\Routes; use App\Hooks\Auth\Scripts; -class Auth { - public static function init(): void { +class Auth +{ + public static function init(): void + { add_action('init', Routes::wp_init(...)); add_action('admin_init', Routes::admin_init(...)); add_action('template_redirect', Routes::template_redirect(...)); @@ -30,4 +32,4 @@ public static function init(): void { add_filter('app_before_render_block_auth', Block::app_before_render_block(...)); } -} \ 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..c9ef41d 100644 --- a/app/Hooks/Auth/Block.php +++ b/app/Hooks/Auth/Block.php @@ -4,10 +4,12 @@ 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 + { $action = get_query_var('action'); - if(empty($action)) { + if (empty($action)) { wp_redirect(wp_login_url()); exit; } @@ -20,7 +22,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 +30,11 @@ 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()) { + 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 +43,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 +53,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 +78,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..62da626 100644 --- a/app/Hooks/Auth/Scripts.php +++ b/app/Hooks/Auth/Scripts.php @@ -2,22 +2,24 @@ 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) { + $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', + APP_THEME_URL . '/dist/auth.js', $account['version'], $account['dependencies'], - ['in_footer' => true, 'type' => 'module'] + ['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..500246a 100644 --- a/app/Hooks/Blocks.php +++ b/app/Hooks/Blocks.php @@ -4,10 +4,12 @@ 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 { @@ -20,16 +22,22 @@ public static function register_block_types(): void add_filter( 'allowed_block_types_all', function ($allowed_blocks) use ($block_data) { - if (!is_array($allowed_blocks)) return $allowed_blocks; + if (!is_array($allowed_blocks)) { + return $allowed_blocks; + } $allowed_blocks[] = $block_data->name; return $allowed_blocks; - }, 99, 2); + }, + 99, + 2, + ); } } } } - 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 +51,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..db98576 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); @@ -66,9 +70,9 @@ public static function add_recaptcha(): void { ]); }; - $protected_pages = array( - 'app/auth' - ); + $protected_pages = [ + 'app/auth', + ]; foreach ($blocks as $block) { if (in_array($block['blockName'], $protected_pages)) { $add_script(); @@ -79,7 +83,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 +100,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..932f91a 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,110 @@ 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' => '', + ]); 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 +128,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 +139,20 @@ 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' => '', + ]); update_option('account_page_id', $account_page_id); update_post_meta($account_page_id, 'main_cta', $main_cta); @@ -160,41 +160,41 @@ $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' => '', + ]); 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/package.json b/package.json index 89ea0f0..3b05e27 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,10 @@ "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:twig:pnpm run translate:react;pnpm run translate:js", - "translate:twig": "wp i18n make-pot . $(pwd)/resources/languages/twig.pot --include=\"$(pwd)resources/views/**/*.twig\"", - "translate:react": "wp i18n make-pot . $(pwd)/resources/languages/react.pot --include=\"resources/scripts/**/*.jsx\"", - "translate:js": "wp i18n make-pot . $(pwd)/resources/languages/app.pot --include=\"resources/**/*.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 && composer run lint", "lint:css": "wp-scripts lint-style 'resources/**/*.scss'", "lint:js": "wp-scripts lint-js 'resources/**/*.js'" diff --git a/pint.json b/pint.json index dcee4b9..cbcf137 100644 --- a/pint.json +++ b/pint.json @@ -12,6 +12,7 @@ "web/wp", "web/content/mu-plugins", "web/content/plugins", + "web/content/languages", "web/content/themes/cloud/acf-json", "web/content/themes/cloud/dist", "web/content/themes/cloud/images" diff --git a/resources/scripts/account.js b/resources/scripts/account.js index 8d0794e..673ada4 100644 --- a/resources/scripts/account.js +++ b/resources/scripts/account.js @@ -1,46 +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 '@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"; +import { createRoot } from '@wordpress/element'; +import { BrowserRouter, Routes, Route } from 'react-router-dom'; +import Account from './account/views/Account'; +import Settings from './account/views/Settings'; +import Security from './account/views/Security'; +import Links from './account/components/Links'; +import { AccountProvider } from './account/context/AccountContext'; +import { ToastContainer } from 'react-toastify'; const AccountContainer = () => { - return ( -

- - - - }/> - }/> - }/> - - - - -
- ) -} + return ( +
+ + + + } /> + } + /> + } + /> + + + + +
+ ); +}; -domReady(() => { - const root = createRoot( - document.getElementById('app-account-container') - ); +domReady( () => { + const root = createRoot( + document.getElementById( 'app-account-container' ) + ); - root.render(); + 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 + 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/scripts/account/context/AccountContext.js b/resources/scripts/account/context/AccountContext.js index 498d17c..70698ca 100644 --- a/resources/scripts/account/context/AccountContext.js +++ b/resources/scripts/account/context/AccountContext.js @@ -1,32 +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); +const AccountContext = createContext( null ); -export const AccountProvider = ({ children }) => { - const [user, setUser] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(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); - }); - }, []); + useEffect( () => { + apiFetch( { path: '/wp/v2/users/me' } ) + .then( ( userData ) => { + setUser( userData ); + setLoading( false ); + } ) + .catch( () => { + setError( 'Could not fetch user data' ); + setLoading( false ); + } ); + }, [] ); - return ( - - {children} - - ); + return ( + + { children } + + ); }; export const useUser = () => { - return useContext(AccountContext); + return useContext( AccountContext ); }; 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 index 951cb7c..5b15618 100644 --- a/resources/scripts/auth.js +++ b/resources/scripts/auth.js @@ -1,38 +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 "@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"; +import { createRoot } from '@wordpress/element'; +import { BrowserRouter, Routes, Route } from 'react-router-dom'; +import { ToastContainer } from 'react-toastify'; +import SignIn from './auth/components/SignIn'; +import SignUp from './auth/components/SignUp'; +import SignOut from './auth/components/SignOut'; +import ForgotPassword from './auth/components/ForgotPassword'; +import ResetPassword from './auth/components/ResetPassword'; +import { AuthProvider } from './auth/AuthContext'; const AuthContainer = () => { - return ( -
- - - - }/> - }/> - }/> - }/> - }/> - - - - -
- ) -} + return ( +
+ + + + } /> + } /> + } /> + } + /> + } + /> + + + + +
+ ); +}; -domReady(() => { - const root = createRoot( - document.getElementById('app-auth-container') - ); +domReady( () => { + const root = createRoot( document.getElementById( 'app-auth-container' ) ); - root.render(); -}); \ No newline at end of file + root.render( ); +} ); diff --git a/resources/scripts/auth/AuthContext.js b/resources/scripts/auth/AuthContext.js index 8be80fc..1b58fa1 100644 --- a/resources/scripts/auth/AuthContext.js +++ b/resources/scripts/auth/AuthContext.js @@ -1,32 +1,34 @@ -import React, { createContext, useState, useContext, useEffect } from 'react'; +// eslint-disable-next-line import/no-unresolved +import React, { createContext, useState, useContext } from 'react'; -const AuthContext = createContext(null); +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); - } +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} - - ); + return ( + + { children } + + ); }; export const useAuth = () => { - return useContext(AuthContext); + 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 +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/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/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..9b7dffd 100644 --- a/resources/scss/app.scss +++ b/resources/scss/app.scss @@ -1,36 +1,36 @@ //================================================================== // 1. HELPERS //================================================================== -@use 'helpers/normalize'; -@use 'helpers/variables'; -@use 'helpers/media-queries'; -@use 'helpers/mixins'; -@use 'helpers/alpine'; -@use 'helpers/tostify'; +@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'; +@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'; +@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'; +@use "components/forms"; +@use "components/inputs"; +@use "components/buttons"; +@use "components/labels"; //================================================================== // 5. PAGES @@ -45,5 +45,5 @@ //================================================================== // 7. TEMPLATES //================================================================== -@use 'templates/auth'; -@use 'templates/wizard'; \ No newline at end of file +@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..2d279a6 100644 --- a/resources/scss/components/_buttons.scss +++ b/resources/scss/components/_buttons.scss @@ -6,103 +6,111 @@ // 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.5rem; + 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; + +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/_forms.scss b/resources/scss/components/_forms.scss index 88c72ee..fac1a06 100644 --- a/resources/scss/components/_forms.scss +++ b/resources/scss/components/_forms.scss @@ -1,23 +1,23 @@ -@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; - 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/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/_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..91b3652 100644 --- a/resources/scss/helpers/_normalize.scss +++ b/resources/scss/helpers/_normalize.scss @@ -9,9 +9,9 @@ */ 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 @@ -22,7 +22,7 @@ html { */ body { - margin: 0; + margin: 0; } /** @@ -30,7 +30,7 @@ body { */ main { - display: block; + display: block; } /** @@ -39,8 +39,8 @@ main { */ h1 { - font-size: 2em; - margin: 0.67em 0; + font-size: 2em; + margin: 0.67em 0; } /* Grouping content @@ -52,9 +52,9 @@ h1 { */ hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ } /** @@ -63,8 +63,8 @@ hr { */ pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ } /* Text-level semantics @@ -75,7 +75,7 @@ pre { */ a { - background-color: transparent; + background-color: transparent; } /** @@ -84,9 +84,9 @@ a { */ abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ } /** @@ -95,7 +95,7 @@ abbr[title] { b, strong { - font-weight: bolder; + font-weight: bolder; } /** @@ -106,8 +106,8 @@ strong { code, kbd, samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ } /** @@ -115,7 +115,7 @@ samp { */ small { - font-size: 80%; + font-size: 80%; } /** @@ -125,18 +125,18 @@ small { 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 @@ -147,7 +147,7 @@ sup { */ img { - border-style: none; + border-style: none; } /* Forms @@ -163,10 +163,10 @@ 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 */ } /** @@ -176,7 +176,7 @@ textarea { button, input { /* 1 */ - overflow: visible; + overflow: visible; } /** @@ -186,7 +186,7 @@ input { /* 1 */ button, select { /* 1 */ - text-transform: none; + text-transform: none; } /** @@ -197,7 +197,7 @@ button, [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; + -webkit-appearance: button; } /** @@ -208,8 +208,8 @@ 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; } /** @@ -220,7 +220,7 @@ button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { - outline: 1px dotted ButtonText; + outline: 1px dotted ButtonText; } /** @@ -228,7 +228,7 @@ button:-moz-focusring, */ fieldset { - padding: 0.35em 0.75em 0.625em; + padding: 0.35em 0.75em 0.625em; } /** @@ -239,12 +239,12 @@ fieldset { */ 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 */ } /** @@ -252,7 +252,7 @@ legend { */ progress { - vertical-align: baseline; + vertical-align: baseline; } /** @@ -260,7 +260,7 @@ progress { */ textarea { - overflow: auto; + overflow: auto; } /** @@ -270,8 +270,8 @@ textarea { [type="checkbox"], [type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ } /** @@ -280,7 +280,7 @@ textarea { [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; + height: auto; } /** @@ -289,8 +289,8 @@ textarea { */ [type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ } /** @@ -298,7 +298,7 @@ textarea { */ [type="search"]::-webkit-search-decoration { - -webkit-appearance: none; + -webkit-appearance: none; } /** @@ -307,8 +307,8 @@ textarea { */ ::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ } /* Interactive @@ -319,7 +319,7 @@ textarea { */ details { - display: block; + display: block; } /* @@ -327,7 +327,7 @@ details { */ summary { - display: list-item; + display: list-item; } /* Misc @@ -338,7 +338,7 @@ summary { */ template { - display: none; + display: none; } /** @@ -347,5 +347,5 @@ template { [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..aad50d1 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..db51840 100644 --- a/resources/scss/layout/_container.scss +++ b/resources/scss/layout/_container.scss @@ -1,17 +1,19 @@ //================================================================== // 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..ec3159c 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.625rem; + 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/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 @@ Date: Wed, 26 Mar 2025 18:33:24 +0100 Subject: [PATCH 03/17] Lint js. --- .eslintrc.json | 5 +++++ resources/scss/editor.scss | 3 +++ 2 files changed, 8 insertions(+) diff --git a/.eslintrc.json b/.eslintrc.json index 54a29c7..4744389 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -5,6 +5,11 @@ "window": "readonly", "location": "readonly" }, + "rules": { + "unit-allowed-list": { + "line-height": ["px", "em", "rem", "unitless"] + } + }, "settings": { "react": { "version": "18.3.1" diff --git a/resources/scss/editor.scss b/resources/scss/editor.scss index e69de29..07ecd76 100644 --- a/resources/scss/editor.scss +++ b/resources/scss/editor.scss @@ -0,0 +1,3 @@ +body { + background-color: var(--color-white); +} \ No newline at end of file From 95f40563cf854d754ef90519db139f043bd51bfb Mon Sep 17 00:00:00 2001 From: Javier Troya Date: Wed, 26 Mar 2025 20:19:10 +0100 Subject: [PATCH 04/17] Builder. --- .eslintrc.json | 5 - config/webpack.config.js | 103 +- package.json | 45 +- pnpm-lock.yaml | 4278 ++++++++++++----------- resources/scss/app.scss | 28 - resources/scss/components/_buttons.scss | 2 +- resources/scss/components/_footer.scss | 2 - resources/scss/editor.scss | 4 +- resources/scss/helpers/_fonts.scss | 3 + resources/scss/helpers/_normalize.scss | 175 +- resources/scss/layout/_borders.scss | 10 +- resources/scss/layout/_container.scss | 3 +- resources/scss/layout/_typography.scss | 2 +- 13 files changed, 2293 insertions(+), 2367 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 4744389..54a29c7 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -5,11 +5,6 @@ "window": "readonly", "location": "readonly" }, - "rules": { - "unit-allowed-list": { - "line-height": ["px", "em", "rem", "unitless"] - } - }, "settings": { "react": { "version": "18.3.1" diff --git a/config/webpack.config.js b/config/webpack.config.js index 487e5d4..c4f34ee 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -1,49 +1,56 @@ -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' ), + 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' ], + }, + }, + }, + ], + }, +} ); diff --git a/package.json b/package.json index 3b05e27..b251f4f 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "lint": "pnpm lint:css && pnpm lint:js && composer run lint", "lint:css": "wp-scripts lint-style 'resources/**/*.scss'", "lint:js": "wp-scripts lint-js 'resources/**/*.js'" - }, "repository": { "type": "git", @@ -26,33 +25,35 @@ }, "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", + "@wordpress/components": "^28.13.0", + "@wordpress/dom-ready": "^4.20.0", + "@wordpress/element": "^6.20.0", + "@wordpress/i18n": "^5.20.0", "aos": "^2.3.4", - "babel-loader": "^9.2.1", - "css-loader": "^7.1.2", "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", + "@wordpress/block-editor": "^13.4.0", + "@wordpress/blocks": "^13.10.0", + "@wordpress/icons": "^10.20.0", + "@wordpress/scripts": "^27.9.0", + "@wordpress/stylelint-config": "^23.12.0", + "babel-loader": "^9.2.1", + "css-loader": "^7.1.2", + "sass-loader": "^16.0.5", + "scss-loader": "^0.0.1", + "style-loader": "^4.0.0", + "stylelint": "^16.17.0", + "webpack": "^5.98.0", "webpack-cli": "^5.1.4", - "webpack-manifest-plugin": "^5.0.0" + "webpack-manifest-plugin": "^5.0.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a6ae54..fe41940 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,32 +9,26 @@ 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: ^28.13.0 + version: 28.13.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(react-dom@19.0.0(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 + specifier: ^5.20.0 + version: 5.20.0 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) gettext-parser: specifier: ^8.0.0 version: 8.0.0 @@ -42,51 +36,63 @@ 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@19.0.0(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@19.0.0(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: ^13.4.0 + version: 13.4.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@19.0.0(react@18.3.1))(react@18.3.1) '@wordpress/blocks': - specifier: ^13.1.0 + specifier: ^13.10.0 version: 13.10.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: ^27.9.0 + version: 27.9.0(@playwright/test@1.49.1)(@types/eslint@9.6.1)(@types/node@22.13.13)(@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) + '@wordpress/stylelint-config': + specifier: ^23.12.0 + version: 23.12.0(postcss@8.5.3)(stylelint@16.17.0(typescript@5.7.2)) + babel-loader: + specifier: ^9.2.1 + version: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0) + 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.7.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@5.1.4) 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) + version: 5.1.4(webpack-bundle-analyzer@4.10.2)(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 +119,47 @@ 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.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.25.9': - resolution: {integrity: sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==} + '@babel/eslint-parser@7.27.0': + resolution: {integrity: sha512-dtnzmSjXfgL/HDgMcmsLSzyGbEosi4DrGWoCNfuI+W4IkVJw6izpTe7LtOdwAXnkDqw5yweboYCTkM2rQizCng==} 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 +181,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 +191,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 +217,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 @@ -365,8 +371,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 +383,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 +461,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 +533,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 @@ -617,8 +623,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 +641,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.26.10': + resolution: {integrity: sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -659,20 +665,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 +707,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.26.0': - resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} + '@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 +724,8 @@ 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.27.0': + resolution: {integrity: sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -728,35 +734,68 @@ 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/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@2.2.0': resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss-selector-parser: ^6.0.10 + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.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 +857,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 +867,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==} @@ -881,14 +896,6 @@ packages: '@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 +909,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 +1008,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,90 +1029,90 @@ 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==} + '@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': @@ -1178,8 +1180,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 +1193,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 +1215,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 +1237,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 +1263,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 +1276,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 @@ -1391,6 +1393,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 +1509,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 +1533,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 +1560,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 +1596,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.13': + resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1600,8 +1608,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 +1619,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 +1661,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 +1758,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==} @@ -1831,20 +1839,20 @@ packages: webpack-dev-server: optional: true - '@wordpress/a11y@4.15.1': - resolution: {integrity: sha512-FQmTpffgFw2M/7MbgD83OemFWMQM05oomnkqMYtTKaJo5WPn4eL5wjJ+wk+XjeT+SdflQK0ZOgeEns998USdVA==} + '@wordpress/a11y@4.20.0': + resolution: {integrity: sha512-hyFKC3D1o0Cvy1HeFgujsuW9gTrwVL4DVIfnQytG2+gMFaDyux4Qmzyg2e3k71BKlHn7J28Q3i0xNqC2k7ZoFw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/api-fetch@6.55.0': resolution: {integrity: sha512-1HrCUsJdeRY5Y0IjplotINwqMRO81e7O7VhBScuKk7iOuDm/E1ioKv2uLGnPNWziYu+Zf025byxOqVzXDyM2gw==} engines: {node: '>=12'} - '@wordpress/api-fetch@7.15.1': - resolution: {integrity: sha512-O8o/58GVLrCc5waA+IeyGcjCf/4dYNpZipKNY2y+slE6OwhjSPSvTKn4L9XhuAZsOdxe4Yqykg995+m6Y1Ivzg==} + '@wordpress/api-fetch@7.20.0': + resolution: {integrity: sha512-EeV8xaagQohoWdiVGtNxszGvWeTkkpmhm8EsAC6KM8Cb0qZminGKy0eDn33voD14UZHhNcm2bc2Ka9WZWnlIYQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/autop@4.15.0': - resolution: {integrity: sha512-YurU5nwpxer43aQtaLC2UK4w6gccjfvYAaurlxFwC4b74+G7c1uS6PAjttIHUK8YsKVwWZTlDumuS7UeWTtXbg==} + '@wordpress/autop@4.20.0': + resolution: {integrity: sha512-4IjY1sB/nzBciuz5NYsSqgbVEO185Z5YjmLhnJsk3kM1ub5UaLvA5f9TiJZuBcalJC3umA6GHqlF98owAREzbA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/babel-plugin-import-jsx-pragma@4.41.0': @@ -1860,8 +1868,8 @@ packages: '@wordpress/base-styles@4.49.0': resolution: {integrity: sha512-yFRYqNtd26ULZ0oAHhCu/IcaA0XHI3E7kRCKajZqUvyRQj7YprXnpD3o0/pnwvF6ZFTXzCX8pXHjUc2TIv97ig==} - '@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': @@ -1871,8 +1879,8 @@ packages: 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': @@ -1885,8 +1893,8 @@ packages: resolution: {integrity: sha512-J7ejzzDpPZddVIiq2YiK8J/pNTJDy3X1s+5ZtwkwklCxBMZJurxf9pEhtbaf7us0Q6c1j8Ubv7Fpx3lqk2ypxA==} engines: {node: '>=14'} - '@wordpress/commands@1.15.1': - resolution: {integrity: sha512-oBHbB4pgXXl3AjNRyEV0C8gosKe5FYrGxjs0ZuMozvJdSlT5bGCCzFAMGfTAQWWlFE+zbqyGkuXurku8jS7aEw==} + '@wordpress/commands@1.20.0': + resolution: {integrity: sha512-SCB1Vo+pgAlbOgd4XtgG9yxRJA0cHPkvtPgnHsJ2gBDUefVonmIYFla4y6VmPDcA5AwuUeaGU8DZFW6c8LQNbg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -1899,27 +1907,27 @@ packages: 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': @@ -1928,16 +1936,16 @@ packages: 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': @@ -1946,12 +1954,12 @@ packages: 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': @@ -1972,12 +1980,12 @@ packages: 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': @@ -1985,17 +1993,17 @@ packages: 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': @@ -2011,8 +2019,8 @@ packages: '@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 @@ -2021,12 +2029,12 @@ packages: 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 @@ -2043,8 +2051,8 @@ packages: 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 @@ -2056,28 +2064,28 @@ packages: 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 @@ -2091,12 +2099,12 @@ packages: 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': @@ -2105,32 +2113,38 @@ packages: peerDependencies: stylelint: ^14.2 - '@wordpress/token-list@3.15.0': - resolution: {integrity: sha512-Mupfwf7vjGZ2gmQMI6B3YSkoN1lClt/6I/gEkJKCIT/dm3z1zCJPcRqGixettx27FRZB0KHcpQpDL2eDE3Y5AQ==} + '@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: ^16.8.2 - '@wordpress/undo-manager@1.15.1': - resolution: {integrity: sha512-OJ/MSgHEn0pizpF4/ukJsoHpAfie8kFnJOJat8kEsqUVCFC1T58FgUcLiDf6cdDRZULS215cMueqJ7RF2hy6Hg==} + '@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.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/url@4.20.0': + resolution: {integrity: sha512-IUkph25ewBDTxuSC9wXvMbec6IB2A3pNz0Xkm1Ffzm2ngk/f+0+Ko2WSKdXqqR8U67Eyb+ZUZFtBPmEsKvEZ4A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/warning@2.58.0': resolution: {integrity: sha512-9bZlORhyMY2nbWozeyC5kqJsFzEPP4DCLhGmjtbv+YWGHttUrxUZEfrKdqO+rUODA8rP5zeIly1nCQOUnkw4Lg==} engines: {node: '>=12'} - '@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 +2177,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 @@ -2315,8 +2329,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 +2364,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 +2385,16 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axe-core@4.10.2: - resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} + axe-core@4.10.3: + resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} engines: {node: '>=4'} axe-core@4.7.2: resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} 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==} @@ -2417,18 +2435,18 @@ 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 - babel-plugin-polyfill-corejs3@0.10.6: - resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + 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.3: - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + 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 @@ -2452,8 +2470,8 @@ packages: 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==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2523,16 +2541,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 +2578,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==} @@ -2612,8 +2633,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==} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} classlist-polyfill@1.2.0: resolution: {integrity: sha512-GzIjNdcEtH4ieA2S8NmrSxv7DfEV5fmixQeyTmqmRmRJPGpRBaSnA2a0VrCjyT8iW8JjEdMbKzDotAJf+ajgaQ==} @@ -2646,8 +2667,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 @@ -2715,8 +2736,8 @@ packages: 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: @@ -2771,18 +2792,18 @@ 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,6 +2821,15 @@ 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} @@ -2870,6 +2900,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'} @@ -2989,8 +3023,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==} @@ -3140,8 +3174,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.124: + resolution: {integrity: sha512-riELkpDUqBi00gqreV3RIGoowxGrfueEKBd6zPdOk/I8lvuFpBGNkYoHof3zUHbiTBsIU8oxdIIL/WNrAG1/7A==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -3174,8 +3208,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 +3223,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 +3260,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 +3374,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 +3394,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 +3408,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 +3416,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 +3513,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 +3533,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'} @@ -3559,8 +3575,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 +3602,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 +3621,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 +3637,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 +3652,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 @@ -3695,8 +3711,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 +3802,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 +3889,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 +3909,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 +3934,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,14 +3999,18 @@ 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==} + immutable@5.1.1: + resolution: {integrity: sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} import-lazy@4.0.0: @@ -4066,8 +4085,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 +4097,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 +4254,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 +4311,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: @@ -4529,6 +4548,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'} @@ -4552,6 +4574,9 @@ packages: 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 +4584,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==} @@ -4666,8 +4691,8 @@ 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: @@ -4741,6 +4766,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 +4786,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 +4823,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: @@ -4858,23 +4893,23 @@ packages: 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: @@ -4890,8 +4925,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 @@ -4988,8 +5023,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 +5033,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 +5045,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 +5139,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: @@ -5238,8 +5273,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,8 +5449,8 @@ packages: peerDependencies: postcss: ^8.4.31 - postcss-prefixwrap@1.53.0: - resolution: {integrity: sha512-eDd4IsLCGACR12rSwrL66dCpDBzL04nXTYvq6IOY+wmaRnVRiNf9IAe2bZgd7G0UYIgafTcXpBey/D9QeVHQQA==} + postcss-prefixwrap@1.55.0: + resolution: {integrity: sha512-bQ7vm5RxKpvKk5Y3sQdZRcsEZlAT5C9lvWDWl4yrGQhYnWkRvyhdGgsWytQuXFanRm44v0IyzHckIih1aO2WeQ==} peerDependencies: postcss: '*' @@ -5440,6 +5475,12 @@ packages: peerDependencies: postcss: ^8.3.3 + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + postcss-scss@4.0.9: resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} engines: {node: '>=12.0'} @@ -5450,8 +5491,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 +5515,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: @@ -5562,9 +5603,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 +5618,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 @@ -5608,8 +5646,8 @@ packages: 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 +5672,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 +5682,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 +5709,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 +5742,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==} @@ -5817,8 +5855,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,11 +5869,6 @@ 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'} @@ -5857,8 +5890,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==} @@ -5900,8 +5933,8 @@ packages: 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 +5954,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 @@ -5969,8 +6002,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 @@ -6107,8 +6140,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: @@ -6158,8 +6191,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 +6226,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,11 +6325,27 @@ packages: peerDependencies: postcss: ^8.4.31 + 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-scss@5.0.2: resolution: {integrity: sha512-b14BSZjcwW0hqbzm9b0S/ScN2+3CO3O4vcMNOw2KGf8lfVSwJ4p5TbNEXKwKl1+0FMtgRXZj6DqVUe/7nGnuBg==} peerDependencies: stylelint: ^14.0.0 + stylelint-config-recommended@14.0.1: + resolution: {integrity: sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.1.0 + stylelint-config-recommended@6.0.0: resolution: {integrity: sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==} peerDependencies: @@ -6307,11 +6356,22 @@ packages: peerDependencies: stylelint: ^14.5.1 || ^15.0.0 + stylelint-scss@6.11.1: + resolution: {integrity: sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA==} + engines: {node: '>=18.12.0'} + peerDependencies: + 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} hasBin: true + stylelint@16.17.0: + resolution: {integrity: sha512-I9OwVIWRMqVm2Br5iTbrfSqGRPWQUlvm6oXO1xZuYYu0Gpduy67N8wXOZv15p6E/JdlZiAtQaIoLKZEWk5hrjw==} + engines: {node: '>=18.12.0'} + hasBin: true + stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} @@ -6327,6 +6387,10 @@ packages: 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==} engines: {node: '>= 0.4'} @@ -6342,15 +6406,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: @@ -6377,8 +6441,8 @@ packages: 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 +6457,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 @@ -6583,8 +6647,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 +6712,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: @@ -6674,8 +6738,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: @@ -6752,11 +6816,11 @@ 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==} @@ -6770,8 +6834,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: @@ -6818,8 +6882,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 +6929,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'} @@ -6889,8 +6957,8 @@ packages: 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 @@ -6973,8 +7041,8 @@ 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'} snapshots: @@ -7006,20 +7074,20 @@ 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.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 +7096,59 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@8.57.1)': + '@babel/eslint-parser@7.27.0(@babel/core@7.26.10)(eslint@8.57.1)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@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.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.26.10)': dependencies: - '@babel/core': 7.26.0 + '@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.3(@babel/core@7.26.0)': + '@babel/helper-define-polyfill-provider@0.6.4(@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-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 +7157,55 @@ 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.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.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.26.10)': dependencies: - '@babel/core': 7.26.0 + '@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.26.4 + '@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,634 +7217,634 @@ 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.25.9 - '@babel/types': 7.26.3 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 - '@babel/parser@7.26.3': + '@babel/parser@7.27.0': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.27.0 - '@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.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.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.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/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.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@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/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-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@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/core': 7.26.10 - '@babel/plugin-syntax-async-generators@7.8.4(@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-bigint@7.8.3(@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-class-properties@7.12.13(@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-class-static-block@7.14.5(@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-import-assertions@7.26.0(@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-import-attributes@7.26.0(@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-import-meta@7.10.4(@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-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-json-strings@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-jsx@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-syntax-logical-assignment-operators@7.10.4(@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-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@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-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-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-syntax-object-rest-spread@7.8.3(@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-syntax-optional-catch-binding@7.8.3(@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-syntax-optional-chaining@7.8.3(@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-syntax-private-property-in-object@7.14.5(@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-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-top-level-await@7.14.5(@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-syntax-typescript@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-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@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-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.26.0)': + '@babel/plugin-transform-arrow-functions@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-async-generator-functions@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-plugin-utils': 7.25.9 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@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-async-to-generator@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/core': 7.26.10 '@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) + '@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-block-scoped-functions@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-block-scoping@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-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-class-properties@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-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-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-class-static-block@7.26.0(@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-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-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-classes@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-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 + '@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-computed-properties@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/template': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.27.0 - '@babel/plugin-transform-destructuring@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/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-transform-dotall-regex@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-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-keys@7.25.9(@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-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-transform-duplicate-named-capturing-groups-regex@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-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-dynamic-import@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/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-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-export-namespace-from@7.25.9(@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-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-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-function-name@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-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@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-json-strings@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-json-strings@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-literals@7.25.9(@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/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-transform-logical-assignment-operators@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-member-expression-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-member-expression-literals@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-transform-modules-amd@7.25.9(@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/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.26.0)': + '@babel/plugin-transform-modules-commonjs@7.26.3(@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/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.26.0)': + '@babel/plugin-transform-modules-systemjs@7.25.9(@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/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.26.4 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-umd@7.25.9(@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/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.26.0)': + '@babel/plugin-transform-named-capturing-groups-regex@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-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.26.0)': + '@babel/plugin-transform-new-target@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-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@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-numeric-separator@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-object-rest-spread@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-object-rest-spread@7.25.9(@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-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.26.0)': + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10)': 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.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.26.0)': + '@babel/plugin-transform-optional-catch-binding@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-optional-chaining@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-optional-chaining@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/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-parameters@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-private-methods@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-private-methods@7.25.9(@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 + '@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.26.0)': + '@babel/plugin-transform-private-property-in-object@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-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.26.0)': + '@babel/plugin-transform-property-literals@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-react-constant-elements@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-constant-elements@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-react-display-name@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-display-name@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-react-jsx-development@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx-development@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) + '@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.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx@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-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 + '@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.0)': + '@babel/plugin-transform-react-pure-annotations@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-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-regenerator@7.27.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 regenerator-transform: 0.15.2 - '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-transform-regexp-modifiers@7.26.0(@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-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.26.0)': + '@babel/plugin-transform-reserved-words@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-runtime@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-runtime@7.26.10(@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-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) + '@babel/helper-plugin-utils': 7.26.5 + 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) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-shorthand-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/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-spread@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/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-sticky-regex@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-template-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-template-literals@7.26.8(@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-typeof-symbol@7.27.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-transform-typescript@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-transform-typescript@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-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 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.0) + '@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.26.0)': + '@babel/plugin-transform-unicode-escapes@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-unicode-property-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-unicode-property-regex@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-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.26.0)': + '@babel/plugin-transform-unicode-regex@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-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.26.0)': + '@babel/plugin-transform-unicode-sets-regex@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-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - '@babel/preset-env@7.26.0(@babel/core@7.26.0)': + '@babel/preset-env@7.26.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/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.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 + '@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.26.0)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/types': 7.26.3 + '@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.0)': + '@babel/preset-react@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/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) + '@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.26.0(@babel/core@7.26.0)': + '@babel/preset-typescript@7.27.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/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) + '@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 @@ -7784,45 +7852,67 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.26.0': + '@babel/runtime@7.27.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.25.9': + '@babel/template@7.27.0': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 - '@babel/traverse@7.26.4': + '@babel/traverse@7.27.0': 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 + '@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.26.3': + '@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/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@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@2.2.0(postcss-selector-parser@6.1.2)': dependencies: postcss-selector-parser: 6.1.2 + '@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': {} + '@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.27.0 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -7861,9 +7951,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.27.0 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -7873,7 +7963,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 +7977,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.27.0 '@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 +8008,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 +8022,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 +8031,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 @@ -8003,13 +8054,6 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 - '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -8022,10 +8066,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 +8088,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.13 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -8061,14 +8101,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.13 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.13)(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 +8133,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.13 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -8111,7 +8151,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.10.5 + '@types/node': 22.13.13 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8133,7 +8173,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.13 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -8180,7 +8220,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 @@ -8203,7 +8243,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.13 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -8229,6 +8269,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,90 +8289,90 @@ 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': {} + '@pkgr/core@0.2.0': {} '@playwright/test@1.49.1': dependencies: playwright: 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)': + '@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@5.1.4) 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@5.1.4)(webpack@5.98.0) '@polka/url@1.0.0-next.28': {} @@ -8348,138 +8392,138 @@ snapshots: '@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@19.0.0(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@19.0.0(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@19.0.0(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@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@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@19.0.0(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-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@19.0.0(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@19.0.0(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) 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@19.0.0(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@19.0.0(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) 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@19.0.0(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@19.0.0(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) 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@19.0.0(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) 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@19.0.0(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) 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: @@ -8573,54 +8617,65 @@ 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.7.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.7.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)': 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) snake-case: 3.0.4 @@ -8630,13 +8685,13 @@ 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))': 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) '@svgr/core': 8.1.0(typescript@5.7.2) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 @@ -8654,11 +8709,11 @@ snapshots: '@svgr/webpack@8.1.0(typescript@5.7.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) + '@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.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) @@ -8687,68 +8742,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.13 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 '@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.13 '@types/connect@3.4.38': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 '@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.13 + '@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.13 + '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -8756,17 +8811,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.13 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 '@types/gradient-parser@0.1.3': {} @@ -8774,9 +8829,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.13 '@types/istanbul-lib-coverage@2.0.6': {} @@ -8790,7 +8845,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 @@ -8808,9 +8863,9 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 - '@types/node@22.10.5': + '@types/node@22.13.13': dependencies: undici-types: 6.20.0 @@ -8820,27 +8875,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.13 '@types/serve-index@1.9.4': dependencies: @@ -8849,12 +8904,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.10.5 + '@types/node': 22.13.13 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 '@types/source-list-map@0.1.6': {} @@ -8870,22 +8925,22 @@ snapshots: '@types/webpack-sources@3.2.3': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 '@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.13 '@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.13 '@types/yargs-parser@21.0.3': {} @@ -8895,7 +8950,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 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)': @@ -8911,7 +8966,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.6.3 + semver: 7.7.1 ts-api-utils: 1.4.3(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 @@ -8964,7 +9019,7 @@ snapshots: debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.3 + semver: 7.7.1 tsutils: 3.21.0(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 @@ -8979,7 +9034,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.3 + semver: 7.7.1 ts-api-utils: 1.4.3(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 @@ -8988,29 +9043,29 @@ snapshots: '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.7.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) 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)': 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) eslint: 8.57.1 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color - typescript @@ -9025,7 +9080,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 +9165,107 @@ 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@5.1.4) + 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/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) + webpack: 5.98.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(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/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(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@5.1.4) + 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@5.1.4)(webpack@5.97.1) + webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.98.0) - '@wordpress/a11y@4.15.1': + '@wordpress/a11y@4.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/dom-ready': 4.15.0 - '@wordpress/i18n': 5.15.1 + '@wordpress/dom-ready': 4.20.0 + '@wordpress/i18n': 5.20.0 '@wordpress/api-fetch@6.55.0': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 '@wordpress/i18n': 4.58.0 '@wordpress/url': 3.59.0 - '@wordpress/api-fetch@7.15.1': + '@wordpress/api-fetch@7.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/i18n': 5.15.1 - '@wordpress/url': 4.15.0 + '@wordpress/i18n': 5.20.0 + '@wordpress/url': 4.20.0 - '@wordpress/autop@4.15.0': + '@wordpress/autop@4.20.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/babel-plugin-import-jsx-pragma@4.41.0(@babel/core@7.26.0)': + '@wordpress/babel-plugin-import-jsx-pragma@4.41.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@wordpress/babel-preset-default@7.42.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) + '@babel/core': 7.26.10 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.26.10) + '@babel/preset-env': 7.26.9(@babel/core@7.26.10) + '@babel/preset-typescript': 7.27.0(@babel/core@7.26.10) + '@babel/runtime': 7.27.0 + '@wordpress/babel-plugin-import-jsx-pragma': 4.41.0(@babel/core@7.26.10) '@wordpress/browserslist-config': 5.41.0 '@wordpress/warning': 2.58.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/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)': + '@wordpress/block-editor@13.4.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@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) + '@babel/runtime': 7.27.0 + '@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@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/a11y': 4.20.0 + '@wordpress/api-fetch': 7.20.0 + '@wordpress/blob': 4.20.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/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@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.20)(react-dom@19.0.0(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@19.0.0(react@18.3.1))(react@18.3.1) + '@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/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,13 +9273,13 @@ 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) + postcss: 8.5.3 + postcss-prefixwrap: 1.55.0(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-easy-crop: 5.4.1(react-dom@19.0.0(react@18.3.1))(react@18.3.1) remove-accents: 0.5.0 transitivePeerDependencies: - '@emotion/is-prop-valid' @@ -9232,28 +9287,28 @@ snapshots: - '@types/react-dom' - supports-color - '@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)': 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 @@ -9269,18 +9324,18 @@ snapshots: '@wordpress/browserslist-config@5.41.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@19.0.0(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@19.0.0(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@19.0.0(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 19.0.0(react@18.3.1) transitivePeerDependencies: @@ -9289,50 +9344,50 @@ snapshots: - '@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@28.13.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(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/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) '@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@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) + re-resizable: 6.11.2(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) @@ -9343,50 +9398,50 @@ snapshots: - '@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)': + '@wordpress/components@29.6.0(@emotion/is-prop-valid@1.3.1)(@types/react@18.3.20)(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/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) '@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@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) + re-resizable: 6.11.2(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) @@ -9397,33 +9452,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,31 +9488,31 @@ 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@5.9.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@5.1.4) - '@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)': dependencies: @@ -9466,7 +9521,7 @@ snapshots: '@wordpress/keycodes': 3.58.0 '@wordpress/url': 3.59.0 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) mime: 3.0.0 @@ -9478,25 +9533,25 @@ snapshots: - 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@18.1.0(@babel/core@7.26.10)(@types/eslint@9.6.1)(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0))(typescript@5.7.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) + '@babel/core': 7.26.10 + '@babel/eslint-parser': 7.27.0(@babel/core@7.26.10)(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 @@ -9505,12 +9560,12 @@ snapshots: 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-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.13.13)(babel-plugin-macros@3.1.0))(typescript@5.7.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.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0))(typescript@5.7.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 @@ -9526,108 +9581,108 @@ snapshots: '@wordpress/hooks@3.58.0': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.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 + '@babel/runtime': 7.27.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@7.29.0(jest@29.7.0(@types/node@22.13.13)(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.27.0 + jest: 29.7.0(@types/node@22.13.13)(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@11.29.0(@babel/core@7.26.10)(jest@29.7.0(@types/node@22.13.13)(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.26.10 + '@wordpress/jest-console': 7.29.0(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)) + babel-jest: 29.7.0(@babel/core@7.26.10) + jest: 29.7.0(@types/node@22.13.13)(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 + '@babel/runtime': 7.27.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))': dependencies: npm-package-json-lint: 6.4.0(typescript@5.7.2) - '@wordpress/postcss-plugins-preset@4.42.0(postcss@8.4.49)': + '@wordpress/postcss-plugins-preset@4.42.0(postcss@8.5.3)': dependencies: '@wordpress/base-styles': 4.49.0 - autoprefixer: 10.4.20(postcss@8.4.49) - postcss: 8.4.49 + 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@19.0.0(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@19.0.0(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) @@ -9640,23 +9695,23 @@ snapshots: 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,65 +9719,65 @@ 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)': + '@wordpress/scripts@27.9.0(@playwright/test@1.49.1)(@types/eslint@9.6.1)(@types/node@22.13.13)(@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 + '@babel/core': 7.26.10 '@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) + '@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.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/dependency-extraction-webpack-plugin': 5.9.0(webpack@5.98.0) '@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/eslint-plugin': 18.1.0(@babel/core@7.26.10)(@types/eslint@9.6.1)(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.13)(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.10)(jest@29.7.0(@types/node@22.13.13)(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/postcss-plugins-preset': 4.42.0(postcss@8.5.3) '@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/stylelint-config': 21.41.0(postcss@8.5.3)(stylelint@14.16.1) 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.26.10) + babel-loader: 8.4.1(@babel/core@7.26.10)(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) + clean-webpack-plugin: 3.0.0(webpack@5.98.0) + copy-webpack-plugin: 10.2.4(webpack@5.98.0) cross-spawn: 5.1.0 - css-loader: 6.11.0(webpack@5.97.1) - cssnano: 6.1.2(postcss@8.4.49) + 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: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0) jest-dev-server: 9.0.2 jest-environment-jsdom: 29.7.0 jest-environment-node: 29.7.0 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-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) react: 18.3.1 @@ -9731,16 +9786,16 @@ snapshots: 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) + sass: 1.86.0 + sass-loader: 12.6.0(sass@1.86.0)(webpack@5.98.0) + source-map-loader: 3.0.2(webpack@5.98.0) 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) + 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@5.1.4)(webpack@5.98.0) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -9758,7 +9813,6 @@ snapshots: - eslint-import-resolver-webpack - fibers - file-loader - - jiti - node-notifier - node-sass - sass-embedded @@ -9772,48 +9826,57 @@ 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@21.41.0(postcss@8.5.3)(stylelint@14.16.1)': 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) + stylelint-config-recommended-scss: 5.0.2(postcss@8.5.3)(stylelint@14.16.1) + transitivePeerDependencies: + - postcss + + '@wordpress/stylelint-config@23.12.0(postcss@8.5.3)(stylelint@16.17.0(typescript@5.7.2))': + dependencies: + '@stylistic/stylelint-plugin': 3.1.2(stylelint@16.17.0(typescript@5.7.2)) + stylelint: 16.17.0(typescript@5.7.2) + stylelint-config-recommended: 14.0.1(stylelint@16.17.0(typescript@5.7.2)) + stylelint-config-recommended-scss: 14.1.0(postcss@8.5.3)(stylelint@16.17.0(typescript@5.7.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': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 remove-accents: 0.5.0 - '@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,24 +9897,24 @@ 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: {} agent-base@6.0.2: dependencies: - debug: 4.4.0 + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -9884,7 +9947,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 @@ -9945,7 +10008,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 +10018,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 +10038,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 +10071,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 +10080,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 +10093,34 @@ 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 +10129,38 @@ snapshots: b4a@1.6.7: {} - babel-jest@29.7.0(@babel/core@7.26.0): + babel-jest@29.7.0(@babel/core@7.26.10): dependencies: - '@babel/core': 7.26.0 + '@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.0) + 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@8.4.1(@babel/core@7.26.0)(webpack@5.97.1): + babel-loader@8.4.1(@babel/core@7.26.10)(webpack@5.98.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 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) + webpack: 5.98.0(webpack-cli@5.1.4) - babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1): + babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.98.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 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@5.1.4) 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,65 +10170,65 @@ 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.27.0 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.26.10): 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.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-corejs3@0.10.6(@babel/core@7.26.0): + babel-plugin-polyfill-corejs3@0.11.1(@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/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-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@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.26.0): - 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-preset-jest@29.6.3(@babel/core@7.26.0): - dependencies: - '@babel/core': 7.26.0 + 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.26.10): + dependencies: + '@babel/core': 7.26.10 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.26.10) babel-runtime@6.25.0: dependencies: @@ -10173,7 +10239,7 @@ snapshots: balanced-match@2.0.0: {} - bare-events@2.5.3: + bare-events@2.5.4: optional: true base64-js@1.5.1: {} @@ -10231,10 +10297,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.124 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 +10324,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 +10366,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,13 +10428,13 @@ snapshots: chokidar@4.0.3: dependencies: - readdirp: 4.0.2 + readdirp: 4.1.2 chownr@1.1.4: {} chrome-launcher@0.15.2: dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -10379,15 +10450,15 @@ snapshots: ci-info@3.9.0: {} - cjs-module-lexer@1.4.1: {} + cjs-module-lexer@1.4.3: {} classlist-polyfill@1.2.0: {} - 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@5.1.4) clipboard@2.0.11: dependencies: @@ -10423,14 +10494,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@19.0.0(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@19.0.0(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@19.0.0(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) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -10477,9 +10548,9 @@ snapshots: 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 @@ -10530,7 +10601,7 @@ snapshots: 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 +10609,53 @@ 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@5.1.4) - 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): 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 - create-jest@29.7.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0): + cosmiconfig@9.0.0(typescript@5.7.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.7.2 + + create-jest@29.7.0(@types/node@22.13.13)(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.13)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10612,37 +10692,37 @@ snapshots: csp_evaluator@1.1.1: {} - 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@5.1.4) - 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@5.1.4) css-select@5.1.0: dependencies: @@ -10662,53 +10742,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 +10826,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 @@ -10784,7 +10869,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: @@ -10908,7 +10993,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 +11003,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.79: {} + electron-to-chromium@1.5.124: {} emittery@0.13.1: {} @@ -10942,7 +11027,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 +11041,8 @@ snapshots: entities@4.5.0: {} + env-paths@2.2.1: {} + envinfo@7.14.0: {} equivalent-key-map@0.2.2: {} @@ -10974,17 +11061,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 +11088,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 +11107,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 +11116,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 +11134,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 @@ -11112,7 +11199,7 @@ snapshots: 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 @@ -11137,13 +11224,13 @@ snapshots: - 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.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0))(typescript@5.7.2): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.7.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) + jest: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - supports-color - typescript @@ -11158,7 +11245,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 +11256,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 +11269,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.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0))(typescript@5.7.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.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0))(typescript@5.7.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 +11289,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 +11302,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 +11321,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 +11368,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: {} @@ -11429,7 +11464,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.4.0 + debug: 4.3.4 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -11455,13 +11490,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 +11510,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: {} @@ -11529,18 +11564,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 +11593,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,25 +11621,26 @@ 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@19.0.0(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 @@ -11638,7 +11668,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 +11680,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 +11702,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,15 +11714,15 @@ 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: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.4.0 + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -11720,8 +11750,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 +11794,6 @@ snapshots: dependencies: type-fest: 0.20.2 - globals@14.0.0: {} - globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -11856,6 +11884,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 +11905,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 +11930,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: @@ -11913,13 +11943,13 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.3.4 transitivePeerDependencies: - supports-color 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 @@ -11940,14 +11970,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.3.4 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -11961,9 +11991,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,11 +12005,13 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.3: {} + image-ssim@0.2.0: {} - immutable@5.0.3: {} + 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 @@ -12036,14 +12068,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 +12089,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 +12108,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 +12125,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 +12135,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 +12148,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 +12183,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 +12192,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 +12217,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 +12244,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 +12254,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 +12284,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 +12306,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.13 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -12293,16 +12326,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.13)(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.13)(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.13)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -12312,12 +12345,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.13)(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,7 +12370,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -12346,15 +12379,13 @@ snapshots: 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 tree-kill: 1.2.2 wait-on: 7.2.0 transitivePeerDependencies: - debug - - jiti - - supports-color jest-diff@29.7.0: dependencies: @@ -12381,7 +12412,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.13 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -12395,7 +12426,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.13 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12405,7 +12436,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.10.5 + '@types/node': 22.13.13 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12444,7 +12475,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.13 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -12479,7 +12510,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.13 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -12507,9 +12538,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.13 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 +12558,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 +12577,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.13 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12572,7 +12603,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.5 + '@types/node': 22.13.13 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12581,23 +12612,23 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 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.13 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.13)(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.13)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12634,20 +12665,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 +12688,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 @@ -12701,6 +12732,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 @@ -12717,13 +12752,15 @@ snapshots: known-css-properties@0.26.0: {} + known-css-properties@0.35.0: {} + language-subtag-registry@0.3.23: {} language-tags@1.0.9: 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 @@ -12852,7 +12889,7 @@ snapshots: dependencies: tslib: 2.8.1 - lru-cache@11.0.2: {} + lru-cache@11.1.0: {} lru-cache@4.1.5: dependencies: @@ -12877,7 +12914,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 makeerror@1.0.12: dependencies: @@ -12926,6 +12963,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 +12977,8 @@ snapshots: memize@2.1.0: {} + meow@13.2.0: {} + meow@9.0.0: dependencies: '@types/minimist': 1.2.5 @@ -12974,7 +13017,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 +13031,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@5.1.4) minimalistic-assert@1.0.1: {} @@ -13031,21 +13074,21 @@ snapshots: 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: {} @@ -13058,7 +13101,7 @@ snapshots: dns-packet: 5.6.1 thunky: 1.1.0 - nanoid@3.3.8: {} + nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -13107,7 +13150,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: {} @@ -13136,7 +13179,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 +13203,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 +13245,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 +13286,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 +13300,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,11 +13327,11 @@ 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 - debug: 4.4.0 + debug: 4.3.4 get-uri: 6.0.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -13355,7 +13399,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: {} @@ -13402,220 +13446,224 @@ 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@5.1.4) 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-prefixwrap@1.55.0(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@6.0.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + 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 @@ -13656,11 +13704,11 @@ snapshots: proxy-agent@6.3.0: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.3.4 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: @@ -13729,8 +13777,6 @@ snapshots: queue-microtask@1.2.3: {} - queue-tick@1.0.1: {} - quick-lru@4.0.1: {} randombytes@2.1.0: @@ -13746,7 +13792,7 @@ 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@19.0.0(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 19.0.0(react@18.3.1) @@ -13775,7 +13821,7 @@ snapshots: 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@19.0.0(react@18.3.1))(react@18.3.1): dependencies: normalize-wheel: 1.0.1 react: 18.3.1 @@ -13788,32 +13834,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@19.0.0(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-router: 7.4.0(react-dom@19.0.0(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@19.0.0(react@18.3.1))(react@18.3.1): dependencies: '@types/cookie': 0.6.0 cookie: 1.0.2 @@ -13823,15 +13869,15 @@ snapshots: optionalDependencies: react-dom: 19.0.0(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@19.0.0(react@18.3.1))(react@18.3.1): dependencies: clsx: 2.1.1 react: 18.3.1 @@ -13882,7 +13928,7 @@ snapshots: dependencies: picomatch: 2.3.1 - readdirp@4.0.2: {} + readdirp@4.1.2: {} rechoir@0.8.0: dependencies: @@ -13901,8 +13947,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 @@ -13918,7 +13964,7 @@ snapshots: 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 +14039,7 @@ snapshots: retry@0.13.1: {} - reusify@1.0.4: {} + reusify@1.1.0: {} rimraf@2.7.1: dependencies: @@ -14003,11 +14049,6 @@ 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: @@ -14019,7 +14060,7 @@ snapshots: dependencies: find-up: 5.0.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 +14076,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 +14099,34 @@ 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): + sass-loader@12.6.0(sass@1.86.0)(webpack@5.98.0): dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.98.0(webpack-cli@5.1.4) optionalDependencies: - sass: 1.83.1 + sass: 1.86.0 - 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@5.1.4) - 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: @@ -14131,7 +14172,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.3: {} + semver@7.7.1: {} send@0.19.0: dependencies: @@ -14191,7 +14232,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 +14247,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: {} @@ -14244,27 +14285,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 +14319,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: {} @@ -14309,12 +14350,12 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.3 - debug: 4.4.0 - socks: 2.8.3 + debug: 4.3.4 + 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 +14364,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@5.1.4) source-map-support@0.5.13: dependencies: @@ -14354,21 +14395,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 +14434,7 @@ snapshots: speedline-core@1.4.3: dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.13 image-ssim: 0.2.0 jpeg-js: 0.4.4 @@ -14411,13 +14452,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 +14491,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 +14512,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,27 +14568,40 @@ 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@5.1.4) 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.7.2)): dependencies: - postcss-scss: 4.0.9(postcss@8.4.49) + postcss-scss: 4.0.9(postcss@8.5.3) + stylelint: 16.17.0(typescript@5.7.2) + stylelint-config-recommended: 14.0.1(stylelint@16.17.0(typescript@5.7.2)) + stylelint-scss: 6.11.1(stylelint@16.17.0(typescript@5.7.2)) + optionalDependencies: + postcss: 8.5.3 + + stylelint-config-recommended-scss@5.0.2(postcss@8.5.3)(stylelint@14.16.1): + dependencies: + postcss-scss: 4.0.9(postcss@8.5.3) 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 + stylelint-config-recommended@14.0.1(stylelint@16.17.0(typescript@5.7.2)): + dependencies: + stylelint: 16.17.0(typescript@5.7.2) + stylelint-config-recommended@6.0.0(stylelint@14.16.1): dependencies: stylelint: 14.16.1 @@ -14561,6 +14614,18 @@ snapshots: postcss-value-parser: 4.2.0 stylelint: 14.16.1 + stylelint-scss@6.11.1(stylelint@16.17.0(typescript@5.7.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: 7.1.0 + postcss-value-parser: 4.2.0 + stylelint: 16.17.0(typescript@5.7.2) + stylelint@14.16.1: dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) @@ -14586,10 +14651,10 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.49 + postcss: 8.5.3 postcss-media-query-parser: 0.2.3 postcss-resolve-nested-selector: 0.1.6 - postcss-safe-parser: 6.0.0(postcss@8.4.49) + postcss-safe-parser: 6.0.0(postcss@8.5.3) postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 @@ -14604,6 +14669,50 @@ snapshots: transitivePeerDependencies: - supports-color + stylelint@16.17.0(typescript@5.7.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': 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: 9.0.0(typescript@5.7.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: 10.0.7 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 7.0.3 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.35.0 + mathml-tag-names: 2.1.3 + meow: 13.2.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-resolve-nested-selector: 0.1.6 + 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 + supports-hyperlinks: 3.2.0 + svg-tags: 1.0.0 + table: 6.9.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + stylis@4.2.0: {} supports-color@7.2.0: @@ -14619,6 +14728,11 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} svg-parser@2.0.4: {} @@ -14635,13 +14749,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: @@ -14683,21 +14797,21 @@ snapshots: 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@5.1.4) - 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 @@ -14799,14 +14913,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 +14929,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,10 +14938,10 @@ 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 typedarray-to-buffer@3.1.5: @@ -14840,7 +14954,7 @@ snapshots: 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 +14985,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 +15003,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@5.1.4) 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,7 +15042,7 @@ snapshots: utils-merge@1.0.1: {} - uuid@11.0.5: {} + uuid@11.1.0: {} uuid@8.3.2: {} @@ -14949,7 +15063,7 @@ snapshots: validate-npm-package-name@5.0.1: {} - validator@13.12.0: {} + validator@13.15.0: {} vary@1.1.2: {} @@ -14959,11 +15073,11 @@ snapshots: wait-on@7.2.0: 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 @@ -14989,7 +15103,7 @@ snapshots: 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 +15118,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 +15132,22 @@ 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@5.1.4) 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@5.1.4)(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@5.1.4) - webpack-dev-server@4.15.2(webpack-cli@5.1.4)(webpack@5.97.1): + webpack-dev-server@4.15.2(webpack-cli@5.1.4)(webpack@5.98.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -15041,20 +15155,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 +15177,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@5.1.4) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(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@5.1.4) webpack-sources: 2.3.1 webpack-merge@5.10.0: @@ -15093,17 +15207,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 +15227,13 @@ 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.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: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.98.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -15127,7 +15241,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 @@ -15152,26 +15266,26 @@ snapshots: 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 +15296,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,11 +15352,16 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + ws@7.5.10: {} ws@8.13.0: {} - ws@8.18.0: {} + ws@8.18.1: {} ws@8.5.0: {} @@ -15313,4 +15433,4 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.1.1: {} + yocto-queue@1.2.1: {} diff --git a/resources/scss/app.scss b/resources/scss/app.scss index 9b7dffd..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"; diff --git a/resources/scss/components/_buttons.scss b/resources/scss/components/_buttons.scss index 2d279a6..21e77e6 100644 --- a/resources/scss/components/_buttons.scss +++ b/resources/scss/components/_buttons.scss @@ -12,7 +12,7 @@ justify-content: center; font-size: 1rem; color: variables.$white; - line-height: 1.5rem; + line-height: 1.5; padding: 0.5rem 1.25rem; background-color: variables.$primary; border-radius: variables.$border-radius-sm; 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/editor.scss b/resources/scss/editor.scss index 07ecd76..ecaad41 100644 --- a/resources/scss/editor.scss +++ b/resources/scss/editor.scss @@ -1,3 +1,3 @@ body { - background-color: var(--color-white); -} \ No newline at end of file + background-color: var(--color-white); +} 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/_normalize.scss b/resources/scss/helpers/_normalize.scss index 91b3652..63e8e7c 100644 --- a/resources/scss/helpers/_normalize.scss +++ b/resources/scss/helpers/_normalize.scss @@ -1,128 +1,58 @@ -/*! 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 */ } -/* Sections - ========================================================================== */ - -/** - * Remove the margin in all browsers. - */ - body { margin: 0; } -/** - * Render the `main` element consistently in IE. - */ - main { 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; } -/* 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 */ } -/** - * 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-family: monospace; /* 1 */ font-size: 1em; /* 2 */ } -/* Text-level semantics - ========================================================================== */ - -/** - * Remove the gray background on active links in IE 10. - */ - a { 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 */ } -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - b, strong { 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-family: monospace; /* 1 */ font-size: 1em; /* 2 */ } -/** - * Add the correct font size in all browsers. - */ - small { font-size: 80%; } -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - sub, sup { font-size: 75%; @@ -139,25 +69,10 @@ sup { top: -0.5em; } -/* Embedded content - ========================================================================== */ - -/** - * Remove the border on images inside links in IE 10. - */ - img { border-style: none; } -/* Forms - ========================================================================== */ - -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ - button, input, optgroup, @@ -169,30 +84,16 @@ textarea { margin: 0; /* 2 */ } -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - button, input { /* 1 */ 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; } -/** - * Correct the inability to style clickable types in iOS and Safari. - */ - button, [type="button"], [type="reset"], @@ -200,10 +101,6 @@ 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, @@ -212,10 +109,6 @@ button::-moz-focus-inner, padding: 0; } -/** - * Restore the focus styles unset by the previous rule. - */ - button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, @@ -223,21 +116,10 @@ button:-moz-focusring, outline: 1px dotted ButtonText; } -/** - * Correct the padding in Firefox. - */ - fieldset { 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 */ @@ -247,104 +129,51 @@ legend { white-space: normal; /* 1 */ } -/** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - progress { vertical-align: baseline; } -/** - * Remove the default vertical scrollbar in IE 10+. - */ - textarea { 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 */ } -/** - * 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; } -/** - * 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 */ } -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ - [type="search"]::-webkit-search-decoration { -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 */ } -/* Interactive - ========================================================================== */ - -/* - * Add the correct display in Edge, IE 10+, and Firefox. - */ - details { display: block; } -/* - * Add the correct display in all browsers. - */ - summary { display: list-item; } -/* Misc - ========================================================================== */ - -/** - * Add the correct display in IE 10+. - */ - template { display: none; } -/** - * Add the correct display in IE 10. - */ - [hidden], .d-none { display: none !important; diff --git a/resources/scss/layout/_borders.scss b/resources/scss/layout/_borders.scss index aad50d1..4568dfb 100644 --- a/resources/scss/layout/_borders.scss +++ b/resources/scss/layout/_borders.scss @@ -33,19 +33,19 @@ @each $label, $color in variables.$color_list { @for $i from 1 to 5 { - .b-#{$label}-#{$i} { + .b-#{"" + $label}-#{$i} { border: #{$i}#{"px"} solid var(--color-#{$color}); } - .b-top-#{$label}-#{$i} { + .b-top-#{"" + $label}-#{$i} { border-top: #{$i}#{"px"} solid var(--color-#{$color}); } - .b-left-#{$label}-#{$i} { + .b-left-#{"" + $label}-#{$i} { border-left: #{$i}#{"px"} solid var(--color-#{$color}); } - .b-bottom-#{$label}-#{$i} { + .b-bottom-#{"" + $label}-#{$i} { border-bottom: #{$i}#{"px"} solid var(--color-#{$color}); } - .b-right-#{$label}-#{$i} { + .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 db51840..89d6f57 100644 --- a/resources/scss/layout/_container.scss +++ b/resources/scss/layout/_container.scss @@ -13,7 +13,8 @@ &-lg { - @include mixins.set-container(variables.$container-lg-width); } + @include mixins.set-container(variables.$container-lg-width); + } } @include mixins.generate-flex-grid-utilities(); diff --git a/resources/scss/layout/_typography.scss b/resources/scss/layout/_typography.scss index ec3159c..a7e6507 100644 --- a/resources/scss/layout/_typography.scss +++ b/resources/scss/layout/_typography.scss @@ -97,7 +97,7 @@ ul { font-weight: 700; font-family: sans-serif; font-size: 1.25rem; - line-height: 1.625rem; + line-height: 1.625; position: absolute; top: 0; left: 0; From 696724dbe9eea7e56b8bcbeba2babc72af598d89 Mon Sep 17 00:00:00 2001 From: Javier Troya Date: Wed, 26 Mar 2025 20:19:59 +0100 Subject: [PATCH 05/17] Lint. Workflow. --- .github/workflows/lint.yml | 59 +++++++++++++++++++++++++++++++++ .stylelint.config.js | 9 +++++ web/content/languages/app.pot | 13 ++++++++ web/content/languages/react.pot | 13 ++++++++ web/content/languages/twig.pot | 13 ++++++++ 5 files changed, 107 insertions(+) create mode 100644 .github/workflows/lint.yml create mode 100644 .stylelint.config.js create mode 100644 web/content/languages/app.pot create mode 100644 web/content/languages/react.pot create mode 100644 web/content/languages/twig.pot diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..19d4fa1 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,59 @@ +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: Cache Vendor + id: cache-vendor + uses: actions/cache@v3 + env: + cache-name: cache-vendors + with: + path: vendor + key: vendor-${{ runner.os }}-${{ hashFiles('composer.lock') }} + restore-keys: | + vendor-${{ runner.os }}- + + - name: Cache Node Modules + id: cache-node_modules + uses: actions/cache@v3 + env: + cache-name: cache-node_modules + with: + path: node_modules + key: node_modules-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} + restore-keys: | + node_modules-${{ runner.os }}- + + - name: Composer Install + run: composer install + if: steps.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.cache-node_modules.outputs.cache-hit != 'true' + + - name: lint + run: pnpm lint \ No newline at end of file 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/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" From 0ed827e48dbd68199c1123663479f07b1adf29cd Mon Sep 17 00:00:00 2001 From: Javier Troya Date: Wed, 26 Mar 2025 22:26:10 +0100 Subject: [PATCH 06/17] Account block to regular block. --- .eslintignore | 3 + app/Hooks/Blocks.php | 21 +- config/blocks.webpack.config.js | 26 + package.json | 10 +- resources/blocks/account-v2/block.json | 19 + resources/blocks/account-v2/edit.js | 10 + resources/blocks/account-v2/editor.scss | 9 + resources/blocks/account-v2/index.js | 28 + resources/blocks/account-v2/render.php | 1 + resources/blocks/account-v2/save.js | 8 + .../account-v2/src/components/Links.jsx | 48 + .../account-v2/src/context/AccountContext.js | 33 + .../blocks/account-v2/src/views/Account.jsx | 176 + .../blocks/account-v2/src/views/Security.jsx | 250 + .../blocks/account-v2/src/views/Settings.jsx | 161 + resources/blocks/account-v2/style.scss | 3 + resources/blocks/account-v2/view.js | 52 + .../scripts/account/components/Links.jsx | 72 +- resources/scripts/account/views/Account.jsx | 306 +- resources/scripts/account/views/Security.jsx | 409 +- resources/scripts/account/views/Settings.jsx | 274 +- .../scripts/auth/components/AuthLinks.jsx | 49 +- .../auth/components/ForgotPassword.jsx | 293 +- .../scripts/auth/components/ResetPassword.jsx | 463 +- resources/scripts/auth/components/SignIn.jsx | 373 +- resources/scripts/auth/components/SignOut.jsx | 18 +- resources/scripts/auth/components/SignUp.jsx | 307 +- .../site/components/CreateSiteForm.jsx | 411 +- .../site/components/CreateSiteIntro.jsx | 52 +- .../themes/cloud/blocks/account-v2/block.json | 19 + .../cloud/blocks/account-v2/index-rtl.css | 11 + .../cloud/blocks/account-v2/index.asset.php | 1 + .../themes/cloud/blocks/account-v2/index.css | 13 + .../cloud/blocks/account-v2/index.css.map | 1 + .../themes/cloud/blocks/account-v2/index.js | 318 + .../cloud/blocks/account-v2/index.js.map | 1 + .../themes/cloud/blocks/account-v2/render.php | 1 + .../blocks/account-v2/style-index-rtl.css | 6 + .../cloud/blocks/account-v2/style-index.css | 8 + .../blocks/account-v2/style-index.css.map | 1 + .../cloud/blocks/account-v2/view.asset.php | 1 + .../themes/cloud/blocks/account-v2/view.js | 12308 ++++++++++++++++ .../cloud/blocks/account-v2/view.js.map | 1 + .../themes/cloud/blocks/account/block.json | 21 + .../themes/cloud/blocks/activity/block.json | 22 + .../themes/cloud/blocks/apps/block.json | 22 + .../themes/cloud/blocks/auth/block.json | 23 + .../cloud/blocks/create-site/block.json | 25 + .../themes/cloud/blocks/dashboard/block.json | 23 + .../themes/cloud/blocks/settings/block.json | 23 + .../themes/cloud/blocks/support/block.json | 21 + .../themes/cloud/blocks/users/block.json | 23 + 52 files changed, 15341 insertions(+), 1437 deletions(-) create mode 100644 .eslintignore create mode 100644 config/blocks.webpack.config.js create mode 100644 resources/blocks/account-v2/block.json create mode 100644 resources/blocks/account-v2/edit.js create mode 100644 resources/blocks/account-v2/editor.scss create mode 100644 resources/blocks/account-v2/index.js create mode 100644 resources/blocks/account-v2/render.php create mode 100644 resources/blocks/account-v2/save.js create mode 100644 resources/blocks/account-v2/src/components/Links.jsx create mode 100644 resources/blocks/account-v2/src/context/AccountContext.js create mode 100644 resources/blocks/account-v2/src/views/Account.jsx create mode 100644 resources/blocks/account-v2/src/views/Security.jsx create mode 100644 resources/blocks/account-v2/src/views/Settings.jsx create mode 100644 resources/blocks/account-v2/style.scss create mode 100644 resources/blocks/account-v2/view.js create mode 100644 web/content/themes/cloud/blocks/account-v2/block.json create mode 100644 web/content/themes/cloud/blocks/account-v2/index-rtl.css create mode 100644 web/content/themes/cloud/blocks/account-v2/index.asset.php create mode 100644 web/content/themes/cloud/blocks/account-v2/index.css create mode 100644 web/content/themes/cloud/blocks/account-v2/index.css.map create mode 100644 web/content/themes/cloud/blocks/account-v2/index.js create mode 100644 web/content/themes/cloud/blocks/account-v2/index.js.map create mode 100644 web/content/themes/cloud/blocks/account-v2/render.php create mode 100644 web/content/themes/cloud/blocks/account-v2/style-index-rtl.css create mode 100644 web/content/themes/cloud/blocks/account-v2/style-index.css create mode 100644 web/content/themes/cloud/blocks/account-v2/style-index.css.map create mode 100644 web/content/themes/cloud/blocks/account-v2/view.asset.php create mode 100644 web/content/themes/cloud/blocks/account-v2/view.js create mode 100644 web/content/themes/cloud/blocks/account-v2/view.js.map create mode 100644 web/content/themes/cloud/blocks/account/block.json create mode 100644 web/content/themes/cloud/blocks/activity/block.json create mode 100644 web/content/themes/cloud/blocks/apps/block.json create mode 100644 web/content/themes/cloud/blocks/auth/block.json create mode 100644 web/content/themes/cloud/blocks/create-site/block.json create mode 100644 web/content/themes/cloud/blocks/dashboard/block.json create mode 100644 web/content/themes/cloud/blocks/settings/block.json create mode 100644 web/content/themes/cloud/blocks/support/block.json create mode 100644 web/content/themes/cloud/blocks/users/block.json 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/app/Hooks/Blocks.php b/app/Hooks/Blocks.php index 500246a..81b0435 100644 --- a/app/Hooks/Blocks.php +++ b/app/Hooks/Blocks.php @@ -13,24 +13,11 @@ public static function init(): void 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); } } } 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/package.json b/package.json index b251f4f..2730f62 100644 --- a/package.json +++ b/package.json @@ -4,15 +4,19 @@ "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", + "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": "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 && composer run lint", + "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:js": "wp-scripts lint-js 'resources/**/*.js'", + "lint:jsx": "wp-scripts lint-js 'resources/**/*.jsx'" }, "repository": { "type": "git", 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..abb4b30 --- /dev/null +++ b/resources/blocks/account-v2/editor.scss @@ -0,0 +1,9 @@ +/** + * The following styles get applied inside the editor only. + * + * Replace them with your own styles or remove the file completely. + */ + +.wp-block-create-block-example { + border: 1px dotted #f00; +} diff --git a/resources/blocks/account-v2/index.js b/resources/blocks/account-v2/index.js new file mode 100644 index 0000000..78fc235 --- /dev/null +++ b/resources/blocks/account-v2/index.js @@ -0,0 +1,28 @@ +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: ( + + + + ), + /** + * @see ./edit.js + */ + edit: Edit, + + /** + * @see ./save.js + */ + 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..00fecae --- /dev/null +++ b/resources/blocks/account-v2/save.js @@ -0,0 +1,8 @@ +import { useBlockProps } from '@wordpress/block-editor'; +export default function save() { + return ( +

+ { 'Example – hello from the saved content!' } +

+ ); +} 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..fe8ee3d --- /dev/null +++ b/resources/blocks/account-v2/src/views/Security.jsx @@ -0,0 +1,250 @@ +// 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..453d581 --- /dev/null +++ b/resources/blocks/account-v2/style.scss @@ -0,0 +1,3 @@ +body { + background-color: var(--color-white); +} 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/scripts/account/components/Links.jsx b/resources/scripts/account/components/Links.jsx index 4579422..599797a 100644 --- a/resources/scripts/account/components/Links.jsx +++ b/resources/scripts/account/components/Links.jsx @@ -1,40 +1,48 @@ -import { useState } from "@wordpress/element"; -import { __ } from "@wordpress/i18n"; +import { useState } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; -const Links = ({ routes }) => { - if (!routes || Object.keys(routes).length === 0) { - return ''; - } +const Links = ( { routes } ) => { + if ( ! routes || Object.keys( routes ).length === 0 ) { + return ''; + } - const [currentPath, setCurrentPath] = useState(window.location.pathname); + 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 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 - })); + const routesEntries = Object.entries( routes ).map( + ( [ key, value ] ) => ( { + link: key.endsWith( '/' ) ? key : `${ key }/`, + title: value, + } ) + ); - return ( - <> - {routesEntries.map(({ link, title }) => { - return - {__(title)} - - })} - - ); + return ( + <> + { routesEntries.map( ( { link, title } ) => { + return ( + + { __( title ) } + + ); + } ) } + + ); }; export default Links; diff --git a/resources/scripts/account/views/Account.jsx b/resources/scripts/account/views/Account.jsx index 8f53332..e092215 100644 --- a/resources/scripts/account/views/Account.jsx +++ b/resources/scripts/account/views/Account.jsx @@ -1,162 +1,176 @@ -import {useState} from 'react'; -import {__} from '@wordpress/i18n'; +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 { 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); + 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); - } + 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 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 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 handleSubmit = ( e ) => { + e.preventDefault(); + setUpdating( true ); - const userData = { - user_id: userId || user?.id, - email, - name, - last_name: lastName, - phone - }; + 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) + 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 ( 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 (loading) { - return
; - } + if ( error ) { + return

{ error }

; + } - if (error) { - return

{error}

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

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

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

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

+ ) } + + ); }; export default Account; diff --git a/resources/scripts/account/views/Security.jsx b/resources/scripts/account/views/Security.jsx index bac71ba..36cb6cb 100644 --- a/resources/scripts/account/views/Security.jsx +++ b/resources/scripts/account/views/Security.jsx @@ -1,195 +1,244 @@ -import {useState} from 'react'; -import {__} from '@wordpress/i18n'; +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"; +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(''); + 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); - } + 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 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 handleSubmit = ( e ) => { + e.preventDefault(); + setUpdating( true ); - const userData = { - user_id: userId, - current_password: currentPassword, - new_password: newPassword, - confirm_new_password: confirmNewPassword - }; + 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); - }); - }; + 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 ( loading ) { + return
; + } - if (error) { - return

{error}

; - } + if ( error ) { + return

{ error }

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

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

-
-
- {updating &&
} -
-
- - - setShowCurrentPassword(!showCurrentPassword)}> - {!showCurrentPassword && - - - - } - {showCurrentPassword && - - - - } - -
-
-
- - - setShowNewPassword(!showNewPassword)}> - {!showNewPassword && - - - - } - {showNewPassword && - - - - } - -
-
- - - setShowConfirmNewPassword(!showConfirmNewPassword)}> - {!showConfirmNewPassword && - - - - } - {showConfirmNewPassword && - - - - } - -
+ return ( + <> + { user ? ( + +
+

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

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

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

- )} - - ); +
+ +
+ + ) : ( +

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

+ ) } + + ); }; export default Security; diff --git a/resources/scripts/account/views/Settings.jsx b/resources/scripts/account/views/Settings.jsx index 9b1cdb6..b794035 100644 --- a/resources/scripts/account/views/Settings.jsx +++ b/resources/scripts/account/views/Settings.jsx @@ -1,145 +1,161 @@ 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"; +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); + 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); - } + 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 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 handleSubmit = ( e ) => { + e.preventDefault(); + setUpdating( true ); - const userData = { - user_id: userId, - opt_in_updates: optInUpdates, - opt_in_commercial: optInCommercial, - preferred_language: preferredLanguage - }; + 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); - }); - }; + 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 ( loading ) { + return
; + } - if (error) { - return

{error}

; - } + if ( error ) { + return

{ error }

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

{__('Notifications')}

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

{__('Localization')}

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

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

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

{ __( 'Notifications' ) }

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

{ __( 'Localization' ) }

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

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

+ ) } + + ); }; export default Settings; diff --git a/resources/scripts/auth/components/AuthLinks.jsx b/resources/scripts/auth/components/AuthLinks.jsx index 02df2ca..fa0c169 100644 --- a/resources/scripts/auth/components/AuthLinks.jsx +++ b/resources/scripts/auth/components/AuthLinks.jsx @@ -1,24 +1,29 @@ -import {navigate} from "@modycloud/auth/AuthContext"; +import { navigate } from '@modycloud/auth/AuthContext'; -const AuthLinks = ({leftLink = '', leftText = '', rightLink = '', rightText = ''}) => { - return ( -
- {leftLink && leftText && -
- - {leftText} - -
- } - {rightLink && rightText && -
- - {rightText} - -
- } -
- ) -} +const AuthLinks = ( { + leftLink = '', + leftText = '', + rightLink = '', + rightText = '', +} ) => { + return ( +
+ { leftLink && leftText && ( +
+ + { leftText } + +
+ ) } + { rightLink && rightText && ( +
+ + { rightText } + +
+ ) } +
+ ); +}; -export default AuthLinks; \ No newline at end of file +export default AuthLinks; diff --git a/resources/scripts/auth/components/ForgotPassword.jsx b/resources/scripts/auth/components/ForgotPassword.jsx index d1e297b..41b0d6b 100644 --- a/resources/scripts/auth/components/ForgotPassword.jsx +++ b/resources/scripts/auth/components/ForgotPassword.jsx @@ -1,146 +1,157 @@ -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"; +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} - - ) - } - - ); + 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, + }; + + 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 index c1a9fed..621223b 100644 --- a/resources/scripts/auth/components/ResetPassword.jsx +++ b/resources/scripts/auth/components/ResetPassword.jsx @@ -1,222 +1,251 @@ -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"; +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} -
- - ) - } - - ); + 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, + 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, + } ); + 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 index 5aab9fe..fbc100b 100644 --- a/resources/scripts/auth/components/SignIn.jsx +++ b/resources/scripts/auth/components/SignIn.jsx @@ -1,186 +1,197 @@ -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"; +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} -
- -
-
- - ); + 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, + 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 index 3626788..ce99d9b 100644 --- a/resources/scripts/auth/components/SignOut.jsx +++ b/resources/scripts/auth/components/SignOut.jsx @@ -1,12 +1,12 @@ -import {useNavigate} from "react-router-dom"; -import {useEffect} from "@wordpress/element"; +import { useNavigate } from 'react-router-dom'; +import { useEffect } from '@wordpress/element'; const SignOut = () => { - const navigate = useNavigate(); - useEffect(() => { - navigate('/auth/sign-in'); - }, []); - return ''; -} + const navigate = useNavigate(); + useEffect( () => { + navigate( '/auth/sign-in' ); + }, [] ); + return ''; +}; -export default SignOut; \ No newline at end of file +export default SignOut; diff --git a/resources/scripts/auth/components/SignUp.jsx b/resources/scripts/auth/components/SignUp.jsx index 364a766..8f5e8d3 100644 --- a/resources/scripts/auth/components/SignUp.jsx +++ b/resources/scripts/auth/components/SignUp.jsx @@ -1,158 +1,159 @@ -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"; +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} -
- - ) - } - - ); + 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, + }; + + 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/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/web/content/themes/cloud/blocks/account-v2/block.json b/web/content/themes/cloud/blocks/account-v2/block.json new file mode 100644 index 0000000..7754449 --- /dev/null +++ b/web/content/themes/cloud/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/web/content/themes/cloud/blocks/account-v2/index-rtl.css b/web/content/themes/cloud/blocks/account-v2/index-rtl.css new file mode 100644 index 0000000..b3acb1f --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/index-rtl.css @@ -0,0 +1,11 @@ +/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.98.0/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.98.0/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/.pnpm/sass-loader@12.6.0_sass@1.86.0_webpack@5.98.0/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./resources/blocks/account-v2/editor.scss ***! + \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/** + * The following styles get applied inside the editor only. + * + * Replace them with your own styles or remove the file completely. + */ +.wp-block-create-block-example { + border: 1px dotted #f00; +} diff --git a/web/content/themes/cloud/blocks/account-v2/index.asset.php b/web/content/themes/cloud/blocks/account-v2/index.asset.php new file mode 100644 index 0000000..808b205 --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/index.asset.php @@ -0,0 +1 @@ + array('wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '05f44cd2eb0b456eedea'); diff --git a/web/content/themes/cloud/blocks/account-v2/index.css b/web/content/themes/cloud/blocks/account-v2/index.css new file mode 100644 index 0000000..ecf4d99 --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/index.css @@ -0,0 +1,13 @@ +/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.98.0/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.98.0/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/.pnpm/sass-loader@12.6.0_sass@1.86.0_webpack@5.98.0/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./resources/blocks/account-v2/editor.scss ***! + \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/** + * The following styles get applied inside the editor only. + * + * Replace them with your own styles or remove the file completely. + */ +.wp-block-create-block-example { + border: 1px dotted #f00; +} + +/*# sourceMappingURL=index.css.map*/ \ No newline at end of file diff --git a/web/content/themes/cloud/blocks/account-v2/index.css.map b/web/content/themes/cloud/blocks/account-v2/index.css.map new file mode 100644 index 0000000..d7e9642 --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/index.css.map @@ -0,0 +1 @@ +{"version":3,"file":"account-v2/index.css","mappings":";;;AAAA;;;;EAAA;AAMA;EACC;AAAD,C","sources":["webpack://modycloud/./resources/blocks/account-v2/editor.scss"],"sourcesContent":["/**\n * The following styles get applied inside the editor only.\n *\n * Replace them with your own styles or remove the file completely.\n */\n\n.wp-block-create-block-example {\n\tborder: 1px dotted #f00;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/web/content/themes/cloud/blocks/account-v2/index.js b/web/content/themes/cloud/blocks/account-v2/index.js new file mode 100644 index 0000000..235fcfa --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/index.js @@ -0,0 +1,318 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./resources/blocks/account-v2/block.json": +/*!************************************************!*\ + !*** ./resources/blocks/account-v2/block.json ***! + \************************************************/ +/***/ ((module) => { + +module.exports = /*#__PURE__*/JSON.parse('{"$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"}'); + +/***/ }), + +/***/ "./resources/blocks/account-v2/edit.js": +/*!*********************************************!*\ + !*** ./resources/blocks/account-v2/edit.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Edit) +/* harmony export */ }); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./editor.scss */ "./resources/blocks/account-v2/editor.scss"); + + + +function Edit() { + return /*#__PURE__*/React.createElement("p", (0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.useBlockProps)(), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Account Module for Mody Cloud', 'app')); +} + +/***/ }), + +/***/ "./resources/blocks/account-v2/editor.scss": +/*!*************************************************!*\ + !*** ./resources/blocks/account-v2/editor.scss ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./resources/blocks/account-v2/index.js": +/*!**********************************************!*\ + !*** ./resources/blocks/account-v2/index.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.scss */ "./resources/blocks/account-v2/style.scss"); +/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edit */ "./resources/blocks/account-v2/edit.js"); +/* harmony import */ var _save__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./save */ "./resources/blocks/account-v2/save.js"); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./block.json */ "./resources/blocks/account-v2/block.json"); + + + + + +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_4__.name, { + icon: /*#__PURE__*/React.createElement("svg", { + xmlns: "http://www.w3.org/2000/svg", + height: "24px", + viewBox: "0 -960 960 960", + width: "24px", + fill: "#005f6b" + }, /*#__PURE__*/React.createElement("path", { + d: "M280-280h280v-80H280v80Zm0-160h400v-80H280v80Zm0-160h400v-80H280v80Zm-80 480q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z" + })), + /** + * @see ./edit.js + */ + edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"], + /** + * @see ./save.js + */ + save: _save__WEBPACK_IMPORTED_MODULE_3__["default"] +}); + +/***/ }), + +/***/ "./resources/blocks/account-v2/save.js": +/*!*********************************************!*\ + !*** ./resources/blocks/account-v2/save.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ save) +/* harmony export */ }); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__); + +function save() { + return /*#__PURE__*/React.createElement("p", _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__.useBlockProps.save(), 'Example – hello from the saved content!'); +} + +/***/ }), + +/***/ "./resources/blocks/account-v2/style.scss": +/*!************************************************!*\ + !*** ./resources/blocks/account-v2/style.scss ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/i18n": +/*!******************************!*\ + !*** external ["wp","i18n"] ***! + \******************************/ +/***/ ((module) => { + +module.exports = window["wp"]["i18n"]; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "account-v2/index": 0, +/******/ "account-v2/style-index": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = globalThis["webpackChunkmodycloud"] = globalThis["webpackChunkmodycloud"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["account-v2/style-index"], () => (__webpack_require__("./resources/blocks/account-v2/index.js"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/web/content/themes/cloud/blocks/account-v2/index.js.map b/web/content/themes/cloud/blocks/account-v2/index.js.map new file mode 100644 index 0000000..87bc73d --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"account-v2/index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAqC;AACmB;AACjC;AACR,SAASE,IAAIA,CAAA,EAAG;EAC9B,oBACCC,KAAA,CAAAC,aAAA,MAAQH,sEAAa,CAAC,CAAC,EACpBD,mDAAE,CAAE,+BAA+B,EAAE,KAAM,CAC3C,CAAC;AAEN;;;;;;;;;;;ACTA;;;;;;;;;;;;;;;;;;ACAsD;AAChC;AACI;AACA;AACU;AAEpCK,oEAAiB,CAAEE,6CAAa,EAAE;EACjCE,IAAI,eACHN,KAAA,CAAAC,aAAA;IACCM,KAAK,EAAC,4BAA4B;IAClCC,MAAM,EAAC,MAAM;IACbC,OAAO,EAAC,gBAAgB;IACxBC,KAAK,EAAC,MAAM;IACZC,IAAI,EAAC;EAAS,gBAEdX,KAAA,CAAAC,aAAA;IAAMW,CAAC,EAAC;EAAmO,CAAE,CACzO,CACL;EACD;AACD;AACA;EACCC,IAAI,EAAEd,6CAAI;EAEV;AACD;AACA;EACCI,IAAIA,+CAAAA;AACL,CAAE,CAAC;;;;;;;;;;;;;;;;AC3BqD;AACzC,SAASA,IAAIA,CAAA,EAAG;EAC9B,oBACCH,KAAA,CAAAC,aAAA,MAAQH,kEAAa,CAACK,IAAI,CAAC,CAAC,EACzB,yCACA,CAAC;AAEN;;;;;;;;;;;ACPA;;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WCzBA;WACA;WACA;WACA;WACA,+BAA+B,wCAAwC;WACvE;WACA;WACA;WACA;WACA,iBAAiB,qBAAqB;WACtC;WACA;WACA,kBAAkB,qBAAqB;WACvC;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WC3BA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;;;;UEjDA;UACA;UACA;UACA;UACA","sources":["webpack://modycloud/./resources/blocks/account-v2/edit.js","webpack://modycloud/./resources/blocks/account-v2/editor.scss?d278","webpack://modycloud/./resources/blocks/account-v2/index.js","webpack://modycloud/./resources/blocks/account-v2/save.js","webpack://modycloud/./resources/blocks/account-v2/style.scss?ddd3","webpack://modycloud/external window [\"wp\",\"blockEditor\"]","webpack://modycloud/external window [\"wp\",\"blocks\"]","webpack://modycloud/external window [\"wp\",\"i18n\"]","webpack://modycloud/webpack/bootstrap","webpack://modycloud/webpack/runtime/chunk loaded","webpack://modycloud/webpack/runtime/compat get default export","webpack://modycloud/webpack/runtime/define property getters","webpack://modycloud/webpack/runtime/hasOwnProperty shorthand","webpack://modycloud/webpack/runtime/make namespace object","webpack://modycloud/webpack/runtime/jsonp chunk loading","webpack://modycloud/webpack/before-startup","webpack://modycloud/webpack/startup","webpack://modycloud/webpack/after-startup"],"sourcesContent":["import { __ } from '@wordpress/i18n';\nimport { useBlockProps } from '@wordpress/block-editor';\nimport './editor.scss';\nexport default function Edit() {\n\treturn (\n\t\t

\n\t\t\t{ __( 'Account Module for Mody Cloud', 'app' ) }\n\t\t

\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport {};","import { registerBlockType } from '@wordpress/blocks';\nimport './style.scss';\nimport Edit from './edit';\nimport save from './save';\nimport metadata from './block.json';\n\nregisterBlockType( metadata.name, {\n\ticon: (\n\t\t\n\t\t\t\n\t\t\n\t),\n\t/**\n\t * @see ./edit.js\n\t */\n\tedit: Edit,\n\n\t/**\n\t * @see ./save.js\n\t */\n\tsave,\n} );\n","import { useBlockProps } from '@wordpress/block-editor';\nexport default function save() {\n\treturn (\n\t\t

\n\t\t\t{ 'Example – hello from the saved content!' }\n\t\t

\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport {};","module.exports = window[\"wp\"][\"blockEditor\"];","module.exports = window[\"wp\"][\"blocks\"];","module.exports = window[\"wp\"][\"i18n\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"account-v2/index\": 0,\n\t\"account-v2/style-index\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunkmodycloud\"] = globalThis[\"webpackChunkmodycloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"account-v2/style-index\"], () => (__webpack_require__(\"./resources/blocks/account-v2/index.js\")))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n",""],"names":["__","useBlockProps","Edit","React","createElement","registerBlockType","save","metadata","name","icon","xmlns","height","viewBox","width","fill","d","edit"],"sourceRoot":""} \ No newline at end of file diff --git a/web/content/themes/cloud/blocks/account-v2/render.php b/web/content/themes/cloud/blocks/account-v2/render.php new file mode 100644 index 0000000..5b98778 --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/render.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/content/themes/cloud/blocks/account-v2/style-index-rtl.css b/web/content/themes/cloud/blocks/account-v2/style-index-rtl.css new file mode 100644 index 0000000..571b7c9 --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/style-index-rtl.css @@ -0,0 +1,6 @@ +/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.98.0/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.98.0/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/.pnpm/sass-loader@12.6.0_sass@1.86.0_webpack@5.98.0/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./resources/blocks/account-v2/style.scss ***! + \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +body { + background-color: var(--color-white); +} diff --git a/web/content/themes/cloud/blocks/account-v2/style-index.css b/web/content/themes/cloud/blocks/account-v2/style-index.css new file mode 100644 index 0000000..ac8f616 --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/style-index.css @@ -0,0 +1,8 @@ +/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.98.0/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.98.0/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/.pnpm/sass-loader@12.6.0_sass@1.86.0_webpack@5.98.0/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./resources/blocks/account-v2/style.scss ***! + \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +body { + background-color: var(--color-white); +} + +/*# sourceMappingURL=style-index.css.map*/ \ No newline at end of file diff --git a/web/content/themes/cloud/blocks/account-v2/style-index.css.map b/web/content/themes/cloud/blocks/account-v2/style-index.css.map new file mode 100644 index 0000000..dca7c2b --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/style-index.css.map @@ -0,0 +1 @@ +{"version":3,"file":"account-v2/style-index.css","mappings":";;;AAAA;EACE;AACF,C","sources":["webpack://modycloud/./resources/blocks/account-v2/style.scss"],"sourcesContent":["body {\n background-color: var(--color-white);\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/web/content/themes/cloud/blocks/account-v2/view.asset.php b/web/content/themes/cloud/blocks/account-v2/view.asset.php new file mode 100644 index 0000000..2667427 --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/view.asset.php @@ -0,0 +1 @@ + array('react', 'wp-api-fetch', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => '8a791af3d30308b127ce'); diff --git a/web/content/themes/cloud/blocks/account-v2/view.js b/web/content/themes/cloud/blocks/account-v2/view.js new file mode 100644 index 0000000..dc639b1 --- /dev/null +++ b/web/content/themes/cloud/blocks/account-v2/view.js @@ -0,0 +1,12308 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs": +/*!***********************************************************************!*\ + !*** ./node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs ***! + \***********************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ clsx: () => (/* binding */ clsx), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.parse = parse; +exports.serialize = serialize; +/** + * RegExp to match cookie-name in RFC 6265 sec 4.1.1 + * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2 + * which has been replaced by the token definition in RFC 7230 appendix B. + * + * cookie-name = token + * token = 1*tchar + * tchar = "!" / "#" / "$" / "%" / "&" / "'" / + * "*" / "+" / "-" / "." / "^" / "_" / + * "`" / "|" / "~" / DIGIT / ALPHA + * + * Note: Allowing more characters - https://github.com/jshttp/cookie/issues/191 + * Allow same range as cookie value, except `=`, which delimits end of name. + */ +const cookieNameRegExp = /^[\u0021-\u003A\u003C\u003E-\u007E]+$/; +/** + * RegExp to match cookie-value in RFC 6265 sec 4.1.1 + * + * cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE ) + * cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E + * ; US-ASCII characters excluding CTLs, + * ; whitespace DQUOTE, comma, semicolon, + * ; and backslash + * + * Allowing more characters: https://github.com/jshttp/cookie/issues/191 + * Comma, backslash, and DQUOTE are not part of the parsing algorithm. + */ +const cookieValueRegExp = /^[\u0021-\u003A\u003C-\u007E]*$/; +/** + * RegExp to match domain-value in RFC 6265 sec 4.1.1 + * + * domain-value = + * ; defined in [RFC1034], Section 3.5, as + * ; enhanced by [RFC1123], Section 2.1 + * =