diff --git a/web/.gitignore b/web/.gitignore
index 048c5f6485..c013209ae9 100644
--- a/web/.gitignore
+++ b/web/.gitignore
@@ -8,6 +8,13 @@
# testing
/coverage
+# playwright e2e
+/e2e/.auth/
+/e2e/test-results/
+/playwright-report/
+/blob-report/
+/test-results/
+
# next.js
/.next/
/out/
diff --git a/web/e2e/README.md b/web/e2e/README.md
new file mode 100644
index 0000000000..2c9219b4c3
--- /dev/null
+++ b/web/e2e/README.md
@@ -0,0 +1,302 @@
+# E2E Testing Guide
+
+This directory contains End-to-End (E2E) tests for the Dify web application using [Playwright](https://playwright.dev/).
+
+## Quick Start
+
+### 1. Setup
+
+```bash
+# Install dependencies (if not already done)
+pnpm install
+
+# Install Playwright browsers
+pnpm exec playwright install chromium
+```
+
+### 2. Configure Environment (Optional)
+
+Add E2E test configuration to your `web/.env.local` file:
+
+```env
+# E2E Test Configuration
+# Base URL of the frontend (optional, defaults to http://localhost:3000)
+E2E_BASE_URL=https://test.example.com
+
+# Skip starting dev server (use existing deployed server)
+E2E_SKIP_WEB_SERVER=true
+
+# API URL (optional, defaults to http://localhost:5001/console/api)
+NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
+```
+
+### 3. Run Tests
+
+```bash
+# Run all E2E tests
+pnpm test:e2e
+
+# Run tests with UI (interactive mode)
+pnpm test:e2e:ui
+
+# Run tests with browser visible
+pnpm test:e2e:headed
+
+# Run tests in debug mode
+pnpm test:e2e:debug
+
+# View test report
+pnpm test:e2e:report
+```
+
+## Project Structure
+
+```
+web/
+├── .env.local # Environment config (includes E2E variables)
+├── playwright.config.ts # Playwright configuration
+└── e2e/
+ ├── fixtures/ # Test fixtures (extended test objects)
+ │ └── index.ts # Main fixtures with page objects
+ ├── pages/ # Page Object Models (POM)
+ │ ├── base.page.ts # Base class for all page objects
+ │ ├── signin.page.ts # Sign-in page interactions
+ │ ├── apps.page.ts # Apps listing page interactions
+ │ ├── workflow.page.ts # Workflow editor interactions
+ │ └── index.ts # Page objects export
+ ├── tests/ # Test files (*.spec.ts)
+ ├── utils/ # Test utilities
+ │ ├── index.ts # Utils export
+ │ ├── test-helpers.ts # Common helper functions
+ │ └── api-helpers.ts # API-level test helpers
+ ├── .auth/ # Authentication state (gitignored)
+ ├── global.setup.ts # Authentication setup
+ ├── global.teardown.ts # Cleanup after tests
+ └── README.md # This file
+```
+
+## Writing Tests
+
+### Using Page Objects
+
+```typescript
+import { test, expect } from '../fixtures'
+
+test('create a new app', async ({ appsPage }) => {
+ await appsPage.goto()
+ await appsPage.createApp({
+ name: 'My Test App',
+ type: 'chatbot',
+ })
+ await appsPage.expectAppExists('My Test App')
+})
+```
+
+### Using Test Helpers
+
+```typescript
+import { test, expect } from '../fixtures'
+import { generateTestId, waitForNetworkIdle } from '../utils/test-helpers'
+
+test('search functionality', async ({ appsPage }) => {
+ const uniqueName = generateTestId('app')
+ // ... test logic
+})
+```
+
+### Test Data Cleanup
+
+Always clean up test data to avoid polluting the database:
+
+```typescript
+test('create and delete app', async ({ appsPage }) => {
+ const appName = generateTestId('test-app')
+
+ // Create
+ await appsPage.createApp({ name: appName, type: 'chatbot' })
+
+ // Test assertions
+ await appsPage.expectAppExists(appName)
+
+ // Cleanup
+ await appsPage.deleteApp(appName)
+})
+```
+
+### Skipping Authentication
+
+For tests that need to verify unauthenticated behavior:
+
+```typescript
+test.describe('unauthenticated tests', () => {
+ test.use({ storageState: { cookies: [], origins: [] } })
+
+ test('redirects to login', async ({ page }) => {
+ await page.goto('/apps')
+ await expect(page).toHaveURL(/\/signin/)
+ })
+})
+```
+
+## Best Practices
+
+### 1. Use Page Object Model (POM)
+
+- Encapsulate page interactions in page objects
+- Makes tests more readable and maintainable
+- Changes to selectors only need to be updated in one place
+
+### 2. Use Meaningful Test Names
+
+```typescript
+// Good
+test('should display error message for invalid email format', ...)
+
+// Bad
+test('test1', ...)
+```
+
+### 3. Use Data-TestId Attributes
+
+When adding elements to the application, use `data-testid` attributes:
+
+```tsx
+// In React component
+
+
+// In test
+await page.getByTestId('create-app-button').click()
+```
+
+### 4. Generate Unique Test Data
+
+```typescript
+import { generateTestId } from '../utils/test-helpers'
+
+const appName = generateTestId('my-app') // e.g., "my-app-1732567890123-abc123"
+```
+
+### 5. Handle Async Operations
+
+```typescript
+// Wait for element
+await expect(element).toBeVisible({ timeout: 10000 })
+
+// Wait for navigation
+await page.waitForURL(/\/apps/)
+
+// Wait for network
+await page.waitForLoadState('networkidle')
+```
+
+## Creating New Page Objects
+
+1. Create a new file in `e2e/pages/`:
+
+```typescript
+// e2e/pages/my-feature.page.ts
+import type { Page, Locator } from '@playwright/test'
+import { BasePage } from './base.page'
+
+export class MyFeaturePage extends BasePage {
+ readonly myElement: Locator
+
+ constructor(page: Page) {
+ super(page)
+ this.myElement = page.getByTestId('my-element')
+ }
+
+ get path(): string {
+ return '/my-feature'
+ }
+
+ async doSomething(): Promise {
+ await this.myElement.click()
+ }
+}
+```
+
+2. Export from `e2e/pages/index.ts`:
+
+```typescript
+export { MyFeaturePage } from './my-feature.page'
+```
+
+3. Add to fixtures in `e2e/fixtures/index.ts`:
+
+```typescript
+import { MyFeaturePage } from '../pages/my-feature.page'
+
+type DifyFixtures = {
+ // ... existing fixtures
+ myFeaturePage: MyFeaturePage
+}
+
+export const test = base.extend({
+ // ... existing fixtures
+ myFeaturePage: async ({ page }, use) => {
+ await use(new MyFeaturePage(page))
+ },
+})
+```
+
+## Debugging
+
+### Visual Debugging
+
+```bash
+# Open Playwright UI
+pnpm test:e2e:ui
+
+# Run with visible browser
+pnpm test:e2e:headed
+
+# Debug mode with inspector
+pnpm test:e2e:debug
+```
+
+### Traces and Screenshots
+
+Failed tests automatically capture:
+- Screenshots
+- Video recordings
+- Trace files
+
+View them:
+```bash
+pnpm test:e2e:report
+```
+
+### Manual Trace Viewing
+
+```bash
+pnpm exec playwright show-trace e2e/test-results/path-to-trace.zip
+```
+
+## Troubleshooting
+
+### Tests timeout waiting for elements
+
+1. Check if selectors are correct
+2. Increase timeout: `{ timeout: 30000 }`
+3. Add explicit waits: `await page.waitForSelector(...)`
+
+### Authentication issues
+
+1. Make sure global.setup.ts has completed successfully
+2. For deployed environments, ensure E2E_BASE_URL matches your cookie domain
+3. Clear auth state: `rm -rf e2e/.auth/`
+
+### Flaky tests
+
+1. Add explicit waits for async operations
+2. Use `test.slow()` for inherently slow tests
+3. Add retry logic for unstable operations
+
+## Resources
+
+- [Playwright Documentation](https://playwright.dev/docs/intro)
+- [Page Object Model Pattern](https://playwright.dev/docs/pom)
+- [Best Practices](https://playwright.dev/docs/best-practices)
+- [Debugging Guide](https://playwright.dev/docs/debug)
+
diff --git a/web/e2e/fixtures/index.ts b/web/e2e/fixtures/index.ts
new file mode 100644
index 0000000000..c92fa637ca
--- /dev/null
+++ b/web/e2e/fixtures/index.ts
@@ -0,0 +1,55 @@
+import { test as base, expect } from '@playwright/test'
+import { AppsPage } from '../pages/apps.page'
+import { SignInPage } from '../pages/signin.page'
+import { WorkflowPage } from '../pages/workflow.page'
+
+/**
+ * Extended test fixtures for Dify E2E tests
+ *
+ * This module provides custom fixtures that inject page objects
+ * into tests, making it easier to write maintainable tests.
+ *
+ * @example
+ * ```typescript
+ * import { test, expect } from '@/e2e/fixtures'
+ *
+ * test('can create new app', async ({ appsPage }) => {
+ * await appsPage.goto()
+ * await appsPage.createApp('My Test App')
+ * await expect(appsPage.appCard('My Test App')).toBeVisible()
+ * })
+ * ```
+ */
+
+// Define custom fixtures type
+type DifyFixtures = {
+ appsPage: AppsPage
+ signInPage: SignInPage
+ workflowPage: WorkflowPage
+}
+
+/**
+ * Extended test object with Dify-specific fixtures
+ */
+export const test = base.extend({
+ // Apps page fixture
+ appsPage: async ({ page }, run) => {
+ const appsPage = new AppsPage(page)
+ await run(appsPage)
+ },
+
+ // Sign in page fixture
+ signInPage: async ({ page }, run) => {
+ const signInPage = new SignInPage(page)
+ await run(signInPage)
+ },
+
+ // Workflow page fixture
+ workflowPage: async ({ page }, run) => {
+ const workflowPage = new WorkflowPage(page)
+ await run(workflowPage)
+ },
+})
+
+// Re-export expect for convenience
+export { expect }
diff --git a/web/e2e/global.setup.ts b/web/e2e/global.setup.ts
new file mode 100644
index 0000000000..ec7001ddcd
--- /dev/null
+++ b/web/e2e/global.setup.ts
@@ -0,0 +1,78 @@
+import { expect, test as setup } from '@playwright/test'
+import fs from 'node:fs'
+import path from 'node:path'
+
+const authFile = path.join(__dirname, '.auth/user.json')
+
+/**
+ * Global setup for E2E tests
+ *
+ * This runs before all tests and handles authentication.
+ * The authenticated state is saved and reused across all tests.
+ *
+ * Based on signin implementation:
+ * - web/app/signin/components/mail-and-password-auth.tsx
+ */
+setup('authenticate', async ({ page }) => {
+ // Get test user credentials from environment
+ const email = process.env.NEXT_PUBLIC_E2E_USER_EMAIL
+ const password = process.env.NEXT_PUBLIC_E2E_USER_PASSWORD
+
+ if (!email || !password) {
+ console.warn(
+ '⚠️ NEXT_PUBLIC_E2E_USER_EMAIL or NEXT_PUBLIC_E2E_USER_PASSWORD not set.',
+ 'Creating empty auth state. Tests requiring auth will fail.',
+ )
+ // Create empty auth state directory if it doesn't exist
+ const authDir = path.dirname(authFile)
+ if (!fs.existsSync(authDir))
+ fs.mkdirSync(authDir, { recursive: true })
+
+ // Save empty state
+ await page.context().storageState({ path: authFile })
+ return
+ }
+
+ // Navigate to login page
+ await page.goto('/signin')
+
+ // Wait for the page to load
+ await page.waitForLoadState('networkidle')
+
+ // Fill in login form using actual Dify selectors
+ // Email input has id="email"
+ await page.locator('#email').fill(email)
+ // Password input has id="password"
+ await page.locator('#password').fill(password)
+
+ // Wait for button to be enabled (form validation passes)
+ const signInButton = page.getByRole('button', { name: 'Sign in' })
+ await expect(signInButton).toBeEnabled({ timeout: 5000 })
+
+ // Click login button and wait for the login API response
+ const [response] = await Promise.all([
+ page.waitForResponse(resp =>
+ resp.url().includes('/login') && resp.request().method() === 'POST',
+ ),
+ signInButton.click(),
+ ])
+
+ // Check if login request was successful
+ const status = response.status()
+ if (status === 200) {
+ // Redirect response means login successful (server-side redirect)
+ console.log('✅ Login successful (redirect response)')
+ // Wait for navigation to complete (redirect to /apps)
+ // See: mail-and-password-auth.tsx line 71 - router.replace(redirectUrl || '/apps')
+ await expect(page).toHaveURL(/\/apps/, { timeout: 30000 })
+ }
+ else {
+ // Other status codes indicate failure
+ throw new Error(`Login request failed with status ${status}`)
+ }
+
+ // Save authenticated state
+ await page.context().storageState({ path: authFile })
+
+ console.log('✅ Authentication successful, state saved.')
+})
diff --git a/web/e2e/global.teardown.ts b/web/e2e/global.teardown.ts
new file mode 100644
index 0000000000..c4187b86ac
--- /dev/null
+++ b/web/e2e/global.teardown.ts
@@ -0,0 +1,199 @@
+import { request, test as teardown } from '@playwright/test'
+
+/**
+ * Global teardown for E2E tests
+ *
+ * This runs after all tests complete.
+ * Cleans up test data created during E2E tests.
+ *
+ * Environment variables:
+ * - NEXT_PUBLIC_API_PREFIX: API URL (default: http://localhost:5001/console/api)
+ *
+ * Based on Dify API:
+ * - GET /apps - list all apps
+ * - DELETE /apps/{id} - delete an app
+ * - GET /datasets - list all datasets
+ * - DELETE /datasets/{id} - delete a dataset
+ */
+
+// API base URL with fallback for local development
+// Ensure baseURL ends with '/' for proper path concatenation
+const API_BASE_URL = (process.env.NEXT_PUBLIC_API_PREFIX || 'http://localhost:5001/console/api').replace(/\/?$/, '/')
+
+// Test data prefixes - used to identify test-created data
+// Should match the prefix used in generateTestId()
+const TEST_DATA_PREFIXES = ['e2e-', 'test-']
+
+/**
+ * Check if a name matches test data pattern
+ */
+function isTestData(name: string): boolean {
+ return TEST_DATA_PREFIXES.some(prefix => name.toLowerCase().startsWith(prefix))
+}
+
+/**
+ * Delete a single app by ID
+ */
+async function deleteApp(
+ context: Awaited>,
+ app: { id: string, name: string },
+): Promise {
+ try {
+ const response = await context.delete(`apps/${app.id}`)
+ return response.ok()
+ }
+ catch {
+ console.warn(` Failed to delete app "${app.name}"`)
+ return false
+ }
+}
+
+/**
+ * Delete a single dataset by ID
+ */
+async function deleteDataset(
+ context: Awaited>,
+ dataset: { id: string, name: string },
+): Promise {
+ try {
+ const response = await context.delete(`datasets/${dataset.id}`)
+ return response.ok()
+ }
+ catch {
+ console.warn(` Failed to delete dataset "${dataset.name}"`)
+ return false
+ }
+}
+
+teardown('cleanup test data', async () => {
+ console.log('🧹 Starting global teardown...')
+
+ const fs = await import('node:fs')
+ const authPath = 'e2e/.auth/user.json'
+
+ // Check if auth state file exists and has cookies
+ if (!fs.existsSync(authPath)) {
+ console.warn('⚠️ Auth state file not found, skipping cleanup')
+ console.log('🧹 Global teardown complete.')
+ return
+ }
+
+ let csrfToken = ''
+ try {
+ const authState = JSON.parse(fs.readFileSync(authPath, 'utf-8'))
+ if (!authState.cookies || authState.cookies.length === 0) {
+ console.warn('⚠️ Auth state is empty (no cookies), skipping cleanup')
+ console.log('🧹 Global teardown complete.')
+ return
+ }
+ // Extract CSRF token from cookies for API requests
+ const csrfCookie = authState.cookies.find((c: { name: string }) => c.name === 'csrf_token')
+ csrfToken = csrfCookie?.value || ''
+ }
+ catch {
+ console.warn('⚠️ Failed to read auth state, skipping cleanup')
+ console.log('🧹 Global teardown complete.')
+ return
+ }
+
+ try {
+ // Create API request context with auth state and CSRF header
+ const context = await request.newContext({
+ baseURL: API_BASE_URL,
+ storageState: authPath,
+ extraHTTPHeaders: {
+ 'X-CSRF-Token': csrfToken,
+ },
+ })
+
+ // Clean up test apps
+ const appsDeleted = await cleanupTestApps(context)
+ console.log(` 📱 Deleted ${appsDeleted} test apps`)
+
+ // Clean up test datasets
+ const datasetsDeleted = await cleanupTestDatasets(context)
+ console.log(` 📚 Deleted ${datasetsDeleted} test datasets`)
+
+ await context.dispose()
+ }
+ catch (error) {
+ // Don't fail teardown if cleanup fails - just log the error
+ console.warn('⚠️ Teardown cleanup encountered errors:', error)
+ }
+
+ // Clean up auth state file in CI environment for security
+ // In local development, keep it for faster iteration (skip re-login)
+ if (process.env.CI) {
+ try {
+ fs.unlinkSync(authPath)
+ console.log(' 🔐 Auth state file deleted (CI mode)')
+ }
+ catch {
+ // Ignore if file doesn't exist or can't be deleted
+ }
+ }
+
+ console.log('🧹 Global teardown complete.')
+})
+
+/**
+ * Clean up test apps
+ * Deletes all apps with names starting with test prefixes
+ */
+async function cleanupTestApps(context: Awaited>): Promise {
+ try {
+ // Fetch all apps - API: GET /apps
+ const response = await context.get('apps', {
+ params: { page: 1, limit: 100 },
+ })
+
+ if (!response.ok()) {
+ console.warn(' Failed to fetch apps list:', response.status(), response.url())
+ return 0
+ }
+
+ const data = await response.json()
+ const apps: Array<{ id: string, name: string }> = data.data || []
+
+ // Filter test apps and delete them
+ const testApps = apps.filter(app => isTestData(app.name))
+ const results = await Promise.all(testApps.map(app => deleteApp(context, app)))
+
+ return results.filter(Boolean).length
+ }
+ catch (error) {
+ console.warn(' Error cleaning up apps:', error)
+ return 0
+ }
+}
+
+/**
+ * Clean up test datasets (knowledge bases)
+ * Deletes all datasets with names starting with test prefixes
+ */
+async function cleanupTestDatasets(context: Awaited>): Promise {
+ try {
+ // Fetch all datasets - API: GET /datasets
+ const response = await context.get('datasets', {
+ params: { page: 1, limit: 100 },
+ })
+
+ if (!response.ok()) {
+ console.warn(' Failed to fetch datasets list:', response.status(), response.url())
+ return 0
+ }
+
+ const data = await response.json()
+ const datasets: Array<{ id: string, name: string }> = data.data || []
+
+ // Filter test datasets and delete them
+ const testDatasets = datasets.filter(dataset => isTestData(dataset.name))
+ const results = await Promise.all(testDatasets.map(dataset => deleteDataset(context, dataset)))
+
+ return results.filter(Boolean).length
+ }
+ catch (error) {
+ console.warn(' Error cleaning up datasets:', error)
+ return 0
+ }
+}
diff --git a/web/e2e/pages/apps.page.ts b/web/e2e/pages/apps.page.ts
new file mode 100644
index 0000000000..56cd8bd8f0
--- /dev/null
+++ b/web/e2e/pages/apps.page.ts
@@ -0,0 +1,243 @@
+import type { Locator, Page } from '@playwright/test'
+import { expect } from '@playwright/test'
+import { BasePage } from './base.page'
+
+/**
+ * Apps (Studio) Page Object Model
+ *
+ * Handles interactions with the main apps listing page.
+ * Based on: web/app/components/apps/list.tsx
+ * web/app/components/apps/new-app-card.tsx
+ * web/app/components/apps/app-card.tsx
+ */
+export class AppsPage extends BasePage {
+ // Main page elements
+ readonly createFromBlankButton: Locator
+ readonly createFromTemplateButton: Locator
+ readonly importDSLButton: Locator
+ readonly searchInput: Locator
+ readonly appGrid: Locator
+
+ // Create app modal elements (from create-app-modal/index.tsx)
+ readonly createAppModal: Locator
+ readonly appNameInput: Locator
+ readonly appDescriptionInput: Locator
+ readonly createButton: Locator
+ readonly cancelButton: Locator
+
+ // App type selectors in create modal
+ readonly chatbotType: Locator
+ readonly completionType: Locator
+ readonly workflowType: Locator
+ readonly agentType: Locator
+ readonly chatflowType: Locator
+
+ // Delete confirmation
+ readonly deleteConfirmButton: Locator
+
+ constructor(page: Page) {
+ super(page)
+
+ // Create app card buttons (from new-app-card.tsx)
+ // t('app.newApp.startFromBlank') = "Create from Blank"
+ this.createFromBlankButton = page.getByRole('button', { name: 'Create from Blank' })
+ // t('app.newApp.startFromTemplate') = "Create from Template"
+ this.createFromTemplateButton = page.getByRole('button', { name: 'Create from Template' })
+ // t('app.importDSL') = "Import DSL file"
+ this.importDSLButton = page.getByRole('button', { name: /Import DSL/i })
+
+ // Search input (from list.tsx)
+ this.searchInput = page.getByPlaceholder(/search/i)
+
+ // App grid container
+ this.appGrid = page.locator('.grid').first()
+
+ // Create app modal
+ this.createAppModal = page.locator('[class*="fullscreen-modal"]').or(page.getByRole('dialog'))
+
+ // App name input - placeholder: t('app.newApp.appNamePlaceholder') = "Give your app a name"
+ this.appNameInput = page.getByPlaceholder('Give your app a name')
+
+ // Description input - placeholder: t('app.newApp.appDescriptionPlaceholder') = "Enter the description of the app"
+ this.appDescriptionInput = page.getByPlaceholder('Enter the description of the app')
+
+ // Create button - t('app.newApp.Create') = "Create"
+ this.createButton = page.getByRole('button', { name: 'Create', exact: true })
+ this.cancelButton = page.getByRole('button', { name: 'Cancel' })
+
+ // App type selectors (from create-app-modal)
+ // These are displayed as clickable cards/buttons
+ this.chatbotType = page.getByText('Chatbot', { exact: true })
+ this.completionType = page.getByText('Completion', { exact: true }).or(page.getByText('Text Generator'))
+ this.workflowType = page.getByText('Workflow', { exact: true })
+ this.agentType = page.getByText('Agent', { exact: true })
+ this.chatflowType = page.getByText('Chatflow', { exact: true })
+
+ // Delete confirmation button
+ this.deleteConfirmButton = page.getByRole('button', { name: /confirm|delete/i }).last()
+ }
+
+ get path(): string {
+ return '/apps'
+ }
+
+ /**
+ * Get app card by name
+ * App cards use AppIcon and display the app name
+ */
+ appCard(name: string): Locator {
+ return this.appGrid.locator(`div:has-text("${name}")`).first()
+ }
+
+ /**
+ * Get app card's more menu button (three dots)
+ */
+ appCardMenu(name: string): Locator {
+ return this.appCard(name).locator('svg[class*="ri-more"]').or(
+ this.appCard(name).locator('button:has(svg)').last(),
+ )
+ }
+
+ /**
+ * Click "Create from Blank" button
+ */
+ async clickCreateFromBlank(): Promise {
+ await this.createFromBlankButton.click()
+ await expect(this.createAppModal).toBeVisible({ timeout: 10000 })
+ }
+
+ /**
+ * Click "Create from Template" button
+ */
+ async clickCreateFromTemplate(): Promise {
+ await this.createFromTemplateButton.click()
+ }
+
+ /**
+ * Select app type in create modal
+ */
+ async selectAppType(type: 'chatbot' | 'completion' | 'workflow' | 'agent' | 'chatflow'): Promise {
+ const typeMap: Record = {
+ chatbot: this.chatbotType,
+ completion: this.completionType,
+ workflow: this.workflowType,
+ agent: this.agentType,
+ chatflow: this.chatflowType,
+ }
+ await typeMap[type].click()
+ }
+
+ /**
+ * Fill app name
+ */
+ async fillAppName(name: string): Promise {
+ await this.appNameInput.fill(name)
+ }
+
+ /**
+ * Fill app description
+ */
+ async fillAppDescription(description: string): Promise {
+ await this.appDescriptionInput.fill(description)
+ }
+
+ /**
+ * Confirm app creation
+ */
+ async confirmCreate(): Promise {
+ await this.createButton.click()
+ }
+
+ /**
+ * Create a new app with full flow
+ */
+ async createApp(options: {
+ name: string
+ type?: 'chatbot' | 'completion' | 'workflow' | 'agent' | 'chatflow'
+ description?: string
+ }): Promise {
+ const { name, type = 'chatbot', description } = options
+
+ await this.clickCreateFromBlank()
+ await this.selectAppType(type)
+ await this.fillAppName(name)
+
+ if (description)
+ await this.fillAppDescription(description)
+
+ await this.confirmCreate()
+
+ // Wait for navigation to new app or modal to close
+ await this.page.waitForURL(/\/app\//, { timeout: 30000 })
+ }
+
+ /**
+ * Search for an app
+ */
+ async searchApp(query: string): Promise {
+ await this.searchInput.fill(query)
+ await this.page.waitForTimeout(500) // Debounce
+ }
+
+ /**
+ * Open an app by clicking its card
+ */
+ async openApp(name: string): Promise {
+ await this.appCard(name).click()
+ await this.waitForNavigation()
+ }
+
+ /**
+ * Delete an app by name
+ */
+ async deleteApp(name: string): Promise {
+ // Hover on app card to show menu
+ await this.appCard(name).hover()
+
+ // Click more menu (three dots icon)
+ await this.appCardMenu(name).click()
+
+ // Click delete in menu
+ // t('common.operation.delete') = "Delete"
+ await this.page.getByRole('menuitem', { name: 'Delete' })
+ .or(this.page.getByText('Delete').last())
+ .click()
+
+ // Confirm deletion
+ await this.deleteConfirmButton.click()
+
+ // Wait for app to be removed
+ await expect(this.appCard(name)).toBeHidden({ timeout: 10000 })
+ }
+
+ /**
+ * Get count of visible apps
+ */
+ async getAppCount(): Promise {
+ // Each app card has the app icon and name
+ return this.appGrid.locator('[class*="app-card"], [class*="rounded-xl"]').count()
+ }
+
+ /**
+ * Check if apps list is empty
+ */
+ async isEmpty(): Promise {
+ // Empty state component is shown when no apps
+ const emptyState = this.page.locator('[class*="empty"]')
+ return emptyState.isVisible()
+ }
+
+ /**
+ * Verify app exists
+ */
+ async expectAppExists(name: string): Promise {
+ await expect(this.page.getByText(name).first()).toBeVisible({ timeout: 10000 })
+ }
+
+ /**
+ * Verify app does not exist
+ */
+ async expectAppNotExists(name: string): Promise {
+ await expect(this.page.getByText(name).first()).toBeHidden({ timeout: 10000 })
+ }
+}
diff --git a/web/e2e/pages/base.page.ts b/web/e2e/pages/base.page.ts
new file mode 100644
index 0000000000..472a76e440
--- /dev/null
+++ b/web/e2e/pages/base.page.ts
@@ -0,0 +1,144 @@
+import type { Locator, Page } from '@playwright/test'
+import { expect } from '@playwright/test'
+
+/**
+ * Base Page Object Model class
+ *
+ * All page objects should extend this class.
+ * Provides common functionality and patterns for page objects.
+ */
+export abstract class BasePage {
+ readonly page: Page
+
+ // Common elements that exist across multiple pages
+ protected readonly loadingSpinner: Locator
+
+ constructor(page: Page) {
+ this.page = page
+
+ // Loading spinner - based on web/app/components/base/loading/index.tsx
+ // Uses SVG with .spin-animation class
+ this.loadingSpinner = page.locator('.spin-animation')
+ }
+
+ /**
+ * Abstract method - each page must define its URL path
+ */
+ abstract get path(): string
+
+ /**
+ * Navigate to this page
+ */
+ async goto(): Promise {
+ await this.page.goto(this.path)
+ await this.waitForPageLoad()
+ }
+
+ /**
+ * Wait for page to finish loading
+ */
+ async waitForPageLoad(): Promise {
+ await this.page.waitForLoadState('networkidle')
+ // Wait for any loading spinners to disappear
+ if (await this.loadingSpinner.isVisible())
+ await this.loadingSpinner.waitFor({ state: 'hidden', timeout: 30000 })
+ }
+
+ /**
+ * Check if page is currently visible
+ */
+ async isVisible(): Promise {
+ return this.page.url().includes(this.path)
+ }
+
+ /**
+ * Wait for and verify a toast notification
+ * Toast text is in .system-sm-semibold class
+ */
+ async expectToast(text: string | RegExp): Promise {
+ const toast = this.page.locator('.system-sm-semibold').filter({ hasText: text })
+ await expect(toast).toBeVisible({ timeout: 10000 })
+ }
+
+ /**
+ * Wait for a successful operation toast
+ * Success toast has bg-toast-success-bg background and RiCheckboxCircleFill icon
+ */
+ async expectSuccessToast(text?: string | RegExp): Promise {
+ // Success toast contains .text-text-success class (green checkmark icon)
+ const successIndicator = this.page.locator('.text-text-success')
+ await expect(successIndicator).toBeVisible({ timeout: 10000 })
+
+ if (text) {
+ const toastText = this.page.locator('.system-sm-semibold').filter({ hasText: text })
+ await expect(toastText).toBeVisible({ timeout: 10000 })
+ }
+ }
+
+ /**
+ * Wait for an error toast
+ * Error toast has bg-toast-error-bg background and RiErrorWarningFill icon
+ */
+ async expectErrorToast(text?: string | RegExp): Promise {
+ // Error toast contains .text-text-destructive class (red warning icon)
+ const errorIndicator = this.page.locator('.text-text-destructive')
+ await expect(errorIndicator).toBeVisible({ timeout: 10000 })
+
+ if (text) {
+ const toastText = this.page.locator('.system-sm-semibold').filter({ hasText: text })
+ await expect(toastText).toBeVisible({ timeout: 10000 })
+ }
+ }
+
+ /**
+ * Wait for a warning toast
+ * Warning toast has bg-toast-warning-bg background
+ */
+ async expectWarningToast(text?: string | RegExp): Promise {
+ const warningIndicator = this.page.locator('.text-text-warning-secondary')
+ await expect(warningIndicator).toBeVisible({ timeout: 10000 })
+
+ if (text) {
+ const toastText = this.page.locator('.system-sm-semibold').filter({ hasText: text })
+ await expect(toastText).toBeVisible({ timeout: 10000 })
+ }
+ }
+
+ /**
+ * Get the current page title
+ */
+ async getTitle(): Promise {
+ return this.page.title()
+ }
+
+ /**
+ * Take a screenshot of the current page
+ */
+ async screenshot(name: string): Promise {
+ await this.page.screenshot({
+ path: `e2e/test-results/screenshots/${name}.png`,
+ fullPage: true,
+ })
+ }
+
+ /**
+ * Wait for navigation to complete
+ */
+ async waitForNavigation(options?: { timeout?: number }): Promise {
+ await this.page.waitForLoadState('networkidle', options)
+ }
+
+ /**
+ * Press keyboard shortcut
+ */
+ async pressShortcut(shortcut: string): Promise {
+ await this.page.keyboard.press(shortcut)
+ }
+
+ /**
+ * Get element by test id (data-testid attribute)
+ */
+ getByTestId(testId: string): Locator {
+ return this.page.getByTestId(testId)
+ }
+}
diff --git a/web/e2e/pages/index.ts b/web/e2e/pages/index.ts
new file mode 100644
index 0000000000..5e5be15ef0
--- /dev/null
+++ b/web/e2e/pages/index.ts
@@ -0,0 +1,10 @@
+/**
+ * Page Object Models Index
+ *
+ * Export all page objects from a single entry point.
+ */
+
+export { BasePage } from './base.page'
+export { SignInPage } from './signin.page'
+export { AppsPage } from './apps.page'
+export { WorkflowPage } from './workflow.page'
diff --git a/web/e2e/pages/signin.page.ts b/web/e2e/pages/signin.page.ts
new file mode 100644
index 0000000000..5eea92d82f
--- /dev/null
+++ b/web/e2e/pages/signin.page.ts
@@ -0,0 +1,112 @@
+import type { Locator, Page } from '@playwright/test'
+import { expect } from '@playwright/test'
+import { BasePage } from './base.page'
+
+/**
+ * Sign In Page Object Model
+ *
+ * Handles all interactions with the login/sign-in page.
+ * Based on: web/app/signin/components/mail-and-password-auth.tsx
+ */
+export class SignInPage extends BasePage {
+ readonly emailInput: Locator
+ readonly passwordInput: Locator
+ readonly signInButton: Locator
+ readonly forgotPasswordLink: Locator
+ readonly errorMessage: Locator
+
+ constructor(page: Page) {
+ super(page)
+
+ // Selectors based on actual signin page
+ // See: web/app/signin/components/mail-and-password-auth.tsx
+ this.emailInput = page.locator('#email') // id="email"
+ this.passwordInput = page.locator('#password') // id="password"
+ this.signInButton = page.getByRole('button', { name: 'Sign in' }) // t('login.signBtn')
+ this.forgotPasswordLink = page.getByRole('link', { name: /forgot/i })
+ this.errorMessage = page.locator('[class*="toast"]').or(page.getByRole('alert'))
+ }
+
+ get path(): string {
+ return '/signin'
+ }
+
+ /**
+ * Fill in email address
+ */
+ async fillEmail(email: string): Promise {
+ await this.emailInput.fill(email)
+ }
+
+ /**
+ * Fill in password
+ */
+ async fillPassword(password: string): Promise {
+ await this.passwordInput.fill(password)
+ }
+
+ /**
+ * Click sign in button
+ */
+ async clickSignIn(): Promise {
+ await this.signInButton.click()
+ }
+
+ /**
+ * Complete login flow
+ */
+ async login(email: string, password: string): Promise {
+ await this.fillEmail(email)
+ await this.fillPassword(password)
+ await this.clickSignIn()
+ }
+
+ /**
+ * Login and wait for redirect to dashboard/apps
+ */
+ async loginAndWaitForRedirect(email: string, password: string): Promise {
+ await this.login(email, password)
+ // After successful login, Dify redirects to /apps
+ await expect(this.page).toHaveURL(/\/apps/, { timeout: 30000 })
+ }
+
+ /**
+ * Verify invalid credentials error is shown
+ * Error message: t('login.error.invalidEmailOrPassword') = "Invalid email or password."
+ */
+ async expectInvalidCredentialsError(): Promise {
+ await expect(this.errorMessage.filter({ hasText: /invalid|incorrect|wrong/i }))
+ .toBeVisible({ timeout: 10000 })
+ }
+
+ /**
+ * Verify email validation error
+ * Error message: t('login.error.emailInValid') = "Please enter a valid email address"
+ */
+ async expectEmailValidationError(): Promise {
+ await expect(this.errorMessage.filter({ hasText: /valid email/i }))
+ .toBeVisible({ timeout: 10000 })
+ }
+
+ /**
+ * Verify password empty error
+ * Error message: t('login.error.passwordEmpty') = "Password is required"
+ */
+ async expectPasswordEmptyError(): Promise {
+ await expect(this.errorMessage.filter({ hasText: /password.*required/i }))
+ .toBeVisible({ timeout: 10000 })
+ }
+
+ /**
+ * Check if user is already logged in (auto-redirected)
+ */
+ async isRedirectedToApps(timeout = 5000): Promise {
+ try {
+ await this.page.waitForURL(/\/apps/, { timeout })
+ return true
+ }
+ catch {
+ return false
+ }
+ }
+}
diff --git a/web/e2e/pages/workflow.page.ts b/web/e2e/pages/workflow.page.ts
new file mode 100644
index 0000000000..a3359336ef
--- /dev/null
+++ b/web/e2e/pages/workflow.page.ts
@@ -0,0 +1,353 @@
+import type { Locator, Page } from '@playwright/test'
+import { expect } from '@playwright/test'
+import { BasePage } from './base.page'
+
+/**
+ * Workflow Editor Page Object Model
+ *
+ * Handles interactions with the Dify workflow/canvas editor.
+ * Based on: web/app/components/workflow/
+ *
+ * Key components:
+ * - ReactFlow canvas: web/app/components/workflow/index.tsx
+ * - Run button: web/app/components/workflow/header/run-mode.tsx
+ * - Publish button: web/app/components/workflow/header/index.tsx
+ * - Zoom controls: web/app/components/workflow/operator/zoom-in-out.tsx
+ * - Node panel: web/app/components/workflow/panel/index.tsx
+ * - Block selector: web/app/components/workflow/block-selector/
+ */
+export class WorkflowPage extends BasePage {
+ // Canvas elements - ReactFlow based (web/app/components/workflow/index.tsx)
+ readonly canvas: Locator
+ readonly minimap: Locator
+
+ // Header action buttons (web/app/components/workflow/header/)
+ readonly runButton: Locator
+ readonly stopButton: Locator
+ readonly publishButton: Locator
+ readonly undoButton: Locator
+ readonly redoButton: Locator
+ readonly historyButton: Locator
+ readonly checklistButton: Locator
+
+ // Zoom controls (web/app/components/workflow/operator/zoom-in-out.tsx)
+ readonly zoomInButton: Locator
+ readonly zoomOutButton: Locator
+ readonly zoomPercentage: Locator
+
+ // Node panel - appears when node is selected (web/app/components/workflow/panel/)
+ readonly nodeConfigPanel: Locator
+ readonly envPanel: Locator
+ readonly versionHistoryPanel: Locator
+
+ // Debug and preview panel (web/app/components/workflow/panel/debug-and-preview/)
+ readonly debugPreviewPanel: Locator
+ readonly chatInput: Locator
+
+ // Block selector - for adding nodes (web/app/components/workflow/block-selector/)
+ readonly blockSelector: Locator
+ readonly blockSearchInput: Locator
+
+ constructor(page: Page) {
+ super(page)
+
+ // Canvas - ReactFlow renders with these classes
+ this.canvas = page.locator('.react-flow')
+ this.minimap = page.locator('.react-flow__minimap')
+
+ // Run button - shows "Test Run" text with play icon (run-mode.tsx)
+ // When running, shows "Running" with loading spinner
+ this.runButton = page.locator('.flex.items-center').filter({ hasText: /Test Run|Running|Listening/ }).first()
+ this.stopButton = page.locator('button').filter({ has: page.locator('svg.text-text-accent') }).filter({ hasText: '' }).last()
+
+ // Publish button in header (header/index.tsx)
+ this.publishButton = page.getByRole('button', { name: /Publish|Update/ })
+
+ // Undo/Redo buttons (header/undo-redo.tsx)
+ this.undoButton = page.locator('[class*="undo"]').or(page.getByRole('button', { name: 'Undo' }))
+ this.redoButton = page.locator('[class*="redo"]').or(page.getByRole('button', { name: 'Redo' }))
+
+ // History and checklist buttons (header/run-and-history.tsx)
+ this.historyButton = page.getByRole('button', { name: /history/i })
+ this.checklistButton = page.locator('[class*="checklist"]')
+
+ // Zoom controls at bottom (operator/zoom-in-out.tsx)
+ // Uses RiZoomInLine and RiZoomOutLine icons
+ this.zoomInButton = page.locator('.react-flow').locator('..').locator('button').filter({ has: page.locator('[class*="zoom-in"]') }).first()
+ .or(page.locator('svg[class*="RiZoomInLine"]').locator('..'))
+ this.zoomOutButton = page.locator('.react-flow').locator('..').locator('button').filter({ has: page.locator('[class*="zoom-out"]') }).first()
+ .or(page.locator('svg[class*="RiZoomOutLine"]').locator('..'))
+ this.zoomPercentage = page.locator('.system-sm-medium').filter({ hasText: /%$/ })
+
+ // Node config panel - appears on right when node selected (panel/index.tsx)
+ this.nodeConfigPanel = page.locator('.absolute.bottom-1.right-0.top-14')
+ this.envPanel = page.locator('[class*="env-panel"]')
+ this.versionHistoryPanel = page.locator('[class*="version-history"]')
+
+ // Debug preview panel (panel/debug-and-preview/)
+ this.debugPreviewPanel = page.locator('[class*="debug"], [class*="preview-panel"]')
+ this.chatInput = page.locator('textarea[placeholder*="Enter"], textarea[placeholder*="input"]')
+
+ // Block selector popup (block-selector/)
+ this.blockSelector = page.locator('[class*="block-selector"], [role="dialog"]').filter({ hasText: /LLM|Code|HTTP|IF/ })
+ this.blockSearchInput = page.getByPlaceholder(/search/i)
+ }
+
+ get path(): string {
+ // Dynamic path - will be set when navigating to specific workflow
+ return '/app'
+ }
+
+ /**
+ * Navigate to a specific workflow app by ID
+ */
+ async gotoWorkflow(appId: string): Promise {
+ await this.page.goto(`/app/${appId}/workflow`)
+ await this.waitForPageLoad()
+ await this.waitForCanvasReady()
+ }
+
+ /**
+ * Wait for ReactFlow canvas to be fully loaded
+ */
+ async waitForCanvasReady(): Promise {
+ await expect(this.canvas).toBeVisible({ timeout: 30000 })
+ // Wait for nodes to render (ReactFlow needs time to initialize)
+ await this.page.waitForSelector('.react-flow__node', { timeout: 30000 })
+ await this.page.waitForTimeout(500) // Allow animation to complete
+ }
+
+ /**
+ * Get a node by its displayed title/name
+ * Dify nodes use .react-flow__node class with title text inside
+ */
+ node(name: string): Locator {
+ return this.canvas.locator('.react-flow__node').filter({ hasText: name })
+ }
+
+ /**
+ * Get start node (entry point of workflow)
+ */
+ get startNode(): Locator {
+ return this.canvas.locator('.react-flow__node').filter({ hasText: /Start|开始/ }).first()
+ }
+
+ /**
+ * Get end node
+ */
+ get endNode(): Locator {
+ return this.canvas.locator('.react-flow__node').filter({ hasText: /End|结束/ }).first()
+ }
+
+ /**
+ * Add a new node by clicking on canvas edge and selecting from block selector
+ * @param nodeType - Node type like 'LLM', 'Code', 'HTTP Request', 'IF/ELSE', etc.
+ */
+ async addNode(nodeType: string): Promise {
+ // Click the + button on a node's edge to open block selector
+ const addButton = this.canvas.locator('.react-flow__node').first()
+ .locator('[class*="handle"], [class*="add"]')
+ await addButton.click()
+
+ // Wait for block selector to appear
+ await expect(this.blockSelector).toBeVisible({ timeout: 5000 })
+
+ // Search for node type if search is available
+ if (await this.blockSearchInput.isVisible())
+ await this.blockSearchInput.fill(nodeType)
+
+ // Click on the node type option
+ await this.blockSelector.getByText(nodeType, { exact: false }).first().click()
+
+ await this.waitForCanvasReady()
+ }
+
+ /**
+ * Select a node on the canvas (opens config panel on right)
+ */
+ async selectNode(name: string): Promise {
+ await this.node(name).click()
+ // Config panel should appear
+ await expect(this.nodeConfigPanel).toBeVisible({ timeout: 5000 })
+ }
+
+ /**
+ * Delete the currently selected node using keyboard
+ */
+ async deleteSelectedNode(): Promise {
+ await this.page.keyboard.press('Delete')
+ // Or Backspace
+ // await this.page.keyboard.press('Backspace')
+ }
+
+ /**
+ * Delete a node by name using context menu
+ */
+ async deleteNode(name: string): Promise {
+ await this.node(name).click({ button: 'right' })
+ await this.page.getByRole('menuitem', { name: /delete|删除/i }).click()
+ }
+
+ /**
+ * Connect two nodes by dragging from source handle to target handle
+ */
+ async connectNodes(fromNode: string, toNode: string): Promise {
+ // ReactFlow uses data-handlepos for handle positions
+ const sourceHandle = this.node(fromNode).locator('.react-flow__handle-right, [data-handlepos="right"]')
+ const targetHandle = this.node(toNode).locator('.react-flow__handle-left, [data-handlepos="left"]')
+
+ await sourceHandle.dragTo(targetHandle)
+ }
+
+ /**
+ * Run/test the workflow (click Test Run button)
+ */
+ async runWorkflow(): Promise {
+ await this.runButton.click()
+ }
+
+ /**
+ * Stop a running workflow
+ */
+ async stopWorkflow(): Promise {
+ await this.stopButton.click()
+ }
+
+ /**
+ * Check if workflow is currently running
+ */
+ async isRunning(): Promise {
+ const text = await this.runButton.textContent()
+ return text?.includes('Running') || text?.includes('Listening') || false
+ }
+
+ /**
+ * Publish the workflow
+ */
+ async publishWorkflow(): Promise {
+ await this.publishButton.click()
+
+ // Handle confirmation dialog if it appears
+ const confirmButton = this.page.getByRole('button', { name: /confirm|确认/i })
+ if (await confirmButton.isVisible({ timeout: 2000 }))
+ await confirmButton.click()
+
+ await this.expectSuccessToast()
+ }
+
+ /**
+ * Wait for workflow run to complete (success or failure)
+ */
+ async waitForRunComplete(timeout = 60000): Promise {
+ // Wait until the "Running" state ends
+ await expect(async () => {
+ const isStillRunning = await this.isRunning()
+ expect(isStillRunning).toBe(false)
+ }).toPass({ timeout })
+ }
+
+ /**
+ * Verify workflow run completed successfully
+ */
+ async expectRunSuccess(): Promise {
+ await this.waitForRunComplete()
+ // Check for success indicators in the debug panel or toast
+ const successIndicator = this.page.locator(':text("Succeeded"), :text("success"), :text("成功")')
+ await expect(successIndicator).toBeVisible({ timeout: 10000 })
+ }
+
+ /**
+ * Get the count of nodes on canvas
+ */
+ async getNodeCount(): Promise {
+ return this.canvas.locator('.react-flow__node').count()
+ }
+
+ /**
+ * Verify a specific node exists on canvas
+ */
+ async expectNodeExists(name: string): Promise {
+ await expect(this.node(name)).toBeVisible()
+ }
+
+ /**
+ * Verify a specific node does not exist on canvas
+ */
+ async expectNodeNotExists(name: string): Promise {
+ await expect(this.node(name)).not.toBeVisible()
+ }
+
+ /**
+ * Zoom in the canvas
+ */
+ async zoomIn(): Promise {
+ // Use keyboard shortcut Ctrl++
+ await this.page.keyboard.press('Control++')
+ }
+
+ /**
+ * Zoom out the canvas
+ */
+ async zoomOut(): Promise {
+ // Use keyboard shortcut Ctrl+-
+ await this.page.keyboard.press('Control+-')
+ }
+
+ /**
+ * Fit view to show all nodes (keyboard shortcut Ctrl+1)
+ */
+ async fitView(): Promise {
+ await this.page.keyboard.press('Control+1')
+ }
+
+ /**
+ * Get current zoom percentage
+ */
+ async getZoomPercentage(): Promise {
+ const text = await this.zoomPercentage.textContent()
+ return Number.parseInt(text?.replace('%', '') || '100')
+ }
+
+ /**
+ * Undo last action (Ctrl+Z)
+ */
+ async undo(): Promise {
+ await this.page.keyboard.press('Control+z')
+ }
+
+ /**
+ * Redo last undone action (Ctrl+Shift+Z)
+ */
+ async redo(): Promise {
+ await this.page.keyboard.press('Control+Shift+z')
+ }
+
+ /**
+ * Open version history panel
+ */
+ async openVersionHistory(): Promise {
+ await this.historyButton.click()
+ await expect(this.versionHistoryPanel).toBeVisible()
+ }
+
+ /**
+ * Duplicate selected node (Ctrl+D)
+ */
+ async duplicateSelectedNode(): Promise {
+ await this.page.keyboard.press('Control+d')
+ }
+
+ /**
+ * Copy selected node (Ctrl+C)
+ */
+ async copySelectedNode(): Promise {
+ await this.page.keyboard.press('Control+c')
+ }
+
+ /**
+ * Paste node (Ctrl+V)
+ */
+ async pasteNode(): Promise {
+ await this.page.keyboard.press('Control+v')
+ }
+}
diff --git a/web/e2e/tests/apps.spec.ts b/web/e2e/tests/apps.spec.ts
new file mode 100644
index 0000000000..1ec8c859bf
--- /dev/null
+++ b/web/e2e/tests/apps.spec.ts
@@ -0,0 +1,25 @@
+import { expect, test } from '../fixtures'
+
+/**
+ * Apps page E2E tests
+ *
+ * These tests verify the apps listing and creation functionality.
+ */
+
+test.describe('Apps Page', () => {
+ test('should display apps page after authentication', async ({ page }) => {
+ // Navigate to apps page
+ await page.goto('/apps')
+
+ // Verify we're on the apps page (not redirected to signin)
+ await expect(page).toHaveURL(/\/apps/)
+
+ // Wait for the page to fully load
+ await page.waitForLoadState('networkidle')
+
+ // Take a screenshot for debugging
+ await page.screenshot({ path: 'e2e/test-results/apps-page.png' })
+
+ console.log('✅ Apps page loaded successfully')
+ })
+})
diff --git a/web/e2e/utils/api-helpers.ts b/web/e2e/utils/api-helpers.ts
new file mode 100644
index 0000000000..192761a3c4
--- /dev/null
+++ b/web/e2e/utils/api-helpers.ts
@@ -0,0 +1,165 @@
+import type { APIRequestContext } from '@playwright/test'
+
+/**
+ * API helper utilities for test setup and cleanup
+ *
+ * Use these helpers to set up test data via API before tests run,
+ * or to clean up data after tests complete.
+ *
+ * Environment variables:
+ * - NEXT_PUBLIC_API_PREFIX: API URL (default: http://localhost:5001/console/api)
+ *
+ * Based on Dify API configuration:
+ * @see web/config/index.ts - API_PREFIX
+ * @see web/types/app.ts - AppModeEnum
+ */
+
+// API base URL with fallback for local development
+const API_BASE_URL = process.env.NEXT_PUBLIC_API_PREFIX || 'http://localhost:5001/console/api'
+
+/**
+ * Dify App mode types
+ * @see web/types/app.ts - AppModeEnum
+ */
+export type AppMode = 'chat' | 'completion' | 'workflow'
+
+/**
+ * Create a new app via API
+ *
+ * @param request - Playwright API request context
+ * @param data - App data
+ * @param data.name - App name
+ * @param data.mode - App mode: chat (Chatbot), completion (Text Generator),
+ * workflow, advanced-chat (Chatflow), agent-chat (Agent)
+ * @param data.description - Optional description
+ * @param data.icon - Optional icon
+ * @param data.iconBackground - Optional icon background color
+ */
+export async function createAppViaApi(
+ request: APIRequestContext,
+ data: {
+ name: string
+ mode: AppMode
+ description?: string
+ icon?: string
+ iconBackground?: string
+ },
+): Promise<{ id: string, name: string }> {
+ const response = await request.post(`${API_BASE_URL}/apps`, {
+ data: {
+ name: data.name,
+ mode: data.mode,
+ description: data.description || '',
+ icon: data.icon || 'default',
+ icon_background: data.iconBackground || '#FFFFFF',
+ },
+ })
+
+ if (!response.ok()) {
+ const error = await response.text()
+ throw new Error(`Failed to create app: ${error}`)
+ }
+
+ return response.json()
+}
+
+/**
+ * Delete an app via API
+ */
+export async function deleteAppViaApi(
+ request: APIRequestContext,
+ appId: string,
+): Promise {
+ const response = await request.delete(`${API_BASE_URL}/apps/${appId}`)
+
+ if (!response.ok() && response.status() !== 404) {
+ const error = await response.text()
+ throw new Error(`Failed to delete app: ${error}`)
+ }
+}
+
+/**
+ * Create a dataset/knowledge base via API
+ */
+export async function createDatasetViaApi(
+ request: APIRequestContext,
+ data: {
+ name: string
+ description?: string
+ },
+): Promise<{ id: string, name: string }> {
+ const response = await request.post(`${API_BASE_URL}/datasets`, {
+ data: {
+ name: data.name,
+ description: data.description || '',
+ },
+ })
+
+ if (!response.ok()) {
+ const error = await response.text()
+ throw new Error(`Failed to create dataset: ${error}`)
+ }
+
+ return response.json()
+}
+
+/**
+ * Delete a dataset via API
+ */
+export async function deleteDatasetViaApi(
+ request: APIRequestContext,
+ datasetId: string,
+): Promise {
+ const response = await request.delete(`${API_BASE_URL}/datasets/${datasetId}`)
+
+ if (!response.ok() && response.status() !== 404) {
+ const error = await response.text()
+ throw new Error(`Failed to delete dataset: ${error}`)
+ }
+}
+
+/**
+ * Get current user info via API
+ */
+export async function getCurrentUserViaApi(
+ request: APIRequestContext,
+): Promise<{ id: string, email: string, name: string }> {
+ const response = await request.get(`${API_BASE_URL}/account/profile`)
+
+ if (!response.ok()) {
+ const error = await response.text()
+ throw new Error(`Failed to get user info: ${error}`)
+ }
+
+ return response.json()
+}
+
+/**
+ * Cleanup helper - delete all test apps by name pattern
+ */
+export async function cleanupTestApps(
+ request: APIRequestContext,
+ namePattern: RegExp,
+): Promise {
+ const response = await request.get(`${API_BASE_URL}/apps`)
+
+ if (!response.ok())
+ return 0
+
+ const { data: apps } = await response.json() as { data: Array<{ id: string, name: string }> }
+
+ const testApps = apps.filter(app => namePattern.test(app.name))
+ let deletedCount = 0
+
+ for (const app of testApps) {
+ try {
+ await deleteAppViaApi(request, app.id)
+ deletedCount++
+ }
+ catch {
+ // Ignore deletion errors during cleanup
+ }
+ }
+
+ return deletedCount
+}
diff --git a/web/e2e/utils/index.ts b/web/e2e/utils/index.ts
new file mode 100644
index 0000000000..9376310380
--- /dev/null
+++ b/web/e2e/utils/index.ts
@@ -0,0 +1,8 @@
+/**
+ * Test Utilities Index
+ *
+ * Export all utility functions from a single entry point.
+ */
+
+export * from './test-helpers'
+export * from './api-helpers'
diff --git a/web/e2e/utils/test-helpers.ts b/web/e2e/utils/test-helpers.ts
new file mode 100644
index 0000000000..7a59532f90
--- /dev/null
+++ b/web/e2e/utils/test-helpers.ts
@@ -0,0 +1,174 @@
+import type { Locator, Page } from '@playwright/test'
+
+/**
+ * Common test helper utilities for E2E tests
+ */
+
+/**
+ * Wait for network to be idle with a custom timeout
+ */
+export async function waitForNetworkIdle(page: Page, timeout = 5000): Promise {
+ await page.waitForLoadState('networkidle', { timeout })
+}
+
+/**
+ * Wait for an element to be stable (not moving/resizing)
+ */
+export async function waitForStable(locator: Locator, timeout = 5000): Promise {
+ await locator.waitFor({ state: 'visible', timeout })
+ // Additional wait for animations to complete
+ await locator.evaluate(el => new Promise((resolve) => {
+ const observer = new MutationObserver(() => {
+ // Observer callback - intentionally empty, just watching for changes
+ })
+ observer.observe(el, { attributes: true, subtree: true })
+ setTimeout(() => {
+ observer.disconnect()
+ resolve()
+ }, 100)
+ }))
+}
+
+/**
+ * Safely click an element with retry logic
+ */
+export async function safeClick(
+ locator: Locator,
+ options?: { timeout?: number, force?: boolean },
+): Promise {
+ const { timeout = 10000, force = false } = options || {}
+ await locator.waitFor({ state: 'visible', timeout })
+ await locator.click({ force, timeout })
+}
+
+/**
+ * Fill input with clear first
+ */
+export async function fillInput(
+ locator: Locator,
+ value: string,
+ options?: { clear?: boolean },
+): Promise {
+ const { clear = true } = options || {}
+ if (clear)
+ await locator.clear()
+
+ await locator.fill(value)
+}
+
+/**
+ * Select option from dropdown/select element
+ */
+export async function selectOption(
+ trigger: Locator,
+ optionText: string,
+ page: Page,
+): Promise {
+ await trigger.click()
+ await page.getByRole('option', { name: optionText }).click()
+}
+
+/**
+ * Wait for toast notification and verify its content
+ *
+ * Based on Dify toast implementation:
+ * @see web/app/components/base/toast/index.tsx
+ *
+ * Toast structure:
+ * - Container: .fixed.z-[9999] with rounded-xl
+ * - Type background classes: bg-toast-success-bg, bg-toast-error-bg, etc.
+ * - Type icon classes: text-text-success, text-text-destructive, etc.
+ */
+export async function waitForToast(
+ page: Page,
+ expectedText: string | RegExp,
+ type?: 'success' | 'error' | 'warning' | 'info',
+): Promise {
+ // Dify toast uses fixed positioning with z-[9999]
+ const toastContainer = page.locator('.fixed.z-\\[9999\\]')
+
+ // Filter by type if specified
+ let toast: Locator
+ if (type) {
+ // Each type has specific background class
+ const typeClassMap: Record = {
+ success: '.bg-toast-success-bg',
+ error: '.bg-toast-error-bg',
+ warning: '.bg-toast-warning-bg',
+ info: '.bg-toast-info-bg',
+ }
+ toast = toastContainer.filter({ has: page.locator(typeClassMap[type]) })
+ .filter({ hasText: expectedText })
+ }
+ else {
+ toast = toastContainer.filter({ hasText: expectedText })
+ }
+
+ await toast.waitFor({ state: 'visible', timeout: 10000 })
+ return toast
+}
+
+/**
+ * Dismiss any visible modals
+ */
+export async function dismissModal(page: Page): Promise {
+ const modal = page.locator('[role="dialog"]')
+ if (await modal.isVisible()) {
+ // Try clicking close button or backdrop
+ const closeButton = modal.locator('button[aria-label*="close"], button:has-text("Cancel")')
+ if (await closeButton.isVisible())
+ await closeButton.click()
+ else
+ await page.keyboard.press('Escape')
+
+ await modal.waitFor({ state: 'hidden', timeout: 5000 })
+ }
+}
+
+/**
+ * Generate a unique test identifier
+ */
+export function generateTestId(prefix = 'test'): string {
+ const timestamp = Date.now()
+ const random = Math.random().toString(36).substring(2, 8)
+ return `${prefix}-${timestamp}-${random}`
+}
+
+/**
+ * Take a screenshot with a descriptive name
+ */
+export async function takeDebugScreenshot(
+ page: Page,
+ name: string,
+): Promise {
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-')
+ await page.screenshot({
+ path: `e2e/test-results/debug-${name}-${timestamp}.png`,
+ fullPage: true,
+ })
+}
+
+/**
+ * Retry an action with exponential backoff
+ */
+export async function retryAction(
+ action: () => Promise,
+ options?: { maxAttempts?: number, baseDelay?: number },
+): Promise {
+ const { maxAttempts = 3, baseDelay = 1000 } = options || {}
+
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
+ try {
+ return await action()
+ }
+ catch (error) {
+ if (attempt === maxAttempts)
+ throw error
+
+ const delay = baseDelay * 2 ** (attempt - 1)
+ await new Promise(resolve => setTimeout(resolve, delay))
+ }
+ }
+
+ throw new Error('Unreachable')
+}
diff --git a/web/package.json b/web/package.json
index 478abceb45..2ba8d8252c 100644
--- a/web/package.json
+++ b/web/package.json
@@ -40,6 +40,11 @@
"test": "jest",
"test:watch": "jest --watch",
"analyze-component": "node testing/analyze-component.js",
+ "test:e2e": "playwright test",
+ "test:e2e:ui": "playwright test --ui",
+ "test:e2e:headed": "playwright test --headed",
+ "test:e2e:debug": "playwright test --debug",
+ "test:e2e:report": "playwright show-report",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
"preinstall": "npx only-allow pnpm",
@@ -158,6 +163,7 @@
"@next/bundle-analyzer": "15.5.7",
"@next/eslint-plugin-next": "15.5.7",
"@next/mdx": "15.5.7",
+ "@playwright/test": "^1.56.1",
"@rgrove/parse-xml": "^4.2.0",
"@storybook/addon-docs": "9.1.13",
"@storybook/addon-links": "9.1.13",
@@ -189,6 +195,7 @@
"bing-translate-api": "^4.1.0",
"code-inspector-plugin": "1.2.9",
"cross-env": "^10.1.0",
+ "dotenv": "^17.2.3",
"eslint": "^9.38.0",
"eslint-plugin-oxlint": "^1.23.0",
"eslint-plugin-react-hooks": "^5.2.0",
diff --git a/web/playwright.config.ts b/web/playwright.config.ts
new file mode 100644
index 0000000000..565e620b26
--- /dev/null
+++ b/web/playwright.config.ts
@@ -0,0 +1,152 @@
+import path from 'node:path'
+import { defineConfig, devices } from '@playwright/test'
+
+/**
+ * Playwright Configuration for Dify E2E Tests
+ *
+ * Environment variables are loaded from web/.env.local
+ *
+ * E2E specific variables:
+ * - E2E_BASE_URL: Base URL for tests (default: http://localhost:3000)
+ * - E2E_SKIP_WEB_SERVER: Set to 'true' to skip starting dev server (for CI with deployed env)
+ * @see https://playwright.dev/docs/test-configuration
+ */
+
+// Load environment variables from web/.env.local
+require('dotenv').config({ path: path.resolve(__dirname, '.env.local') })
+
+// Base URL for the frontend application
+// - Local development: http://localhost:3000
+// - CI/CD with deployed env: set E2E_BASE_URL to the deployed URL
+const BASE_URL = process.env.E2E_BASE_URL || 'http://localhost:3000'
+
+// Whether to skip starting the web server
+// - Local development: false (start dev server)
+// - CI/CD with deployed env: true (use existing server)
+const SKIP_WEB_SERVER = process.env.E2E_SKIP_WEB_SERVER === 'true'
+
+export default defineConfig({
+ // Directory containing test files
+ testDir: './e2e/tests',
+
+ // Run tests in files in parallel
+ fullyParallel: true,
+
+ // Fail the build on CI if you accidentally left test.only in the source code
+ forbidOnly: !!process.env.CI,
+
+ // Retry on CI only
+ retries: process.env.CI ? 2 : 0,
+
+ // Opt out of parallel tests on CI for stability
+ workers: process.env.CI ? 1 : undefined,
+
+ // Reporter to use
+ reporter: process.env.CI
+ ? [['html', { open: 'never' }], ['github']]
+ : [['html', { open: 'on-failure' }], ['list']],
+
+ // Shared settings for all the projects below
+ use: {
+ // Base URL for all page.goto() calls
+ baseURL: BASE_URL,
+
+ // Collect trace when retrying the failed test
+ trace: 'on-first-retry',
+
+ // Take screenshot on failure
+ screenshot: 'only-on-failure',
+
+ // Record video on failure
+ video: 'on-first-retry',
+
+ // Default timeout for actions
+ actionTimeout: 10000,
+
+ // Default timeout for navigation
+ navigationTimeout: 30000,
+ },
+
+ // Global timeout for each test
+ timeout: 60000,
+
+ // Expect timeout
+ expect: {
+ timeout: 10000,
+ },
+
+ // Configure projects for major browsers
+ projects: [
+ // Setup project - runs before all tests to handle authentication
+ {
+ name: 'setup',
+ testDir: './e2e',
+ testMatch: /global\.setup\.ts/,
+ teardown: 'teardown',
+ },
+ {
+ name: 'teardown',
+ testDir: './e2e',
+ testMatch: /global\.teardown\.ts/,
+ },
+
+ // Main test project - uses authenticated state
+ {
+ name: 'chromium',
+ use: {
+ ...devices['Desktop Chrome'],
+ // Use prepared auth state
+ storageState: 'e2e/.auth/user.json',
+ },
+ dependencies: ['setup'],
+ },
+
+ // Test in Firefox (optional, uncomment when needed)
+ // {
+ // name: 'firefox',
+ // use: {
+ // ...devices['Desktop Firefox'],
+ // storageState: 'e2e/.auth/user.json',
+ // },
+ // dependencies: ['setup'],
+ // },
+
+ // Test in WebKit (optional, uncomment when needed)
+ // {
+ // name: 'webkit',
+ // use: {
+ // ...devices['Desktop Safari'],
+ // storageState: 'e2e/.auth/user.json',
+ // },
+ // dependencies: ['setup'],
+ // },
+
+ // Test against mobile viewports (optional)
+ // {
+ // name: 'mobile-chrome',
+ // use: {
+ // ...devices['Pixel 5'],
+ // storageState: 'e2e/.auth/user.json',
+ // },
+ // dependencies: ['setup'],
+ // },
+ ],
+
+ // Output folder for test artifacts
+ outputDir: 'e2e/test-results',
+
+ // Run your local dev server before starting the tests
+ // - Local: starts dev server automatically
+ // - CI with deployed env: set E2E_SKIP_WEB_SERVER=true to skip
+ ...(SKIP_WEB_SERVER
+ ? {}
+ : {
+ webServer: {
+ command: 'pnpm dev',
+ url: BASE_URL,
+ // Reuse existing server in local dev, start fresh in CI
+ reuseExistingServer: !process.env.CI,
+ timeout: 120000,
+ },
+ }),
+})
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 02b1c9b592..58544e46e7 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -60,10 +60,10 @@ importers:
dependencies:
'@amplitude/analytics-browser':
specifier: ^2.31.3
- version: 2.31.3
+ version: 2.31.4
'@amplitude/plugin-session-replay-browser':
specifier: ^1.23.6
- version: 1.23.6(@amplitude/rrweb@2.0.0-alpha.33)(rollup@2.79.2)
+ version: 1.24.1(@amplitude/rrweb@2.0.0-alpha.33)(rollup@2.79.2)
'@emoji-mart/data':
specifier: ^1.2.1
version: 1.2.1
@@ -81,7 +81,7 @@ importers:
version: 2.2.0(react@19.2.1)
'@hookform/resolvers':
specifier: ^3.10.0
- version: 3.10.0(react-hook-form@7.67.0(react@19.2.1))
+ version: 3.10.0(react-hook-form@7.68.0(react@19.2.1))
'@lexical/code':
specifier: ^0.38.2
version: 0.38.2
@@ -126,13 +126,13 @@ importers:
version: 0.5.19(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.2))
'@tanstack/react-form':
specifier: ^1.23.7
- version: 1.27.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
+ version: 1.27.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@tanstack/react-query':
specifier: ^5.90.5
- version: 5.90.11(react@19.2.1)
+ version: 5.90.12(react@19.2.1)
'@tanstack/react-query-devtools':
specifier: ^5.90.2
- version: 5.91.1(@tanstack/react-query@5.90.11(react@19.2.1))(react@19.2.1)
+ version: 5.91.1(@tanstack/react-query@5.90.12(react@19.2.1))(react@19.2.1)
abcjs:
specifier: ^6.5.2
version: 6.5.2
@@ -162,7 +162,7 @@ importers:
version: 10.6.0
dompurify:
specifier: ^3.3.0
- version: 3.3.0
+ version: 3.3.1
echarts:
specifier: ^5.6.0
version: 5.6.0
@@ -207,10 +207,10 @@ importers:
version: 1.5.0
katex:
specifier: ^0.16.25
- version: 0.16.25
+ version: 0.16.27
ky:
specifier: ^1.12.0
- version: 1.14.0
+ version: 1.14.1
lamejs:
specifier: ^1.2.1
version: 1.2.1
@@ -237,10 +237,10 @@ importers:
version: 1.0.0
next:
specifier: ~15.5.7
- version: 15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)
+ version: 15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0)
next-pwa:
specifier: ^5.6.0
- version: 5.6.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(esbuild@0.25.0)(next@15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2))(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
+ version: 5.6.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(esbuild@0.25.0)(next@15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0))(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
@@ -267,7 +267,7 @@ importers:
version: 5.5.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
react-hook-form:
specifier: ^7.65.0
- version: 7.67.0(react@19.2.1)
+ version: 7.68.0(react@19.2.1)
react-hotkeys-hook:
specifier: ^4.6.2
version: 4.6.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
@@ -364,7 +364,7 @@ importers:
version: 7.28.5
'@chromatic-com/storybook':
specifier: ^4.1.1
- version: 4.1.3(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))
+ version: 4.1.3(storybook@9.1.13(@testing-library/dom@10.4.1))
'@eslint-react/eslint-plugin':
specifier: ^1.53.1
version: 1.53.1(eslint@9.39.1(jiti@1.21.7))(ts-api-utils@2.1.0(typescript@5.9.3))(typescript@5.9.3)
@@ -386,27 +386,30 @@ importers:
'@next/mdx':
specifier: 15.5.7
version: 15.5.7(@mdx-js/loader@3.1.1(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3)))(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.1))
+ '@playwright/test':
+ specifier: ^1.56.1
+ version: 1.57.0
'@rgrove/parse-xml':
specifier: ^4.2.0
version: 4.2.0
'@storybook/addon-docs':
specifier: 9.1.13
- version: 9.1.13(@types/react@19.2.7)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))
+ version: 9.1.13(@types/react@19.2.7)(storybook@9.1.13(@testing-library/dom@10.4.1))
'@storybook/addon-links':
specifier: 9.1.13
- version: 9.1.13(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))
+ version: 9.1.13(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1))
'@storybook/addon-onboarding':
specifier: 9.1.13
- version: 9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))
+ version: 9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1))
'@storybook/addon-themes':
specifier: 9.1.13
- version: 9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))
+ version: 9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1))
'@storybook/nextjs':
specifier: 9.1.13
- version: 9.1.13(esbuild@0.25.0)(next@15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(type-fest@4.2.0)(typescript@5.9.3)(uglify-js@3.19.3)(webpack-hot-middleware@2.26.1)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
+ version: 9.1.13(esbuild@0.25.0)(next@15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0)(storybook@9.1.13(@testing-library/dom@10.4.1))(type-fest@4.2.0)(typescript@5.9.3)(uglify-js@3.19.3)(webpack-hot-middleware@2.26.1)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
'@storybook/react':
specifier: 9.1.13
- version: 9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(typescript@5.9.3)
+ version: 9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1))(typescript@5.9.3)
'@testing-library/dom':
specifier: ^10.4.1
version: 10.4.1
@@ -463,7 +466,7 @@ importers:
version: 10.0.0
'@typescript/native-preview':
specifier: ^7.0.0-dev
- version: 7.0.0-dev.20251204.1
+ version: 7.0.0-dev.20251209.1
autoprefixer:
specifier: ^10.4.21
version: 10.4.22(postcss@8.5.6)
@@ -479,12 +482,15 @@ importers:
cross-env:
specifier: ^10.1.0
version: 10.1.0
+ dotenv:
+ specifier: ^17.2.3
+ version: 17.2.3
eslint:
specifier: ^9.38.0
version: 9.39.1(jiti@1.21.7)
eslint-plugin-oxlint:
specifier: ^1.23.0
- version: 1.31.0
+ version: 1.32.0
eslint-plugin-react-hooks:
specifier: ^5.2.0
version: 5.2.0(eslint@9.39.1(jiti@1.21.7))
@@ -496,7 +502,7 @@ importers:
version: 3.0.5(eslint@9.39.1(jiti@1.21.7))
eslint-plugin-storybook:
specifier: ^9.1.13
- version: 9.1.16(eslint@9.39.1(jiti@1.21.7))(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(typescript@5.9.3)
+ version: 9.1.16(eslint@9.39.1(jiti@1.21.7))(storybook@9.1.13(@testing-library/dom@10.4.1))(typescript@5.9.3)
eslint-plugin-tailwindcss:
specifier: ^3.18.2
version: 3.18.2(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.2))
@@ -511,7 +517,7 @@ importers:
version: 29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@5.9.3))
knip:
specifier: ^5.66.1
- version: 5.71.0(@types/node@18.15.0)(typescript@5.9.3)
+ version: 5.72.0(@types/node@18.15.0)(typescript@5.9.3)
lint-staged:
specifier: ^15.5.2
version: 15.5.2
@@ -526,19 +532,19 @@ importers:
version: 14.0.10
oxlint:
specifier: ^1.31.0
- version: 1.31.0
+ version: 1.32.0
postcss:
specifier: ^8.5.6
version: 8.5.6
react-scan:
specifier: ^0.4.3
- version: 0.4.3(@types/react@19.2.7)(next@15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(rollup@2.79.2)
+ version: 0.4.3(@types/react@19.2.7)(next@15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(rollup@2.79.2)
sass:
specifier: ^1.93.2
- version: 1.94.2
+ version: 1.95.0
storybook:
specifier: 9.1.13
- version: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ version: 9.1.13(@testing-library/dom@10.4.1)
tailwindcss:
specifier: ^3.4.18
version: 3.4.18(tsx@4.21.0)(yaml@2.8.2)
@@ -561,8 +567,8 @@ packages:
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
- '@amplitude/analytics-browser@2.31.3':
- resolution: {integrity: sha512-jGViok5dVYi+4y/OUpH/0+urbba7KK6lmWLJx05TW68ME7lPrZSYO2B1NPzoe6Eym1Rzz6k3njGFR7dtTxcFSQ==}
+ '@amplitude/analytics-browser@2.31.4':
+ resolution: {integrity: sha512-9O8a0SK55tQOgJJ0z9eE+q/C2xWo6a65wN4iSglxYwm1vvGJKG6Z/QV4XKQ6X0syGscRuG1XoMc0mt3xdVPtDg==}
'@amplitude/analytics-client-common@2.4.16':
resolution: {integrity: sha512-qF7NAl6Qr6QXcWKnldGJfO0Kp1TYoy1xsmzEDnOYzOS96qngtvsZ8MuKya1lWdVACoofwQo82V0VhNZJKk/2YA==}
@@ -591,8 +597,8 @@ packages:
'@amplitude/plugin-page-view-tracking-browser@2.6.3':
resolution: {integrity: sha512-lLU4W2r5jXtfn/14cZKM9c9CQDxT7PVVlgm0susHJ3Kfsua9jJQuMHs4Zlg6rwByAtZi5nF4nYE5z0GF09gx0A==}
- '@amplitude/plugin-session-replay-browser@1.23.6':
- resolution: {integrity: sha512-MPUVbN/tBTHvqKujqIlzd5mq5d3kpovC/XEVw80dgWUYwOwU7+39vKGc2NZV8iGi3kOtOzm2XTlcGOS2Gtjw3Q==}
+ '@amplitude/plugin-session-replay-browser@1.24.1':
+ resolution: {integrity: sha512-NHePIu2Yv9ba+fOt5N33b8FFQPzyKvjs1BnWBgBCM5RECos3w6n/+zUWTnTJ4at2ipO2lz111abKDteUwbuptg==}
'@amplitude/plugin-web-vitals-browser@1.1.0':
resolution: {integrity: sha512-TA0X4Np4Wt5hkQ4+Ouhg6nm2xjDd9l03OV9N8Kbe1cqpr/sxvRwSpd+kp2eREbp6D7tHFFkKJA2iNtxbE5Y0cA==}
@@ -629,8 +635,8 @@ packages:
'@amplitude/rrweb@2.0.0-alpha.33':
resolution: {integrity: sha512-vMuk/3HzDWaUzBLFxKd7IpA8TEWjyPZBuLiLexMd/mOfTt/+JkVLsfXiJOyltJfR98LpmMTp1q51dtq357Dnfg==}
- '@amplitude/session-replay-browser@1.29.8':
- resolution: {integrity: sha512-f/j1+xUxqK7ewz0OM04Q0m2N4Q+miCOfANe9jb9NAGfZdBu8IfNYswfjPiHdv0+ffXl5UovuyLhl1nV/znIZqA==}
+ '@amplitude/session-replay-browser@1.30.0':
+ resolution: {integrity: sha512-mLNJ5UEDuY91zRmqPiJcORMmaYkfrKjLzu52DsD/EaB+rKAxSuZbUlXlFjeaaCrNLWWV2ywn5y3Tl2xX0cQNzQ==}
'@amplitude/targeting@0.2.0':
resolution: {integrity: sha512-/50ywTrC4hfcfJVBbh5DFbqMPPfaIOivZeb5Gb+OGM03QrA+lsUqdvtnKLNuWtceD4H6QQ2KFzPJ5aAJLyzVDA==}
@@ -1426,150 +1432,306 @@ packages:
cpu: [ppc64]
os: [aix]
+ '@esbuild/aix-ppc64@0.25.12':
+ resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/android-arm64@0.25.0':
resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.25.12':
+ resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm@0.25.0':
resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.25.12':
+ resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-x64@0.25.0':
resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.25.12':
+ resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/darwin-arm64@0.25.0':
resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.25.12':
+ resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.25.0':
resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.25.12':
+ resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/freebsd-arm64@0.25.0':
resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.25.12':
+ resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.25.0':
resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.25.12':
+ resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/linux-arm64@0.25.0':
resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.25.12':
+ resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm@0.25.0':
resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.25.12':
+ resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-ia32@0.25.0':
resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.25.12':
+ resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-loong64@0.25.0':
resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.25.12':
+ resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.25.0':
resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.25.12':
+ resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.25.0':
resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.25.12':
+ resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.25.0':
resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.25.12':
+ resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-s390x@0.25.0':
resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.25.12':
+ resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-x64@0.25.0':
resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.25.12':
+ resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/netbsd-arm64@0.25.0':
resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
+ '@esbuild/netbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.25.0':
resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.25.12':
+ resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/openbsd-arm64@0.25.0':
resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
+ '@esbuild/openbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.25.0':
resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.25.12':
+ resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.25.12':
+ resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
'@esbuild/sunos-x64@0.25.0':
resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.25.12':
+ resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/win32-arm64@0.25.0':
resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.25.12':
+ resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-ia32@0.25.0':
resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.25.12':
+ resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-x64@0.25.0':
resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.25.12':
+ resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@eslint-community/eslint-plugin-eslint-comments@4.5.0':
resolution: {integrity: sha512-MAhuTKlr4y/CE3WYX26raZjy+I/kS2PLKSzvfmDCGrBLTFHOYwqROZdr4XwPgXwX3K9rjzMr4pSmUWGnzsUyMg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1994,41 +2156,6 @@ packages:
cpu: [x64]
os: [win32]
- '@inquirer/ansi@1.0.2':
- resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
- engines: {node: '>=18'}
-
- '@inquirer/confirm@5.1.21':
- resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/core@10.3.2':
- resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/figures@1.0.15':
- resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
- engines: {node: '>=18'}
-
- '@inquirer/type@3.0.10':
- resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
'@isaacs/balanced-match@4.0.1':
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
engines: {node: 20 || >=22}
@@ -2241,10 +2368,6 @@ packages:
resolution: {integrity: sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==}
engines: {node: '>=18'}
- '@mswjs/interceptors@0.40.0':
- resolution: {integrity: sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==}
- engines: {node: '>=18'}
-
'@napi-rs/wasm-runtime@1.1.0':
resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==}
@@ -2432,143 +2555,143 @@ packages:
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
- '@oxc-resolver/binding-android-arm-eabi@11.14.2':
- resolution: {integrity: sha512-bTrdE4Z1JcGwPxBOaGbxRbpOHL8/xPVJTTq3/bAZO2euWX0X7uZ+XxsbC+5jUDMhLenqdFokgE1akHEU4xsh6A==}
+ '@oxc-resolver/binding-android-arm-eabi@11.15.0':
+ resolution: {integrity: sha512-Q+lWuFfq7whNelNJIP1dhXaVz4zO9Tu77GcQHyxDWh3MaCoO2Bisphgzmsh4ZoUe2zIchQh6OvQL99GlWHg9Tw==}
cpu: [arm]
os: [android]
- '@oxc-resolver/binding-android-arm64@11.14.2':
- resolution: {integrity: sha512-bL7/f6YGKUvt/wzpX7ZrHCf1QerotbSG+IIb278AklXuwr6yQdfQHt7KQ8hAWqSYpB2TAbPbAa9HE4wzVyxL9Q==}
+ '@oxc-resolver/binding-android-arm64@11.15.0':
+ resolution: {integrity: sha512-vbdBttesHR0W1oJaxgWVTboyMUuu+VnPsHXJ6jrXf4czELzB6GIg5DrmlyhAmFBhjwov+yJH/DfTnHS+2sDgOw==}
cpu: [arm64]
os: [android]
- '@oxc-resolver/binding-darwin-arm64@11.14.2':
- resolution: {integrity: sha512-0zhMhqHz/kC6/UzMC4D9mVBz3/M9UTorbaULfHjAW5b8SUC08H01lZ5fR3OzfDbJI0ByLfiQZmbovuR/pJ8Wzg==}
+ '@oxc-resolver/binding-darwin-arm64@11.15.0':
+ resolution: {integrity: sha512-R67lsOe1UzNjqVBCwCZX1rlItTsj/cVtBw4Uy19CvTicqEWvwaTn8t34zLD75LQwDDPCY3C8n7NbD+LIdw+ZoA==}
cpu: [arm64]
os: [darwin]
- '@oxc-resolver/binding-darwin-x64@11.14.2':
- resolution: {integrity: sha512-kRJBTCQnrGy1mjO+658yMrlGYWEKi6j4JvKt92PRCoeDX0vW4jvzgoJXzZXNxZL1pCY6jIdwsn9u53v4jwpR6g==}
+ '@oxc-resolver/binding-darwin-x64@11.15.0':
+ resolution: {integrity: sha512-77mya5F8WV0EtCxI0MlVZcqkYlaQpfNwl/tZlfg4jRsoLpFbaTeWv75hFm6TE84WULVlJtSgvf7DhoWBxp9+ZQ==}
cpu: [x64]
os: [darwin]
- '@oxc-resolver/binding-freebsd-x64@11.14.2':
- resolution: {integrity: sha512-lpKiya7qPq5EAV5E16SJbxfhNYRCBZATGngn9mZxR2fMLDVbHISDIP2Br8eWA8M1FBJFsOGgBzxDo+42ySSNZQ==}
+ '@oxc-resolver/binding-freebsd-x64@11.15.0':
+ resolution: {integrity: sha512-X1Sz7m5PC+6D3KWIDXMUtux+0Imj6HfHGdBStSvgdI60OravzI1t83eyn6eN0LPTrynuPrUgjk7tOnOsBzSWHw==}
cpu: [x64]
os: [freebsd]
- '@oxc-resolver/binding-linux-arm-gnueabihf@11.14.2':
- resolution: {integrity: sha512-zRIf49IGs4cE9rwpVM3NxlHWquZpwQLebtc9dY9S+4+B+PSLIP95BrzdRfkspwzWC5DKZsOWpvGQjxQiLoUwGA==}
+ '@oxc-resolver/binding-linux-arm-gnueabihf@11.15.0':
+ resolution: {integrity: sha512-L1x/wCaIRre+18I4cH/lTqSAymlV0k4HqfSYNNuI9oeL28Ks86lI6O5VfYL6sxxWYgjuWB98gNGo7tq7d4GarQ==}
cpu: [arm]
os: [linux]
- '@oxc-resolver/binding-linux-arm-musleabihf@11.14.2':
- resolution: {integrity: sha512-sF1fBrcfwoRkv1pR3Kp6D5MuBeHRPxYuzk9rhaun/50vq5nAMOaomkEm4hBbTSubfU86CoBIEbLUQ+1f7NvUVA==}
+ '@oxc-resolver/binding-linux-arm-musleabihf@11.15.0':
+ resolution: {integrity: sha512-abGXd/zMGa0tH8nKlAXdOnRy4G7jZmkU0J85kMKWns161bxIgGn/j7zxqh3DKEW98wAzzU9GofZMJ0P5YCVPVw==}
cpu: [arm]
os: [linux]
- '@oxc-resolver/binding-linux-arm64-gnu@11.14.2':
- resolution: {integrity: sha512-O8iTBqz6oxf1k93Rn6WMGGQYo2jV1K81hq4N/Nke3dHE25EIEg2RKQqMz1dFrvVb2RkvD7QaUTEevbx0Lq+4wQ==}
+ '@oxc-resolver/binding-linux-arm64-gnu@11.15.0':
+ resolution: {integrity: sha512-SVjjjtMW66Mza76PBGJLqB0KKyFTBnxmtDXLJPbL6ZPGSctcXVmujz7/WAc0rb9m2oV0cHQTtVjnq6orQnI/jg==}
cpu: [arm64]
os: [linux]
- '@oxc-resolver/binding-linux-arm64-musl@11.14.2':
- resolution: {integrity: sha512-HOfzpS6eUxvdch9UlXCMx2kNJWMNBjUpVJhseqAKDB1dlrfCHgexeLyBX977GLXkq2BtNXKsY3KCryy1QhRSRw==}
+ '@oxc-resolver/binding-linux-arm64-musl@11.15.0':
+ resolution: {integrity: sha512-JDv2/AycPF2qgzEiDeMJCcSzKNDm3KxNg0KKWipoKEMDFqfM7LxNwwSVyAOGmrYlE4l3dg290hOMsr9xG7jv9g==}
cpu: [arm64]
os: [linux]
- '@oxc-resolver/binding-linux-ppc64-gnu@11.14.2':
- resolution: {integrity: sha512-0uLG6F2zljUseQAUmlpx/9IdKpiLsSirpmrr8/aGVfiEurIJzC/1lo2HQskkM7e0VVOkXg37AjHUDLE23Fi8SA==}
+ '@oxc-resolver/binding-linux-ppc64-gnu@11.15.0':
+ resolution: {integrity: sha512-zbu9FhvBLW4KJxo7ElFvZWbSt4vP685Qc/Gyk/Ns3g2gR9qh2qWXouH8PWySy+Ko/qJ42+HJCLg+ZNcxikERfg==}
cpu: [ppc64]
os: [linux]
- '@oxc-resolver/binding-linux-riscv64-gnu@11.14.2':
- resolution: {integrity: sha512-Pdh0BH/E0YIK7Qg95IsAfQyU9rAoDoFh50R19zCTNfjSnwsoDMGHjmUc82udSfPo2YMnuxA+/+aglxmLQVSu2Q==}
+ '@oxc-resolver/binding-linux-riscv64-gnu@11.15.0':
+ resolution: {integrity: sha512-Kfleehe6B09C2qCnyIU01xLFqFXCHI4ylzkicfX/89j+gNHh9xyNdpEvit88Kq6i5tTGdavVnM6DQfOE2qNtlg==}
cpu: [riscv64]
os: [linux]
- '@oxc-resolver/binding-linux-riscv64-musl@11.14.2':
- resolution: {integrity: sha512-3DLQhJ2r53rCH5cudYFqD7nh+Z6ABvld3GjbiqHhT43GMIPw3JcHekC2QunLRNjRr1G544fo1HtjTJz9rCBpyg==}
+ '@oxc-resolver/binding-linux-riscv64-musl@11.15.0':
+ resolution: {integrity: sha512-J7LPiEt27Tpm8P+qURDwNc8q45+n+mWgyys4/V6r5A8v5gDentHRGUx3iVk5NxdKhgoGulrzQocPTZVosq25Eg==}
cpu: [riscv64]
os: [linux]
- '@oxc-resolver/binding-linux-s390x-gnu@11.14.2':
- resolution: {integrity: sha512-G5BnAOQ5f+RUG1cvlJ4BvV+P7iKLYBv67snqgcfwD5b2N4UwJj32bt4H5JfolocWy4x3qUjEDWTIjHdE+2uZ9w==}
+ '@oxc-resolver/binding-linux-s390x-gnu@11.15.0':
+ resolution: {integrity: sha512-+8/d2tAScPjVJNyqa7GPGnqleTB/XW9dZJQ2D/oIM3wpH3TG+DaFEXBbk4QFJ9K9AUGBhvQvWU2mQyhK/yYn3Q==}
cpu: [s390x]
os: [linux]
- '@oxc-resolver/binding-linux-x64-gnu@11.14.2':
- resolution: {integrity: sha512-VirQAX2PqKrhWtQGsSDEKlPhbgh3ggjT1sWuxLk4iLFwtyA2tLEPXJNAsG0kfAS2+VSA8OyNq16wRpQlMPZ4yA==}
+ '@oxc-resolver/binding-linux-x64-gnu@11.15.0':
+ resolution: {integrity: sha512-xtvSzH7Nr5MCZI2FKImmOdTl9kzuQ51RPyLh451tvD2qnkg3BaqI9Ox78bTk57YJhlXPuxWSOL5aZhKAc9J6qg==}
cpu: [x64]
os: [linux]
- '@oxc-resolver/binding-linux-x64-musl@11.14.2':
- resolution: {integrity: sha512-q4ORcwMkpzu4EhZyka/s2TuH2QklEHAr/mIQBXzu5BACeBJZIFkICp8qrq4XVnkEZ+XhSFTvBECqfMTT/4LSkA==}
+ '@oxc-resolver/binding-linux-x64-musl@11.15.0':
+ resolution: {integrity: sha512-14YL1zuXj06+/tqsuUZuzL0T425WA/I4nSVN1kBXeC5WHxem6lQ+2HGvG+crjeJEqHgZUT62YIgj88W+8E7eyg==}
cpu: [x64]
os: [linux]
- '@oxc-resolver/binding-openharmony-arm64@11.14.2':
- resolution: {integrity: sha512-ZsMIpDCxSFpUM/TwOovX5vZUkV0IukPFnrKTGaeJRuTKXMcJxMiQGCYTwd6y684Y3j55QZqIMkVM9NdCGUX6Kw==}
+ '@oxc-resolver/binding-openharmony-arm64@11.15.0':
+ resolution: {integrity: sha512-/7Qli+1Wk93coxnrQaU8ySlICYN8HsgyIrzqjgIkQEpI//9eUeaeIHZptNl2fMvBGeXa7k2QgLbRNaBRgpnvMw==}
cpu: [arm64]
os: [openharmony]
- '@oxc-resolver/binding-wasm32-wasi@11.14.2':
- resolution: {integrity: sha512-Lvq5ZZNvSjT3Jq/buPFMtp55eNyGlEWsq30tN+yLOfODSo6T6yAJNs6+wXtqu9PiMj4xpVtgXypHtbQ1f+t7kw==}
+ '@oxc-resolver/binding-wasm32-wasi@11.15.0':
+ resolution: {integrity: sha512-q5rn2eIMQLuc/AVGR2rQKb2EVlgreATGG8xXg8f4XbbYCVgpxaq+dgMbiPStyNywW1MH8VU2T09UEm30UtOQvg==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@oxc-resolver/binding-win32-arm64-msvc@11.14.2':
- resolution: {integrity: sha512-7w7WHSLSSmkkYHH52QF7TrO0Z8eaIjRUrre5M56hSWRAZupCRzADZxBVMpDnHobZ8MAa2kvvDEfDbERuOK/avQ==}
+ '@oxc-resolver/binding-win32-arm64-msvc@11.15.0':
+ resolution: {integrity: sha512-yCAh2RWjU/8wWTxQDgGPgzV9QBv0/Ojb5ej1c/58iOjyTuy/J1ZQtYi2SpULjKmwIxLJdTiCHpMilauWimE31w==}
cpu: [arm64]
os: [win32]
- '@oxc-resolver/binding-win32-ia32-msvc@11.14.2':
- resolution: {integrity: sha512-hIrdlWa6tzqyfuWrxUetURBWHttBS+NMbBrGhCupc54NCXFy2ArB+0JOOaLYiI2ShKL5a3uqB7EWxmjzOuDdPQ==}
+ '@oxc-resolver/binding-win32-ia32-msvc@11.15.0':
+ resolution: {integrity: sha512-lmXKb6lvA6M6QIbtYfgjd+AryJqExZVSY2bfECC18OPu7Lv1mHFF171Mai5l9hG3r4IhHPPIwT10EHoilSCYeA==}
cpu: [ia32]
os: [win32]
- '@oxc-resolver/binding-win32-x64-msvc@11.14.2':
- resolution: {integrity: sha512-dP9aV6AZRRpg5mlg0eMuTROtttpQwj3AiegNJ/NNmMSjs+0+aLNcgkWRPhskK3vjTsthH4/+kKLpnQhSxdJkNg==}
+ '@oxc-resolver/binding-win32-x64-msvc@11.15.0':
+ resolution: {integrity: sha512-HZsfne0s/tGOcJK9ZdTGxsNU2P/dH0Shf0jqrPvsC6wX0Wk+6AyhSpHFLQCnLOuFQiHHU0ePfM8iYsoJb5hHpQ==}
cpu: [x64]
os: [win32]
- '@oxlint/darwin-arm64@1.31.0':
- resolution: {integrity: sha512-HqoYNH5WFZRdqGUROTFGOdBcA9y/YdHNoR/ujlyVO53it+q96dujbgKEvlff/WEuo4LbDKBrKLWKTKvOd/VYdg==}
+ '@oxlint/darwin-arm64@1.32.0':
+ resolution: {integrity: sha512-yrqPmZYu5Qb+49h0P5EXVIq8VxYkDDM6ZQrWzlh16+UGFcD8HOXs4oF3g9RyfaoAbShLCXooSQsM/Ifwx8E/eQ==}
cpu: [arm64]
os: [darwin]
- '@oxlint/darwin-x64@1.31.0':
- resolution: {integrity: sha512-gNq+JQXBCkYKQhmJEgSNjuPqmdL8yBEX3v0sueLH3g5ym4OIrNO7ml1M7xzCs0zhINQCR9MsjMJMyBNaF1ed+g==}
+ '@oxlint/darwin-x64@1.32.0':
+ resolution: {integrity: sha512-pQRZrJG/2nAKc3IuocFbaFFbTDlQsjz2WfivRsMn0hw65EEsSuM84WMFMiAfLpTGyTICeUtHZLHlrM5lzVr36A==}
cpu: [x64]
os: [darwin]
- '@oxlint/linux-arm64-gnu@1.31.0':
- resolution: {integrity: sha512-cRmttpr3yHPwbrvtPNlv+0Zw2Oeh0cU902iMI4fFW9ylbW/vUAcz6DvzGMCYZbII8VDiwQ453SV5AA8xBgMbmw==}
+ '@oxlint/linux-arm64-gnu@1.32.0':
+ resolution: {integrity: sha512-tyomSmU2DzwcTmbaWFmStHgVfRmJDDvqcIvcw4fRB1YlL2Qg/XaM4NJ0m2bdTap38gxD5FSxSgCo0DkQ8GTolg==}
cpu: [arm64]
os: [linux]
- '@oxlint/linux-arm64-musl@1.31.0':
- resolution: {integrity: sha512-0p7vn0hdMdNPIUzemw8f1zZ2rRZ/963EkK3o4P0KUXOPgleo+J9ZIPH7gcHSHtyrNaBifN03wET1rH4SuWQYnA==}
+ '@oxlint/linux-arm64-musl@1.32.0':
+ resolution: {integrity: sha512-0W46dRMaf71OGE4+Rd+GHfS1uF/UODl5Mef6871pMhN7opPGfTI2fKJxh9VzRhXeSYXW/Z1EuCq9yCfmIJq+5Q==}
cpu: [arm64]
os: [linux]
- '@oxlint/linux-x64-gnu@1.31.0':
- resolution: {integrity: sha512-vNIbpSwQ4dwN0CUmojG7Y91O3CXOf0Kno7DSTshk/JJR4+u8HNVuYVjX2qBRk0OMc4wscJbEd7wJCl0VJOoCOw==}
+ '@oxlint/linux-x64-gnu@1.32.0':
+ resolution: {integrity: sha512-5+6myVCBOMvM62rDB9T3CARXUvIwhGqte6E+HoKRwYaqsxGUZ4bh3pItSgSFwHjLGPrvADS11qJUkk39eQQBzQ==}
cpu: [x64]
os: [linux]
- '@oxlint/linux-x64-musl@1.31.0':
- resolution: {integrity: sha512-4avnH09FJRTOT2cULdDPG0s14C+Ku4cnbNye6XO7rsiX6Bprz+aQblLA+1WLOr7UfC/0zF+jnZ9K5VyBBJy9Kw==}
+ '@oxlint/linux-x64-musl@1.32.0':
+ resolution: {integrity: sha512-qwQlwYYgVIC6ScjpUwiKKNyVdUlJckrfwPVpIjC9mvglIQeIjKuuyaDxUZWIOc/rEzeCV/tW6tcbehLkfEzqsw==}
cpu: [x64]
os: [linux]
- '@oxlint/win32-arm64@1.31.0':
- resolution: {integrity: sha512-mQaD5H93OUpxiGjC518t5wLQikf0Ur5mQEKO2VoTlkp01gqmrQ+hyCLOzABlsAIAeDJD58S9JwNOw4KFFnrqdw==}
+ '@oxlint/win32-arm64@1.32.0':
+ resolution: {integrity: sha512-7qYZF9CiXGtdv8Z/fBkgB5idD2Zokht67I5DKWH0fZS/2R232sDqW2JpWVkXltk0+9yFvmvJ0ouJgQRl9M3S2g==}
cpu: [arm64]
os: [win32]
- '@oxlint/win32-x64@1.31.0':
- resolution: {integrity: sha512-AS/h58HfloccRlVs7P3zbyZfxNS62JuE8/3fYGjkiRlR1ZoDxdqmz5QgLEn+YxxFUTMmclGAPMFHg9z2Pk315A==}
+ '@oxlint/win32-x64@1.32.0':
+ resolution: {integrity: sha512-XW1xqCj34MEGJlHteqasTZ/LmBrwYIgluhNW0aP+XWkn90+stKAq3W/40dvJKbMK9F7o09LPCuMVtUW7FIUuiA==}
cpu: [x64]
os: [win32]
@@ -2664,6 +2787,11 @@ packages:
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ '@playwright/test@1.57.0':
+ resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
'@pmmmwh/react-refresh-webpack-plugin@0.5.17':
resolution: {integrity: sha512-tXDyE1/jzFsHXjhRZQ3hMl0IVhYe5qula43LDWIhVfjp9G/nT5OQY5AORVOrkEGAUltBJOfOWeETbmhm6kHhuQ==}
engines: {node: '>= 10.13'}
@@ -3202,21 +3330,21 @@ packages:
resolution: {integrity: sha512-RL1f5ZlfZMpghrCIdzl6mLOFLTuhqmPNblZgBaeKfdtk5rfbjykurv+VfYydOFXj0vxVIoA2d/zT7xfD7Ph8fw==}
engines: {node: '>=18'}
- '@tanstack/form-core@1.27.0':
- resolution: {integrity: sha512-QFEhg9/VcrwtpbcN7Qpl8JVVfEm2UJ+dzfDFGGMYub2J9jsgrp2HmaY7LSLlnkpTJlCIDxQiWDkiOFYQtK6yzw==}
+ '@tanstack/form-core@1.27.1':
+ resolution: {integrity: sha512-hPM+0tUnZ2C2zb2TE1lar1JJ0S0cbnQHlUwFcCnVBpMV3rjtUzkoM766gUpWrlmTGCzNad0GbJ0aTxVsjT6J8g==}
'@tanstack/pacer@0.15.4':
resolution: {integrity: sha512-vGY+CWsFZeac3dELgB6UZ4c7OacwsLb8hvL2gLS6hTgy8Fl0Bm/aLokHaeDIP+q9F9HUZTnp360z9uv78eg8pg==}
engines: {node: '>=18'}
- '@tanstack/query-core@5.90.11':
- resolution: {integrity: sha512-f9z/nXhCgWDF4lHqgIE30jxLe4sYv15QodfdPDKYAk7nAEjNcndy4dHz3ezhdUaR23BpWa4I2EH4/DZ0//Uf8A==}
+ '@tanstack/query-core@5.90.12':
+ resolution: {integrity: sha512-T1/8t5DhV/SisWjDnaiU2drl6ySvsHj1bHBCWNXd+/T+Hh1cf6JodyEYMd5sgwm+b/mETT4EV3H+zCVczCU5hg==}
'@tanstack/query-devtools@5.91.1':
resolution: {integrity: sha512-l8bxjk6BMsCaVQH6NzQEE/bEgFy1hAs5qbgXl0xhzezlaQbPk6Mgz9BqEg2vTLPOHD8N4k+w/gdgCbEzecGyNg==}
- '@tanstack/react-form@1.27.0':
- resolution: {integrity: sha512-7MBOtvjlUwkGpvA9TIOs3YdLoyfJWZYtxuAQIdkLDZ9HLrRaRbxWQIZ2H6sRVA35sPvx6uiQMunGHOPKip5AZA==}
+ '@tanstack/react-form@1.27.1':
+ resolution: {integrity: sha512-HKP0Ew2ae9AL5vU1PkJ+oAC2p+xBtA905u0fiNLzlfn1vLkBxenfg5L6TOA+rZITHpQsSo10tqwc5Yw6qn8Mpg==}
peerDependencies:
'@tanstack/react-start': '*'
react: ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -3230,8 +3358,8 @@ packages:
'@tanstack/react-query': ^5.90.10
react: ^18 || ^19
- '@tanstack/react-query@5.90.11':
- resolution: {integrity: sha512-3uyzz01D1fkTLXuxF3JfoJoHQMU2fxsfJwE+6N5hHy0dVNoZOvwKP8Z2k7k1KDeD54N20apcJnG75TBAStIrBA==}
+ '@tanstack/react-query@5.90.12':
+ resolution: {integrity: sha512-graRZspg7EoEaw0a8faiUASCyJrqjKPdqJ9EwuDRUF9mEYJ1YPczI9H+/agJ0mOJkPCJDk0lsz5QTrLZ/jQ2rg==}
peerDependencies:
react: ^18 || ^19
@@ -3241,8 +3369,8 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- '@tanstack/react-virtual@3.13.12':
- resolution: {integrity: sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==}
+ '@tanstack/react-virtual@3.13.13':
+ resolution: {integrity: sha512-4o6oPMDvQv+9gMi8rE6gWmsOjtUZUYIJHv7EB+GblyYdi8U6OqLl8rhHWIUZSL1dUU2dPwTdTgybCKf9EjIrQg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -3253,8 +3381,8 @@ packages:
'@tanstack/store@0.8.0':
resolution: {integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==}
- '@tanstack/virtual-core@3.13.12':
- resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==}
+ '@tanstack/virtual-core@3.13.13':
+ resolution: {integrity: sha512-uQFoSdKKf5S8k51W5t7b2qpfkyIbdHMzAn+AMQvHPxKUPeo1SsGaA4JRISQT87jm28b7z8OEqPcg1IOZagQHcA==}
'@testing-library/dom@10.4.1':
resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==}
@@ -3514,8 +3642,8 @@ packages:
'@types/node@18.15.0':
resolution: {integrity: sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==}
- '@types/node@20.19.25':
- resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
+ '@types/node@20.19.26':
+ resolution: {integrity: sha512-0l6cjgF0XnihUpndDhk+nyD3exio3iKaYROSgvh/qSevPXax3L8p5DBRFjbvalnwatGgHEQn2R88y2fA3g4irg==}
'@types/papaparse@5.5.1':
resolution: {integrity: sha512-esEO+VISsLIyE+JZBmb89NzsYYbpwV8lmv2rPo6oX5y9KhBaIP7hhHgjuTut54qjdKVMufTEcrh5fUl9+58huw==}
@@ -3566,9 +3694,6 @@ packages:
'@types/stack-utils@2.0.3':
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
- '@types/statuses@2.0.6':
- resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==}
-
'@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
@@ -3593,109 +3718,109 @@ packages:
'@types/zen-observable@0.8.3':
resolution: {integrity: sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==}
- '@typescript-eslint/eslint-plugin@8.48.1':
- resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==}
+ '@typescript-eslint/eslint-plugin@8.49.0':
+ resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.48.1
+ '@typescript-eslint/parser': ^8.49.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.48.1':
- resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==}
+ '@typescript-eslint/parser@8.49.0':
+ resolution: {integrity: sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.48.1':
- resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==}
+ '@typescript-eslint/project-service@8.49.0':
+ resolution: {integrity: sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.48.1':
- resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==}
+ '@typescript-eslint/scope-manager@8.49.0':
+ resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.48.1':
- resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==}
+ '@typescript-eslint/tsconfig-utils@8.49.0':
+ resolution: {integrity: sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.48.1':
- resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==}
+ '@typescript-eslint/type-utils@8.49.0':
+ resolution: {integrity: sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.48.1':
- resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==}
+ '@typescript-eslint/types@8.49.0':
+ resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.48.1':
- resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==}
+ '@typescript-eslint/typescript-estree@8.49.0':
+ resolution: {integrity: sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.48.1':
- resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==}
+ '@typescript-eslint/utils@8.49.0':
+ resolution: {integrity: sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.48.1':
- resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==}
+ '@typescript-eslint/visitor-keys@8.49.0':
+ resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251204.1':
- resolution: {integrity: sha512-CgIzuO/LFRufdVjJmll6x7jnejYqqLo4kJwrsUxQipJ/dcGeP0q2XMcxNBzT7F9L4Sd5dphRPOZFXES4kS0lig==}
+ '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251209.1':
+ resolution: {integrity: sha512-F1cnYi+ZeinYQnaTQKKIsbuoq8vip5iepBkSZXlB8PjbG62LW1edUdktd/nVEc+Q+SEysSQ3jRdk9eU766s5iw==}
cpu: [arm64]
os: [darwin]
- '@typescript/native-preview-darwin-x64@7.0.0-dev.20251204.1':
- resolution: {integrity: sha512-X76oQeDMQHJiukkPPbk7STrfu97pfPe5ixwiN6nXzSGXLE+tzrXRecNkYhz4XWeAW2ASNmGwDJJ2RAU5l8MbgQ==}
+ '@typescript/native-preview-darwin-x64@7.0.0-dev.20251209.1':
+ resolution: {integrity: sha512-Ta6XKdAxEMBzd1xS4eQKXmlUkml+kMf23A9qFoegOxmyCdHJPak2gLH9ON5/C6js0ibZm1kdqwbcA0/INrcThg==}
cpu: [x64]
os: [darwin]
- '@typescript/native-preview-linux-arm64@7.0.0-dev.20251204.1':
- resolution: {integrity: sha512-+1as+h6ZNpc9TqlHwvDkBP7jg0FoCMUf6Rrc9/Mkllau6etznfVsWMADWT4t76gkGZKUIXOZqsl2Ya3uaBrCBQ==}
+ '@typescript/native-preview-linux-arm64@7.0.0-dev.20251209.1':
+ resolution: {integrity: sha512-kdiPMvs1hwi76hgvZjz4XQVNYTV+MAbJKnHXz6eL6aVXoTYzNtan5vWywKOHv9rV4jBMyVlZqtKbeG/XVV9WdQ==}
cpu: [arm64]
os: [linux]
- '@typescript/native-preview-linux-arm@7.0.0-dev.20251204.1':
- resolution: {integrity: sha512-3zl/Jj5rzkK9Oo5KVSIW+6bzRligoI+ZnA1xLpg0BBH2sk27a8Vasj7ZaGPlFvlSegvcaJdIjSt7Z8nBtiF9Ww==}
+ '@typescript/native-preview-linux-arm@7.0.0-dev.20251209.1':
+ resolution: {integrity: sha512-4e7WSBLLdmfJUGzm9Id4WA2fDZ2sY3Q6iudyZPNSb5AFsCmqQksM/JGAlNROHpi/tIqo95e3ckbjmrZTmH60EA==}
cpu: [arm]
os: [linux]
- '@typescript/native-preview-linux-x64@7.0.0-dev.20251204.1':
- resolution: {integrity: sha512-YD//l6yv7iPNlKn9OZDzBxrI+QGLN6d4RV3dSucsyq/YNZUulcywGztbZiaQxdUzKPwj70G+LVb9WCgf5ITOIQ==}
+ '@typescript/native-preview-linux-x64@7.0.0-dev.20251209.1':
+ resolution: {integrity: sha512-dH/Z50Xb52N4Csd0BXptmjuMN+87AhUAjM9Y5rNU8VwcUJJDFpKM6aKUhd4Q+XEVJWPFPlKDLx3pVhnO31CBhQ==}
cpu: [x64]
os: [linux]
- '@typescript/native-preview-win32-arm64@7.0.0-dev.20251204.1':
- resolution: {integrity: sha512-eDXYR5qfPFA8EfQ0d9SbWGLn02VbAaeTM9jQ5VeLlPLcBP81nGRaGQ9Quta5zeEHev1S9iCdyRj5BqCRtl0ohw==}
+ '@typescript/native-preview-win32-arm64@7.0.0-dev.20251209.1':
+ resolution: {integrity: sha512-vW7IGRNIUhhQ0vzFY3sRNxvYavNGum2OWgW1Bwc05yhg9AexBlRjdhsUSTLQ2dUeaDm2nx4i38LhXIVgLzMNeA==}
cpu: [arm64]
os: [win32]
- '@typescript/native-preview-win32-x64@7.0.0-dev.20251204.1':
- resolution: {integrity: sha512-CRWI2OPdqXbzOU52R2abWMb3Ie2Wp6VPrCFzR3pzP53JabTAe8+XoBWlont9bw/NsqbPKp2aQbdfbLQX5RI44g==}
+ '@typescript/native-preview-win32-x64@7.0.0-dev.20251209.1':
+ resolution: {integrity: sha512-jKT6npBrhRX/84LWSy9PbOWx2USTZhq9SOkvH2mcnU/+uqyNxZIMMVnW5exIyzcnWSPly3jK2qpfiHNjdrDaAA==}
cpu: [x64]
os: [win32]
- '@typescript/native-preview@7.0.0-dev.20251204.1':
- resolution: {integrity: sha512-nyMp0ybgJVZFtDOWmcKDqaRqtj8dOg65+fDxbjIrnZuMWIqlOUGH+imFwofqlW+KndAA7KtAio2YSZMMZB25WA==}
+ '@typescript/native-preview@7.0.0-dev.20251209.1':
+ resolution: {integrity: sha512-xnx3A1S1TTx+mx8FfP1UwkNTwPBmhGCbOh4PDNRUV5gDZkVuDDN3y1F7NPGSMg6MXE1KKPSLNM+PQMN33ZAL2Q==}
hasBin: true
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
- '@vitest/eslint-plugin@1.5.1':
- resolution: {integrity: sha512-t49CNERe/YadnLn90NTTKJLKzs99xBkXElcoUTLodG6j1G0Q7jy3mXqqiHd3N5aryG2KkgOg4UAoGwgwSrZqKQ==}
+ '@vitest/eslint-plugin@1.5.2':
+ resolution: {integrity: sha512-2t1F2iecXB/b1Ox4U137lhD3chihEE3dRVtu3qMD35tc6UqUjg1VGRJoS1AkFKwpT8zv8OQInzPQO06hrRkeqw==}
engines: {node: '>=18'}
peerDependencies:
eslint: '>=8.57.0'
@@ -4051,8 +4176,8 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.8.32:
- resolution: {integrity: sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==}
+ baseline-browser-mapping@2.9.5:
+ resolution: {integrity: sha512-D5vIoztZOq1XM54LUdttJVc96ggEsIfju2JBvht06pSzpckp3C7HReun67Bghzrtdsq9XdMGbSSB3v3GhMNmAA==}
hasBin: true
before-after-hook@3.0.2:
@@ -4122,8 +4247,8 @@ packages:
browserify-zlib@0.2.0:
resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==}
- browserslist@4.28.0:
- resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==}
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -4188,11 +4313,8 @@ packages:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
- caniuse-lite@1.0.30001757:
- resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==}
-
- caniuse-lite@1.0.30001759:
- resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==}
+ caniuse-lite@1.0.30001760:
+ resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==}
canvas@3.2.0:
resolution: {integrity: sha512-jk0GxrLtUEmW/TmFsk2WghvgHe8B0pxGilqCL21y8lHkPUGa6FTsnCNtHPOzT8O3y+N+m3espawV80bbBlgfTA==}
@@ -4337,10 +4459,6 @@ packages:
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
engines: {node: '>=18'}
- cli-width@4.1.0:
- resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
- engines: {node: '>= 12'}
-
client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
@@ -4455,10 +4573,6 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- cookie@1.1.1:
- resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
- engines: {node: '>=18'}
-
copy-to-clipboard@3.3.3:
resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
@@ -4864,8 +4978,8 @@ packages:
dompurify@3.2.7:
resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==}
- dompurify@3.3.0:
- resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==}
+ dompurify@3.3.1:
+ resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==}
domutils@2.8.0:
resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
@@ -4877,6 +4991,10 @@ packages:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
+ dotenv@17.2.3:
+ resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
+ engines: {node: '>=12'}
+
duplexer@0.1.2:
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
@@ -4894,8 +5012,8 @@ packages:
engines: {node: '>=0.10.0'}
hasBin: true
- electron-to-chromium@1.5.263:
- resolution: {integrity: sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg==}
+ electron-to-chromium@1.5.267:
+ resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
elkjs@0.9.3:
resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==}
@@ -4975,6 +5093,11 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ esbuild@0.25.12:
+ resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -5079,8 +5202,8 @@ packages:
resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==}
engines: {node: '>=5.0.0'}
- eslint-plugin-oxlint@1.31.0:
- resolution: {integrity: sha512-yIUkBg9qZCL9DZVSvH3FklF5urG7LRboZD0/YLf/CvihPpcfBeMyH1onaG3+iKMCIRa/uwXgdRjB5MSOplFTVw==}
+ eslint-plugin-oxlint@1.32.0:
+ resolution: {integrity: sha512-CodKgz/9q3euGbCYrXVRyFxHfnrxn9Q4EywqE4V/VYegry2pJ9/hPQ0OUDTRzbl3/pPbVndkrUUm5tK8NTSgeg==}
eslint-plugin-perfectionist@4.15.1:
resolution: {integrity: sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==}
@@ -5088,8 +5211,8 @@ packages:
peerDependencies:
eslint: '>=8.45.0'
- eslint-plugin-pnpm@1.3.0:
- resolution: {integrity: sha512-Lkdnj3afoeUIkDUu8X74z60nrzjQ2U55EbOeI+qz7H1He4IO4gmUKT2KQIl0It52iMHJeuyLDWWNgjr6UIK8nw==}
+ eslint-plugin-pnpm@1.4.2:
+ resolution: {integrity: sha512-em/HEUlud5G3G4VZe2dhgsLm2ey6CG+Y+Lq3fS/RsbnmKhi+D+LcLz31GphTJhizCoKl2oAVndMltOHbuBYe+A==}
peerDependencies:
eslint: ^9.0.0
@@ -5616,10 +5739,6 @@ packages:
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
- graphql@16.12.0:
- resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==}
- engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
-
gzip-size@6.0.0:
resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
engines: {node: '>=10'}
@@ -5679,8 +5798,8 @@ packages:
hast-util-to-jsx-runtime@2.3.6:
resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
- hast-util-to-parse5@8.0.0:
- resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
+ hast-util-to-parse5@8.0.1:
+ resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==}
hast-util-to-text@4.0.2:
resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
@@ -5698,9 +5817,6 @@ packages:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
- headers-polyfill@4.0.3:
- resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
-
highlight.js@10.7.3:
resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
@@ -6238,8 +6354,8 @@ packages:
engines: {node: '>=6'}
hasBin: true
- jsonc-eslint-parser@2.4.1:
- resolution: {integrity: sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw==}
+ jsonc-eslint-parser@2.4.2:
+ resolution: {integrity: sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
jsonc-parser@3.3.1:
@@ -6259,8 +6375,8 @@ packages:
resolution: {integrity: sha512-eQQBjBnsVtGacsG9uJNB8qOr3yA8rga4wAaGG1qRcBzSIvfhERLrWxMAM1hp5fcS6Abo8M4+bUBTekYR0qTPQw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- katex@0.16.25:
- resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==}
+ katex@0.16.27:
+ resolution: {integrity: sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==}
hasBin: true
keyv@4.5.4:
@@ -6277,16 +6393,16 @@ packages:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
- knip@5.71.0:
- resolution: {integrity: sha512-hwgdqEJ+7DNJ5jE8BCPu7b57TY7vUwP6MzWYgCgPpg6iPCee/jKPShDNIlFER2koti4oz5xF88VJbKCb4Wl71g==}
+ knip@5.72.0:
+ resolution: {integrity: sha512-rlyoXI8FcggNtM/QXd/GW0sbsYvNuA/zPXt7bsuVi6kVQogY2PDCr81bPpzNnl0CP8AkFm2Z2plVeL5QQSis2w==}
engines: {node: '>=18.18.0'}
hasBin: true
peerDependencies:
'@types/node': '>=18'
typescript: '>=5.0.4 <7'
- ky@1.14.0:
- resolution: {integrity: sha512-Rczb6FMM6JT0lvrOlP5WUOCB7s9XKxzwgErzhKlKde1bEV90FXplV1o87fpt4PU/asJFiqjYJxAJyzJhcrxOsQ==}
+ ky@1.14.1:
+ resolution: {integrity: sha512-hYje4L9JCmpEQBtudo+v52X5X8tgWXUYyPcxKSuxQNboqufecl9VMWjGiucAFH060AwPXHZuH+WB2rrqfkmafw==}
engines: {node: '>=18'}
lamejs@1.2.1:
@@ -6738,20 +6854,6 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- msw@2.12.4:
- resolution: {integrity: sha512-rHNiVfTyKhzc0EjoXUBVGteNKBevdjOlVC6GlIRXpy+/3LHEIGRovnB5WPjcvmNODVQ1TNFnoa7wsGbd0V3epg==}
- engines: {node: '>=18'}
- hasBin: true
- peerDependencies:
- typescript: '>= 4.8.x'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- mute-stream@2.0.0:
- resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
@@ -6911,11 +7013,11 @@ packages:
outvariant@1.4.3:
resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==}
- oxc-resolver@11.14.2:
- resolution: {integrity: sha512-M5fERQKcrCngMZNnk1gRaBbYcqpqXLgMcoqAo7Wpty+KH0I18i03oiy2peUsGJwFaKAEbmo+CtAyhXh08RZ1RA==}
+ oxc-resolver@11.15.0:
+ resolution: {integrity: sha512-Hk2J8QMYwmIO9XTCUiOH00+Xk2/+aBxRUnhrSlANDyCnLYc32R1WSIq1sU2yEdlqd53FfMpPEpnBYIKQMzliJw==}
- oxlint@1.31.0:
- resolution: {integrity: sha512-U+Z3VShi1zuLF2Hz/pm4vWJUBm5sDHjwSzj340tz4tS2yXg9H5PTipsZv+Yu/alg6Z7EM2cZPKGNBZAvmdfkQg==}
+ oxlint@1.32.0:
+ resolution: {integrity: sha512-HYDQCga7flsdyLMUIxTgSnEx5KBxpP9VINB8NgO+UjV80xBiTQXyVsvjtneMT3ZBLMbL0SlG/Dm03XQAsEshMA==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -7038,9 +7140,6 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- path-to-regexp@6.3.0:
- resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
-
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -7131,8 +7230,8 @@ packages:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
- pnpm-workspace-yaml@1.3.0:
- resolution: {integrity: sha512-Krb5q8Totd5mVuLx7we+EFHq/AfxA75nbfTm25Q1pIf606+RlaKUG+PXH8SDihfe5b5k4H09gE+sL47L1t5lbw==}
+ pnpm-workspace-yaml@1.4.2:
+ resolution: {integrity: sha512-L2EKuOeV8aSt3z0RNtdwkg96BHV4WRN9pN2oTHKkMQQRxVEHFXPTbB+nly6ip1qV+JQM6qBebSiMgPRBx8S0Vw==}
points-on-curve@0.2.0:
resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
@@ -7292,9 +7391,6 @@ packages:
property-information@5.6.0:
resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
- property-information@6.5.0:
- resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
-
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
@@ -7396,8 +7492,8 @@ packages:
react-fast-compare@3.2.2:
resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
- react-hook-form@7.67.0:
- resolution: {integrity: sha512-E55EOwKJHHIT/I6J9DmQbCWToAYSw9nN5R57MZw9rMtjh+YQreMDxRLfdjfxQbiJ3/qbg3Z02wGzBX4M+5fMtQ==}
+ react-hook-form@7.68.0:
+ resolution: {integrity: sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: ^16.8.0 || ^17 || ^18 || ^19
@@ -7726,9 +7822,6 @@ packages:
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines: {node: '>=18'}
- rettime@0.7.0:
- resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==}
-
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -7803,8 +7896,8 @@ packages:
webpack:
optional: true
- sass@1.94.2:
- resolution: {integrity: sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==}
+ sass@1.95.0:
+ resolution: {integrity: sha512-9QMjhLq+UkOg/4bb8Lt8A+hJZvY3t+9xeZMKSBtBEgxrXA3ed5Ts4NDreUkYgJP1BTmrscQE/xYhf7iShow6lw==}
engines: {node: '>=14.0.0'}
hasBin: true
@@ -7981,10 +8074,6 @@ packages:
state-local@1.0.7:
resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==}
- statuses@2.0.2:
- resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
- engines: {node: '>= 0.8'}
-
storybook@9.1.13:
resolution: {integrity: sha512-G3KZ36EVzXyHds72B/qtWiJnhUpM0xOUeYlDcO9DSHL1bDTv15cW4+upBl+mcBZrDvU838cn7Bv4GpF+O5MCfw==}
hasBin: true
@@ -8149,10 +8238,6 @@ packages:
tabbable@6.3.0:
resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==}
- tagged-tag@1.0.0:
- resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
- engines: {node: '>=20'}
-
tailwind-merge@2.6.0:
resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
@@ -8180,8 +8265,8 @@ packages:
resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==}
engines: {node: '>=10'}
- terser-webpack-plugin@5.3.14:
- resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
+ terser-webpack-plugin@5.3.15:
+ resolution: {integrity: sha512-PGkOdpRFK+rb1TzVz+msVhw4YMRT9txLF4kRqvJhGhCM324xuR3REBSHALN+l+sAhKUmz0aotnjp5D+P83mLhQ==}
engines: {node: '>= 10.13.0'}
peerDependencies:
'@swc/core': '*'
@@ -8259,18 +8344,14 @@ packages:
toggle-selection@1.0.6:
resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
- toml-eslint-parser@0.10.0:
- resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==}
+ toml-eslint-parser@0.10.1:
+ resolution: {integrity: sha512-9mjy3frhioGIVGcwamlVlUyJ9x+WHw/TXiz9R4YOlmsIuBN43r9Dp8HZ35SF9EKjHrn3BUZj04CF+YqZ2oJ+7w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
- tough-cookie@6.0.0:
- resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==}
- engines: {node: '>=16'}
-
tr46@1.0.1:
resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
@@ -8370,10 +8451,6 @@ packages:
resolution: {integrity: sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==}
engines: {node: '>=16'}
- type-fest@5.3.1:
- resolution: {integrity: sha512-VCn+LMHbd4t6sF3wfU/+HKT63C9OoyrSIf4b+vtWHpt2U7/4InZG467YDNMFMR70DdHjAdpPWmw2lzRdg0Xqqg==}
- engines: {node: '>=20'}
-
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
@@ -8456,15 +8533,12 @@ packages:
resolution: {integrity: sha512-us4j03/499KhbGP8BU7Hrzrgseo+KdfJYWcbcajCOqsAyb8Gk0Yn2kiUIcZISYCb1JFaZfIuG3b42HmguVOKCQ==}
engines: {node: '>=18.12.0'}
- until-async@3.0.2:
- resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==}
-
upath@1.2.0:
resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==}
engines: {node: '>=4'}
- update-browserslist-db@1.1.4:
- resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
+ update-browserslist-db@1.2.2:
+ resolution: {integrity: sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -8733,10 +8807,6 @@ packages:
workbox-window@6.6.0:
resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==}
- wrap-ansi@6.2.0:
- resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
- engines: {node: '>=8'}
-
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -8791,8 +8861,8 @@ packages:
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- yaml-eslint-parser@1.3.1:
- resolution: {integrity: sha512-MdSgP9YA9QjtAO2+lt4O7V2bnH22LPnfeVLiQqjY3cOyn8dy/Ief8otjIe6SPPTK03nM7O3Yl0LTfWuF7l+9yw==}
+ yaml-eslint-parser@1.3.2:
+ resolution: {integrity: sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==}
engines: {node: ^14.17.0 || >=16.0.0}
yaml@1.10.2:
@@ -8828,10 +8898,6 @@ packages:
resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
engines: {node: '>=12.20'}
- yoctocolors-cjs@2.1.3:
- resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
- engines: {node: '>=18'}
-
zen-observable-ts@1.1.0:
resolution: {integrity: sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==}
@@ -8894,7 +8960,7 @@ snapshots:
'@alloc/quick-lru@5.2.0': {}
- '@amplitude/analytics-browser@2.31.3':
+ '@amplitude/analytics-browser@2.31.4':
dependencies:
'@amplitude/analytics-core': 2.33.0
'@amplitude/plugin-autocapture-browser': 1.18.0
@@ -8946,12 +9012,12 @@ snapshots:
'@amplitude/analytics-core': 2.33.0
tslib: 2.8.1
- '@amplitude/plugin-session-replay-browser@1.23.6(@amplitude/rrweb@2.0.0-alpha.33)(rollup@2.79.2)':
+ '@amplitude/plugin-session-replay-browser@1.24.1(@amplitude/rrweb@2.0.0-alpha.33)(rollup@2.79.2)':
dependencies:
'@amplitude/analytics-client-common': 2.4.16
'@amplitude/analytics-core': 2.33.0
'@amplitude/analytics-types': 2.11.0
- '@amplitude/session-replay-browser': 1.29.8(@amplitude/rrweb@2.0.0-alpha.33)(rollup@2.79.2)
+ '@amplitude/session-replay-browser': 1.30.0(@amplitude/rrweb@2.0.0-alpha.33)(rollup@2.79.2)
idb-keyval: 6.2.2
tslib: 2.8.1
transitivePeerDependencies:
@@ -9005,7 +9071,7 @@ snapshots:
base64-arraybuffer: 1.0.2
mitt: 3.0.1
- '@amplitude/session-replay-browser@1.29.8(@amplitude/rrweb@2.0.0-alpha.33)(rollup@2.79.2)':
+ '@amplitude/session-replay-browser@1.30.0(@amplitude/rrweb@2.0.0-alpha.33)(rollup@2.79.2)':
dependencies:
'@amplitude/analytics-client-common': 2.4.16
'@amplitude/analytics-core': 2.33.0
@@ -9039,9 +9105,9 @@ snapshots:
'@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.39.1(jiti@1.21.7))
'@eslint/markdown': 7.5.1
'@stylistic/eslint-plugin': 5.6.1(eslint@9.39.1(jiti@1.21.7))
- '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@vitest/eslint-plugin': 1.5.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@vitest/eslint-plugin': 1.5.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
ansis: 4.2.0
cac: 6.7.14
eslint: 9.39.1(jiti@1.21.7)
@@ -9056,21 +9122,21 @@ snapshots:
eslint-plugin-n: 17.23.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint-plugin-no-only-tests: 3.3.0
eslint-plugin-perfectionist: 4.15.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- eslint-plugin-pnpm: 1.3.0(eslint@9.39.1(jiti@1.21.7))
+ eslint-plugin-pnpm: 1.4.2(eslint@9.39.1(jiti@1.21.7))
eslint-plugin-regexp: 2.10.0(eslint@9.39.1(jiti@1.21.7))
eslint-plugin-toml: 0.12.0(eslint@9.39.1(jiti@1.21.7))
eslint-plugin-unicorn: 61.0.2(eslint@9.39.1(jiti@1.21.7))
- eslint-plugin-unused-imports: 4.3.0(@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))
- eslint-plugin-vue: 10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@1.21.7)))(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@1.21.7)))
+ eslint-plugin-unused-imports: 4.3.0(@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))
+ eslint-plugin-vue: 10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@1.21.7)))(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@1.21.7)))
eslint-plugin-yml: 1.19.0(eslint@9.39.1(jiti@1.21.7))
eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@1.21.7))
globals: 16.5.0
- jsonc-eslint-parser: 2.4.1
+ jsonc-eslint-parser: 2.4.2
local-pkg: 1.1.2
parse-gitignore: 2.0.0
- toml-eslint-parser: 0.10.0
+ toml-eslint-parser: 0.10.1
vue-eslint-parser: 10.2.0(eslint@9.39.1(jiti@1.21.7))
- yaml-eslint-parser: 1.3.1
+ yaml-eslint-parser: 1.3.2
optionalDependencies:
'@eslint-react/eslint-plugin': 1.53.1(eslint@9.39.1(jiti@1.21.7))(ts-api-utils@2.1.0(typescript@5.9.3))(typescript@5.9.3)
'@next/eslint-plugin-next': 15.5.7
@@ -9139,7 +9205,7 @@ snapshots:
dependencies:
'@babel/compat-data': 7.28.5
'@babel/helper-validator-option': 7.27.1
- browserslist: 4.28.0
+ browserslist: 4.28.1
lru-cache: 5.1.1
semver: 6.3.1
@@ -9930,13 +9996,13 @@ snapshots:
'@chevrotain/utils@11.0.3': {}
- '@chromatic-com/storybook@4.1.3(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))':
+ '@chromatic-com/storybook@4.1.3(storybook@9.1.13(@testing-library/dom@10.4.1))':
dependencies:
'@neoconfetti/react': 1.0.0
chromatic: 13.3.4
filesize: 10.1.6
jsonfile: 6.2.0
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
strip-ansi: 7.1.2
transitivePeerDependencies:
- '@chromatic-com/cypress'
@@ -10035,7 +10101,7 @@ snapshots:
'@es-joy/jsdoccomment@0.50.2':
dependencies:
'@types/estree': 1.0.8
- '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/types': 8.49.0
comment-parser: 1.4.1
esquery: 1.6.0
jsdoc-type-pratt-parser: 4.1.0
@@ -10043,7 +10109,7 @@ snapshots:
'@es-joy/jsdoccomment@0.58.0':
dependencies:
'@types/estree': 1.0.8
- '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/types': 8.49.0
comment-parser: 1.4.1
esquery: 1.6.0
jsdoc-type-pratt-parser: 5.4.0
@@ -10051,78 +10117,156 @@ snapshots:
'@esbuild/aix-ppc64@0.25.0':
optional: true
+ '@esbuild/aix-ppc64@0.25.12':
+ optional: true
+
'@esbuild/android-arm64@0.25.0':
optional: true
+ '@esbuild/android-arm64@0.25.12':
+ optional: true
+
'@esbuild/android-arm@0.25.0':
optional: true
+ '@esbuild/android-arm@0.25.12':
+ optional: true
+
'@esbuild/android-x64@0.25.0':
optional: true
+ '@esbuild/android-x64@0.25.12':
+ optional: true
+
'@esbuild/darwin-arm64@0.25.0':
optional: true
+ '@esbuild/darwin-arm64@0.25.12':
+ optional: true
+
'@esbuild/darwin-x64@0.25.0':
optional: true
+ '@esbuild/darwin-x64@0.25.12':
+ optional: true
+
'@esbuild/freebsd-arm64@0.25.0':
optional: true
+ '@esbuild/freebsd-arm64@0.25.12':
+ optional: true
+
'@esbuild/freebsd-x64@0.25.0':
optional: true
+ '@esbuild/freebsd-x64@0.25.12':
+ optional: true
+
'@esbuild/linux-arm64@0.25.0':
optional: true
+ '@esbuild/linux-arm64@0.25.12':
+ optional: true
+
'@esbuild/linux-arm@0.25.0':
optional: true
+ '@esbuild/linux-arm@0.25.12':
+ optional: true
+
'@esbuild/linux-ia32@0.25.0':
optional: true
+ '@esbuild/linux-ia32@0.25.12':
+ optional: true
+
'@esbuild/linux-loong64@0.25.0':
optional: true
+ '@esbuild/linux-loong64@0.25.12':
+ optional: true
+
'@esbuild/linux-mips64el@0.25.0':
optional: true
+ '@esbuild/linux-mips64el@0.25.12':
+ optional: true
+
'@esbuild/linux-ppc64@0.25.0':
optional: true
+ '@esbuild/linux-ppc64@0.25.12':
+ optional: true
+
'@esbuild/linux-riscv64@0.25.0':
optional: true
+ '@esbuild/linux-riscv64@0.25.12':
+ optional: true
+
'@esbuild/linux-s390x@0.25.0':
optional: true
+ '@esbuild/linux-s390x@0.25.12':
+ optional: true
+
'@esbuild/linux-x64@0.25.0':
optional: true
+ '@esbuild/linux-x64@0.25.12':
+ optional: true
+
'@esbuild/netbsd-arm64@0.25.0':
optional: true
+ '@esbuild/netbsd-arm64@0.25.12':
+ optional: true
+
'@esbuild/netbsd-x64@0.25.0':
optional: true
+ '@esbuild/netbsd-x64@0.25.12':
+ optional: true
+
'@esbuild/openbsd-arm64@0.25.0':
optional: true
+ '@esbuild/openbsd-arm64@0.25.12':
+ optional: true
+
'@esbuild/openbsd-x64@0.25.0':
optional: true
+ '@esbuild/openbsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.25.12':
+ optional: true
+
'@esbuild/sunos-x64@0.25.0':
optional: true
+ '@esbuild/sunos-x64@0.25.12':
+ optional: true
+
'@esbuild/win32-arm64@0.25.0':
optional: true
+ '@esbuild/win32-arm64@0.25.12':
+ optional: true
+
'@esbuild/win32-ia32@0.25.0':
optional: true
+ '@esbuild/win32-ia32@0.25.12':
+ optional: true
+
'@esbuild/win32-x64@0.25.0':
optional: true
+ '@esbuild/win32-x64@0.25.12':
+ optional: true
+
'@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.39.1(jiti@1.21.7))':
dependencies:
escape-string-regexp: 4.0.0
@@ -10141,9 +10285,9 @@ snapshots:
'@eslint-react/ast@1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@eslint-react/eff': 1.53.1
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
string-ts: 2.3.1
ts-pattern: 5.9.0
transitivePeerDependencies:
@@ -10158,10 +10302,10 @@ snapshots:
'@eslint-react/kit': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/shared': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/var': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
birecord: 0.1.1
ts-pattern: 5.9.0
transitivePeerDependencies:
@@ -10176,10 +10320,10 @@ snapshots:
'@eslint-react/eff': 1.53.1
'@eslint-react/kit': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/shared': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
eslint-plugin-react-debug: 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint-plugin-react-dom: 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
@@ -10196,7 +10340,7 @@ snapshots:
'@eslint-react/kit@1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@eslint-react/eff': 1.53.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
ts-pattern: 5.9.0
zod: 4.1.13
transitivePeerDependencies:
@@ -10208,7 +10352,7 @@ snapshots:
dependencies:
'@eslint-react/eff': 1.53.1
'@eslint-react/kit': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
ts-pattern: 5.9.0
zod: 4.1.13
transitivePeerDependencies:
@@ -10220,9 +10364,9 @@ snapshots:
dependencies:
'@eslint-react/ast': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/eff': 1.53.1
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
string-ts: 2.3.1
ts-pattern: 5.9.0
transitivePeerDependencies:
@@ -10349,7 +10493,7 @@ snapshots:
'@floating-ui/react': 0.26.28(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@react-aria/focus': 3.21.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@react-aria/interactions': 3.25.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
- '@tanstack/react-virtual': 3.13.12(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
+ '@tanstack/react-virtual': 3.13.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
@@ -10357,9 +10501,9 @@ snapshots:
dependencies:
react: 19.2.1
- '@hookform/resolvers@3.10.0(react-hook-form@7.67.0(react@19.2.1))':
+ '@hookform/resolvers@3.10.0(react-hook-form@7.68.0(react@19.2.1))':
dependencies:
- react-hook-form: 7.67.0(react@19.2.1)
+ react-hook-form: 7.68.0(react@19.2.1)
'@humanfs/core@0.19.1': {}
@@ -10552,39 +10696,6 @@ snapshots:
'@img/sharp-win32-x64@0.34.5':
optional: true
- '@inquirer/ansi@1.0.2':
- optional: true
-
- '@inquirer/confirm@5.1.21(@types/node@18.15.0)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@18.15.0)
- '@inquirer/type': 3.0.10(@types/node@18.15.0)
- optionalDependencies:
- '@types/node': 18.15.0
- optional: true
-
- '@inquirer/core@10.3.2(@types/node@18.15.0)':
- dependencies:
- '@inquirer/ansi': 1.0.2
- '@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@18.15.0)
- cli-width: 4.1.0
- mute-stream: 2.0.0
- signal-exit: 4.1.0
- wrap-ansi: 6.2.0
- yoctocolors-cjs: 2.1.3
- optionalDependencies:
- '@types/node': 18.15.0
- optional: true
-
- '@inquirer/figures@1.0.15':
- optional: true
-
- '@inquirer/type@3.0.10(@types/node@18.15.0)':
- optionalDependencies:
- '@types/node': 18.15.0
- optional: true
-
'@isaacs/balanced-match@4.0.1': {}
'@isaacs/brace-expansion@5.0.0':
@@ -11022,16 +11133,6 @@ snapshots:
outvariant: 1.4.3
strict-event-emitter: 0.5.1
- '@mswjs/interceptors@0.40.0':
- dependencies:
- '@open-draft/deferred-promise': 2.2.0
- '@open-draft/logger': 0.3.0
- '@open-draft/until': 2.1.0
- is-node-process: 1.2.0
- outvariant: 1.4.3
- strict-event-emitter: 0.5.1
- optional: true
-
'@napi-rs/wasm-runtime@1.1.0':
dependencies:
'@emnapi/core': 1.7.1
@@ -11197,90 +11298,90 @@ snapshots:
'@open-draft/until@2.1.0': {}
- '@oxc-resolver/binding-android-arm-eabi@11.14.2':
+ '@oxc-resolver/binding-android-arm-eabi@11.15.0':
optional: true
- '@oxc-resolver/binding-android-arm64@11.14.2':
+ '@oxc-resolver/binding-android-arm64@11.15.0':
optional: true
- '@oxc-resolver/binding-darwin-arm64@11.14.2':
+ '@oxc-resolver/binding-darwin-arm64@11.15.0':
optional: true
- '@oxc-resolver/binding-darwin-x64@11.14.2':
+ '@oxc-resolver/binding-darwin-x64@11.15.0':
optional: true
- '@oxc-resolver/binding-freebsd-x64@11.14.2':
+ '@oxc-resolver/binding-freebsd-x64@11.15.0':
optional: true
- '@oxc-resolver/binding-linux-arm-gnueabihf@11.14.2':
+ '@oxc-resolver/binding-linux-arm-gnueabihf@11.15.0':
optional: true
- '@oxc-resolver/binding-linux-arm-musleabihf@11.14.2':
+ '@oxc-resolver/binding-linux-arm-musleabihf@11.15.0':
optional: true
- '@oxc-resolver/binding-linux-arm64-gnu@11.14.2':
+ '@oxc-resolver/binding-linux-arm64-gnu@11.15.0':
optional: true
- '@oxc-resolver/binding-linux-arm64-musl@11.14.2':
+ '@oxc-resolver/binding-linux-arm64-musl@11.15.0':
optional: true
- '@oxc-resolver/binding-linux-ppc64-gnu@11.14.2':
+ '@oxc-resolver/binding-linux-ppc64-gnu@11.15.0':
optional: true
- '@oxc-resolver/binding-linux-riscv64-gnu@11.14.2':
+ '@oxc-resolver/binding-linux-riscv64-gnu@11.15.0':
optional: true
- '@oxc-resolver/binding-linux-riscv64-musl@11.14.2':
+ '@oxc-resolver/binding-linux-riscv64-musl@11.15.0':
optional: true
- '@oxc-resolver/binding-linux-s390x-gnu@11.14.2':
+ '@oxc-resolver/binding-linux-s390x-gnu@11.15.0':
optional: true
- '@oxc-resolver/binding-linux-x64-gnu@11.14.2':
+ '@oxc-resolver/binding-linux-x64-gnu@11.15.0':
optional: true
- '@oxc-resolver/binding-linux-x64-musl@11.14.2':
+ '@oxc-resolver/binding-linux-x64-musl@11.15.0':
optional: true
- '@oxc-resolver/binding-openharmony-arm64@11.14.2':
+ '@oxc-resolver/binding-openharmony-arm64@11.15.0':
optional: true
- '@oxc-resolver/binding-wasm32-wasi@11.14.2':
+ '@oxc-resolver/binding-wasm32-wasi@11.15.0':
dependencies:
'@napi-rs/wasm-runtime': 1.1.0
optional: true
- '@oxc-resolver/binding-win32-arm64-msvc@11.14.2':
+ '@oxc-resolver/binding-win32-arm64-msvc@11.15.0':
optional: true
- '@oxc-resolver/binding-win32-ia32-msvc@11.14.2':
+ '@oxc-resolver/binding-win32-ia32-msvc@11.15.0':
optional: true
- '@oxc-resolver/binding-win32-x64-msvc@11.14.2':
+ '@oxc-resolver/binding-win32-x64-msvc@11.15.0':
optional: true
- '@oxlint/darwin-arm64@1.31.0':
+ '@oxlint/darwin-arm64@1.32.0':
optional: true
- '@oxlint/darwin-x64@1.31.0':
+ '@oxlint/darwin-x64@1.32.0':
optional: true
- '@oxlint/linux-arm64-gnu@1.31.0':
+ '@oxlint/linux-arm64-gnu@1.32.0':
optional: true
- '@oxlint/linux-arm64-musl@1.31.0':
+ '@oxlint/linux-arm64-musl@1.32.0':
optional: true
- '@oxlint/linux-x64-gnu@1.31.0':
+ '@oxlint/linux-x64-gnu@1.32.0':
optional: true
- '@oxlint/linux-x64-musl@1.31.0':
+ '@oxlint/linux-x64-musl@1.32.0':
optional: true
- '@oxlint/win32-arm64@1.31.0':
+ '@oxlint/win32-arm64@1.32.0':
optional: true
- '@oxlint/win32-x64@1.31.0':
+ '@oxlint/win32-x64@1.32.0':
optional: true
'@parcel/watcher-android-arm64@2.5.1':
@@ -11351,6 +11452,10 @@ snapshots:
'@pkgr/core@0.2.9': {}
+ '@playwright/test@1.57.0':
+ dependencies:
+ playwright: 1.57.0
+
'@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@4.2.0)(webpack-hot-middleware@2.26.1)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))':
dependencies:
ansi-html: 0.0.9
@@ -11763,38 +11868,38 @@ snapshots:
dependencies:
'@sinonjs/commons': 3.0.1
- '@storybook/addon-docs@9.1.13(@types/react@19.2.7)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))':
+ '@storybook/addon-docs@9.1.13(@types/react@19.2.7)(storybook@9.1.13(@testing-library/dom@10.4.1))':
dependencies:
'@mdx-js/react': 3.1.1(@types/react@19.2.7)(react@19.2.1)
- '@storybook/csf-plugin': 9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))
+ '@storybook/csf-plugin': 9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1))
'@storybook/icons': 1.6.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
- '@storybook/react-dom-shim': 9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))
+ '@storybook/react-dom-shim': 9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1))
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
ts-dedent: 2.2.0
transitivePeerDependencies:
- '@types/react'
- '@storybook/addon-links@9.1.13(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))':
+ '@storybook/addon-links@9.1.13(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
optionalDependencies:
react: 19.2.1
- '@storybook/addon-onboarding@9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))':
+ '@storybook/addon-onboarding@9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1))':
dependencies:
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
- '@storybook/addon-themes@9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))':
+ '@storybook/addon-themes@9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1))':
dependencies:
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
ts-dedent: 2.2.0
- '@storybook/builder-webpack5@9.1.13(esbuild@0.25.0)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(typescript@5.9.3)(uglify-js@3.19.3)':
+ '@storybook/builder-webpack5@9.1.13(esbuild@0.25.0)(storybook@9.1.13(@testing-library/dom@10.4.1))(typescript@5.9.3)(uglify-js@3.19.3)':
dependencies:
- '@storybook/core-webpack': 9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))
+ '@storybook/core-webpack': 9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1))
case-sensitive-paths-webpack-plugin: 2.4.0
cjs-module-lexer: 1.4.3
css-loader: 6.11.0(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
@@ -11802,9 +11907,9 @@ snapshots:
fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.9.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
html-webpack-plugin: 5.6.5(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
magic-string: 0.30.21
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
style-loader: 3.3.4(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
- terser-webpack-plugin: 5.3.14(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
+ terser-webpack-plugin: 5.3.15(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
ts-dedent: 2.2.0
webpack: 5.103.0(esbuild@0.25.0)(uglify-js@3.19.3)
webpack-dev-middleware: 6.1.3(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
@@ -11819,14 +11924,14 @@ snapshots:
- uglify-js
- webpack-cli
- '@storybook/core-webpack@9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))':
+ '@storybook/core-webpack@9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1))':
dependencies:
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
ts-dedent: 2.2.0
- '@storybook/csf-plugin@9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))':
+ '@storybook/csf-plugin@9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1))':
dependencies:
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
unplugin: 1.16.1
'@storybook/global@5.0.0': {}
@@ -11836,7 +11941,7 @@ snapshots:
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
- '@storybook/nextjs@9.1.13(esbuild@0.25.0)(next@15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(type-fest@4.2.0)(typescript@5.9.3)(uglify-js@3.19.3)(webpack-hot-middleware@2.26.1)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))':
+ '@storybook/nextjs@9.1.13(esbuild@0.25.0)(next@15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0)(storybook@9.1.13(@testing-library/dom@10.4.1))(type-fest@4.2.0)(typescript@5.9.3)(uglify-js@3.19.3)(webpack-hot-middleware@2.26.1)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))':
dependencies:
'@babel/core': 7.28.5
'@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5)
@@ -11852,15 +11957,15 @@ snapshots:
'@babel/preset-typescript': 7.28.5(@babel/core@7.28.5)
'@babel/runtime': 7.28.4
'@pmmmwh/react-refresh-webpack-plugin': 0.5.17(react-refresh@0.14.2)(type-fest@4.2.0)(webpack-hot-middleware@2.26.1)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
- '@storybook/builder-webpack5': 9.1.13(esbuild@0.25.0)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(typescript@5.9.3)(uglify-js@3.19.3)
- '@storybook/preset-react-webpack': 9.1.13(esbuild@0.25.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(typescript@5.9.3)(uglify-js@3.19.3)
- '@storybook/react': 9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(typescript@5.9.3)
+ '@storybook/builder-webpack5': 9.1.13(esbuild@0.25.0)(storybook@9.1.13(@testing-library/dom@10.4.1))(typescript@5.9.3)(uglify-js@3.19.3)
+ '@storybook/preset-react-webpack': 9.1.13(esbuild@0.25.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1))(typescript@5.9.3)(uglify-js@3.19.3)
+ '@storybook/react': 9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1))(typescript@5.9.3)
'@types/semver': 7.7.1
babel-loader: 9.2.1(@babel/core@7.28.5)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
css-loader: 6.11.0(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
image-size: 2.0.2
loader-utils: 3.3.1
- next: 15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)
+ next: 15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0)
node-polyfill-webpack-plugin: 2.0.1(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
postcss: 8.5.6
postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
@@ -11868,9 +11973,9 @@ snapshots:
react-dom: 19.2.1(react@19.2.1)
react-refresh: 0.14.2
resolve-url-loader: 5.0.0
- sass-loader: 16.0.6(sass@1.94.2)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
+ sass-loader: 16.0.6(sass@1.95.0)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
semver: 7.7.3
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
style-loader: 3.3.4(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
styled-jsx: 5.1.7(@babel/core@7.28.5)(react@19.2.1)
tsconfig-paths: 4.2.0
@@ -11896,9 +12001,9 @@ snapshots:
- webpack-hot-middleware
- webpack-plugin-serve
- '@storybook/preset-react-webpack@9.1.13(esbuild@0.25.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(typescript@5.9.3)(uglify-js@3.19.3)':
+ '@storybook/preset-react-webpack@9.1.13(esbuild@0.25.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1))(typescript@5.9.3)(uglify-js@3.19.3)':
dependencies:
- '@storybook/core-webpack': 9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))
+ '@storybook/core-webpack': 9.1.13(storybook@9.1.13(@testing-library/dom@10.4.1))
'@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.9.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
'@types/semver': 7.7.1
find-up: 7.0.0
@@ -11908,7 +12013,7 @@ snapshots:
react-dom: 19.2.1(react@19.2.1)
resolve: 1.22.11
semver: 7.7.3
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
tsconfig-paths: 4.2.0
webpack: 5.103.0(esbuild@0.25.0)(uglify-js@3.19.3)
optionalDependencies:
@@ -11934,26 +12039,26 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@storybook/react-dom-shim@9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))':
+ '@storybook/react-dom-shim@9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1))':
dependencies:
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
- '@storybook/react@9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(typescript@5.9.3)':
+ '@storybook/react@9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1))(typescript@5.9.3)':
dependencies:
'@storybook/global': 5.0.0
- '@storybook/react-dom-shim': 9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))
+ '@storybook/react-dom-shim': 9.1.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@9.1.13(@testing-library/dom@10.4.1))
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
optionalDependencies:
typescript: 5.9.3
'@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@1.21.7))':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@1.21.7))
- '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/types': 8.49.0
eslint: 9.39.1(jiti@1.21.7)
eslint-visitor-keys: 4.2.1
espree: 10.4.0
@@ -11988,7 +12093,7 @@ snapshots:
'@tanstack/devtools-event-client@0.3.5': {}
- '@tanstack/form-core@1.27.0':
+ '@tanstack/form-core@1.27.1':
dependencies:
'@tanstack/devtools-event-client': 0.3.5
'@tanstack/pacer': 0.15.4
@@ -11999,27 +12104,27 @@ snapshots:
'@tanstack/devtools-event-client': 0.3.5
'@tanstack/store': 0.7.7
- '@tanstack/query-core@5.90.11': {}
+ '@tanstack/query-core@5.90.12': {}
'@tanstack/query-devtools@5.91.1': {}
- '@tanstack/react-form@1.27.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
+ '@tanstack/react-form@1.27.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
- '@tanstack/form-core': 1.27.0
+ '@tanstack/form-core': 1.27.1
'@tanstack/react-store': 0.8.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
react: 19.2.1
transitivePeerDependencies:
- react-dom
- '@tanstack/react-query-devtools@5.91.1(@tanstack/react-query@5.90.11(react@19.2.1))(react@19.2.1)':
+ '@tanstack/react-query-devtools@5.91.1(@tanstack/react-query@5.90.12(react@19.2.1))(react@19.2.1)':
dependencies:
'@tanstack/query-devtools': 5.91.1
- '@tanstack/react-query': 5.90.11(react@19.2.1)
+ '@tanstack/react-query': 5.90.12(react@19.2.1)
react: 19.2.1
- '@tanstack/react-query@5.90.11(react@19.2.1)':
+ '@tanstack/react-query@5.90.12(react@19.2.1)':
dependencies:
- '@tanstack/query-core': 5.90.11
+ '@tanstack/query-core': 5.90.12
react: 19.2.1
'@tanstack/react-store@0.8.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
@@ -12029,9 +12134,9 @@ snapshots:
react-dom: 19.2.1(react@19.2.1)
use-sync-external-store: 1.6.0(react@19.2.1)
- '@tanstack/react-virtual@3.13.12(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
+ '@tanstack/react-virtual@3.13.13(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
- '@tanstack/virtual-core': 3.13.12
+ '@tanstack/virtual-core': 3.13.13
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
@@ -12039,7 +12144,7 @@ snapshots:
'@tanstack/store@0.8.0': {}
- '@tanstack/virtual-core@3.13.12': {}
+ '@tanstack/virtual-core@3.13.13': {}
'@testing-library/dom@10.4.1':
dependencies:
@@ -12340,7 +12445,7 @@ snapshots:
'@types/node@18.15.0': {}
- '@types/node@20.19.25':
+ '@types/node@20.19.26':
dependencies:
undici-types: 6.21.0
@@ -12392,9 +12497,6 @@ snapshots:
'@types/stack-utils@2.0.3': {}
- '@types/statuses@2.0.6':
- optional: true
-
'@types/trusted-types@2.0.7': {}
'@types/unist@2.0.11': {}
@@ -12413,16 +12515,15 @@ snapshots:
'@types/zen-observable@0.8.3': {}
- '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.48.1
+ '@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.49.0
eslint: 9.39.1(jiti@1.21.7)
- graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -12430,41 +12531,41 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.48.1
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.49.0
debug: 4.4.3
eslint: 9.39.1(jiti@1.21.7)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.48.1(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.49.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.48.1':
+ '@typescript-eslint/scope-manager@8.49.0':
dependencies:
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/visitor-keys': 8.48.1
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/visitor-keys': 8.49.0
- '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.49.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
debug: 4.4.3
eslint: 9.39.1(jiti@1.21.7)
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -12472,14 +12573,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.48.1': {}
+ '@typescript-eslint/types@8.49.0': {}
- '@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.49.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.48.1(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/visitor-keys': 8.48.1
+ '@typescript-eslint/project-service': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/visitor-keys': 8.49.0
debug: 4.4.3
minimatch: 9.0.5
semver: 7.7.3
@@ -12489,59 +12590,59 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@1.21.7))
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.48.1':
+ '@typescript-eslint/visitor-keys@8.49.0':
dependencies:
- '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/types': 8.49.0
eslint-visitor-keys: 4.2.1
- '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251204.1':
+ '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251209.1':
optional: true
- '@typescript/native-preview-darwin-x64@7.0.0-dev.20251204.1':
+ '@typescript/native-preview-darwin-x64@7.0.0-dev.20251209.1':
optional: true
- '@typescript/native-preview-linux-arm64@7.0.0-dev.20251204.1':
+ '@typescript/native-preview-linux-arm64@7.0.0-dev.20251209.1':
optional: true
- '@typescript/native-preview-linux-arm@7.0.0-dev.20251204.1':
+ '@typescript/native-preview-linux-arm@7.0.0-dev.20251209.1':
optional: true
- '@typescript/native-preview-linux-x64@7.0.0-dev.20251204.1':
+ '@typescript/native-preview-linux-x64@7.0.0-dev.20251209.1':
optional: true
- '@typescript/native-preview-win32-arm64@7.0.0-dev.20251204.1':
+ '@typescript/native-preview-win32-arm64@7.0.0-dev.20251209.1':
optional: true
- '@typescript/native-preview-win32-x64@7.0.0-dev.20251204.1':
+ '@typescript/native-preview-win32-x64@7.0.0-dev.20251209.1':
optional: true
- '@typescript/native-preview@7.0.0-dev.20251204.1':
+ '@typescript/native-preview@7.0.0-dev.20251209.1':
optionalDependencies:
- '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20251204.1
- '@typescript/native-preview-darwin-x64': 7.0.0-dev.20251204.1
- '@typescript/native-preview-linux-arm': 7.0.0-dev.20251204.1
- '@typescript/native-preview-linux-arm64': 7.0.0-dev.20251204.1
- '@typescript/native-preview-linux-x64': 7.0.0-dev.20251204.1
- '@typescript/native-preview-win32-arm64': 7.0.0-dev.20251204.1
- '@typescript/native-preview-win32-x64': 7.0.0-dev.20251204.1
+ '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20251209.1
+ '@typescript/native-preview-darwin-x64': 7.0.0-dev.20251209.1
+ '@typescript/native-preview-linux-arm': 7.0.0-dev.20251209.1
+ '@typescript/native-preview-linux-arm64': 7.0.0-dev.20251209.1
+ '@typescript/native-preview-linux-x64': 7.0.0-dev.20251209.1
+ '@typescript/native-preview-win32-arm64': 7.0.0-dev.20251209.1
+ '@typescript/native-preview-win32-x64': 7.0.0-dev.20251209.1
'@ungap/structured-clone@1.3.0': {}
- '@vitest/eslint-plugin@1.5.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
+ '@vitest/eslint-plugin@1.5.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
optionalDependencies:
typescript: 5.9.3
@@ -12556,13 +12657,11 @@ snapshots:
chai: 5.3.3
tinyrainbow: 2.0.0
- '@vitest/mocker@3.2.4(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))':
+ '@vitest/mocker@3.2.4':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.21
- optionalDependencies:
- msw: 2.12.4(@types/node@18.15.0)(typescript@5.9.3)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -12842,8 +12941,8 @@ snapshots:
autoprefixer@10.4.22(postcss@8.5.6):
dependencies:
- browserslist: 4.28.0
- caniuse-lite: 1.0.30001757
+ browserslist: 4.28.1
+ caniuse-lite: 1.0.30001760
fraction.js: 5.3.4
normalize-range: 0.1.2
picocolors: 1.1.1
@@ -12959,7 +13058,7 @@ snapshots:
base64-js@1.5.1: {}
- baseline-browser-mapping@2.8.32: {}
+ baseline-browser-mapping@2.9.5: {}
before-after-hook@3.0.2: {}
@@ -13051,13 +13150,13 @@ snapshots:
dependencies:
pako: 1.0.11
- browserslist@4.28.0:
+ browserslist@4.28.1:
dependencies:
- baseline-browser-mapping: 2.8.32
- caniuse-lite: 1.0.30001757
- electron-to-chromium: 1.5.263
+ baseline-browser-mapping: 2.9.5
+ caniuse-lite: 1.0.30001760
+ electron-to-chromium: 1.5.267
node-releases: 2.0.27
- update-browserslist-db: 1.1.4(browserslist@4.28.0)
+ update-browserslist-db: 1.2.2(browserslist@4.28.1)
bser@2.1.1:
dependencies:
@@ -13113,9 +13212,7 @@ snapshots:
camelcase@6.3.0: {}
- caniuse-lite@1.0.30001757: {}
-
- caniuse-lite@1.0.30001759: {}
+ caniuse-lite@1.0.30001760: {}
canvas@3.2.0:
dependencies:
@@ -13248,9 +13345,6 @@ snapshots:
slice-ansi: 5.0.0
string-width: 4.2.3
- cli-width@4.1.0:
- optional: true
-
client-only@0.0.1: {}
cliui@8.0.1:
@@ -13351,16 +13445,13 @@ snapshots:
convert-source-map@2.0.0: {}
- cookie@1.1.1:
- optional: true
-
copy-to-clipboard@3.3.3:
dependencies:
toggle-selection: 1.0.6
core-js-compat@3.47.0:
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
core-js-pure@3.47.0: {}
@@ -13801,7 +13892,7 @@ snapshots:
optionalDependencies:
'@types/trusted-types': 2.0.7
- dompurify@3.3.0:
+ dompurify@3.3.1:
optionalDependencies:
'@types/trusted-types': 2.0.7
@@ -13818,6 +13909,8 @@ snapshots:
dotenv@16.6.1: {}
+ dotenv@17.2.3: {}
+
duplexer@0.1.2: {}
echarts-for-react@3.0.5(echarts@5.6.0)(react@19.2.1):
@@ -13836,7 +13929,7 @@ snapshots:
dependencies:
jake: 10.9.4
- electron-to-chromium@1.5.263: {}
+ electron-to-chromium@1.5.267: {}
elkjs@0.9.3: {}
@@ -13944,6 +14037,35 @@ snapshots:
'@esbuild/win32-ia32': 0.25.0
'@esbuild/win32-x64': 0.25.0
+ esbuild@0.25.12:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.12
+ '@esbuild/android-arm': 0.25.12
+ '@esbuild/android-arm64': 0.25.12
+ '@esbuild/android-x64': 0.25.12
+ '@esbuild/darwin-arm64': 0.25.12
+ '@esbuild/darwin-x64': 0.25.12
+ '@esbuild/freebsd-arm64': 0.25.12
+ '@esbuild/freebsd-x64': 0.25.12
+ '@esbuild/linux-arm': 0.25.12
+ '@esbuild/linux-arm64': 0.25.12
+ '@esbuild/linux-ia32': 0.25.12
+ '@esbuild/linux-loong64': 0.25.12
+ '@esbuild/linux-mips64el': 0.25.12
+ '@esbuild/linux-ppc64': 0.25.12
+ '@esbuild/linux-riscv64': 0.25.12
+ '@esbuild/linux-s390x': 0.25.12
+ '@esbuild/linux-x64': 0.25.12
+ '@esbuild/netbsd-arm64': 0.25.12
+ '@esbuild/netbsd-x64': 0.25.12
+ '@esbuild/openbsd-arm64': 0.25.12
+ '@esbuild/openbsd-x64': 0.25.12
+ '@esbuild/openharmony-arm64': 0.25.12
+ '@esbuild/sunos-x64': 0.25.12
+ '@esbuild/win32-arm64': 0.25.12
+ '@esbuild/win32-ia32': 0.25.12
+ '@esbuild/win32-x64': 0.25.12
+
escalade@3.2.0: {}
escape-string-regexp@1.0.5: {}
@@ -13973,11 +14095,11 @@ snapshots:
dependencies:
pathe: 2.0.3
- eslint-json-compat-utils@0.2.1(eslint@9.39.1(jiti@1.21.7))(jsonc-eslint-parser@2.4.1):
+ eslint-json-compat-utils@0.2.1(eslint@9.39.1(jiti@1.21.7))(jsonc-eslint-parser@2.4.2):
dependencies:
eslint: 9.39.1(jiti@1.21.7)
esquery: 1.6.0
- jsonc-eslint-parser: 2.4.1
+ jsonc-eslint-parser: 2.4.2
eslint-merge-processors@2.0.0(eslint@9.39.1(jiti@1.21.7)):
dependencies:
@@ -14002,7 +14124,7 @@ snapshots:
eslint-plugin-import-lite@0.3.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@1.21.7))
- '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/types': 8.49.0
eslint: 9.39.1(jiti@1.21.7)
optionalDependencies:
typescript: 5.9.3
@@ -14030,10 +14152,10 @@ snapshots:
diff-sequences: 27.5.1
eslint: 9.39.1(jiti@1.21.7)
eslint-compat-utils: 0.6.5(eslint@9.39.1(jiti@1.21.7))
- eslint-json-compat-utils: 0.2.1(eslint@9.39.1(jiti@1.21.7))(jsonc-eslint-parser@2.4.1)
+ eslint-json-compat-utils: 0.2.1(eslint@9.39.1(jiti@1.21.7))(jsonc-eslint-parser@2.4.2)
espree: 10.4.0
graphemer: 1.4.0
- jsonc-eslint-parser: 2.4.1
+ jsonc-eslint-parser: 2.4.2
natural-compare: 1.4.0
synckit: 0.11.11
transitivePeerDependencies:
@@ -14056,29 +14178,30 @@ snapshots:
eslint-plugin-no-only-tests@3.3.0: {}
- eslint-plugin-oxlint@1.31.0:
+ eslint-plugin-oxlint@1.32.0:
dependencies:
jsonc-parser: 3.3.1
eslint-plugin-perfectionist@4.15.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
natural-orderby: 5.0.0
transitivePeerDependencies:
- supports-color
- typescript
- eslint-plugin-pnpm@1.3.0(eslint@9.39.1(jiti@1.21.7)):
+ eslint-plugin-pnpm@1.4.2(eslint@9.39.1(jiti@1.21.7)):
dependencies:
empathic: 2.0.0
eslint: 9.39.1(jiti@1.21.7)
- jsonc-eslint-parser: 2.4.1
+ jsonc-eslint-parser: 2.4.2
pathe: 2.0.3
- pnpm-workspace-yaml: 1.3.0
+ pnpm-workspace-yaml: 1.4.2
tinyglobby: 0.2.15
- yaml-eslint-parser: 1.3.1
+ yaml: 2.8.2
+ yaml-eslint-parser: 1.3.2
eslint-plugin-react-debug@1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3):
dependencies:
@@ -14088,10 +14211,10 @@ snapshots:
'@eslint-react/kit': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/shared': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/var': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
string-ts: 2.3.1
ts-pattern: 5.9.0
@@ -14108,9 +14231,9 @@ snapshots:
'@eslint-react/kit': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/shared': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/var': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
compare-versions: 6.1.1
eslint: 9.39.1(jiti@1.21.7)
string-ts: 2.3.1
@@ -14128,10 +14251,10 @@ snapshots:
'@eslint-react/kit': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/shared': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/var': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
string-ts: 2.3.1
ts-pattern: 5.9.0
@@ -14152,10 +14275,10 @@ snapshots:
'@eslint-react/kit': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/shared': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/var': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
string-ts: 2.3.1
ts-pattern: 5.9.0
@@ -14176,9 +14299,9 @@ snapshots:
'@eslint-react/kit': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/shared': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/var': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
string-ts: 2.3.1
ts-pattern: 5.9.0
@@ -14195,10 +14318,10 @@ snapshots:
'@eslint-react/kit': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/shared': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
'@eslint-react/var': 1.53.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
compare-versions: 6.1.1
eslint: 9.39.1(jiti@1.21.7)
is-immutable-type: 5.0.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
@@ -14235,11 +14358,11 @@ snapshots:
semver: 7.7.2
typescript: 5.9.3
- eslint-plugin-storybook@9.1.16(eslint@9.39.1(jiti@1.21.7))(storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)))(typescript@5.9.3):
+ eslint-plugin-storybook@9.1.16(eslint@9.39.1(jiti@1.21.7))(storybook@9.1.13(@testing-library/dom@10.4.1))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
- storybook: 9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ storybook: 9.1.13(@testing-library/dom@10.4.1)
transitivePeerDependencies:
- supports-color
- typescript
@@ -14256,7 +14379,7 @@ snapshots:
eslint: 9.39.1(jiti@1.21.7)
eslint-compat-utils: 0.6.5(eslint@9.39.1(jiti@1.21.7))
lodash: 4.17.21
- toml-eslint-parser: 0.10.0
+ toml-eslint-parser: 0.10.1
transitivePeerDependencies:
- supports-color
@@ -14282,13 +14405,13 @@ snapshots:
semver: 7.7.3
strip-indent: 4.1.1
- eslint-plugin-unused-imports@4.3.0(@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7)):
+ eslint-plugin-unused-imports@4.3.0(@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7)):
dependencies:
eslint: 9.39.1(jiti@1.21.7)
optionalDependencies:
- '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- eslint-plugin-vue@10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@1.21.7)))(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@1.21.7))):
+ eslint-plugin-vue@10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@1.21.7)))(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@1.21.7))):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@1.21.7))
eslint: 9.39.1(jiti@1.21.7)
@@ -14300,7 +14423,7 @@ snapshots:
xml-name-validator: 4.0.0
optionalDependencies:
'@stylistic/eslint-plugin': 5.6.1(eslint@9.39.1(jiti@1.21.7))
- '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint-plugin-yml@1.19.0(eslint@9.39.1(jiti@1.21.7)):
dependencies:
@@ -14310,7 +14433,7 @@ snapshots:
eslint: 9.39.1(jiti@1.21.7)
eslint-compat-utils: 0.6.5(eslint@9.39.1(jiti@1.21.7))
natural-compare: 1.4.0
- yaml-eslint-parser: 1.3.1
+ yaml-eslint-parser: 1.3.2
transitivePeerDependencies:
- supports-color
@@ -14752,9 +14875,6 @@ snapshots:
graphemer@1.4.0: {}
- graphql@16.12.0:
- optional: true
-
gzip-size@6.0.0:
dependencies:
duplexer: 0.1.2
@@ -14763,7 +14883,7 @@ snapshots:
happy-dom@20.0.11:
dependencies:
- '@types/node': 20.19.25
+ '@types/node': 20.19.26
'@types/whatwg-mimetype': 3.0.2
whatwg-mimetype: 3.0.0
@@ -14839,7 +14959,7 @@ snapshots:
'@types/unist': 3.0.3
'@ungap/structured-clone': 1.3.0
hast-util-from-parse5: 8.0.3
- hast-util-to-parse5: 8.0.0
+ hast-util-to-parse5: 8.0.1
html-void-elements: 3.0.0
mdast-util-to-hast: 13.2.1
parse5: 7.3.0
@@ -14890,12 +15010,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- hast-util-to-parse5@8.0.0:
+ hast-util-to-parse5@8.0.1:
dependencies:
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
devlop: 1.1.0
- property-information: 6.5.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
web-namespaces: 2.0.1
zwitch: 2.0.4
@@ -14929,9 +15049,6 @@ snapshots:
he@1.2.0: {}
- headers-polyfill@4.0.3:
- optional: true
-
highlight.js@10.7.3: {}
highlightjs-vue@1.0.0: {}
@@ -15124,7 +15241,7 @@ snapshots:
is-immutable-type@5.0.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
ts-api-utils: 2.1.0(typescript@5.9.3)
ts-declaration-location: 1.0.7(typescript@5.9.3)
@@ -15583,7 +15700,7 @@ snapshots:
json5@2.2.3: {}
- jsonc-eslint-parser@2.4.1:
+ jsonc-eslint-parser@2.4.2:
dependencies:
acorn: 8.15.0
eslint-visitor-keys: 3.4.3
@@ -15604,7 +15721,7 @@ snapshots:
jsx-ast-utils-x@0.1.0: {}
- katex@0.16.25:
+ katex@0.16.27:
dependencies:
commander: 8.3.0
@@ -15618,7 +15735,7 @@ snapshots:
kleur@4.1.5: {}
- knip@5.71.0(@types/node@18.15.0)(typescript@5.9.3):
+ knip@5.72.0(@types/node@18.15.0)(typescript@5.9.3):
dependencies:
'@nodelib/fs.walk': 1.2.8
'@types/node': 18.15.0
@@ -15627,7 +15744,7 @@ snapshots:
jiti: 2.6.1
js-yaml: 4.1.1
minimist: 1.2.8
- oxc-resolver: 11.14.2
+ oxc-resolver: 11.15.0
picocolors: 1.1.1
picomatch: 4.0.3
smol-toml: 1.5.2
@@ -15635,7 +15752,7 @@ snapshots:
typescript: 5.9.3
zod: 4.1.13
- ky@1.14.0: {}
+ ky@1.14.1: {}
lamejs@1.2.1:
dependencies:
@@ -16030,8 +16147,8 @@ snapshots:
d3-sankey: 0.12.3
dagre-d3-es: 7.0.11
dayjs: 1.11.19
- dompurify: 3.3.0
- katex: 0.16.25
+ dompurify: 3.3.1
+ katex: 0.16.27
khroma: 2.1.0
lodash-es: 4.17.21
marked: 15.0.12
@@ -16128,7 +16245,7 @@ snapshots:
dependencies:
'@types/katex': 0.16.7
devlop: 1.1.0
- katex: 0.16.25
+ katex: 0.16.27
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
@@ -16396,35 +16513,6 @@ snapshots:
ms@2.1.3: {}
- msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3):
- dependencies:
- '@inquirer/confirm': 5.1.21(@types/node@18.15.0)
- '@mswjs/interceptors': 0.40.0
- '@open-draft/deferred-promise': 2.2.0
- '@types/statuses': 2.0.6
- cookie: 1.1.1
- graphql: 16.12.0
- headers-polyfill: 4.0.3
- is-node-process: 1.2.0
- outvariant: 1.4.3
- path-to-regexp: 6.3.0
- picocolors: 1.1.1
- rettime: 0.7.0
- statuses: 2.0.2
- strict-event-emitter: 0.5.1
- tough-cookie: 6.0.0
- type-fest: 5.3.1
- until-async: 3.0.2
- yargs: 17.7.2
- optionalDependencies:
- typescript: 5.9.3
- transitivePeerDependencies:
- - '@types/node'
- optional: true
-
- mute-stream@2.0.0:
- optional: true
-
mz@2.7.0:
dependencies:
any-promise: 1.3.0
@@ -16444,13 +16532,13 @@ snapshots:
neo-async@2.6.2: {}
- next-pwa@5.6.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(esbuild@0.25.0)(next@15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2))(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3)):
+ next-pwa@5.6.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(esbuild@0.25.0)(next@15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0))(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3)):
dependencies:
babel-loader: 8.4.1(@babel/core@7.28.5)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
clean-webpack-plugin: 4.0.0(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
globby: 11.1.0
- next: 15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)
- terser-webpack-plugin: 5.3.14(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
+ next: 15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0)
+ terser-webpack-plugin: 5.3.15(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
workbox-window: 6.6.0
transitivePeerDependencies:
@@ -16467,11 +16555,11 @@ snapshots:
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
- next@15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2):
+ next@15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0):
dependencies:
'@next/env': 15.5.7
'@swc/helpers': 0.5.15
- caniuse-lite: 1.0.30001759
+ caniuse-lite: 1.0.30001760
postcss: 8.4.31
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
@@ -16485,7 +16573,8 @@ snapshots:
'@next/swc-linux-x64-musl': 15.5.7
'@next/swc-win32-arm64-msvc': 15.5.7
'@next/swc-win32-x64-msvc': 15.5.7
- sass: 1.94.2
+ '@playwright/test': 1.57.0
+ sass: 1.95.0
sharp: 0.34.5
transitivePeerDependencies:
- '@babel/core'
@@ -16612,39 +16701,39 @@ snapshots:
outvariant@1.4.3: {}
- oxc-resolver@11.14.2:
+ oxc-resolver@11.15.0:
optionalDependencies:
- '@oxc-resolver/binding-android-arm-eabi': 11.14.2
- '@oxc-resolver/binding-android-arm64': 11.14.2
- '@oxc-resolver/binding-darwin-arm64': 11.14.2
- '@oxc-resolver/binding-darwin-x64': 11.14.2
- '@oxc-resolver/binding-freebsd-x64': 11.14.2
- '@oxc-resolver/binding-linux-arm-gnueabihf': 11.14.2
- '@oxc-resolver/binding-linux-arm-musleabihf': 11.14.2
- '@oxc-resolver/binding-linux-arm64-gnu': 11.14.2
- '@oxc-resolver/binding-linux-arm64-musl': 11.14.2
- '@oxc-resolver/binding-linux-ppc64-gnu': 11.14.2
- '@oxc-resolver/binding-linux-riscv64-gnu': 11.14.2
- '@oxc-resolver/binding-linux-riscv64-musl': 11.14.2
- '@oxc-resolver/binding-linux-s390x-gnu': 11.14.2
- '@oxc-resolver/binding-linux-x64-gnu': 11.14.2
- '@oxc-resolver/binding-linux-x64-musl': 11.14.2
- '@oxc-resolver/binding-openharmony-arm64': 11.14.2
- '@oxc-resolver/binding-wasm32-wasi': 11.14.2
- '@oxc-resolver/binding-win32-arm64-msvc': 11.14.2
- '@oxc-resolver/binding-win32-ia32-msvc': 11.14.2
- '@oxc-resolver/binding-win32-x64-msvc': 11.14.2
+ '@oxc-resolver/binding-android-arm-eabi': 11.15.0
+ '@oxc-resolver/binding-android-arm64': 11.15.0
+ '@oxc-resolver/binding-darwin-arm64': 11.15.0
+ '@oxc-resolver/binding-darwin-x64': 11.15.0
+ '@oxc-resolver/binding-freebsd-x64': 11.15.0
+ '@oxc-resolver/binding-linux-arm-gnueabihf': 11.15.0
+ '@oxc-resolver/binding-linux-arm-musleabihf': 11.15.0
+ '@oxc-resolver/binding-linux-arm64-gnu': 11.15.0
+ '@oxc-resolver/binding-linux-arm64-musl': 11.15.0
+ '@oxc-resolver/binding-linux-ppc64-gnu': 11.15.0
+ '@oxc-resolver/binding-linux-riscv64-gnu': 11.15.0
+ '@oxc-resolver/binding-linux-riscv64-musl': 11.15.0
+ '@oxc-resolver/binding-linux-s390x-gnu': 11.15.0
+ '@oxc-resolver/binding-linux-x64-gnu': 11.15.0
+ '@oxc-resolver/binding-linux-x64-musl': 11.15.0
+ '@oxc-resolver/binding-openharmony-arm64': 11.15.0
+ '@oxc-resolver/binding-wasm32-wasi': 11.15.0
+ '@oxc-resolver/binding-win32-arm64-msvc': 11.15.0
+ '@oxc-resolver/binding-win32-ia32-msvc': 11.15.0
+ '@oxc-resolver/binding-win32-x64-msvc': 11.15.0
- oxlint@1.31.0:
+ oxlint@1.32.0:
optionalDependencies:
- '@oxlint/darwin-arm64': 1.31.0
- '@oxlint/darwin-x64': 1.31.0
- '@oxlint/linux-arm64-gnu': 1.31.0
- '@oxlint/linux-arm64-musl': 1.31.0
- '@oxlint/linux-x64-gnu': 1.31.0
- '@oxlint/linux-x64-musl': 1.31.0
- '@oxlint/win32-arm64': 1.31.0
- '@oxlint/win32-x64': 1.31.0
+ '@oxlint/darwin-arm64': 1.32.0
+ '@oxlint/darwin-x64': 1.32.0
+ '@oxlint/linux-arm64-gnu': 1.32.0
+ '@oxlint/linux-arm64-musl': 1.32.0
+ '@oxlint/linux-x64-gnu': 1.32.0
+ '@oxlint/linux-x64-musl': 1.32.0
+ '@oxlint/win32-arm64': 1.32.0
+ '@oxlint/win32-x64': 1.32.0
p-cancelable@2.1.1: {}
@@ -16760,9 +16849,6 @@ snapshots:
path-parse@1.0.7: {}
- path-to-regexp@6.3.0:
- optional: true
-
path-type@4.0.0: {}
path2d@0.2.2:
@@ -16838,7 +16924,7 @@ snapshots:
pluralize@8.0.0: {}
- pnpm-workspace-yaml@1.3.0:
+ pnpm-workspace-yaml@1.4.2:
dependencies:
yaml: 2.8.2
@@ -17005,8 +17091,6 @@ snapshots:
dependencies:
xtend: 4.0.2
- property-information@6.5.0: {}
-
property-information@7.1.0: {}
public-encrypt@4.0.3:
@@ -17119,7 +17203,7 @@ snapshots:
react-fast-compare@3.2.2: {}
- react-hook-form@7.67.0(react@19.2.1):
+ react-hook-form@7.68.0(react@19.2.1):
dependencies:
react: 19.2.1
@@ -17209,7 +17293,7 @@ snapshots:
react-draggable: 4.4.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
tslib: 2.6.2
- react-scan@0.4.3(@types/react@19.2.7)(next@15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(rollup@2.79.2):
+ react-scan@0.4.3(@types/react@19.2.7)(next@15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(rollup@2.79.2):
dependencies:
'@babel/core': 7.28.5
'@babel/generator': 7.28.5
@@ -17219,9 +17303,9 @@ snapshots:
'@pivanov/utils': 0.0.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@preact/signals': 1.3.2(preact@10.28.0)
'@rollup/pluginutils': 5.3.0(rollup@2.79.2)
- '@types/node': 20.19.25
+ '@types/node': 20.19.26
bippy: 0.3.34(@types/react@19.2.7)(react@19.2.1)
- esbuild: 0.25.0
+ esbuild: 0.25.12
estree-walker: 3.0.3
kleur: 4.1.5
mri: 1.2.0
@@ -17231,7 +17315,7 @@ snapshots:
react-dom: 19.2.1(react@19.2.1)
tsx: 4.21.0
optionalDependencies:
- next: 15.5.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)
+ next: 15.5.7(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.95.0)
unplugin: 2.1.0
transitivePeerDependencies:
- '@types/react'
@@ -17428,7 +17512,7 @@ snapshots:
'@types/katex': 0.16.7
hast-util-from-html-isomorphic: 2.0.0
hast-util-to-text: 4.0.2
- katex: 0.16.25
+ katex: 0.16.27
unist-util-visit-parents: 6.0.2
vfile: 6.0.3
@@ -17555,9 +17639,6 @@ snapshots:
onetime: 7.0.0
signal-exit: 4.1.0
- rettime@0.7.0:
- optional: true
-
reusify@1.1.0: {}
rfdc@1.4.1: {}
@@ -17613,14 +17694,14 @@ snapshots:
safe-buffer@5.2.1: {}
- sass-loader@16.0.6(sass@1.94.2)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3)):
+ sass-loader@16.0.6(sass@1.95.0)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3)):
dependencies:
neo-async: 2.6.2
optionalDependencies:
- sass: 1.94.2
+ sass: 1.95.0
webpack: 5.103.0(esbuild@0.25.0)(uglify-js@3.19.3)
- sass@1.94.2:
+ sass@1.95.0:
dependencies:
chokidar: 4.0.3
immutable: 5.1.4
@@ -17836,16 +17917,13 @@ snapshots:
state-local@1.0.7: {}
- statuses@2.0.2:
- optional: true
-
- storybook@9.1.13(@testing-library/dom@10.4.1)(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3)):
+ storybook@9.1.13(@testing-library/dom@10.4.1):
dependencies:
'@storybook/global': 5.0.0
'@testing-library/jest-dom': 6.9.1
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(msw@2.12.4(@types/node@18.15.0)(typescript@5.9.3))
+ '@vitest/mocker': 3.2.4
'@vitest/spy': 3.2.4
better-opn: 3.0.2
esbuild: 0.25.0
@@ -18000,9 +18078,6 @@ snapshots:
tabbable@6.3.0: {}
- tagged-tag@1.0.0:
- optional: true
-
tailwind-merge@2.6.0: {}
tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.2):
@@ -18061,7 +18136,7 @@ snapshots:
type-fest: 0.16.0
unique-string: 2.0.0
- terser-webpack-plugin@5.3.14(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3)):
+ terser-webpack-plugin@5.3.15(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3)):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
@@ -18133,17 +18208,12 @@ snapshots:
toggle-selection@1.0.6: {}
- toml-eslint-parser@0.10.0:
+ toml-eslint-parser@0.10.1:
dependencies:
eslint-visitor-keys: 3.4.3
totalist@3.0.1: {}
- tough-cookie@6.0.0:
- dependencies:
- tldts: 7.0.19
- optional: true
-
tr46@1.0.1:
dependencies:
punycode: 2.3.1
@@ -18208,7 +18278,7 @@ snapshots:
tsx@4.21.0:
dependencies:
- esbuild: 0.25.0
+ esbuild: 0.25.12
get-tsconfig: 4.13.0
optionalDependencies:
fsevents: 2.3.3
@@ -18234,11 +18304,6 @@ snapshots:
type-fest@4.2.0: {}
- type-fest@5.3.1:
- dependencies:
- tagged-tag: 1.0.0
- optional: true
-
typescript@5.9.3: {}
ufo@1.6.1: {}
@@ -18326,14 +18391,11 @@ snapshots:
webpack-virtual-modules: 0.6.2
optional: true
- until-async@3.0.2:
- optional: true
-
upath@1.2.0: {}
- update-browserslist-db@1.1.4(browserslist@4.28.0):
+ update-browserslist-db@1.2.2(browserslist@4.28.1):
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
escalade: 3.2.0
picocolors: 1.1.1
@@ -18534,7 +18596,7 @@ snapshots:
'@webassemblyjs/wasm-parser': 1.14.1
acorn: 8.15.0
acorn-import-phases: 1.0.4(acorn@8.15.0)
- browserslist: 4.28.0
+ browserslist: 4.28.1
chrome-trace-event: 1.0.4
enhanced-resolve: 5.18.3
es-module-lexer: 1.7.0
@@ -18548,7 +18610,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 4.3.3
tapable: 2.3.0
- terser-webpack-plugin: 5.3.14(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
+ terser-webpack-plugin: 5.3.15(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.103.0(esbuild@0.25.0)(uglify-js@3.19.3))
watchpack: 2.4.4
webpack-sources: 3.3.3
transitivePeerDependencies:
@@ -18695,13 +18757,6 @@ snapshots:
'@types/trusted-types': 2.0.7
workbox-core: 6.6.0
- wrap-ansi@6.2.0:
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
- optional: true
-
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -18733,7 +18788,7 @@ snapshots:
yallist@3.1.1: {}
- yaml-eslint-parser@1.3.1:
+ yaml-eslint-parser@1.3.2:
dependencies:
eslint-visitor-keys: 3.4.3
yaml: 2.8.2
@@ -18764,9 +18819,6 @@ snapshots:
yocto-queue@1.2.2: {}
- yoctocolors-cjs@2.1.3:
- optional: true
-
zen-observable-ts@1.1.0:
dependencies:
'@types/zen-observable': 0.8.3