diff --git a/e2e-tests/.ci/server.generate.sh b/e2e-tests/.ci/server.generate.sh index 43d5f435df..6b4775af38 100755 --- a/e2e-tests/.ci/server.generate.sh +++ b/e2e-tests/.ci/server.generate.sh @@ -65,6 +65,8 @@ services: MM_LOGSETTINGS_ENABLEDIAGNOSTICS: "false" MM_LOGSETTINGS_CONSOLELEVEL: "DEBUG" network_mode: host + ports: + - "8065:8065" depends_on: $(for service in $ENABLED_DOCKER_SERVICES; do # The server container will start only if all other dependent services are healthy @@ -277,7 +279,7 @@ $(if mme2e_is_token_in_list "webhook-interactions" "$ENABLED_DOCKER_SERVICES"; t $(if mme2e_is_token_in_list "playwright" "$ENABLED_DOCKER_SERVICES"; then echo ' playwright: - image: mcr.microsoft.com/playwright:v1.51.1-noble + image: mcr.microsoft.com/playwright:v1.52.0-noble entrypoint: ["/bin/bash", "-c"] command: ["until [ -f /var/run/mm_terminate ]; do sleep 5; done"] env_file: diff --git a/e2e-tests/playwright/README.md b/e2e-tests/playwright/README.md index 0dcacbf0ea..06c402b8e7 100644 --- a/e2e-tests/playwright/README.md +++ b/e2e-tests/playwright/README.md @@ -2,20 +2,47 @@ #### 1. Start local server in a separate terminal. -``` +There are two ways to run the local server: + +**Option 1: Run from source** + +```bash # Typically run the local server with: cd server && make run -# Or build and distribute webapp including channels and playbooks -# so that their product URLs do not rely on Webpack dev server. -# Especially important when running tests inside the Playwright's docker container. -cd webapp && make dist +# Or run webapp and server on separate terminals for better performance +# First terminal: Build and run the webapp +cd webapp && make run +# Second terminal: Run the server cd server && make run-server ``` +**Option 2: Run using Docker (recommended for testing)** + +```bash +# 1. Configure environment variables in e2e-tests/.ci/env +# Create this file if it doesn't exist + +# 2. Set the server image (optional) +# To use the latest master image: +SERVER_IMAGE="mattermostdevelopment/mattermost-enterprise-edition:master" +# If not set, it will use the current commit: mattermostdevelopment/mattermost-enterprise-edition:$(git rev-parse --short=7 HEAD) +# Note: The image must exist in Docker Hub at https://hub.docker.com/r/mattermostdevelopment/mattermost-enterprise-edition/tags + +# 3. Add your license if needed +MM_LICENSE= + +# 4. For additional configuration options, see e2e-tests/README.md + +# 5. Run the server and Playwright's smoke tests from the e2e-tests directory +cd e2e-tests && TEST=playwright make +``` + +This approach uses the server's Docker image to create a consistent testing environment. It automatically configures the server with the necessary settings for Playwright tests and handles dependencies. + #### 2. Install dependencies and run the test. -``` +```bash # Install npm packages npm i @@ -36,19 +63,36 @@ npm run test #### 3. Inspect test results at `/results/output` folder when something fails unexpectedly. +## Run tests in UI mode + +Check out https://playwright.dev/docs/test-ui-mode for detailed guide on UI Mode to learn more about its features. + +```bash +npm run playwright-ui +``` + +> **Note:** If no tests appear in the UI, check your filter settings: +> +> - Test name filters +> - Project filters (setup, ipad, chrome, firefox) +> - Tag filters (@tag) +> - Execution status filters +> +> The "setup" project runs the initial configuration tests in `specs/test_setup.ts` (ensuring plugins are loaded and server deployment is correct). These setup tests are typically run only once before other tests and may be unchecked for subsequent runs, though they can remain checked if needed. + ## Updating screenshots is done strictly via Playwright's docker container for consistency -#### 1. Run docker container using latest focal version +#### 1. Run Playwright's docker container Change to the `e2e-tests/playwright` directory, then run the docker container. (See https://playwright.dev/docs/docker for reference.) -``` -docker run -it --rm -v "$(pwd):/mattermost/" --ipc=host mcr.microsoft.com/playwright:v1.51.1-noble /bin/bash +```bash +docker run -it --rm -v "$(pwd):/mattermost/" --ipc=host mcr.microsoft.com/playwright:v1.52.0-noble /bin/bash ``` #### 2. Inside the docker container -``` +```bash export PW_BASE_URL=http://host.docker.internal:8065 export PW_HEADLESS=true cd mattermost/e2e-tests/playwright diff --git a/e2e-tests/playwright/lib/package.json b/e2e-tests/playwright/lib/package.json index 284444c697..5cabc01eb3 100644 --- a/e2e-tests/playwright/lib/package.json +++ b/e2e-tests/playwright/lib/package.json @@ -45,24 +45,24 @@ "@axe-core/playwright": "4.10.1", "@mattermost/client": "file:../../../webapp/platform/client", "@mattermost/types": "file:../../../webapp/platform/types", - "@percy/cli": "1.30.9", - "@percy/playwright": "1.0.7", + "@percy/cli": "1.30.10", + "@percy/playwright": "1.0.8", "async-wait-until": "2.0.27", "axe-core": "4.10.3", "deepmerge": "4.3.1", - "dotenv": "16.4.7", + "dotenv": "16.5.0", "mime-types": "3.0.1", "uuid": "11.1.0" }, "devDependencies": { "@rollup/plugin-typescript": "12.1.2", "@types/mime-types": "2.1.4", - "@types/node": "22.14.0", - "@types/react": "19.1.0", - "rollup": "4.39.0", + "@types/node": "22.14.1", + "@types/react": "19.1.2", + "rollup": "4.40.0", "rollup-plugin-copy": "3.5.0" }, "peerDependencies": { - "@playwright/test": "1.51.1" + "@playwright/test": "1.52.0" } } diff --git a/e2e-tests/playwright/lib/src/global_setup.ts b/e2e-tests/playwright/lib/src/global_setup.ts index 1f84592d74..33b0ba1b1b 100644 --- a/e2e-tests/playwright/lib/src/global_setup.ts +++ b/e2e-tests/playwright/lib/src/global_setup.ts @@ -94,11 +94,20 @@ async function printClientInfo(client: Client4) { - TelemetryId = ${config.TelemetryId} - ServiceEnvironment = ${config.ServiceEnvironment}`); - const {LogSettings, ServiceSettings} = await client.getConfig(); + const {LogSettings, ServiceSettings, FeatureFlags} = await client.getConfig(); // eslint-disable-next-line no-console console.log(`Notable Server Config: - ServiceSettings.EnableSecurityFixAlert = ${ServiceSettings?.EnableSecurityFixAlert} - LogSettings.EnableDiagnostics = ${LogSettings?.EnableDiagnostics}`); + + // eslint-disable-next-line no-console + console.log('Feature Flags:'); + // eslint-disable-next-line no-console + console.log( + Object.entries(FeatureFlags) + .map(([key, value]) => ` - ${key} = ${value}`) + .join('\n'), + ); } async function printPluginDetails(client: Client4) { diff --git a/e2e-tests/playwright/lib/src/server/default_config.ts b/e2e-tests/playwright/lib/src/server/default_config.ts index 76ef87af95..beec47e0f5 100644 --- a/e2e-tests/playwright/lib/src/server/default_config.ts +++ b/e2e-tests/playwright/lib/src/server/default_config.ts @@ -277,6 +277,7 @@ const defaultServerConfig: AdminConfig = { FileCompress: false, FileMaxQueueSize: 1000, AdvancedLoggingJSON: {}, + Certificate: '', }, NotificationLogSettings: { EnableConsole: true, @@ -783,4 +784,8 @@ const defaultServerConfig: AdminConfig = { DisableSharedChannelsStatusSync: false, MaxPostsPerSync: 50, }, + AccessControlSettings: { + EnableAttributeBasedAccessControl: false, + EnableChannelScopeAccessControl: false, + }, }; diff --git a/e2e-tests/playwright/lib/src/ui/components/channels/center_view.ts b/e2e-tests/playwright/lib/src/ui/components/channels/center_view.ts index 951be18362..ec54a14d17 100644 --- a/e2e-tests/playwright/lib/src/ui/components/channels/center_view.ts +++ b/e2e-tests/playwright/lib/src/ui/components/channels/center_view.ts @@ -50,6 +50,10 @@ export default class ChannelsCenterView { await this.postCreate.toBeVisible(); } + async postMessage(message: string, files?: string[]) { + await this.postCreate.postMessage(message, files); + } + /** * Click on "See all scheduled messages" */ diff --git a/e2e-tests/playwright/lib/src/ui/components/channels/sidebar_right.ts b/e2e-tests/playwright/lib/src/ui/components/channels/sidebar_right.ts index f53a9af0df..834d17715c 100644 --- a/e2e-tests/playwright/lib/src/ui/components/channels/sidebar_right.ts +++ b/e2e-tests/playwright/lib/src/ui/components/channels/sidebar_right.ts @@ -45,6 +45,10 @@ export default class ChannelsSidebarRight { await expect(this.container).toBeVisible(); } + async postMessage(message: string) { + await this.postCreate.postMessage(message); + } + /** * Returns the RHS post by post id * @param postId Just the ID without the prefix diff --git a/e2e-tests/playwright/lib/src/ui/pages/channels.ts b/e2e-tests/playwright/lib/src/ui/pages/channels.ts index 27ec4b9419..14bf9c6ca9 100644 --- a/e2e-tests/playwright/lib/src/ui/pages/channels.ts +++ b/e2e-tests/playwright/lib/src/ui/pages/channels.ts @@ -3,7 +3,7 @@ import {expect, Page} from '@playwright/test'; -import {components} from '@/ui/components'; +import {ChannelsPost, components} from '@/ui/components'; export default class ChannelsPage { readonly channels = 'Channels'; @@ -89,9 +89,10 @@ export default class ChannelsPage { /** * `postMessage` posts a message in the current channel * @param message Message to post + * @param files Files to attach to the message */ - async postMessage(message: string) { - await this.centerView.postCreate.postMessage(message); + async postMessage(message: string, files?: string[]) { + await this.centerView.postMessage(message, files); } async openUserAccountMenu() { @@ -106,4 +107,16 @@ export default class ChannelsPage { await expect(this.profileModal.container).toBeVisible(); return this.profileModal; } + + async openProfilePopover(post: ChannelsPost) { + // Find and click the post's user avatar to open the profile popover + await post.hover(); + await post.profileIcon.click(); + + // Wait for the profile popover to be visible + const popover = this.userProfilePopover; + await expect(popover.container).toBeVisible(); + + return popover; + } } diff --git a/e2e-tests/playwright/package-lock.json b/e2e-tests/playwright/package-lock.json index 1e8b9cdcc6..044c84531b 100644 --- a/e2e-tests/playwright/package-lock.json +++ b/e2e-tests/playwright/package-lock.json @@ -13,15 +13,15 @@ "@mattermost/client": "file:../../webapp/platform/client", "@mattermost/playwright-lib": "*", "@mattermost/types": "file:../../webapp/platform/types", - "@playwright/test": "1.51.1", + "@playwright/test": "1.52.0", "cross-env": "7.0.3", "dayjs": "1.11.13", - "zod": "3.24.2" + "zod": "3.24.3" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "8.29.0", - "eslint": "9.24.0", - "eslint-import-resolver-typescript": "4.3.2", + "@typescript-eslint/eslint-plugin": "8.30.1", + "eslint": "9.25.0", + "eslint-import-resolver-typescript": "4.3.3", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.31.0", "prettier": "3.5.3", @@ -71,25 +71,25 @@ "@axe-core/playwright": "4.10.1", "@mattermost/client": "file:../../../webapp/platform/client", "@mattermost/types": "file:../../../webapp/platform/types", - "@percy/cli": "1.30.9", - "@percy/playwright": "1.0.7", + "@percy/cli": "1.30.10", + "@percy/playwright": "1.0.8", "async-wait-until": "2.0.27", "axe-core": "4.10.3", "deepmerge": "4.3.1", - "dotenv": "16.4.7", + "dotenv": "16.5.0", "mime-types": "3.0.1", "uuid": "11.1.0" }, "devDependencies": { "@rollup/plugin-typescript": "12.1.2", "@types/mime-types": "2.1.4", - "@types/node": "22.14.0", - "@types/react": "19.1.0", - "rollup": "4.39.0", + "@types/node": "22.14.1", + "@types/react": "19.1.2", + "rollup": "4.40.0", "rollup-plugin-copy": "3.5.0" }, "peerDependencies": { - "@playwright/test": "1.51.1" + "@playwright/test": "1.52.0" } }, "node_modules/@axe-core/playwright": { @@ -128,21 +128,21 @@ } }, "node_modules/@emnapi/core": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.0.tgz", - "integrity": "sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.0.1", + "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz", - "integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", "dev": true, "license": "MIT", "optional": true, @@ -151,9 +151,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", - "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", "dev": true, "license": "MIT", "optional": true, @@ -162,9 +162,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", - "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", + "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", "dev": true, "license": "MIT", "dependencies": { @@ -240,9 +240,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -301,9 +301,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.24.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.24.0.tgz", - "integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==", + "version": "9.25.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.0.tgz", + "integrity": "sha512-iWhsUS8Wgxz9AXNfvfOPFSW4VfMXdVhp1hjkZVhXCrpgh/aLcc45rX6MPu+tIVUWDw0HfNwth7O28M1xDxNf9w==", "dev": true, "license": "MIT", "engines": { @@ -334,19 +334,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -426,9 +413,9 @@ "link": true }, "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.8.tgz", - "integrity": "sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.9.tgz", + "integrity": "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==", "dev": true, "license": "MIT", "optional": true, @@ -474,20 +461,20 @@ } }, "node_modules/@percy/cli": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.30.9.tgz", - "integrity": "sha512-YXP7WJ2tc+ruzrOWPsMuDJ+08qpMdkAuzmiOX/qf8cC/qAHPbVWfsR40ktCHZcny9/HURUv2aYpRCZprAYwijQ==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.30.10.tgz", + "integrity": "sha512-fKASLI1Qj38v64Vb6VktRsW2MZnxQ5JBDGPPk+sP/bSiTZ0D0GC5pz2s+tQaGD7wReYNy9JKzSujrkJqFiBbSg==", "license": "MIT", "dependencies": { - "@percy/cli-app": "1.30.9", - "@percy/cli-build": "1.30.9", - "@percy/cli-command": "1.30.9", - "@percy/cli-config": "1.30.9", - "@percy/cli-exec": "1.30.9", - "@percy/cli-snapshot": "1.30.9", - "@percy/cli-upload": "1.30.9", - "@percy/client": "1.30.9", - "@percy/logger": "1.30.9" + "@percy/cli-app": "1.30.10", + "@percy/cli-build": "1.30.10", + "@percy/cli-command": "1.30.10", + "@percy/cli-config": "1.30.10", + "@percy/cli-exec": "1.30.10", + "@percy/cli-snapshot": "1.30.10", + "@percy/cli-upload": "1.30.10", + "@percy/client": "1.30.10", + "@percy/logger": "1.30.10" }, "bin": { "percy": "bin/run.cjs" @@ -497,39 +484,39 @@ } }, "node_modules/@percy/cli-app": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/cli-app/-/cli-app-1.30.9.tgz", - "integrity": "sha512-e9urhKvAeIomaf2dcsriLe8t0/sH54RZmxuYOLaLA4fspHuWgGutZ77EY96EgFCTXCwWO8NmliuduefFht7Qow==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/cli-app/-/cli-app-1.30.10.tgz", + "integrity": "sha512-XL1vW4A2C74DOgXx6kilxUxGVtAgQDik+J1Gyr0SF324cpW6fIDB55ktLSvbv8z4qRqUIhEEWyOAWGpngwv8og==", "license": "MIT", "dependencies": { - "@percy/cli-command": "1.30.9", - "@percy/cli-exec": "1.30.9" + "@percy/cli-command": "1.30.10", + "@percy/cli-exec": "1.30.10" }, "engines": { "node": ">=14" } }, "node_modules/@percy/cli-build": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.30.9.tgz", - "integrity": "sha512-4Uj9GsAPLOI+nVhLRWGkJjxpcGGA+zdAn+Sr50LT6tMJWb+cqwCign89wQMrxzjJgC3CAlfkbQUGr9rxzy4q8Q==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.30.10.tgz", + "integrity": "sha512-mMj1asBNW8oYavMuMtg3TU72+UoCg/8eoKshZ8jb4i9Tg/nWG1q9wfbS9/lSdenKPjQuqzfpQ8TB/Q/UI2cajA==", "license": "MIT", "dependencies": { - "@percy/cli-command": "1.30.9" + "@percy/cli-command": "1.30.10" }, "engines": { "node": ">=14" } }, "node_modules/@percy/cli-command": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.30.9.tgz", - "integrity": "sha512-6BNjnA/2Cjx2lbR6QQ7qv9Y3fehgTsVBM2aWDNg7JEi7zkHJukE+wat3tcVQXrAbIeliOaqClUeYWlI5IfDmhg==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.30.10.tgz", + "integrity": "sha512-xvTZBTpjQMxihEVI3bEjIfBRjZ5momxFeFgLUFQUhQZXPtNp3o+vWFI1CCltjkK2JAXK/q883ozoeiuKgoacWg==", "license": "MIT", "dependencies": { - "@percy/config": "1.30.9", - "@percy/core": "1.30.9", - "@percy/logger": "1.30.9" + "@percy/config": "1.30.10", + "@percy/core": "1.30.10", + "@percy/logger": "1.30.10" }, "bin": { "percy-cli-readme": "bin/readme.js" @@ -539,25 +526,25 @@ } }, "node_modules/@percy/cli-config": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.30.9.tgz", - "integrity": "sha512-2qH2ZS+g+Q6ifL+JQGBMu2+3jk1ToOKk3CCj/V27ddqodwv/hEz34oFtQzvO35+r/gSv4BFzMTQ6e0+u9sCdOQ==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.30.10.tgz", + "integrity": "sha512-8xb4WhC67qiX6lRmpKnJhhvJiYVvTC4bQ9/BZYUpk6r3Ftq8ViOe0sySVj3Ms0vF1IwPn2t0E1osqKOvtKumFg==", "license": "MIT", "dependencies": { - "@percy/cli-command": "1.30.9" + "@percy/cli-command": "1.30.10" }, "engines": { "node": ">=14" } }, "node_modules/@percy/cli-exec": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.30.9.tgz", - "integrity": "sha512-K6wkAVE5JzgHCNGh4v43rP5TFnQzH/2DWgdwO9677hTbhLMvkXqnKODqCQrat+pddJIbRIaedFR0Ra6XUGt89A==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.30.10.tgz", + "integrity": "sha512-NV2KqC15Y9e0PyCqQrt01QuOT7sIXhs3yrovuVvbutqNL2+Ol25eHGoNJG+kMo9jSJM36ZWmD9am4eX6L2VBaQ==", "license": "MIT", "dependencies": { - "@percy/cli-command": "1.30.9", - "@percy/logger": "1.30.9", + "@percy/cli-command": "1.30.10", + "@percy/logger": "1.30.10", "cross-spawn": "^7.0.3", "which": "^2.0.2" }, @@ -566,12 +553,12 @@ } }, "node_modules/@percy/cli-snapshot": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.30.9.tgz", - "integrity": "sha512-FqECnduGub6oCYQgyfx9+7w37MH2qGB0k555NVfMP8KpIRLZcZ2FM8K7++JK8En549EMBRf/8XZY46KqDTsMTg==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.30.10.tgz", + "integrity": "sha512-xlrJj9VvoWLuWA0wjmY2cvvtOvzzPzGuHET14zUOhM7leBifGI8Gz6wNGtXKblKAtJUg+0dYPBZd0vNO6ZVIeA==", "license": "MIT", "dependencies": { - "@percy/cli-command": "1.30.9", + "@percy/cli-command": "1.30.10", "yaml": "^2.0.0" }, "engines": { @@ -579,12 +566,12 @@ } }, "node_modules/@percy/cli-upload": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.30.9.tgz", - "integrity": "sha512-6iOzVcPJ3b8a/dJ/duxG+IfNnZKXqMzLNflYyBXHQAmFC1dFlERAvuwp4niJc8ugYQ9FUB5uefudBIK+Zgjv0A==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.30.10.tgz", + "integrity": "sha512-6+aYDC3eZk+P7PpxftKfu/sSXyb0QpN4Rdtynsy5jt9RobrEL7q7YyZIbeksZm/WtgYszIa8yYQP3i5LUvfZdQ==", "license": "MIT", "dependencies": { - "@percy/cli-command": "1.30.9", + "@percy/cli-command": "1.30.10", "fast-glob": "^3.2.11", "image-size": "^1.0.0" }, @@ -593,13 +580,13 @@ } }, "node_modules/@percy/client": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.30.9.tgz", - "integrity": "sha512-blu8vU+1OdIF+mBqp35PUFJdzThSf3COkD6ihcO5da21SMV8OxHLbeKE4Oz9mcg/Mg4xOJzt9GCmxkruKXql9w==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.30.10.tgz", + "integrity": "sha512-eIyuiBgiv5e+x8B14bOKkl38cYjTud3OYjN4Uo5uqo/raBaFlI24aoOMtSyq0TVKBNgPVEgmNAgQxj+P9fHFtA==", "license": "MIT", "dependencies": { - "@percy/env": "1.30.9", - "@percy/logger": "1.30.9", + "@percy/env": "1.30.10", + "@percy/logger": "1.30.10", "pac-proxy-agent": "^7.0.2", "pako": "^2.1.0" }, @@ -608,12 +595,12 @@ } }, "node_modules/@percy/config": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.30.9.tgz", - "integrity": "sha512-ZzLtHdec0lXFCcixDd34/zKzFplDyVbHEIRWibQioWe9ldGnmsyyvFVZjZ0Gorr91P+mKB19l+PIjvFR86kFzg==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.30.10.tgz", + "integrity": "sha512-ixzxZ+rwHUCSOxFpAEEsqDfJVnb5mIYfnayGjsaIe1hnMvo/t/K9/npu6JhBGHR/kpaummJQEPCRxEuclN93Ew==", "license": "MIT", "dependencies": { - "@percy/logger": "1.30.9", + "@percy/logger": "1.30.10", "ajv": "^8.6.2", "cosmiconfig": "^8.0.0", "yaml": "^2.0.0" @@ -645,18 +632,18 @@ "license": "MIT" }, "node_modules/@percy/core": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.30.9.tgz", - "integrity": "sha512-b+uGaMkl1kuHkS9iODZaNQAKBNM20pLa9aygYLZgySMtE+nnr3S6ThrUukN6I//wXbBuaWxsrHHER2pIHBPpRQ==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.30.10.tgz", + "integrity": "sha512-6oZkiOdjy3YqFpZHVX9ZCHJKxslVEE9cgfqXI09Zba4iFKpG9PJ0pHFc/uee89G0uJj82sqIMu8Jgm833NLyMQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { - "@percy/client": "1.30.9", - "@percy/config": "1.30.9", - "@percy/dom": "1.30.9", - "@percy/logger": "1.30.9", - "@percy/monitoring": "1.30.9", - "@percy/webdriver-utils": "1.30.9", + "@percy/client": "1.30.10", + "@percy/config": "1.30.10", + "@percy/dom": "1.30.10", + "@percy/logger": "1.30.10", + "@percy/monitoring": "1.30.10", + "@percy/webdriver-utils": "1.30.10", "content-disposition": "^0.5.4", "cross-spawn": "^7.0.3", "extract-zip": "^2.0.1", @@ -695,41 +682,41 @@ } }, "node_modules/@percy/dom": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.30.9.tgz", - "integrity": "sha512-BT1ormk3PqKewsGv/bzaB3OmAdY/hOBmcfBogTSjT2yzFx+Mg6sngr2kQtFSxFM1gM78SK7oMlY+L1QVa3F0Sg==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.30.10.tgz", + "integrity": "sha512-EJUHmrh6UE8YD3MZ1Hnrc2sTVAlQt2xTC0wWSBDVz2h1/IUvHw5yE7TQHhp615IYOmurI3k8AKjmdI7b70uD7Q==", "license": "MIT" }, "node_modules/@percy/env": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.30.9.tgz", - "integrity": "sha512-gaEgjHAIs6O/TC+CXdYT6N/KRyFGboZfQnHKc6Xu165akZpOf0ukfKoHt+9IY44jS6WhsaTxTQOlUtKzf3SEsA==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.30.10.tgz", + "integrity": "sha512-kPJsACurTY9/5TZH8xDMDMaz2Yas9SLr0DqlCqIaqBWxikDzdWXUiDWwAIab0Dik5oAFbQAXC7f4V+0MBlZWag==", "license": "MIT", "dependencies": { - "@percy/logger": "1.30.9" + "@percy/logger": "1.30.10" }, "engines": { "node": ">=14" } }, "node_modules/@percy/logger": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.30.9.tgz", - "integrity": "sha512-ePSUyaSZe1Ot+p6BjnyiFlfKCoX7gkePO23mTZwRBiE0AaAr4TVmilG10z/eR/Ta8Il3Dc+gYa9S2y8ldxGjng==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.30.10.tgz", + "integrity": "sha512-ABSzY/WVI/ePXac73Q6qEUKqUZ1+NJswzbZy/I/fgiBWmkzf4hKIrlD9RQZYmkjLWVESbjKPhZTmH3bntO084Q==", "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@percy/monitoring": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/monitoring/-/monitoring-1.30.9.tgz", - "integrity": "sha512-tIdfpT3Lz5p8kswfRPw+sCUEEVx373v0DfpnDEsOgEqm2VAGixLp+hseL1aObRHdJqkIxLAERqlY+j/XXZnjNg==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/monitoring/-/monitoring-1.30.10.tgz", + "integrity": "sha512-Iaa6nx1GFc92uZdYHM1EJfyn4aIjm/DWPOp6RbF4eSFZhlpqhvqBQgXvgDLylNNrKmdaXsFIE56BjpJZhamtsQ==", "license": "MIT", "dependencies": { - "@percy/config": "1.30.9", - "@percy/logger": "1.30.9", - "@percy/sdk-utils": "1.30.9", + "@percy/config": "1.30.10", + "@percy/logger": "1.30.10", + "@percy/sdk-utils": "1.30.10", "systeminformation": "^5.25.11" }, "engines": { @@ -737,9 +724,9 @@ } }, "node_modules/@percy/playwright": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@percy/playwright/-/playwright-1.0.7.tgz", - "integrity": "sha512-eHRnbMcBqNB9krGUoSCFjr9Su4Njk1NjDquEgZ4zYzOzjoeoNdnvnXX+EFN5iNwiyiBuXk9qLxF1Bfi86ccyiA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@percy/playwright/-/playwright-1.0.8.tgz", + "integrity": "sha512-v70IKPVy15mDxis5+of2S62AJHdeG99BlA08oj/XpK68CVyNUSE6I8I54EUm3PbEeKxdZLWTdhX+8I69UkxPjA==", "license": "MIT", "engines": { "node": ">=14" @@ -749,34 +736,34 @@ } }, "node_modules/@percy/sdk-utils": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.30.9.tgz", - "integrity": "sha512-vgzWUa1eDWRS+q/zlVILwP4QDFdmxPIiH7FbQ2UGA4rh3mDYporIq5OY+x2YMMV9/Q4uhi1p3ZxXW2Svg6cOHw==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.30.10.tgz", + "integrity": "sha512-EOFm6XDbXIpo1YjF+JWxNCW5TB0ZaqjQfHLtOCmffhHi2T0MCXSAHdNxeTUyADyySzWjD4bKba/PbZwwTVE8Zw==", "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@percy/webdriver-utils": { - "version": "1.30.9", - "resolved": "https://registry.npmjs.org/@percy/webdriver-utils/-/webdriver-utils-1.30.9.tgz", - "integrity": "sha512-pxrBScc4jIZKgEXxqPxw2zmBIwkgoUnsfkNHSu+vT4IztQHsuwizE4UkSPVndUZyCQeZ3ar/FYJTeqp+Kwx5GQ==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@percy/webdriver-utils/-/webdriver-utils-1.30.10.tgz", + "integrity": "sha512-dTxSa0Dy7SZrXcjzy+kvWFIxBb3n/YAPJWMMX063ZMeAOINx5MhZ+JizOijW0QXXhy/UJAmW+2Q3VB32kj391Q==", "license": "MIT", "dependencies": { - "@percy/config": "1.30.9", - "@percy/sdk-utils": "1.30.9" + "@percy/config": "1.30.10", + "@percy/sdk-utils": "1.30.10" }, "engines": { "node": ">=14" } }, "node_modules/@playwright/test": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.51.1.tgz", - "integrity": "sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.52.0.tgz", + "integrity": "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==", "license": "Apache-2.0", "dependencies": { - "playwright": "1.51.1" + "playwright": "1.52.0" }, "bin": { "playwright": "cli.js" @@ -849,9 +836,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz", - "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", + "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", "cpu": [ "arm" ], @@ -863,9 +850,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz", - "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", + "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", "cpu": [ "arm64" ], @@ -877,9 +864,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz", - "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", + "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", "cpu": [ "arm64" ], @@ -891,9 +878,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz", - "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", + "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", "cpu": [ "x64" ], @@ -905,9 +892,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz", - "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", + "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", "cpu": [ "arm64" ], @@ -919,9 +906,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz", - "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", + "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", "cpu": [ "x64" ], @@ -933,9 +920,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz", - "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", + "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", "cpu": [ "arm" ], @@ -947,9 +934,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz", - "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", + "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", "cpu": [ "arm" ], @@ -961,9 +948,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz", - "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", + "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", "cpu": [ "arm64" ], @@ -975,9 +962,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz", - "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", + "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", "cpu": [ "arm64" ], @@ -989,9 +976,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz", - "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", + "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", "cpu": [ "loong64" ], @@ -1003,9 +990,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz", - "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", + "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", "cpu": [ "ppc64" ], @@ -1017,9 +1004,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz", - "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", + "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", "cpu": [ "riscv64" ], @@ -1031,9 +1018,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz", - "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", + "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", "cpu": [ "riscv64" ], @@ -1045,9 +1032,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz", - "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", + "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", "cpu": [ "s390x" ], @@ -1059,9 +1046,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", - "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", + "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", "cpu": [ "x64" ], @@ -1073,9 +1060,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz", - "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz", + "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==", "cpu": [ "x64" ], @@ -1087,9 +1074,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz", - "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", + "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", "cpu": [ "arm64" ], @@ -1101,9 +1088,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz", - "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", + "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", "cpu": [ "ia32" ], @@ -1115,9 +1102,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz", - "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", + "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", "cpu": [ "x64" ], @@ -1209,9 +1196,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", - "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", + "version": "22.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", + "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -1219,9 +1206,9 @@ } }, "node_modules/@types/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.0.tgz", - "integrity": "sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==", + "version": "19.1.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", + "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", "dev": true, "license": "MIT", "dependencies": { @@ -1239,17 +1226,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", - "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.30.1.tgz", + "integrity": "sha512-v+VWphxMjn+1t48/jO4t950D6KR8JaJuNXzi33Ve6P8sEmPr5k6CEXjdGwT6+LodVnEa91EQCtwjWNUCPweo+Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/type-utils": "8.29.0", - "@typescript-eslint/utils": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.30.1", + "@typescript-eslint/type-utils": "8.30.1", + "@typescript-eslint/utils": "8.30.1", + "@typescript-eslint/visitor-keys": "8.30.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1269,17 +1256,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", - "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.30.1.tgz", + "integrity": "sha512-H+vqmWwT5xoNrXqWs/fesmssOW70gxFlgcMlYcBaWNPIEWDgLa4W9nkSPmhuOgLnXq9QYgkZ31fhDyLhleCsAg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.30.1", + "@typescript-eslint/types": "8.30.1", + "@typescript-eslint/typescript-estree": "8.30.1", + "@typescript-eslint/visitor-keys": "8.30.1", "debug": "^4.3.4" }, "engines": { @@ -1295,14 +1282,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", - "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.30.1.tgz", + "integrity": "sha512-+C0B6ChFXZkuaNDl73FJxRYT0G7ufVPOSQkqkpM/U198wUwUFOtgo1k/QzFh1KjpBitaK7R1tgjVz6o9HmsRPg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0" + "@typescript-eslint/types": "8.30.1", + "@typescript-eslint/visitor-keys": "8.30.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1313,14 +1300,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", - "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.30.1.tgz", + "integrity": "sha512-64uBF76bfQiJyHgZISC7vcNz3adqQKIccVoKubyQcOnNcdJBvYOILV1v22Qhsw3tw3VQu5ll8ND6hycgAR5fEA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/typescript-estree": "8.30.1", + "@typescript-eslint/utils": "8.30.1", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -1337,9 +1324,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", - "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.30.1.tgz", + "integrity": "sha512-81KawPfkuulyWo5QdyG/LOKbspyyiW+p4vpn4bYO7DM/hZImlVnFwrpCTnmNMOt8CvLRr5ojI9nU1Ekpw4RcEw==", "dev": true, "license": "MIT", "engines": { @@ -1351,14 +1338,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", - "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.30.1.tgz", + "integrity": "sha512-kQQnxymiUy9tTb1F2uep9W6aBiYODgq5EMSk6Nxh4Z+BDUoYUSa029ISs5zTzKBFnexQEh71KqwjKnRz58lusQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/types": "8.30.1", + "@typescript-eslint/visitor-keys": "8.30.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1378,16 +1365,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.30.1.tgz", + "integrity": "sha512-T/8q4R9En2tcEsWPQgB5BQ0XJVOtfARcUvOa8yJP3fh9M/mXraLxZrkCfGb6ChrO/V3W+Xbd04RacUEqk1CFEQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0" + "@typescript-eslint/scope-manager": "8.30.1", + "@typescript-eslint/types": "8.30.1", + "@typescript-eslint/typescript-estree": "8.30.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1402,13 +1389,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", - "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.30.1.tgz", + "integrity": "sha512-aEhgas7aJ6vZnNFC7K4/vMGDGyOiqWcYZPpIWrTKuTAlsvDNKy2GFDqh9smL+iq069ZvR0YzEeq0B8NJlLzjFA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/types": "8.30.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -1433,9 +1420,9 @@ } }, "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.4.1.tgz", - "integrity": "sha512-8Tv+Bsd0BjGwfEedIyor4inw8atppRxM5BdUnIt+3mAm/QXUm7Dw74CHnXpfZKXkp07EXJGiA8hStqCINAWhdw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.6.1.tgz", + "integrity": "sha512-wbOgzEUDjfEmziD0TKMdDoRsCa0zHhtBWcrllJr7iZGPvSfrU7m5VGlpbO3McCi1LLsv7FFvUWej5nFQ+Emigw==", "cpu": [ "arm64" ], @@ -1447,9 +1434,9 @@ ] }, "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.4.1.tgz", - "integrity": "sha512-X8c3PhWziEMKAzZz+YAYWfwawi5AEgzy/hmfizAB4C70gMHLKmInJcp1270yYAOs7z07YVFI220pp50z24Jk3A==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.6.1.tgz", + "integrity": "sha512-d5hh78dlTaoFXZTQuDLUxxmV/tS3etw11HCm1a1q5/nUrfgLBUkZLn4u7Pg/jN4ois6aMCabcbt5DZkf4dIx1g==", "cpu": [ "x64" ], @@ -1461,9 +1448,9 @@ ] }, "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.4.1.tgz", - "integrity": "sha512-UUr/nREy1UdtxXQnmLaaTXFGOcGxPwNIzeJdb3KXai3TKtC1UgNOB9s8KOA4TaxOUBR/qVgL5BvBwmUjD5yuVA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.6.1.tgz", + "integrity": "sha512-PEV8ICqDKe8ujbxO9FL62/MqNNN2BvahNgtkG5Z49BNNBGtogvzkbgf5GeyrIIt1b3ky1w7IllVRAyqIUeuFEg==", "cpu": [ "x64" ], @@ -1475,9 +1462,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.4.1.tgz", - "integrity": "sha512-e3pII53dEeS8inkX6A1ad2UXE0nuoWCqik4kOxaDnls0uJUq0ntdj5d9IYd+bv5TDwf9DSge/xPOvCmRYH+Tsw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.6.1.tgz", + "integrity": "sha512-MGBBPrWH0nKMkUvAJ8Qs3Fe2ObHY+t1TVylJdMFY620qvFcu7d0bc89O0tJuZtkzLAx0sUSHQNYQcczhVHn2wQ==", "cpu": [ "arm" ], @@ -1489,9 +1476,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.4.1.tgz", - "integrity": "sha512-e/AKKd9gR+HNmVyDEPI/PIz2t0DrA3cyonHNhHVjrkxe8pMCiYiqhtn1+h+yIpHUtUlM6Y1FNIdivFa+r7wrEQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.6.1.tgz", + "integrity": "sha512-hEmYRcRhde66Pluis2epKWoow2qbeb5PWhX+s/VaqNbfxKIotV9EI88K/9jKH8s2Mwa8Xy/bfWLfDZzfMNtr6Q==", "cpu": [ "arm" ], @@ -1503,9 +1490,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.4.1.tgz", - "integrity": "sha512-vtIu34luF1jRktlHtiwm2mjuE8oJCsFiFr8hT5+tFQdqFKjPhbJXn83LswKsOhy0GxAEevpXDI4xxEwkjuXIPA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.6.1.tgz", + "integrity": "sha512-ffY3KJvGXsPw+dYr7MDJcSpfJDw2sc7Y9A+Lz+xk89CX+cEzBt/sxbCY4n8Ew6xNC8jKRoE5+1ELVRxbpc5ozw==", "cpu": [ "arm64" ], @@ -1517,9 +1504,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.4.1.tgz", - "integrity": "sha512-H3PaOuGyhFXiyJd+09uPhGl4gocmhyi1BRzvsP8Lv5AQO3p3/ZY7WjV4t2NkBksm9tMjf3YbOVHyPWi2eWsNYw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.6.1.tgz", + "integrity": "sha512-dyH9+OAzA3klgwkVzMxz5jaYTNqcYPfp8YSSTugF8lC2M3pTrToPrbG+kPEAds5ejBgtkGGpHJ0ONRf1JblLoA==", "cpu": [ "arm64" ], @@ -1531,9 +1518,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.4.1.tgz", - "integrity": "sha512-4+GmJcaaFntCi1S01YByqp8wLMjV/FyQyHVGm0vedIhL1Vfx7uHkz/sZmKsidRwokBGuxi92GFmSzqT2O8KcNA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.6.1.tgz", + "integrity": "sha512-8y2ayqhBL0Y7KiuE1ZvuTwv/DmkjCRZQoSE2gvid3SkxRjJ6qJ3EfG/Yv8O9dktv3n6z++Q7ZtAUlKRsiN1wpQ==", "cpu": [ "ppc64" ], @@ -1544,10 +1531,24 @@ "linux" ] }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.6.1.tgz", + "integrity": "sha512-GZQe8ADu2Y88IVgbob1e8RpVH5MlMWjbDC5X/USa6UZnWQn7sKrO7XdM/9HQHOir+jeu7tJjTBf3tyrq7qtKcA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.4.1.tgz", - "integrity": "sha512-6RDQVCmtFYTlhy89D5ixTqo9bTQqFhvNN0Ey1wJs5r+01Dq15gPHRXv2jF2bQATtMrOfYwv+R2ZR9ew1N1N3YQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.6.1.tgz", + "integrity": "sha512-AkWpaZul4Q0bW1IJdfS6vxSoC0Gsjf/PTF1rgCCtDV7b8V25iGazCK02X/wLxcEmIh9uYq2UfasLal0DfKdPZw==", "cpu": [ "s390x" ], @@ -1559,9 +1560,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.4.1.tgz", - "integrity": "sha512-XpU9uzIkD86+19NjCXxlVPISMUrVXsXo5htxtuG+uJ59p5JauSRZsIxQxzzfKzkxEjdvANPM/lS1HFoX6A6QeA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.6.1.tgz", + "integrity": "sha512-aZlTp6kjbKFFOiDYwknTxB8YUvWLT+hwMbif3cAlvF/c1jtwNLKPGFP/iKx7HkYpRSJYbHf/N0Ns5HkdgeUM9A==", "cpu": [ "x64" ], @@ -1573,9 +1574,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.4.1.tgz", - "integrity": "sha512-3CDjG/spbTKCSHl66QP2ekHSD+H34i7utuDIM5gzoNBcZ1gTO0Op09Wx5cikXnhORRf9+HyDWzm37vU1PLSM1A==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.6.1.tgz", + "integrity": "sha512-A9P2H+/LKHtuUfk/REkWrrawWXx2Z5atIHuU1I5Sv8uOj+NirmoCOPS8H+nfZyemsX4vzSe4id/KDYSQGsnPrA==", "cpu": [ "x64" ], @@ -1587,9 +1588,9 @@ ] }, "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.4.1.tgz", - "integrity": "sha512-50tYhvbCTnuzMn7vmP8IV2UKF7ITo1oihygEYq9wW2DUb/Y+QMqBHJUSCABRngATjZ4shOK6f2+s0gQX6ElENQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.6.1.tgz", + "integrity": "sha512-Y9Sz1GXo/2z43KiMh4MfP0rTknsFNOsTjly068QhGJYO6qjIsvpbf4vhDnMFTDlBz8bDsibG1ggZ6BRjEzjmiA==", "cpu": [ "wasm32" ], @@ -1597,16 +1598,16 @@ "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.8" + "@napi-rs/wasm-runtime": "^0.2.9" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.4.1.tgz", - "integrity": "sha512-KyJiIne/AqV4IW0wyQO34wSMuJwy3VxVQOfIXIPyQ/Up6y/zi2P/WwXb78gHsLiGRUqCA9LOoCX+6dQZde0g1g==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.6.1.tgz", + "integrity": "sha512-Z2gYsbEsv0eyD/wx8uDnGBmo7n9z1oAJnjpdovq3XkdAjKoIVNCRRlbrFQG0HkVuqBAxrJnWFNECfGebLrz7mA==", "cpu": [ "arm64" ], @@ -1618,9 +1619,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.4.1.tgz", - "integrity": "sha512-y2NUD7pygrBolN2NoXUrwVqBpKPhF8DiSNE5oB5/iFO49r2DpoYqdj5HPb3F42fPBH5qNqj6Zg63+xCEzAD2hw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.6.1.tgz", + "integrity": "sha512-bpGw2JV9NN1zKt/jXpOB+U9AdqdcPdqA2tF8Or6axNoOl3gBtSaooEYx17NpQra33Wx/d7VX8jWv+3LX1dggJA==", "cpu": [ "ia32" ], @@ -1632,9 +1633,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.4.1.tgz", - "integrity": "sha512-hVXaObGI2lGFmrtT77KSbPQ3I+zk9IU500wobjk0+oX59vg/0VqAzABNtt3YSQYgXTC2a/LYxekLfND/wlt0yQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.6.1.tgz", + "integrity": "sha512-uNnVmvDLZBDQ4sLFNTugTtzUH9LEoHXG46HdWaih+pK4knwi+wcz+nd0fQC92n/dH4PwPc5T8XArvlCKpfU6vQ==", "cpu": [ "x64" ], @@ -2318,9 +2319,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -2543,20 +2544,20 @@ } }, "node_modules/eslint": { - "version": "9.24.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.24.0.tgz", - "integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==", + "version": "9.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.0.tgz", + "integrity": "sha512-MsBdObhM4cEwkzCiraDv7A6txFXEqtNXOb877TsSp2FCkBNl8JfVQrmiuDqC1IkejT6JLPzYBXx/xAiYhyzgGA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.0", - "@eslint/config-helpers": "^0.2.0", - "@eslint/core": "^0.12.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.13.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.24.0", - "@eslint/plugin-kit": "^0.2.7", + "@eslint/js": "9.25.0", + "@eslint/plugin-kit": "^0.2.8", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -2626,9 +2627,9 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.3.2.tgz", - "integrity": "sha512-T2LqBXj87ndEC9t1LrDiPkzalSFzD4rrXr6BTzGdgMx1jdQM4T972guQvg7Ih+LNO51GURXI/qMHS5GF3h1ilw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.3.3.tgz", + "integrity": "sha512-mBgGvAG+3NGx2yk8w/qiBDOrQNwNe0LfxNzimnj0B7lqElJUV12X+1wf81oERAKpPVl506z53Xi1sns4/pvdTg==", "dev": true, "license": "ISC", "dependencies": { @@ -2636,8 +2637,8 @@ "get-tsconfig": "^4.10.0", "is-bun-module": "^2.0.0", "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.12", - "unrs-resolver": "^1.4.1" + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.0" }, "engines": { "node": "^16.17.0 || >=18.6.0" @@ -4268,6 +4269,22 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/napi-postinstall": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.1.5.tgz", + "integrity": "sha512-HI5bHONOUYqV+FJvueOSgjRxHTLB25a3xIv59ugAxFe7xRNbW96hyYbMbsKzl+QvFV9mN/SrtHwiU+vYhMwA7Q==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4601,12 +4618,12 @@ } }, "node_modules/playwright": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.1.tgz", - "integrity": "sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", + "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==", "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.51.1" + "playwright-core": "1.52.0" }, "bin": { "playwright": "cli.js" @@ -4619,9 +4636,9 @@ } }, "node_modules/playwright-core": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.1.tgz", - "integrity": "sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", + "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" @@ -4835,9 +4852,9 @@ } }, "node_modules/rollup": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", - "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", + "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", "dev": true, "license": "MIT", "dependencies": { @@ -4851,26 +4868,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.39.0", - "@rollup/rollup-android-arm64": "4.39.0", - "@rollup/rollup-darwin-arm64": "4.39.0", - "@rollup/rollup-darwin-x64": "4.39.0", - "@rollup/rollup-freebsd-arm64": "4.39.0", - "@rollup/rollup-freebsd-x64": "4.39.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.39.0", - "@rollup/rollup-linux-arm-musleabihf": "4.39.0", - "@rollup/rollup-linux-arm64-gnu": "4.39.0", - "@rollup/rollup-linux-arm64-musl": "4.39.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.39.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0", - "@rollup/rollup-linux-riscv64-gnu": "4.39.0", - "@rollup/rollup-linux-riscv64-musl": "4.39.0", - "@rollup/rollup-linux-s390x-gnu": "4.39.0", - "@rollup/rollup-linux-x64-gnu": "4.39.0", - "@rollup/rollup-linux-x64-musl": "4.39.0", - "@rollup/rollup-win32-arm64-msvc": "4.39.0", - "@rollup/rollup-win32-ia32-msvc": "4.39.0", - "@rollup/rollup-win32-x64-msvc": "4.39.0", + "@rollup/rollup-android-arm-eabi": "4.40.0", + "@rollup/rollup-android-arm64": "4.40.0", + "@rollup/rollup-darwin-arm64": "4.40.0", + "@rollup/rollup-darwin-x64": "4.40.0", + "@rollup/rollup-freebsd-arm64": "4.40.0", + "@rollup/rollup-freebsd-x64": "4.40.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", + "@rollup/rollup-linux-arm-musleabihf": "4.40.0", + "@rollup/rollup-linux-arm64-gnu": "4.40.0", + "@rollup/rollup-linux-arm64-musl": "4.40.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-musl": "4.40.0", + "@rollup/rollup-linux-s390x-gnu": "4.40.0", + "@rollup/rollup-linux-x64-gnu": "4.40.0", + "@rollup/rollup-linux-x64-musl": "4.40.0", + "@rollup/rollup-win32-arm64-msvc": "4.40.0", + "@rollup/rollup-win32-ia32-msvc": "4.40.0", + "@rollup/rollup-win32-x64-msvc": "4.40.0", "fsevents": "~2.3.2" } }, @@ -5354,13 +5371,13 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.3", + "fdir": "^6.4.4", "picomatch": "^4.0.2" }, "engines": { @@ -5371,9 +5388,9 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -5584,30 +5601,35 @@ } }, "node_modules/unrs-resolver": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.4.1.tgz", - "integrity": "sha512-MhPB3wBI5BR8TGieTb08XuYlE8oFVEXdSAgat3psdlRyejl8ojQ8iqPcjh094qCZ1r+TnkxzP6BeCd/umfHckQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.6.1.tgz", + "integrity": "sha512-PLDI7BRVaI1C0x8mXr8leLPIOPPF1wCRFyKIswJAPJG3LdMxWNiAVvlTvmff5DSezapWFLagk18NF2cCNhe8Fg==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.1.1" + }, "funding": { "url": "https://github.com/sponsors/JounQin" }, "optionalDependencies": { - "@unrs/resolver-binding-darwin-arm64": "1.4.1", - "@unrs/resolver-binding-darwin-x64": "1.4.1", - "@unrs/resolver-binding-freebsd-x64": "1.4.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.4.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.4.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.4.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.4.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.4.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.4.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.4.1", - "@unrs/resolver-binding-linux-x64-musl": "1.4.1", - "@unrs/resolver-binding-wasm32-wasi": "1.4.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.4.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.4.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.4.1" + "@unrs/resolver-binding-darwin-arm64": "1.6.1", + "@unrs/resolver-binding-darwin-x64": "1.6.1", + "@unrs/resolver-binding-freebsd-x64": "1.6.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.6.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.6.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.6.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.6.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.6.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.6.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.6.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.6.1", + "@unrs/resolver-binding-linux-x64-musl": "1.6.1", + "@unrs/resolver-binding-wasm32-wasi": "1.6.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.6.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.6.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.6.1" } }, "node_modules/uri-js": { @@ -5810,9 +5832,9 @@ } }, "node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "version": "3.24.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", + "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/e2e-tests/playwright/package.json b/e2e-tests/playwright/package.json index 57f79cdedc..9c6adb67a9 100644 --- a/e2e-tests/playwright/package.json +++ b/e2e-tests/playwright/package.json @@ -24,15 +24,15 @@ "@mattermost/client": "file:../../webapp/platform/client", "@mattermost/playwright-lib": "*", "@mattermost/types": "file:../../webapp/platform/types", - "@playwright/test": "1.51.1", + "@playwright/test": "1.52.0", "cross-env": "7.0.3", "dayjs": "1.11.13", - "zod": "3.24.2" + "zod": "3.24.3" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "8.29.0", - "eslint": "9.24.0", - "eslint-import-resolver-typescript": "4.3.2", + "@typescript-eslint/eslint-plugin": "8.30.1", + "eslint": "9.25.0", + "eslint-import-resolver-typescript": "4.3.3", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.31.0", "prettier": "3.5.3", diff --git a/e2e-tests/playwright/specs/accessibility/channels/intro_channel.spec.ts b/e2e-tests/playwright/specs/accessibility/channels/intro_channel.spec.ts index ae46f33c05..f9ca34a246 100644 --- a/e2e-tests/playwright/specs/accessibility/channels/intro_channel.spec.ts +++ b/e2e-tests/playwright/specs/accessibility/channels/intro_channel.spec.ts @@ -13,7 +13,7 @@ test.fixme('Base channel accessibility', async ({pw, axe}) => { // # Visit a default channel page await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage('hello'); + await channelsPage.postMessage('hello'); // # Analyze the page // Disable 'color-contrast' to be addressed by MM-53814 @@ -35,7 +35,7 @@ test('Post actions tab support', async ({pw, axe}) => { // # Visit a default channel page await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage('hello'); + await channelsPage.postMessage('hello'); const post = await channelsPage.getLastPost(); await post.hover(); diff --git a/e2e-tests/playwright/specs/functional/channels/account_settings/profile/popover_fields.spec.ts b/e2e-tests/playwright/specs/functional/channels/account_settings/profile/popover_fields.spec.ts index 7d4bcbbd7e..8edaf7f197 100644 --- a/e2e-tests/playwright/specs/functional/channels/account_settings/profile/popover_fields.spec.ts +++ b/e2e-tests/playwright/specs/functional/channels/account_settings/profile/popover_fields.spec.ts @@ -3,10 +3,17 @@ import {expect, test} from '@mattermost/playwright-lib'; -test('MM-T53377 Profile popover should show correct fields after at-mention autocomplete', async ({pw}) => { - // # Initialize with specific config and get admin client +/** + * Verify that profile popover shows correct user information based on privacy settings + * and continues to show correct information after at-mention autocomplete is used. + * + * Precondition: + * 1. A test server configured with privacy settings to hide email and full name + * 2. Two user accounts, with one user able to see their own information + */ +test('Profile popover should show correct fields after at-mention autocomplete @user_profile', async ({pw}) => { + // Initialize with user's privacy settings set to hide email and full name const {user, adminClient, team} = await pw.initSetup(); - await adminClient.patchConfig({ PrivacySettings: { ShowEmailAddress: false, @@ -14,59 +21,59 @@ test('MM-T53377 Profile popover should show correct fields after at-mention auto }, }); - // # Create and add another user using admin client + // Create and add another user using admin client const testUser2 = await adminClient.createUser(pw.random.user(), '', ''); await adminClient.addToTeam(team.id, testUser2.id); - // # Log in as user in new browser context + // 1. Login as the first user const {channelsPage} = await pw.testBrowser.login(user); - - // # Visit default channel page await channelsPage.goto(); await channelsPage.toBeVisible(); - // # Send mentions quickly - await channelsPage.centerView.postCreate.postMessage(`@${user.username} @${testUser2.username}`); + // 2. Post a message with mentions of both users + await channelsPage.postMessage(`@${user.username} @${testUser2.username}`); - // # Open profile popover for current user - const firstMention = channelsPage.centerView.container.getByText(`@${user.username}`, {exact: true}); + // 3. Open profile popover for the current user on first + const lastPost = await channelsPage.getLastPost(); + const firstMention = await lastPost.container.getByText(`@${user.username}`, {exact: true}); await firstMention.click(); + const currentUserProfilePopover = channelsPage.userProfilePopover; - // * Verify all fields are visible for current user - const popover = channelsPage.userProfilePopover; - await expect(popover.container.getByText(`@${user.username}`)).toBeVisible(); - await expect(popover.container.getByText(`${user.first_name} ${user.last_name}`)).toBeVisible(); - await expect(popover.container.getByText(user.email)).toBeVisible(); + // * Verify all fields are visible for current user in the profile popover + await expect(currentUserProfilePopover.container.getByText(`@${user.username}`)).toBeVisible(); // TODO: Fix this + await expect(currentUserProfilePopover.container.getByText(`${user.first_name} ${user.last_name}`)).toBeVisible(); + await expect(currentUserProfilePopover.container.getByText(user.email)).toBeVisible(); - // # Close profile popover - await popover.close(); + // 4. Close the current user's profile popover + await currentUserProfilePopover.close(); - // # Open profile popover for other user - const secondMention = channelsPage.centerView.container.getByText(`@${testUser2.username}`, {exact: true}); + // 5. Open profile popover for the other user on second mention + const secondMention = await lastPost.container.getByText(`@${testUser2.username}`, {exact: true}); await secondMention.click(); + const otherUserProfilePopover = channelsPage.userProfilePopover; - // * Verify only username is visible for other user - await expect(popover.container.getByText(`@${testUser2.username}`)).toBeVisible(); - await expect(popover.container.getByText(testUser2.email)).not.toBeVisible(); + // * Verify only username is visible for other user in the profile popover + await expect(otherUserProfilePopover.container.getByText(`@${testUser2.username}`)).toBeVisible(); + await expect(otherUserProfilePopover.container.getByText(testUser2.email)).not.toBeVisible(); // TODO: Fix this - // # Close profile popover - await popover.close(); + // 6. Close the other user's profile popover + await otherUserProfilePopover.close(); - // # Trigger autocomplete + // 7. Start typing an at-mention to trigger autocomplete suggestion await channelsPage.centerView.postCreate.writeMessage(`@${user.username}`); - // # Wait for autocomplete + // * Verify autocomplete suggestion appears const suggestionList = channelsPage.centerView.postCreate.suggestionList; await expect(suggestionList.getByText(`@${user.username}`)).toBeVisible(); - // # Clear textbox + // 8. Clear the message box await channelsPage.centerView.postCreate.writeMessage(''); - // # Open profile popover for current user again - await firstMention.click(); + // 9. Open profile popover for the current user again + const profilePopoverAgain = await channelsPage.openProfilePopover(lastPost); // * Verify all fields are still visible - await expect(popover.container.getByText(`@${user.username}`)).toBeVisible(); - await expect(popover.container.getByText(`${user.first_name} ${user.last_name}`)).toBeVisible(); - await expect(popover.container.getByText(user.email)).toBeVisible(); + await expect(profilePopoverAgain.container.getByText(`@${user.username}`)).toBeVisible(); + await expect(profilePopoverAgain.container.getByText(`${user.first_name} ${user.last_name}`)).toBeVisible(); + await expect(profilePopoverAgain.container.getByText(user.email)).toBeVisible(); }); diff --git a/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/custom_attributes.spec.ts b/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/custom_attributes.spec.ts index a29d61d59e..b098c86aed 100644 --- a/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/custom_attributes.spec.ts +++ b/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/custom_attributes.spec.ts @@ -16,7 +16,6 @@ import { deleteCustomProfileAttributes, verifyAttributeInPopover, verifyAttributeNotInPopover, - openProfilePopover, updateCustomProfileAttributeVisibility, TEST_PHONE, TEST_URL, @@ -129,7 +128,8 @@ test('MM-T5773 Display custom profile attributes in profile popover @custom_prof await channelsPage.postMessage(TEST_MESSAGE); // 3. Open the profile popover for the user's post - await openProfilePopover(channelsPage); + const lastPost = await channelsPage.getLastPost(); + await channelsPage.openProfilePopover(lastPost); // * Verify each custom attribute is displayed correctly for (const attribute of customAttributes) { @@ -158,7 +158,8 @@ test('MM-T5774 Do not display custom profile attributes if none exist @custom_pr await channelsPage.postMessage(TEST_MESSAGE); // 3. Open the profile popover for the user's post - await openProfilePopover(channelsPage); + const lastPost = await channelsPage.getLastPost(); + await channelsPage.openProfilePopover(lastPost); // * Verify custom attributes are not displayed for (const attribute of customAttributes) { @@ -185,7 +186,8 @@ test('MM-T5775 Update custom profile attributes when changed @custom_profile_att await channelsPage.postMessage(TEST_MESSAGE); // 3. Open the profile popover for the user's post - await openProfilePopover(channelsPage); + const lastPost = await channelsPage.getLastPost(); + await channelsPage.openProfilePopover(lastPost); // * Verify each custom attribute is displayed correctly for (const attribute of customAttributes) { @@ -213,7 +215,7 @@ test('MM-T5775 Update custom profile attributes when changed @custom_profile_att await setupCustomProfileAttributeValues(userClient, updatedAttributes, attributeFieldsMap); // 6. Open the profile popover again - await openProfilePopover(channelsPage); + await channelsPage.openProfilePopover(lastPost); // * Verify updated attributes are displayed correctly for (const attribute of updatedAttributes) { @@ -250,7 +252,8 @@ test('MM-T5776 Hide custom profile attributes when visibility is set to hidden @ await channelsPage.postMessage(TEST_MESSAGE); // 4. Open the profile popover for the user's post - await openProfilePopover(channelsPage); + const lastPost = await channelsPage.getLastPost(); + await channelsPage.openProfilePopover(lastPost); // * Verify the Department attribute is not displayed await verifyAttributeNotInPopover(channelsPage, 'Department'); @@ -283,7 +286,8 @@ test('MM-T5777 Always display custom profile attributes with visibility set to a await channelsPage.postMessage(TEST_MESSAGE); // 4. Open the profile popover for the user's post - await openProfilePopover(channelsPage); + const lastPost = await channelsPage.getLastPost(); + await channelsPage.openProfilePopover(lastPost); // * Verify custom attributes are displayed correctly for (const attribute of customAttributes) { @@ -319,7 +323,8 @@ test('MM-T5778 Display phone and URL type custom profile attributes correctly @c await channelsPage.postMessage(TEST_MESSAGE); // 3. Open the profile popover for the other user - await openProfilePopover(channelsPage); + const lastPost = await channelsPage.getLastPost(); + await channelsPage.openProfilePopover(lastPost); // * Verify the Phone attribute is displayed correctly await verifyAttributeInPopover(channelsPage, 'Phone', TEST_PHONE); @@ -349,7 +354,8 @@ test('MM-T5779 Verify phone and URL attributes are clickable in profile popover await channelsPage.postMessage(TEST_MESSAGE); // 3. Open the profile popover for the other user - await openProfilePopover(channelsPage); + const lastPost = await channelsPage.getLastPost(); + await channelsPage.openProfilePopover(lastPost); // * Verify the Phone attribute has a clickable link with tel: protocol const popover = channelsPage.userProfilePopover.container; diff --git a/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/helpers.ts b/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/helpers.ts index 5a399ea73d..c83957aa7c 100644 --- a/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/helpers.ts +++ b/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/helpers.ts @@ -213,21 +213,6 @@ export async function editMultiselectAttribute( await page.waitForTimeout(500); // Wait for save to complete } -/** - * Helper function to open the profile popover for the test user - * @param {ChannelsPage} channelsPage - The Playwright channels page object - */ -export async function openProfilePopover(channelsPage: ChannelsPage): Promise { - // Find and click the last post's user avatar to open the profile popover - const lastPost = await channelsPage.getLastPost(); - await lastPost.hover(); - await lastPost.profileIcon.click(); - - // Wait for the profile popover to be visible - const popover = channelsPage.userProfilePopover; - await expect(popover.container).toBeVisible(); -} - /** * Helper function to verify an attribute exists in the profile settings * @param {Page} page - The Playwright page object diff --git a/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/user_settings.spec.ts b/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/user_settings.spec.ts index f5ac8ed0ff..9c3042a576 100644 --- a/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/user_settings.spec.ts +++ b/e2e-tests/playwright/specs/functional/channels/custom_profile_attributes/user_settings.spec.ts @@ -17,7 +17,6 @@ import { verifyAttributesExistInSettings, verifyAttributeInPopover, verifyAttributeNotInPopover, - openProfilePopover, editTextAttribute, editSelectAttribute, editMultiselectAttribute, @@ -171,7 +170,8 @@ test('MM-T5768 Editing Custom Profile Attributes @custom_profile_attributes', as await otherChannelsPage.goto(); // 9. View the test user's profile popover - await openProfilePopover(otherChannelsPage); + const lastPost = await otherChannelsPage.getLastPost(); + await otherChannelsPage.openProfilePopover(lastPost); // * Profile popover shows updated custom attributes await verifyAttributeInPopover(otherChannelsPage, 'Department', TEST_UPDATED_DEPARTMENT); @@ -220,7 +220,8 @@ test('MM-T5769 Clearing Custom Profile Attributes @custom_profile_attributes', a await otherChannelsPage.goto(); // 7. View the test user's profile popover - await openProfilePopover(otherChannelsPage); + const lastPost = await channelsPage.getLastPost(); + await channelsPage.openProfilePopover(lastPost); // * Department attribute is not displayed in the profile popover await verifyAttributeNotInPopover(otherChannelsPage, 'Department'); @@ -311,7 +312,8 @@ test('MM-T5771 Editing Phone and URL Type Custom Profile Attributes @custom_prof await otherChannelsPage.goto(); // 8. View the test user's profile popover - await openProfilePopover(otherChannelsPage); + const lastPost = await otherChannelsPage.getLastPost(); + await otherChannelsPage.openProfilePopover(lastPost); // * Profile popover shows updated attributes await verifyAttributeInPopover(otherChannelsPage, 'Phone', TEST_UPDATED_PHONE); diff --git a/e2e-tests/playwright/specs/functional/channels/drafts/drafts_on_deleted_message.spec.ts b/e2e-tests/playwright/specs/functional/channels/drafts/drafts_on_deleted_message.spec.ts index a19653979c..dce0ffb641 100644 --- a/e2e-tests/playwright/specs/functional/channels/drafts/drafts_on_deleted_message.spec.ts +++ b/e2e-tests/playwright/specs/functional/channels/drafts/drafts_on_deleted_message.spec.ts @@ -41,7 +41,7 @@ test('MM-T5435_1 Global Drafts link in sidebar should be hidden when another use // # Post a message as a user const sidebarRight = channelsPage.sidebarRight; await sidebarRight.toBeVisible(); - await sidebarRight.postCreate.postMessage('Replying to a thread'); + await sidebarRight.postMessage('Replying to a thread'); // # Write a message in the reply thread but don't send it now so that it becomes a draft const draftMessageByUser = 'I should be in drafts by User'; @@ -86,7 +86,7 @@ test('MM-T5435_2 Global Drafts link in sidebar should be hidden when user delete await channelsPage.toBeVisible(); // # Post a message in the channel - await channelsPage.centerView.postCreate.postMessage('Message which will be deleted'); + await channelsPage.postMessage('Message which will be deleted'); // # Start a thread by clicking on reply menuitem from post options menu const post = await channelsPage.getLastPost(); @@ -98,7 +98,7 @@ test('MM-T5435_2 Global Drafts link in sidebar should be hidden when user delete await sidebarRight.toBeVisible(); // # Post a message in the thread - await sidebarRight.postCreate.postMessage('Replying to a thread'); + await sidebarRight.postMessage('Replying to a thread'); // # Write a message in the reply thread but don't send it await sidebarRight.postCreate.writeMessage('I should be in drafts'); diff --git a/e2e-tests/playwright/specs/functional/channels/edit_file_attachments/edit_file_attachment.spec.ts b/e2e-tests/playwright/specs/functional/channels/edit_file_attachments/edit_file_attachment.spec.ts index 378441581b..40f46722fe 100644 --- a/e2e-tests/playwright/specs/functional/channels/edit_file_attachments/edit_file_attachment.spec.ts +++ b/e2e-tests/playwright/specs/functional/channels/edit_file_attachments/edit_file_attachment.spec.ts @@ -13,7 +13,7 @@ test('MM-T5654_1 should be able to add attachments while editing a post', async await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage(originalMessage); + await channelsPage.postMessage(originalMessage); const post = await channelsPage.getLastPost(); await post.toBeVisible(); @@ -41,7 +41,7 @@ test('MM-T5654_2 should be able to add attachments while editing a threaded post await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage(originalMessage); + await channelsPage.postMessage(originalMessage); const post = await channelsPage.getLastPost(); await post.toBeVisible(); @@ -54,7 +54,7 @@ test('MM-T5654_2 should be able to add attachments while editing a threaded post await channelsPage.postDotMenu.replyMenuItem.click(); await channelsPage.sidebarRight.toBeVisible(); await channelsPage.sidebarRight.postCreate.toBeVisible(); - await channelsPage.sidebarRight.postCreate.postMessage('Replying to the post'); + await channelsPage.sidebarRight.postMessage('Replying to the post'); await channelsPage.sidebarRight.toContainText('Replying to the post'); const replyPost = await channelsPage.sidebarRight.getLastPost(); @@ -119,7 +119,7 @@ test('MM-T5654_3 should be able to edit post message originally containing files await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage(originalMessage, ['sample_text_file.txt']); + await channelsPage.postMessage(originalMessage, ['sample_text_file.txt']); const post = await channelsPage.getLastPost(); await post.toBeVisible(); @@ -147,7 +147,7 @@ test('MM-T5654_4 should be able to add files when editing a post', async ({pw}) await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage(originalMessage); + await channelsPage.postMessage(originalMessage); const post = await channelsPage.getLastPost(); await post.toBeVisible(); @@ -192,11 +192,7 @@ test('MM-5654_5 should be able to remove attachments while editing a post', asyn await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage(originalMessage, [ - 'sample_text_file.txt', - 'mattermost.png', - 'archive.zip', - ]); + await channelsPage.postMessage(originalMessage, ['sample_text_file.txt', 'mattermost.png', 'archive.zip']); const post = await channelsPage.getLastPost(); await post.toBeVisible(); @@ -232,7 +228,7 @@ test('MM-T5655_1 removing message content and files should delete the post', asy await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage(originalMessage, ['sample_text_file.txt']); + await channelsPage.postMessage(originalMessage, ['sample_text_file.txt']); const post = await channelsPage.getLastPost(); await post.toBeVisible(); @@ -266,11 +262,7 @@ test('MM-T5655_2 should be able to remove all files when editing a post', async await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage(originalMessage, [ - 'sample_text_file.txt', - 'mattermost.png', - 'archive.zip', - ]); + await channelsPage.postMessage(originalMessage, ['sample_text_file.txt', 'mattermost.png', 'archive.zip']); const post = await channelsPage.getLastPost(); await post.toBeVisible(); @@ -309,7 +301,7 @@ test('MM-T5656_1 should be able to restore previously edited post version that c await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage(originalMessage, ['sample_text_file.txt']); + await channelsPage.postMessage(originalMessage, ['sample_text_file.txt']); const post = await channelsPage.getLastPost(); await post.toBeVisible(); diff --git a/e2e-tests/playwright/specs/functional/channels/gif_picker/gif_picker_search.spec.ts b/e2e-tests/playwright/specs/functional/channels/gif_picker/gif_picker_search.spec.ts index f58809dd53..2dfd2bbd82 100644 --- a/e2e-tests/playwright/specs/functional/channels/gif_picker/gif_picker_search.spec.ts +++ b/e2e-tests/playwright/specs/functional/channels/gif_picker/gif_picker_search.spec.ts @@ -53,7 +53,7 @@ test.fixme( await channelsPage.toBeVisible(); // # Send a message - await channelsPage.centerView.postCreate.postMessage('Message to open RHS'); + await channelsPage.postMessage('Message to open RHS'); // # Open the last post sent in RHS const lastPost = await channelsPage.getLastPost(); diff --git a/e2e-tests/playwright/specs/functional/channels/scheduled_drafts/create_scheduled_draft.spec.ts b/e2e-tests/playwright/specs/functional/channels/scheduled_drafts/create_scheduled_draft.spec.ts index f904508a4b..9d86fe9ddb 100644 --- a/e2e-tests/playwright/specs/functional/channels/scheduled_drafts/create_scheduled_draft.spec.ts +++ b/e2e-tests/playwright/specs/functional/channels/scheduled_drafts/create_scheduled_draft.spec.ts @@ -53,7 +53,7 @@ test('MM-T5643_6 should create a scheduled message under a thread post ', async await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage('Root Message'); + await channelsPage.postMessage('Root Message'); // # Start a thread by clicking on reply menuitem from post options menu const post = await channelsPage.getLastPost(); @@ -63,7 +63,7 @@ test('MM-T5643_6 should create a scheduled message under a thread post ', async await sidebarRight.toBeVisible(); // # Post a message in the thread - await sidebarRight.postCreate.postMessage('Replying to a thread'); + await sidebarRight.postMessage('Replying to a thread'); // # Write a message in the reply thread but don't send it await sidebarRight.postCreate.writeMessage(draftMessage); diff --git a/e2e-tests/playwright/specs/functional/channels/settings/notifications/highlight_without_notification.spec.ts b/e2e-tests/playwright/specs/functional/channels/settings/notifications/highlight_without_notification.spec.ts index 30c0568afc..3287ef3a91 100644 --- a/e2e-tests/playwright/specs/functional/channels/settings/notifications/highlight_without_notification.spec.ts +++ b/e2e-tests/playwright/specs/functional/channels/settings/notifications/highlight_without_notification.spec.ts @@ -23,7 +23,7 @@ test('MM-T5465-1 Should add the keyword when enter, comma or tab is pressed on t await channelsPage.goto(); await channelsPage.toBeVisible(); - await channelsPage.centerView.postCreate.postMessage('Hello World'); + await channelsPage.postMessage('Hello World'); // # Open settings modal const settingsModal = await channelsPage.globalHeader.openSettings(); @@ -97,7 +97,7 @@ test('MM-T5465-2 Should highlight the keywords when a message is sent with the k // # Post a message without the keyword const messageWithoutKeyword = 'This message does not contain the keyword'; - await channelsPage.centerView.postCreate.postMessage(messageWithoutKeyword); + await channelsPage.postMessage(messageWithoutKeyword); const lastPostWithoutHighlight = await channelsPage.getLastPost(); // * Verify that the keywords are not highlighted @@ -108,7 +108,7 @@ test('MM-T5465-2 Should highlight the keywords when a message is sent with the k // # Post a message with the keyword const messageWithKeyword = `This message contains the keyword ${keywords[3]}`; - await channelsPage.centerView.postCreate.postMessage(messageWithKeyword); + await channelsPage.postMessage(messageWithKeyword); const lastPostWithHighlight = await channelsPage.getLastPost(); // * Verify that the keywords are highlighted @@ -151,7 +151,7 @@ test('MM-T5465-3 Should highlight the keywords when a message is sent with the k // # Post a message without the keyword const messageWithoutKeyword = 'This message does not contain the keyword'; - await channelsPage.centerView.postCreate.postMessage(messageWithoutKeyword); + await channelsPage.postMessage(messageWithoutKeyword); const lastPostWithoutHighlight = await channelsPage.getLastPost(); // # Open the message in the RHS @@ -162,7 +162,7 @@ test('MM-T5465-3 Should highlight the keywords when a message is sent with the k // # Post a message with the keyword in the RHS const messageWithKeyword = `This message contains the keyword ${keywords[3]}`; - await channelsPage.sidebarRight.postCreate.postMessage(messageWithKeyword); + await channelsPage.sidebarRight.postMessage(messageWithKeyword); // * Verify that the keywords are highlighted const lastPostWithHighlightInRHS = await channelsPage.sidebarRight.getLastPost(); diff --git a/webapp/platform/types/src/config.ts b/webapp/platform/types/src/config.ts index ae449015f8..9bfe2e3292 100644 --- a/webapp/platform/types/src/config.ts +++ b/webapp/platform/types/src/config.ts @@ -484,6 +484,7 @@ export type ExperimentalAuditSettings = { FileCompress: boolean; FileMaxQueueSize: number; AdvancedLoggingJSON: Record; + Certificate: string; }; export type NotificationLogSettings = { @@ -966,6 +967,11 @@ export type ExportSettings = { RetentionDays: number; }; +export type AccessControlSettings = { + EnableAttributeBasedAccessControl: boolean; + EnableChannelScopeAccessControl: boolean; +}; + export type AdminConfig = { ServiceSettings: ServiceSettings; TeamSettings: TeamSettings; @@ -1011,6 +1017,7 @@ export type AdminConfig = { ExportSettings: ExportSettings; WranglerSettings: WranglerSettings; ConnectedWorkspacesSettings: ConnectedWorkspacesSettings; + AccessControlSettings: AccessControlSettings; }; export type ReplicaLagSetting = {