diff --git a/.github/actions/tests/run-api-tests/action.yml b/.github/actions/tests/run-api-tests/action.yml new file mode 100644 index 00000000000..c1dd9383a72 --- /dev/null +++ b/.github/actions/tests/run-api-tests/action.yml @@ -0,0 +1,37 @@ +name: Run API tests +description: Runs the WooCommerce Core API tests and generates Allure report. +permissions: {} + +inputs: + report-name: + description: Name of Allure report to be generated. + required: true + +runs: + using: composite + steps: + - name: Run API tests. + id: run-api-tests + working-directory: plugins/woocommerce + shell: bash + env: + BASE_URL: http://localhost:8086 + USER_KEY: admin + USER_SECRET: password + run: pnpm exec playwright test --config=tests/api-core-tests/playwright.config.js + + - name: Generate Test report. + if: success() || ( failure() && steps.run-api-tests.conclusion == 'failure' ) + working-directory: plugins/woocommerce + shell: bash + run: pnpm exec allure generate --clean ${{ env.ALLURE_RESULTS_DIR }} --output ${{ env.ALLURE_REPORT_DIR }} + + - name: Archive test report + if: success() || ( failure() && steps.run-api-tests.conclusion == 'failure' ) + uses: actions/upload-artifact@v3 + with: + name: ${{ inputs.report-name }} + path: | + ${{ env.ALLURE_RESULTS_DIR }} + ${{ env.ALLURE_REPORT_DIR }} + retention-days: 20 diff --git a/.github/actions/tests/run-e2e-tests/action.yml b/.github/actions/tests/run-e2e-tests/action.yml new file mode 100644 index 00000000000..7c7a974ed53 --- /dev/null +++ b/.github/actions/tests/run-e2e-tests/action.yml @@ -0,0 +1,41 @@ +name: Run E2E tests +description: Runs the WooCommerce Core E2E tests and generates Allure report. +permissions: {} + +inputs: + report-name: + description: Name of Allure report to be generated. + required: true + +runs: + using: composite + steps: + - name: Download and install Chromium browser. + working-directory: plugins/woocommerce + shell: bash + run: pnpm exec playwright install chromium + + - name: Run E2E tests. + id: run-e2e-tests + env: + FORCE_COLOR: 1 + USE_WP_ENV: 1 + working-directory: plugins/woocommerce + shell: bash + run: pnpm exec playwright test --config=tests/e2e-pw/playwright.config.js + + - name: Generate Test report. + if: success() || ( failure() && steps.run-e2e-tests.conclusion == 'failure' ) + working-directory: plugins/woocommerce + shell: bash + run: pnpm exec allure generate --clean ${{ env.ALLURE_RESULTS_DIR }} --output ${{ env.ALLURE_REPORT_DIR }} + + - name: Archive test report + if: success() || ( failure() && steps.run-e2e-tests.conclusion == 'failure' ) + uses: actions/upload-artifact@v3 + with: + name: ${{ inputs.report-name }} + path: | + ${{ env.ALLURE_RESULTS_DIR }} + ${{ env.ALLURE_REPORT_DIR }} + retention-days: 20 diff --git a/.github/actions/tests/run-k6-tests/action.yml b/.github/actions/tests/run-k6-tests/action.yml new file mode 100644 index 00000000000..fbf67c7f9f6 --- /dev/null +++ b/.github/actions/tests/run-k6-tests/action.yml @@ -0,0 +1,17 @@ +name: Run k6 performance tests +description: Runs the WooCommerce Core k6 performance tests. +permissions: {} + +runs: + using: composite + steps: + - name: Install k6 + shell: bash + run: | + curl https://github.com/grafana/k6/releases/download/v0.33.0/k6-v0.33.0-linux-amd64.tar.gz -L | tar xvz --strip-components 1 + + - name: Run k6 performance tests + id: run-k6-tests + shell: bash + run: | + ./k6 run plugins/woocommerce/tests/performance/tests/gh-action-pr-requests.js diff --git a/.github/actions/tests/setup-local-test-environment/action.yml b/.github/actions/tests/setup-local-test-environment/action.yml new file mode 100644 index 00000000000..c5386a32c77 --- /dev/null +++ b/.github/actions/tests/setup-local-test-environment/action.yml @@ -0,0 +1,29 @@ +name: Setup local test environment +description: Set up a wp-env testing environment +permissions: {} + +inputs: + test-type: + required: true + type: choice + options: + - e2e + - api + - k6 + +runs: + using: composite + steps: + - name: Load docker images and start containers for E2E or API tests + if: ( inputs.test-type == 'e2e' ) || ( inputs.test-type == 'api' ) + working-directory: plugins/woocommerce + shell: bash + run: pnpm run env:test + + - name: Load docker images and start containers for k6 performance tests + if: inputs.test-type == 'k6' + working-directory: plugins/woocommerce + shell: bash + run: | + pnpm env:dev --filter=woocommerce + pnpm env:performance-init --filter=woocommerce diff --git a/.github/actions/tests/slack-alert-on-pr-merge/action.yml b/.github/actions/tests/slack-alert-on-pr-merge/action.yml new file mode 100644 index 00000000000..6fbc11ab62a --- /dev/null +++ b/.github/actions/tests/slack-alert-on-pr-merge/action.yml @@ -0,0 +1,41 @@ +name: Send Slack alert on PR merge test failure +description: Send a Slack alert when automated tests failed on trunk after PR merge. +permissions: {} + +inputs: + slack-bot-token: + required: true + channel-id: + required: true + test-type: + required: true + type: choice + options: + - E2E + - API + - k6 + +runs: + using: composite + steps: + - name: Compose Slack message + id: compose-slack-message + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + PR_TITLE: ${{ github.event.pull_request.title }} + SHA: ${{ github.event.pull_request.merge_commit_sha }} + TEST_TYPE: ${{ inputs.test-type }} + with: + script: | + const script = require('./.github/actions/tests/slack-alert-on-pr-merge/scripts/compose-slack-message.js') + const slackMessage = script() + core.setOutput('slack-message', slackMessage) + + - name: Send Slack alert + uses: slackapi/slack-github-action@v1.23.0 + env: + SLACK_BOT_TOKEN: ${{ inputs.slack-bot-token }} + with: + channel-id: ${{ inputs.channel-id }} + payload: ${{ steps.compose-slack-message.outputs.slack-message }} diff --git a/.github/actions/tests/slack-alert-on-pr-merge/scripts/compose-slack-message.js b/.github/actions/tests/slack-alert-on-pr-merge/scripts/compose-slack-message.js new file mode 100644 index 00000000000..ca194507547 --- /dev/null +++ b/.github/actions/tests/slack-alert-on-pr-merge/scripts/compose-slack-message.js @@ -0,0 +1,114 @@ +module.exports = () => { + const { + GITHUB_BASE_REF, + GITHUB_RUN_ID, + PR_NUMBER, + PR_TITLE, + SHA, + TEST_TYPE, + } = process.env; + + // Slack message blocks + const blocks = []; + const dividerBlock = { + type: 'divider', + }; + const introBlock = { + type: 'section', + text: { + type: 'mrkdwn', + text: `${ TEST_TYPE } tests failed on \`${ GITHUB_BASE_REF }\` after merging PR `, + }, + }; + const prTitleBlock = { + type: 'header', + text: { + type: 'plain_text', + text: PR_TITLE, + emoji: true, + }, + }; + const prButtonBlock = { + type: 'actions', + elements: [ + { + type: 'button', + text: { + type: 'plain_text', + text: 'View pull request :pr-merged:', + emoji: true, + }, + value: 'view_pr', + url: `https://github.com/woocommerce/woocommerce/pull/${ PR_NUMBER }`, + action_id: 'view-pr', + }, + ], + }; + const mergeCommitBlock = { + type: 'actions', + elements: [ + { + type: 'button', + text: { + type: 'plain_text', + text: `View merge commit ${ SHA.substring( + 0, + 7 + ) } :alphabet-yellow-hash:`, + emoji: true, + }, + value: 'view_commit', + url: `https://github.com/woocommerce/woocommerce/commit/${ SHA }`, + action_id: 'view-commit', + }, + ], + }; + const githubBlock = { + type: 'actions', + elements: [ + { + type: 'button', + text: { + type: 'plain_text', + text: 'View GitHub run log :github:', + emoji: true, + }, + value: 'view_github', + url: `https://github.com/woocommerce/woocommerce/actions/runs/${ GITHUB_RUN_ID }`, + action_id: 'view-github', + }, + ], + }; + const reportBlock = { + type: 'actions', + elements: [ + { + type: 'button', + text: { + type: 'plain_text', + text: 'View test report :colorful-bar-chart:', + emoji: true, + }, + value: 'view_report', + url: `https://woocommerce.github.io/woocommerce-test-reports/pr-merge/${ PR_NUMBER }/${ TEST_TYPE.toLowerCase() }`, + action_id: 'view-report', + }, + ], + }; + + // Assemble blocks + blocks.push( dividerBlock ); + blocks.push( introBlock ); + blocks.push( prTitleBlock ); + blocks.push( prButtonBlock ); + blocks.push( mergeCommitBlock ); + blocks.push( githubBlock ); + + if ( [ 'e2e', 'api' ].includes( TEST_TYPE.toLowerCase() ) ) { + blocks.push( reportBlock ); + } + + blocks.push( dividerBlock ); + + return { blocks }; +}; diff --git a/.github/actions/tests/upload-allure-files-to-bucket/action.yml b/.github/actions/tests/upload-allure-files-to-bucket/action.yml new file mode 100644 index 00000000000..ad745b990e8 --- /dev/null +++ b/.github/actions/tests/upload-allure-files-to-bucket/action.yml @@ -0,0 +1,47 @@ +name: Upload Allure files to bucket +description: Upload Allure files to bucket. +permissions: {} + +inputs: + destination-dir: + description: Directory under the "artifacts" S3 folder to which the Allure files would be uploaded. + required: true + aws-region: + required: true + aws-access-key-id: + required: true + aws-secret-access-key: + required: true + s3-bucket: + required: true + include-allure-results: + dafault: true + +runs: + using: composite + steps: + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + aws-region: ${{ inputs.aws-region }} + aws-access-key-id: ${{ inputs.aws-access-key-id }} + aws-secret-access-key: ${{ inputs.aws-secret-access-key }} + + - name: Upload 'allure-results' folder + if: inputs.include-allure-results == true + shell: bash + run: | + echo "Uploading allure-results folder..." + aws s3 sync ${{ env.ALLURE_RESULTS_DIR }} \ + ${{ inputs.s3-bucket }}/artifacts/${{ github.run_id }}/${{ inputs.destination-dir }}/allure-results \ + --quiet + echo "Done" + + - name: Upload 'allure-report' folder + shell: bash + run: | + echo "Uploading allure-report folder..." + aws s3 sync ${{ env.ALLURE_REPORT_DIR }} \ + ${{ inputs.s3-bucket }}/artifacts/${{ github.run_id }}/${{ inputs.destination-dir }}/allure-report \ + --quiet + echo "Done" diff --git a/.github/workflows/cot-build-and-e2e-tests-daily.yml b/.github/workflows/cot-build-and-e2e-tests-daily.yml index a38d042cc1e..7ef685e22fe 100644 --- a/.github/workflows/cot-build-and-e2e-tests-daily.yml +++ b/.github/workflows/cot-build-and-e2e-tests-daily.yml @@ -173,7 +173,7 @@ jobs: return await script( { core } ) - name: Find PR comment by github-actions[bot] - uses: peter-evans/find-comment@v2 + uses: peter-evans/find-comment@034abe94d3191f9c89d870519735beae326f2bdb id: find-comment with: issue-number: ${{ github.event.pull_request.number }} @@ -181,7 +181,7 @@ jobs: body-includes: Test Results Summary - name: Create or update PR comment - uses: peter-evans/create-or-update-comment@v2 + uses: peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d with: comment-id: ${{ steps.find-comment.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} diff --git a/.github/workflows/pr-build-and-e2e-tests.yml b/.github/workflows/pr-build-and-e2e-tests.yml index ed1eec649de..e267c3502b2 100644 --- a/.github/workflows/pr-build-and-e2e-tests.yml +++ b/.github/workflows/pr-build-and-e2e-tests.yml @@ -219,7 +219,7 @@ jobs: return await script( { core } ) - name: Find PR comment by github-actions[bot] - uses: peter-evans/find-comment@v2 + uses: peter-evans/find-comment@034abe94d3191f9c89d870519735beae326f2bdb id: find-comment with: issue-number: ${{ github.event.pull_request.number }} @@ -227,7 +227,7 @@ jobs: body-includes: Test Results Summary - name: Create or update PR comment - uses: peter-evans/create-or-update-comment@v2 + uses: peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d with: comment-id: ${{ steps.find-comment.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} diff --git a/.github/workflows/review-testing-instructions.yml b/.github/workflows/review-testing-instructions.yml new file mode 100644 index 00000000000..066c502a1fb --- /dev/null +++ b/.github/workflows/review-testing-instructions.yml @@ -0,0 +1,48 @@ +name: Remind reviewers to also review the testing instructions. +on: + pull_request: + types: [review_requested] + +permissions: {} + +jobs: + add-testing-instructions-review-comment: + runs-on: ubuntu-20.04 + permissions: + pull-requests: write + steps: + - name: Get the username of requested reviewers + id: get_reviewer_username + run: | + # Retrieves the username of all reviewers and stores them in a comma-separated list + reviewers=$(echo '${{ toJson(github.event.pull_request.requested_reviewers[*].login) }}' | jq -r 'map("@\(.)") | join(", ")') + echo "REVIEWERS=$reviewers" >> $GITHUB_ENV + + - name: Get the name of requested teams + id: get_team_name + run: | + # Retrieves the name of all teams asked for review and stores them in a comma-separated list + teams=$(echo '${{ toJson(github.event.pull_request.requested_teams[*].slug) }}' | jq -r 'map("@woocommerce/\(.)") | join(", ")') + echo "TEAMS=$teams" >> $GITHUB_ENV + + - name: Find the comment by github-actions[bot] asking for reviewing the testing instructions + uses: peter-evans/find-comment@034abe94d3191f9c89d870519735beae326f2bdb + id: find-comment + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: please make sure to review the testing instructions + + - name: Create or update PR comment asking for reviewers to review the testing instructions + uses: peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d + with: + comment-id: ${{ steps.find-comment.outputs.comment-id }} + issue-number: ${{ github.event.pull_request.number }} + body: | + Hi ${{ env.REVIEWERS }}, ${{ env.TEAMS }} + + Apart from reviewing the code changes, please make sure to review the testing instructions as well. + + You can follow this guide to find out what good testing instructions should look like: + https://github.com/woocommerce/woocommerce/wiki/Writing-high-quality-testing-instructions + edit-mode: replace diff --git a/.github/workflows/smoke-test-pr-merge.yml b/.github/workflows/smoke-test-pr-merge.yml new file mode 100644 index 00000000000..3b3562f3004 --- /dev/null +++ b/.github/workflows/smoke-test-pr-merge.yml @@ -0,0 +1,168 @@ +name: Run tests against trunk after PR merge +on: + pull_request: + types: + - closed +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number }} + cancel-in-progress: true +permissions: {} + +jobs: + api: + name: Run API tests + runs-on: ubuntu-20.04 + if: (github.event.pull_request.merged == true) && (github.event.pull_request.base.ref == 'trunk') + permissions: + contents: read + env: + ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/api-core-tests/test-results/allure-results + ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/api-core-tests/test-results/allure-report + ARTIFACT_NAME: api-pr-merge-${{ github.event.pull_request.number }}-run-${{ github.run_number }} + steps: + - name: Checkout merge commit on trunk + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.merge_commit_sha }} + + - name: Setup WooCommerce Monorepo + uses: ./.github/actions/setup-woocommerce-monorepo + with: + build-filters: woocommerce + + - name: Setup local test environment + uses: ./.github/actions/tests/setup-local-test-environment + with: + test-type: api + + - name: Run API tests + id: run-api-composite-action + uses: ./.github/actions/tests/run-api-tests + with: + report-name: ${{ env.ARTIFACT_NAME }} + + - name: Upload Allure files to bucket + if: success() || ( failure() && steps.run-api-composite-action.conclusion == 'failure' ) + uses: ./.github/actions/tests/upload-allure-files-to-bucket + with: + aws-access-key-id: ${{ secrets.REPORTS_AWS_ACCESS_KEY_ID }} + aws-region: ${{ secrets.REPORTS_AWS_REGION }} + aws-secret-access-key: ${{ secrets.REPORTS_AWS_SECRET_ACCESS_KEY }} + destination-dir: ${{ env.ARTIFACT_NAME }} + s3-bucket: ${{ secrets.REPORTS_BUCKET }} + + - name: Publish Allure report + if: success() || ( failure() && steps.run-api-composite-action.conclusion == 'failure' ) + env: + GITHUB_TOKEN: ${{ secrets.REPORTS_TOKEN }} + run: | + gh workflow run publish-test-reports-trunk-merge.yml \ + -f run_id=${{ github.run_id }} \ + -f artifact=${{ env.ARTIFACT_NAME }} \ + -f pr_number=${{ github.event.pull_request.number }} \ + -f test_type="api" \ + --repo woocommerce/woocommerce-test-reports + + - name: Send Slack alert on test failure + if: failure() && steps.run-api-composite-action.conclusion == 'failure' + uses: ./.github/actions/tests/slack-alert-on-pr-merge + with: + slack-bot-token: ${{ secrets.E2E_SLACK_TOKEN }} + channel-id: ${{ secrets.E2E_TRUNK_SLACK_CHANNEL }} + test-type: API + + e2e: + name: Run E2E tests + needs: [api] + runs-on: ubuntu-20.04 + permissions: + contents: read + env: + ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/allure-results + ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/allure-report + ARTIFACT_NAME: e2e-pr-merge-${{ github.event.pull_request.number }}-run-${{ github.run_number }} + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.merge_commit_sha }} + + - name: Setup WooCommerce Monorepo + uses: ./.github/actions/setup-woocommerce-monorepo + with: + build-filters: woocommerce + + - name: Setup local test environment + uses: ./.github/actions/tests/setup-local-test-environment + with: + test-type: e2e + + - name: Run E2E tests + id: run-e2e-composite-action + timeout-minutes: 60 + uses: ./.github/actions/tests/run-e2e-tests + env: + E2E_MAX_FAILURES: 15 + with: + report-name: ${{ env.ARTIFACT_NAME }} + + - name: Upload Allure files to bucket + if: success() || ( failure() && steps.run-e2e-composite-action.conclusion == 'failure' ) + uses: ./.github/actions/tests/upload-allure-files-to-bucket + with: + aws-access-key-id: ${{ secrets.REPORTS_AWS_ACCESS_KEY_ID }} + aws-region: ${{ secrets.REPORTS_AWS_REGION }} + aws-secret-access-key: ${{ secrets.REPORTS_AWS_SECRET_ACCESS_KEY }} + destination-dir: ${{ env.ARTIFACT_NAME }} + s3-bucket: ${{ secrets.REPORTS_BUCKET }} + include-allure-results: false + + - name: Publish Allure report + if: success() || ( failure() && steps.run-e2e-composite-action.conclusion == 'failure' ) + env: + GITHUB_TOKEN: ${{ secrets.REPORTS_TOKEN }} + run: | + gh workflow run publish-test-reports-trunk-merge.yml \ + -f run_id=${{ github.run_id }} \ + -f artifact=${{ env.ARTIFACT_NAME }} \ + -f pr_number=${{ github.event.pull_request.number }} \ + -f test_type="e2e" \ + --repo woocommerce/woocommerce-test-reports + + - name: Send Slack alert on test failure + if: failure() && steps.run-e2e-composite-action.conclusion == 'failure' + uses: ./.github/actions/tests/slack-alert-on-pr-merge + with: + slack-bot-token: ${{ secrets.E2E_SLACK_TOKEN }} + channel-id: ${{ secrets.E2E_TRUNK_SLACK_CHANNEL }} + test-type: E2E + + k6: + name: Run k6 Performance tests + needs: [api] + runs-on: ubuntu-20.04 + permissions: + contents: read + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.merge_commit_sha }} + + - name: Setup WooCommerce Monorepo + uses: ./.github/actions/setup-woocommerce-monorepo + + - name: Setup local test environment + uses: ./.github/actions/tests/setup-local-test-environment + with: + test-type: k6 + + - name: Run k6 performance tests + id: run-k6-composite-action + uses: './.github/actions/tests/run-k6-tests' + + - name: Send Slack alert on test failure + if: failure() && steps.run-k6-composite-action.conclusion == 'failure' + uses: ./.github/actions/tests/slack-alert-on-pr-merge + with: + slack-bot-token: ${{ secrets.E2E_SLACK_TOKEN }} + channel-id: ${{ secrets.E2E_TRUNK_SLACK_CHANNEL }} + test-type: k6 diff --git a/changelog.txt b/changelog.txt index 8d4a7b71421..30d4a66ac9e 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,13 @@ == Changelog == += 7.5.1 2023-03-21 = + +**WooCommerce** + +* Fix - Fix no enforcing of min/max limits in quantity selector of variable products. [#36871](https://github.com/woocommerce/woocommerce/pull/36871) +* Dev - Update column definitions with synonymous types to prevent dbDelta from trying to ALTER them on each install. [#37277](https://github.com/woocommerce/woocommerce/pull/37277) +* Update - Update WooCommerce Blocks to 9.6.6. [#37298](https://github.com/woocommerce/woocommerce/pull/37298) + = 7.5.0 2023-03-14 = **WooCommerce** diff --git a/packages/js/admin-layout/changelog/add-migrate-more-menu-37097 b/packages/js/admin-layout/changelog/add-migrate-more-menu-37097 new file mode 100644 index 00000000000..9b69d3ac60b --- /dev/null +++ b/packages/js/admin-layout/changelog/add-migrate-more-menu-37097 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Adding support for modifying fill name to WooHeaderItem. diff --git a/packages/js/admin-layout/src/plugins/woo-header-item/index.tsx b/packages/js/admin-layout/src/plugins/woo-header-item/index.tsx index 770c5d63c78..d39cd47d21b 100644 --- a/packages/js/admin-layout/src/plugins/woo-header-item/index.tsx +++ b/packages/js/admin-layout/src/plugins/woo-header-item/index.tsx @@ -11,6 +11,20 @@ import { export const WC_HEADER_SLOT_NAME = 'woocommerce_header_item'; +/** + * Get the slot fill name for the generic header slot or a specific header if provided. + * + * @param name Name of the specific header. + * @return string + */ +const getSlotFillName = ( name?: string ) => { + if ( ! name || ! name.length ) { + return WC_HEADER_SLOT_NAME; + } + + return `${ WC_HEADER_SLOT_NAME }/${ name }`; +}; + /** * Create a Fill for extensions to add items to the WooCommerce Admin header. * @@ -26,17 +40,19 @@ export const WC_HEADER_SLOT_NAME = 'woocommerce_header_item'; * scope: 'woocommerce-admin', * } ); * @param {Object} param0 + * @param {Array} param0.name - Header name. * @param {Array} param0.children - Node children. * @param {Array} param0.order - Node order. */ export const WooHeaderItem: React.FC< { + name?: string; children?: React.ReactNode; order?: number; } > & { - Slot: React.FC< Slot.Props >; -} = ( { children, order = 1 } ) => { + Slot: React.FC< Slot.Props & { name?: string } >; +} = ( { children, order = 1, name = '' } ) => { return ( - + { ( fillProps: Fill.Props ) => { return createOrderedChildren( children, order, fillProps ); } } @@ -44,8 +60,8 @@ export const WooHeaderItem: React.FC< { ); }; -WooHeaderItem.Slot = ( { fillProps } ) => ( - +WooHeaderItem.Slot = ( { fillProps, name = '' } ) => ( + { sortFillsByOrder } ); diff --git a/packages/js/customer-effort-score/changelog/update-move-remaining-ces-to-package b/packages/js/customer-effort-score/changelog/update-move-remaining-ces-to-package new file mode 100644 index 00000000000..9795fb06a03 --- /dev/null +++ b/packages/js/customer-effort-score/changelog/update-move-remaining-ces-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: dev + +Move additional components to @woocommerce/customer-effort-score. diff --git a/packages/js/customer-effort-score/package.json b/packages/js/customer-effort-score/package.json index c40f56aed5a..3dae30da83b 100644 --- a/packages/js/customer-effort-score/package.json +++ b/packages/js/customer-effort-score/package.json @@ -51,6 +51,7 @@ "@woocommerce/eslint-plugin": "workspace:*", "@woocommerce/internal-style-build": "workspace:*", "@woocommerce/navigation": "workspace:*", + "@woocommerce/tracks": "workspace:*", "@wordpress/browserslist-config": "wp-6.0", "concurrently": "^7.0.0", "css-loader": "^3.6.0", diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-modal-container.tsx b/packages/js/customer-effort-score/src/components/customer-effort-score-modal-container/index.tsx similarity index 90% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-modal-container.tsx rename to packages/js/customer-effort-score/src/components/customer-effort-score-modal-container/index.tsx index 33b3c9f009c..042b868b481 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-modal-container.tsx +++ b/packages/js/customer-effort-score/src/components/customer-effort-score-modal-container/index.tsx @@ -3,18 +3,17 @@ */ import { __ } from '@wordpress/i18n'; import { useDispatch, useSelect } from '@wordpress/data'; -import { - CustomerFeedbackModal, - STORE_KEY, -} from '@woocommerce/customer-effort-score'; -import { recordEvent } from '@woocommerce/tracks'; import { OPTIONS_STORE_NAME } from '@woocommerce/data'; +import { createElement } from '@wordpress/element'; +import { recordEvent } from '@woocommerce/tracks'; /** * Internal dependencies */ -import { getStoreAgeInWeeks } from './utils'; -import { ADMIN_INSTALL_TIMESTAMP_OPTION_NAME } from './constants'; +import { CustomerFeedbackModal } from '../'; +import { getStoreAgeInWeeks } from '../../utils'; +import { STORE_KEY } from '../../store'; +import { ADMIN_INSTALL_TIMESTAMP_OPTION_NAME } from '../../constants'; export const PRODUCT_MVP_CES_ACTION_OPTION_NAME = 'woocommerce_ces_product_mvp_ces_action'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks-container.js b/packages/js/customer-effort-score/src/components/customer-effort-score-tracks-container/index.js similarity index 87% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks-container.js rename to packages/js/customer-effort-score/src/components/customer-effort-score-tracks-container/index.js index b1b2b84e297..46c8ce38afd 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks-container.js +++ b/packages/js/customer-effort-score/src/components/customer-effort-score-tracks-container/index.js @@ -4,17 +4,15 @@ import { useEffect } from 'react'; import { compose } from '@wordpress/compose'; import { withDispatch, withSelect } from '@wordpress/data'; -import { - QUEUE_OPTION_NAME, - STORE_KEY, -} from '@woocommerce/customer-effort-score'; +import { createElement, Fragment } from '@wordpress/element'; import { OPTIONS_STORE_NAME } from '@woocommerce/data'; import PropTypes from 'prop-types'; /** * Internal dependencies */ -import CustomerEffortScoreTracks from './customer-effort-score-tracks'; +import { CustomerEffortScoreTracks } from '../'; +import { QUEUE_OPTION_NAME, STORE_KEY } from '../../store'; /** * Maps the queue of CES tracks surveys to CustomerEffortScoreTracks @@ -27,7 +25,7 @@ import CustomerEffortScoreTracks from './customer-effort-score-tracks'; * @param {boolean} props.resolving Whether the queue is resolving. * @param {Function} props.clearQueue Sets up clearing of the queue on the next page load. */ -function CustomerEffortScoreTracksContainer( { +function _CustomerEffortScoreTracksContainer( { queue, resolving, clearQueue, @@ -67,7 +65,7 @@ function CustomerEffortScoreTracksContainer( { ); } -CustomerEffortScoreTracksContainer.propTypes = { +_CustomerEffortScoreTracksContainer.propTypes = { /** * The queue of CES tracks surveys to display. */ @@ -82,7 +80,7 @@ CustomerEffortScoreTracksContainer.propTypes = { clearQueue: PropTypes.func, }; -export default compose( +export const CustomerEffortScoreTracksContainer = compose( withSelect( ( select ) => { const { getCesSurveyQueue, isResolving } = select( STORE_KEY ); const queue = getCesSurveyQueue(); @@ -109,4 +107,4 @@ export default compose( }, }; } ) -)( CustomerEffortScoreTracksContainer ); +)( _CustomerEffortScoreTracksContainer ); diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks.js b/packages/js/customer-effort-score/src/components/customer-effort-score-tracks/index.js similarity index 95% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks.js rename to packages/js/customer-effort-score/src/components/customer-effort-score-tracks/index.js index 295f32c3a53..b1506ffb5e1 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks.js +++ b/packages/js/customer-effort-score/src/components/customer-effort-score-tracks/index.js @@ -1,26 +1,24 @@ /** * External dependencies */ -import { useState } from '@wordpress/element'; import PropTypes from 'prop-types'; -import { recordEvent } from '@woocommerce/tracks'; -import { - ALLOW_TRACKING_OPTION_NAME, - CustomerEffortScore, -} from '@woocommerce/customer-effort-score'; import { compose } from '@wordpress/compose'; import { withSelect, withDispatch } from '@wordpress/data'; +import { createElement, useState } from '@wordpress/element'; import { OPTIONS_STORE_NAME } from '@woocommerce/data'; import { __ } from '@wordpress/i18n'; +import { recordEvent } from '@woocommerce/tracks'; /** * Internal dependencies */ +import { CustomerEffortScore } from '../'; import { - SHOWN_FOR_ACTIONS_OPTION_NAME, ADMIN_INSTALL_TIMESTAMP_OPTION_NAME, -} from './constants'; -import { getStoreAgeInWeeks } from './utils'; + ALLOW_TRACKING_OPTION_NAME, + SHOWN_FOR_ACTIONS_OPTION_NAME, +} from '../../constants'; +import { getStoreAgeInWeeks } from '../../utils'; /** * A CustomerEffortScore wrapper that uses tracks to track the selected @@ -43,7 +41,7 @@ import { getStoreAgeInWeeks } from './utils'; * @param {Function} props.updateOptions Function to update options. * @param {Function} props.createNotice Function to create a snackbar. */ -function CustomerEffortScoreTracks( { +function _CustomerEffortScoreTracks( { action, trackProps, title, @@ -176,7 +174,7 @@ function CustomerEffortScoreTracks( { ); } -CustomerEffortScoreTracks.propTypes = { +_CustomerEffortScoreTracks.propTypes = { /** * The action name sent to Tracks. */ @@ -219,7 +217,7 @@ CustomerEffortScoreTracks.propTypes = { createNotice: PropTypes.func, }; -export default compose( +export const CustomerEffortScoreTracks = compose( withSelect( ( select ) => { const { getOption, hasFinishedResolution } = select( OPTIONS_STORE_NAME ); @@ -262,4 +260,4 @@ export default compose( createNotice, }; } ) -)( CustomerEffortScoreTracks ); +)( _CustomerEffortScoreTracks ); diff --git a/packages/js/customer-effort-score/src/components/index.ts b/packages/js/customer-effort-score/src/components/index.ts new file mode 100644 index 00000000000..81ae0d67dfe --- /dev/null +++ b/packages/js/customer-effort-score/src/components/index.ts @@ -0,0 +1,8 @@ +export * from './customer-effort-score'; +export * from './customer-effort-score-modal-container'; +export * from './customer-effort-score-tracks'; +export * from './customer-effort-score-tracks-container'; +export * from './customer-feedback-simple'; +export * from './customer-feedback-modal'; +export * from './product-mvp-feedback-modal'; +export * from './feedback-modal'; diff --git a/packages/js/customer-effort-score/src/constants.js b/packages/js/customer-effort-score/src/constants.js index 498d982940a..d2914cd46ca 100644 --- a/packages/js/customer-effort-score/src/constants.js +++ b/packages/js/customer-effort-score/src/constants.js @@ -1 +1,7 @@ +export const ADMIN_INSTALL_TIMESTAMP_OPTION_NAME = + 'woocommerce_admin_install_timestamp'; + export const ALLOW_TRACKING_OPTION_NAME = 'woocommerce_allow_tracking'; + +export const SHOWN_FOR_ACTIONS_OPTION_NAME = + 'woocommerce_ces_shown_for_actions'; diff --git a/packages/js/customer-effort-score/src/hooks/index.ts b/packages/js/customer-effort-score/src/hooks/index.ts new file mode 100644 index 00000000000..e65c8eb7746 --- /dev/null +++ b/packages/js/customer-effort-score/src/hooks/index.ts @@ -0,0 +1 @@ +export * from './use-customer-effort-score-exit-page-tracker'; diff --git a/packages/js/customer-effort-score/src/index.ts b/packages/js/customer-effort-score/src/index.ts index d6ef2e56087..de54752495a 100644 --- a/packages/js/customer-effort-score/src/index.ts +++ b/packages/js/customer-effort-score/src/index.ts @@ -1,9 +1,5 @@ -export * from './components/customer-effort-score'; -export * from './components/customer-feedback-simple'; -export * from './components/customer-feedback-modal'; -export * from './components/product-mvp-feedback-modal'; -export * from './components/feedback-modal'; -export * from './hooks/use-customer-effort-score-exit-page-tracker'; -export * from './store'; -export * from './utils/customer-effort-score-exit-page'; +export * from './components'; export * from './constants'; +export * from './hooks'; +export * from './store'; +export * from './utils'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/utils.ts b/packages/js/customer-effort-score/src/utils/get-store-age-in-weeks.ts similarity index 100% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/utils.ts rename to packages/js/customer-effort-score/src/utils/get-store-age-in-weeks.ts diff --git a/packages/js/customer-effort-score/src/utils/index.ts b/packages/js/customer-effort-score/src/utils/index.ts new file mode 100644 index 00000000000..db394918df5 --- /dev/null +++ b/packages/js/customer-effort-score/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './customer-effort-score-exit-page'; +export * from './get-store-age-in-weeks'; diff --git a/packages/js/product-editor/changelog/add-migrate-more-menu-37097 b/packages/js/product-editor/changelog/add-migrate-more-menu-37097 new file mode 100644 index 00000000000..f55c4ffde77 --- /dev/null +++ b/packages/js/product-editor/changelog/add-migrate-more-menu-37097 @@ -0,0 +1,4 @@ +Significance: minor +Type: update + +Adding header slot fill and more menu to header with slot fill. diff --git a/packages/js/product-editor/changelog/update-product-page-add-hook-37281 b/packages/js/product-editor/changelog/update-product-page-add-hook-37281 new file mode 100644 index 00000000000..0be0cab8030 --- /dev/null +++ b/packages/js/product-editor/changelog/update-product-page-add-hook-37281 @@ -0,0 +1,4 @@ +Significance: minor +Type: update + +Fix issue were template was not re-synced when switching between products. diff --git a/packages/js/product-editor/package.json b/packages/js/product-editor/package.json index cf58e1f8a63..7e3b314dc49 100644 --- a/packages/js/product-editor/package.json +++ b/packages/js/product-editor/package.json @@ -31,6 +31,7 @@ "@automattic/interpolate-components": "^1.2.0", "@types/lodash": "^4.14.179", "@types/wordpress__blocks": "^11.0.7", + "@woocommerce/admin-layout": "workspace:*", "@woocommerce/components": "workspace:*", "@woocommerce/currency": "workspace:*", "@woocommerce/data": "workspace:^4.1.0", @@ -52,6 +53,7 @@ "@wordpress/interface": "wp-6.0", "@wordpress/keyboard-shortcuts": "wp-6.0", "@wordpress/media-utils": "wp-6.0", + "@wordpress/plugins": "wp-6.0", "@wordpress/url": "wp-6.0", "classnames": "^2.3.1", "lodash": "^4.17.21", @@ -75,6 +77,7 @@ "@types/wordpress__data": "^6.0.2", "@types/wordpress__editor": "^13.0.0", "@types/wordpress__media-utils": "^3.0.0", + "@types/wordpress__plugins": "^3.0.0", "@woocommerce/eslint-plugin": "workspace:*", "@woocommerce/internal-style-build": "workspace:*", "@wordpress/block-editor": "^9.8.0", diff --git a/packages/js/product-editor/src/components/block-editor/block-editor.tsx b/packages/js/product-editor/src/components/block-editor/block-editor.tsx index aa127422e94..b25a6c9059b 100644 --- a/packages/js/product-editor/src/components/block-editor/block-editor.tsx +++ b/packages/js/product-editor/src/components/block-editor/block-editor.tsx @@ -94,7 +94,7 @@ export function BlockEditor( { synchronizeBlocksWithTemplate( [], _settings?.template ), {} ); - }, [] ); + }, [ product.id ] ); if ( ! blocks ) { return null; diff --git a/packages/js/product-editor/src/components/editor/editor.tsx b/packages/js/product-editor/src/components/editor/editor.tsx index 2f93b69b7b2..94a4e36e871 100644 --- a/packages/js/product-editor/src/components/editor/editor.tsx +++ b/packages/js/product-editor/src/components/editor/editor.tsx @@ -1,7 +1,8 @@ /** * External dependencies */ -import { createElement, StrictMode } from '@wordpress/element'; +import { createElement, StrictMode, Fragment } from '@wordpress/element'; +import { PluginArea } from '@wordpress/plugins'; import { EditorSettings, EditorBlockListSettings, @@ -54,10 +55,14 @@ export function Editor( { product, settings }: EditorProps ) { /> } content={ - + <> + + { /* @ts-expect-error 'scope' does exist. @types/wordpress__plugins is outdated. */ } + + } /> diff --git a/packages/js/product-editor/src/components/editor/style.scss b/packages/js/product-editor/src/components/editor/style.scss index 5d3842bb8da..cf2c77dae8b 100644 --- a/packages/js/product-editor/src/components/editor/style.scss +++ b/packages/js/product-editor/src/components/editor/style.scss @@ -11,3 +11,8 @@ .interface-interface-skeleton__sidebar { width: 280px; } + +.interface-interface-skeleton__header{ + // Higher than the sidebar which has a z-index of 90. + z-index: 100; +} diff --git a/packages/js/product-editor/src/components/header/header.tsx b/packages/js/product-editor/src/components/header/header.tsx index 65270bd1346..35f2db9cdc7 100644 --- a/packages/js/product-editor/src/components/header/header.tsx +++ b/packages/js/product-editor/src/components/header/header.tsx @@ -7,12 +7,18 @@ import { useDispatch, useSelect } from '@wordpress/data'; import { createElement } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { navigateTo, getNewPath } from '@woocommerce/navigation'; +import { WooHeaderItem } from '@woocommerce/admin-layout'; /** * Internal dependencies */ import { AUTO_DRAFT_NAME, getHeaderTitle } from '../../utils'; +/** + * Internal dependencies + */ +import { MoreMenu } from './more-menu'; + export type HeaderProps = { productId: number; productName: string; @@ -85,6 +91,8 @@ export function Header( { productId, productName }: HeaderProps ) { ? __( 'Add', 'woocommerce' ) : __( 'Save', 'woocommerce' ) } + + ); diff --git a/packages/js/product-editor/src/components/header/index.ts b/packages/js/product-editor/src/components/header/index.ts index 677ca79d479..90d2fa76cfc 100644 --- a/packages/js/product-editor/src/components/header/index.ts +++ b/packages/js/product-editor/src/components/header/index.ts @@ -1 +1,2 @@ export * from './header'; +export * from './woo-more-menu-item'; diff --git a/packages/js/product-editor/src/components/header/more-menu/index.ts b/packages/js/product-editor/src/components/header/more-menu/index.ts new file mode 100644 index 00000000000..48b036d2304 --- /dev/null +++ b/packages/js/product-editor/src/components/header/more-menu/index.ts @@ -0,0 +1 @@ +export * from './more-menu'; diff --git a/packages/js/product-editor/src/components/header/more-menu/more-menu.tsx b/packages/js/product-editor/src/components/header/more-menu/more-menu.tsx new file mode 100644 index 00000000000..f86a7761b4a --- /dev/null +++ b/packages/js/product-editor/src/components/header/more-menu/more-menu.tsx @@ -0,0 +1,30 @@ +/** + * External dependencies + */ +import { createElement, Fragment } from '@wordpress/element'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore No types for this exist yet. +// eslint-disable-next-line @woocommerce/dependency-group +import { MoreMenuDropdown } from '@wordpress/interface'; +//import { displayShortcut } from '@wordpress/keycodes'; + +/** + * Internal dependencies + */ +import { WooProductMoreMenuItem } from '../woo-more-menu-item'; + +export const MoreMenu = () => { + return ( + <> + + { ( { onClose }: { onClose: () => void } ) => ( + <> + + + ) } + + + ); +}; diff --git a/packages/js/product-editor/src/components/header/style.scss b/packages/js/product-editor/src/components/header/style.scss index a91b0280e7c..fb60f0f9d4d 100644 --- a/packages/js/product-editor/src/components/header/style.scss +++ b/packages/js/product-editor/src/components/header/style.scss @@ -7,4 +7,25 @@ &__actions { margin-left: auto; } + + .components-popover__content { + min-width: auto; + width: min-content; + } + + .woocommerce-product-header__actions { + display: flex; + + > * + * { + margin-left: $gap; + } + } + + .components-dropdown-menu__toggle { + &.is-opened { + + background-color: #1E1E1E; + color: #fff; + } + } } diff --git a/packages/js/product-editor/src/components/header/woo-more-menu-item/index.ts b/packages/js/product-editor/src/components/header/woo-more-menu-item/index.ts new file mode 100644 index 00000000000..c501b7d92a1 --- /dev/null +++ b/packages/js/product-editor/src/components/header/woo-more-menu-item/index.ts @@ -0,0 +1 @@ +export * from './woo-more-menu-item'; diff --git a/packages/js/product-editor/src/components/header/woo-more-menu-item/woo-more-menu-item.tsx b/packages/js/product-editor/src/components/header/woo-more-menu-item/woo-more-menu-item.tsx new file mode 100644 index 00000000000..67fd4a4ef1e --- /dev/null +++ b/packages/js/product-editor/src/components/header/woo-more-menu-item/woo-more-menu-item.tsx @@ -0,0 +1,37 @@ +/** + * External dependencies + */ +import { isEmpty } from 'lodash'; +import { + createSlotFill, + Slot as BaseSlot, + Fill as BaseFill, +} from '@wordpress/components'; +import { createElement, Fragment } from '@wordpress/element'; + +type WooProductMoreMenuSlot = React.FC< BaseSlot.Props >; + +type WooProductMoreMenuFill = React.FC< BaseFill.Props > & { + Slot?: WooProductMoreMenuSlot; +}; + +type CreateSlotFillReturn = { + Fill: WooProductMoreMenuFill; + Slot: WooProductMoreMenuSlot; +}; + +const { Fill, Slot }: CreateSlotFillReturn = createSlotFill( + 'WooProductMoreMenuItem' +); + +Fill.Slot = ( { fillProps } ) => ( + + { ( fills ) => { + return isEmpty( fills ) ? null : <>{ fills }; + } } + +); + +export const WooProductMoreMenuItem = Fill as WooProductMoreMenuFill & { + Slot: WooProductMoreMenuSlot; +}; diff --git a/packages/js/product-editor/src/components/index.ts b/packages/js/product-editor/src/components/index.ts index 9c70b568fe7..8a1005c6a43 100644 --- a/packages/js/product-editor/src/components/index.ts +++ b/packages/js/product-editor/src/components/index.ts @@ -10,6 +10,7 @@ export { DetailsFeatureField as __experimentalDetailsFeatureField } from './deta export { DetailsCategoriesField as __experimentalDetailsCategoriesField } from './details-categories-field'; export { DetailsSummaryField as __experimentalDetailsSummaryField } from './details-summary-field'; export { DetailsDescriptionField as __experimentalDetailsDescriptionField } from './details-description-field'; +export { WooProductMoreMenuItem as __experimentalWooProductMoreMenuItem } from './header'; export { Editor as __experimentalEditor, ProductEditorSettings, diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/constants.ts b/plugins/woocommerce-admin/client/customer-effort-score-tracks/constants.ts deleted file mode 100644 index 4a7ee0b3609..00000000000 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const SHOWN_FOR_ACTIONS_OPTION_NAME = - 'woocommerce_ces_shown_for_actions'; -export const ADMIN_INSTALL_TIMESTAMP_OPTION_NAME = - 'woocommerce_admin_install_timestamp'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/index.js b/plugins/woocommerce-admin/client/customer-effort-score-tracks/index.js deleted file mode 100644 index bd9b84cbbe4..00000000000 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export { default as CustomerEffortScoreTracks } from './customer-effort-score-tracks'; -export { default as CustomerEffortScoreTracksContainer } from './customer-effort-score-tracks-container'; -export * from './customer-effort-score-modal-container.tsx'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-ces-footer.tsx b/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-ces-footer.tsx index c9814047216..453022a2ae8 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-ces-footer.tsx +++ b/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-ces-footer.tsx @@ -9,6 +9,7 @@ import { WooFooterItem } from '@woocommerce/admin-layout'; import { Pill } from '@woocommerce/components'; import { ALLOW_TRACKING_OPTION_NAME, + SHOWN_FOR_ACTIONS_OPTION_NAME, STORE_KEY, } from '@woocommerce/customer-effort-score'; import { OPTIONS_STORE_NAME } from '@woocommerce/data'; @@ -17,7 +18,6 @@ import { OPTIONS_STORE_NAME } from '@woocommerce/data'; * Internal dependencies */ import './product-mvp-ces-footer.scss'; -import { SHOWN_FOR_ACTIONS_OPTION_NAME } from './constants'; export const PRODUCT_MVP_CES_ACTION_OPTION_NAME = 'woocommerce_ces_product_mvp_ces_action'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-feedback-modal-container.tsx b/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-feedback-modal-container.tsx index 27b8d0f9f0a..41505f2f8b1 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-feedback-modal-container.tsx +++ b/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-feedback-modal-container.tsx @@ -11,7 +11,9 @@ import { getAdminLink } from '@woocommerce/settings'; import { useFormContext } from '@woocommerce/components'; import { Product } from '@woocommerce/data'; -export const ProductMVPFeedbackModalContainer: React.FC = () => { +export const ProductMVPFeedbackModalContainer: React.FC< { + productId?: number; +} > = ( { productId: _productId } ) => { const { values } = useFormContext< Product >(); const { hideProductMVPFeedbackModal } = useDispatch( STORE_KEY ); const { isProductMVPModalVisible } = useSelect( ( select ) => { @@ -21,8 +23,10 @@ export const ProductMVPFeedbackModalContainer: React.FC = () => { }; } ); - const classicEditorUrl = values.id - ? getAdminLink( `post.php?post=${ values.id }&action=edit` ) + const productId = _productId ?? values.id; + + const classicEditorUrl = productId + ? getAdminLink( `post.php?post=${ productId }&action=edit` ) : getAdminLink( 'post-new.php?post_type=product' ); const recordScore = ( checked: string[], comments: string ) => { diff --git a/plugins/woocommerce-admin/client/homescreen/constants.js b/plugins/woocommerce-admin/client/homescreen/constants.js index b0b7575df8f..335e1bea6fe 100644 --- a/plugins/woocommerce-admin/client/homescreen/constants.js +++ b/plugins/woocommerce-admin/client/homescreen/constants.js @@ -9,9 +9,3 @@ export const WELCOME_MODAL_DISMISSED_OPTION_NAME = */ export const WELCOME_FROM_CALYPSO_MODAL_DISMISSED_OPTION_NAME = 'woocommerce_welcome_from_calypso_modal_dismissed'; - -/** - * WooCommerce Admin installation timestamp option name. - */ -export const WOOCOMMERCE_ADMIN_INSTALL_TIMESTAMP_OPTION_NAME = - 'woocommerce_admin_install_timestamp'; diff --git a/plugins/woocommerce-admin/client/index.js b/plugins/woocommerce-admin/client/index.js index 41a0866a6d8..67173157a26 100644 --- a/plugins/woocommerce-admin/client/index.js +++ b/plugins/woocommerce-admin/client/index.js @@ -3,6 +3,7 @@ */ import '@wordpress/notices'; import { render } from '@wordpress/element'; +import { CustomerEffortScoreTracksContainer } from '@woocommerce/customer-effort-score'; import { withCurrentUserHydration, withSettingsHydration, @@ -14,7 +15,6 @@ import { import './stylesheets/_index.scss'; import { getAdminSetting } from '~/utils/admin-settings'; import { PageLayout, EmbedLayout, PrimaryLayout as NoticeArea } from './layout'; -import { CustomerEffortScoreTracksContainer } from './customer-effort-score-tracks'; import { EmbeddedBodyLayout } from './embedded-body-layout'; import { WcAdminPaymentsGatewaysBannerSlot } from './payments/payments-settings-banner-slotfill'; import { WcAdminConflictErrorSlot } from './settings/conflict-error-slotfill.js'; diff --git a/plugins/woocommerce-admin/client/layout/index.js b/plugins/woocommerce-admin/client/layout/index.js index b3321181ad3..9a6344e09b0 100644 --- a/plugins/woocommerce-admin/client/layout/index.js +++ b/plugins/woocommerce-admin/client/layout/index.js @@ -17,7 +17,10 @@ import { Children, cloneElement } from 'react'; import PropTypes from 'prop-types'; import { get, isFunction, identity, memoize } from 'lodash'; import { parse } from 'qs'; -import { triggerExitPageCesSurvey } from '@woocommerce/customer-effort-score'; +import { + CustomerEffortScoreModalContainer, + triggerExitPageCesSurvey, +} from '@woocommerce/customer-effort-score'; import { getHistory, getQuery } from '@woocommerce/navigation'; import { PLUGINS_STORE_NAME, @@ -38,7 +41,6 @@ import { Header } from '../header'; import { Footer } from './footer'; import Notices from './notices'; import TransientNotices from './transient-notices'; -import { CustomerEffortScoreModalContainer } from '../customer-effort-score-tracks'; import { getAdminSetting } from '~/utils/admin-settings'; import '~/activity-panel'; import '~/mobile-banner'; diff --git a/plugins/woocommerce-admin/client/marketing/hooks/index.ts b/plugins/woocommerce-admin/client/marketing/hooks/index.ts index 3492d275ed0..6a6b6e6f971 100644 --- a/plugins/woocommerce-admin/client/marketing/hooks/index.ts +++ b/plugins/woocommerce-admin/client/marketing/hooks/index.ts @@ -1,5 +1,5 @@ export { useIntroductionBanner } from './useIntroductionBanner'; -export { useInstalledPlugins } from './useInstalledPlugins'; +export { useInstalledPluginsWithoutChannels } from './useInstalledPluginsWithoutChannels'; export { useRegisteredChannels } from './useRegisteredChannels'; export { useRecommendedChannels } from './useRecommendedChannels'; export { useCampaignTypes } from './useCampaignTypes'; diff --git a/plugins/woocommerce-admin/client/marketing/hooks/useInstalledPlugins.ts b/plugins/woocommerce-admin/client/marketing/hooks/useInstalledPlugins.ts deleted file mode 100644 index 88c39ac3e68..00000000000 --- a/plugins/woocommerce-admin/client/marketing/hooks/useInstalledPlugins.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * External dependencies - */ -import { useSelect, useDispatch } from '@wordpress/data'; - -/** - * Internal dependencies - */ -import { STORE_KEY } from '~/marketing/data/constants'; -import { InstalledPlugin } from '~/marketing/types'; - -export type UseInstalledPlugins = { - installedPlugins: InstalledPlugin[]; - activatingPlugins: string[]; - activateInstalledPlugin: ( slug: string ) => void; - loadInstalledPluginsAfterActivation: ( slug: string ) => void; -}; - -/** - * Hook to return plugins and methods for "Installed extensions" card. - */ -export const useInstalledPlugins = (): UseInstalledPlugins => { - const { installedPlugins, activatingPlugins } = useSelect( ( select ) => { - const { getInstalledPlugins, getActivatingPlugins } = - select( STORE_KEY ); - - return { - installedPlugins: getInstalledPlugins(), - activatingPlugins: getActivatingPlugins(), - }; - }, [] ); - const { activateInstalledPlugin, loadInstalledPluginsAfterActivation } = - useDispatch( STORE_KEY ); - - return { - installedPlugins, - activatingPlugins, - activateInstalledPlugin, - loadInstalledPluginsAfterActivation, - }; -}; diff --git a/plugins/woocommerce-admin/client/marketing/hooks/useInstalledPluginsWithoutChannels.ts b/plugins/woocommerce-admin/client/marketing/hooks/useInstalledPluginsWithoutChannels.ts new file mode 100644 index 00000000000..6605c900d6e --- /dev/null +++ b/plugins/woocommerce-admin/client/marketing/hooks/useInstalledPluginsWithoutChannels.ts @@ -0,0 +1,72 @@ +/** + * External dependencies + */ +import { useSelect, useDispatch } from '@wordpress/data'; +import { chain } from 'lodash'; + +/** + * Internal dependencies + */ +import { STORE_KEY } from '~/marketing/data/constants'; +import { InstalledPlugin } from '~/marketing/types'; +import { useRecommendedChannels } from './useRecommendedChannels'; +import { useRegisteredChannels } from './useRegisteredChannels'; + +export type UseInstalledPluginsWithoutChannels = { + data: InstalledPlugin[]; + activatingPlugins: string[]; + activateInstalledPlugin: ( slug: string ) => void; + loadInstalledPluginsAfterActivation: ( slug: string ) => void; +}; + +/** + * Hook to return plugins and methods for "Installed extensions" card. + * The list of installed plugins does not include registered and recommended marketing channels. + */ +export const useInstalledPluginsWithoutChannels = + (): UseInstalledPluginsWithoutChannels => { + const { installedPlugins, activatingPlugins } = useSelect( + ( select ) => { + const { getInstalledPlugins, getActivatingPlugins } = + select( STORE_KEY ); + + return { + installedPlugins: + getInstalledPlugins< InstalledPlugin[] >(), + activatingPlugins: getActivatingPlugins(), + }; + }, + [] + ); + + const { + loading: loadingRegisteredChannels, + data: dataRegisteredChannels, + } = useRegisteredChannels(); + const { + loading: loadingRecommendedChannels, + data: dataRecommendedChannels, + } = useRecommendedChannels(); + + const { activateInstalledPlugin, loadInstalledPluginsAfterActivation } = + useDispatch( STORE_KEY ); + + const loading = loadingRegisteredChannels || loadingRecommendedChannels; + const installedPluginsWithoutChannels = chain( installedPlugins ) + .differenceWith( + dataRegisteredChannels || [], + ( a, b ) => a.slug === b.slug + ) + .differenceWith( + dataRecommendedChannels || [], + ( a, b ) => a.slug === b.product + ) + .value(); + + return { + data: loading ? [] : installedPluginsWithoutChannels, + activatingPlugins, + activateInstalledPlugin, + loadInstalledPluginsAfterActivation, + }; + }; diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/DiscoverTools.test.tsx b/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/DiscoverTools.test.tsx index 568b353147f..18ada3a3c24 100644 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/DiscoverTools.test.tsx +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/DiscoverTools.test.tsx @@ -6,8 +6,7 @@ import { render, screen } from '@testing-library/react'; /** * Internal dependencies */ -import { useInstalledPlugins } from '../../hooks'; -import { useRecommendedPlugins } from './useRecommendedPlugins'; +import { useRecommendedPluginsWithoutChannels } from './useRecommendedPluginsWithoutChannels'; import { DiscoverTools } from './DiscoverTools'; jest.mock( '@woocommerce/components', () => { @@ -20,23 +19,20 @@ jest.mock( '@woocommerce/components', () => { }; } ); -jest.mock( './useRecommendedPlugins', () => ( { - useRecommendedPlugins: jest.fn(), +jest.mock( './useRecommendedPluginsWithoutChannels', () => ( { + useRecommendedPluginsWithoutChannels: jest.fn(), } ) ); -jest.mock( '../../hooks', () => ( { - useInstalledPlugins: jest.fn(), +jest.mock( '~/marketing/hooks', () => ( { + useInstalledPluginsWithoutChannels: jest.fn( () => ( {} ) ), } ) ); describe( 'DiscoverTools component', () => { it( 'should render a Spinner when loading is in progress', () => { - ( useRecommendedPlugins as jest.Mock ).mockReturnValue( { + ( useRecommendedPluginsWithoutChannels as jest.Mock ).mockReturnValue( { isInitializing: true, isLoading: true, - plugins: [], - } ); - ( useInstalledPlugins as jest.Mock ).mockReturnValue( { - loadInstalledPluginsAfterActivation: jest.fn(), + data: [], } ); render( ); @@ -44,13 +40,10 @@ describe( 'DiscoverTools component', () => { } ); it( 'should render message and link when loading is finish and there are no plugins', () => { - ( useRecommendedPlugins as jest.Mock ).mockReturnValue( { + ( useRecommendedPluginsWithoutChannels as jest.Mock ).mockReturnValue( { isInitializing: false, isLoading: false, - plugins: [], - } ); - ( useInstalledPlugins as jest.Mock ).mockReturnValue( { - loadInstalledPluginsAfterActivation: jest.fn(), + data: [], } ); render( ); @@ -66,10 +59,12 @@ describe( 'DiscoverTools component', () => { describe( 'With plugins loaded', () => { it( 'should render `direct_install: true` plugins with "Install plugin" button', () => { - ( useRecommendedPlugins as jest.Mock ).mockReturnValue( { + ( + useRecommendedPluginsWithoutChannels as jest.Mock + ).mockReturnValue( { isInitializing: false, isLoading: false, - plugins: [ + data: [ { title: 'Google Listings and Ads', description: @@ -95,9 +90,6 @@ describe( 'DiscoverTools component', () => { }, ], } ); - ( useInstalledPlugins as jest.Mock ).mockReturnValue( { - loadInstalledPluginsAfterActivation: jest.fn(), - } ); render( ); // Assert that we have the "Sales channels" tab, the plugin name, the "Built by WooCommerce" pill, and the "Install plugin" button. @@ -112,10 +104,12 @@ describe( 'DiscoverTools component', () => { } ); it( 'should render `direct_install: false` plugins with "View details" button', () => { - ( useRecommendedPlugins as jest.Mock ).mockReturnValue( { + ( + useRecommendedPluginsWithoutChannels as jest.Mock + ).mockReturnValue( { isInitializing: false, isLoading: false, - plugins: [ + data: [ { title: 'WooCommerce Zapier', description: @@ -136,9 +130,6 @@ describe( 'DiscoverTools component', () => { }, ], } ); - ( useInstalledPlugins as jest.Mock ).mockReturnValue( { - loadInstalledPluginsAfterActivation: jest.fn(), - } ); render( ); // Assert that we have the CRM tab, plugin name, and "View details" button. diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/DiscoverTools.tsx b/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/DiscoverTools.tsx index a116640fbe0..bfade3d9f0d 100644 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/DiscoverTools.tsx +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/DiscoverTools.tsx @@ -14,13 +14,13 @@ import { CardBody, CenteredSpinner, } from '~/marketing/components'; -import { useRecommendedPlugins } from './useRecommendedPlugins'; +import { useRecommendedPluginsWithoutChannels } from './useRecommendedPluginsWithoutChannels'; import { PluginsTabPanel } from './PluginsTabPanel'; import './DiscoverTools.scss'; export const DiscoverTools = () => { - const { isInitializing, isLoading, plugins, installAndActivate } = - useRecommendedPlugins(); + const { isInitializing, isLoading, data, installAndActivate } = + useRecommendedPluginsWithoutChannels(); /** * Renders card body. @@ -38,7 +38,7 @@ export const DiscoverTools = () => { ); } - if ( plugins.length === 0 ) { + if ( data.length === 0 ) { return ( @@ -66,7 +66,7 @@ export const DiscoverTools = () => { return ( diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/PluginsTabPanel.tsx b/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/PluginsTabPanel.tsx index 8a689f4f2c7..902bbc8a02e 100644 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/PluginsTabPanel.tsx +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/PluginsTabPanel.tsx @@ -14,7 +14,7 @@ import { flatMapDeep, uniqBy } from 'lodash'; * Internal dependencies */ import { CardDivider, PluginCardBody } from '~/marketing/components'; -import { useInstalledPlugins } from '~/marketing/hooks'; +import { useInstalledPluginsWithoutChannels } from '~/marketing/hooks'; import { RecommendedPlugin } from '~/marketing/types'; import { getInAppPurchaseUrl } from '~/lib/in-app-purchase'; import { createNoticesFromResponse } from '~/lib/notices'; @@ -60,7 +60,8 @@ export const PluginsTabPanel = ( { null ); const { installAndActivatePlugins } = useDispatch( PLUGINS_STORE_NAME ); - const { loadInstalledPluginsAfterActivation } = useInstalledPlugins(); + const { loadInstalledPluginsAfterActivation } = + useInstalledPluginsWithoutChannels(); /** * Install and activate a plugin. diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/useRecommendedPlugins.ts b/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/useRecommendedPlugins.ts deleted file mode 100644 index e8865fd4888..00000000000 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/useRecommendedPlugins.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * External dependencies - */ -import { useSelect, useDispatch } from '@wordpress/data'; - -/** - * Internal dependencies - */ -import { STORE_KEY } from '~/marketing/data/constants'; -import { RecommendedPlugin } from '~/marketing/types'; - -const selector = 'getRecommendedPlugins'; -const category = 'marketing'; - -export const useRecommendedPlugins = () => { - const { invalidateResolution, installAndActivateRecommendedPlugin } = - useDispatch( STORE_KEY ); - - const installAndActivate = ( plugin: string ) => { - installAndActivateRecommendedPlugin( plugin, category ); - invalidateResolution( selector, [ category ] ); - }; - - return useSelect( ( select ) => { - const { getRecommendedPlugins, hasFinishedResolution } = - select( STORE_KEY ); - const plugins = - getRecommendedPlugins< RecommendedPlugin[] >( category ); - const isLoading = ! hasFinishedResolution( selector, [ category ] ); - - return { - isInitializing: ! plugins.length && isLoading, - isLoading, - plugins, - installAndActivate, - }; - }, [] ); -}; diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/useRecommendedPluginsWithoutChannels.ts b/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/useRecommendedPluginsWithoutChannels.ts new file mode 100644 index 00000000000..ef10efb9e8d --- /dev/null +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/DiscoverTools/useRecommendedPluginsWithoutChannels.ts @@ -0,0 +1,92 @@ +/** + * External dependencies + */ +import { useSelect, useDispatch } from '@wordpress/data'; +import { differenceWith } from 'lodash'; + +/** + * Internal dependencies + */ +import { STORE_KEY } from '~/marketing/data/constants'; +import { useRecommendedChannels } from '~/marketing/hooks'; +import { RecommendedPlugin } from '~/marketing/types'; + +type UseRecommendedPluginsWithoutChannels = { + /** + * Boolean indicating whether it is initializing. + */ + isInitializing: boolean; + + /** + * Boolean indicating whether it is loading. + * + * This will be true when data is being refetched + * after `invalidateResolution` is called in the `installAndActivate` method. + */ + isLoading: boolean; + + /** + * An array of recommended marketing plugins without marketing channels. + */ + data: RecommendedPlugin[]; + + /** + * Install and activate a plugin. + */ + installAndActivate: ( slug: string ) => void; +}; + +const selector = 'getRecommendedPlugins'; +const category = 'marketing'; + +/** + * A hook to return a list of recommended plugins without marketing channels, + * and related methods, to be used with the `DiscoverTools` component. + */ +export const useRecommendedPluginsWithoutChannels = + (): UseRecommendedPluginsWithoutChannels => { + const { + loading: loadingRecommendedPlugins, + data: dataRecommendedPlugins, + } = useSelect( ( select ) => { + const { getRecommendedPlugins, hasFinishedResolution } = + select( STORE_KEY ); + + return { + loading: ! hasFinishedResolution( selector, [ category ] ), + data: getRecommendedPlugins< RecommendedPlugin[] >( category ), + }; + }, [] ); + + const { + loading: loadingRecommendedChannels, + data: dataRecommendedChannels, + } = useRecommendedChannels(); + + const { invalidateResolution, installAndActivateRecommendedPlugin } = + useDispatch( STORE_KEY ); + + const isInitializing = + ( loadingRecommendedPlugins && ! dataRecommendedPlugins.length ) || + ( loadingRecommendedChannels && ! dataRecommendedChannels ); + + const loading = loadingRecommendedPlugins || loadingRecommendedChannels; + + const recommendedPluginsWithoutChannels = differenceWith( + dataRecommendedPlugins, + dataRecommendedChannels || [], + ( a, b ) => a.product === b.product + ); + + const installAndActivate = ( slug: string ) => { + installAndActivateRecommendedPlugin( slug, category ); + invalidateResolution( selector, [ category ] ); + }; + + return { + isInitializing, + isLoading: loading, + data: isInitializing ? [] : recommendedPluginsWithoutChannels, + installAndActivate, + }; + }; diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/InstalledExtensions/InstalledExtensions.tsx b/plugins/woocommerce-admin/client/marketing/overview-multichannel/InstalledExtensions/InstalledExtensions.tsx index f445fa7a69b..cee200843c2 100644 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/InstalledExtensions/InstalledExtensions.tsx +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/InstalledExtensions/InstalledExtensions.tsx @@ -16,13 +16,13 @@ import { PluginCardBody, } from '~/marketing/components'; import { InstalledPlugin } from '~/marketing/types'; -import { useInstalledPlugins } from '~/marketing/hooks'; +import { useInstalledPluginsWithoutChannels } from '~/marketing/hooks'; export const InstalledExtensions = () => { - const { installedPlugins, activatingPlugins, activateInstalledPlugin } = - useInstalledPlugins(); + const { data, activatingPlugins, activateInstalledPlugin } = + useInstalledPluginsWithoutChannels(); - if ( installedPlugins.length === 0 ) { + if ( data.length === 0 ) { return null; } @@ -81,7 +81,7 @@ export const InstalledExtensions = () => { return ( - { installedPlugins.map( ( el, idx ) => { + { data.map( ( el, idx ) => { return ( { description={ el.description } button={ getButton( el ) } /> - { idx !== installedPlugins.length - 1 && ( - - ) } + { idx !== data.length - 1 && } ); } ) } diff --git a/plugins/woocommerce-admin/client/products/fills/more-menu-items/classic-editor-menu-item.tsx b/plugins/woocommerce-admin/client/products/fills/more-menu-items/classic-editor-menu-item.tsx new file mode 100644 index 00000000000..61bd566ec27 --- /dev/null +++ b/plugins/woocommerce-admin/client/products/fills/more-menu-items/classic-editor-menu-item.tsx @@ -0,0 +1,75 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; +import { useDispatch, useSelect } from '@wordpress/data'; +import { getAdminLink } from '@woocommerce/settings'; +import { OPTIONS_STORE_NAME } from '@woocommerce/data'; +import { MenuItem } from '@wordpress/components'; +import { + ALLOW_TRACKING_OPTION_NAME, + STORE_KEY as CES_STORE_KEY, +} from '@woocommerce/customer-effort-score'; + +/** + * Internal dependencies + */ +import { ClassicEditorIcon } from '../../images/classic-editor-icon'; +import { NEW_PRODUCT_MANAGEMENT } from '~/customer-effort-score-tracks/product-mvp-ces-footer'; + +export const ClassicEditorMenuItem = ( { + onClose, + productId, +}: { + productId: number; + onClose: () => void; +} ) => { + const { showProductMVPFeedbackModal } = useDispatch( CES_STORE_KEY ); + const { updateOptions } = useDispatch( OPTIONS_STORE_NAME ); + + const { allowTracking, resolving: isLoading } = useSelect( ( select ) => { + const { getOption, hasFinishedResolution } = + select( OPTIONS_STORE_NAME ); + + const allowTrackingOption = + getOption( ALLOW_TRACKING_OPTION_NAME ) || 'no'; + + const resolving = ! hasFinishedResolution( 'getOption', [ + ALLOW_TRACKING_OPTION_NAME, + ] ); + + return { + allowTracking: allowTrackingOption === 'yes', + resolving, + }; + } ); + + const classicEditorUrl = productId + ? getAdminLink( `post.php?post=${ productId }&action=edit` ) + : getAdminLink( 'post-new.php?post_type=product' ); + + if ( isLoading ) { + return null; + } + + return ( + { + if ( allowTracking ) { + updateOptions( { + [ NEW_PRODUCT_MANAGEMENT ]: 'no', + } ); + showProductMVPFeedbackModal(); + onClose(); + } else { + window.location.href = classicEditorUrl; + onClose(); + } + } } + icon={ } + iconPosition="right" + > + { __( 'Use the classic editor', 'woocommerce' ) } + + ); +}; diff --git a/plugins/woocommerce-admin/client/products/fills/more-menu-items/feedback-menu-item.tsx b/plugins/woocommerce-admin/client/products/fills/more-menu-items/feedback-menu-item.tsx new file mode 100644 index 00000000000..2cf6730a914 --- /dev/null +++ b/plugins/woocommerce-admin/client/products/fills/more-menu-items/feedback-menu-item.tsx @@ -0,0 +1,50 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; +import { MenuItem } from '@wordpress/components'; +import { useDispatch } from '@wordpress/data'; +import { STORE_KEY as CES_STORE_KEY } from '@woocommerce/customer-effort-score'; + +/** + * Internal dependencies + */ +import { FeedbackIcon } from '../../images/feedback-icon'; + +export const FeedbackMenuItem = ( { onClose }: { onClose: () => void } ) => { + const { showCesModal } = useDispatch( CES_STORE_KEY ); + + return ( + { + showCesModal( + { + action: 'new_product', + title: __( + "How's your experience with the product editor?", + 'woocommerce' + ), + firstQuestion: __( + 'The product editing screen is easy to use', + 'woocommerce' + ), + secondQuestion: __( + "The product editing screen's functionality meets my needs", + 'woocommerce' + ), + }, + { shouldShowComments: () => true }, + { + type: 'snackbar', + icon: 🌟, + } + ); + onClose(); + } } + icon={ } + iconPosition="right" + > + { __( 'Share feedback', 'woocommerce' ) } + + ); +}; diff --git a/plugins/woocommerce-admin/client/products/fills/more-menu-items/index.ts b/plugins/woocommerce-admin/client/products/fills/more-menu-items/index.ts new file mode 100644 index 00000000000..c180f511b00 --- /dev/null +++ b/plugins/woocommerce-admin/client/products/fills/more-menu-items/index.ts @@ -0,0 +1,2 @@ +export * from './feedback-menu-item'; +export * from './classic-editor-menu-item'; diff --git a/plugins/woocommerce-admin/client/products/fills/product-block-editor-fills.tsx b/plugins/woocommerce-admin/client/products/fills/product-block-editor-fills.tsx new file mode 100644 index 00000000000..e6fad9f2587 --- /dev/null +++ b/plugins/woocommerce-admin/client/products/fills/product-block-editor-fills.tsx @@ -0,0 +1,54 @@ +/** + * External dependencies + */ +import { __experimentalWooProductMoreMenuItem as WooProductMoreMenuItem } from '@woocommerce/product-editor'; +import { registerPlugin } from '@wordpress/plugins'; +import { WooHeaderItem } from '@woocommerce/admin-layout'; + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore No types for this exist yet. +// eslint-disable-next-line @woocommerce/dependency-group +import { useEntityProp } from '@wordpress/core-data'; + +/** + * Internal dependencies + */ +import { ProductMVPFeedbackModalContainer } from '~/customer-effort-score-tracks/product-mvp-feedback-modal-container'; +import { + FeedbackMenuItem, + ClassicEditorMenuItem, +} from '../fills/more-menu-items'; + +const MoreMenuFill = ( { onClose }: { onClose: () => void } ) => { + const [ id ] = useEntityProp( 'postType', 'product', 'id' ); + + return ( + <> + + + + ); +}; + +const ProductHeaderFill = () => { + const [ id ] = useEntityProp( 'postType', 'product', 'id' ); + + return ; +}; + +registerPlugin( 'wc-admin-more-menu', { + // @ts-expect-error 'scope' does exist. @types/wordpress__plugins is outdated. + scope: 'woocommerce-product-block-editor', + render: () => ( + <> + + { ( { onClose }: { onClose: () => void } ) => ( + + ) } + + + + + + ), +} ); diff --git a/plugins/woocommerce-admin/client/products/hooks/use-product-entity-record.ts b/plugins/woocommerce-admin/client/products/hooks/use-product-entity-record.ts new file mode 100644 index 00000000000..b0f03086810 --- /dev/null +++ b/plugins/woocommerce-admin/client/products/hooks/use-product-entity-record.ts @@ -0,0 +1,42 @@ +/** + * External dependencies + */ +import { AUTO_DRAFT_NAME } from '@woocommerce/product-editor'; +import { Product } from '@woocommerce/data'; +import { useDispatch, resolveSelect } from '@wordpress/data'; + +import { useEffect, useState } from '@wordpress/element'; + +export function useProductEntityRecord( + productId: string | undefined +): Product | undefined { + const { saveEntityRecord } = useDispatch( 'core' ); + const [ product, setProduct ] = useState< Product | undefined >( + undefined + ); + + useEffect( () => { + const getRecordPromise: Promise< Product > = productId + ? resolveSelect( 'core' ).getEntityRecord< Product >( + 'postType', + 'product', + Number.parseInt( productId, 10 ) + ) + : // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore Incorrect types. + ( saveEntityRecord( 'postType', 'product', { + title: AUTO_DRAFT_NAME, + status: 'auto-draft', + } ) as Promise< Product > ); + getRecordPromise + .then( ( autoDraftProduct: Product ) => { + setProduct( autoDraftProduct ); + } ) + .catch( ( e ) => { + setProduct( undefined ); + throw e; + } ); + }, [ productId ] ); + + return product; +} diff --git a/plugins/woocommerce-admin/client/products/product-more-menu.tsx b/plugins/woocommerce-admin/client/products/product-more-menu.tsx index a5e38a85718..887a77138da 100644 --- a/plugins/woocommerce-admin/client/products/product-more-menu.tsx +++ b/plugins/woocommerce-admin/client/products/product-more-menu.tsx @@ -2,53 +2,39 @@ * External dependencies */ import { __ } from '@wordpress/i18n'; -import { DropdownMenu, MenuItem } from '@wordpress/components'; -import { useDispatch, useSelect } from '@wordpress/data'; +import { DropdownMenu } from '@wordpress/components'; +import { useFormContext } from '@woocommerce/components'; +import { useSelect } from '@wordpress/data'; import { WooHeaderItem } from '@woocommerce/admin-layout'; -import { getAdminLink } from '@woocommerce/settings'; import { moreVertical } from '@wordpress/icons'; import { OPTIONS_STORE_NAME, Product } from '@woocommerce/data'; -import { useFormContext } from '@woocommerce/components'; -import { - ALLOW_TRACKING_OPTION_NAME, - STORE_KEY as CES_STORE_KEY, -} from '@woocommerce/customer-effort-score'; +import { ALLOW_TRACKING_OPTION_NAME } from '@woocommerce/customer-effort-score'; /** * Internal dependencies */ -import { ClassicEditorIcon } from './images/classic-editor-icon'; -import { FeedbackIcon } from './images/feedback-icon'; -import { NEW_PRODUCT_MANAGEMENT } from '~/customer-effort-score-tracks/product-mvp-ces-footer'; + +import { + FeedbackMenuItem, + ClassicEditorMenuItem, +} from './fills/more-menu-items'; + import './product-more-menu.scss'; export const ProductMoreMenu = () => { const { values } = useFormContext< Product >(); - const { showCesModal, showProductMVPFeedbackModal } = - useDispatch( CES_STORE_KEY ); - const { updateOptions } = useDispatch( OPTIONS_STORE_NAME ); - - const { allowTracking, resolving: isLoading } = useSelect( ( select ) => { - const { getOption, hasFinishedResolution } = - select( OPTIONS_STORE_NAME ); - - const allowTrackingOption = - getOption( ALLOW_TRACKING_OPTION_NAME ) || 'no'; + const { resolving: isLoading } = useSelect( ( select ) => { + const { hasFinishedResolution } = select( OPTIONS_STORE_NAME ); const resolving = ! hasFinishedResolution( 'getOption', [ ALLOW_TRACKING_OPTION_NAME, ] ); return { - allowTracking: allowTrackingOption === 'yes', resolving, }; } ); - const classEditorUrl = values.id - ? getAdminLink( `post.php?post=${ values.id }&action=edit` ) - : getAdminLink( 'post-new.php?post_type=product' ); - if ( isLoading ) { return null; } @@ -63,55 +49,11 @@ export const ProductMoreMenu = () => { > { ( { onClose } ) => ( <> - { - showCesModal( - { - action: 'new_product', - title: __( - "How's your experience with the product editor?", - 'woocommerce' - ), - firstQuestion: __( - 'The product editing screen is easy to use', - 'woocommerce' - ), - secondQuestion: __( - "The product editing screen's functionality meets my needs", - 'woocommerce' - ), - }, - { shouldShowComments: () => true }, - { - type: 'snackbar', - icon: 🌟, - } - ); - onClose(); - } } - icon={ } - iconPosition="right" - > - { __( 'Share feedback', 'woocommerce' ) } - - { - if ( allowTracking ) { - updateOptions( { - [ NEW_PRODUCT_MANAGEMENT ]: 'no', - } ); - showProductMVPFeedbackModal(); - onClose(); - } else { - window.location.href = classEditorUrl; - onClose(); - } - } } - icon={ } - iconPosition="right" - > - { __( 'Use the classic editor', 'woocommerce' ) } - + + ) } diff --git a/plugins/woocommerce-admin/client/products/product-page.tsx b/plugins/woocommerce-admin/client/products/product-page.tsx index e62c91a6dce..6b414978f5a 100644 --- a/plugins/woocommerce-admin/client/products/product-page.tsx +++ b/plugins/woocommerce-admin/client/products/product-page.tsx @@ -3,26 +3,28 @@ */ import { __experimentalEditor as Editor, - AUTO_DRAFT_NAME, ProductEditorSettings, } from '@woocommerce/product-editor'; -import { Product } from '@woocommerce/data'; -import { useDispatch, useSelect, select as WPSelect } from '@wordpress/data'; -import { useEffect, useState } from '@wordpress/element'; + import { Spinner } from '@wordpress/components'; import { useParams } from 'react-router-dom'; /** * Internal dependencies */ +import { useProductEntityRecord } from './hooks/use-product-entity-record'; + import './product-page.scss'; import './product-block-page.scss'; +import './fills/product-block-editor-fills'; declare const productBlockEditorSettings: ProductEditorSettings; -const ProductEditor: React.FC< { product: Product | undefined } > = ( { - product, -} ) => { +export default function ProductPage() { + const { productId } = useParams(); + + const product = useProductEntityRecord( productId ); + if ( ! product?.id ) { return ; } @@ -33,57 +35,4 @@ const ProductEditor: React.FC< { product: Product | undefined } > = ( { settings={ productBlockEditorSettings || {} } /> ); -}; - -const EditProductEditor: React.FC< { productId: number } > = ( { - productId, -} ) => { - const { product } = useSelect( - ( select: typeof WPSelect ) => { - const { getEntityRecord } = select( 'core' ); - - return { - product: getEntityRecord( - 'postType', - 'product', - productId - ) as Product, - }; - }, - [ productId ] - ); - - return ; -}; - -const AddProductEditor = () => { - const { saveEntityRecord } = useDispatch( 'core' ); - const [ product, setProduct ] = useState< Product | undefined >( - undefined - ); - - useEffect( () => { - saveEntityRecord( 'postType', 'product', { - title: AUTO_DRAFT_NAME, - status: 'auto-draft', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore Incorrect types. - } ).then( ( autoDraftProduct: Product ) => { - setProduct( autoDraftProduct ); - } ); - }, [] ); - - return ; -}; - -export default function ProductPage() { - const { productId } = useParams(); - - if ( productId ) { - return ( - - ); - } - - return ; } diff --git a/plugins/woocommerce-admin/client/two-column-tasks/completed-header.tsx b/plugins/woocommerce-admin/client/two-column-tasks/completed-header.tsx index 91e7623b723..a3e94b33d2c 100644 --- a/plugins/woocommerce-admin/client/two-column-tasks/completed-header.tsx +++ b/plugins/woocommerce-admin/client/two-column-tasks/completed-header.tsx @@ -10,8 +10,11 @@ import { OPTIONS_STORE_NAME, WCDataSelector, WEEK } from '@woocommerce/data'; import { Button, Card, CardHeader } from '@wordpress/components'; import { Text } from '@woocommerce/experimental'; import { + ADMIN_INSTALL_TIMESTAMP_OPTION_NAME, + ALLOW_TRACKING_OPTION_NAME, CustomerFeedbackModal, CustomerFeedbackSimple, + SHOWN_FOR_ACTIONS_OPTION_NAME, } from '@woocommerce/customer-effort-score'; import { __ } from '@wordpress/i18n'; @@ -27,11 +30,7 @@ type TaskListCompletedHeaderProps = { customerEffortScore: boolean; }; -const ADMIN_INSTALL_TIMESTAMP_OPTION_NAME = - 'woocommerce_admin_install_timestamp'; -const SHOWN_FOR_ACTIONS_OPTION_NAME = 'woocommerce_ces_shown_for_actions'; const CUSTOMER_EFFORT_SCORE_ACTION = 'store_setup'; -const ALLOW_TRACKING_OPTION_NAME = 'woocommerce_allow_tracking'; function getStoreAgeInWeeks( adminInstallTimestamp: number ) { if ( adminInstallTimestamp === 0 ) { diff --git a/plugins/woocommerce/changelog/add-migrate-more-menu-37097 b/plugins/woocommerce/changelog/add-migrate-more-menu-37097 new file mode 100644 index 00000000000..66bbc13845c --- /dev/null +++ b/plugins/woocommerce/changelog/add-migrate-more-menu-37097 @@ -0,0 +1,4 @@ +Significance: minor +Type: update + +Refactoring product editor more menu items, and using in block editor slot fills. diff --git a/plugins/woocommerce/changelog/dev-37117_set_default_quantity_value b/plugins/woocommerce/changelog/dev-37117_set_default_quantity_value new file mode 100644 index 00000000000..131462c4f1d --- /dev/null +++ b/plugins/woocommerce/changelog/dev-37117_set_default_quantity_value @@ -0,0 +1,4 @@ +Significance: minor +Type: dev + +Set quantity value when stock tracking is enabled diff --git a/plugins/woocommerce/changelog/e2e-trunk-merge b/plugins/woocommerce/changelog/e2e-trunk-merge new file mode 100644 index 00000000000..0ada563b534 --- /dev/null +++ b/plugins/woocommerce/changelog/e2e-trunk-merge @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + +Run E2E tests on PR merge to trunk. diff --git a/plugins/woocommerce/changelog/feature-34907-marketing-exclude-channels b/plugins/woocommerce/changelog/feature-34907-marketing-exclude-channels new file mode 100644 index 00000000000..941984e2475 --- /dev/null +++ b/plugins/woocommerce/changelog/feature-34907-marketing-exclude-channels @@ -0,0 +1,4 @@ +Significance: minor +Type: update + +Filter out marketing channels in "Installed extensions" and "Discover more marketing tools" cards. diff --git a/plugins/woocommerce/changelog/fix-order-cache-duplicate b/plugins/woocommerce/changelog/fix-order-cache-duplicate new file mode 100644 index 00000000000..1fb3ace0c40 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-order-cache-duplicate @@ -0,0 +1,4 @@ +Significance: patch +Type: fix + +Overwrite clone method to prevent duplicate datq when saving a clone. diff --git a/plugins/woocommerce/changelog/revert-36768-fix-36767-woocommerce_run_on_woocommerce_admin_updated-does-not-run b/plugins/woocommerce/changelog/revert-36768-fix-36767-woocommerce_run_on_woocommerce_admin_updated-does-not-run new file mode 100644 index 00000000000..c48f20c0c5b --- /dev/null +++ b/plugins/woocommerce/changelog/revert-36768-fix-36767-woocommerce_run_on_woocommerce_admin_updated-does-not-run @@ -0,0 +1,5 @@ +Significance: patch +Type: fix +Comment: Revert #36768 + + diff --git a/plugins/woocommerce/changelog/try-remove-e2e-waits b/plugins/woocommerce/changelog/try-remove-e2e-waits new file mode 100644 index 00000000000..8e07a999db3 --- /dev/null +++ b/plugins/woocommerce/changelog/try-remove-e2e-waits @@ -0,0 +1,4 @@ +Significance: patch +Type: tweak + +Remove timeouts in e2e tests for variable products and analytics. diff --git a/plugins/woocommerce/changelog/update-move-remaining-ces-to-package b/plugins/woocommerce/changelog/update-move-remaining-ces-to-package new file mode 100644 index 00000000000..7bd3509065d --- /dev/null +++ b/plugins/woocommerce/changelog/update-move-remaining-ces-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: dev + +Move additional CES-related components to @woocommerce/customer-effort-score. diff --git a/plugins/woocommerce/changelog/update-product-page-add-hook-37281 b/plugins/woocommerce/changelog/update-product-page-add-hook-37281 new file mode 100644 index 00000000000..22f43052aba --- /dev/null +++ b/plugins/woocommerce/changelog/update-product-page-add-hook-37281 @@ -0,0 +1,4 @@ +Significance: minor +Type: update + +Replacing multiple components on the block product page with a single hook. diff --git a/plugins/woocommerce/changelog/update-stable-tag-7-5-1 b/plugins/woocommerce/changelog/update-stable-tag-7-5-1 new file mode 100644 index 00000000000..993c5ee05ab --- /dev/null +++ b/plugins/woocommerce/changelog/update-stable-tag-7-5-1 @@ -0,0 +1,4 @@ +Significance: patch +Type: dev +Comment: This PR updates stable tag, no changelog entry is required. + diff --git a/plugins/woocommerce/includes/abstracts/abstract-wc-order.php b/plugins/woocommerce/includes/abstracts/abstract-wc-order.php index 951cb4dfab1..cab8f59eaab 100644 --- a/plugins/woocommerce/includes/abstracts/abstract-wc-order.php +++ b/plugins/woocommerce/includes/abstracts/abstract-wc-order.php @@ -131,6 +131,17 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order { } } + /** + * This method overwrites the base class's clone method to make it a no-op. In base class WC_Data, we are unsetting the meta_id to clone. + * It seems like this was done to avoid conflicting the metadata when duplicating products. However, doing that does not seems necessary for orders. + * In-fact, when we do that for orders, we lose the capability to clone orders with custom meta data by caching plugins. This is because, when we clone an order object for caching, it will clone the metadata without the ID. Unfortunately, when this cached object with nulled meta ID is retreived, WC_Data will consider it as a new meta and will insert it as a new meta-data causing duplicates. + * + * Eventually, we should move away from overwriting the __clone method in base class itself, since it's easily possible to still duplicate the product without having to hook into the __clone method. + * + * @since 7.6.0 + */ + public function __clone() {} + /** * Get internal type. * diff --git a/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-inventory.php b/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-inventory.php index ac2c944da2c..7b4c9674778 100644 --- a/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-inventory.php +++ b/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-inventory.php @@ -50,8 +50,8 @@ if ( ! defined( 'ABSPATH' ) ) { woocommerce_wp_text_input( array( 'id' => '_stock', - 'value' => wc_stock_amount( $product_object->get_stock_quantity( 'edit' ) ), - 'label' => __( 'Stock quantity', 'woocommerce' ), + 'value' => wc_stock_amount( $product_object->get_stock_quantity( 'edit' ) ?? 1 ), + 'label' => __( 'Quantity', 'woocommerce' ), 'desc_tip' => true, 'description' => __( 'Stock quantity. If this is a variable product this value will be used to control stock for all variations, unless you define stock at variation level.', 'woocommerce' ), 'type' => 'number', diff --git a/plugins/woocommerce/readme.txt b/plugins/woocommerce/readme.txt index 7531ac2d5db..efff28109f1 100644 --- a/plugins/woocommerce/readme.txt +++ b/plugins/woocommerce/readme.txt @@ -4,7 +4,7 @@ Tags: online store, ecommerce, shop, shopping cart, sell online, storefront, che Requires at least: 5.9 Tested up to: 6.1 Requires PHP: 7.2 -Stable tag: 7.5.0 +Stable tag: 7.5.1 License: GPLv3 License URI: https://www.gnu.org/licenses/gpl-3.0.html diff --git a/plugins/woocommerce/src/Admin/RemoteInboxNotifications/RemoteInboxNotificationsEngine.php b/plugins/woocommerce/src/Admin/RemoteInboxNotifications/RemoteInboxNotificationsEngine.php index 49476835478..c0372acb429 100644 --- a/plugins/woocommerce/src/Admin/RemoteInboxNotifications/RemoteInboxNotificationsEngine.php +++ b/plugins/woocommerce/src/Admin/RemoteInboxNotifications/RemoteInboxNotificationsEngine.php @@ -40,11 +40,23 @@ class RemoteInboxNotificationsEngine { // Hook into WCA updated. This is hooked up here rather than in // on_admin_init because that runs too late to hook into the action. - WC()->queue()->schedule_single( - time(), + add_action( 'woocommerce_updated', - array( __CLASS__, 'run_on_woocommerce_admin_updated' ), - 'woocommerce-remote-inbox-engine' + function() { + $next_hook = WC()->queue()->get_next( + 'woocommerce_run_on_woocommerce_admin_updated', + array( __CLASS__, 'run_on_woocommerce_admin_updated' ), + 'woocommerce-remote-inbox-engine' + ); + if ( null === $next_hook ) { + WC()->queue()->schedule_single( + time(), + 'woocommerce_run_on_woocommerce_admin_updated', + array( __CLASS__, 'run_on_woocommerce_admin_updated' ), + 'woocommerce-remote-inbox-engine' + ); + } + } ); add_filter( 'woocommerce_get_note_from_db', array( __CLASS__, 'get_note_from_db' ), 10, 1 ); diff --git a/plugins/woocommerce/src/Caches/OrderCache.php b/plugins/woocommerce/src/Caches/OrderCache.php index 6f49fa308dd..fed5b0be0d7 100644 --- a/plugins/woocommerce/src/Caches/OrderCache.php +++ b/plugins/woocommerce/src/Caches/OrderCache.php @@ -2,6 +2,7 @@ namespace Automattic\WooCommerce\Caches; +use Automattic\WooCommerce\Caching\CacheException; use Automattic\WooCommerce\Caching\ObjectCache; /** diff --git a/plugins/woocommerce/tests/e2e-pw/tests/admin-analytics/analytics-overview.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/admin-analytics/analytics-overview.spec.js index 9c1e273bcb3..1fc2dab43a5 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/admin-analytics/analytics-overview.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/admin-analytics/analytics-overview.spec.js @@ -36,7 +36,13 @@ test.describe( 'Analytics pages', () => { '//button[@title="Choose which analytics to display and the section name"]' ); await page.click( 'text=Move up' ); - await page.waitForTimeout( 1000 ); + + // wait for the changes to be saved + await page.waitForResponse( + ( response ) => + response.url().includes( '/users/' ) && + response.status() === 200 + ); } } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-variable-product.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-variable-product.spec.js index 0e52a26e8fd..ab8d0a00af6 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-variable-product.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-variable-product.spec.js @@ -55,19 +55,28 @@ test.describe.serial( 'Add New Variable Product Page', () => { if ( i > 0 ) { await page.click( 'button.add_attribute' ); } - const input = `input[name="attribute_names[${ i }]"]`; - await page.waitForSelector( input, { timeout: 1000 } ); // Wait for up to 1 second - await page.fill( input, `attr #${ i + 1 }` ); - await page.fill( - `textarea[name="attribute_values[${ i }]"]`, - 'val1 | val2' - ); + await page + .locator( + `.woocommerce_attribute_data input[name="attribute_names[${ i }]"]` + ) + .fill( `attr #${ i + 1 }` ); + await page + .locator( + `.woocommerce_attribute_data textarea[name="attribute_values[${ i }]"]` + ) + .fill( 'val1 | val2' ); } await page.keyboard.press( 'ArrowUp' ); await page.click( 'text=Save attributes' ); - await page.waitForTimeout( 1000 ); // Wait for 1 second + // wait for the attributes to be saved + await page.waitForResponse( + ( response ) => + response.url().includes( '/post.php?post=' ) && + response.status() === 200 + ); + // Save before going to the Variations tab to prevent variations from all attributes to be automatically created await page.locator( '#save-post' ).click(); await expect( @@ -206,24 +215,28 @@ test.describe.serial( 'Add New Variable Product Page', () => { if ( i > 0 ) { await page.click( 'button.add_attribute' ); } - const input = `input[name="attribute_names[${ i }]"]`; - await page.waitForSelector( input, { timeout: 1000 } ); // Wait for up to 1 seconds - await page.fill( input, `attr #${ i + 1 }` ); - await page.fill( - `textarea[name="attribute_values[${ i }]"]`, - 'val1 | val2' - ); + await page + .locator( + `.woocommerce_attribute_data input[name="attribute_names[${ i }]"]` + ) + .fill( `attr #${ i + 1 }` ); + await page + .locator( + `.woocommerce_attribute_data textarea[name="attribute_values[${ i }]"]` + ) + .fill( 'val1 | val2' ); await page.keyboard.press( 'ArrowUp' ); await page.click( 'text=Save attributes' ); - await expect( - page - .locator( '.woocommerce_attribute.closed' ) - .filter( { hasText: `attr #${ i + 1 }` } ) - ).toBeVisible(); } - await page.waitForTimeout( 1000 ); // Wait for 1 second + // wait for the attributes to be saved + await page.waitForResponse( + ( response ) => + response.url().includes( '/post.php?post=' ) && + response.status() === 200 + ); + // Save before going to the Variations tab to prevent variations from all attributes to be automatically created await page.locator( '#save-post' ).click(); await expect( diff --git a/plugins/woocommerce/tests/php/src/Caching/OrderCacheTest.php b/plugins/woocommerce/tests/php/src/Caching/OrderCacheTest.php new file mode 100644 index 00000000000..cd165a223a3 --- /dev/null +++ b/plugins/woocommerce/tests/php/src/Caching/OrderCacheTest.php @@ -0,0 +1,51 @@ +sut = new OrderCache(); + } + + /** + * Test that the order cache does not cause duplicate data storage. + */ + public function test_meta_is_not_duplicated_when_cached() { + global $wpdb; + if ( ! OrderUtil::orders_cache_usage_is_enabled() ) { + // tip: add HPOS=1 env variable to run this test. + $this->markTestSkipped( 'HPOS based caching is not enabled.' ); + } + $order = WC_Helper_Order::create_order(); + $order->add_meta_data( 'test', 'test' ); + $order->save_meta_data(); + + $order = wc_get_order( $order->get_id() ); + $this->assertTrue( $this->sut->is_cached( $order->get_id() ), 'Order was not cached, but it was expected to be cached. Are you sure that HPOS based caching is enabled.' ); + + $order2 = wc_get_order( $order->get_id() ); + $order2->save_meta_data(); + + $orders_meta_table = OrdersTableDataStore::get_meta_table_name(); + $query = $wpdb->prepare( "SELECT id FROM $orders_meta_table WHERE order_id = %d AND meta_key = %s", $order->get_id(), 'test' ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared + $this->assertEquals( 1, count( $wpdb->get_col( $query ) ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Already prepared query. + } + +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 13035b4b4f8..1019537f1c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -523,6 +523,7 @@ importers: '@woocommerce/experimental': workspace:* '@woocommerce/internal-style-build': workspace:* '@woocommerce/navigation': workspace:* + '@woocommerce/tracks': workspace:* '@wordpress/browserslist-config': wp-6.0 '@wordpress/components': wp-6.0 '@wordpress/compose': wp-6.0 @@ -573,6 +574,7 @@ importers: '@woocommerce/eslint-plugin': link:../eslint-plugin '@woocommerce/internal-style-build': link:../internal-style-build '@woocommerce/navigation': link:../navigation + '@woocommerce/tracks': link:../tracks '@wordpress/browserslist-config': 4.1.3 concurrently: 7.0.0 css-loader: 3.6.0_webpack@5.70.0 @@ -1119,7 +1121,7 @@ importers: typescript: ^4.8.3 dependencies: '@testing-library/jest-dom': 5.16.2 - '@testing-library/react': 12.1.4_6l5554ty5ajsajah6yazvrjhoe + '@testing-library/react': 12.1.4_sfoxds7t5ydpegc3knd667wn6m '@wordpress/data': 6.6.1_react@17.0.2 '@wordpress/i18n': 4.6.1 '@wordpress/jest-console': 5.0.2_jest@27.5.1 @@ -1381,6 +1383,8 @@ importers: '@types/wordpress__data': ^6.0.2 '@types/wordpress__editor': ^13.0.0 '@types/wordpress__media-utils': ^3.0.0 + '@types/wordpress__plugins': ^3.0.0 + '@woocommerce/admin-layout': workspace:* '@woocommerce/components': workspace:* '@woocommerce/currency': workspace:* '@woocommerce/data': workspace:^4.1.0 @@ -1405,6 +1409,7 @@ importers: '@wordpress/interface': wp-6.0 '@wordpress/keyboard-shortcuts': wp-6.0 '@wordpress/media-utils': wp-6.0 + '@wordpress/plugins': wp-6.0 '@wordpress/url': wp-6.0 classnames: ^2.3.1 concurrently: ^7.0.0 @@ -1429,6 +1434,7 @@ importers: '@automattic/interpolate-components': 1.2.1_pxzommwrsowkd4kgag6q3sluym '@types/lodash': 4.14.184 '@types/wordpress__blocks': 11.0.7_sfoxds7t5ydpegc3knd667wn6m + '@woocommerce/admin-layout': link:../admin-layout '@woocommerce/components': link:../components '@woocommerce/currency': link:../currency '@woocommerce/data': link:../data @@ -1450,6 +1456,7 @@ importers: '@wordpress/interface': 4.5.6_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/keyboard-shortcuts': 3.4.1_react@17.0.2 '@wordpress/media-utils': 3.4.1 + '@wordpress/plugins': 4.4.3_react@17.0.2 '@wordpress/url': 3.7.1 classnames: 2.3.1 lodash: 4.17.21 @@ -1471,6 +1478,7 @@ importers: '@types/wordpress__data': 6.0.2 '@types/wordpress__editor': 13.0.0_sfoxds7t5ydpegc3knd667wn6m '@types/wordpress__media-utils': 3.0.0_sfoxds7t5ydpegc3knd667wn6m + '@types/wordpress__plugins': 3.0.0_sfoxds7t5ydpegc3knd667wn6m '@woocommerce/eslint-plugin': link:../eslint-plugin '@woocommerce/internal-style-build': link:../internal-style-build '@wordpress/browserslist-config': 4.1.3 @@ -2673,6 +2681,28 @@ packages: optionalDependencies: '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 chokidar: 3.5.3 + dev: true + + /@babel/cli/7.17.6_@babel+core@7.21.3: + resolution: {integrity: sha512-l4w608nsDNlxZhiJ5tE3DbNmr61fIKMZ6fTBo171VEFuFMIYuJ3mHRhTLEkKKyvx2Mizkkv/0a8OJOnZqkKYNA==} + engines: {node: '>=6.9.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@jridgewell/trace-mapping': 0.3.16 + commander: 4.1.1 + convert-source-map: 1.8.0 + fs-readdir-recursive: 1.1.0 + glob: 7.2.0 + make-dir: 2.1.0 + slash: 2.0.0 + source-map: 0.5.7 + optionalDependencies: + '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 + chokidar: 3.5.3 + dev: false /@babel/code-frame/7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} @@ -2844,7 +2874,7 @@ packages: resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 jsesc: 2.5.2 source-map: 0.5.7 @@ -2908,7 +2938,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.12.9 '@babel/helper-validator-option': 7.18.6 browserslist: 4.19.3 @@ -2921,7 +2951,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.16.12 '@babel/helper-validator-option': 7.18.6 browserslist: 4.19.3 @@ -2934,7 +2964,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.8 '@babel/helper-validator-option': 7.18.6 browserslist: 4.19.3 @@ -2947,64 +2977,25 @@ packages: peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.21.3 '@babel/helper-validator-option': 7.18.6 browserslist: 4.19.3 semver: 6.3.0 dev: true - /@babel/helper-compilation-targets/7.19.3_@babel+core@7.12.9: - resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.12.9 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 - semver: 6.3.0 - dev: true - - /@babel/helper-compilation-targets/7.19.3_@babel+core@7.16.12: - resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.16.12 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 - semver: 6.3.0 - dev: false - /@babel/helper-compilation-targets/7.19.3_@babel+core@7.17.8: resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.8 '@babel/helper-validator-option': 7.18.6 browserslist: 4.21.4 semver: 6.3.0 - /@babel/helper-compilation-targets/7.19.3_@babel+core@7.21.3: - resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.21.3 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 - semver: 6.3.0 - dev: true - /@babel/helper-compilation-targets/7.20.7_@babel+core@7.12.9: resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} @@ -3044,6 +3035,7 @@ packages: browserslist: 4.21.4 lru-cache: 5.1.1 semver: 6.3.0 + dev: true /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.3: resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} @@ -3067,7 +3059,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.19.1 @@ -3085,7 +3077,7 @@ packages: '@babel/core': 7.16.12 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.19.1 @@ -3103,7 +3095,7 @@ packages: '@babel/core': 7.17.8 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.19.1 @@ -3120,7 +3112,7 @@ packages: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.19.1 @@ -3190,7 +3182,7 @@ packages: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.19.1 @@ -3228,6 +3220,7 @@ packages: '@babel/core': 7.17.8 '@babel/helper-annotate-as-pure': 7.18.6 regexpu-core: 5.2.1 + dev: true /@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.21.3: resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} @@ -3320,6 +3313,7 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.3: resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} @@ -3383,7 +3377,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.3 - dev: true /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} @@ -3412,7 +3405,7 @@ packages: dependencies: '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.18.6 + '@babel/helper-simple-access': 7.20.2 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 @@ -3520,6 +3513,7 @@ packages: '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} @@ -3571,10 +3565,6 @@ packages: dependencies: '@babel/types': 7.21.3 - /@babel/helper-string-parser/7.18.10: - resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} - engines: {node: '>=6.9.0'} - /@babel/helper-string-parser/7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} @@ -3639,7 +3629,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/parser/7.19.3: resolution: {integrity: sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==} @@ -3695,16 +3685,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} @@ -3762,18 +3742,6 @@ packages: '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} engines: {node: '>=6.9.0'} @@ -3868,21 +3836,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-async-generator-functions/7.19.1_@babel+core@7.17.8: - resolution: {integrity: sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.8 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-proposal-async-generator-functions/7.19.1_@babel+core@7.21.3: resolution: {integrity: sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==} engines: {node: '>=6.9.0'} @@ -3917,7 +3870,7 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.12.9 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color dev: true @@ -3930,7 +3883,7 @@ packages: dependencies: '@babel/core': 7.16.12 '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.16.12 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color dev: false @@ -3955,7 +3908,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.21.3 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color dev: true @@ -3972,19 +3925,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} @@ -4053,20 +3993,6 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.8 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} engines: {node: '>=6.9.0'} @@ -4162,17 +4088,6 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - dev: false - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} @@ -4268,17 +4183,6 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.8 - dev: false - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} @@ -4343,17 +4247,6 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.8 - dev: false - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} @@ -4418,17 +4311,6 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.8 - dev: false - /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} engines: {node: '>=6.9.0'} @@ -4502,17 +4384,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.9 - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.8 - dev: false - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} @@ -4577,17 +4448,6 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.8 - dev: false - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} @@ -4628,9 +4488,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.12.9 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.12.9 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.12.9 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.12.9 @@ -4642,9 +4502,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.16.12 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.16.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.16.12 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.16.12 '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.16.12 @@ -4656,9 +4516,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.17.8 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.8 '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 @@ -4670,9 +4530,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 @@ -4691,20 +4551,6 @@ packages: '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.12.9 - /@babel/plugin-proposal-object-rest-spread/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - dev: false - /@babel/plugin-proposal-object-rest-spread/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} engines: {node: '>=6.9.0'} @@ -4782,17 +4628,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.9 - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.8 - dev: false - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} @@ -4894,6 +4729,7 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.8 + dev: true /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} @@ -4970,19 +4806,6 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} @@ -5055,21 +4878,6 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.8 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} engines: {node: '>=6.9.0'} @@ -5168,6 +4976,7 @@ packages: '@babel/core': 7.17.8 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} @@ -5203,6 +5012,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.3: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -5262,6 +5072,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.3: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} @@ -5299,6 +5110,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.3: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} @@ -5353,6 +5165,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} @@ -5414,6 +5227,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} @@ -5450,16 +5264,6 @@ packages: '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-syntax-import-assertions/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-syntax-import-assertions/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==} engines: {node: '>=6.9.0'} @@ -5519,6 +5323,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} @@ -5567,16 +5372,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.21.3: - resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.12.9: resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} @@ -5628,6 +5423,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.3: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} @@ -5694,6 +5490,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.3: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} @@ -5727,6 +5524,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} @@ -5760,6 +5558,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} @@ -5830,6 +5629,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.3: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} @@ -5867,6 +5667,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.3: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} @@ -5981,16 +5782,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} engines: {node: '>=6.9.0'} @@ -6020,7 +5811,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-remap-async-to-generator': 7.16.8 transitivePeerDependencies: @@ -6034,7 +5825,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.12 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-remap-async-to-generator': 7.16.8 transitivePeerDependencies: @@ -6062,7 +5853,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-remap-async-to-generator': 7.16.8 transitivePeerDependencies: @@ -6082,20 +5873,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.17.8 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} engines: {node: '>=6.9.0'} @@ -6167,16 +5944,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} @@ -6244,16 +6011,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-block-scoping/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-block-scoping/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==} engines: {node: '>=6.9.0'} @@ -6366,25 +6123,6 @@ packages: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.12.9 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - /@babel/plugin-transform-classes/7.19.0_@babel+core@7.17.8: - resolution: {integrity: sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 - '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 @@ -6393,7 +6131,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-classes/7.19.0_@babel+core@7.21.3: resolution: {integrity: sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==} @@ -6405,7 +6142,7 @@ packages: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-replace-supers': 7.19.1 @@ -6472,16 +6209,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} engines: {node: '>=6.9.0'} @@ -6549,16 +6276,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-destructuring/7.18.13_@babel+core@7.17.8: - resolution: {integrity: sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-destructuring/7.18.13_@babel+core@7.21.3: resolution: {integrity: sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==} engines: {node: '>=6.9.0'} @@ -6652,6 +6369,7 @@ packages: '@babel/core': 7.17.8 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} @@ -6712,16 +6430,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} @@ -6795,17 +6503,6 @@ packages: '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} @@ -6904,16 +6601,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.17.8: - resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.21.3: resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} engines: {node: '>=6.9.0'} @@ -6992,18 +6679,6 @@ packages: '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} @@ -7073,16 +6748,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} @@ -7150,16 +6815,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} @@ -7189,7 +6844,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: @@ -7203,7 +6858,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.12 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: @@ -7217,7 +6872,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: @@ -7231,26 +6886,12 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-transforms': 7.19.0 - '@babel/helper-plugin-utils': 7.19.0 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-amd/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color - dev: false + dev: true /@babel/plugin-transform-modules-amd/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==} @@ -7286,7 +6927,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-simple-access': 7.18.6 babel-plugin-dynamic-import-node: 2.3.3 @@ -7301,7 +6942,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.12 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-simple-access': 7.18.6 babel-plugin-dynamic-import-node: 2.3.3 @@ -7316,7 +6957,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-simple-access': 7.18.6 babel-plugin-dynamic-import-node: 2.3.3 @@ -7330,7 +6971,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-simple-access': 7.18.6 babel-plugin-dynamic-import-node: 2.3.3 @@ -7352,21 +6993,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-simple-access': 7.20.2 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==} engines: {node: '>=6.9.0'} @@ -7460,22 +7086,6 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs/7.19.0_@babel+core@7.17.8: - resolution: {integrity: sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-validator-identifier': 7.19.1 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-transform-modules-systemjs/7.19.0_@babel+core@7.21.3: resolution: {integrity: sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==} engines: {node: '>=6.9.0'} @@ -7555,19 +7165,6 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.19.0 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} @@ -7639,17 +7236,6 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.17.8: - resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.21.3: resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} engines: {node: '>=6.9.0'} @@ -7709,16 +7295,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} @@ -7804,19 +7380,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-replace-supers': 7.19.1 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} @@ -7905,6 +7468,7 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true /@babel/plugin-transform-parameters/7.18.8_@babel+core@7.21.3: resolution: {integrity: sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==} @@ -7973,16 +7537,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} @@ -8111,7 +7665,7 @@ packages: '@babel/helper-module-imports': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 '@babel/plugin-syntax-jsx': 7.16.0_@babel+core@7.16.12 - '@babel/types': 7.21.3 + '@babel/types': 7.16.0 dev: false /@babel/plugin-transform-react-jsx/7.17.3_@babel+core@7.17.8: @@ -8135,10 +7689,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3 '@babel/types': 7.21.3 dev: true @@ -8253,17 +7807,6 @@ packages: regenerator-transform: 0.14.5 dev: true - /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - regenerator-transform: 0.15.0 - dev: false - /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} engines: {node: '>=6.9.0'} @@ -8323,16 +7866,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} @@ -8366,9 +7899,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.12 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 - babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.16.12 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.16.12 babel-plugin-polyfill-corejs3: 0.4.0_@babel+core@7.16.12 babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.16.12 semver: 6.3.0 @@ -8383,9 +7916,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 - babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.21.3 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.3 babel-plugin-polyfill-corejs3: 0.4.0_@babel+core@7.21.3 babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.21.3 semver: 6.3.0 @@ -8483,16 +8016,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} @@ -8566,17 +8089,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - /@babel/plugin-transform-spread/7.19.0_@babel+core@7.17.8: - resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - dev: false - /@babel/plugin-transform-spread/7.19.0_@babel+core@7.21.3: resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} engines: {node: '>=6.9.0'} @@ -8645,16 +8157,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} @@ -8722,16 +8224,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} @@ -8790,16 +8282,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.17.8: - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} @@ -8924,16 +8406,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.17.8: - resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.3: resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} @@ -9007,17 +8479,6 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.17.8: - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} @@ -9451,92 +8912,6 @@ packages: - supports-color dev: true - /@babel/preset-env/7.19.3_@babel+core@7.17.8: - resolution: {integrity: sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-async-generator-functions': 7.19.1_@babel+core@7.17.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.8 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.8 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-import-assertions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.8 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.17.8 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-modules-amd': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-modules-systemjs': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.17.8 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.17.8 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.17.8 - '@babel/preset-modules': 0.1.5_@babel+core@7.17.8 - '@babel/types': 7.21.3 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.17.8 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.17.8 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.17.8 - core-js-compat: 3.25.5 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/preset-env/7.19.3_@babel+core@7.21.3: resolution: {integrity: sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w==} engines: {node: '>=6.9.0'} @@ -9681,6 +9056,7 @@ packages: '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.17.8 '@babel/types': 7.21.3 esutils: 2.0.3 + dev: true /@babel/preset-modules/0.1.5_@babel+core@7.21.3: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} @@ -9891,7 +9267,7 @@ packages: '@babel/code-frame': 7.18.6 '@babel/generator': 7.21.3 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.21.3 @@ -9936,7 +9312,7 @@ packages: resolution: {integrity: sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.18.10 + '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 @@ -13968,7 +13344,7 @@ packages: glob: 7.2.0 handlebars: 4.7.7 interpret: 2.2.0 - json5: 2.2.0 + json5: 2.2.3 lazy-universal-dotenv: 3.0.1 picomatch: 2.3.0 pkg-dir: 5.0.0 @@ -14038,7 +13414,7 @@ packages: glob: 7.2.0 handlebars: 4.7.7 interpret: 2.2.0 - json5: 2.2.0 + json5: 2.2.3 lazy-universal-dotenv: 3.0.1 picomatch: 2.3.0 pkg-dir: 5.0.0 @@ -15685,20 +15061,6 @@ packages: react-error-boundary: 3.1.4_react@17.0.2 dev: true - /@testing-library/react/12.1.4_6l5554ty5ajsajah6yazvrjhoe: - resolution: {integrity: sha512-jiPKOm7vyUw311Hn/HlNQ9P8/lHNtArAx0PisXyFixDDvfl8DbD6EUdbshK5eqauvBSvzZd19itqQ9j3nferJA==} - engines: {node: '>=12'} - peerDependencies: - react: '*' - react-dom: '*' - dependencies: - '@babel/runtime': 7.19.0 - '@testing-library/dom': 8.11.3 - '@types/react-dom': 17.0.17 - react: 17.0.2 - react-dom: 18.2.0_react@17.0.2 - dev: false - /@testing-library/react/12.1.4_sfoxds7t5ydpegc3knd667wn6m: resolution: {integrity: sha512-jiPKOm7vyUw311Hn/HlNQ9P8/lHNtArAx0PisXyFixDDvfl8DbD6EUdbshK5eqauvBSvzZd19itqQ9j3nferJA==} engines: {node: '>=12'} @@ -15711,7 +15073,6 @@ packages: '@types/react-dom': 17.0.17 react: 17.0.2 react-dom: 17.0.2_react@17.0.2 - dev: true /@testing-library/user-event/13.5.0_gzufz4q333be4gqfrvipwvqt6a: resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} @@ -16343,7 +15704,7 @@ packages: '@types/wordpress__components': 19.10.5_sfoxds7t5ydpegc3knd667wn6m '@types/wordpress__data': 6.0.2 '@types/wordpress__keycodes': 2.3.1 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 react-autosize-textarea: 7.1.0_sfoxds7t5ydpegc3knd667wn6m transitivePeerDependencies: - react @@ -16357,7 +15718,7 @@ packages: dependencies: '@types/react': 17.0.50 '@types/wordpress__components': 19.10.5_sfoxds7t5ydpegc3knd667wn6m - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 transitivePeerDependencies: - react - react-dom @@ -16369,7 +15730,7 @@ packages: '@types/tinycolor2': 1.4.3 '@types/wordpress__notices': 3.5.0 '@types/wordpress__rich-text': 3.4.6 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 downshift: 6.1.12_react@17.0.2 re-resizable: 6.9.5_prpqlkd37azqwypxturxi7uyci transitivePeerDependencies: @@ -16384,7 +15745,7 @@ packages: '@types/tinycolor2': 1.4.3 '@types/wordpress__notices': 3.5.0 '@types/wordpress__rich-text': 3.4.6 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 downshift: 6.1.12_react@17.0.2 re-resizable: 6.9.5_sfoxds7t5ydpegc3knd667wn6m transitivePeerDependencies: @@ -16447,7 +15808,7 @@ packages: dependencies: '@types/wordpress__block-editor': 7.0.0_sfoxds7t5ydpegc3knd667wn6m '@types/wordpress__core-data': 2.4.5 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 transitivePeerDependencies: - react - react-dom @@ -17226,8 +16587,8 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/dom-ready': 3.28.0 - '@wordpress/i18n': 4.28.0 + '@wordpress/dom-ready': 3.6.1 + '@wordpress/i18n': 4.6.1 dev: false /@wordpress/api-fetch/3.23.1_react-native@0.70.0: @@ -17255,8 +16616,8 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/url': 3.29.0 + '@wordpress/i18n': 4.6.1 + '@wordpress/url': 3.7.1 dev: true /@wordpress/api-fetch/6.25.0: @@ -17272,8 +16633,8 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/url': 3.29.0 + '@wordpress/i18n': 4.6.1 + '@wordpress/url': 3.7.1 dev: false /@wordpress/autop/3.19.0: @@ -17421,7 +16782,7 @@ packages: '@babel/runtime': 7.17.7 '@wordpress/babel-plugin-import-jsx-pragma': 3.1.0_@babel+core@7.16.12 '@wordpress/browserslist-config': 4.1.3 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 '@wordpress/warning': 2.2.2 browserslist: 4.19.3 core-js: 3.21.1 @@ -17441,8 +16802,8 @@ packages: '@babel/runtime': 7.19.0 '@wordpress/babel-plugin-import-jsx-pragma': 3.1.2_@babel+core@7.21.3 '@wordpress/browserslist-config': 4.1.3 - '@wordpress/element': 4.20.0 - '@wordpress/warning': 2.28.0 + '@wordpress/element': 4.4.1 + '@wordpress/warning': 2.6.1 browserslist: 4.20.2 core-js: 3.21.1 transitivePeerDependencies: @@ -18034,20 +17395,20 @@ packages: '@emotion/styled': 11.8.1_c2qm47vaialpqni522adyu6za4 '@emotion/utils': 1.0.0 '@use-gesture/react': 10.2.10_react@17.0.2 - '@wordpress/a11y': 3.28.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/date': 4.28.0 - '@wordpress/deprecated': 3.28.0 - '@wordpress/dom': 3.28.0 - '@wordpress/element': 4.20.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 + '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.4.1 - '@wordpress/hooks': 3.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/hooks': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 '@wordpress/is-shallow-equal': 4.4.1 - '@wordpress/keycodes': 3.28.0 + '@wordpress/keycodes': 3.6.1 '@wordpress/primitives': 3.4.1 - '@wordpress/rich-text': 5.17.0_react@17.0.2 + '@wordpress/rich-text': 5.4.2_react@17.0.2 '@wordpress/warning': 2.6.1 classnames: 2.3.1 colord: 2.9.2 @@ -18088,21 +17449,21 @@ packages: '@emotion/styled': 11.8.1_6t3indjc5ssefvr44gr3wo2uqu '@emotion/utils': 1.0.0 '@use-gesture/react': 10.2.10_react@17.0.2 - '@wordpress/a11y': 3.28.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/date': 4.28.0 - '@wordpress/deprecated': 3.28.0 - '@wordpress/dom': 3.28.0 - '@wordpress/element': 4.20.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 + '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.28.0 - '@wordpress/hooks': 3.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/hooks': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 '@wordpress/is-shallow-equal': 4.28.0 - '@wordpress/keycodes': 3.28.0 - '@wordpress/primitives': 3.26.0 - '@wordpress/rich-text': 5.17.0_react@17.0.2 - '@wordpress/warning': 2.28.0 + '@wordpress/keycodes': 3.6.1 + '@wordpress/primitives': 3.4.1 + '@wordpress/rich-text': 5.4.2_react@17.0.2 + '@wordpress/warning': 2.6.1 classnames: 2.3.1 colord: 2.9.2 dom-scroll-into-view: 1.2.1 @@ -18142,21 +17503,21 @@ packages: '@emotion/styled': 11.8.1_c2qm47vaialpqni522adyu6za4 '@emotion/utils': 1.0.0 '@use-gesture/react': 10.2.10_react@17.0.2 - '@wordpress/a11y': 3.28.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/date': 4.28.0 - '@wordpress/deprecated': 3.28.0 - '@wordpress/dom': 3.28.0 - '@wordpress/element': 4.20.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 + '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.28.0 - '@wordpress/hooks': 3.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/hooks': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 '@wordpress/is-shallow-equal': 4.28.0 - '@wordpress/keycodes': 3.28.0 - '@wordpress/primitives': 3.26.0 - '@wordpress/rich-text': 5.17.0_react@17.0.2 - '@wordpress/warning': 2.28.0 + '@wordpress/keycodes': 3.6.1 + '@wordpress/primitives': 3.4.1 + '@wordpress/rich-text': 5.4.2_react@17.0.2 + '@wordpress/warning': 2.6.1 classnames: 2.3.1 colord: 2.9.2 dom-scroll-into-view: 1.2.1 @@ -18196,21 +17557,21 @@ packages: '@emotion/styled': 11.8.1_c2qm47vaialpqni522adyu6za4 '@emotion/utils': 1.0.0 '@use-gesture/react': 10.2.10_react@17.0.2 - '@wordpress/a11y': 3.28.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/date': 4.28.0 - '@wordpress/deprecated': 3.28.0 - '@wordpress/dom': 3.28.0 - '@wordpress/element': 4.20.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 + '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.28.0 - '@wordpress/hooks': 3.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/hooks': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 '@wordpress/is-shallow-equal': 4.28.0 - '@wordpress/keycodes': 3.28.0 - '@wordpress/primitives': 3.26.0 - '@wordpress/rich-text': 5.17.0_react@17.0.2 - '@wordpress/warning': 2.28.0 + '@wordpress/keycodes': 3.6.1 + '@wordpress/primitives': 3.4.1 + '@wordpress/rich-text': 5.4.2_react@17.0.2 + '@wordpress/warning': 2.6.1 classnames: 2.3.1 colord: 2.9.2 dom-scroll-into-view: 1.2.1 @@ -18250,21 +17611,21 @@ packages: '@emotion/styled': 11.8.1_hhesyqfwklnojgamcachhyxace '@emotion/utils': 1.0.0 '@use-gesture/react': 10.2.10_react@17.0.2 - '@wordpress/a11y': 3.28.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/date': 4.28.0 - '@wordpress/deprecated': 3.28.0 - '@wordpress/dom': 3.28.0 - '@wordpress/element': 4.20.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 + '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.28.0 - '@wordpress/hooks': 3.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/hooks': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 '@wordpress/is-shallow-equal': 4.28.0 - '@wordpress/keycodes': 3.28.0 - '@wordpress/primitives': 3.26.0 - '@wordpress/rich-text': 5.17.0_react@17.0.2 - '@wordpress/warning': 2.28.0 + '@wordpress/keycodes': 3.6.1 + '@wordpress/primitives': 3.4.1 + '@wordpress/rich-text': 5.4.2_react@17.0.2 + '@wordpress/warning': 2.6.1 classnames: 2.3.1 colord: 2.9.2 dom-scroll-into-view: 1.2.1 @@ -18568,11 +17929,11 @@ packages: '@babel/runtime': 7.19.0 '@types/lodash': 4.14.184 '@types/mousetrap': 1.6.9 - '@wordpress/deprecated': 3.28.0 - '@wordpress/dom': 3.28.0 - '@wordpress/element': 4.20.0 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 + '@wordpress/element': 4.4.1 '@wordpress/is-shallow-equal': 4.28.0 - '@wordpress/keycodes': 3.28.0 + '@wordpress/keycodes': 3.6.1 '@wordpress/priority-queue': 2.28.0 clipboard: 2.0.10 lodash: 4.17.21 @@ -18580,7 +17941,6 @@ packages: react: 17.0.2 react-resize-aware: 3.1.1_react@17.0.2 use-memo-one: 1.1.2_react@17.0.2 - dev: false /@wordpress/compose/6.5.0_react@17.0.2: resolution: {integrity: sha512-gtZwEeFFHGltsr0vqwyrxPbAcA6lVfE36s59mZBh9KHeC/s590q2FPQz+9jSE5Y+uQmnXZCtahCrjvnpnaBIUg==} @@ -18609,15 +17969,15 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/api-fetch': 6.25.0 + '@wordpress/api-fetch': 6.3.1 '@wordpress/blocks': 11.18.0_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/deprecated': 3.28.0 - '@wordpress/element': 4.20.0 - '@wordpress/html-entities': 3.28.0 - '@wordpress/i18n': 4.28.0 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/deprecated': 3.6.1 + '@wordpress/element': 4.4.1 + '@wordpress/html-entities': 3.6.1 + '@wordpress/i18n': 4.6.1 '@wordpress/is-shallow-equal': 4.28.0 - '@wordpress/url': 3.29.0 + '@wordpress/url': 3.7.1 equivalent-key-map: 0.2.2 lodash: 4.17.21 memize: 1.1.0 @@ -18694,9 +18054,9 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/api-fetch': 6.25.0 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/deprecated': 3.28.0 + '@wordpress/api-fetch': 6.3.1 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/deprecated': 3.6.1 react: 17.0.2 dev: false @@ -18751,9 +18111,9 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/deprecated': 3.28.0 - '@wordpress/element': 4.20.0 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/deprecated': 3.6.1 + '@wordpress/element': 4.4.1 '@wordpress/is-shallow-equal': 4.28.0 '@wordpress/priority-queue': 2.28.0 '@wordpress/redux-routine': 4.28.0_redux@4.2.0 @@ -18866,8 +18226,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/hooks': 3.28.0 - dev: false + '@wordpress/hooks': 3.6.1 /@wordpress/dom-ready/3.28.0: resolution: {integrity: sha512-PFFAnuPUouV0uSDZN6G/B8yksybtxzS/6H53OZJEA3h3EsNCicKRMGSowkumvLwXA23HV0K2Kht6JuS+bDECzA==} @@ -18901,7 +18260,6 @@ packages: dependencies: '@babel/runtime': 7.19.0 lodash: 4.17.21 - dev: false /@wordpress/e2e-test-utils/3.0.0_ddjhsfu4aotkh3cuzmpsln6ywq: resolution: {integrity: sha512-XMdR8DeKyDQRF5jKeUlOzP4pTRtoJuOLsNZRLUFUvnrs9y/7/hH17VmPbWp3TJGvV/eGKzO4+D+wJTsP9nJmIw==} @@ -18948,9 +18306,9 @@ packages: puppeteer-core: '>=11' dependencies: '@babel/runtime': 7.19.0 - '@wordpress/api-fetch': 6.25.0 - '@wordpress/keycodes': 3.28.0 - '@wordpress/url': 3.29.0 + '@wordpress/api-fetch': 6.3.1 + '@wordpress/keycodes': 3.6.1 + '@wordpress/url': 3.7.1 form-data: 4.0.0 jest: 27.5.1 lodash: 4.17.21 @@ -18968,30 +18326,30 @@ packages: react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/a11y': 3.28.0 - '@wordpress/api-fetch': 6.25.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/api-fetch': 6.3.1 '@wordpress/block-editor': 8.6.0_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/blocks': 11.18.0_react@17.0.2 - '@wordpress/components': 19.12.0_eqi5qhcxfphl6j3pngzexvnehi - '@wordpress/compose': 5.17.0_react@17.0.2 + '@wordpress/components': 19.8.5_eqi5qhcxfphl6j3pngzexvnehi + '@wordpress/compose': 5.4.1_react@17.0.2 '@wordpress/core-data': 4.4.5_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/date': 4.28.0 - '@wordpress/deprecated': 3.28.0 - '@wordpress/element': 4.20.0 - '@wordpress/hooks': 3.28.0 - '@wordpress/html-entities': 3.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 - '@wordpress/keyboard-shortcuts': 3.17.0_react@17.0.2 - '@wordpress/keycodes': 3.28.0 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/element': 4.4.1 + '@wordpress/hooks': 3.6.1 + '@wordpress/html-entities': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 + '@wordpress/keyboard-shortcuts': 3.4.1_react@17.0.2 + '@wordpress/keycodes': 3.6.1 '@wordpress/media-utils': 3.4.1 - '@wordpress/notices': 3.28.0_react@17.0.2 + '@wordpress/notices': 3.6.1_react@17.0.2 '@wordpress/preferences': 1.3.0_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/reusable-blocks': 3.17.0_mtk4wljkd5jimhszw4p7nnxuzm - '@wordpress/rich-text': 5.17.0_react@17.0.2 + '@wordpress/rich-text': 5.4.2_react@17.0.2 '@wordpress/server-side-render': 3.17.0_mtk4wljkd5jimhszw4p7nnxuzm - '@wordpress/url': 3.29.0 + '@wordpress/url': 3.7.1 '@wordpress/wordcount': 3.28.0 classnames: 2.3.1 lodash: 4.17.21 @@ -19059,7 +18417,6 @@ packages: lodash: 4.17.21 react: 17.0.2 react-dom: 17.0.2_react@17.0.2 - dev: false /@wordpress/element/4.8.0: resolution: {integrity: sha512-f2Mb70xvGxZWNWh5pFhOoRgrd+tKs9Xk9hpDgRB7iPel/zbAIxNebr0Jqm5Nt+MDiDl/dogTPc9GyrkYCm9u0g==} @@ -19291,7 +18648,6 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - dev: false /@wordpress/html-entities/3.28.0: resolution: {integrity: sha512-UAaU6au8UTrSkowkV33pE/EvdPov2mA9W51vh6t88KsJPzt4171EzIchGnQuzt04HuZLdLyWy2A+7JCOSbfhBA==} @@ -19336,7 +18692,7 @@ packages: hasBin: true dependencies: '@babel/runtime': 7.17.7 - '@wordpress/hooks': 3.28.0 + '@wordpress/hooks': 3.6.1 gettext-parser: 1.4.0 lodash: 4.17.21 memize: 1.1.0 @@ -19350,20 +18706,19 @@ packages: hasBin: true dependencies: '@babel/runtime': 7.19.0 - '@wordpress/hooks': 3.28.0 + '@wordpress/hooks': 3.6.1 gettext-parser: 1.4.0 lodash: 4.17.21 memize: 1.1.0 sprintf-js: 1.1.2 tannin: 1.2.0 - dev: false /@wordpress/icons/8.1.0: resolution: {integrity: sha512-fNq0Mnzzf03uxIwKqQeU/G48wElyypwkhcBZWYQRpmwLZrOR231dxUeK9mzPOSGlYbgM+YKK+k3lzysGmrJU0A==} engines: {node: '>=12'} dependencies: '@babel/runtime': 7.17.7 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 '@wordpress/primitives': 3.4.1 dev: false @@ -19372,8 +18727,8 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/element': 4.20.0 - '@wordpress/primitives': 3.26.0 + '@wordpress/element': 4.4.1 + '@wordpress/primitives': 3.4.1 dev: false /@wordpress/icons/8.4.0: @@ -19401,17 +18756,17 @@ packages: react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/a11y': 3.28.0 - '@wordpress/components': 19.12.0_eqi5qhcxfphl6j3pngzexvnehi - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/deprecated': 3.28.0 - '@wordpress/element': 4.20.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/components': 19.8.5_eqi5qhcxfphl6j3pngzexvnehi + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/deprecated': 3.6.1 + '@wordpress/element': 4.4.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 '@wordpress/plugins': 4.4.3_react@17.0.2 '@wordpress/preferences': 1.3.0_eqi5qhcxfphl6j3pngzexvnehi - '@wordpress/viewport': 4.17.0_react@17.0.2 + '@wordpress/viewport': 4.4.1_react@17.0.2 classnames: 2.3.1 lodash: 4.17.21 react: 17.0.2 @@ -19593,9 +18948,9 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/element': 4.20.0 - '@wordpress/keycodes': 3.28.0 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/element': 4.4.1 + '@wordpress/keycodes': 3.6.1 lodash: 4.17.21 react: 17.0.2 rememo: 3.0.0 @@ -19621,7 +18976,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.17.7 - '@wordpress/i18n': 4.28.0 + '@wordpress/i18n': 4.6.1 lodash: 4.17.21 dev: false @@ -19630,19 +18985,18 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/i18n': 4.28.0 + '@wordpress/i18n': 4.6.1 lodash: 4.17.21 - dev: false /@wordpress/media-utils/3.4.1: resolution: {integrity: sha512-WNAaMqqw6Eqy61KTWBy1NlgXSZH82Cm2SPVbz0v6yhJ4ktJmSRFm7Fd4mTMFS/L7NKTxwo+DFqEHlTGKj3lyzQ==} engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/api-fetch': 6.25.0 + '@wordpress/api-fetch': 6.3.1 '@wordpress/blob': 3.28.0 - '@wordpress/element': 4.20.0 - '@wordpress/i18n': 4.28.0 + '@wordpress/element': 4.4.1 + '@wordpress/i18n': 4.6.1 lodash: 4.17.21 dev: false @@ -19663,8 +19017,8 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/a11y': 3.28.0 - '@wordpress/data': 6.15.0_react@17.0.2 + '@wordpress/a11y': 3.6.1 + '@wordpress/data': 6.6.1_react@17.0.2 lodash: 4.17.21 react: 17.0.2 dev: false @@ -19694,10 +19048,10 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/element': 4.20.0 - '@wordpress/hooks': 3.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/element': 4.4.1 + '@wordpress/hooks': 3.6.1 + '@wordpress/icons': 8.2.3 lodash: 4.17.21 memize: 1.1.0 react: 17.0.2 @@ -19730,7 +19084,7 @@ packages: peerDependencies: postcss: ^8.0.0 dependencies: - '@wordpress/base-styles': 4.8.0 + '@wordpress/base-styles': 4.3.1 autoprefixer: 10.4.4_postcss@8.4.12 postcss: 8.4.12 dev: false @@ -19830,7 +19184,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 classnames: 2.3.1 dev: false @@ -19976,13 +19330,13 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/a11y': 3.28.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/element': 4.20.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/keycodes': 3.28.0 + '@wordpress/i18n': 4.6.1 + '@wordpress/keycodes': 3.6.1 lodash: 4.17.21 memize: 1.1.0 react: 17.0.2 @@ -20308,7 +19662,6 @@ packages: dependencies: '@babel/runtime': 7.19.0 lodash: 4.17.21 - dev: false /@wordpress/viewport/4.17.0_react@17.0.2: resolution: {integrity: sha512-5FZCqXjsZjONoyCfjalRgdme//j4XJYHRXYh7ynoJW/qULq3YqZhyLtjFsEM4V+uuuURFSYnGnOD7V+K9wooPA==} @@ -20330,8 +19683,8 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.17.7 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/data': 6.6.1_react@17.0.2 lodash: 4.17.21 react: 17.0.2 dev: false @@ -20343,8 +19696,8 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/data': 6.6.1_react@17.0.2 lodash: 4.17.21 react: 17.0.2 dev: false @@ -20369,7 +19722,6 @@ packages: /@wordpress/warning/2.6.1: resolution: {integrity: sha512-Xs37x0IkvNewPNKs1A8cnw5xLb+AqwUqqCsH4+5Sjat5GDqP86mHgLfRIlE4d6fBYg+q6tO7DVPG49TT3/wzgA==} engines: {node: '>=12'} - dev: false /@wordpress/wordcount/3.19.0: resolution: {integrity: sha512-x5M997RMrglq/XiGi55sO4fIPrGu20bob6h5goc9NKbbq68NTTDPrznfRbhQ+gTLLEV79AtUO/RPK3y9V9Pvkw==} @@ -21182,7 +20534,7 @@ packages: /axios/0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: - follow-redirects: 1.14.7_debug@4.3.3 + follow-redirects: 1.14.7 transitivePeerDependencies: - debug @@ -21673,7 +21025,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.21.3 '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 semver: 6.3.0 @@ -21693,14 +21045,14 @@ packages: transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.17.8: + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.16.12: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.21.0 - '@babel/core': 7.17.8 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.17.8 + '@babel/core': 7.16.12 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.16.12 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -21837,18 +21189,6 @@ packages: transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.17.8: - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.17.8 - core-js-compat: 3.25.5 - transitivePeerDependencies: - - supports-color - dev: false - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.3: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: @@ -21914,17 +21254,6 @@ packages: transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.17.8: - resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.17.8 - transitivePeerDependencies: - - supports-color - dev: false - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.3: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: @@ -22629,7 +21958,7 @@ packages: resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==} hasBin: true dependencies: - caniuse-lite: 1.0.30001418 + caniuse-lite: 1.0.30001146 electron-to-chromium: 1.4.276 dev: true @@ -22969,14 +22298,13 @@ packages: /caniuse-api/3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.21.4 - caniuse-lite: 1.0.30001418 + browserslist: 4.19.3 + caniuse-lite: 1.0.30001146 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 /caniuse-lite/1.0.30001146: resolution: {integrity: sha512-VAy5RHDfTJhpxnDdp2n40GPPLp3KqNrXz1QqFv4J64HvArKs8nuNMOWkB3ICOaBTU/Aj4rYAo/ytdQDDFF/Pug==} - dev: true /caniuse-lite/1.0.30001352: resolution: {integrity: sha512-GUgH8w6YergqPQDGWhJGt8GDRnY0L/iJVQcU3eJ46GYf52R8tk0Wxp0PymuFVZboJYXGiCqwozAYZNRjVj6IcA==} @@ -24293,7 +23621,7 @@ packages: postcss-value-parser: 4.2.0 schema-utils: 2.7.1 semver: 6.3.0 - webpack: 5.70.0 + webpack: 5.70.0_webpack-cli@3.3.12 /css-loader/5.2.7_webpack@5.70.0: resolution: {integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==} @@ -25977,11 +25305,11 @@ packages: eslint-import-resolver-node: 0.3.6 eslint-module-utils: 2.7.3_lkzaig2qiyp6elizstfbgvzhie has: 1.0.3 - is-core-module: 2.8.0 + is-core-module: 2.10.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.5 - resolve: 1.20.0 + resolve: 1.22.1 tsconfig-paths: 3.14.0 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -26008,11 +25336,11 @@ packages: eslint-import-resolver-node: 0.3.6 eslint-module-utils: 2.7.3_e3tsxhaih3omednm7ewu7jlg54 has: 1.0.3 - is-core-module: 2.8.0 + is-core-module: 2.10.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.5 - resolve: 1.20.0 + resolve: 1.22.1 tsconfig-paths: 3.14.0 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -27627,6 +26955,15 @@ packages: debug: optional: true + /follow-redirects/1.14.7: + resolution: {integrity: sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + /follow-redirects/1.14.7_debug@4.3.3: resolution: {integrity: sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==} engines: {node: '>=4.0'} @@ -27637,6 +26974,7 @@ packages: optional: true dependencies: debug: 4.3.3 + dev: true /follow-redirects/1.5.10: resolution: {integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==} @@ -27753,7 +27091,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.16.7 + '@babel/code-frame': 7.18.6 '@types/json-schema': 7.0.9 chalk: 4.1.2 chokidar: 3.5.3 @@ -27764,7 +27102,7 @@ packages: memfs: 3.3.0 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.3.5 + semver: 7.3.8 tapable: 1.1.3 typescript: 4.8.4 webpack: 5.70.0 @@ -27816,7 +27154,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.16.7 + '@babel/code-frame': 7.18.6 '@types/json-schema': 7.0.9 chalk: 4.1.2 chokidar: 3.5.3 @@ -27828,7 +27166,7 @@ packages: memfs: 3.3.0 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.3.5 + semver: 7.3.8 tapable: 1.1.3 typescript: 4.8.4 webpack: 4.46.0_webpack-cli@3.3.12 @@ -27848,7 +27186,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.16.7 + '@babel/code-frame': 7.18.6 '@types/json-schema': 7.0.9 chalk: 4.1.2 chokidar: 3.5.3 @@ -27859,7 +27197,7 @@ packages: memfs: 3.3.0 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.3.5 + semver: 7.3.8 tapable: 1.1.3 typescript: 4.8.4 webpack: 4.46.0 @@ -29558,7 +28896,7 @@ packages: '@automattic/interpolate-components': 1.2.1_pxzommwrsowkd4kgag6q3sluym '@babel/runtime': 7.19.0 '@tannin/sprintf': 1.2.0 - '@wordpress/compose': 5.17.0_react@17.0.2 + '@wordpress/compose': 5.4.1_react@17.0.2 debug: 4.3.4 events: 3.3.0 hash.js: 1.1.7 @@ -29791,7 +29129,7 @@ packages: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.5.5 + rxjs: 7.8.0 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 @@ -33246,7 +32584,7 @@ packages: dependencies: big.js: 5.2.2 emojis-list: 3.0.0 - json5: 2.2.0 + json5: 2.2.3 /loader-utils/2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} @@ -36368,7 +35706,7 @@ packages: resolution: {integrity: sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 color: 3.2.1 has: 1.0.3 postcss: 7.0.39 @@ -36380,7 +35718,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 caniuse-api: 3.0.0 colord: 2.9.2 postcss: 8.4.12 @@ -36588,7 +35926,7 @@ packages: resolution: {integrity: sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 caniuse-api: 3.0.0 cssnano-util-same-parent: 4.0.1 postcss: 7.0.39 @@ -36601,7 +35939,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 caniuse-api: 3.0.0 cssnano-utils: 3.1.0_postcss@8.4.12 postcss: 8.4.12 @@ -36655,7 +35993,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: alphanum-sort: 1.0.2 - browserslist: 4.21.4 + browserslist: 4.19.3 cssnano-util-get-arguments: 4.0.0 postcss: 7.0.39 postcss-value-parser: 3.3.1 @@ -36667,7 +36005,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 cssnano-utils: 3.1.0_postcss@8.4.12 postcss: 8.4.12 postcss-value-parser: 4.2.0 @@ -36872,7 +36210,7 @@ packages: resolution: {integrity: sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 postcss: 7.0.39 postcss-value-parser: 3.3.1 @@ -36882,7 +36220,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 postcss: 8.4.12 postcss-value-parser: 4.2.0 dev: true @@ -36947,7 +36285,7 @@ packages: resolution: {integrity: sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 caniuse-api: 3.0.0 has: 1.0.3 postcss: 7.0.39 @@ -36958,7 +36296,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 caniuse-api: 3.0.0 postcss: 8.4.12 dev: true @@ -39521,12 +38859,6 @@ packages: dependencies: tslib: 1.14.1 - /rxjs/7.5.5: - resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} - dependencies: - tslib: 2.5.0 - dev: true - /rxjs/7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: @@ -39619,7 +38951,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 semver: 7.3.5 - webpack: 5.70.0 + webpack: 5.70.0_webpack-cli@3.3.12 /sass-loader/12.6.0_sass@1.49.9+webpack@5.70.0: resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} @@ -40820,7 +40152,7 @@ packages: resolution: {integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 postcss: 7.0.39 postcss-selector-parser: 3.1.2 @@ -40830,7 +40162,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 postcss: 8.4.12 postcss-selector-parser: 6.0.9 dev: true @@ -41581,7 +40913,7 @@ packages: serialize-javascript: 6.0.0 source-map: 0.6.1 terser: 5.10.0_acorn@8.8.1 - webpack: 5.70.0 + webpack: 5.70.0_webpack-cli@3.3.12 transitivePeerDependencies: - acorn @@ -44635,9 +43967,9 @@ packages: version: 0.0.1 requiresBuild: true dependencies: - '@babel/cli': 7.17.6_@babel+core@7.17.8 - '@babel/core': 7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 + '@babel/cli': 7.17.6_@babel+core@7.21.3 + '@babel/core': 7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 '@slack/web-api': 5.15.0 '@wordpress/e2e-test-utils': 3.0.0_ddjhsfu4aotkh3cuzmpsln6ywq config: 3.3.7