From 179886111dfed66a07b0955ae85529653f351b0e Mon Sep 17 00:00:00 2001 From: Sherry Date: Thu, 4 Jul 2024 11:53:20 +0800 Subject: [PATCH] CI: run e2e flaky tests in a separate job (#6365) --- .github/workflows/call-e2e-all-tests.yml | 17 + .github/workflows/call-e2e-test.yml | 3 +- package-lock.json | 700 ++++------------ package.json | 12 +- .../__tests__/e2e/CharacterLimit.spec.mjs | 62 +- .../__tests__/e2e/ClearFormatting.spec.mjs | 150 ++-- .../__tests__/e2e/History.spec.mjs | 784 +++++++++--------- .../__tests__/e2e/Links.spec.mjs | 62 +- .../__tests__/e2e/List.spec.mjs | 112 +-- .../__tests__/e2e/Navigation.spec.mjs | 58 +- .../__tests__/e2e/Toolbar.spec.mjs | 422 +++++----- 11 files changed, 1007 insertions(+), 1375 deletions(-) diff --git a/.github/workflows/call-e2e-all-tests.yml b/.github/workflows/call-e2e-all-tests.yml index 8c91b5e52308..2474748b55f4 100644 --- a/.github/workflows/call-e2e-all-tests.yml +++ b/.github/workflows/call-e2e-all-tests.yml @@ -141,3 +141,20 @@ jobs: editor-mode: ${{ matrix.editor-mode }} prod: ${{ matrix.prod }} override-react-version: beta + + flaky: + strategy: + matrix: + node-version: [18.18.0] + # Currently using single browser & os combination for flaky tests to reduce cost impact + browser: ['chromium'] + editor-mode: ['rich-text', 'plain-text', 'rich-text-with-collab'] + events-mode: ['modern-events'] + uses: ./.github/workflows/call-e2e-test.yml + with: + os: 'macos-latest' + flaky: true + node-version: ${{ matrix.node-version }} + browser: ${{ matrix.browser }} + editor-mode: ${{ matrix.editor-mode }} + events-mode: ${{ matrix.events-mode }} diff --git a/.github/workflows/call-e2e-test.yml b/.github/workflows/call-e2e-test.yml index a7ab4e4d4c7a..cc2c89aeedb1 100644 --- a/.github/workflows/call-e2e-test.yml +++ b/.github/workflows/call-e2e-test.yml @@ -9,6 +9,7 @@ on: editor-mode: {required: true, type: string} events-mode: {required: true, type: string} prod: {required: false, type: boolean} + flaky: {required: false, type: boolean} # Defaults to false: dont run flaky override-react-version: {required: false, type: string} jobs: @@ -22,7 +23,7 @@ jobs: OVERRIDE_REACT_VERSION: ${{ inputs.override-react-version }} cache_playwright_path: ${{ inputs.os == 'macos-latest' && '~/Library/Caches/ms-playwright' || inputs.os == 'windows-latest' && 'C:\Users\runneradmin\AppData\Local\ms-playwright' || '~/.cache/ms-playwright' }} test_results_path: ${{ inputs.os == 'windows-latest' && '~/.npm/_logs/' || 'test-results/' }} - test_script: test-e2e-${{ inputs.editor-mode == 'rich-text-with-collab' && 'collab-' || '' }}${{ inputs.prod && 'prod-' || '' }}ci-${{ inputs.browser }} + test_script: test-e2e-${{ inputs.editor-mode == 'rich-text-with-collab' && 'collab-' || '' }}${{ inputs.prod && 'prod-' || '' }}ci-${{ inputs.browser }} ${{ inputs.flaky && '-- -- --grep "@flaky"' || '-- -- --grep-invert "@flaky"' }} steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ inputs.node-version }} diff --git a/package-lock.json b/package-lock.json index 5bb07b462e72..03a6d93a2cea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "@babel/preset-react": "^7.24.1", "@babel/preset-typescript": "^7.24.1", "@lexical/eslint-plugin": "file:./packages/lexical-eslint-plugin", - "@playwright/test": "^1.41.2", + "@playwright/test": "^1.45.0", "@rollup/plugin-alias": "^5.1.0", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^25.0.7", @@ -45,7 +45,7 @@ "@typescript-eslint/parser": "^7.8.0", "child-process-promise": "^2.2.1", "chokidar": "^3.5.2", - "concurrently": "^6.2.0", + "concurrently": "^8.2.2", "confusing-browser-globals": "^1.0.10", "cross-env": "^7.0.3", "eslint": "^8.57.0", @@ -3922,11 +3922,6 @@ "node": ">=8" } }, - "node_modules/@docusaurus/core/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/cssnano-preset": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.3.2.tgz", @@ -3941,11 +3936,6 @@ "node": ">=18.0" } }, - "node_modules/@docusaurus/cssnano-preset/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/logger": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.3.2.tgz", @@ -4022,11 +4012,6 @@ "node": ">=8" } }, - "node_modules/@docusaurus/logger/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/mdx-loader": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.3.2.tgz", @@ -4078,11 +4063,6 @@ "node": ">=14.14" } }, - "node_modules/@docusaurus/mdx-loader/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/module-type-aliases": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.3.2.tgz", @@ -4145,11 +4125,6 @@ "node": ">=14.14" } }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/plugin-content-docs": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.3.2.tgz", @@ -4209,11 +4184,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/plugin-content-pages": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.3.2.tgz", @@ -4249,11 +4219,6 @@ "node": ">=14.14" } }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/plugin-debug": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.3.2.tgz", @@ -4287,11 +4252,6 @@ "node": ">=14.14" } }, - "node_modules/@docusaurus/plugin-debug/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/plugin-google-analytics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.3.2.tgz", @@ -4310,11 +4270,6 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-google-analytics/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/plugin-google-gtag": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.3.2.tgz", @@ -4334,11 +4289,6 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-google-gtag/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/plugin-google-tag-manager": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.3.2.tgz", @@ -4357,11 +4307,6 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-google-tag-manager/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/plugin-sitemap": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.3.2.tgz", @@ -4398,11 +4343,6 @@ "node": ">=14.14" } }, - "node_modules/@docusaurus/plugin-sitemap/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/preset-classic": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.3.2.tgz", @@ -4469,11 +4409,6 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/theme-classic/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/theme-common": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.3.2.tgz", @@ -4503,11 +4438,6 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/theme-common/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/theme-search-algolia": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.3.2.tgz", @@ -4551,11 +4481,6 @@ "node": ">=14.14" } }, - "node_modules/@docusaurus/theme-search-algolia/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/theme-translations": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.3.2.tgz", @@ -4581,11 +4506,6 @@ "node": ">=14.14" } }, - "node_modules/@docusaurus/theme-translations/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/types": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", @@ -4670,11 +4590,6 @@ } } }, - "node_modules/@docusaurus/utils-common/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/utils-validation": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.3.2.tgz", @@ -4707,11 +4622,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@docusaurus/utils-validation/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@docusaurus/utils/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -4752,11 +4662,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@docusaurus/utils/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@emotion/babel-plugin": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", @@ -6492,18 +6397,19 @@ } }, "node_modules/@playwright/test": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", - "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.0.tgz", + "integrity": "sha512-TVYsfMlGAaxeUllNkywbwek67Ncf8FRGn8ZlRdO291OL3NjG9oMbfVhyP82HQF0CZLMrYsvesqoUekxdWuF9Qw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright": "1.41.2" + "playwright": "1.45.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@pnpm/config.env-replace": { @@ -9350,11 +9256,6 @@ "node": ">=10" } }, - "node_modules/aria-hidden/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", @@ -9578,12 +9479,6 @@ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, - "node_modules/ast-types/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -9622,12 +9517,6 @@ "tslib": "^2.4.0" } }, - "node_modules/async-mutex/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -10704,11 +10593,6 @@ "tslib": "^2.0.3" } }, - "node_modules/camel-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -11432,25 +11316,31 @@ } }, "node_modules/concurrently": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", - "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", + "chalk": "^4.1.2", + "date-fns": "^2.30.0", "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", "tree-kill": "^1.2.2", - "yargs": "^16.2.0" + "yargs": "^17.7.2" }, "bin": { - "concurrently": "bin/concurrently.js" + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" }, "engines": { - "node": ">=10.0.0" + "node": "^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, "node_modules/concurrently/node_modules/ansi-styles": { @@ -11496,6 +11386,21 @@ "node": ">=8" } }, + "node_modules/concurrently/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/concurrently/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -11523,6 +11428,16 @@ "node": ">=8" } }, + "node_modules/concurrently/node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/concurrently/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -11538,6 +11453,25 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/concurrently/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/confbox": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.3.tgz", @@ -12790,10 +12724,14 @@ } }, "node_modules/date-fns": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", - "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, "engines": { "node": ">=0.11" }, @@ -15208,11 +15146,6 @@ "tslib": "^2.0.3" } }, - "node_modules/dot-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/dot-prop": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", @@ -17352,11 +17285,6 @@ "node": ">=10" } }, - "node_modules/focus-lock/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -17700,11 +17628,6 @@ } } }, - "node_modules/framer-motion/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/framesync": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", @@ -22932,21 +22855,6 @@ "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, - "node_modules/listr2/node_modules/rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/listr2/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -23230,11 +23138,6 @@ "tslib": "^2.0.3" } }, - "node_modules/lower-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -26054,11 +25957,6 @@ "tslib": "^2.0.3" } }, - "node_modules/no-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/node-emoji": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", @@ -27108,11 +27006,6 @@ "tslib": "^2.0.3" } }, - "node_modules/param-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -27205,11 +27098,6 @@ "tslib": "^2.0.3" } }, - "node_modules/pascal-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -27487,33 +27375,35 @@ } }, "node_modules/playwright": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", - "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0.tgz", + "integrity": "sha512-4z3ac3plDfYzGB6r0Q3LF8POPR20Z8D0aXcxbJvmfMgSSq1hkcgvFRXJk9rUq5H/MJ0Ktal869hhOdI/zUTeLA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.41.2" + "playwright-core": "1.45.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" }, "optionalDependencies": { "fsevents": "2.3.2" } }, - "node_modules/playwright/node_modules/playwright-core": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", - "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", + "node_modules/playwright-core": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0.tgz", + "integrity": "sha512-lZmHlFQ0VYSpAs43dRq1/nJ9G/6SiTI7VPqidld9TDefL9tX87bTKExWZZUF5PeRyqtXqd8fQi2qmfIedkwsNQ==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/please-upgrade-node": { @@ -29658,16 +29548,6 @@ } } }, - "node_modules/react-remove-scroll-bar/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/react-remove-scroll/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/react-router": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", @@ -29765,11 +29645,6 @@ } } }, - "node_modules/react-style-singleton/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/react-test-renderer": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", @@ -30880,15 +30755,13 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "tslib": "^2.1.0" } }, "node_modules/sade": { @@ -31710,11 +31583,6 @@ "tslib": "^2.0.3" } }, - "node_modules/snake-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -31814,9 +31682,9 @@ } }, "node_modules/spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", "dev": true }, "node_modules/spawn-sync": { @@ -33138,10 +33006,10 @@ } }, "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", @@ -34107,11 +33975,6 @@ } } }, - "node_modules/use-callback-ref/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/use-sidecar": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", @@ -34133,11 +33996,6 @@ } } }, - "node_modules/use-sidecar/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", @@ -39532,11 +39390,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -39549,13 +39402,6 @@ "postcss": "^8.4.38", "postcss-sort-media-queries": "^5.2.0", "tslib": "^2.6.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@docusaurus/logger": { @@ -39609,11 +39455,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -39657,11 +39498,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -39712,11 +39548,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -39765,11 +39596,6 @@ "requires": { "argparse": "^2.0.1" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -39797,11 +39623,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -39827,11 +39648,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -39844,13 +39660,6 @@ "@docusaurus/types": "3.3.2", "@docusaurus/utils-validation": "3.3.2", "tslib": "^2.6.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@docusaurus/plugin-google-gtag": { @@ -39863,13 +39672,6 @@ "@docusaurus/utils-validation": "3.3.2", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@docusaurus/plugin-google-tag-manager": { @@ -39881,13 +39683,6 @@ "@docusaurus/types": "3.3.2", "@docusaurus/utils-validation": "3.3.2", "tslib": "^2.6.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@docusaurus/plugin-sitemap": { @@ -39915,11 +39710,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -39973,13 +39763,6 @@ "rtlcss": "^4.1.0", "tslib": "^2.6.0", "utility-types": "^3.10.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@docusaurus/theme-common": { @@ -40002,13 +39785,6 @@ "prism-react-renderer": "^2.3.0", "tslib": "^2.6.0", "utility-types": "^3.10.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@docusaurus/theme-search-algolia": { @@ -40043,11 +39819,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -40069,11 +39840,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -40153,11 +39919,6 @@ "requires": { "argparse": "^2.0.1" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -40167,13 +39928,6 @@ "integrity": "sha512-QWFTLEkPYsejJsLStgtmetMFIA3pM8EPexcZ4WZ7b++gO5jGVH7zsipREnCHzk6+eDgeaXfkR6UPaTt86bp8Og==", "requires": { "tslib": "^2.6.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "@docusaurus/utils-validation": { @@ -40201,11 +39955,6 @@ "requires": { "argparse": "^2.0.1" } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -41579,12 +41328,12 @@ "optional": true }, "@playwright/test": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", - "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.0.tgz", + "integrity": "sha512-TVYsfMlGAaxeUllNkywbwek67Ncf8FRGn8ZlRdO291OL3NjG9oMbfVhyP82HQF0CZLMrYsvesqoUekxdWuF9Qw==", "dev": true, "requires": { - "playwright": "1.41.2" + "playwright": "1.45.0" } }, "@pnpm/config.env-replace": { @@ -43640,13 +43389,6 @@ "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", "requires": { "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "aria-query": { @@ -43810,14 +43552,6 @@ "dev": true, "requires": { "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } } }, "ast-types-flow": { @@ -43856,14 +43590,6 @@ "dev": true, "requires": { "tslib": "^2.4.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } } }, "asynckit": { @@ -44628,13 +44354,6 @@ "requires": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "camelcase": { @@ -45172,19 +44891,20 @@ } }, "concurrently": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", - "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", "dev": true, "requires": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", + "chalk": "^4.1.2", + "date-fns": "^2.30.0", "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", "tree-kill": "^1.2.2", - "yargs": "^16.2.0" + "yargs": "^17.7.2" }, "dependencies": { "ansi-styles": { @@ -45217,6 +44937,17 @@ } } }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -45238,6 +44969,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -45246,6 +44983,21 @@ "requires": { "has-flag": "^4.0.0" } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } } } }, @@ -46135,10 +45887,13 @@ } }, "date-fns": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", - "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", - "dev": true + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.21.0" + } }, "dayjs": { "version": "1.11.11", @@ -47800,13 +47555,6 @@ "requires": { "no-case": "^3.0.4", "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "dot-prop": { @@ -49379,13 +49127,6 @@ "integrity": "sha512-QFaHbhv9WPUeLYBDe/PAuLKJ4Dd9OPvKs9xZBr3yLXnUrDNaVXKu2baDBXe3naPY30hgHYSsf2JW4jzas2mDEQ==", "requires": { "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "follow-redirects": { @@ -49598,13 +49339,6 @@ "integrity": "sha512-ogK5fc0GBUT3AjzMXPx7f74m5V1ByRqkKQARBVHpdkYTNDxb/WriANYD+5JBo1wklQQJ1HayDZtmofQLqZFcbw==", "requires": { "tslib": "^2.4.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "framesync": { @@ -53406,21 +53140,6 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true - }, - "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true } } }, @@ -53644,13 +53363,6 @@ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "requires": { "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "lowercase-keys": { @@ -55392,13 +55104,6 @@ "requires": { "lower-case": "^2.0.2", "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "node-emoji": { @@ -56148,13 +55853,6 @@ "requires": { "dot-case": "^3.0.4", "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "parent-module": { @@ -56225,13 +55923,6 @@ "requires": { "no-case": "^3.0.4", "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "path-browserify": { @@ -56453,23 +56144,21 @@ } }, "playwright": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", - "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0.tgz", + "integrity": "sha512-4z3ac3plDfYzGB6r0Q3LF8POPR20Z8D0aXcxbJvmfMgSSq1hkcgvFRXJk9rUq5H/MJ0Ktal869hhOdI/zUTeLA==", "dev": true, "requires": { "fsevents": "2.3.2", - "playwright-core": "1.41.2" - }, - "dependencies": { - "playwright-core": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", - "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", - "dev": true - } + "playwright-core": "1.45.0" } }, + "playwright-core": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0.tgz", + "integrity": "sha512-lZmHlFQ0VYSpAs43dRq1/nJ9G/6SiTI7VPqidld9TDefL9tX87bTKExWZZUF5PeRyqtXqd8fQi2qmfIedkwsNQ==", + "dev": true + }, "please-upgrade-node": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", @@ -57828,13 +57517,6 @@ "tslib": "^2.1.0", "use-callback-ref": "^1.3.0", "use-sidecar": "^1.1.2" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "react-remove-scroll-bar": { @@ -57844,13 +57526,6 @@ "requires": { "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "react-router": { @@ -57921,13 +57596,6 @@ "get-nonce": "^1.0.0", "invariant": "^2.2.4", "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "react-test-renderer": { @@ -58756,12 +58424,12 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "^2.1.0" } }, "sade": { @@ -59409,13 +59077,6 @@ "requires": { "dot-case": "^3.0.4", "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "sockjs": { @@ -59496,9 +59157,9 @@ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==" }, "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", "dev": true }, "spawn-sync": { @@ -60474,10 +60135,9 @@ } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "type-check": { "version": "0.4.0", @@ -61142,13 +60802,6 @@ "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", "requires": { "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "use-sidecar": { @@ -61158,13 +60811,6 @@ "requires": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, "use-sync-external-store": { diff --git a/package.json b/package.json index 4e22c4d62dcd..064d5d288d6b 100644 --- a/package.json +++ b/package.json @@ -53,11 +53,11 @@ "test-e2e-ci-chromium": "npm run prepare-ci && cross-env E2E_PORT=4000 npm run test-e2e-chromium", "test-e2e-ci-firefox": "npm run prepare-ci && cross-env E2E_PORT=4000 npm run test-e2e-firefox", "test-e2e-ci-webkit": "npm run prepare-ci && cross-env E2E_PORT=4000 npm run test-e2e-webkit", - "test-e2e-collab-ci-chromium": "npm run prepare-ci && cross-env E2E_PORT=4000 concurrently -k -s \"first\" \"npm run collab\" \"npm run test-e2e-collab-chromium\"", - "test-e2e-collab-ci-firefox": "npm run prepare-ci && cross-env E2E_PORT=4000 concurrently -k -s \"first\" \"npm run collab\" \"npm run test-e2e-collab-firefox\"", - "test-e2e-collab-ci-webkit": "npm run prepare-ci && cross-env E2E_PORT=4000 concurrently -k -s \"first\" \"npm run collab\" \"npm run test-e2e-collab-webkit\"", + "test-e2e-collab-ci-chromium": "npm run prepare-ci && cross-env E2E_PORT=4000 concurrently -k -s \"first\" \"npm run collab\" -P \"npm run test-e2e-collab-chromium -- {@}\"", + "test-e2e-collab-ci-firefox": "npm run prepare-ci && cross-env E2E_PORT=4000 concurrently -k -s \"first\" \"npm run collab\" -P \"npm run test-e2e-collab-firefox -- {@}\"", + "test-e2e-collab-ci-webkit": "npm run prepare-ci && cross-env E2E_PORT=4000 concurrently -k -s \"first\" \"npm run collab\" -P \"npm run test-e2e-collab-webkit -- {@}\"", "test-e2e-prod-ci-chromium": "npm run prepare-ci-prod && cross-env E2E_PORT=4000 npm run test-e2e-prod-chromium", - "test-e2e-collab-prod-ci-chromium": " npm run prepare-ci-prod && cross-env E2E_PORT=4000 concurrently -k -s \"first\" \"npm run collab\" \"npm run test-e2e-collab-prod-chromium\"", + "test-e2e-collab-prod-ci-chromium": " npm run prepare-ci-prod && cross-env E2E_PORT=4000 concurrently -k -s \"first\" \"npm run collab\" -P \"npm run test-e2e-collab-prod-chromium -- {@}\"", "debug-run-all": "npm-run-all debug-test-e2e-*", "run-all": "npm-run-all test-e2e-*", "debug-test-e2e": "cross-env playwright test --debug", @@ -118,7 +118,7 @@ "@babel/preset-react": "^7.24.1", "@babel/preset-typescript": "^7.24.1", "@lexical/eslint-plugin": "file:./packages/lexical-eslint-plugin", - "@playwright/test": "^1.41.2", + "@playwright/test": "^1.45.0", "@rollup/plugin-alias": "^5.1.0", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^25.0.7", @@ -140,7 +140,7 @@ "@typescript-eslint/parser": "^7.8.0", "child-process-promise": "^2.2.1", "chokidar": "^3.5.2", - "concurrently": "^6.2.0", + "concurrently": "^8.2.2", "confusing-browser-globals": "^1.0.10", "cross-env": "^7.0.3", "eslint": "^8.57.0", diff --git a/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs b/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs index fc9c01e64e2d..a10f6fd4d08f 100644 --- a/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs +++ b/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs @@ -402,56 +402,20 @@ function testSuite(charset) { await page.focus('div[contenteditable="true"]'); await page.keyboard.type('👨‍👩‍👦‍👦'); - if (['chromium', 'webkit'].includes(browserName)) { - await assertHTML( - page, - html` -

+ - - 👨‍👩‍👦‍👦 - -

- `, - ); - } else { - if (charset === 'UTF-16') { - await assertHTML( - page, - html` -

- 👨‍👩 - - ‍👦‍👦 - -

- `, - ); - } else { - await assertHTML( - page, - html` -

- 👨 - - ‍👩‍👦‍👦 - -

- `, - ); - } - } + 👨‍👩‍👦‍👦 + +

+ `, + ); }); } diff --git a/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs b/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs index 7478b7665dbd..a798fbd25d26 100644 --- a/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs +++ b/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs @@ -106,82 +106,88 @@ test.describe('Clear All Formatting', () => { ); }); - test(`Should preserve the default styling of hashtags and mentions`, async ({ - page, - }) => { - await focusEditor(page); + test( + `Should preserve the default styling of hashtags and mentions`, + { + tag: '@flaky', + }, + async ({page}) => { + await focusEditor(page); - await page.keyboard.type('#facebook testing'); - await selectAll(page); - await toggleItalic(page); - await selectFromBackgroundColorPicker(page); - await selectFromColorPicker(page); - await selectFromAdditionalStylesDropdown(page, '.clear'); - await assertHTML( - page, - html` -

- - #facebook - - testing -

- `, - ); + await page.keyboard.type('#facebook testing'); + await selectAll(page); + await toggleItalic(page); + await selectFromBackgroundColorPicker(page); + await selectFromColorPicker(page); + await selectFromAdditionalStylesDropdown(page, '.clear'); + await assertHTML( + page, + html` +

+ + #facebook + + testing +

+ `, + ); - await clearEditor(page); + await clearEditor(page); - await page.keyboard.type('@Luke'); + await page.keyboard.type('@Luke'); - await waitForSelector(page, '#typeahead-menu ul li'); - await assertHTML( - page, - html` -

- @Luke -

- `, - ); + await waitForSelector(page, '#typeahead-menu ul li'); + await assertHTML( + page, + html` +

+ @Luke +

+ `, + ); - await page.keyboard.press('Enter'); - await assertHTML( - page, - html` -

- - Luke Skywalker - -

- `, - ); + await page.keyboard.press('Enter'); + await assertHTML( + page, + html` +

+ + Luke Skywalker + +

+ `, + ); - await page.keyboard.type(' is testing'); - await selectAll(page); - await toggleBold(page); - await selectFromColorPicker(page); - await selectFromAdditionalStylesDropdown(page, '.clear'); - await assertHTML( - page, - html` -

- - Luke Skywalker - - is testing -

- `, - ); - }); + await page.keyboard.type(' is testing'); + await selectAll(page); + await toggleBold(page); + await selectFromColorPicker(page); + await selectFromAdditionalStylesDropdown(page, '.clear'); + await assertHTML( + page, + html` +

+ + Luke Skywalker + + is testing +

+ `, + ); + }, + ); }); diff --git a/packages/lexical-playground/__tests__/e2e/History.spec.mjs b/packages/lexical-playground/__tests__/e2e/History.spec.mjs index 86dc9bb0782f..1fe3c83df14e 100644 --- a/packages/lexical-playground/__tests__/e2e/History.spec.mjs +++ b/packages/lexical-playground/__tests__/e2e/History.spec.mjs @@ -26,67 +26,157 @@ import { test.describe('History', () => { test.beforeEach(({isCollab, page}) => initialize({isCollab, page})); - test(`Can type two paragraphs of text and correctly undo and redo`, async ({ - isRichText, - page, - isCollab, - }) => { - test.skip(isCollab); - await page.focus('div[contenteditable="true"]'); - await page.keyboard.type('hello'); - await sleep(1050); // default merge interval is 1000, add 50ms as overhead due to CI latency. - await page.keyboard.type(' world'); - await page.keyboard.press('Enter'); - await page.keyboard.type('hello world again'); - await moveLeft(page, 6); - await page.keyboard.type(', again and'); - - if (isRichText) { - await assertHTML( - page, - html` -

- hello world -

-

- hello world, again and again -

- `, - ); - await assertSelection(page, { - anchorOffset: 22, - anchorPath: [1, 0, 0], - focusOffset: 22, - focusPath: [1, 0, 0], - }); - } else { - await assertHTML( - page, - html` -

- hello world -
- hello world, again and again -

- `, - ); - await assertSelection(page, { - anchorOffset: 22, - anchorPath: [0, 2, 0], - focusOffset: 22, - focusPath: [0, 2, 0], - }); - } - - await undo(page); + test( + `Can type two paragraphs of text and correctly undo and redo`, + { + tag: '@flaky', + }, + async ({isRichText, page, isCollab}) => { + test.skip(isCollab); + await page.focus('div[contenteditable="true"]'); + await page.keyboard.type('hello'); + await sleep(1050); // default merge interval is 1000, add 50ms as overhead due to CI latency. + await page.keyboard.type(' world'); + await page.keyboard.press('Enter'); + await page.keyboard.type('hello world again'); + await moveLeft(page, 6); + await page.keyboard.type(', again and'); + + if (isRichText) { + await assertHTML( + page, + html` +

+ hello world +

+

+ hello world, again and again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 22, + anchorPath: [1, 0, 0], + focusOffset: 22, + focusPath: [1, 0, 0], + }); + } else { + await assertHTML( + page, + html` +

+ hello world +
+ hello world, again and again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 22, + anchorPath: [0, 2, 0], + focusOffset: 22, + focusPath: [0, 2, 0], + }); + } + + await undo(page); + + if (isRichText) { + await assertHTML( + page, + html` +

+ hello world +

+

+ hello world again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 11, + anchorPath: [1, 0, 0], + focusOffset: 11, + focusPath: [1, 0, 0], + }); + } else { + await assertHTML( + page, + html` +

+ hello world +
+ hello world again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 11, + anchorPath: [0, 2, 0], + focusOffset: 11, + focusPath: [0, 2, 0], + }); + } + + await undo(page); + + if (isRichText) { + await assertHTML( + page, + html` +

+ hello world +

+

+
+

+ `, + ); + await assertSelection(page, { + anchorOffset: 0, + anchorPath: [1], + focusOffset: 0, + focusPath: [1], + }); + } else { + assertHTML( + page, + html` +

+ hello world +
+
+

+ `, + ); + await assertSelection(page, { + anchorOffset: 2, + anchorPath: [0], + focusOffset: 2, + focusPath: [0], + }); + } + + await undo(page); - if (isRichText) { await assertHTML( page, html` @@ -95,310 +185,70 @@ test.describe('History', () => { dir="ltr"> hello world

-

- hello world again -

- `, - ); - await assertSelection(page, { - anchorOffset: 11, - anchorPath: [1, 0, 0], - focusOffset: 11, - focusPath: [1, 0, 0], - }); - } else { - await assertHTML( - page, - html` -

- hello world -
- hello world again -

`, ); await assertSelection(page, { anchorOffset: 11, - anchorPath: [0, 2, 0], + anchorPath: [0, 0, 0], focusOffset: 11, - focusPath: [0, 2, 0], + focusPath: [0, 0, 0], }); - } - await undo(page); + await undo(page); - if (isRichText) { await assertHTML( page, html`

- hello world -

-

-
-

- `, - ); - await assertSelection(page, { - anchorOffset: 0, - anchorPath: [1], - focusOffset: 0, - focusPath: [1], - }); - } else { - assertHTML( - page, - html` -

- hello world -
-
+ hello

`, ); await assertSelection(page, { - anchorOffset: 2, - anchorPath: [0], - focusOffset: 2, - focusPath: [0], + anchorOffset: 5, + anchorPath: [0, 0, 0], + focusOffset: 5, + focusPath: [0, 0, 0], }); - } - - await undo(page); - - await assertHTML( - page, - html` -

- hello world -

- `, - ); - await assertSelection(page, { - anchorOffset: 11, - anchorPath: [0, 0, 0], - focusOffset: 11, - focusPath: [0, 0, 0], - }); - - await undo(page); - - await assertHTML( - page, - html` -

- hello -

- `, - ); - await assertSelection(page, { - anchorOffset: 5, - anchorPath: [0, 0, 0], - focusOffset: 5, - focusPath: [0, 0, 0], - }); - await undo(page); + await undo(page); - await assertHTML( - page, - html` -


- `, - ); - await assertSelection(page, { - anchorOffset: 0, - anchorPath: [0], - focusOffset: 0, - focusPath: [0], - }); - - await redo(page); - - await assertHTML( - page, - html` -

- hello -

- `, - ); - await assertSelection(page, { - anchorOffset: 5, - anchorPath: [0, 0, 0], - focusOffset: 5, - focusPath: [0, 0, 0], - }); - - await redo(page); - - await assertHTML( - page, - html` -

- hello world -

- `, - ); - await assertSelection(page, { - anchorOffset: 11, - anchorPath: [0, 0, 0], - focusOffset: 11, - focusPath: [0, 0, 0], - }); - - await redo(page); - - if (isRichText) { await assertHTML( page, html` -

- hello world -


`, ); await assertSelection(page, { anchorOffset: 0, - anchorPath: [1], - focusOffset: 0, - focusPath: [1], - }); - } else { - await assertHTML( - page, - html` -

- hello world -
-
-

- `, - ); - await assertSelection(page, { - anchorOffset: 2, anchorPath: [0], - focusOffset: 2, + focusOffset: 0, focusPath: [0], }); - } - await redo(page); + await redo(page); - if (isRichText) { await assertHTML( page, html`

- hello world -

-

- hello world again -

- `, - ); - await assertSelection(page, { - anchorOffset: 11, - anchorPath: [1, 0, 0], - focusOffset: 11, - focusPath: [1, 0, 0], - }); - } else { - assertHTML( - page, - html` -

- hello world -
- hello world again + hello

`, ); await assertSelection(page, { - anchorOffset: 11, - anchorPath: [0, 2, 0], - focusOffset: 11, - focusPath: [0, 2, 0], - }); - } - - await redo(page); - - if (isRichText) { - assertHTML( - page, - html` -

- hello world -

-

- hello world, again and again -

- `, - ); - await assertSelection(page, { - anchorOffset: 22, - anchorPath: [1, 0, 0], - focusOffset: 22, - focusPath: [1, 0, 0], - }); - } else { - assertHTML( - page, - html` -

- hello world -
- hello world, again and again -

- `, - ); - await assertSelection(page, { - anchorOffset: 22, - anchorPath: [0, 2, 0], - focusOffset: 22, - focusPath: [0, 2, 0], + anchorOffset: 5, + anchorPath: [0, 0, 0], + focusOffset: 5, + focusPath: [0, 0, 0], }); - } - await pressBackspace(page, 4); + await redo(page); - if (isRichText) { await assertHTML( page, html` @@ -407,85 +257,237 @@ test.describe('History', () => { dir="ltr"> hello world

-

- hello world, again again -

- `, - ); - await assertSelection(page, { - anchorOffset: 18, - anchorPath: [1, 0, 0], - focusOffset: 18, - focusPath: [1, 0, 0], - }); - } else { - await assertHTML( - page, - html` -

- hello world -
- hello world, again again -

`, ); await assertSelection(page, { - anchorOffset: 18, - anchorPath: [0, 2, 0], - focusOffset: 18, - focusPath: [0, 2, 0], + anchorOffset: 11, + anchorPath: [0, 0, 0], + focusOffset: 11, + focusPath: [0, 0, 0], }); - } - - await undo(page); - if (isRichText) { - await assertHTML( - page, - html` -

- hello world -

-

- hello world, again and again -

- `, - ); - await assertSelection(page, { - anchorOffset: 22, - anchorPath: [1, 0, 0], - focusOffset: 22, - focusPath: [1, 0, 0], - }); - } else { - await assertHTML( - page, - html` -

- hello world -
- hello world, again and again -

- `, - ); - await assertSelection(page, { - anchorOffset: 22, - anchorPath: [0, 2, 0], - focusOffset: 22, - focusPath: [0, 2, 0], - }); - } - }); + await redo(page); + + if (isRichText) { + await assertHTML( + page, + html` +

+ hello world +

+


+ `, + ); + await assertSelection(page, { + anchorOffset: 0, + anchorPath: [1], + focusOffset: 0, + focusPath: [1], + }); + } else { + await assertHTML( + page, + html` +

+ hello world +
+
+

+ `, + ); + await assertSelection(page, { + anchorOffset: 2, + anchorPath: [0], + focusOffset: 2, + focusPath: [0], + }); + } + + await redo(page); + + if (isRichText) { + await assertHTML( + page, + html` +

+ hello world +

+

+ hello world again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 11, + anchorPath: [1, 0, 0], + focusOffset: 11, + focusPath: [1, 0, 0], + }); + } else { + assertHTML( + page, + html` +

+ hello world +
+ hello world again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 11, + anchorPath: [0, 2, 0], + focusOffset: 11, + focusPath: [0, 2, 0], + }); + } + + await redo(page); + + if (isRichText) { + assertHTML( + page, + html` +

+ hello world +

+

+ hello world, again and again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 22, + anchorPath: [1, 0, 0], + focusOffset: 22, + focusPath: [1, 0, 0], + }); + } else { + assertHTML( + page, + html` +

+ hello world +
+ hello world, again and again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 22, + anchorPath: [0, 2, 0], + focusOffset: 22, + focusPath: [0, 2, 0], + }); + } + + await pressBackspace(page, 4); + + if (isRichText) { + await assertHTML( + page, + html` +

+ hello world +

+

+ hello world, again again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 18, + anchorPath: [1, 0, 0], + focusOffset: 18, + focusPath: [1, 0, 0], + }); + } else { + await assertHTML( + page, + html` +

+ hello world +
+ hello world, again again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 18, + anchorPath: [0, 2, 0], + focusOffset: 18, + focusPath: [0, 2, 0], + }); + } + + await undo(page); + + if (isRichText) { + await assertHTML( + page, + html` +

+ hello world +

+

+ hello world, again and again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 22, + anchorPath: [1, 0, 0], + focusOffset: 22, + focusPath: [1, 0, 0], + }); + } else { + await assertHTML( + page, + html` +

+ hello world +
+ hello world, again and again +

+ `, + ); + await assertSelection(page, { + anchorOffset: 22, + anchorPath: [0, 2, 0], + focusOffset: 22, + focusPath: [0, 2, 0], + }); + } + }, + ); test('Can coalesce when switching inline styles (#1151)', async ({ page, diff --git a/packages/lexical-playground/__tests__/e2e/Links.spec.mjs b/packages/lexical-playground/__tests__/e2e/Links.spec.mjs index 54fb3bd8fd15..c21db1548c24 100644 --- a/packages/lexical-playground/__tests__/e2e/Links.spec.mjs +++ b/packages/lexical-playground/__tests__/e2e/Links.spec.mjs @@ -2000,35 +2000,39 @@ test.describe.parallel('Links', () => { ); }); - test('Can handle pressing Enter at the beginning of a Link', async ({ - page, - }) => { - await focusEditor(page); - await page.keyboard.type('Hello awesome'); - await selectAll(page); - await click(page, '.link'); - await click(page, '.link-confirm'); - await page.keyboard.press('ArrowRight'); - await page.keyboard.type(' world'); - - await moveToLineBeginning(page); - await page.keyboard.press('Enter'); - - await assertHTML( - page, - html` -


-

- - Hello awesome - - world -

- `, - undefined, - {ignoreClasses: true}, - ); - }); + test( + 'Can handle pressing Enter at the beginning of a Link', + { + tag: '@flaky', + }, + async ({page}) => { + await focusEditor(page); + await page.keyboard.type('Hello awesome'); + await selectAll(page); + await click(page, '.link'); + await click(page, '.link-confirm'); + await page.keyboard.press('ArrowRight'); + await page.keyboard.type(' world'); + + await moveToLineBeginning(page); + await page.keyboard.press('Enter'); + + await assertHTML( + page, + html` +


+

+ + Hello awesome + + world +

+ `, + undefined, + {ignoreClasses: true}, + ); + }, + ); test('Can handle pressing Enter at the end of a Link', async ({ isCollab, diff --git a/packages/lexical-playground/__tests__/e2e/List.spec.mjs b/packages/lexical-playground/__tests__/e2e/List.spec.mjs index 77fa0cd66f18..8dcd61d0fe06 100644 --- a/packages/lexical-playground/__tests__/e2e/List.spec.mjs +++ b/packages/lexical-playground/__tests__/e2e/List.spec.mjs @@ -1431,58 +1431,62 @@ test.describe.parallel('Nested List', () => { }); }); - test('remove list breaks when selection in empty nested list item 2', async ({ - page, - }) => { - await focusEditor(page); - await page.keyboard.type('Hello World'); - await page.keyboard.press('Enter'); - await page.keyboard.type('a'); - await toggleBulletList(page); - await page.keyboard.press('Enter'); - await page.keyboard.type('b'); - await page.keyboard.press('ArrowUp'); - await page.keyboard.press('Enter'); - await click(page, '.toolbar-item.alignment'); - await click(page, 'button:has-text("Indent")'); - await toggleBulletList(page); - await assertHTML( - page, - html` -

- Hello World -

- -

-
-

- - `, - ); - await page.pause(); - await assertSelection(page, { - anchorOffset: 1, - anchorPath: [1, 0], - focusOffset: 1, - focusPath: [1, 0], - }); - }); + test( + 'remove list breaks when selection in empty nested list item 2', + { + tag: '@flaky', + }, + async ({page}) => { + await focusEditor(page); + await page.keyboard.type('Hello World'); + await page.keyboard.press('Enter'); + await page.keyboard.type('a'); + await toggleBulletList(page); + await page.keyboard.press('Enter'); + await page.keyboard.type('b'); + await page.keyboard.press('ArrowUp'); + await page.keyboard.press('Enter'); + await click(page, '.toolbar-item.alignment'); + await click(page, 'button:has-text("Indent")'); + await toggleBulletList(page); + await assertHTML( + page, + html` +

+ Hello World +

+ +

+
+

+ + `, + ); + await page.pause(); + await assertSelection(page, { + anchorOffset: 1, + anchorPath: [1, 0], + focusOffset: 1, + focusPath: [1, 0], + }); + }, + ); }); diff --git a/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs b/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs index 560a81a799bd..ef00f029d040 100644 --- a/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs +++ b/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs @@ -818,10 +818,10 @@ test.describe('Keyboard Navigation', () => { await moveToPrevWord(page); if (browserName === 'firefox') { await assertSelection(page, { - anchorOffset: 4, - anchorPath: [0, 2, 0], - focusOffset: 4, - focusPath: [0, 2, 0], + anchorOffset: 2, + anchorPath: [0, 4, 0, 0], + focusOffset: 2, + focusPath: [0, 4, 0, 0], }); } else if (browserName === 'webkit') { await assertSelection(page, { @@ -849,10 +849,10 @@ test.describe('Keyboard Navigation', () => { }); } else if (browserName === 'firefox') { await assertSelection(page, { - anchorOffset: 0, - anchorPath: [0, 0, 0], - focusOffset: 0, - focusPath: [0, 0, 0], + anchorOffset: 2, + anchorPath: [0, 3, 0, 0], + focusOffset: 2, + focusPath: [0, 3, 0, 0], }); } else { await assertSelection(page, { @@ -960,21 +960,12 @@ test.describe('Keyboard Navigation', () => { focusPath: [0, 0, 0], }); } else if (browserName === 'firefox') { - if (IS_WINDOWS) { - await assertSelection(page, { - anchorOffset: 4, - anchorPath: [0, 2, 0], - focusOffset: 4, - focusPath: [0, 2, 0], - }); - } else { - await assertSelection(page, { - anchorOffset: 3, - anchorPath: [0, 2, 0], - focusOffset: 3, - focusPath: [0, 2, 0], - }); - } + await assertSelection(page, { + anchorOffset: 0, + anchorPath: [0, 5, 0], + focusOffset: 0, + focusPath: [0, 5, 0], + }); } else { await assertSelection(page, { anchorOffset: 3, @@ -1009,21 +1000,12 @@ test.describe('Keyboard Navigation', () => { }); } } else { - if (IS_WINDOWS) { - await assertSelection(page, { - anchorOffset: 2, - anchorPath: [0, 1, 0, 0], - focusOffset: 2, - focusPath: [0, 1, 0, 0], - }); - } else { - await assertSelection(page, { - anchorOffset: 2, - anchorPath: [0, 1, 0, 0], - focusOffset: 2, - focusPath: [0, 1, 0, 0], - }); - } + await assertSelection(page, { + anchorOffset: 2, + anchorPath: [0, 1, 0, 0], + focusOffset: 2, + focusPath: [0, 1, 0, 0], + }); } // 3 right await moveToNextWord(page); diff --git a/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs b/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs index 39c2795c5d9d..513ca31c5b93 100644 --- a/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs +++ b/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs @@ -34,219 +34,225 @@ test.describe('Toolbar', () => { initialize({isCollab, page, showNestedEditorTreeView: false}), ); - test('Insert image caption + table', async ({page, isPlainText}) => { - test.skip(isPlainText); - await focusEditor(page); + test( + 'Insert image caption + table', + { + tag: '@flaky', + }, + async ({page, isPlainText}) => { + test.skip(isPlainText); + await focusEditor(page); - // Add caption - await insertSampleImage(page); - // Catch flakiness earlier - await assertHTML( - page, - html` -

- -

- Yellow flower in tilt shift lens -
- -
-

- `, - undefined, - { - ignoreClasses: true, - ignoreInlineStyles: true, - }, - ); - await click(page, '.editor-image img'); - await click(page, '.image-caption-button'); - await focus(page, '.ImageNode__contentEditable'); - await page.keyboard.type('Yellow flower in tilt shift lens'); - await assertHTML( - page, - html` -

- -

- Yellow flower in tilt shift lens -
-
-
-

- - Yellow flower in tilt shift lens - -

+ // Add caption + await insertSampleImage(page); + // Catch flakiness earlier + await assertHTML( + page, + html` +

+ +

+ Yellow flower in tilt shift lens
-
- -
-

- `, - undefined, - { - ignoreClasses: true, - ignoreInlineStyles: true, - }, - (actualHtml) => - // flaky fix: remove the extra


that appears occasionally in CI runs - actualHtml.replace( - html` -

- - Yellow flower in tilt shift lens - -

-


- `, - html` -

- - Yellow flower in tilt shift lens - -

- `, - ), - ); + +
+

+ `, + undefined, + { + ignoreClasses: true, + ignoreInlineStyles: true, + }, + ); + await click(page, '.editor-image img'); + await click(page, '.image-caption-button'); + await focus(page, '.ImageNode__contentEditable'); + await page.keyboard.type('Yellow flower in tilt shift lens'); + await assertHTML( + page, + html` +

+ +

+ Yellow flower in tilt shift lens +
+
+
+

+ + Yellow flower in tilt shift lens + +

+
+
+ +
+

+ `, + undefined, + { + ignoreClasses: true, + ignoreInlineStyles: true, + }, + (actualHtml) => + // flaky fix: remove the extra


that appears occasionally in CI runs + actualHtml.replace( + html` +

+ + Yellow flower in tilt shift lens + +

+


+ `, + html` +

+ + Yellow flower in tilt shift lens + +

+ `, + ), + ); - // Delete image - // TODO Revisit the a11y side of NestedEditors - await evaluate(page, () => { - const p = document.querySelector('[contenteditable="true"] p'); - document.getSelection().setBaseAndExtent(p, 0, p, 0); - }); - await selectAll(page); - await page.keyboard.press('Delete'); - await assertHTML( - page, - html` -


- `, - undefined, - { - ignoreClasses: true, - ignoreInlineStyles: true, - }, - ); + // Delete image + // TODO Revisit the a11y side of NestedEditors + await evaluate(page, () => { + const p = document.querySelector('[contenteditable="true"] p'); + document.getSelection().setBaseAndExtent(p, 0, p, 0); + }); + await selectAll(page); + await page.keyboard.press('Delete'); + await assertHTML( + page, + html` +


+ `, + undefined, + { + ignoreClasses: true, + ignoreInlineStyles: true, + }, + ); - // Add table - await selectFromInsertDropdown(page, '.table'); - await click(page, '[data-test-id="table-model-confirm-insert"] button'); + // Add table + await selectFromInsertDropdown(page, '.table'); + await click(page, '[data-test-id="table-model-confirm-insert"] button'); - await assertHTML( - page, - html` -

-
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


-
-


- `, - undefined, - { - ignoreClasses: true, - ignoreInlineStyles: true, - }, - ); - }); + await assertHTML( + page, + html` +

+
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+
+


+ `, + undefined, + { + ignoreClasses: true, + ignoreInlineStyles: true, + }, + ); + }, + ); test('Center align image', async ({page, isPlainText, isCollab}) => { // Image selection can't be synced in collab