diff --git a/.github/workflows/e2e-js.yml b/.github/workflows/e2e-js.yml index 9c6591284..f8fa71826 100644 --- a/.github/workflows/e2e-js.yml +++ b/.github/workflows/e2e-js.yml @@ -9,6 +9,7 @@ on: jobs: e2e: runs-on: ubuntu-latest + if: github.event.pull_request.draft == false && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it @@ -107,4 +108,4 @@ jobs: TYPING_ABOVE_60: ${{ steps.summary.outputs.TYPING_ABOVE_60 }} - \ No newline at end of file + diff --git a/.github/workflows/pr-checklist.yml b/.github/workflows/pr-checklist.yml index 543f7293e..a6e9ba7fe 100644 --- a/.github/workflows/pr-checklist.yml +++ b/.github/workflows/pr-checklist.yml @@ -13,7 +13,7 @@ jobs: add-labels: runs-on: ubuntu-latest name: Label PR based on checklist - if: github.event.pull_request.draft == false && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name + if: github.event.pull_request.draft == false && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name && github.actor != 'dependabot[bot]' steps: - name: Check if checklist items are completed uses: Codeinwp/gha-pr-check-helper@master diff --git a/.github/workflows/sync-branches.yml b/.github/workflows/sync-branches.yml index 4084ce15d..cd40bd95f 100644 --- a/.github/workflows/sync-branches.yml +++ b/.github/workflows/sync-branches.yml @@ -21,11 +21,11 @@ jobs: from_branch: master target_branch: development github_token: ${{ secrets.BOT_TOKEN }} - - name: Merge development -> v2.3 + - name: Merge development -> next if: ${{ steps.retrieve-branch-name.outputs.branch_name == 'development' }} uses: Codeinwp/merge-branch@master with: type: now from_branch: development - target_branch: v2.3 + target_branch: next github_token: ${{ secrets.BOT_TOKEN }} diff --git a/.github/workflows/test-js.yml b/.github/workflows/test-js.yml index fec64d1c4..4cb9bba6f 100644 --- a/.github/workflows/test-js.yml +++ b/.github/workflows/test-js.yml @@ -1,11 +1,14 @@ name: Test JS -on: [pull_request] +on: + pull_request: + types: [ opened, synchronize, ready_for_review ] jobs: run: runs-on: ubuntu-latest + if: github.event.pull_request.draft == false && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name strategy: matrix: node-version: [18.x] diff --git a/.github/workflows/test-php.yml b/.github/workflows/test-php.yml index a570c2c4b..05a8b9eb6 100644 --- a/.github/workflows/test-php.yml +++ b/.github/workflows/test-php.yml @@ -1,11 +1,14 @@ name: Test PHP -on: [pull_request] +on: + pull_request: + types: [ opened, synchronize, ready_for_review ] jobs: phplint: name: Phplint runs-on: ubuntu-latest + if: github.event.pull_request.draft == false && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name steps: - name: Setup PHP version uses: shivammathur/setup-php@v1 @@ -33,6 +36,7 @@ jobs: phpunit: name: Phpunit runs-on: ubuntu-latest + if: github.event.pull_request.draft == false && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name services: mysql: image: mysql:5.7 @@ -72,6 +76,7 @@ jobs: phpstan: name: PHPStan runs-on: ubuntu-latest + if: github.event.pull_request.draft == false && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name steps: - name: Setup PHP version uses: shivammathur/setup-php@v2 diff --git a/composer.json b/composer.json index 3d162cebd..0258e5e17 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ "dealerdirect/phpcodesniffer-composer-installer": "0.7.1", "automattic/vipwpcs": "^1.0.0", "phpunit/phpunit": "9.6.5", - "yoast/phpunit-polyfills": "^1.0", + "yoast/phpunit-polyfills": "^2.0", "phpstan/phpstan": "^1.10", "szepeviktor/phpstan-wordpress": "^1.3", "php-stubs/woocommerce-stubs": "^7.7", diff --git a/composer.lock b/composer.lock index c4d992115..b733a9629 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "60fffd630dc8f1393372f8533c20b01a", + "content-hash": "7fee5b4adf46e3b33d12c47e7cf1faa9", "packages": [ { "name": "codeinwp/themeisle-sdk", - "version": "3.3.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/Codeinwp/themeisle-sdk.git", - "reference": "68dc5d11c1d7a20a13f3ae730183f61ff309d574" + "reference": "efb66935e69935b21ad99b0e55484e611ce4549d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/68dc5d11c1d7a20a13f3ae730183f61ff309d574", - "reference": "68dc5d11c1d7a20a13f3ae730183f61ff309d574", + "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/efb66935e69935b21ad99b0e55484e611ce4549d", + "reference": "efb66935e69935b21ad99b0e55484e611ce4549d", "shasum": "" }, "require-dev": { @@ -42,9 +42,9 @@ ], "support": { "issues": "https://github.com/Codeinwp/themeisle-sdk/issues", - "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.0" + "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.1" }, - "time": "2023-05-30T08:55:06+00:00" + "time": "2023-06-21T06:55:46+00:00" }, { "name": "masterminds/html5", @@ -170,16 +170,16 @@ }, { "name": "stripe/stripe-php", - "version": "v10.14.0", + "version": "v10.16.0", "source": { "type": "git", "url": "https://github.com/stripe/stripe-php.git", - "reference": "c88a80fa7f361c2d30d6c81fb71f2bb30be1001f" + "reference": "ea863a92102a8e8dbdeddf79b4535c355ec62d91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stripe/stripe-php/zipball/c88a80fa7f361c2d30d6c81fb71f2bb30be1001f", - "reference": "c88a80fa7f361c2d30d6c81fb71f2bb30be1001f", + "url": "https://api.github.com/repos/stripe/stripe-php/zipball/ea863a92102a8e8dbdeddf79b4535c355ec62d91", + "reference": "ea863a92102a8e8dbdeddf79b4535c355ec62d91", "shasum": "" }, "require": { @@ -225,9 +225,9 @@ ], "support": { "issues": "https://github.com/stripe/stripe-php/issues", - "source": "https://github.com/stripe/stripe-php/tree/v10.14.0" + "source": "https://github.com/stripe/stripe-php/tree/v10.16.0" }, - "time": "2023-05-25T18:09:32+00:00" + "time": "2023-06-29T23:40:49+00:00" }, { "name": "tubalmartin/cssmin", @@ -585,16 +585,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.4", + "version": "v4.16.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" + "reference": "19526a33fb561ef417e822e85f08a00db4059c17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/19526a33fb561ef417e822e85f08a00db4059c17", + "reference": "19526a33fb561ef417e822e85f08a00db4059c17", "shasum": "" }, "require": { @@ -635,9 +635,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.16.0" }, - "time": "2023-03-05T19:49:14+00:00" + "time": "2023-06-25T14:52:30+00:00" }, { "name": "phar-io/manifest", @@ -796,16 +796,16 @@ }, { "name": "php-stubs/woocommerce-stubs", - "version": "v7.7.0", + "version": "v7.8.1", "source": { "type": "git", "url": "https://github.com/php-stubs/woocommerce-stubs.git", - "reference": "2fec812b7bb3458a232f4637bf83e4037106537d" + "reference": "3873da8a5634404a83756017b70675dadfd07783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-stubs/woocommerce-stubs/zipball/2fec812b7bb3458a232f4637bf83e4037106537d", - "reference": "2fec812b7bb3458a232f4637bf83e4037106537d", + "url": "https://api.github.com/repos/php-stubs/woocommerce-stubs/zipball/3873da8a5634404a83756017b70675dadfd07783", + "reference": "3873da8a5634404a83756017b70675dadfd07783", "shasum": "" }, "require": { @@ -834,22 +834,22 @@ ], "support": { "issues": "https://github.com/php-stubs/woocommerce-stubs/issues", - "source": "https://github.com/php-stubs/woocommerce-stubs/tree/v7.7.0" + "source": "https://github.com/php-stubs/woocommerce-stubs/tree/v7.8.1" }, - "time": "2023-05-10T05:40:44+00:00" + "time": "2023-06-27T20:03:06+00:00" }, { "name": "php-stubs/wordpress-stubs", - "version": "v6.2.0", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/php-stubs/wordpress-stubs.git", - "reference": "b73fe99eadf9fb56363619dac0343b6d19907dce" + "reference": "0009429e639b748eef1c955200ea0d4e5ad5627d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/b73fe99eadf9fb56363619dac0343b6d19907dce", - "reference": "b73fe99eadf9fb56363619dac0343b6d19907dce", + "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/0009429e639b748eef1c955200ea0d4e5ad5627d", + "reference": "0009429e639b748eef1c955200ea0d4e5ad5627d", "shasum": "" }, "require-dev": { @@ -857,7 +857,8 @@ "php": "~7.3 || ~8.0", "php-stubs/generator": "^0.8.3", "phpdocumentor/reflection-docblock": "^5.3", - "phpstan/phpstan": "^1.9" + "phpstan/phpstan": "^1.10.12", + "phpunit/phpunit": "^9.5" }, "suggest": { "paragonie/sodium_compat": "Pure PHP implementation of libsodium", @@ -878,9 +879,9 @@ ], "support": { "issues": "https://github.com/php-stubs/wordpress-stubs/issues", - "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.2.0" + "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.2.1" }, - "time": "2023-03-31T09:48:52+00:00" + "time": "2023-05-18T04:35:23+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -946,16 +947,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.15", + "version": "1.10.22", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "762c4dac4da6f8756eebb80e528c3a47855da9bd" + "reference": "97d694dfd4ceb57bcce4e3b38548f13ea62e4287" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/762c4dac4da6f8756eebb80e528c3a47855da9bd", - "reference": "762c4dac4da6f8756eebb80e528c3a47855da9bd", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/97d694dfd4ceb57bcce4e3b38548f13ea62e4287", + "reference": "97d694dfd4ceb57bcce4e3b38548f13ea62e4287", "shasum": "" }, "require": { @@ -1004,7 +1005,7 @@ "type": "tidelift" } ], - "time": "2023-05-09T15:28:01+00:00" + "time": "2023-06-30T20:04:11+00:00" }, { "name": "phpunit/php-code-coverage", @@ -1726,16 +1727,16 @@ }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", "shasum": "" }, "require": { @@ -1780,7 +1781,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" }, "funding": [ { @@ -1788,7 +1789,7 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-05-07T05:35:17+00:00" }, { "name": "sebastian/environment", @@ -2747,30 +2748,29 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.0.3", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "5ea3536428944955f969bc764bbe09738e151ada" + "reference": "c758753e8f9dac251fed396a73c8305af3f17922" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/5ea3536428944955f969bc764bbe09738e151ada", - "reference": "5ea3536428944955f969bc764bbe09738e151ada", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/c758753e8f9dac251fed396a73c8305af3f17922", + "reference": "c758753e8f9dac251fed396a73c8305af3f17922", "shasum": "" }, "require": { - "php": ">=5.4", - "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + "php": ">=5.6", + "phpunit/phpunit": "^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0" }, "require-dev": { - "yoast/yoastcs": "^2.2.0" + "yoast/yoastcs": "^2.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev", - "dev-develop": "1.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -2804,7 +2804,7 @@ "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2021-11-23T01:37:03+00:00" + "time": "2023-06-06T20:28:24+00:00" } ], "aliases": [], @@ -2817,5 +2817,5 @@ "platform-overrides": { "php": "7.4" }, - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.3.0" } diff --git a/inc/integrations/api/form-response-data.php b/inc/integrations/api/form-response-data.php index 1881e3a83..85a8d3dd2 100644 --- a/inc/integrations/api/form-response-data.php +++ b/inc/integrations/api/form-response-data.php @@ -240,6 +240,18 @@ public function set_response( $response ) { return $this; } + /** + * Add new field to the response. + * + * @param string $key The key. + * @param mixed $value The value. + * @return $this + */ + public function add_response_field( $key, $value ) { + $this->response[ $key ] = $value; + return $this; + } + /** * Add new data to the response. * diff --git a/inc/plugins/class-stripe-api.php b/inc/plugins/class-stripe-api.php index bbc38c6cc..6fcb73de8 100644 --- a/inc/plugins/class-stripe-api.php +++ b/inc/plugins/class-stripe-api.php @@ -321,4 +321,22 @@ function( $item ) use ( $product ) { return $bool; } + + /** + * Get session email. + * + * @param string $session_id Stripe Session ID. + * + * @return bool|string + * @access public + */ + public function get_session_email( $session_id ) { + $session = $this->create_request( 'get_session', $session_id ); + + if ( empty( $session['customer_details']['email'] ) ) { + return false; + } + + return $session['customer_details']['email']; + } } diff --git a/inc/render/class-review-block.php b/inc/render/class-review-block.php index 5c4197e55..b12b07ce2 100644 --- a/inc/render/class-review-block.php +++ b/inc/render/class-review-block.php @@ -67,6 +67,9 @@ function() use ( $attributes, $post_id ) { ) ); + $is_one_colum_layout = strpos( $wrapper_attributes, 'is-style-single-column' ) !== false; + $is_inline_features = strpos( $wrapper_attributes, 'is-style-inline-features' ) !== false; + $main_heading = isset( $attributes['mainHeading'] ) ? $attributes['mainHeading'] : 'h2'; $sub_heading = isset( $attributes['subHeading'] ) ? $attributes['subHeading'] : 'h3'; @@ -79,7 +82,9 @@ function() use ( $attributes, $post_id ) { $html .= '
'; $html .= '
'; + $html .= '
'; $html .= $this->get_overall_stars( $this->get_overall_ratings( $attributes['features'] ), $scale ); + $html .= '
'; // translators: Overall rating from 1 to 10. $html .= ' ' . sprintf( __( '%1$g out of %2$g', 'otter-blocks' ), $this->get_overall_ratings( $attributes['features'], $scale ), 10 / $scale ) . ''; $html .= '
'; @@ -124,9 +129,14 @@ function() use ( $attributes, $post_id ) { } $html .= '
'; + + $html .= '
'; $html .= $this->get_overall_stars( $feature['rating'], $scale ); + $html .= '
'; + // translators: Overall rating from 1 to 10. - $html .= ' ' . sprintf( __( '%1$g out of %2$g', 'otter-blocks' ), 1 <= round( $feature['rating'] / $scale, 1 ) ? round( $feature['rating'] / $scale, 1 ) : 1, 10 / $scale ) . ''; + $html .= ' ' . sprintf( __( '%1$g out of %2$g', 'otter-blocks' ), 1 <= round( $feature['rating'] / $scale, 1 ) ? round( $feature['rating'] / $scale, 1 ) : 1, 10 / $scale ) . ''; + $html .= '
'; if ( isset( $feature['description'] ) ) { diff --git a/inc/render/class-stripe-checkout-block.php b/inc/render/class-stripe-checkout-block.php index 4bc65eed2..f1e463b46 100644 --- a/inc/render/class-stripe-checkout-block.php +++ b/inc/render/class-stripe-checkout-block.php @@ -39,6 +39,8 @@ public function render( $attributes ) { if ( false !== $status ) { if ( 'success' === $status ) { $message = isset( $attributes['successMessage'] ) ? wp_kses_post( $attributes['successMessage'] ) : __( 'Your payment was successful. If you have any questions, please email orders@example.com.', 'otter-blocks' ); + + do_action( 'otter_blocks_stripe_checkout_success', $attributes, $stripe, $session_id ); } else { $message = isset( $attributes['cancelMessage'] ) ? wp_kses_post( $attributes['cancelMessage'] ) : __( 'Your payment was unsuccessful. If you have any questions, please email orders@example.com.', 'otter-blocks' ); } diff --git a/inc/server/class-dynamic-content-server.php b/inc/server/class-dynamic-content-server.php index e949e356f..eccc1758a 100644 --- a/inc/server/class-dynamic-content-server.php +++ b/inc/server/class-dynamic-content-server.php @@ -210,7 +210,7 @@ public function get( $request ) { readfile( $path ); //phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_read_readfile $output = ob_get_contents(); - if ( isset( $size['mime'] ) ) { + if ( ! empty( $size['mime'] ) ) { header( 'Content-type: ' . $size['mime'] ); } return $output; diff --git a/inc/server/class-form-server.php b/inc/server/class-form-server.php index a96a020a8..c586f4f51 100644 --- a/inc/server/class-form-server.php +++ b/inc/server/class-form-server.php @@ -259,6 +259,11 @@ public function frontend( $request ) { if ( $res->has_error() || $form_data->has_error() ) { $res->set_code( $form_data->get_error_code() ); } else { + + if ( ! empty( $form_options->get_redirect_link() ) ) { + $res->add_response_field( 'redirectLink', $form_options->get_redirect_link() ); + } + // Select the submit function based on the provider. $provider_handlers = apply_filters( 'otter_select_form_provider', $form_data ); @@ -371,7 +376,7 @@ public function send_default_email( $form_data ) { } } - // phpcs:ignore + // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_mail_wp_mail $email_was_send = wp_mail( $to, $email_subject, $email_body, $headers, $attachments ); if ( ! $email_was_send ) { $is_warning = Pro::is_pro_active() && strstr( $form_options->get_submissions_save_location(), 'database' ); @@ -541,8 +546,8 @@ public static function send_error_email( $form_data ) { // Sent the form date to the admin site as a default behaviour. $to = sanitize_email( get_site_option( 'admin_email' ) ); $headers = array( 'Content-Type: text/html; charset=UTF-8', 'From: ' . esc_url( get_site_url() ) ); - // phpcs:ignore - wp_mail( $to, $email_subject, $email_body, $headers ); + // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_mail_wp_mail + wp_mail( $to, $email_subject, $email_body, $headers ); } /** @@ -563,7 +568,7 @@ public static function send_test_email( $form_data ) { $to = $form_data->get_payload_field( 'to' ); } $headers = array( 'Content-Type: text/html; charset=UTF-8', 'From: ' . get_bloginfo( 'name', 'display' ) . '<' . $to . '>' ); - // phpcs:ignore + // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_mail_wp_mail $res->set_success( wp_mail( $to, $email_subject, $email_body, $headers ) ); } catch ( Exception $e ) { $res->set_code( Form_Data_Response::ERROR_RUNTIME_ERROR ); diff --git a/package-lock.json b/package-lock.json index 7354d16b3..eb14492b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,10 +6,10 @@ "packages": { "": { "name": "otter-blocks", - "version": "2.3.0", + "version": "2.3.1", "license": "GPL-2.0+", "dependencies": { - "@wordpress/icons": "^9.23.0", + "@wordpress/icons": "^9.27.0", "array-move": "^3.0.1", "classnames": "^2.3.1", "currency-symbol-map": "^5.0.1", @@ -32,17 +32,17 @@ "@types/jest": "^29.5.1", "@types/wordpress__block-editor": "^11.5.1", "@types/wordpress__components": "^23.0.1", - "@typescript-eslint/parser": "^5.59.6", - "@wordpress/block-editor": "^12.1.0", - "@wordpress/components": "^24.0.0", + "@typescript-eslint/parser": "^5.61.0", + "@wordpress/block-editor": "^12.5.0", + "@wordpress/components": "^25.3.0", "@wordpress/compose": "^6.10.0", - "@wordpress/data": "^9.3.0", - "@wordpress/dom-ready": "^3.33.0", + "@wordpress/data": "^9.7.0", + "@wordpress/dom-ready": "^3.36.0", "@wordpress/e2e-test-utils": "^10.4.0", "@wordpress/e2e-test-utils-playwright": "^0.2.0", "@wordpress/e2e-tests": "^7.4.0", - "@wordpress/element": "^5.10.0", - "@wordpress/env": "^8.0.0", + "@wordpress/element": "^5.14.0", + "@wordpress/env": "^8.3.0", "@wordpress/scripts": "^26.5.0", "conventional-changelog-simple-preset": "^1.0.20", "eslint-config-wordpress": "^2.0.0", @@ -60,7 +60,7 @@ "semantic-release": "^19.0.5", "semantic-release-slack-bot": "^3.5.2", "simple-statistics": "^7.8.3", - "typescript": "^4.9.5" + "typescript": "^5.1.6" }, "optionalDependencies": { "fsevents": "^2.3.2" @@ -85,6 +85,44 @@ "node": ">=6.0.0" } }, + "node_modules/@ariakit/core": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.2.7.tgz", + "integrity": "sha512-Hs0N1EMYq88WW4v9xnSIHNR38TvbQuoUX6FYFmeLCZSTIXQBiET7lr1DQXwOOmdEtRtlxQ5HsxbTkxeOkPv+eg==", + "dev": true + }, + "node_modules/@ariakit/react": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.2.12.tgz", + "integrity": "sha512-4rAgMyUURHW78EKgRCanhyRUtsiYCOxO65BBHF4mg3tZsDeOvu9kBG5IAXX8mUgakTcyr0EKXuOtGThaj7gobA==", + "dev": true, + "dependencies": { + "@ariakit/react-core": "0.2.12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ariakit" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@ariakit/react-core": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.2.12.tgz", + "integrity": "sha512-3KSKlX10nnhCvjsbPW0CAnqG+6grryfwnMkeJJ/h34FSV7hEfUMexmIjKBVZyfBG08Xj8NjSK8kkx9c3ChkXeA==", + "dev": true, + "dependencies": { + "@ariakit/core": "0.2.7", + "@floating-ui/dom": "^1.0.0", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, "node_modules/@automattic/babel-plugin-replace-textdomain": { "version": "1.0.25", "resolved": "https://registry.npmjs.org/@automattic/babel-plugin-replace-textdomain/-/babel-plugin-replace-textdomain-1.0.25.tgz", @@ -2502,18 +2540,18 @@ ] }, "node_modules/@floating-ui/core": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.6.tgz", - "integrity": "sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.1.tgz", + "integrity": "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==", "dev": true }, "node_modules/@floating-ui/dom": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.8.tgz", - "integrity": "sha512-XLwhYV90MxiHDq6S0rzFZj00fnDM+A1R9jhSioZoMsa7G0Q0i+Q4x40ajR8FHSdYDE1bgjG45mIWe6jtv9UPmg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.4.tgz", + "integrity": "sha512-21hhDEPOiWkGp0Ys4Wi6Neriah7HweToKra626CIK712B5m9qkdz54OP9gVldUg+URnBTpv/j/bi/skmGdstXQ==", "dev": true, "dependencies": { - "@floating-ui/core": "^1.2.6" + "@floating-ui/core": "^1.3.1" } }, "node_modules/@floating-ui/react-dom": { @@ -3474,56 +3512,623 @@ "bin": { "extract-zip": "cli.js" }, - "engines": { - "node": ">= 10.17.0" + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/@puppeteer/browsers/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", + "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.5.tgz", + "integrity": "sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-menu": "2.0.5", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz", + "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.5.tgz", + "integrity": "sha512-Gw4f9pwdH+w5w+49k0gLjN0PfRDHvxmAgG16AbyJZ7zhwZ6PBHKtWohvnSwfusfnK3L68dpBREHpVkj8wEM7ZA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.4", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.3", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.2", + "@radix-ui/react-portal": "1.0.3", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", + "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@floating-ui/react-dom": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.1.tgz", + "integrity": "sha512-rZtAmSht4Lry6gdhAJDrCp/6rKN7++JnL1/Anbr/DdeyYXQPxvg/ivrbYvJulbRf4vL8b212suwMM2lxbv+RQA==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.3.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", + "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", + "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@puppeteer/browsers/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", "dev": true, - "peer": true, "dependencies": { - "pump": "^3.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@puppeteer/browsers/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", "dev": true, - "peer": true, "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@puppeteer/browsers/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=12" + "dependencies": { + "@babel/runtime": "^7.13.10" } }, "node_modules/@react-spring/animated": { @@ -5123,14 +5728,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", - "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.61.0.tgz", + "integrity": "sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/typescript-estree": "5.61.0", "debug": "^4.3.4" }, "engines": { @@ -5149,6 +5754,80 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", + "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz", + "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz", + "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz", + "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.61.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.59.7", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", @@ -5477,37 +6156,37 @@ } }, "node_modules/@wordpress/a11y": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-3.33.0.tgz", - "integrity": "sha512-DEnUVAGw6JUAHb+5rsJ5h/4neyGE0hRMawS/1cvMems1w1W4hGE2DX3/oyJX6MNJ8KzHrgYDdxA6RZjQAprsuA==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-3.37.0.tgz", + "integrity": "sha512-/eiISho69dMl6IaX1zw+++jqJBpjxM5RKQ9uvRr0rrp5yoS/rWUS3dnA8P8bLwieK1m+oTz5Bbq4tVpUH/yvrg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/dom-ready": "^3.33.0", - "@wordpress/i18n": "^4.33.0" + "@wordpress/dom-ready": "^3.37.0", + "@wordpress/i18n": "^4.37.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/api-fetch": { - "version": "6.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.31.0.tgz", - "integrity": "sha512-3l2jT7eD6kOK+GM1qcXsk7BGmmrU+//uT1wWOSpx+x4vpPABKlm7yfPvjHG7SqbgHXQzLD6eFvo/nmwN3JbGNg==", + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.34.0.tgz", + "integrity": "sha512-bWJngQ/ZRyLtlRnDdvSErZyoXJFBfHWg+4EQXkLZc6js3FU290H8YoJ9SP4PJTE9aF723mN1x4l/sy1QVWFchQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.34.0", - "@wordpress/url": "^3.35.0" + "@wordpress/i18n": "^4.37.0", + "@wordpress/url": "^3.38.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/autop": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-3.33.0.tgz", - "integrity": "sha512-95PIVEQS7U+GAkmSmOaRUGAACTse8O+ciQQfoJKJQXAkhzihX5oG66wjhFt34OxPmxywvvrUc+s3h/W8w0YAyg==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-3.37.0.tgz", + "integrity": "sha512-OSx8Ftu+XHU3QayQpcPgyhKTlVGDdSbld/5BDZ3xDmGcbmI72Qs6TzOw8bfeNn/Fc6FGhu0CVyg/jaOSVKJ05g==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -5558,9 +6237,9 @@ "dev": true }, "node_modules/@wordpress/blob": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-3.33.0.tgz", - "integrity": "sha512-Xj0c2TlE17F649WQO2bniXwp3DRc3oZuZZZZ+hMlIO+iLKtX7KLrnJrVD4BGW7Lwc8DX++q9HBLfifolpovI1w==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-3.37.0.tgz", + "integrity": "sha512-1JkInPKI0inhHlDOchkq639JyNXdPABYoWTNRs9TgB9DtL6Z/EPWwMTTbNTVgeh3LgSbe6Q/A8yPmlGWYDCoRQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -5570,45 +6249,47 @@ } }, "node_modules/@wordpress/block-editor": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-12.1.0.tgz", - "integrity": "sha512-ZDYf9cYwR7f5OEfgj4VjIuJiqdk/4HlsLAVLKJwkqS+EkgkUhe+F4Go1Vszd7GV/1O/KNofTvdmjw2ojlkzbQQ==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-12.5.0.tgz", + "integrity": "sha512-57+BDu0HauCje5KgiicBglHsi9LLCd/O/0xv1hnfMjXwASnbTSmXjKYCkz/G3K9/BqCwdwxoj3DyKML84OAC6w==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", + "@emotion/styled": "^11.6.0", "@react-spring/web": "^9.4.5", - "@wordpress/a11y": "^3.33.0", - "@wordpress/api-fetch": "^6.30.0", - "@wordpress/blob": "^3.33.0", - "@wordpress/blocks": "^12.10.0", - "@wordpress/components": "^24.0.0", - "@wordpress/compose": "^6.10.0", - "@wordpress/data": "^9.3.0", - "@wordpress/date": "^4.33.0", - "@wordpress/deprecated": "^3.33.0", - "@wordpress/dom": "^3.33.0", - "@wordpress/element": "^5.10.0", - "@wordpress/escape-html": "^2.33.0", - "@wordpress/hooks": "^3.33.0", - "@wordpress/html-entities": "^3.33.0", - "@wordpress/i18n": "^4.33.0", - "@wordpress/icons": "^9.24.0", - "@wordpress/is-shallow-equal": "^4.33.0", - "@wordpress/keyboard-shortcuts": "^4.10.0", - "@wordpress/keycodes": "^3.33.0", - "@wordpress/notices": "^4.1.0", - "@wordpress/preferences": "^3.10.0", - "@wordpress/private-apis": "^0.15.0", - "@wordpress/rich-text": "^6.10.0", - "@wordpress/shortcode": "^3.33.0", - "@wordpress/style-engine": "^1.16.0", - "@wordpress/token-list": "^2.33.0", - "@wordpress/url": "^3.34.0", - "@wordpress/warning": "^2.33.0", - "@wordpress/wordcount": "^3.33.0", + "@wordpress/a11y": "^3.37.0", + "@wordpress/api-fetch": "^6.34.0", + "@wordpress/blob": "^3.37.0", + "@wordpress/blocks": "^12.14.0", + "@wordpress/components": "^25.3.0", + "@wordpress/compose": "^6.14.0", + "@wordpress/data": "^9.7.0", + "@wordpress/date": "^4.37.0", + "@wordpress/deprecated": "^3.37.0", + "@wordpress/dom": "^3.37.0", + "@wordpress/element": "^5.14.0", + "@wordpress/escape-html": "^2.37.0", + "@wordpress/hooks": "^3.37.0", + "@wordpress/html-entities": "^3.37.0", + "@wordpress/i18n": "^4.37.0", + "@wordpress/icons": "^9.28.0", + "@wordpress/is-shallow-equal": "^4.37.0", + "@wordpress/keyboard-shortcuts": "^4.14.0", + "@wordpress/keycodes": "^3.37.0", + "@wordpress/notices": "^4.5.0", + "@wordpress/preferences": "^3.14.0", + "@wordpress/private-apis": "^0.19.0", + "@wordpress/rich-text": "^6.14.0", + "@wordpress/shortcode": "^3.37.0", + "@wordpress/style-engine": "^1.20.0", + "@wordpress/token-list": "^2.37.0", + "@wordpress/url": "^3.38.0", + "@wordpress/warning": "^2.37.0", + "@wordpress/wordcount": "^3.37.0", "change-case": "^4.1.2", "classnames": "^2.3.1", "colord": "^2.7.0", + "deepmerge": "^4.3.0", "diff": "^4.0.2", "dom-scroll-into-view": "^1.2.1", "fast-deep-equal": "^3.1.3", @@ -5629,9 +6310,9 @@ } }, "node_modules/@wordpress/block-serialization-default-parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-4.33.0.tgz", - "integrity": "sha512-CJtz7vaUOFlQGrlu+PLvLyObeG3RhB/Z9nzmJhTgpK5u61+SKVy/zsBk8ypHDLHjLGamv/DS5ZpqQNpJtqpkGg==", + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-4.37.0.tgz", + "integrity": "sha512-OF674nkHY5DKgM8PAiVXRngO4EbBXsL4UEhoTupyuTVvhyR2rIeGa7kUILxmCoRWxI1Es9JC52irOgYgm/MG+w==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -5641,33 +6322,33 @@ } }, "node_modules/@wordpress/blocks": { - "version": "12.10.0", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-12.10.0.tgz", - "integrity": "sha512-NKMQLLrEmKW7vIRlSDL/BHH5rUVSI+IGeuv2QEpuEy/MqO096EHyBrwIN3+Nm5M7PMuy5Fij4A+xV0qPvYz2yg==", + "version": "12.14.0", + "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-12.14.0.tgz", + "integrity": "sha512-76czLTTDaG5zjHOM9l+6JPrizGhY3XdeHZwfcXlnCo0lnvxgyHC6FoXAkk6l4h2foWeKgbzWy4Lq76i78+CD0A==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/autop": "^3.33.0", - "@wordpress/blob": "^3.33.0", - "@wordpress/block-serialization-default-parser": "^4.33.0", - "@wordpress/compose": "^6.10.0", - "@wordpress/data": "^9.3.0", - "@wordpress/deprecated": "^3.33.0", - "@wordpress/dom": "^3.33.0", - "@wordpress/element": "^5.10.0", - "@wordpress/hooks": "^3.33.0", - "@wordpress/html-entities": "^3.33.0", - "@wordpress/i18n": "^4.33.0", - "@wordpress/is-shallow-equal": "^4.33.0", - "@wordpress/private-apis": "^0.15.0", - "@wordpress/shortcode": "^3.33.0", + "@wordpress/autop": "^3.37.0", + "@wordpress/blob": "^3.37.0", + "@wordpress/block-serialization-default-parser": "^4.37.0", + "@wordpress/compose": "^6.14.0", + "@wordpress/data": "^9.7.0", + "@wordpress/deprecated": "^3.37.0", + "@wordpress/dom": "^3.37.0", + "@wordpress/element": "^5.14.0", + "@wordpress/hooks": "^3.37.0", + "@wordpress/html-entities": "^3.37.0", + "@wordpress/i18n": "^4.37.0", + "@wordpress/is-shallow-equal": "^4.37.0", + "@wordpress/private-apis": "^0.19.0", + "@wordpress/shortcode": "^3.37.0", "change-case": "^4.1.2", "colord": "^2.7.0", + "deepmerge": "^4.3.0", "fast-deep-equal": "^3.1.3", "hpq": "^1.3.0", "is-plain-object": "^5.0.0", - "lodash": "^4.17.21", - "memize": "^1.1.0", + "memize": "^2.1.0", "rememo": "^4.0.2", "remove-accents": "^0.4.2", "showdown": "^1.9.1", @@ -5691,11 +6372,12 @@ } }, "node_modules/@wordpress/components": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-24.0.0.tgz", - "integrity": "sha512-ZtImZZ7uXYNBf8U5Y06PcDaT3qKIPMNSJaR18QiwJ97dfi02DUVh276BnMdWbJo7QF0YvDOr/07Hf+n/Opw49A==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-25.3.0.tgz", + "integrity": "sha512-FriXiYSJSUvM+Cwvg2CGpgSheUH562voURqjWYdFMzUmKm/16eyr/qFzthQUWeTluDJ5wYMjR1hR8pYvSohmrA==", "dev": true, "dependencies": { + "@ariakit/react": "^0.2.10", "@babel/runtime": "^7.16.0", "@emotion/cache": "^11.7.1", "@emotion/css": "^11.7.1", @@ -5704,24 +6386,25 @@ "@emotion/styled": "^11.6.0", "@emotion/utils": "^1.0.0", "@floating-ui/react-dom": "1.0.0", + "@radix-ui/react-dropdown-menu": "^2.0.4", "@use-gesture/react": "^10.2.24", - "@wordpress/a11y": "^3.33.0", - "@wordpress/compose": "^6.10.0", - "@wordpress/date": "^4.33.0", - "@wordpress/deprecated": "^3.33.0", - "@wordpress/dom": "^3.33.0", - "@wordpress/element": "^5.10.0", - "@wordpress/escape-html": "^2.33.0", - "@wordpress/hooks": "^3.33.0", - "@wordpress/html-entities": "^3.33.0", - "@wordpress/i18n": "^4.33.0", - "@wordpress/icons": "^9.24.0", - "@wordpress/is-shallow-equal": "^4.33.0", - "@wordpress/keycodes": "^3.33.0", - "@wordpress/primitives": "^3.31.0", - "@wordpress/private-apis": "^0.15.0", - "@wordpress/rich-text": "^6.10.0", - "@wordpress/warning": "^2.33.0", + "@wordpress/a11y": "^3.37.0", + "@wordpress/compose": "^6.14.0", + "@wordpress/date": "^4.37.0", + "@wordpress/deprecated": "^3.37.0", + "@wordpress/dom": "^3.37.0", + "@wordpress/element": "^5.14.0", + "@wordpress/escape-html": "^2.37.0", + "@wordpress/hooks": "^3.37.0", + "@wordpress/html-entities": "^3.37.0", + "@wordpress/i18n": "^4.37.0", + "@wordpress/icons": "^9.28.0", + "@wordpress/is-shallow-equal": "^4.37.0", + "@wordpress/keycodes": "^3.37.0", + "@wordpress/primitives": "^3.35.0", + "@wordpress/private-apis": "^0.19.0", + "@wordpress/rich-text": "^6.14.0", + "@wordpress/warning": "^2.37.0", "change-case": "^4.1.2", "classnames": "^2.3.1", "colord": "^2.7.0", @@ -5730,11 +6413,11 @@ "dom-scroll-into-view": "^1.2.1", "downshift": "^6.0.15", "fast-deep-equal": "^3.1.3", - "framer-motion": "^10.11.6", + "framer-motion": "~10.11.6", "gradient-parser": "^0.1.5", "highlight-words-core": "^1.2.2", "is-plain-object": "^5.0.0", - "memize": "^1.1.0", + "memize": "^2.1.0", "path-to-regexp": "^6.2.1", "re-resizable": "^6.4.0", "react-colorful": "^5.3.1", @@ -5753,19 +6436,19 @@ } }, "node_modules/@wordpress/compose": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.10.0.tgz", - "integrity": "sha512-5TdhcvO+0DTaMxqc1ntKOxmkNcM7Julf/ByiabvL7iey8ODzm92neOOqT/HqvJsyvgP8tX9gQrb21nAHmpDPKQ==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.14.0.tgz", + "integrity": "sha512-cK5SlochLhSvAdO22isIlzL8fnzGAVgpXFdGY5Bm2IP1bswTIBojTAFzps+rj2jhy80Hg4OytwJOLhZUw5ruhA==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", "@types/mousetrap": "^1.6.8", - "@wordpress/deprecated": "^3.33.0", - "@wordpress/dom": "^3.33.0", - "@wordpress/element": "^5.10.0", - "@wordpress/is-shallow-equal": "^4.33.0", - "@wordpress/keycodes": "^3.33.0", - "@wordpress/priority-queue": "^2.33.0", + "@wordpress/deprecated": "^3.37.0", + "@wordpress/dom": "^3.37.0", + "@wordpress/element": "^5.14.0", + "@wordpress/is-shallow-equal": "^4.37.0", + "@wordpress/keycodes": "^3.37.0", + "@wordpress/priority-queue": "^2.37.0", "change-case": "^4.1.2", "clipboard": "^2.0.8", "mousetrap": "^1.6.5", @@ -5779,19 +6462,19 @@ } }, "node_modules/@wordpress/data": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.3.0.tgz", - "integrity": "sha512-h5ru+aHuDs9X+eXCy2IyFg+E7RvrNd9dOERojuL/kJrJu1lwFZlAYbVSGSCTNMK48iQ1O4zhgTSXOqJTDlVP3Q==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.7.0.tgz", + "integrity": "sha512-RBsgmAsG8ghR8U5zSlaAQYkovBMimAP+cnnjD1dwSq4ZPoHYXzzWPfHniVuOshK50x9pXt5ru0Zl6lvA2Es4CA==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/compose": "^6.10.0", - "@wordpress/deprecated": "^3.33.0", - "@wordpress/element": "^5.10.0", - "@wordpress/is-shallow-equal": "^4.33.0", - "@wordpress/priority-queue": "^2.33.0", - "@wordpress/private-apis": "^0.15.0", - "@wordpress/redux-routine": "^4.33.0", + "@wordpress/compose": "^6.14.0", + "@wordpress/deprecated": "^3.37.0", + "@wordpress/element": "^5.14.0", + "@wordpress/is-shallow-equal": "^4.37.0", + "@wordpress/priority-queue": "^2.37.0", + "@wordpress/private-apis": "^0.19.0", + "@wordpress/redux-routine": "^4.37.0", "deepmerge": "^4.3.0", "equivalent-key-map": "^0.2.2", "is-plain-object": "^5.0.0", @@ -5808,13 +6491,13 @@ } }, "node_modules/@wordpress/date": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-4.33.0.tgz", - "integrity": "sha512-/89PVO9u9QbbyKpmrGSyFUdDnlaLbBNml19lo3Ob+Jq6kIihUduM40JBYi9Zej61fGwOCrQOjJjbOmeUWA11tw==", + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-4.37.0.tgz", + "integrity": "sha512-7h5BQJboI6Tedm/ZJebh9b/+1QgJUV8OHbehVW5Xx8K1RFHCMScP5BmxxgBpl17HcohRHqljkYfVH2ePCbsThg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/deprecated": "^3.33.0", + "@wordpress/deprecated": "^3.37.0", "moment": "^2.29.4", "moment-timezone": "^0.5.40" }, @@ -5839,35 +6522,35 @@ } }, "node_modules/@wordpress/deprecated": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-3.33.0.tgz", - "integrity": "sha512-/IDrLPEuSmYhV6kkaVvaPXMJD7pGng5yF9/SU6/q/lwYLD7d3jti3DzeUvkpdznq+tzUqOvdZHMVuGbMlQozKw==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-3.37.0.tgz", + "integrity": "sha512-lj5InuhaJGgg5jdceVL/8Raj0it4xdOO/TwlgbcJXhHFSIarUKqrg3JWA7Y427ibzJpq5ytGUYcSSbgVza7UlQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^3.33.0" + "@wordpress/hooks": "^3.37.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/dom": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-3.33.0.tgz", - "integrity": "sha512-uvidu1r6EpgVA2n6fe/JzugNC4V15MQoS75HS5cnSP9X0LAXs+vmstWcuP2F+9BYMxGnlmJH4YJ2aVnGh3S5Zg==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-3.37.0.tgz", + "integrity": "sha512-KFPAzQYvKbF8J+RQmsdTE2h6iKsHD73eZvNN0dEs3FvUJtWATo3GwGrSYH1SeHd72xfHZR4d/Uw/aUcwlph2vA==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/deprecated": "^3.33.0" + "@wordpress/deprecated": "^3.37.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/dom-ready": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-3.33.0.tgz", - "integrity": "sha512-ASX4hrA3WvzXyA2Qd5eXO5EeTHxqZC8QECJStesFBgbLlUE3ItUiMtMm11tM4r5oKPIdqWWD+jbbKByQOrtKbA==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-3.37.0.tgz", + "integrity": "sha512-qA28n37BaSYIYLmfyiZAObKOfneUbkRXRpiZkcD8TQQNOa6e7utl9A1C3uS19jeR5Od3kANtjSYJpKshabnstg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -5948,14 +6631,14 @@ } }, "node_modules/@wordpress/element": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.11.0.tgz", - "integrity": "sha512-PRmh2LLNsBKVwYGlff3Mq4P87icBin0AgP52wU0BpJw/Eiy4VnCm+PDw9LCEOMCTVIpLeJXN1VUt+yGZ+VzW6w==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.14.0.tgz", + "integrity": "sha512-W2lBumRvJ3UvB1qZaWAp268xvirZEzFwyS/epLUPIPOnIW4u7UBfEmEbhPx55KSuTFHSR/hbiYSuWBdbVpd8tA==", "dependencies": { "@babel/runtime": "^7.16.0", "@types/react": "^18.0.21", "@types/react-dom": "^18.0.6", - "@wordpress/escape-html": "^2.34.0", + "@wordpress/escape-html": "^2.37.0", "change-case": "^4.1.2", "is-plain-object": "^5.0.0", "react": "^18.2.0", @@ -5966,9 +6649,9 @@ } }, "node_modules/@wordpress/env": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-8.0.0.tgz", - "integrity": "sha512-2FjnpPDX+cHtA0yLudIFoU/m5HwsNdPvCtIkz+M36K3LqD5hdTe1pVgwEz4FTwaryKGlASDwGJDhFw9Rwoywug==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-8.3.0.tgz", + "integrity": "sha512-2H4oDLmQEGKtLMHAQegCyqJUdR4TGRPUkcsHZGIW4auoJW+goLn5c0P73Bg/oyqwJ4WtxvHgrHDKD2j5yYG6tQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", @@ -5989,9 +6672,9 @@ } }, "node_modules/@wordpress/escape-html": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.34.0.tgz", - "integrity": "sha512-xVBtkAfQmOeXb76CQESJeChDq1EA73PCUCJNRxRyDhCIyHBYWp+DmtvhXfwwuHnf0haJhQY2iQNqt5eKZPjBdQ==", + "version": "2.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.37.0.tgz", + "integrity": "sha512-YJZAsZIWLx+RMs2TyxqqR1w7oXbedE/zrtBJh5/Gbt0UIP64/gQOgoRaEX3EhPOFd7lGWzWr/vH0tgLVGm2jJg==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -6069,9 +6752,9 @@ } }, "node_modules/@wordpress/hooks": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.34.0.tgz", - "integrity": "sha512-qVBtsA8bjACRTL5tkeGkg9jb5O66JmLJY3zSFnQ4v97CTXdtNAFXSCVEIbwDsZSsXOu/ybX06teKsvS9v3tnXg==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.37.0.tgz", + "integrity": "sha512-rJ1hJjXCSD/jOXoaKug75N9PCcg65diexSsyxzVHJCjT2je9J5hVJbHiyB+JfvvGCK5H6qii9M9rKKvESZwXqw==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -6081,9 +6764,9 @@ } }, "node_modules/@wordpress/html-entities": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-3.33.0.tgz", - "integrity": "sha512-qZ98FcpEc3xwGoqfYQLwQ4wpkREFqpo9KKwvevrRT3gyHc98fnbbyD6SKisv7pMdXfDDqg70nREcUB1xwMf6jw==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-3.37.0.tgz", + "integrity": "sha512-nou3D4+dDGrvD9whY0kdQr8gW7EFmD2HG1QudPXN3zJYDvW+LIR9TXlJhXghZ0550AjlmYCszY4xjPB2ZpaOsg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -6093,13 +6776,13 @@ } }, "node_modules/@wordpress/i18n": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.34.0.tgz", - "integrity": "sha512-rC1Ll/48GNsYHFF8cUU1V+bfqjBtHAsDsB7F8O81tXjfkJDFsNq7J8Gti47lAgeqvQ934y+sj5gAmFaM7A+AdA==", + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.37.0.tgz", + "integrity": "sha512-bjq3C9DXAay4jEe1+Brl5Jt5hymf6LZfI8XuHYMw5ejFiQUUf3J/8DZZUpC+8xNOP8FAvO6W8BWOJISBJS+Ylw==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^3.34.0", + "@wordpress/hooks": "^3.37.0", "gettext-parser": "^1.3.1", "memize": "^2.1.0", "sprintf-js": "^1.1.1", @@ -6112,29 +6795,23 @@ "node": ">=12" } }, - "node_modules/@wordpress/i18n/node_modules/memize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/memize/-/memize-2.1.0.tgz", - "integrity": "sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg==", - "dev": true - }, "node_modules/@wordpress/icons": { - "version": "9.24.0", - "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-9.24.0.tgz", - "integrity": "sha512-XF/SaynOWDtKoZ8uLNCTWKMP+MnCU14r1ttUMNj/hLkfeQ7XHjrV4RjhFAWxA0vVNsxjuCPnR3QRNtE+DzxuMw==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-9.28.0.tgz", + "integrity": "sha512-tmC1rYdcQEAuW2uLNi2JFgEsmzZR+/xZlWzYPcuqU3+t9tGsDhwzCUjgUErLNtTSH4TGV/3+Ti/mULVIAlealg==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/element": "^5.10.0", - "@wordpress/primitives": "^3.31.0" + "@wordpress/element": "^5.14.0", + "@wordpress/primitives": "^3.35.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/is-shallow-equal": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-4.33.0.tgz", - "integrity": "sha512-5StJNlHnIrb0dnxjznVTKSuOvA5HTqcFmosY08aP4/SvEfP5FlNe9tus6/efmUYJFhJ3u1tGlJSM5xyO6UAc4Q==", + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-4.37.0.tgz", + "integrity": "sha512-DRZYvrGiA0VatKMkUWyqz+ihS+Nf6rl5QaPlpOywpoe2Zmk3Ca3QnNQuVsjFc7VxnV9NtDImCIVRK+9NpcqAeA==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -6199,15 +6876,15 @@ } }, "node_modules/@wordpress/keyboard-shortcuts": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-4.10.0.tgz", - "integrity": "sha512-BEp5ctEkY3hQAd37L75OSsb7Oq4ialNEALg8wz+tJRgd+bd6VNwRJb3dyEE2wyJm1xYPvrgR9uW/thIZDjvduA==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-4.14.0.tgz", + "integrity": "sha512-Rg5fZ2xfd7s5QCzBNgh7TCeQ29ateIn0YYhklbBEsEKZZSEFHeoCMLGnfS8c+evmdVl1++9KmN3b6cOn5v7mDg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/data": "^9.3.0", - "@wordpress/element": "^5.10.0", - "@wordpress/keycodes": "^3.33.0", + "@wordpress/data": "^9.7.0", + "@wordpress/element": "^5.14.0", + "@wordpress/keycodes": "^3.37.0", "rememo": "^4.0.2" }, "engines": { @@ -6218,13 +6895,13 @@ } }, "node_modules/@wordpress/keycodes": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.34.0.tgz", - "integrity": "sha512-gwzOrv+jCYJdMMgCInFQErlxq4FDhJWE8vzBjqZW+meACeyWqVsfLGTfVgc/qWqy/hno+IivfiQbHLCBAO1tFw==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.37.0.tgz", + "integrity": "sha512-cbxoygTVPysy8pkyPgcnHfu7G0qD2QnKFffeVj/X2PCXA8KAAORrnErtpm+ULUagYjjfNb1J5ttj/cUf1Bgzvg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.34.0", + "@wordpress/i18n": "^4.37.0", "change-case": "^4.1.2" }, "engines": { @@ -6232,14 +6909,14 @@ } }, "node_modules/@wordpress/notices": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-4.1.0.tgz", - "integrity": "sha512-rDnOz6cNzyQdrNf5hwwNZpgj+CML831hv0ecvpwtLl+hPjA1+HA0fQzBdlOcQm+veIkZ9v/A1VBT+fhZY0lPlw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-4.5.0.tgz", + "integrity": "sha512-xjKBCtT6w5rV+Ann8vvU+StiLzsoWIli8Udi/8LigTbcLOHEqyNy107jXuU2cQWZoqzKhRUbCypanjkXiblqUQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.33.0", - "@wordpress/data": "^9.3.0" + "@wordpress/a11y": "^3.37.0", + "@wordpress/data": "^9.7.0" }, "engines": { "node": ">=12" @@ -6274,17 +6951,17 @@ } }, "node_modules/@wordpress/preferences": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-3.10.0.tgz", - "integrity": "sha512-qOCBjlRoLfqsHhjDkBsV+xi+zbQShxwAARoSJk5QGoqbxTdBtyougN2+mbo59yxmTqf9K0VO7kQ+qnjKLkrhOA==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-3.14.0.tgz", + "integrity": "sha512-PN3Ph2W9Ex7kdr9WFo9WFlixyjAunXItfgpKlXqQ2PygnACP7F82O9g+QVH2t5IdJnNkUzf6vUwyBpH+qb4FbQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.33.0", - "@wordpress/components": "^24.0.0", - "@wordpress/data": "^9.3.0", - "@wordpress/i18n": "^4.33.0", - "@wordpress/icons": "^9.24.0", + "@wordpress/a11y": "^3.37.0", + "@wordpress/components": "^25.3.0", + "@wordpress/data": "^9.7.0", + "@wordpress/i18n": "^4.37.0", + "@wordpress/icons": "^9.28.0", "classnames": "^2.3.1" }, "engines": { @@ -6308,12 +6985,12 @@ } }, "node_modules/@wordpress/primitives": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-3.31.0.tgz", - "integrity": "sha512-oMQAxp4LC5hsDR2W1t1DYb3PCfCPeSe/y+C/DsV7LgyFFUqrKphu328hkdkDppS3xeb/uf0N9sPSGFDKU6UVxw==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-3.35.0.tgz", + "integrity": "sha512-WbUhppAukCOO4wKkYZDLXAsNnjcSKECQG7pK9TmJcGWzbJOjklf+7mV3mGKx70+U8ffVFRyYURJ0DsluXEZK8Q==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/element": "^5.10.0", + "@wordpress/element": "^5.14.0", "classnames": "^2.3.1" }, "engines": { @@ -6321,9 +6998,9 @@ } }, "node_modules/@wordpress/priority-queue": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-2.33.0.tgz", - "integrity": "sha512-6QvXTUM2zDsZHooVFH9gW/wNe2Gs6sn5yIJZ/b7sLYEPfALBNZzBtEHUjRcT4BMVTxMu47YUy0D0DyRIOxKPzw==", + "version": "2.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-2.37.0.tgz", + "integrity": "sha512-3aIAjFlgyASVrRxe36ep3vX3cahmdBEL7nFWsCQPrPudh3c0jAjITW+f5IQ1xmmwnFZfiUbggPxtS1f3FQOcXg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", @@ -6334,9 +7011,9 @@ } }, "node_modules/@wordpress/private-apis": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-0.15.0.tgz", - "integrity": "sha512-MEkMinYbIu/YqtZ1Ou/2yYUVi2CNUpMdw+Grw9w+fOt5V3hmHwzWpLvyMTcWnlkn7XJN43f2WbP4myF0eG2buQ==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-0.19.0.tgz", + "integrity": "sha512-oObjdfSbvYrbicwLEBSrZQF6KOe9CUfWXJsZqqmkpbkOmGMb2NfdzHa1oJ0UcGwAHelBxHpmIt0C7jzUzUJ0sQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -6346,9 +7023,9 @@ } }, "node_modules/@wordpress/redux-routine": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-4.33.0.tgz", - "integrity": "sha512-EzZALTd5v8PeR222MbMghuY+z6XaRkuPbQy7RsBjc6h1pcOIAdvF3vABO/Y+H011SYZ9hdyHqn5LamH/5iHZlA==", + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-4.37.0.tgz", + "integrity": "sha512-VS/MYhIGHs3/5eXG1wsFGWoSJNVKrlug0RZtUMox3UhkJShT0LkfOaaLNdwBdTGQwciZRT0TxsiQ7UerZJIHrg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", @@ -6364,21 +7041,21 @@ } }, "node_modules/@wordpress/rich-text": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-6.10.0.tgz", - "integrity": "sha512-3SXGNp6yLS5vbXXW2VZtaAzrgHMvpEziFJPMiBL5lM19mM/lJL+gOnm/cUmubIIVFVTEoEEUt7sAeQTYopAMaw==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-6.14.0.tgz", + "integrity": "sha512-BVETmK82ru437CQQzwVnceUnkt70JPnhPo5EBP43sGovOM0HHL5SMJk9lnnOqbPW+GpqobUAcZAI8EURIAjH8g==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.33.0", - "@wordpress/compose": "^6.10.0", - "@wordpress/data": "^9.3.0", - "@wordpress/deprecated": "^3.33.0", - "@wordpress/element": "^5.10.0", - "@wordpress/escape-html": "^2.33.0", - "@wordpress/i18n": "^4.33.0", - "@wordpress/keycodes": "^3.33.0", - "memize": "^1.1.0", + "@wordpress/a11y": "^3.37.0", + "@wordpress/compose": "^6.14.0", + "@wordpress/data": "^9.7.0", + "@wordpress/deprecated": "^3.37.0", + "@wordpress/element": "^5.14.0", + "@wordpress/escape-html": "^2.37.0", + "@wordpress/i18n": "^4.37.0", + "@wordpress/keycodes": "^3.37.0", + "memize": "^2.1.0", "rememo": "^4.0.2" }, "engines": { @@ -6600,26 +7277,26 @@ } }, "node_modules/@wordpress/shortcode": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-3.33.0.tgz", - "integrity": "sha512-QIjK6XaPqUz5DNoPjy4X6tFm+OMmWRTlJb++c/pU8aeSdLE619Rv4bet6BKCxaArHln1zR7uI27+LBnUZ4mMQA==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-3.37.0.tgz", + "integrity": "sha512-ii2uuIycNC0L1IZDJ/NMklNPhVLQVHaSKrfL7L1e4sgvUznIGQFik/SOJuyIJ5w3Ob0E1cJ5O+FBL4ki9hiQMg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "memize": "^1.1.0" + "memize": "^2.0.1" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/style-engine": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-1.16.0.tgz", - "integrity": "sha512-/GDnWt+7gtP/e3IuHOqFH7T/Pkny1CAMYQso46NiuqBMjUU20zwyGkF7ItOAwIm+X9BesrPFvXQBGsuWalKVew==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-1.20.0.tgz", + "integrity": "sha512-c12rUvbQ1rV/mMwdLRkAePhabn8hWMGnIXgwuSubg2mlZwxLPXVP6vIP3qFGBgkVe2EWM5CYXA2tugnEFThO5A==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "lodash": "^4.17.21" + "change-case": "^4.1.2" }, "engines": { "node": ">=12" @@ -6642,9 +7319,9 @@ } }, "node_modules/@wordpress/token-list": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-2.33.0.tgz", - "integrity": "sha512-RJ23ZL/4Ai2nO0QPUuY41JZrT/QMPBxiSaRydx4Ux9yKm8MploGMcVr/8aNN1kS3nMZmu2dlRslS2Utt/1uDmQ==", + "version": "2.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-2.37.0.tgz", + "integrity": "sha512-3TFJwVrctUsmA9hhqdLyug7FF7LhwsbpzKKiULvCTyJyH7wBaMc6OB3/gkKEq+B8jwHbH1laNdS5l0p9h2XVKQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -6654,9 +7331,9 @@ } }, "node_modules/@wordpress/url": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.35.0.tgz", - "integrity": "sha512-lJoGQhKRcuLD07yMKqoYPbQQjZzo4791DXdq3icA1Fx9yjvCJYsFu78sbiNCCKEJIY4mfrDbL/k6lP0EpDCX6Q==", + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.38.0.tgz", + "integrity": "sha512-vWZMecRqmIvGOzVwFKoZkDHwPHaoOVrYAo7f+rmn8/fqKcjf7ube28wkIPVxq7F8W4E9YFOvDjcqzArVD1HG1A==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", @@ -6667,18 +7344,18 @@ } }, "node_modules/@wordpress/warning": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.34.0.tgz", - "integrity": "sha512-y1zYJjj0oydNrET+xD2ji6O4OA7MN+ugqSYvkuITMf+0tcPZfH4BdW0wMQgy1QjDGd6HPH8C3xH4Omhn+NFr5g==", + "version": "2.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.37.0.tgz", + "integrity": "sha512-CjntU9j/GUPzDDJlsr7SpKT1dXlfW94D1s7ZBuAGcKeNnqXQ/INBk6FsKvbCdSPA0BS8CpEqToedkF+pmt5DSQ==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/@wordpress/wordcount": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-3.33.0.tgz", - "integrity": "sha512-7qCT29mKDPR9rBNUaSAojxHmHbbyn6pO4Wu36uvwOklpVHxtibpiOD43X340AxiexiM+eBVFO4e0W4mxBVfO4g==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-3.37.0.tgz", + "integrity": "sha512-bdqDIlplXvxSFlvoFm8KM2b99DtezS7R15+RbjFrt+zb2CsjP5xmtDMZs0wN6jDVp4ys4QEMgsBz4B5xJdmTzQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -7024,6 +7701,18 @@ "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", "dev": true }, + "node_modules/aria-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/aria-query": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", @@ -10437,6 +11126,12 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "dev": true + }, "node_modules/devtools-protocol": { "version": "0.0.1120988", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1120988.tgz", @@ -12691,9 +13386,9 @@ } }, "node_modules/framer-motion": { - "version": "10.12.12", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.12.12.tgz", - "integrity": "sha512-DDCqp60U6hR7aUrXj/BXc/t0Sd/U4ep6w/NZQkw898K+u7s+Vv/P8yxq4WTNA86kU9QCsqOgn1Qhz2DpYK0Oag==", + "version": "10.11.6", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.11.6.tgz", + "integrity": "sha512-QXfnUzPQqbJEnWpmtPaRB4OCuyH44uCys5Agg44LEQvItKTg0bou57WuhsNVuEyVCnMoAhrtRYiKeG/vAz6bFw==", "dev": true, "dependencies": { "tslib": "^2.4.0" @@ -12902,6 +13597,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -17177,9 +17881,9 @@ } }, "node_modules/memize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/memize/-/memize-1.1.0.tgz", - "integrity": "sha512-K4FcPETOMTwe7KL2LK0orMhpOmWD2wRGwWWpbZy0fyArwsyIKR8YJVz8+efBAh3BO4zPqlSICu4vsLTRRqtFAg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/memize/-/memize-2.1.0.tgz", + "integrity": "sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg==", "dev": true }, "node_modules/memorystream": { @@ -23096,6 +23800,53 @@ "node": ">=0.10.0" } }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dev": true, + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "dev": true, + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-sortable-hoc": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-sortable-hoc/-/react-sortable-hoc-2.0.0.tgz", @@ -23111,6 +23862,29 @@ "react-dom": "^16.3.0 || ^17.0.0" } }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dev": true, + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-visibility-sensor": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/react-visibility-sensor/-/react-visibility-sensor-5.1.1.tgz", @@ -26800,16 +27574,16 @@ "dev": true }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uc.micro": { @@ -27252,6 +28026,27 @@ "node": ">=0.10.0" } }, + "node_modules/use-callback-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-lilius": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/use-lilius/-/use-lilius-2.0.3.tgz", @@ -27274,6 +28069,28 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dev": true, + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", diff --git a/package.json b/package.json index d45dd952b..171005589 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "lasttranslator": "Themeisle Translate Team " }, "dependencies": { - "@wordpress/icons": "^9.23.0", + "@wordpress/icons": "^9.27.0", "array-move": "^3.0.1", "classnames": "^2.3.1", "currency-symbol-map": "^5.0.1", @@ -77,17 +77,17 @@ "@types/jest": "^29.5.1", "@types/wordpress__block-editor": "^11.5.1", "@types/wordpress__components": "^23.0.1", - "@typescript-eslint/parser": "^5.59.6", - "@wordpress/block-editor": "^12.1.0", - "@wordpress/components": "^24.0.0", + "@typescript-eslint/parser": "^5.61.0", + "@wordpress/block-editor": "^12.5.0", + "@wordpress/components": "^25.3.0", "@wordpress/compose": "^6.10.0", - "@wordpress/data": "^9.3.0", - "@wordpress/dom-ready": "^3.33.0", + "@wordpress/data": "^9.7.0", + "@wordpress/dom-ready": "^3.36.0", "@wordpress/e2e-test-utils": "^10.4.0", "@wordpress/e2e-test-utils-playwright": "^0.2.0", "@wordpress/e2e-tests": "^7.4.0", - "@wordpress/element": "^5.10.0", - "@wordpress/env": "^8.0.0", + "@wordpress/element": "^5.14.0", + "@wordpress/env": "^8.3.0", "@wordpress/scripts": "^26.5.0", "conventional-changelog-simple-preset": "^1.0.20", "eslint-config-wordpress": "^2.0.0", @@ -105,7 +105,7 @@ "semantic-release": "^19.0.5", "semantic-release-slack-bot": "^3.5.2", "simple-statistics": "^7.8.3", - "typescript": "^4.9.5" + "typescript": "^5.1.6" }, "optionalDependencies": { "fsevents": "^2.3.2" diff --git a/plugins/otter-pro/inc/class-main.php b/plugins/otter-pro/inc/class-main.php index 5c0a50d29..4b7fabf6c 100644 --- a/plugins/otter-pro/inc/class-main.php +++ b/plugins/otter-pro/inc/class-main.php @@ -67,6 +67,7 @@ public function autoload_classes( $classnames ) { '\ThemeIsle\OtterPro\Plugins\Posts_ACF_Integration', '\ThemeIsle\OtterPro\Plugins\Review_Woo_Integration', '\ThemeIsle\OtterPro\Plugins\WooCommerce_Builder', + '\ThemeIsle\OtterPro\Plugins\Stripe_Pro_Features', '\ThemeIsle\OtterPro\Server\Dashboard_Server', '\ThemeIsle\OtterPro\Server\Filter_Blocks_Server', '\ThemeIsle\OtterPro\Server\Live_Search_Server', diff --git a/plugins/otter-pro/inc/plugins/class-dynamic-content.php b/plugins/otter-pro/inc/plugins/class-dynamic-content.php index f4eb6f247..b1bd072ea 100644 --- a/plugins/otter-pro/inc/plugins/class-dynamic-content.php +++ b/plugins/otter-pro/inc/plugins/class-dynamic-content.php @@ -223,6 +223,32 @@ public function get_acf( $data ) { $meta = get_field( esc_html( $data['metaKey'] ), $data['context'], true ); } + if ( is_array( $meta ) ) { + if ( isset( $meta[0] ) ) { + $display = array(); + + if ( is_string( $meta[0] ) ) { + $display = $meta; + } elseif ( isset( $meta[0]['label'] ) ) { + foreach ( $meta as $item ) { + if ( isset( $item['label'] ) ) { + $display[] = $item['label']; + } + } + } + + $meta = implode( ', ', $display ); + } + + if ( isset( $meta['label'] ) ) { + $meta = $meta['label']; + } + } + + if ( false === $meta || true === $meta ) { + $meta = $meta ? __( 'Yes', 'otter-blocks' ) : __( 'No', 'otter-blocks' ); + } + if ( empty( $meta ) || ! is_string( $meta ) ) { $meta = $default; } @@ -437,7 +463,7 @@ public function evaluate_content_media_server( $path, $request ) { if ( 'product' === $type && class_exists( 'WooCommerce' ) && ! empty( $id ) ) { $product = wc_get_product( $id ); $image = $product->get_image_id(); - + if ( $image ) { $path = wp_get_original_image_path( intval( $image ) ); } else { @@ -497,7 +523,7 @@ public function evaluate_content_media_content( $value, $data ) { if ( 'product' === $data['type'] && class_exists( 'WooCommerce' ) && isset( $data['id'] ) && ! empty( $data['id'] ) ) { $product = wc_get_product( $data['id'] ); $image = $product->get_image_id(); - + if ( $image ) { $value = wp_get_attachment_image_url( intval( $image ), 'full' ); } else { diff --git a/plugins/otter-pro/inc/plugins/class-form-pro-features.php b/plugins/otter-pro/inc/plugins/class-form-pro-features.php index 8b4394b4d..2ef9c3056 100644 --- a/plugins/otter-pro/inc/plugins/class-form-pro-features.php +++ b/plugins/otter-pro/inc/plugins/class-form-pro-features.php @@ -336,7 +336,7 @@ public function send_autoresponder( $form_data ) { $autoresponder = $form_data->get_form_options()->get_autoresponder(); $body = $this->replace_magic_tags( $autoresponder['body'], $form_data->get_form_inputs() ); - // phpcs:ignore + // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_mail_wp_mail if ( ! wp_mail( $to, $autoresponder['subject'], $body, $headers ) ) { $form_data->add_warning( \ThemeIsle\GutenbergBlocks\Integration\Form_Data_Response::ERROR_AUTORESPONDER_COULD_NOT_SEND ); } diff --git a/plugins/otter-pro/inc/plugins/class-stripe-pro-features.php b/plugins/otter-pro/inc/plugins/class-stripe-pro-features.php new file mode 100644 index 000000000..729c7f53b --- /dev/null +++ b/plugins/otter-pro/inc/plugins/class-stripe-pro-features.php @@ -0,0 +1,115 @@ +get_session_email( $session_id ); + if ( ! $email ) { + return; + } + + $to = $email; + $headers[] = 'Content-Type: text/html'; + $headers[] = 'From: ' . get_bloginfo( 'name', 'display' ); + $subject = $attributes['autoresponder']['subject']; + $body = $attributes['autoresponder']['body']; + + // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_mail_wp_mail + if ( wp_mail( $to, $subject, $body, $headers ) ) { + set_transient( $transient_key, true, WEEK_IN_SECONDS ); + } + } + + /** + * The instance method for the static class. + * Defines and returns the instance of the static class. + * + * @static + * @since 1.7.1 + * @access public + * @return Stripe_Pro_Features + */ + public static function instance() { + if ( is_null( self::$instance ) ) { + self::$instance = new self(); + self::$instance->init(); + } + + return self::$instance; + } + + /** + * Throw error on object clone + * + * The whole idea of the singleton design pattern is that there is a single + * object therefore, we don't want the object to be cloned. + * + * @access public + * @since 1.7.1 + * @return void + */ + public function __clone() { + // Cloning instances of the class is forbidden. + _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'otter-blocks' ), '1.0.0' ); + } + + /** + * Disable unserializing of the class + * + * @access public + * @since 1.7.1 + * @return void + */ + public function __wakeup() { + // Unserializing instances of the class is forbidden. + _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'otter-blocks' ), '1.0.0' ); + } +} diff --git a/plugins/otter-pro/inc/server/class-filter-blocks-server.php b/plugins/otter-pro/inc/server/class-filter-blocks-server.php index 82fd595b6..985ce0f44 100644 --- a/plugins/otter-pro/inc/server/class-filter-blocks-server.php +++ b/plugins/otter-pro/inc/server/class-filter-blocks-server.php @@ -92,7 +92,7 @@ public function filter_blocks( $request ) { ) ); - unset( $post_types['attachment'] ); + $post_types = array_diff( $post_types, array( 'attachment' ) ); array_push( $post_types, 'wp_block' ); foreach ( $post_types as $key => $post_type ) { diff --git a/src/blocks/blocks/form/inspector.js b/src/blocks/blocks/form/inspector.js index 68e91900a..3cdcb30ec 100644 --- a/src/blocks/blocks/form/inspector.js +++ b/src/blocks/blocks/form/inspector.js @@ -261,7 +261,7 @@ const FormOptions = ({ formOptions, setFormOption, attributes, setAttributes }) false } - label={ __( 'Autoresponder (Pro)', 'otter-blocks' ) } + label={ __( 'Autoresponder', 'otter-blocks' ) } onDeselect={ () => {} } >
- +
+ +
{ /** translators: %s Rating score. */ sprintf( __( '%f out of %f', 'otter-blocks' ), Math.max( Math.abs( overallRatings / divide ).toFixed( 1 ) || 0, 1 ), 10 / divide ) } @@ -340,9 +345,10 @@ const Edit = ({ />
- - - +
+ +
+ { /** translators: %s Rating score. */ sprintf( __( '%f out of %f', 'otter-blocks' ), Math.max( Math.abs( feature.rating / divide ).toFixed( 1 ) || 0, 1 ), 10 / divide ) }
diff --git a/src/blocks/blocks/review/inspector.js b/src/blocks/blocks/review/inspector.js index 1ca7a3c20..0b5c2f7ad 100644 --- a/src/blocks/blocks/review/inspector.js +++ b/src/blocks/blocks/review/inspector.js @@ -55,6 +55,11 @@ import { } from '../../helpers/helper-functions.js'; import { useResponsiveAttributes } from '../../helpers/utility-hooks.js'; +/** + * Block Styles + * + * @type {import('../../helpers/blocks').BlockStyle[]} + */ const styles = [ { label: __( 'Default', 'otter-blocks' ), @@ -67,6 +72,18 @@ const styles = [ } ]; +/** + * Extra Styles + * + * @type {import('../../helpers/blocks').BlockStyle[]} + */ +const extraStyles = [ + { + label: __( 'Inline', 'otter-blocks' ), + value: 'inline-features' + } +]; + const headingOptions = [ { label: __( 'H2', 'otter-blocks' ), @@ -430,6 +447,16 @@ const Inspector = ({ title={ __( 'Product Features', 'otter-blocks' ) } initialOpen={ false } > + { + setAttributes({ + className: changeActiveStyle( attributes?.className, extraStyles, value ? 'inline-features' : undefined ) + }); + } } + /> + { 0 < attributes.features.length && attributes.features.map( ( feature, index ) => ( { + return ( + + + + EXAMPLE, which can be applied during checkout on our website', 'otter-blocks' )} + rows={2} + help={ __( 'Enter the body of the autoresponder email.', 'otter-blocks' ) } + disabled + className="o-disabled" + /> + + { + ( ! Boolean( window?.otterPro?.isActive ) && Boolean( window?.themeisleGutenberg?.hasPro ) ) && ( + + ) + } + + { + ( ! Boolean( window?.themeisleGutenberg?.hasPro ) ) && ( +
+ { __( 'Unlock this with Otter Pro.', 'otter-blocks' ) } } + variant="upsell" + /> +

{ __( 'Automatically send follow-up emails to your users with the Autoresponder feature.', 'otter-blocks' ) }

+
+ ) + } +
+ ); +}; const Inspector = ({ attributes, @@ -160,6 +215,13 @@ const Inspector = ({ { __( 'Save API Key', 'otter-blocks' ) } + + { applyFilters( + 'otter.stripe-checkout.inspector', + , + attributes, + setAttributes + ) } ); }; diff --git a/src/blocks/blocks/stripe-checkout/types.d.ts b/src/blocks/blocks/stripe-checkout/types.d.ts index 1150adde5..1bdd144cf 100644 --- a/src/blocks/blocks/stripe-checkout/types.d.ts +++ b/src/blocks/blocks/stripe-checkout/types.d.ts @@ -5,6 +5,10 @@ type Attributes = { price: string successMessage: string cancelMessage: string + autoresponder: { + subject: string + body: string + } } export type StripeCheckoutProps = BlockProps diff --git a/src/blocks/components/rich-text-editor/index.js b/src/blocks/components/rich-text-editor/index.js index 9a71a1158..dc7fb4177 100644 --- a/src/blocks/components/rich-text-editor/index.js +++ b/src/blocks/components/rich-text-editor/index.js @@ -20,10 +20,19 @@ const RichTextEditor = ({ value, onChange, help = '', - allowRawHTML = false + allowRawHTML = false, + area = '' }) => { const instanceId = useInstanceId( RichTextEditor ); + const editorRef = useRef( null ); + + const removeEditor = () => { + if ( editorRef?.current?.id !== undefined ) { + wp.oldEditor.remove( editorRef.current.id ); + } + }; + useEffect( () => { const settings = { classic_block_editor: true, // eslint-disable-line camelcase @@ -47,12 +56,10 @@ const RichTextEditor = ({ onChange( allowRawHTML ? decodeHTMLEntities( editor.getContent() ) : editor.getContent() ); }); - return () => editorRef?.current?.id !== undefined ? wp.oldEditor.remove( editorRef.current.id ) : undefined; + return removeEditor; }, []); - const id = `inspector-textarea-control-${ instanceId }`; - - const editorRef = useRef( null ); + const id = `inspector-textarea-control-${ instanceId }-${ area }`; const onChangeValue = ( e ) => onChange( e.target.value ); diff --git a/src/blocks/editor.scss b/src/blocks/editor.scss index cf0af68f8..a4233aebc 100644 --- a/src/blocks/editor.scss +++ b/src/blocks/editor.scss @@ -145,3 +145,7 @@ svg.o-block-icon { } } } + +.o-autoresponder-margin { + margin-top: 10px; +} diff --git a/src/blocks/frontend/form/index.js b/src/blocks/frontend/form/index.js index 3c2ec262a..9aae3f195 100644 --- a/src/blocks/frontend/form/index.js +++ b/src/blocks/frontend/form/index.js @@ -348,6 +348,10 @@ const collectAndSendInputFormData = async( form, btn, displayMsg ) => { form?.querySelector( 'form' )?.reset(); + if ( 0 < res?.redirectLink?.length ) { + form.setAttribute( 'data-redirect', res.redirectLink ); + } + setTimeout( () => { if ( 0 < res?.redirectLink?.length ) { let a = document.createElement( 'a' ); diff --git a/src/blocks/helpers/blocks.d.ts b/src/blocks/helpers/blocks.d.ts index 29f707893..3ab361d1a 100644 --- a/src/blocks/helpers/blocks.d.ts +++ b/src/blocks/helpers/blocks.d.ts @@ -10,7 +10,7 @@ export type BlockProps = { } export interface InspectorProps { - attributes: Partial + attributes: Partial & { className?: string } setAttributes: ( attributes: Partial ) => void } @@ -80,3 +80,9 @@ export type Responsive = { tablet?: T, mobile?: T } + +export type BlockStyle = { + label: string, + value: string + isDefault?: boolean +} diff --git a/src/blocks/helpers/helper-functions.js b/src/blocks/helpers/helper-functions.js index ad220bd6d..c203d1a8a 100644 --- a/src/blocks/helpers/helper-functions.js +++ b/src/blocks/helpers/helper-functions.js @@ -461,7 +461,7 @@ export const buildResponsiveGetAttributes = ( currentView, defaultView = 'Deskto /** * Get Active Style Name. * - * @param { Object } styles Block styles. + * @param { import('./blocks').BlockStyle[] } styles Block styles. * @param { string | undefined } className Classes of the block. * * @returns { string } diff --git a/src/blocks/plugins/image-extension/edit.js b/src/blocks/plugins/image-extension/edit.js index eb5d138ba..241dd5c6e 100644 --- a/src/blocks/plugins/image-extension/edit.js +++ b/src/blocks/plugins/image-extension/edit.js @@ -103,20 +103,17 @@ const Edit = ({ const [ cssNodeName, setNodeCSS ] = useCSSNode(); useEffect( () => { setNodeCSS([ - `img { + attributes.boxShadow ? `img { box-shadow: ${ attributes.boxShadowHorizontal }px ${ attributes.boxShadowVertical }px ${ attributes.boxShadowBlur }px ${ getShadowColor() } } - ` ]); - }, [ attributes.boxShadowHorizontal, attributes.boxShadowVertical, attributes.boxShadowBlur, attributes.boxShadowColor, attributes.boxShadowColorOpacity ]); + ` : '' ]); + }, [ attributes.boxShadowHorizontal, attributes.boxShadowVertical, attributes.boxShadowBlur, attributes.boxShadowColor, attributes.boxShadowColorOpacity, attributes.boxShadow ]); return ( - { attributes.boxShadow ? ( - - ) : ( - - ) } + + { // TODO: load a file and check if it is uploaded }); + + test( 'redirect to a page after form submission', async({ page, editor, browser }) => { + + /* + * Create a form block and insert the Redirect value using the Inspector Controls. + */ + + await editor.insertBlock({ name: 'themeisle-blocks/form' }); + + let formBlock = ( await editor.getBlocks() ).find( ( block ) => 'themeisle-blocks/form' === block.name ); + + expect( formBlock ).toBeTruthy(); + + const { clientId } = formBlock; + + await page.click( `#block-${clientId} > div > fieldset > ul > li:nth-child(1) > button` ); + + // Open the options panel + await page.getByRole( 'button', { name: 'Form Options options' }).click(); + + // activate the option + await page.getByRole( 'menuitemcheckbox', { name: 'Redirect on Submit' }).click(); + + const redirectField = page.getByPlaceholder( 'https://example.com' ); + + const REDIRECT_URL = page.url(); + + await redirectField.fill( REDIRECT_URL ); + + expect( await redirectField.inputValue() ).toBe( REDIRECT_URL ); + + const postId = await editor.publishPost(); + + await page.waitForTimeout( 1000 ); + + await page.goto( `/?p=${postId}` ); + + await page.getByLabel( 'Name*' ).fill( 'John Doe' ); + await page.getByLabel( 'Email*' ).fill( 'test@otter.com' ); + + await page.waitForTimeout( 5000 ); + + page.on( 'response', ( response ) => + console.log( '<<', response.status(), response.url() ) + ); + + await page.getByRole( 'button', { name: 'Submit' }).click(); + + await expect( await page.getByText( 'Success' ) ).toBeVisible(); + + // check for a element with the attribute data-redirect-url + await expect( await page.$( `[data-redirect="${REDIRECT_URL}"]` ) ).toBeTruthy(); + }); }); diff --git a/src/blocks/test/e2e/blocks/product-review.spec.js b/src/blocks/test/e2e/blocks/product-review.spec.js new file mode 100644 index 000000000..bf98655df --- /dev/null +++ b/src/blocks/test/e2e/blocks/product-review.spec.js @@ -0,0 +1,85 @@ +/** + * WordPress dependencies + */ +import { test, expect } from '@wordpress/e2e-test-utils-playwright'; + +test.describe( 'Product Review Block', () => { + test.beforeEach( async({ admin }) => { + await admin.createNewPost(); + }); + + test( 'can be created by typing "/product-review"', async({ editor, page }) => { + + // Create a Review Block with the slash block shortcut. + await page.click( 'role=button[name="Add default block"i]' ); + await page.keyboard.type( '/product-review' ); + await page.keyboard.press( 'Enter' ); + + const blocks = await editor.getBlocks(); + const hasReviewBlock = blocks.some( ( block ) => 'themeisle-blocks/review' === block.name ); + + expect( hasReviewBlock ).toBeTruthy(); + }); + + test( 'add value by typing', async({ editor, page }) => { + await editor.insertBlock({ name: 'themeisle-blocks/review' }); + + const title = page.getByRole( 'textbox', { name: 'Name of your product…' }); + + await title.type( 'Test Product' ); + + // Check if the value is added in title + expect( await title.innerHTML() ).toBe( 'Test Product' ); + + const description = page.getByRole( 'textbox', { name: 'Product description or a small review…' }); + + await description.type( 'Test Description' ); + + // Check if the value is added in description + expect( await description.innerHTML() ).toBe( 'Test Description' ); + }); + + test( 'add a new feature', async({ editor, page }) => { + await editor.insertBlock({ name: 'themeisle-blocks/review' }); + + /** + * Add a new feature + */ + + await page.getByRole( 'button', { name: 'Product Features' }).click(); + await page.getByRole( 'button', { name: 'Add Feature' }).click(); + await page.getByRole( 'button', { name: 'Feature', exact: true }).click(); + + const featureTitle = page.getByPlaceholder( 'Feature title' ); + + const FEATURE_TITLE = 'Test Feature'; + const FEATURE_DESCRIPTION = 'Test Feature Description'; + + // Clear the input text + await featureTitle.fill( '' ); + await featureTitle.type( FEATURE_TITLE ); + expect( await featureTitle.inputValue() ).toBe( FEATURE_TITLE ); + + const featureDescription = page.getByPlaceholder( 'Feature Description' ); + + await featureDescription.type( FEATURE_DESCRIPTION ); + expect( await featureDescription.innerHTML() ).toBe( FEATURE_DESCRIPTION ); + + // TODO: find a reliable way to test the rating + // const featureRating = page.locator( 'input[aria-label="Rating"][inputmode="decimal"]' ); + // const currentValue = await featureRating.inputValue(); + // await featureRating.keyboard.press( 'ArrowDown' ); + // const newValue = await featureRating.inputValue(); + // + // expect( currentValue ).not.toBe( newValue ); + + + /** + * Check new feature in display + */ + await expect( await page.getByRole( 'document', { name: 'Block: Product Review' }).getByText( FEATURE_TITLE, { exact: true }) ).toBeVisible(); + await expect( await page.getByRole( 'document', { name: 'Block: Product Review' }).getByText( FEATURE_DESCRIPTION, { exact: true }) ).toBeVisible(); + }); + + +}); diff --git a/src/dashboard/components/pages/Integrations.js b/src/dashboard/components/pages/Integrations.js index 830d0e1ba..85606f549 100644 --- a/src/dashboard/components/pages/Integrations.js +++ b/src/dashboard/components/pages/Integrations.js @@ -201,7 +201,7 @@ const Integrations = () => { { __( 'More Info', 'otter-blocks' ) } diff --git a/src/pro/components/autoresponder/index.js b/src/pro/components/autoresponder/index.js new file mode 100644 index 000000000..aa62ceb68 --- /dev/null +++ b/src/pro/components/autoresponder/index.js @@ -0,0 +1,38 @@ +import { useState } from '@wordpress/element'; +import { Button, Modal } from '@wordpress/components'; +import { __ } from '@wordpress/i18n'; +import { RichTextEditor } from '../../../blocks/components'; +import classNames from 'classnames'; + +const AutoresponderBodyModal = ({ value, onChange, area, addExtraMargin }) => { + const [ isOpen, setOpen ] = useState( false ); + + return ( + <> + { isOpen && ( + setOpen( false )} + shouldCloseOnClickOutside={ false } + > + + + ) } + + + ); +}; + +export default AutoresponderBodyModal; diff --git a/src/pro/plugins/dynamic-content/value-edit.js b/src/pro/plugins/dynamic-content/value-edit.js index 5b8b62155..70c0b0e1e 100644 --- a/src/pro/plugins/dynamic-content/value-edit.js +++ b/src/pro/plugins/dynamic-content/value-edit.js @@ -18,13 +18,22 @@ import { useSelect } from '@wordpress/data'; import { Fragment } from '@wordpress/element'; const ALLOWED_ACF_TYPES = [ + 'button_group', + 'checkbox', + 'color_picker', + 'date_time_picker', + 'date_picker', + 'email', + 'number', + 'password', + 'radio', + 'range', + 'select', 'text', 'textarea', - 'range', - 'number', - 'url', - 'email', - 'password' + 'time_picker', + 'true_false', + 'url' ]; const Edit = ({ diff --git a/src/pro/plugins/form/index.js b/src/pro/plugins/form/index.js index ec79243a0..7d4adee91 100644 --- a/src/pro/plugins/form/index.js +++ b/src/pro/plugins/form/index.js @@ -4,57 +4,30 @@ import { __ } from '@wordpress/i18n'; import { __experimentalToolsPanelItem as ToolsPanelItem, - Button, - Modal, TextControl, FormTokenField, ToggleControl, Notice, SelectControl } from '@wordpress/components'; import { addFilter } from '@wordpress/hooks'; -import { useState, Fragment } from '@wordpress/element'; +import { Fragment } from '@wordpress/element'; /** * Internal dependencies */ import { Notice as OtterNotice } from '../../../blocks/components'; -import { RichTextEditor } from '../../../blocks/components'; import { FieldInputWidth, HideFieldLabelToggle } from '../../../blocks/blocks/form/common'; import { setSavedState } from '../../../blocks/helpers/helper-functions'; +import AutoresponderBodyModal from '../../components/autoresponder/index.js'; // +-------------- Autoresponder --------------+ const AutoresponderBody = ({ formOptions, setFormOption }) => { - const [ isOpen, setOpen ] = useState( false ); const onChange = body => { setFormOption({ autoresponder: { ...formOptions.autoresponder, body }}); }; - return ( - <> - { isOpen && ( - setOpen( false )} - shouldCloseOnClickOutside={ false } - > - - - ) } -
- - - ); + return ; }; const helpMessages = { diff --git a/src/pro/plugins/index.js b/src/pro/plugins/index.js index e1dcb294a..b94b42409 100644 --- a/src/pro/plugins/index.js +++ b/src/pro/plugins/index.js @@ -14,3 +14,4 @@ import './wc-integration/index.js'; import './countdown/index'; import './live-search/index.js'; import './form/index.js'; +import './stripe-checkout/index.js'; diff --git a/src/pro/plugins/stripe-checkout/index.js b/src/pro/plugins/stripe-checkout/index.js new file mode 100644 index 000000000..14bb4f927 --- /dev/null +++ b/src/pro/plugins/stripe-checkout/index.js @@ -0,0 +1,62 @@ +/** + * WordPress dependencies + */ +import { Fragment } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import { addFilter } from '@wordpress/hooks'; +import { PanelBody, TextControl, ToggleControl } from '@wordpress/components'; + +/** + * Internal dependencies + */ +import AutoresponderBodyModal from '../../components/autoresponder/index.js'; +import { Notice } from '../../../blocks/components'; + +const Autoresponder = ( Template, attributes, setAttributes ) => { + return ( + + + setAttributes({ autoresponder: value ? { subject: undefined, body: undefined } : undefined })} + help={ __( 'Enable autoresponder email to be sent to the customer after a successful purchase.', 'otter-blocks' ) } + /> + + { + attributes.autoresponder && ( + + setAttributes({ autoresponder: { ...attributes.autoresponder, subject }})} + help={__( + 'Enter the subject of the autoresponder email.', + 'otter-blocks' + )} + /> + + EXAMPLE, which can be applied during checkout on our website.', 'otter-blocks' ) } + onChange={ ( body ) => setAttributes({ autoresponder: { ...attributes.autoresponder, body }}) } + area="stripe-autoresponder" + /> + + ) + } + + + ); +}; + +if ( Boolean( window?.otterPro?.isActive ) ) { + addFilter( 'otter.stripe-checkout.inspector', 'themeisle-gutenberg/stripe-checkout-inspector', Autoresponder ); +} +