diff --git a/.gitpod.yml b/.gitpod.yml
index 2192d953..fb75b433 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -3,4 +3,4 @@ ports:
onOpen: open-preview
tasks:
- init: corepack enable && pnpm install
- command: pnpm run dev
+ command: pnpm run dev:play
diff --git a/README.ja-JP.md b/README.ja-JP.md
index 3565eb4d..f1f90487 100644
--- a/README.ja-JP.md
+++ b/README.ja-JP.md
@@ -133,6 +133,10 @@ pnpm build
Paypal Me
+## スター歴史
+
+[![Star History Chart](https://api.star-history.com/svg?repos=vbenjs/vue-vben-admin&type=Date)](https://star-history.com/#vbenjs/vue-vben-admin&Date)
+
## 貢献者
diff --git a/README.md b/README.md
index 45f75501..727e8df2 100644
--- a/README.md
+++ b/README.md
@@ -132,6 +132,10 @@ If you think this project is helpful to you, you can help the author buy a cup o
Paypal Me
+## Star History
+
+[![Star History Chart](https://api.star-history.com/svg?repos=vbenjs/vue-vben-admin&type=Date)](https://star-history.com/#vbenjs/vue-vben-admin&Date)
+
## Contributor
diff --git a/README.zh-CN.md b/README.zh-CN.md
index e65d5b0e..5ad579f5 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -132,6 +132,10 @@ pnpm build
[CHANGELOG](https://github.com/vbenjs/vue-vben-admin/releases)
+## Star History
+
+[![Star History Chart](https://api.star-history.com/svg?repos=vbenjs/vue-vben-admin&type=Date)](https://star-history.com/#vbenjs/vue-vben-admin&Date)
+
## Contributor
diff --git a/docs/src/en/guide/essentials/development.md b/docs/src/en/guide/essentials/development.md
index e8628b96..1e8a5e53 100644
--- a/docs/src/en/guide/essentials/development.md
+++ b/docs/src/en/guide/essentials/development.md
@@ -46,8 +46,6 @@ The execution command is: `pnpm run [script]` or `npm run [script]`.
```json
{
"scripts": {
- // Install dependencies
- "bootstrap": "pnpm install",
// Build the project
"build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 turbo build",
// Build the project with analysis
@@ -107,9 +105,9 @@ The execution command is: `pnpm run [script]` or `npm run [script]`.
// Package specification check
"publint": "vsh publint",
// Delete all node_modules, yarn.lock, package.lock.json, and reinstall dependencies
- "reinstall": "pnpm clean --del-lock && pnpm bootstrap",
+ "reinstall": "pnpm clean --del-lock && pnpm install",
// Run vitest unit tests
- "test:unit": "vitest",
+ "test:unit": "vitest run --dom",
// Update project dependencies
"update:deps": " pnpm update --latest --recursive",
// Changeset generation and versioning
diff --git a/docs/src/guide/essentials/development.md b/docs/src/guide/essentials/development.md
index ff731a2d..4b565d80 100644
--- a/docs/src/guide/essentials/development.md
+++ b/docs/src/guide/essentials/development.md
@@ -46,8 +46,6 @@ npm 脚本是项目常见的配置,用于执行一些常见的任务,比如
```json
{
"scripts": {
- // 安装依赖
- "bootstrap": "pnpm install",
// 构建项目
"build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 turbo build",
// 构建项目并分析
@@ -107,9 +105,9 @@ npm 脚本是项目常见的配置,用于执行一些常见的任务,比如
// 包规范检查
"publint": "vsh publint",
// 删除所有的node_modules、yarn.lock、package.lock.json,重新安装依赖
- "reinstall": "pnpm clean --del-lock && pnpm bootstrap",
+ "reinstall": "pnpm clean --del-lock && pnpm install",
// 运行 vitest 单元测试
- "test:unit": "vitest",
+ "test:unit": "vitest run --dom",
// 更新项目依赖
"update:deps": " pnpm update --latest --recursive",
// changeset生成提交集
diff --git a/internal/lint-configs/eslint-config/src/configs/node.ts b/internal/lint-configs/eslint-config/src/configs/node.ts
index 56426d11..fa960d85 100644
--- a/internal/lint-configs/eslint-config/src/configs/node.ts
+++ b/internal/lint-configs/eslint-config/src/configs/node.ts
@@ -24,6 +24,7 @@ export async function node(): Promise {
'vite',
'@vue/test-utils',
'@vben/tailwind-config',
+ '@playwright/test',
],
},
],
diff --git a/internal/lint-configs/eslint-config/src/custom-config.ts b/internal/lint-configs/eslint-config/src/custom-config.ts
index 4cdf8d60..d684eb23 100644
--- a/internal/lint-configs/eslint-config/src/custom-config.ts
+++ b/internal/lint-configs/eslint-config/src/custom-config.ts
@@ -134,6 +134,14 @@ const customConfig: Linter.Config[] = [
'unicorn/prefer-module': 'off',
},
},
+ {
+ files: ['**/**/playwright.config.ts'],
+ rules: {
+ 'n/prefer-global/buffer': 'off',
+ 'n/prefer-global/process': 'off',
+ 'no-console': 'off',
+ },
+ },
{
files: ['internal/**/**'],
rules: {
diff --git a/package.json b/package.json
index e0409a10..bf01c13c 100644
--- a/package.json
+++ b/package.json
@@ -25,11 +25,10 @@
},
"type": "module",
"scripts": {
- "bootstrap": "pnpm install",
"build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 turbo build",
"build:analyze": "turbo build:analyze",
- "build:docker": "./build-local-docker-image.sh",
"build:antd": "pnpm run build --filter=@vben/web-antd",
+ "build:docker": "./build-local-docker-image.sh",
"build:docs": "pnpm run build --filter=@vben/docs",
"build:ele": "pnpm run build --filter=@vben/web-ele",
"build:naive": "pnpm run build --filter=@vben/web-naive",
@@ -55,15 +54,16 @@
"prepare": "is-ci || husky",
"preview": "turbo-run preview",
"publint": "vsh publint",
- "reinstall": "pnpm clean --del-lock && pnpm bootstrap",
- "test:unit": "vitest",
+ "reinstall": "pnpm clean --del-lock && pnpm install",
+ "test:unit": "vitest run --dom",
+ "test:e2e": "turbo run test:e2e",
"update:deps": "pnpm update --latest --recursive",
"version": "pnpm exec changeset version && pnpm install --no-frozen-lockfile"
},
"devDependencies": {
"@changesets/changelog-github": "catalog:",
"@changesets/cli": "catalog:",
- "@types/jsdom": "catalog:",
+ "@playwright/test": "catalog:",
"@types/node": "catalog:",
"@vben/commitlint-config": "workspace:*",
"@vben/eslint-config": "workspace:*",
@@ -80,10 +80,11 @@
"autoprefixer": "catalog:",
"cross-env": "catalog:",
"cspell": "catalog:",
+ "happy-dom": "catalog:",
"husky": "catalog:",
"is-ci": "catalog:",
- "jsdom": "catalog:",
"lint-staged": "catalog:",
+ "playwright": "catalog:",
"rimraf": "catalog:",
"tailwindcss": "catalog:",
"turbo": "catalog:",
@@ -113,8 +114,7 @@
},
"neverBuiltDependencies": [
"canvas",
- "node-gyp",
- "playwright"
+ "node-gyp"
]
}
}
diff --git a/packages/@core/ui-kit/shadcn-ui/package.json b/packages/@core/ui-kit/shadcn-ui/package.json
index a08952cc..1150065e 100644
--- a/packages/@core/ui-kit/shadcn-ui/package.json
+++ b/packages/@core/ui-kit/shadcn-ui/package.json
@@ -1,6 +1,8 @@
{
"name": "@vben-core/shadcn-ui",
"version": "5.3.0",
+ "#main": "./dist/index.mjs",
+ "#module": "./dist/index.mjs",
"homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": {
@@ -20,16 +22,14 @@
"sideEffects": [
"**/*.css"
],
- "#main": "./dist/index.mjs",
"main": "./src/index.ts",
- "#module": "./dist/index.mjs",
"module": "./src/index.ts",
"exports": {
".": {
"types": "./src/index.ts",
"development": "./src/index.ts",
- "//default": "./dist/index.mjs",
- "default": "./src/index.ts"
+ "default": "./src/index.ts",
+ "//default": "./dist/index.mjs"
}
},
"publishConfig": {
diff --git a/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue b/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue
index fc002bd8..fe0b5aaa 100644
--- a/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue
+++ b/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue
@@ -51,6 +51,7 @@ defineExpose({
}"
:style="style"
class="bg-background dark:bg-accent absolute left-0 top-0 flex h-full cursor-move items-center justify-center px-3.5 shadow-md"
+ name="captcha-action"
>
diff --git a/packages/effects/common-ui/src/ui/authentication/forget-password.vue b/packages/effects/common-ui/src/ui/authentication/forget-password.vue
index c6a7720f..e8c2cf9e 100644
--- a/packages/effects/common-ui/src/ui/authentication/forget-password.vue
+++ b/packages/effects/common-ui/src/ui/authentication/forget-password.vue
@@ -95,6 +95,7 @@ function goToLogin() {
:class="{
'cursor-wait': loading,
}"
+ aria-label="submit"
class="mt-2 w-full"
@click="handleSubmit"
>
diff --git a/packages/effects/common-ui/src/ui/authentication/login.vue b/packages/effects/common-ui/src/ui/authentication/login.vue
index a55b71a5..68d74522 100644
--- a/packages/effects/common-ui/src/ui/authentication/login.vue
+++ b/packages/effects/common-ui/src/ui/authentication/login.vue
@@ -129,6 +129,7 @@ onMounted(() => {
'cursor-wait': loading,
}"
:loading="loading"
+ aria-label="login"
class="w-full"
@click="handleSubmit"
>
diff --git a/packages/effects/common-ui/src/ui/authentication/register.vue b/packages/effects/common-ui/src/ui/authentication/register.vue
index ca745bb5..e4eadd51 100644
--- a/packages/effects/common-ui/src/ui/authentication/register.vue
+++ b/packages/effects/common-ui/src/ui/authentication/register.vue
@@ -97,6 +97,7 @@ function goToLogin() {
'cursor-wait': loading,
}"
:loading="loading"
+ aria-label="register"
class="mt-2 w-full"
@click="handleSubmit"
>
diff --git a/playground/__tests__/e2e/auth-login.spec.ts b/playground/__tests__/e2e/auth-login.spec.ts
new file mode 100644
index 00000000..bb6cd289
--- /dev/null
+++ b/playground/__tests__/e2e/auth-login.spec.ts
@@ -0,0 +1,20 @@
+import { expect, test } from '@playwright/test';
+
+import { authLogin } from './common/auth';
+
+test.beforeEach(async ({ page }) => {
+ await page.goto('/');
+});
+
+test.describe('Auth Login Page Tests', () => {
+ test('check title and page elements', async ({ page }) => {
+ // 获取页面标题并断言标题包含 'Vben Admin'
+ const title = await page.title();
+ expect(title).toContain('Vben Admin');
+ });
+
+ // 测试用例: 成功登录
+ test('should successfully login with valid credentials', async ({ page }) => {
+ await authLogin(page);
+ });
+});
diff --git a/playground/__tests__/e2e/common/auth.ts b/playground/__tests__/e2e/common/auth.ts
new file mode 100644
index 00000000..26b526fd
--- /dev/null
+++ b/playground/__tests__/e2e/common/auth.ts
@@ -0,0 +1,46 @@
+import type { Page } from '@playwright/test';
+
+import { expect } from '@playwright/test';
+
+export async function authLogin(page: Page) {
+ // 确保登录表单正常
+ const usernameInput = await page.locator(`input[name='username']`);
+ await expect(usernameInput).toBeVisible();
+
+ const passwordInput = await page.locator(`input[name='password']`);
+ await expect(passwordInput).toBeVisible();
+
+ const sliderCaptcha = await page.locator(`div[name='captcha']`);
+ const sliderCaptchaAction = await page.locator(`div[name='captcha-action']`);
+ await expect(sliderCaptcha).toBeVisible();
+ await expect(sliderCaptchaAction).toBeVisible();
+
+ // 拖动验证码滑块
+ // 获取拖动按钮的位置
+ const sliderCaptchaBox = await sliderCaptcha.boundingBox();
+ if (!sliderCaptchaBox) throw new Error('滑块未找到');
+
+ const actionBoundingBox = await sliderCaptchaAction.boundingBox();
+ if (!actionBoundingBox) throw new Error('要拖动的按钮未找到');
+
+ // 计算起始位置和目标位置
+ const startX = actionBoundingBox.x + actionBoundingBox.width / 2; // div 中心的 x 坐标
+ const startY = actionBoundingBox.y + actionBoundingBox.height / 2; // div 中心的 y 坐标
+
+ const targetX = startX + sliderCaptchaBox.width + actionBoundingBox.width; // 向右拖动容器的宽度
+ const targetY = startY; // y 坐标保持不变
+
+ // 模拟鼠标拖动
+ await page.mouse.move(startX, startY); // 移动到 action 的中心
+ await page.mouse.down(); // 按下鼠标
+ await page.mouse.move(targetX, targetY, { steps: 20 }); // 拖动到目标位置
+ await page.mouse.up(); // 松开鼠标
+
+ // 在拖动后进行断言,检查action是否在预期位置,
+ const newActionBoundingBox = await sliderCaptchaAction.boundingBox();
+ expect(newActionBoundingBox?.x).toBeGreaterThan(actionBoundingBox.x);
+
+ // 到这里已经校验成功,点击进行登录
+ await page.waitForTimeout(300);
+ await page.getByRole('button', { name: 'login' }).click();
+}
diff --git a/playground/package.json b/playground/package.json
index 09cf5e65..5a4aed27 100644
--- a/playground/package.json
+++ b/playground/package.json
@@ -20,7 +20,10 @@
"build:analyze": "pnpm vite build --mode analyze",
"dev": "pnpm vite --mode development",
"preview": "vite preview",
- "typecheck": "vue-tsc --noEmit --skipLibCheck"
+ "typecheck": "vue-tsc --noEmit --skipLibCheck",
+ "test:e2e": "playwright test",
+ "test:e2e-ui": "playwright test --ui",
+ "test:e2e-codegen": "playwright codegen"
},
"imports": {
"#/*": "./src/*"
diff --git a/playground/playwright.config.ts b/playground/playwright.config.ts
new file mode 100644
index 00000000..ca0c9085
--- /dev/null
+++ b/playground/playwright.config.ts
@@ -0,0 +1,108 @@
+import type { PlaywrightTestConfig } from '@playwright/test';
+
+import { devices } from '@playwright/test';
+
+/**
+ * Read environment variables from file.
+ * https://github.com/motdotla/dotenv
+ */
+// require('dotenv').config();
+
+/**
+ * See https://playwright.dev/docs/test-configuration.
+ */
+const config: PlaywrightTestConfig = {
+ expect: {
+ /**
+ * Maximum time expect() should wait for the condition to be met.
+ * For example in `await expect(locator).toHaveText();`
+ */
+ timeout: 5000,
+ },
+ /* Fail the build on CI if you accidentally left test.only in the source code. */
+ forbidOnly: !!process.env.CI,
+ /* Folder for test artifacts such as screenshots, videos, traces, etc. */
+ outputDir: 'node_modules/.e2e/test-results/',
+ /* Configure projects for major browsers */
+ projects: [
+ {
+ name: 'chromium',
+ use: {
+ ...devices['Desktop Chrome'],
+ },
+ },
+ // {
+ // name: 'firefox',
+ // use: {
+ // ...devices['Desktop Firefox'],
+ // },
+ // },
+ // {
+ // name: 'webkit',
+ // use: {
+ // ...devices['Desktop Safari'],
+ // },
+ // },
+
+ /* Test against mobile viewports. */
+ // {
+ // name: 'Mobile Chrome',
+ // use: {
+ // ...devices['Pixel 5'],
+ // },
+ // },
+ // {
+ // name: 'Mobile Safari',
+ // use: {
+ // ...devices['iPhone 12'],
+ // },
+ // },
+
+ /* Test against branded browsers. */
+ // {
+ // name: 'Microsoft Edge',
+ // use: {
+ // channel: 'msedge',
+ // },
+ // },
+ // {
+ // name: 'Google Chrome',
+ // use: {
+ // channel: 'chrome',
+ // },
+ // },
+ ],
+ /* Reporter to use. See https://playwright.dev/docs/test-reporters */
+ reporter: [
+ ['list'],
+ ['html', { outputFolder: 'node_modules/.e2e/test-results' }],
+ ],
+ /* Retry on CI only */
+ retries: process.env.CI ? 2 : 0,
+ testDir: './__tests__/e2e',
+ /* Maximum time one test can run for. */
+ timeout: 30 * 1000,
+ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
+ use: {
+ /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
+ actionTimeout: 0,
+ /* Base URL to use in actions like `await page.goto('/')`. */
+ baseURL: 'http://localhost:5555',
+ /* Only on CI systems run the tests headless */
+ headless: !!process.env.CI,
+ /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
+ trace: 'retain-on-failure',
+ },
+
+ /* Run your local dev server before starting the tests */
+ webServer: {
+ command: process.env.CI ? 'pnpm preview --port 5555' : 'pnpm dev',
+ port: 5555,
+ reuseExistingServer: !process.env.CI,
+ },
+
+ /* Opt out of parallel tests on CI. */
+ workers: process.env.CI ? 1 : undefined,
+};
+
+export default config;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3104b113..db41406f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -38,10 +38,10 @@ catalogs:
version: 4.1.2
'@intlify/core-base':
specifier: ^10.0.2
- version: 10.0.2
+ version: 10.0.3
'@intlify/unplugin-vue-i18n':
specifier: ^5.0.0
- version: 5.0.0
+ version: 5.2.0
'@jspm/generator':
specifier: ^2.3.1
version: 2.3.1
@@ -51,6 +51,9 @@ catalogs:
'@nolebase/vitepress-plugin-git-changelog':
specifier: ^2.5.0
version: 2.5.0
+ '@playwright/test':
+ specifier: ^1.47.2
+ version: 1.47.2
'@radix-icons/vue':
specifier: ^1.0.0
version: 1.0.0
@@ -81,9 +84,6 @@ catalogs:
'@types/html-minifier-terser':
specifier: ^7.0.2
version: 7.0.2
- '@types/jsdom':
- specifier: ^21.1.7
- version: 21.1.7
'@types/jsonwebtoken':
specifier: ^9.0.7
version: 9.0.7
@@ -270,6 +270,9 @@ catalogs:
h3:
specifier: ^1.12.0
version: 1.12.0
+ happy-dom:
+ specifier: ^15.7.4
+ version: 15.7.4
html-minifier-terser:
specifier: ^7.2.0
version: 7.2.0
@@ -279,9 +282,6 @@ catalogs:
is-ci:
specifier: ^3.0.1
version: 3.0.1
- jsdom:
- specifier: ^25.0.1
- version: 25.0.1
jsonc-eslint-parser:
specifier: ^2.4.0
version: 2.4.0
@@ -321,6 +321,9 @@ catalogs:
pkg-types:
specifier: ^1.2.0
version: 1.2.0
+ playwright:
+ specifier: ^1.47.2
+ version: 1.47.2
postcss:
specifier: ^8.4.47
version: 8.4.47
@@ -335,7 +338,7 @@ catalogs:
version: 16.1.0
postcss-preset-env:
specifier: ^10.0.3
- version: 10.0.3
+ version: 10.0.4
postcss-scss:
specifier: ^4.0.9
version: 4.0.9
@@ -461,7 +464,7 @@ catalogs:
version: 9.4.3
vue-i18n:
specifier: ^10.0.2
- version: 10.0.2
+ version: 10.0.3
vue-router:
specifier: ^4.4.5
version: 4.4.5
@@ -494,9 +497,9 @@ importers:
'@changesets/cli':
specifier: 'catalog:'
version: 2.27.8
- '@types/jsdom':
+ '@playwright/test':
specifier: 'catalog:'
- version: 21.1.7
+ version: 1.47.2
'@types/node':
specifier: 'catalog:'
version: 22.5.5
@@ -545,18 +548,21 @@ importers:
cspell:
specifier: 'catalog:'
version: 8.14.4
+ happy-dom:
+ specifier: 'catalog:'
+ version: 15.7.4
husky:
specifier: 'catalog:'
version: 9.1.6
is-ci:
specifier: 'catalog:'
version: 3.0.1
- jsdom:
- specifier: 'catalog:'
- version: 25.0.1
lint-staged:
specifier: 'catalog:'
version: 15.2.10
+ playwright:
+ specifier: 'catalog:'
+ version: 1.47.2
rimraf:
specifier: 'catalog:'
version: 6.0.1
@@ -577,7 +583,7 @@ importers:
version: 5.4.7(@types/node@22.5.5)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)
vitest:
specifier: 'catalog:'
- version: 2.1.1(@types/node@22.5.5)(jsdom@25.0.1)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)
+ version: 2.1.1(@types/node@22.5.5)(happy-dom@15.7.4)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)
vue:
specifier: 3.5.7
version: 3.5.7(typescript@5.6.2)
@@ -923,7 +929,7 @@ importers:
version: 4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))
eslint-plugin-vitest:
specifier: 'catalog:'
- version: 0.5.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)(vitest@2.1.1(@types/node@22.5.5)(jsdom@25.0.1)(less@4.2.0)(sass@1.79.3)(terser@5.33.0))
+ version: 0.5.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)(vitest@2.1.1(@types/node@22.5.5)(happy-dom@15.7.4)(less@4.2.0)(sass@1.79.3)(terser@5.33.0))
eslint-plugin-vue:
specifier: 'catalog:'
version: 9.28.0(eslint@9.11.0(jiti@1.21.6))
@@ -1066,7 +1072,7 @@ importers:
version: 16.1.0(postcss@8.4.47)
postcss-preset-env:
specifier: 'catalog:'
- version: 10.0.3(postcss@8.4.47)
+ version: 10.0.4(postcss@8.4.47)
tailwindcss:
specifier: 'catalog:'
version: 3.4.12
@@ -1094,7 +1100,7 @@ importers:
dependencies:
'@intlify/unplugin-vue-i18n':
specifier: 'catalog:'
- version: 5.0.0(@vue/compiler-dom@3.5.8)(eslint@9.11.0(jiti@1.21.6))(rollup@4.22.4)(typescript@5.6.2)(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))
+ version: 5.2.0(@vue/compiler-dom@3.5.8)(eslint@9.11.0(jiti@1.21.6))(rollup@4.22.4)(typescript@5.6.2)(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))
'@jspm/generator':
specifier: 'catalog:'
version: 2.3.1
@@ -1620,7 +1626,7 @@ importers:
dependencies:
'@intlify/core-base':
specifier: 'catalog:'
- version: 10.0.2
+ version: 10.0.3
'@vben-core/composables':
specifier: workspace:*
version: link:../@core/composables
@@ -1629,7 +1635,7 @@ importers:
version: 3.5.7(typescript@5.6.2)
vue-i18n:
specifier: 'catalog:'
- version: 10.0.2(vue@3.5.7(typescript@5.6.2))
+ version: 10.0.3(vue@3.5.7(typescript@5.6.2))
packages/preferences:
dependencies:
@@ -3082,8 +3088,8 @@ packages:
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-light-dark-function@2.0.2':
- resolution: {integrity: sha512-QAWWDJtJ7ywzhaMe09QwhjhuwB0XN04fW1MFwoEJMcYyiQub4a57mVFV+ngQEekUhsqe/EtKVCzyOx4q3xshag==}
+ '@csstools/postcss-light-dark-function@2.0.3':
+ resolution: {integrity: sha512-8+lV5IKySJGtBXOwRVBPzwnTsVGKdsjnszsC/21DdKI+F279HcOfWgwTNpE0+NvX78bTlDD2kMqTaJ4T0VYzvA==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -3915,28 +3921,28 @@ packages:
vue-i18n:
optional: true
- '@intlify/core-base@10.0.2':
- resolution: {integrity: sha512-0Ewg801c3f5ukktJVi/BVwxPVbX2lvGflK0G6QxTatbWaMt2YA1QheDGTXS2Nz/PupSDPNOabADsTG9LCoKA1A==}
+ '@intlify/core-base@10.0.3':
+ resolution: {integrity: sha512-ysJnTGDtuXPa6R2Ii4JIvfMVvDahUUny3aY8+P4r6/0TYHkblgzIMjV6cAn60em67AB0M7OWNAdcAVfWWeN8Qg==}
engines: {node: '>= 16'}
'@intlify/message-compiler@10.0.0':
resolution: {integrity: sha512-OcaWc63NC/9p1cMdgoNKBj4d61BH8sUW1Hfs6YijTd9656ZR4rNqXAlRnBrfS5ABq0vjQjpa8VnyvH9hK49yBw==}
engines: {node: '>= 16'}
- '@intlify/message-compiler@10.0.2':
- resolution: {integrity: sha512-PHFnGFEKknuk+RwcafKAjS537Ln0ptSfqmvVdsHKWBytTbiKqZZFX57pmfio2ln+ZLeHuyudcqbTi1zGJUNIcA==}
+ '@intlify/message-compiler@10.0.3':
+ resolution: {integrity: sha512-KC2fG8nCzSYmXjHptEt6i/xM3k6S2szsPaHDCRgWKEYAbeHe6JFm6X4KRw3Csy112A8CxpavMi1dh3h7khwV5w==}
engines: {node: '>= 16'}
'@intlify/shared@10.0.0':
resolution: {integrity: sha512-6ngLfI7DOTew2dcF9WMJx+NnMWghMBhIiHbGg+wRvngpzD5KZJZiJVuzMsUQE1a5YebEmtpTEfUrDp/NqVGdiw==}
engines: {node: '>= 16'}
- '@intlify/shared@10.0.2':
- resolution: {integrity: sha512-sIF9cqB0CwUWLtDb1QDnl4PlTggE4GSnR1aA44thT9Y18rUVdWO2z4w2Ow6O60tsdNzC0WnUd6fU0VXyKQ6WBA==}
+ '@intlify/shared@10.0.3':
+ resolution: {integrity: sha512-PWxrCb6fDlnoGLnXLlWu6d7o/HdWACB9TjRnpLro+9uyfqgWA9hvqg5vekcPRyraTieV5srCbTk/ldYw9V3LHw==}
engines: {node: '>= 16'}
- '@intlify/unplugin-vue-i18n@5.0.0':
- resolution: {integrity: sha512-bIK9DGirnD4lrcTB8aVRIfjafJuXtsRO4uisMC+AmkoQCyFgtgG5eUxzKZ7SCwLd81Y0iWbr2FdSeHJfby369w==}
+ '@intlify/unplugin-vue-i18n@5.2.0':
+ resolution: {integrity: sha512-pmRiPY2Nj9mmSrixT69aO45XxGUr5fDBy/IIw4ajLlDTJm5TSmQKA5YNdsH0uxVDCPWy5tlQrF18hkDwI7UJvg==}
engines: {node: '>= 18'}
peerDependencies:
petite-vue-i18n: '*'
@@ -3948,8 +3954,8 @@ packages:
vue-i18n:
optional: true
- '@intlify/vue-i18n-extensions@6.2.0':
- resolution: {integrity: sha512-RN6Jg80NxY/yv408zFQz/pSLh6mw7cFU/WoykzNsb24L8H0YvktOkdLtJSZcKgRiAlbK0MpK4n4nG2n8FxHiNw==}
+ '@intlify/vue-i18n-extensions@7.0.0':
+ resolution: {integrity: sha512-MtvfJnb4aklpCU5Q/dkWkBT/vGsp3qERiPIwtTq5lX4PCLHtUprAJZp8wQj5ZcwDaFCU7+yVMjYbeXpIf927cA==}
engines: {node: '>= 18'}
peerDependencies:
'@intlify/shared': ^9.0.0 || ^10.0.0
@@ -4182,6 +4188,11 @@ packages:
resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ '@playwright/test@1.47.2':
+ resolution: {integrity: sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
'@pnpm/config.env-replace@1.1.0':
resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==}
engines: {node: '>=12.22.0'}
@@ -4552,9 +4563,6 @@ packages:
'@types/http-proxy@1.17.15':
resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==}
- '@types/jsdom@21.1.7':
- resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
-
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -4624,9 +4632,6 @@ packages:
'@types/sortablejs@1.15.8':
resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==}
- '@types/tough-cookie@4.0.5':
- resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
-
'@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
@@ -4992,10 +4997,6 @@ packages:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
- agent-base@7.1.1:
- resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
- engines: {node: '>= 14'}
-
agentkeepalive@4.5.0:
resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
engines: {node: '>= 8.0.0'}
@@ -5787,10 +5788,6 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
- cssstyle@4.1.0:
- resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==}
- engines: {node: '>=18'}
-
csstype@3.0.11:
resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
@@ -5810,10 +5807,6 @@ packages:
resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
engines: {node: '>=12'}
- data-urls@5.0.0:
- resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
- engines: {node: '>=18'}
-
data-view-buffer@1.0.1:
resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
engines: {node: '>= 0.4'}
@@ -5890,9 +5883,6 @@ packages:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
- decimal.js@10.4.3:
- resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
-
deep-eql@5.0.2:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
@@ -6640,6 +6630,11 @@ packages:
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ fsevents@2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -6829,6 +6824,10 @@ packages:
h3@1.12.0:
resolution: {integrity: sha512-Zi/CcNeWBXDrFNlV0hUBJQR9F7a96RjMeAZweW/ZWkR9fuXrMcvKnSA63f/zZ9l0GgQOZDVHGvXivNN9PWOwhA==}
+ happy-dom@15.7.4:
+ resolution: {integrity: sha512-r1vadDYGMtsHAAsqhDuk4IpPvr6N8MGKy5ntBo7tSdim+pWDxus2PNqOcOt8LuDZ4t3KJHE+gCuzupcx/GKnyQ==}
+ engines: {node: '>=18.0.0'}
+
has-bigints@1.0.2:
resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
@@ -6893,10 +6892,6 @@ packages:
hosted-git-info@2.8.9:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
- html-encoding-sniffer@4.0.0:
- resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
- engines: {node: '>=18'}
-
html-minifier-terser@6.1.0:
resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==}
engines: {node: '>=12'}
@@ -6931,10 +6926,6 @@ packages:
resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==}
engines: {node: '>= 6'}
- http-proxy-agent@7.0.2:
- resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
- engines: {node: '>= 14'}
-
http-shutdown@1.2.2:
resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==}
engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
@@ -6943,10 +6934,6 @@ packages:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
engines: {node: '>= 6'}
- https-proxy-agent@7.0.5:
- resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==}
- engines: {node: '>= 14'}
-
httpxy@0.1.5:
resolution: {integrity: sha512-hqLDO+rfststuyEUTWObQK6zHEEmZ/kaIP2/zclGGZn6X8h/ESTWg+WKecQ/e5k4nPswjzZD+q2VqZIbr15CoQ==}
@@ -7198,9 +7185,6 @@ packages:
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
engines: {node: '>=0.10.0'}
- is-potential-custom-element-name@1.0.1:
- resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
-
is-reference@1.2.1:
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
@@ -7340,15 +7324,6 @@ packages:
resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==}
engines: {node: '>=12.0.0'}
- jsdom@25.0.1:
- resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==}
- engines: {node: '>=18'}
- peerDependencies:
- canvas: ^2.11.2
- peerDependenciesMeta:
- canvas:
- optional: true
-
jsesc@0.5.0:
resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
hasBin: true
@@ -7976,9 +7951,6 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- nwsapi@2.2.12:
- resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==}
-
nypm@0.3.11:
resolution: {integrity: sha512-E5GqaAYSnbb6n1qZyik2wjPDZON43FqOJO59+3OkWrnmQtjggrMOVnsyzfjxp/tS6nlYJBA4zRA5jSM2YaadMg==}
engines: {node: ^14.16.0 || >=16.10.0}
@@ -8261,6 +8233,16 @@ packages:
pkg-types@1.2.0:
resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==}
+ playwright-core@1.47.2:
+ resolution: {integrity: sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ playwright@1.47.2:
+ resolution: {integrity: sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
please-upgrade-node@3.2.0:
resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==}
@@ -8598,8 +8580,8 @@ packages:
peerDependencies:
postcss: ^8.4
- postcss-preset-env@10.0.3:
- resolution: {integrity: sha512-1nrZ4IeBXEEj53IMoRKE+k/Ub6nQb3gFjaxTeyUNG5zv3JQclFDY5GKKhAi3nsa1lnPMWgzQX+/1y6wUt2+I7Q==}
+ postcss-preset-env@10.0.4:
+ resolution: {integrity: sha512-FKwHOV7NHxu7PNhAhhOSwbAQrHTcvF/yfrObNMr4iTljmPYzsM7eRr9sYhSFq2if1GahrAv1SmmhFrcNWdFIuA==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -9063,9 +9045,6 @@ packages:
resolution: {integrity: sha512-G7689wvCM0szMFXUAhi3GfNGcSPlndg077cdRWoq7UegOAwfU2MJ0jD7s7jB+2ppKA75Kr/O0HwAP9+rRdBctg==}
engines: {node: ^14.13.1 || >=16.0.0}
- rrweb-cssom@0.7.1:
- resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
-
run-applescript@7.0.0:
resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
engines: {node: '>=18'}
@@ -9102,10 +9081,6 @@ packages:
sax@1.4.1:
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
- saxes@6.0.0:
- resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
- engines: {node: '>=v12.22.7'}
-
scroll-into-view-if-needed@2.2.31:
resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
@@ -9562,9 +9537,6 @@ packages:
engines: {node: '>=14.0.0'}
hasBin: true
- symbol-tree@3.2.4:
- resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
-
synckit@0.6.2:
resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==}
engines: {node: '>=12.20'}
@@ -9674,13 +9646,6 @@ packages:
resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
engines: {node: '>=14.0.0'}
- tldts-core@6.1.47:
- resolution: {integrity: sha512-6SWyFMnlst1fEt7GQVAAu16EGgFK0cLouH/2Mk6Ftlwhv3Ol40L0dlpGMcnnNiiOMyD2EV/aF3S+U2nKvvLvrA==}
-
- tldts@6.1.47:
- resolution: {integrity: sha512-R/K2tZ5MiY+mVrnSkNJkwqYT2vUv1lcT6wJvd2emGaMJ7PHUGRY4e3tUsdFCXgqxi2QgbHjL3yJgXCo40v9Hxw==}
- hasBin: true
-
tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
@@ -9701,20 +9666,12 @@ packages:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
- tough-cookie@5.0.0:
- resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==}
- engines: {node: '>=16'}
-
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
tr46@1.0.1:
resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
- tr46@5.0.0:
- resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
- engines: {node: '>=18'}
-
treemate@0.3.11:
resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
@@ -10202,8 +10159,8 @@ packages:
peerDependencies:
eslint: '>=6.0.0'
- vue-i18n@10.0.2:
- resolution: {integrity: sha512-osoes79ecpqdzYYhywp/pDLlPMoyQ5MHJvjAitQLmXiaCj/ejC8YIeWIwIsDdqWcvkrVFmROYDLcGgGCVn7g0Q==}
+ vue-i18n@10.0.3:
+ resolution: {integrity: sha512-8ul2S4Hy9orKs7eOlkw/zqnVu98GttUdyIMRyjoMpv6hFPxnybgBLdep/UCmdan5kUHyxqMnr2cGHTBuPBYJaw==}
engines: {node: '>= 16'}
peerDependencies:
vue: 3.5.7
@@ -10238,10 +10195,6 @@ packages:
peerDependencies:
vue: 3.5.7
- w3c-xmlserializer@5.0.0:
- resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
- engines: {node: '>=18'}
-
warning@4.0.3:
resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==}
@@ -10266,14 +10219,14 @@ packages:
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
engines: {node: '>=18'}
+ whatwg-mimetype@3.0.0:
+ resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
+ engines: {node: '>=12'}
+
whatwg-mimetype@4.0.0:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
- whatwg-url@14.0.0:
- resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==}
- engines: {node: '>=18'}
-
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
@@ -10390,18 +10343,6 @@ packages:
resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
- ws@8.18.0:
- resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
xdg-basedir@5.1.0:
resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==}
engines: {node: '>=12'}
@@ -10410,13 +10351,6 @@ packages:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}
- xml-name-validator@5.0.0:
- resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
- engines: {node: '>=18'}
-
- xmlchars@2.2.0:
- resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
-
y18n@4.0.3:
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
@@ -12126,7 +12060,7 @@ snapshots:
postcss: 8.4.47
postcss-selector-parser: 6.1.2
- '@csstools/postcss-light-dark-function@2.0.2(postcss@8.4.47)':
+ '@csstools/postcss-light-dark-function@2.0.3(postcss@8.4.47)':
dependencies:
'@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1)
'@csstools/css-tokenizer': 3.0.1
@@ -12683,7 +12617,7 @@ snapshots:
dependencies:
'@swc/helpers': 0.5.13
- '@intlify/bundle-utils@9.0.0-beta.0(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))':
+ '@intlify/bundle-utils@9.0.0-beta.0(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))':
dependencies:
'@intlify/message-compiler': 10.0.0
'@intlify/shared': 10.0.0
@@ -12695,33 +12629,33 @@ snapshots:
source-map-js: 1.2.1
yaml-eslint-parser: 1.2.3
optionalDependencies:
- vue-i18n: 10.0.2(vue@3.5.7(typescript@5.6.2))
+ vue-i18n: 10.0.3(vue@3.5.7(typescript@5.6.2))
- '@intlify/core-base@10.0.2':
+ '@intlify/core-base@10.0.3':
dependencies:
- '@intlify/message-compiler': 10.0.2
- '@intlify/shared': 10.0.2
+ '@intlify/message-compiler': 10.0.3
+ '@intlify/shared': 10.0.3
'@intlify/message-compiler@10.0.0':
dependencies:
'@intlify/shared': 10.0.0
source-map-js: 1.2.1
- '@intlify/message-compiler@10.0.2':
+ '@intlify/message-compiler@10.0.3':
dependencies:
- '@intlify/shared': 10.0.2
+ '@intlify/shared': 10.0.3
source-map-js: 1.2.1
'@intlify/shared@10.0.0': {}
- '@intlify/shared@10.0.2': {}
+ '@intlify/shared@10.0.3': {}
- '@intlify/unplugin-vue-i18n@5.0.0(@vue/compiler-dom@3.5.8)(eslint@9.11.0(jiti@1.21.6))(rollup@4.22.4)(typescript@5.6.2)(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))':
+ '@intlify/unplugin-vue-i18n@5.2.0(@vue/compiler-dom@3.5.8)(eslint@9.11.0(jiti@1.21.6))(rollup@4.22.4)(typescript@5.6.2)(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.11.0(jiti@1.21.6))
- '@intlify/bundle-utils': 9.0.0-beta.0(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))
+ '@intlify/bundle-utils': 9.0.0-beta.0(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))
'@intlify/shared': 10.0.0
- '@intlify/vue-i18n-extensions': 6.2.0(@intlify/shared@10.0.0)(@vue/compiler-dom@3.5.8)(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))
+ '@intlify/vue-i18n-extensions': 7.0.0(@intlify/shared@10.0.0)(@vue/compiler-dom@3.5.8)(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))
'@rollup/pluginutils': 5.1.0(rollup@4.22.4)
'@typescript-eslint/scope-manager': 7.18.0
'@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2)
@@ -12729,14 +12663,13 @@ snapshots:
fast-glob: 3.3.2
js-yaml: 4.1.0
json5: 2.2.3
- mlly: 1.7.1
pathe: 1.1.2
picocolors: 1.1.0
source-map-js: 1.2.1
unplugin: 1.14.1
vue: 3.5.7(typescript@5.6.2)
optionalDependencies:
- vue-i18n: 10.0.2(vue@3.5.7(typescript@5.6.2))
+ vue-i18n: 10.0.3(vue@3.5.7(typescript@5.6.2))
transitivePeerDependencies:
- '@vue/compiler-dom'
- eslint
@@ -12745,14 +12678,14 @@ snapshots:
- typescript
- webpack-sources
- '@intlify/vue-i18n-extensions@6.2.0(@intlify/shared@10.0.0)(@vue/compiler-dom@3.5.8)(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))':
+ '@intlify/vue-i18n-extensions@7.0.0(@intlify/shared@10.0.0)(@vue/compiler-dom@3.5.8)(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))':
dependencies:
'@babel/parser': 7.25.6
optionalDependencies:
'@intlify/shared': 10.0.0
'@vue/compiler-dom': 3.5.8
vue: 3.5.7(typescript@5.6.2)
- vue-i18n: 10.0.2(vue@3.5.7(typescript@5.6.2))
+ vue-i18n: 10.0.3(vue@3.5.7(typescript@5.6.2))
'@ioredis/commands@1.2.0': {}
@@ -13111,6 +13044,10 @@ snapshots:
'@pkgr/core@0.1.1': {}
+ '@playwright/test@1.47.2':
+ dependencies:
+ playwright: 1.47.2
+
'@pnpm/config.env-replace@1.1.0': {}
'@pnpm/network.ca-file@1.0.2':
@@ -13534,12 +13471,6 @@ snapshots:
dependencies:
'@types/node': 22.5.5
- '@types/jsdom@21.1.7':
- dependencies:
- '@types/node': 22.5.5
- '@types/tough-cookie': 4.0.5
- parse5: 7.1.2
-
'@types/json-schema@7.0.15': {}
'@types/jsonfile@6.1.4':
@@ -13608,8 +13539,6 @@ snapshots:
'@types/sortablejs@1.15.8': {}
- '@types/tough-cookie@4.0.5': {}
-
'@types/trusted-types@2.0.7': {}
'@types/unist@3.0.3': {}
@@ -14113,12 +14042,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- agent-base@7.1.1:
- dependencies:
- debug: 4.3.7
- transitivePeerDependencies:
- - supports-color
-
agentkeepalive@4.5.0:
dependencies:
humanize-ms: 1.2.1
@@ -15070,10 +14993,6 @@ snapshots:
dependencies:
css-tree: 2.2.1
- cssstyle@4.1.0:
- dependencies:
- rrweb-cssom: 0.7.1
-
csstype@3.0.11: {}
csstype@3.1.3: {}
@@ -15084,11 +15003,6 @@ snapshots:
dargs@8.1.0: {}
- data-urls@5.0.0:
- dependencies:
- whatwg-mimetype: 4.0.0
- whatwg-url: 14.0.0
-
data-view-buffer@1.0.1:
dependencies:
call-bind: 1.0.7
@@ -15139,8 +15053,6 @@ snapshots:
decamelize@1.2.0: {}
- decimal.js@10.4.3: {}
-
deep-eql@5.0.2: {}
deep-extend@0.6.0: {}
@@ -15770,13 +15682,13 @@ snapshots:
optionalDependencies:
'@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)
- eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)(vitest@2.1.1(@types/node@22.5.5)(jsdom@25.0.1)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)):
+ eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)(vitest@2.1.1(@types/node@22.5.5)(happy-dom@15.7.4)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)):
dependencies:
'@typescript-eslint/utils': 7.18.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)
eslint: 9.11.0(jiti@1.21.6)
optionalDependencies:
'@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)
- vitest: 2.1.1(@types/node@22.5.5)(jsdom@25.0.1)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)
+ vitest: 2.1.1(@types/node@22.5.5)(happy-dom@15.7.4)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)
transitivePeerDependencies:
- supports-color
- typescript
@@ -16092,6 +16004,9 @@ snapshots:
fs.realpath@1.0.0: {}
+ fsevents@2.3.2:
+ optional: true
+
fsevents@2.3.3:
optional: true
@@ -16334,6 +16249,12 @@ snapshots:
transitivePeerDependencies:
- uWebSockets.js
+ happy-dom@15.7.4:
+ dependencies:
+ entities: 4.5.0
+ webidl-conversions: 7.0.0
+ whatwg-mimetype: 3.0.0
+
has-bigints@1.0.2: {}
has-flag@3.0.0: {}
@@ -16392,10 +16313,6 @@ snapshots:
hosted-git-info@2.8.9: {}
- html-encoding-sniffer@4.0.0:
- dependencies:
- whatwg-encoding: 3.1.1
-
html-minifier-terser@6.1.0:
dependencies:
camel-case: 4.1.2
@@ -16452,13 +16369,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- http-proxy-agent@7.0.2:
- dependencies:
- agent-base: 7.1.1
- debug: 4.3.7
- transitivePeerDependencies:
- - supports-color
-
http-shutdown@1.2.2: {}
https-proxy-agent@5.0.1:
@@ -16468,13 +16378,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- https-proxy-agent@7.0.5:
- dependencies:
- agent-base: 7.1.1
- debug: 4.3.7
- transitivePeerDependencies:
- - supports-color
-
httpxy@0.1.5: {}
human-id@1.0.2: {}
@@ -16670,8 +16573,6 @@ snapshots:
is-plain-object@5.0.0: {}
- is-potential-custom-element-name@1.0.1: {}
-
is-reference@1.2.1:
dependencies:
'@types/estree': 1.0.6
@@ -16795,34 +16696,6 @@ snapshots:
jsdoc-type-pratt-parser@4.1.0: {}
- jsdom@25.0.1:
- dependencies:
- cssstyle: 4.1.0
- data-urls: 5.0.0
- decimal.js: 10.4.3
- form-data: 4.0.0
- html-encoding-sniffer: 4.0.0
- http-proxy-agent: 7.0.2
- https-proxy-agent: 7.0.5
- is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.12
- parse5: 7.1.2
- rrweb-cssom: 0.7.1
- saxes: 6.0.0
- symbol-tree: 3.2.4
- tough-cookie: 5.0.0
- w3c-xmlserializer: 5.0.0
- webidl-conversions: 7.0.0
- whatwg-encoding: 3.1.1
- whatwg-mimetype: 4.0.0
- whatwg-url: 14.0.0
- ws: 8.18.0
- xml-name-validator: 5.0.0
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
jsesc@0.5.0: {}
jsesc@2.5.2: {}
@@ -17553,8 +17426,6 @@ snapshots:
dependencies:
boolbase: 1.0.0
- nwsapi@2.2.12: {}
-
nypm@0.3.11:
dependencies:
citty: 0.1.6
@@ -17830,6 +17701,14 @@ snapshots:
mlly: 1.7.1
pathe: 1.1.2
+ playwright-core@1.47.2: {}
+
+ playwright@1.47.2:
+ dependencies:
+ playwright-core: 1.47.2
+ optionalDependencies:
+ fsevents: 2.3.2
+
please-upgrade-node@3.2.0:
dependencies:
semver-compare: 1.0.0
@@ -18147,7 +18026,7 @@ snapshots:
postcss: 8.4.47
postcss-value-parser: 4.2.0
- postcss-preset-env@10.0.3(postcss@8.4.47):
+ postcss-preset-env@10.0.4(postcss@8.4.47):
dependencies:
'@csstools/postcss-cascade-layers': 5.0.0(postcss@8.4.47)
'@csstools/postcss-color-function': 4.0.2(postcss@8.4.47)
@@ -18161,7 +18040,7 @@ snapshots:
'@csstools/postcss-ic-unit': 4.0.0(postcss@8.4.47)
'@csstools/postcss-initial': 2.0.0(postcss@8.4.47)
'@csstools/postcss-is-pseudo-class': 5.0.0(postcss@8.4.47)
- '@csstools/postcss-light-dark-function': 2.0.2(postcss@8.4.47)
+ '@csstools/postcss-light-dark-function': 2.0.3(postcss@8.4.47)
'@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.4.47)
'@csstools/postcss-logical-overflow': 2.0.0(postcss@8.4.47)
'@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.4.47)
@@ -18614,8 +18493,6 @@ snapshots:
rotated-array-set@3.0.0: {}
- rrweb-cssom@0.7.1: {}
-
run-applescript@7.0.0: {}
run-parallel@1.2.0:
@@ -18654,10 +18531,6 @@ snapshots:
sax@1.4.1:
optional: true
- saxes@6.0.0:
- dependencies:
- xmlchars: 2.2.0
-
scroll-into-view-if-needed@2.2.31:
dependencies:
compute-scroll-into-view: 1.0.20
@@ -19183,8 +19056,6 @@ snapshots:
csso: 5.0.5
picocolors: 1.1.0
- symbol-tree@3.2.4: {}
-
synckit@0.6.2:
dependencies:
tslib: 2.7.0
@@ -19311,12 +19182,6 @@ snapshots:
tinyspy@3.0.2: {}
- tldts-core@6.1.47: {}
-
- tldts@6.1.47:
- dependencies:
- tldts-core: 6.1.47
-
tmp@0.0.33:
dependencies:
os-tmpdir: 1.0.2
@@ -19331,20 +19196,12 @@ snapshots:
totalist@3.0.1: {}
- tough-cookie@5.0.0:
- dependencies:
- tldts: 6.1.47
-
tr46@0.0.3: {}
tr46@1.0.1:
dependencies:
punycode: 2.3.1
- tr46@5.0.0:
- dependencies:
- punycode: 2.3.1
-
treemate@0.3.11: {}
trim-lines@3.0.1: {}
@@ -19896,7 +19753,7 @@ snapshots:
- typescript
- universal-cookie
- vitest@2.1.1(@types/node@22.5.5)(jsdom@25.0.1)(less@4.2.0)(sass@1.79.3)(terser@5.33.0):
+ vitest@2.1.1(@types/node@22.5.5)(happy-dom@15.7.4)(less@4.2.0)(sass@1.79.3)(terser@5.33.0):
dependencies:
'@vitest/expect': 2.1.1
'@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.7(@types/node@22.5.5)(less@4.2.0)(sass@1.79.3)(terser@5.33.0))
@@ -19919,7 +19776,7 @@ snapshots:
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 22.5.5
- jsdom: 25.0.1
+ happy-dom: 15.7.4
transitivePeerDependencies:
- less
- lightningcss
@@ -19959,10 +19816,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)):
+ vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)):
dependencies:
- '@intlify/core-base': 10.0.2
- '@intlify/shared': 10.0.2
+ '@intlify/core-base': 10.0.3
+ '@intlify/shared': 10.0.3
'@vue/devtools-api': 6.6.4
vue: 3.5.7(typescript@5.6.2)
@@ -20004,10 +19861,6 @@ snapshots:
vooks: 0.2.12(vue@3.5.7(typescript@5.6.2))
vue: 3.5.7(typescript@5.6.2)
- w3c-xmlserializer@5.0.0:
- dependencies:
- xml-name-validator: 5.0.0
-
warning@4.0.3:
dependencies:
loose-envify: 1.4.0
@@ -20026,12 +19879,9 @@ snapshots:
dependencies:
iconv-lite: 0.6.3
- whatwg-mimetype@4.0.0: {}
+ whatwg-mimetype@3.0.0: {}
- whatwg-url@14.0.0:
- dependencies:
- tr46: 5.0.0
- webidl-conversions: 7.0.0
+ whatwg-mimetype@4.0.0: {}
whatwg-url@5.0.0:
dependencies:
@@ -20231,16 +20081,10 @@ snapshots:
imurmurhash: 0.1.4
signal-exit: 4.1.0
- ws@8.18.0: {}
-
xdg-basedir@5.1.0: {}
xml-name-validator@4.0.0: {}
- xml-name-validator@5.0.0: {}
-
- xmlchars@2.2.0: {}
-
y18n@4.0.3: {}
y18n@5.0.8: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index c187a537..8a02c71c 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -29,6 +29,7 @@ catalog:
'@jspm/generator': ^2.3.1
'@manypkg/get-packages': ^2.2.2
'@nolebase/vitepress-plugin-git-changelog': ^2.5.0
+ '@playwright/test': ^1.47.2
'@radix-icons/vue': ^1.0.0
'@stylistic/stylelint-plugin': ^3.0.1
'@tailwindcss/nesting': 0.0.0-insiders.565cd3e
@@ -39,7 +40,6 @@ catalog:
'@types/chalk': ^2.2.0
'@types/eslint': ^9.6.1
'@types/html-minifier-terser': ^7.0.2
- '@types/jsdom': ^21.1.7
'@types/jsonwebtoken': ^9.0.7
'@types/lodash.clonedeep': ^4.5.9
'@types/node': ^22.5.5
@@ -103,10 +103,10 @@ catalog:
get-port: ^7.1.0
globals: ^15.9.0
h3: ^1.12.0
+ happy-dom: ^15.7.4
html-minifier-terser: ^7.2.0
husky: ^9.1.6
is-ci: ^3.0.1
- jsdom: ^25.0.1
jsonc-eslint-parser: ^2.4.0
jsonwebtoken: ^9.0.2
lint-staged: ^15.2.10
@@ -121,6 +121,7 @@ catalog:
pinia: 2.2.2
pinia-plugin-persistedstate: ^4.0.2
pkg-types: ^1.2.0
+ playwright: ^1.47.2
postcss: ^8.4.47
postcss-antd-fixes: ^0.2.0
postcss-html: ^1.7.0
diff --git a/turbo.json b/turbo.json
index 4d1014ca..a1d57e58 100644
--- a/turbo.json
+++ b/turbo.json
@@ -33,6 +33,7 @@
"stub": {
"cache": false
},
+ "test:e2e": {},
"dev": {
"dependsOn": [],
"outputs": [],
diff --git a/vitest.config.ts b/vitest.config.ts
index cada073f..a10b5fa3 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -1,10 +1,11 @@
import Vue from '@vitejs/plugin-vue';
import VueJsx from '@vitejs/plugin-vue-jsx';
-import { defineConfig } from 'vitest/config';
+import { configDefaults, defineConfig } from 'vitest/config';
export default defineConfig({
plugins: [Vue(), VueJsx()],
test: {
- environment: 'jsdom',
+ environment: 'happy-dom',
+ exclude: [...configDefaults.exclude, '**/e2e/**'],
},
});