diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7cb6417..fceb2bf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,28 +1,89 @@ -name: Code Quality Pipeline +name: Frontend CI Pipeline on: + push: + branches: [develop, main] pull_request: - branches: ['develop'] + branches: [develop, main] + workflow_dispatch: + +env: + NODE_VERSION: '22' jobs: quality-check: - name: Code Quality & Security Check + name: Code Quality & Unit Tests runs-on: ubuntu-latest steps: - - name: Checkout Code - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'pnpm' + + - name: Cache Playwright Browsers + uses: actions/cache@v4 + id: playwright-cache + with: + path: | + ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ hashFiles('**/pnpm-lock.yaml') }} + + - name: Install Dependencies + run: pnpm install --frozen-lockfile - - name: Setup pnpm - uses: pnpm/action-setup@v4 + - name: Install Playwright Browsers + if: steps.playwright-cache.outputs.cache-hit != 'true' + run: pnpm exec playwright install --with-deps - - name: Setup Node.js - uses: actions/setup-node@v4 + - name: Run ESLint + run: pnpm run lint + - name: Run TypeScript Check + run: pnpm run type-check + - name: Run Security Audit + run: pnpm run audit + - name: Run Unit Tests + run: pnpm run test:unit + + e2e-tests: + name: E2E Tests (Cypress) + runs-on: ubuntu-latest + needs: quality-check + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 with: - node-version: '20.x' + node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' + - name: Cache Cypress Binary + uses: actions/cache@v4 + id: cypress-cache + with: + path: ~/.cache/Cypress + key: ${{ runner.os }}-cypress-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Install Dependencies run: pnpm install --frozen-lockfile - - name: Run Quality Checks - run: pnpm test + - name: Install Cypress Binary + if: steps.cypress-cache.outputs.cache-hit != 'true' + run: pnpm exec cypress install + + - name: Cypress Run + uses: cypress-io/github-action@v6 + with: + install: false + build: pnpm run build + start: pnpm run preview --port 5173 + wait-on: 'http://localhost:5173' + browser: chrome + record: ${{ secrets.CYPRESS_RECORD_KEY != '' }} + parallel: false + env: + CI: true + CYPRESS_BASE_URL: 'http://localhost:5173' + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + GITHUB_TOKEN: ${{ secrets.DSW_TOKEN }} diff --git a/.github/workflows/deploy-storybook.yml b/.github/workflows/deploy-storybook.yml new file mode 100644 index 0000000..c084a1a --- /dev/null +++ b/.github/workflows/deploy-storybook.yml @@ -0,0 +1,55 @@ +name: Deploy Storybook to GitHub Pages + +on: + push: + branches: + - develop + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: 'pages' + cancel-in-progress: true + +jobs: + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build Storybook + run: pnpm build-storybook + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: './storybook-static' + name: storybook-pages + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 + with: + artifact_name: storybook-pages diff --git a/cypress.config.ts b/cypress.config.ts index 8f48ef0..2718325 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -1,9 +1,10 @@ -import { defineConfig } from "cypress"; +import { defineConfig } from 'cypress'; export default defineConfig({ - e2e: { - setupNodeEvents() { + projectId: 'di6an5', + + e2e: { baseUrl: process.env.CYPRESS_BASE_URL || 'https://localhost:5173', setupNodeEvents() { // implement node event listeners here }, }, -}); \ No newline at end of file +}); diff --git a/cypress/e2e/landing_flow.cy.ts b/cypress/e2e/landing_flow.cy.ts index 7512d48..6b15a00 100644 --- a/cypress/e2e/landing_flow.cy.ts +++ b/cypress/e2e/landing_flow.cy.ts @@ -1,14 +1,14 @@ describe('Landing Page & Navigation Flow', () => { beforeEach(() => { - // Visit the local development server - cy.visit('https://localhost:5173/'); + // Visit the application (uses baseUrl from cypress.config.ts) + cy.visit('/'); }); it('Should display the hero section with correct title', () => { // Verify main title parts cy.contains('h1', 'Aprende sin').should('be.visible'); cy.contains('span', 'límites').should('be.visible'); - + // Verify "Explore Courses" button exists with correct link cy.contains('a', 'Explorar Cursos') .should('be.visible') @@ -39,4 +39,4 @@ describe('Landing Page & Navigation Flow', () => { // Verify Courses page title cy.contains('h1', 'Explorar Cursos').should('be.visible'); }); -}); \ No newline at end of file +}); diff --git a/package.json b/package.json index aeefafe..168986b 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,10 @@ "test:watch": "vitest", "test:e2e": "cypress open", "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build" + "build-storybook": "storybook build", + "cy:run": "cypress run", + "cy:open": "cypress open", + "test:e2e:local": "start-server-and-test preview http://localhost:4173 cy:run" }, "dependencies": { "@blocknote/core": "^0.37.0", @@ -51,6 +54,7 @@ "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", + "@types/node": "^25.0.3", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/three": "^0.179.0", @@ -78,7 +82,8 @@ }, "pnpm": { "overrides": { - "glob": "^10.5.0" + "glob": "^10.5.0", + "systeminformation": ">=5.27.14" } }, "packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96874a4..7871c7b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,6 +6,7 @@ settings: overrides: glob: ^10.5.0 + systeminformation: '>=5.27.14' importers: @@ -16,49 +17,49 @@ importers: version: 0.37.0(@types/hast@3.0.4) '@blocknote/mantine': specifier: ^0.37.0 - version: 0.37.0(@types/hast@3.0.4)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 0.37.0(@types/hast@3.0.4)(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@blocknote/react': specifier: ^0.37.0 - version: 0.37.0(@types/hast@3.0.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 0.37.0(@types/hast@3.0.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@hookform/resolvers': specifier: ^5.2.1 - version: 5.2.2(react-hook-form@7.65.0(react@19.2.0)) + version: 5.2.2(react-hook-form@7.68.0(react@19.2.3)) '@tanstack/react-query': specifier: ^5.85.6 - version: 5.90.5(react@19.2.0) + version: 5.90.12(react@19.2.3) '@tanstack/react-query-devtools': specifier: ^5.85.6 - version: 5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(react@19.2.0) + version: 5.91.1(@tanstack/react-query@5.90.12(react@19.2.3))(react@19.2.3) axios: specifier: ^1.12.0 - version: 1.12.2(debug@4.4.3) + version: 1.13.2(debug@4.4.3) clsx: specifier: ^2.1.1 version: 2.1.1 lucide-react: specifier: ^0.534.0 - version: 0.534.0(react@19.2.0) + version: 0.534.0(react@19.2.3) react: specifier: ^19.1.0 - version: 19.2.0 + version: 19.2.3 react-dom: specifier: ^19.1.0 - version: 19.2.0(react@19.2.0) + version: 19.2.3(react@19.2.3) react-hook-form: specifier: ^7.62.0 - version: 7.65.0(react@19.2.0) + version: 7.68.0(react@19.2.3) react-hot-toast: specifier: ^2.6.0 - version: 2.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 2.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react-router-dom: specifier: ^7.7.0 - version: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) recharts: specifier: ^3.1.2 - version: 3.3.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(redux@5.0.1) + version: 3.6.0(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react-is@17.0.2)(react@19.2.3)(redux@5.0.1) tailwind-merge: specifier: ^3.3.1 - version: 3.3.1 + version: 3.4.0 three: specifier: ^0.179.1 version: 0.179.1 @@ -68,31 +69,31 @@ importers: devDependencies: '@chromatic-com/storybook': specifier: ^4.1.3 - version: 4.1.3(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + version: 4.1.3(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@eslint/js': specifier: ^9.33.0 - version: 9.37.0 + version: 9.39.2 '@storybook/addon-a11y': specifier: ^10.1.4 - version: 10.1.4(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + version: 10.1.9(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@storybook/addon-docs': specifier: ^10.1.4 - version: 10.1.4(@types/react@19.2.2)(esbuild@0.25.11)(rollup@4.52.4)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) + version: 10.1.9(@types/react@19.2.7)(esbuild@0.27.1)(rollup@4.53.5)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) '@storybook/addon-onboarding': specifier: ^10.1.4 - version: 10.1.4(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + version: 10.1.9(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@storybook/addon-vitest': specifier: ^10.1.4 - version: 10.1.4(@vitest/browser-playwright@4.0.15)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.0.15) + version: 10.1.9(@vitest/browser-playwright@4.0.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vitest@4.0.16) '@storybook/experimental-addon-test': specifier: ^8.6.14 - version: 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.0.15) + version: 8.6.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vitest@4.0.16) '@storybook/react': specifier: ^10.1.4 - version: 10.1.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.8.3) + version: 10.1.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.8.3) '@storybook/react-vite': specifier: ^10.1.4 - version: 10.1.4(esbuild@0.25.11)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.52.4)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.8.3)(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) + version: 10.1.9(esbuild@0.27.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.53.5)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.8.3)(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) '@testing-library/dom': specifier: ^10.4.1 version: 10.4.1 @@ -101,52 +102,55 @@ importers: version: 6.9.1 '@testing-library/react': specifier: ^16.3.0 - version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 16.3.1(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@types/node': + specifier: ^25.0.3 + version: 25.0.3 '@types/react': specifier: ^19.1.8 - version: 19.2.2 + version: 19.2.7 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.2(@types/react@19.2.2) + version: 19.2.3(@types/react@19.2.7) '@types/three': specifier: ^0.179.0 version: 0.179.0 '@vitejs/plugin-react': specifier: ^4.6.0 - version: 4.7.0(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) + version: 4.7.0(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) '@vitest/browser-playwright': specifier: ^4.0.15 - version: 4.0.15(playwright@1.57.0)(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))(vitest@4.0.15) + version: 4.0.16(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))(vitest@4.0.16) '@vitest/coverage-v8': specifier: ^4.0.15 - version: 4.0.15(vitest@4.0.15) + version: 4.0.16(vitest@4.0.16) autoprefixer: specifier: ^10.4.21 - version: 10.4.21(postcss@8.5.6) + version: 10.4.23(postcss@8.5.6) cypress: specifier: ^15.7.1 version: 15.7.1 eslint: specifier: ^9.33.0 - version: 9.37.0(jiti@1.21.7) + version: 9.39.2(jiti@1.21.7) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.37.0(jiti@1.21.7)) + version: 5.2.0(eslint@9.39.2(jiti@1.21.7)) eslint-plugin-react-refresh: specifier: ^0.4.20 - version: 0.4.24(eslint@9.37.0(jiti@1.21.7)) + version: 0.4.25(eslint@9.39.2(jiti@1.21.7)) eslint-plugin-storybook: specifier: ^10.1.4 - version: 10.1.4(eslint@9.37.0(jiti@1.21.7))(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.8.3) + version: 10.1.9(eslint@9.39.2(jiti@1.21.7))(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.8.3) globals: specifier: ^16.3.0 - version: 16.4.0 + version: 16.5.0 jsdom: specifier: ^27.2.0 - version: 27.2.0 + version: 27.3.0(postcss@8.5.6) knip: specifier: ^5.73.1 - version: 5.73.1(@types/node@24.10.1)(typescript@5.8.3) + version: 5.74.0(@types/node@25.0.3)(typescript@5.8.3) playwright: specifier: ^1.57.0 version: 1.57.0 @@ -155,30 +159,30 @@ importers: version: 8.5.6 storybook: specifier: ^10.1.4 - version: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tailwindcss: specifier: ^3.4.4 - version: 3.4.18 + version: 3.4.19 typescript: specifier: ~5.8.3 version: 5.8.3 typescript-eslint: specifier: ^8.39.1 - version: 8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3) + version: 8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3) vite: specifier: ^7.1.5 - version: 7.1.10(@types/node@24.10.1)(jiti@1.21.7) + version: 7.3.0(@types/node@25.0.3)(jiti@1.21.7) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.9(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) + version: 1.17.9(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) vitest: specifier: ^4.0.15 - version: 4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.7)(jsdom@27.2.0) + version: 4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(jiti@1.21.7)(jsdom@27.3.0(postcss@8.5.6)) packages: - '@acemir/cssom@0.9.24': - resolution: {integrity: sha512-5YjgMmAiT2rjJZU7XK1SNI7iqTy92DpaYVgG6x63FxkJ11UpYfLndHJATtinWJClAXiOlW9XWaUyAQf8pMrQPg==} + '@acemir/cssom@0.9.29': + resolution: {integrity: sha512-G90x0VW+9nW4dFajtjCoT+NM0scAfH9Mb08IcjgFHYbfiL/lU04dTF9JuVOi3/OH+DJCQdcIseSXkdCB9Ky6JA==} '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} @@ -187,11 +191,11 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@asamuzakjp/css-color@4.1.0': - resolution: {integrity: sha512-9xiBAtLn4aNsa4mDnpovJvBn72tNEIACyvlqaNJ+ADemR+yeMJWnBudOi2qGDviJa7SwcDOU/TRh5dnET7qk0w==} + '@asamuzakjp/css-color@4.1.1': + resolution: {integrity: sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==} - '@asamuzakjp/dom-selector@6.7.5': - resolution: {integrity: sha512-Eks6dY8zau4m4wNRQjRVaKQRTalNcPcBvU1ZQ35w5kKRk1gUeNCkVLsRiATurjASTp3TKM4H10wsI50nx3NZdw==} + '@asamuzakjp/dom-selector@6.7.6': + resolution: {integrity: sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg==} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -200,16 +204,16 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.4': - resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.4': - resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.27.2': @@ -238,10 +242,6 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} @@ -254,11 +254,6 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.4': - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.5': resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} @@ -284,12 +279,8 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.4': - resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} '@babel/types@7.28.5': @@ -350,9 +341,11 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-syntax-patches-for-csstree@1.0.20': - resolution: {integrity: sha512-8BHsjXfSciZxjmHQOuVdW2b8WLUPts9a+mfL13/PzEviufUEW2xnvQuOlKs9dRBHgRqJ53SF/DUoK9+MZk72oQ==} + '@csstools/css-syntax-patches-for-csstree@1.0.14': + resolution: {integrity: sha512-zSlIxa20WvMojjpCSy8WrNpcZ61RqfTfX3XTaOeVlGJrt/8HF3YbzgFZa01yTbT4GWQLwfTcC3EB8i3XnB647Q==} engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 '@csstools/css-tokenizer@3.0.4': resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} @@ -380,158 +373,158 @@ packages: '@emoji-mart/data@1.2.1': resolution: {integrity: sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==} - '@esbuild/aix-ppc64@0.25.11': - resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + '@esbuild/aix-ppc64@0.27.1': + resolution: {integrity: sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.11': - resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + '@esbuild/android-arm64@0.27.1': + resolution: {integrity: sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.11': - resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + '@esbuild/android-arm@0.27.1': + resolution: {integrity: sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.11': - resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + '@esbuild/android-x64@0.27.1': + resolution: {integrity: sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.11': - resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + '@esbuild/darwin-arm64@0.27.1': + resolution: {integrity: sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.11': - resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + '@esbuild/darwin-x64@0.27.1': + resolution: {integrity: sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.11': - resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + '@esbuild/freebsd-arm64@0.27.1': + resolution: {integrity: sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.11': - resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + '@esbuild/freebsd-x64@0.27.1': + resolution: {integrity: sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.11': - resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + '@esbuild/linux-arm64@0.27.1': + resolution: {integrity: sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.11': - resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + '@esbuild/linux-arm@0.27.1': + resolution: {integrity: sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.11': - resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + '@esbuild/linux-ia32@0.27.1': + resolution: {integrity: sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.11': - resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + '@esbuild/linux-loong64@0.27.1': + resolution: {integrity: sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.11': - resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + '@esbuild/linux-mips64el@0.27.1': + resolution: {integrity: sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.11': - resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + '@esbuild/linux-ppc64@0.27.1': + resolution: {integrity: sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.11': - resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + '@esbuild/linux-riscv64@0.27.1': + resolution: {integrity: sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.11': - resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + '@esbuild/linux-s390x@0.27.1': + resolution: {integrity: sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.11': - resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + '@esbuild/linux-x64@0.27.1': + resolution: {integrity: sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.11': - resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + '@esbuild/netbsd-arm64@0.27.1': + resolution: {integrity: sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.11': - resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + '@esbuild/netbsd-x64@0.27.1': + resolution: {integrity: sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.11': - resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + '@esbuild/openbsd-arm64@0.27.1': + resolution: {integrity: sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.11': - resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + '@esbuild/openbsd-x64@0.27.1': + resolution: {integrity: sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.11': - resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + '@esbuild/openharmony-arm64@0.27.1': + resolution: {integrity: sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.11': - resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + '@esbuild/sunos-x64@0.27.1': + resolution: {integrity: sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.11': - resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + '@esbuild/win32-arm64@0.27.1': + resolution: {integrity: sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.11': - resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + '@esbuild/win32-ia32@0.27.1': + resolution: {integrity: sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.11': - resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + '@esbuild/win32-x64@0.27.1': + resolution: {integrity: sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -542,36 +535,36 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.4.0': - resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.16.0': - resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.37.0': - resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} + '@eslint/js@9.39.2': + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.4.0': - resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@floating-ui/core@1.7.3': @@ -620,8 +613,8 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1': - resolution: {integrity: sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw==} + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.3': + resolution: {integrity: sha512-9TGZuAX+liGkNKkwuo3FYJu7gHWT0vkBcf7GkOe7s7fmC19XwH/4u5u7sDIFrMooe558ORcmuBvBz7Ur5PlbHw==} peerDependencies: typescript: '>= 4.3.x' vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -796,8 +789,8 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@reduxjs/toolkit@2.9.1': - resolution: {integrity: sha512-sETJ3qO72y7L7WiR5K54UFLT3jRzAtqeBPVO15xC3bGA6kDqCH8m/v7BKCPH4czydXzz/1lPEGLvew7GjOO3Qw==} + '@reduxjs/toolkit@2.11.2': + resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} peerDependencies: react: ^16.9.0 || ^17.0.0 || ^18 || ^19 react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 @@ -822,113 +815,113 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.52.4': - resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} + '@rollup/rollup-android-arm-eabi@4.53.5': + resolution: {integrity: sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.52.4': - resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} + '@rollup/rollup-android-arm64@4.53.5': + resolution: {integrity: sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.52.4': - resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} + '@rollup/rollup-darwin-arm64@4.53.5': + resolution: {integrity: sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.52.4': - resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} + '@rollup/rollup-darwin-x64@4.53.5': + resolution: {integrity: sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.52.4': - resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} + '@rollup/rollup-freebsd-arm64@4.53.5': + resolution: {integrity: sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.52.4': - resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} + '@rollup/rollup-freebsd-x64@4.53.5': + resolution: {integrity: sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.52.4': - resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.53.5': + resolution: {integrity: sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.52.4': - resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} + '@rollup/rollup-linux-arm-musleabihf@4.53.5': + resolution: {integrity: sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.52.4': - resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} + '@rollup/rollup-linux-arm64-gnu@4.53.5': + resolution: {integrity: sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.52.4': - resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} + '@rollup/rollup-linux-arm64-musl@4.53.5': + resolution: {integrity: sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.52.4': - resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} + '@rollup/rollup-linux-loong64-gnu@4.53.5': + resolution: {integrity: sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.52.4': - resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} + '@rollup/rollup-linux-ppc64-gnu@4.53.5': + resolution: {integrity: sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.52.4': - resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} + '@rollup/rollup-linux-riscv64-gnu@4.53.5': + resolution: {integrity: sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.52.4': - resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} + '@rollup/rollup-linux-riscv64-musl@4.53.5': + resolution: {integrity: sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.52.4': - resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} + '@rollup/rollup-linux-s390x-gnu@4.53.5': + resolution: {integrity: sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.52.4': - resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} + '@rollup/rollup-linux-x64-gnu@4.53.5': + resolution: {integrity: sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.52.4': - resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} + '@rollup/rollup-linux-x64-musl@4.53.5': + resolution: {integrity: sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.52.4': - resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} + '@rollup/rollup-openharmony-arm64@4.53.5': + resolution: {integrity: sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.52.4': - resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} + '@rollup/rollup-win32-arm64-msvc@4.53.5': + resolution: {integrity: sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.52.4': - resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} + '@rollup/rollup-win32-ia32-msvc@4.53.5': + resolution: {integrity: sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.52.4': - resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} + '@rollup/rollup-win32-x64-gnu@4.53.5': + resolution: {integrity: sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.52.4': - resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} + '@rollup/rollup-win32-x64-msvc@4.53.5': + resolution: {integrity: sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==} cpu: [x64] os: [win32] @@ -938,34 +931,34 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} '@standard-schema/utils@0.3.0': resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - '@storybook/addon-a11y@10.1.4': - resolution: {integrity: sha512-go7SshAyu+pnK7Prq3UnCBCB7DxAQkPMnebsv3fnboeTZHnDXQqfmHdZ15o+pH0JsCedC05RYsdbjd2rMHMvFQ==} + '@storybook/addon-a11y@10.1.9': + resolution: {integrity: sha512-MJjJQY9liDyOi7PIE9c0hfa+2jNCdRskRwoR8G3Klli0FIhXjxlAci6BjCGX9W3deOuwvDT13xwVg5YG6Mi13A==} peerDependencies: - storybook: ^10.1.4 + storybook: ^10.1.9 - '@storybook/addon-docs@10.1.4': - resolution: {integrity: sha512-TWLDJNLS/S3AUyTf9x0Hb8k7d+VWMJCH9dWAS0QenvJG8ga9VaehO6r+e+3YyIDbO1ev3UST3GCjh9SY8tzwRA==} + '@storybook/addon-docs@10.1.9': + resolution: {integrity: sha512-SvwEZ32lyk5p3PRmE3pmfAhs4HMiVo5zxjTBVmK9kgz9zGgWCTlikb56tJ998hVe52CFyCvt3I9rkHeYMCKPww==} peerDependencies: - storybook: ^10.1.4 + storybook: ^10.1.9 - '@storybook/addon-onboarding@10.1.4': - resolution: {integrity: sha512-UdjkuPL9R+sbnkc9xvDKL68r/30jzFXbhtxbRp5MrmT+dFXvBSi0sHChiWUk/sDf142KpcDswv0r21mxdr6F8w==} + '@storybook/addon-onboarding@10.1.9': + resolution: {integrity: sha512-9f0F5DBA01jZSZXrOzhiuubMdQrej8C15mrIcXoPFNPNbvx9IBYsAiVWv3Tj76mF1IuvVy0J7vzNtGT+kMvKzg==} peerDependencies: - storybook: ^10.1.4 + storybook: ^10.1.9 - '@storybook/addon-vitest@10.1.4': - resolution: {integrity: sha512-QsjtllQZSMRWEQ4ICmrxYgSrYd16C2pZZShg/fT2OUuXaoASJiINz+ljgbaUYyaB8skJJ+wBtUa2/09Rw/P7OA==} + '@storybook/addon-vitest@10.1.9': + resolution: {integrity: sha512-rIJEwWhhguleQ8Sw0rI3artubm+PzgHqS5nG00KpWnGp4mvsx0k3kxJjSyf9VhSApyG9G3SMB+05JBlGbJGKdA==} peerDependencies: '@vitest/browser': ^3.0.0 || ^4.0.0 '@vitest/browser-playwright': ^4.0.0 '@vitest/runner': ^3.0.0 || ^4.0.0 - storybook: ^10.1.4 + storybook: ^10.1.9 vitest: ^3.0.0 || ^4.0.0 peerDependenciesMeta: '@vitest/browser': @@ -977,18 +970,18 @@ packages: vitest: optional: true - '@storybook/builder-vite@10.1.4': - resolution: {integrity: sha512-3mUQoCzMuhqAIjj8fdbGlwh+GgHaFpCvU+sxL8kIxnZqflW09SuwM5kS47Y5QDzYbHAPYCPqcBFyJ4EfRuf0rw==} + '@storybook/builder-vite@10.1.9': + resolution: {integrity: sha512-rUILpjGV7gKfXrUeZzpNAer9PspB3LJI1d+gJHISx2Gs24bdneA3y/gu0fWw46ccOSIcwb91xoK5QxliJcWsWg==} peerDependencies: - storybook: ^10.1.4 + storybook: ^10.1.9 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@storybook/csf-plugin@10.1.4': - resolution: {integrity: sha512-nudIBYx8fBz+1j2Xn1pdfGcgMJ78N/1NFB4MYAxI3YEzxGnQwUjihOO1x3siAXPbjFGmnVHoBx7+6IpO3F70GA==} + '@storybook/csf-plugin@10.1.9': + resolution: {integrity: sha512-17LXUqpbVvsMt7KJwgr0bPUX+uEGArc6EOi+DC5X/CQ+i0nXxxLMpDHdTyrsdKxCZIT087OpSNbTEWP5ACEAlA==} peerDependencies: esbuild: '*' rollup: '*' - storybook: ^10.1.4 + storybook: ^10.1.9 vite: '*' webpack: '*' peerDependenciesMeta: @@ -1037,27 +1030,27 @@ packages: peerDependencies: storybook: ^8.6.14 - '@storybook/react-dom-shim@10.1.4': - resolution: {integrity: sha512-PARu2HA5nYU1AkioNJNc430pz0oyaHFSSAdN3NEaWwkoGrCOo9ZpAXP9V7wlJANCi1pndbC84gSuHVnBXJBG6g==} + '@storybook/react-dom-shim@10.1.9': + resolution: {integrity: sha512-gJsR6fI1gG4DSin6sQx8RmGDQF8Lije0cZbxHyVedNleBsveGXIPFUKFVi+pRNdwBPni1Z2g/gYyHzkOEqPD2w==} 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 - storybook: ^10.1.4 + storybook: ^10.1.9 - '@storybook/react-vite@10.1.4': - resolution: {integrity: sha512-PneYbxBGArczDtDAvQu6Ug5oeDYM5SQiEDSF0i+TNN0ZKO2ROsmbGSI9/7YTFontXR2CqweIO8GyOGQOcz5K9A==} + '@storybook/react-vite@10.1.9': + resolution: {integrity: sha512-2f2mLGTDKYzIFi5Xnu5TEBpnDXazSAKMliVsUKrCr+gunfk8uPApj0njATvZoRB3xTZ44Aacf7l9EZQaTYxB/Q==} 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 - storybook: ^10.1.4 + storybook: ^10.1.9 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@storybook/react@10.1.4': - resolution: {integrity: sha512-ZBMPdQ99QBv/UtlIZBerDGNsQB30ffxk6twe45FIPutSlKXD6W9r0z7rGa5UWnqmmxa9HjARRhclOFsNGkhs9g==} + '@storybook/react@10.1.9': + resolution: {integrity: sha512-NqiFp5rJmxzs0teNAGqgGH0nD8q1aYR8AxQl9OYSHULYoLJR1/RqcyBPTTBjxAOpWF/pZgLBrRW+FjZbjKLLMQ==} 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 - storybook: ^10.1.4 + storybook: ^10.1.9 typescript: '>= 4.9.x' peerDependenciesMeta: typescript: @@ -1068,20 +1061,20 @@ packages: peerDependencies: storybook: ^8.6.14 - '@tanstack/query-core@5.90.5': - resolution: {integrity: sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==} + '@tanstack/query-core@5.90.12': + resolution: {integrity: sha512-T1/8t5DhV/SisWjDnaiU2drl6ySvsHj1bHBCWNXd+/T+Hh1cf6JodyEYMd5sgwm+b/mETT4EV3H+zCVczCU5hg==} - '@tanstack/query-devtools@5.90.1': - resolution: {integrity: sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ==} + '@tanstack/query-devtools@5.91.1': + resolution: {integrity: sha512-l8bxjk6BMsCaVQH6NzQEE/bEgFy1hAs5qbgXl0xhzezlaQbPk6Mgz9BqEg2vTLPOHD8N4k+w/gdgCbEzecGyNg==} - '@tanstack/react-query-devtools@5.90.2': - resolution: {integrity: sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ==} + '@tanstack/react-query-devtools@5.91.1': + resolution: {integrity: sha512-tRnJYwEbH0kAOuToy8Ew7bJw1lX3AjkkgSlf/vzb+NpnqmHPdWM+lA2DSdGQSLi1SU0PDRrrCI1vnZnci96CsQ==} peerDependencies: - '@tanstack/react-query': ^5.90.2 + '@tanstack/react-query': ^5.90.10 react: ^18 || ^19 - '@tanstack/react-query@5.90.5': - resolution: {integrity: sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q==} + '@tanstack/react-query@5.90.12': + resolution: {integrity: sha512-graRZspg7EoEaw0a8faiUASCyJrqjKPdqJ9EwuDRUF9mEYJ1YPczI9H+/agJ0mOJkPCJDk0lsz5QTrLZ/jQ2rg==} peerDependencies: react: ^18 || ^19 @@ -1101,8 +1094,8 @@ packages: resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/react@16.3.0': - resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==} + '@testing-library/react@16.3.1': + resolution: {integrity: sha512-gr4KtAWqIOQoucWYD/f6ki+j5chXfcPc74Col/6poTyqTmn7zRmodWahWRCp8tYd+GMqBonw6hstNzqjbs6gjw==} engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 @@ -1128,97 +1121,97 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tiptap/core@2.26.3': - resolution: {integrity: sha512-TaOJzu2v5ufsOx+yu94NqXE504zmupVdFCxH1g3hk5fzZ3gT57Lh9R/27OjwM4e6o+Z3DXDl8yfFMHIcR3zUkg==} + '@tiptap/core@2.27.1': + resolution: {integrity: sha512-nkerkl8syHj44ZzAB7oA2GPmmZINKBKCa79FuNvmGJrJ4qyZwlkDzszud23YteFZEytbc87kVd/fP76ROS6sLg==} peerDependencies: '@tiptap/pm': ^2.7.0 - '@tiptap/extension-bold@2.26.3': - resolution: {integrity: sha512-ssXKQxSwQ+Webv65emK/A1d13iTvnfbw8I2wlzuxsrMChyb4wH2HyqI5N4g0FpLqCpkXFumforoY+0XKktve+w==} + '@tiptap/extension-bold@2.27.1': + resolution: {integrity: sha512-g4l4p892x/r7mhea8syp3fNYODxsDrimgouQ+q4DKXIgQmm5+uNhyuEPexP3I8TFNXqQ4DlMNFoM9yCqk97etQ==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-bubble-menu@2.26.3': - resolution: {integrity: sha512-vliC5bv/md4qkguqqL8w7LW8jnXBD1FLdSMDavHRVwdRaRnEfLRAIY7Oxtc1Voy3+762tfn912TuwDlCOPsNSQ==} + '@tiptap/extension-bubble-menu@2.27.1': + resolution: {integrity: sha512-ki1R27VsSvY2tT9Q2DIlcATwLOoEjf5DsN+5sExarQ8S/ZxT/tvIjRxB8Dx7lb2a818W5f/NER26YchGtmHfpg==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-code@2.26.3': - resolution: {integrity: sha512-bAkUNzV+tA1J1RYbtbAGTFqkRw9+yRpAd+d3S9jy/dAD+uOe1ZD1EIngyEf2GTonnoy4bpDYtytbCjUt9PozoA==} + '@tiptap/extension-code@2.27.1': + resolution: {integrity: sha512-i65wUGJevzBTIIUBHBc1ggVa27bgemvGl/tY1/89fEuS/0Xmre+OQjw8rCtSLevoHSiYYLgLRlvjtUSUhE4kgg==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-floating-menu@2.26.3': - resolution: {integrity: sha512-i2dsIMa0L6vjCPnTiXjPZXZqUu3sIIIAI+E1T4p0FsGYjjPTmN+AgkJqeO3bbe5XHmWcWKtgQevNCMF0kmU5rQ==} + '@tiptap/extension-floating-menu@2.27.1': + resolution: {integrity: sha512-nUk/8DbiXO69l6FDwkWso94BTf52IBoWALo+YGWT6o+FO6cI9LbUGghEX2CdmQYXCvSvwvISF2jXeLQWNZvPZQ==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-gapcursor@2.26.3': - resolution: {integrity: sha512-ZDNSkpz7ik2PJOjrys27rwko5Ufe6GtLjaAxjvkWmyzcgAOTadDeth9NaRdBVMDGgSLBKbXihYZZXLkiAP9RLA==} + '@tiptap/extension-gapcursor@2.27.1': + resolution: {integrity: sha512-A9e1jr+jGhDWzNSXtIO6PYVYhf5j/udjbZwMja+wCE/3KvZU9V3IrnGKz1xNW+2Q2BDOe1QO7j5uVL9ElR6nTA==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-history@2.26.3': - resolution: {integrity: sha512-Qg4+WWf/hDgiBspxLbrhrIFUy7lzi2eBKPSoF/haEYFw/t/FeN60NXYYYtpLimUNpUzyJSOSIwsngFcVJO5X+g==} + '@tiptap/extension-history@2.27.1': + resolution: {integrity: sha512-K8PHC9gegSAt0wzSlsd4aUpoEyIJYOmVVeyniHr1P1mIblW1KYEDbRGbDlrLALTyUEfMcBhdIm8zrB9X2Nihvg==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-horizontal-rule@2.26.3': - resolution: {integrity: sha512-NhlJEDj0b/P1Rj4UOMgt4CjS4IXEhXQFsdiXmsYZxchfr4J72HrsOfZs4vAqIQbkrLgUlYEr/DGMNWzME78FrA==} + '@tiptap/extension-horizontal-rule@2.27.1': + resolution: {integrity: sha512-WxXWGEEsqDmGIF2o9av+3r9Qje4CKrqrpeQY6aRO5bxvWX9AabQCfasepayBok6uwtvNzh3Xpsn9zbbSk09dNA==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-italic@2.26.3': - resolution: {integrity: sha512-DJX31JQsyerqoNM+hAtbjHoJ42W/EpnMMCtQr/gRS8ssEdrVtcDDhSO2tkaP6dNjhG8zH2hKYsXpLCCFdDgvwg==} + '@tiptap/extension-italic@2.27.1': + resolution: {integrity: sha512-rcm0GyniWW0UhcNI9+1eIK64GqWQLyIIrWGINslvqSUoBc+WkfocLvv4CMpRkzKlfsAxwVIBuH2eLxHKDtAREA==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-link@2.26.3': - resolution: {integrity: sha512-cNYqAeiaG/65ctVEUOHt1MQnTF1JcdZqBkN9pLf3grzcmkmdr3w1/JbKOphZc84vOB2rxuhGZx9NFV2lrC5Qwg==} + '@tiptap/extension-link@2.27.1': + resolution: {integrity: sha512-cCwWPZsnVh9MXnGOqSIRXPPuUixRDK8eMN2TvqwbxUBb1TU7b/HtNvfMU4tAOqAuMRJ0aJkFuf3eB0Gi8LVb1g==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-paragraph@2.26.3': - resolution: {integrity: sha512-eBC5UsaTJRUMhePtK1dcCAfes0CpqqFiewpIM0lWk4XMtpG2aoczVVVkImybbFKfqsvEEo3vgHJ2YiE5YZFCSg==} + '@tiptap/extension-paragraph@2.27.1': + resolution: {integrity: sha512-R3QdrHcUdFAsdsn2UAIvhY0yWyHjqGyP/Rv8RRdN0OyFiTKtwTPqreKMHKJOflgX4sMJl/OpHTpNG1Kaf7Lo2A==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-strike@2.26.3': - resolution: {integrity: sha512-Po3al5hP0IwvHHIHYy3DbUvCD/kbYTsi3sWTjPAB9QgqaoJGl+jyhIyha8FsR+U3MCIIJIekMktI5o1+ySMGpg==} + '@tiptap/extension-strike@2.27.1': + resolution: {integrity: sha512-S9I//K8KPgfFTC5I5lorClzXk0g4lrAv9y5qHzHO5EOWt7AFl0YTg2oN8NKSIBK4bHRnPIrjJJKv+dDFnUp5jQ==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-table-cell@2.26.3': - resolution: {integrity: sha512-m/uZSeXuRAJaLedq0MOu9ZGibh4kkovXX0i5Oj6K9lT+TtBLQBNCSABQeOCe2FFPXhpWRpnhZrqhJgdo/n9BSg==} + '@tiptap/extension-table-cell@2.27.1': + resolution: {integrity: sha512-VowNmz1kub2qfntWkU8jGA6DoCl9xjJBWSypuQIeiN/IRId3BMrJodT26pTNJ3ChDMtYaanWaUvYqckRxgTC2A==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-table-header@2.26.3': - resolution: {integrity: sha512-8+P3j5kNE04zbqGqwEFKJ82ECBoRfx6PaPkoNlftBkRnAQIWajdPcLxLpBPak1tHw9sEtnZg38aBFz7kQLcklg==} + '@tiptap/extension-table-header@2.27.1': + resolution: {integrity: sha512-lSbGB6kBp/sTVzAWl4v7v7ztL5XU3aTdlS7FhfGjpdsxd4zPKYG8kx+Uxgq25W9/BlCbnqHnO0poAMfOlspDQw==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-text@2.26.3': - resolution: {integrity: sha512-sGRbX96ss4jQeKw9d0iphuAWja8Dv4w4ryTDKfxD7Lizx3UaIxQB/y+Wna89tM3kfbi/qJcrD3AF7NJgfc/tEA==} + '@tiptap/extension-text@2.27.1': + resolution: {integrity: sha512-a4GCT+GZ9tUwl82F4CEum9/+WsuW0/De9Be/NqrMmi7eNfAwbUTbLCTFU0gEvv25WMHCoUzaeNk/qGmzeVPJ1Q==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-underline@2.26.3': - resolution: {integrity: sha512-FXQUiHjvKDIpU9Bg+fV7UqQnEjhGvVQUnrf9VOI1/9hm+GWWxAfV2asRiZgV6jeBvNJWYzUGzvQUN6vFzmVbdw==} + '@tiptap/extension-underline@2.27.1': + resolution: {integrity: sha512-fPTmfJFAQWg1O/os1pYSPVdtvly6eW/w5sDofG7pre+bdQUN+8s1cZYelSuj/ltNVioRaB2Ws7tvNgnHL0aAJQ==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/pm@2.26.3': - resolution: {integrity: sha512-8gUmdxWlUevmgq2mNvGxvf2CpDW097tVKECMWKEn8sf846kXv3CoqaGRhI3db4kfR+09uWZeRM7rtrjRBmUThg==} + '@tiptap/pm@2.27.1': + resolution: {integrity: sha512-ijKo3+kIjALthYsnBmkRXAuw2Tswd9gd7BUR5OMfIcjGp8v576vKxOxrRfuYiUM78GPt//P0sVc1WV82H5N0PQ==} - '@tiptap/react@2.26.3': - resolution: {integrity: sha512-4g7pbdyawIO5YZXJQMwNv0dptblV4QUa7T/BYHe+PjAm4H+OeQbo7UmbxU427u8hPt1PhXZjbvT7D5i3r/MXCw==} + '@tiptap/react@2.27.1': + resolution: {integrity: sha512-leJximSjYJuhLJQv9azOP9R7w6zuxVgKOHYT4w83Gte7GhWMpNL6xRWzld280vyq/YW/cSYjPb/8ESEOgKNBdQ==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 @@ -1312,16 +1305,16 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/node@25.0.3': + resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} - '@types/react-dom@19.2.2': - resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.2': - resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -1353,63 +1346,63 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.46.1': - resolution: {integrity: sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==} + '@typescript-eslint/eslint-plugin@8.50.0': + resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.46.1 + '@typescript-eslint/parser': ^8.50.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.46.1': - resolution: {integrity: sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==} + '@typescript-eslint/parser@8.50.0': + resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==} 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.46.1': - resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==} + '@typescript-eslint/project-service@8.50.0': + resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.46.1': - resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==} + '@typescript-eslint/scope-manager@8.50.0': + resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.46.1': - resolution: {integrity: sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==} + '@typescript-eslint/tsconfig-utils@8.50.0': + resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.46.1': - resolution: {integrity: sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==} + '@typescript-eslint/type-utils@8.50.0': + resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==} 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.46.1': - resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==} + '@typescript-eslint/types@8.50.0': + resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.46.1': - resolution: {integrity: sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==} + '@typescript-eslint/typescript-estree@8.50.0': + resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.46.1': - resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==} + '@typescript-eslint/utils@8.50.0': + resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==} 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.46.1': - resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==} + '@typescript-eslint/visitor-keys@8.50.0': + resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -1421,22 +1414,22 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitest/browser-playwright@4.0.15': - resolution: {integrity: sha512-94yVpDbb+ykiT7mK6ToonGnq2GIHEQGBTZTAzGxBGQXcVNCh54YKC2/WkfaDzxy0m6Kgw05kq3FYHKHu+wRdIA==} + '@vitest/browser-playwright@4.0.16': + resolution: {integrity: sha512-I2Fy/ANdphi1yI46d15o0M1M4M0UJrUiVKkH5oKeRZZCdPg0fw/cfTKZzv9Ge9eobtJYp4BGblMzXdXH0vcl5g==} peerDependencies: playwright: '*' - vitest: 4.0.15 + vitest: 4.0.16 - '@vitest/browser@4.0.15': - resolution: {integrity: sha512-zedtczX688KehaIaAv7m25CeDLb0gBtAOa2Oi1G1cqvSO5aLSVfH6lpZMJLW8BKYuWMxLQc9/5GYoM+jgvGIrw==} + '@vitest/browser@4.0.16': + resolution: {integrity: sha512-t4toy8X/YTnjYEPoY0pbDBg3EvDPg1elCDrfc+VupPHwoN/5/FNQ8Z+xBYIaEnOE2vVEyKwqYBzZ9h9rJtZVcg==} peerDependencies: - vitest: 4.0.15 + vitest: 4.0.16 - '@vitest/coverage-v8@4.0.15': - resolution: {integrity: sha512-FUJ+1RkpTFW7rQITdgTi93qOCWJobWhBirEPCeXh2SW2wsTlFxy51apDz5gzG+ZEYt/THvWeNmhdAoS9DTwpCw==} + '@vitest/coverage-v8@4.0.16': + resolution: {integrity: sha512-2rNdjEIsPRzsdu6/9Eq0AYAzYdpP6Bx9cje9tL3FE5XzXRQF1fNU9pe/1yE8fCrS0HD+fBtt6gLPh6LI57tX7A==} peerDependencies: - '@vitest/browser': 4.0.15 - vitest: 4.0.15 + '@vitest/browser': 4.0.16 + vitest: 4.0.16 peerDependenciesMeta: '@vitest/browser': optional: true @@ -1447,8 +1440,8 @@ packages: '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/expect@4.0.15': - resolution: {integrity: sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==} + '@vitest/expect@4.0.16': + resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==} '@vitest/mocker@3.2.4': resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} @@ -1461,8 +1454,8 @@ packages: vite: optional: true - '@vitest/mocker@4.0.15': - resolution: {integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==} + '@vitest/mocker@4.0.16': + resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -1481,14 +1474,14 @@ packages: '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/pretty-format@4.0.15': - resolution: {integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==} + '@vitest/pretty-format@4.0.16': + resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} - '@vitest/runner@4.0.15': - resolution: {integrity: sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==} + '@vitest/runner@4.0.16': + resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==} - '@vitest/snapshot@4.0.15': - resolution: {integrity: sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==} + '@vitest/snapshot@4.0.16': + resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==} '@vitest/spy@2.0.5': resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} @@ -1496,8 +1489,8 @@ packages: '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/spy@4.0.15': - resolution: {integrity: sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==} + '@vitest/spy@4.0.16': + resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==} '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} @@ -1508,11 +1501,11 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vitest/utils@4.0.15': - resolution: {integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==} + '@vitest/utils@4.0.16': + resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} - '@webgpu/types@0.1.66': - resolution: {integrity: sha512-YA2hLrwLpDsRueNDXIMqN9NTzD6bCDkuXbOSe0heS+f8YE8usA6Gbv1prj81pzVHrbaAma7zObnIC+I6/sXJgA==} + '@webgpu/types@0.1.68': + resolution: {integrity: sha512-3ab1B59Ojb6RwjOspYLsTpCzbNB3ZaamIAxBMmvnNkiDoLTZUOBXZ9p5nAYVEkQlDdf6qAZWi1pqj9+ypiqznA==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1601,8 +1594,8 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.8: - resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==} + ast-v8-to-istanbul@0.3.9: + resolution: {integrity: sha512-dSC6tJeOJxbZrPzPbv5mMd6CMiQ1ugaVXXPRad2fXUSsy1kstFn9XQWemV9VW7Y7kpxgQ/4WMoZfwdH8XSU48w==} astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} @@ -1615,8 +1608,8 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - autoprefixer@10.4.21: - resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + autoprefixer@10.4.23: + resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -1632,8 +1625,8 @@ packages: resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} engines: {node: '>=4'} - axios@1.12.2: - resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -1644,8 +1637,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.17: - resolution: {integrity: sha512-j5zJcx6golJYTG6c05LUZ3Z8Gi+M62zRT/ycz4Xq4iCOdpcxwg7ngEYD4KA0eWZC7U17qh/Smq8bYbACJ0ipBA==} + baseline-browser-mapping@2.9.8: + resolution: {integrity: sha512-Y1fOuNDowLfgKOypdc9SPABfoWXuZHBOyCS4cD52IeZBhr4Md6CLLs6atcxVrzRmQ06E7hSlm5bHHApPKR/byA==} hasBin: true bcrypt-pbkdf@1.0.2: @@ -1674,8 +1667,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.26.3: - resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1685,6 +1678,10 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + cachedir@2.4.0: resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} engines: {node: '>=6'} @@ -1705,8 +1702,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001751: - resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + caniuse-lite@1.0.30001760: + resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -1822,8 +1819,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} core-util-is@1.0.2: @@ -1848,12 +1845,12 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@5.3.3: - resolution: {integrity: sha512-OytmFH+13/QXONJcC75QNdMtKpceNk3u8ThBjyyYjkEcy/ekBwR1mMAuNvi3gdBPW3N5TlCzQ0WZw8H0lN/bDw==} + cssstyle@5.3.4: + resolution: {integrity: sha512-KyOS/kJMEq5O9GdPnaf82noigg5X5DYn0kZPJTaAsCUaBizp6Xa1y9D4Qoqf/JazEXWuruErHgVXwjN5391ZJw==} engines: {node: '>=20'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} cypress@15.7.1: resolution: {integrity: sha512-U3sYnJ+Cnpgr6IPycxsznTg//mGVXfPGeGV+om7VQCyp5XyVkhG4oPr3X3hTq1+OB0Om0O5DxusYmt7cbvwqMQ==} @@ -1948,6 +1945,18 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.4.0: + resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1988,8 +1997,8 @@ packages: ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - electron-to-chromium@1.5.237: - resolution: {integrity: sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==} + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} emoji-mart@5.6.0: resolution: {integrity: sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow==} @@ -2038,11 +2047,11 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-toolkit@1.40.0: - resolution: {integrity: sha512-8o6w0KFmU0CiIl0/Q/BCEOabF2IJaELM1T2PWj6e8KqzHv1gdx+7JtFnDwOx1kJH/isJ5NwlDG1nCr1HrRF94Q==} + es-toolkit@1.43.0: + resolution: {integrity: sha512-SKCT8AsWvYzBBuUqMk4NPwFlSdqLpJwmy6AP322ERn8W2YLIB6JBXnwMI2Qsh2gfphT3q7EKAxKb23cvFHFwKA==} - esbuild@0.25.11: - resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} + esbuild@0.27.1: + resolution: {integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==} engines: {node: '>=18'} hasBin: true @@ -2068,16 +2077,16 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-refresh@0.4.24: - resolution: {integrity: sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==} + eslint-plugin-react-refresh@0.4.25: + resolution: {integrity: sha512-dRUD2LOdEqI4zXHqbQ442blQAzdSuShAaiSq5Vtyy6LT08YUf0oOjBDo4VPx0dCPgiPWh1WB4dtbLOd0kOlDPQ==} peerDependencies: eslint: '>=8.40' - eslint-plugin-storybook@10.1.4: - resolution: {integrity: sha512-itG2eLrWyuP5RGIL3TMGA5KSGoBOX3aTnQd43qLJu36ZMzd9H4RHN1I8WTVvyiaInppYJMGB4nnXzSdNXUUeTQ==} + eslint-plugin-storybook@10.1.9: + resolution: {integrity: sha512-2XCnHhu+9ShW8U/MsvnlT4ZkzADIPtlfYVD/GBBbs8loWu0x9IZ3EfNg1LEImjvvNVDhwpd5K04lK4CAP+2bWA==} peerDependencies: eslint: '>=8' - storybook: ^10.1.4 + storybook: ^10.1.9 eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} @@ -2091,8 +2100,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.37.0: - resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} + eslint@9.39.2: + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2146,8 +2155,8 @@ packages: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} engines: {node: '>=4'} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} extend@3.0.2: @@ -2239,8 +2248,8 @@ packages: forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} formatly@0.3.0: @@ -2248,8 +2257,8 @@ packages: engines: {node: '>=18.3.0'} hasBin: true - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} @@ -2311,8 +2320,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@16.4.0: - resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} goober@2.1.18: @@ -2327,9 +2336,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2442,8 +2448,11 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} - immer@10.1.3: - resolution: {integrity: sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==} + immer@10.2.0: + resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} + + immer@11.0.1: + resolution: {integrity: sha512-naDCyggtcBWANtIrjQEajhhBEuL9b0Zg4zmlWK2CzS6xCWSE39/vvf4LqnMjUAWHBhot4m9MHCM/Z+mfWhUkiA==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} @@ -2473,6 +2482,11 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2485,6 +2499,11 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} @@ -2515,6 +2534,10 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2557,10 +2580,6 @@ packages: js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -2568,8 +2587,8 @@ packages: jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jsdom@27.2.0: - resolution: {integrity: sha512-454TI39PeRDW1LgpyLPyURtB4Zx1tklSr6+OFOipsxGUH1WMTvk6C65JQdrj455+DP2uJ1+veBEHTGFKWVLFoA==} + jsdom@27.3.0: + resolution: {integrity: sha512-GtldT42B8+jefDUC4yUKAvsaOrH7PDHmZxZXNgF2xMmymjUbRYJvpAybZAKEmXDGTM0mCsz8duOa4vTm5AY2Kg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 @@ -2616,8 +2635,8 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - knip@5.73.1: - resolution: {integrity: sha512-P2HTcbLcZY7v57xTS+Lx8F1bnhIzxJYF0NSVlX4ZwIRV7FcZNJseUKDRhA729TASANndDUBKxshg+3aaU05lkw==} + knip@5.74.0: + resolution: {integrity: sha512-xSG+vn403ONBkQtSBf1+kcE8ulzyQHLWIDQAxvu3W7HnM0jZJqVUPlK5w6FZNUyKnp+4FInsYQW77eapDpmcNA==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: @@ -2628,8 +2647,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lib0@0.2.114: - resolution: {integrity: sha512-gcxmNFzA4hv8UYi8j43uPlQ7CGcyMJ2KQb5kZASw6SnAKAf10hK12i2fjrS3Cl/ugZa5Ui6WwIu1/6MIXiHttQ==} + lib0@0.2.115: + resolution: {integrity: sha512-noaW4yNp6hCjOgDnWWxW0vGXE3kZQI5Kqiwz+jIWXavI9J9WyfJ9zjsbQlQlgjIbHBrvlA/x3TSIXBUJj+0L6g==} engines: {node: '>=16'} hasBin: true @@ -2749,8 +2768,8 @@ packages: mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} @@ -2910,17 +2929,13 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-releases@2.0.25: - resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==} + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -2947,6 +2962,10 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -3174,8 +3193,8 @@ packages: sugar-high: optional: true - prosemirror-history@1.4.1: - resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} + prosemirror-history@1.5.0: + resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} prosemirror-inputrules@1.5.1: resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} @@ -3189,8 +3208,8 @@ packages: prosemirror-menu@1.2.5: resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==} - prosemirror-model@1.25.3: - resolution: {integrity: sha512-dY2HdaNXlARknJbrManZ1WyUtos+AP97AmvqdOQtWtrrC5g4mohVX5DTi9rXNFSk09eczLq9GuNTtq3EfMeMGA==} + prosemirror-model@1.25.4: + resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} prosemirror-schema-basic@1.2.4: resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} @@ -3198,11 +3217,11 @@ packages: prosemirror-schema-list@1.5.1: resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} - prosemirror-state@1.4.3: - resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} + prosemirror-state@1.4.4: + resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} - prosemirror-tables@1.8.1: - resolution: {integrity: sha512-DAgDoUYHCcc6tOGpLVPSU1k84kCUWTWnfWX3UDy2Delv4ryH0KqTD6RBI6k4yi9j9I8gl3j8MkPpRD/vWPZbug==} + prosemirror-tables@1.8.3: + resolution: {integrity: sha512-wbqCR/RlRPRe41a4LFtmhKElzBEfBTdtAYWNIGHM6X2e24NN/MTNUKyXjjphfAfdQce37Kh/5yf765mLPYDe7Q==} prosemirror-trailing-node@3.0.0: resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} @@ -3211,11 +3230,11 @@ packages: prosemirror-state: ^1.4.2 prosemirror-view: ^1.33.8 - prosemirror-transform@1.10.4: - resolution: {integrity: sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==} + prosemirror-transform@1.10.5: + resolution: {integrity: sha512-RPDQCxIDhIBb1o36xxwsaeAvivO8VLJcgBtzmOwQ64bMtsVFh5SSuJ6dWSxO1UsHTiTXPCgQm3PDJt7p6IOLbw==} - prosemirror-view@1.41.3: - resolution: {integrity: sha512-SqMiYMUQNNBP9kfPhLO8WXEk/fon47vc52FQsUiJzTBuyjKgEcoAwMyF04eQ4WZ2ArMn7+ReypYL60aKngbACQ==} + prosemirror-view@1.41.4: + resolution: {integrity: sha512-WkKgnyjNncri03Gjaz3IFWvCAE94XoiEgvtr0/r2Xw7R8/IjK3sKLSiDoCHWcsXSAinVaKlGRZDvMCsF1kbzjA==} proxy-from-env@1.0.0: resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} @@ -3250,13 +3269,13 @@ packages: resolution: {integrity: sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==} engines: {node: ^20.9.0 || >=22} - react-dom@19.2.0: - resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} + react-dom@19.2.3: + resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} peerDependencies: - react: ^19.2.0 + react: ^19.2.3 - react-hook-form@7.65.0: - resolution: {integrity: sha512-xtOzDz063WcXvGWaHgLNrNzlsdFgtUWcb32E6WFaGTd7kPZG3EeDusjdZfUsPwKCKVXy1ZlntifaHZ4l8pAsmw==} + 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 @@ -3276,9 +3295,6 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@19.2.0: - resolution: {integrity: sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==} - react-number-format@5.4.4: resolution: {integrity: sha512-wOmoNZoOpvMminhifQYiYSTCLUDOiUbBunrMrMjA+dV52sY+vck1S4UhR6PkgnoCquvvMSeJjErXZ4qSaWCliA==} peerDependencies: @@ -3311,8 +3327,8 @@ packages: '@types/react': optional: true - react-remove-scroll@2.7.1: - resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} engines: {node: '>=10'} peerDependencies: '@types/react': '*' @@ -3321,15 +3337,15 @@ packages: '@types/react': optional: true - react-router-dom@7.9.4: - resolution: {integrity: sha512-f30P6bIkmYvnHHa5Gcu65deIXoA2+r3Eb6PJIAddvsT9aGlchMatJ51GgpU470aSqRRbFX22T70yQNUGuW3DfA==} + react-router-dom@7.10.1: + resolution: {integrity: sha512-JNBANI6ChGVjA5bwsUIwJk7LHKmqB4JYnYfzFwyp2t12Izva11elds2jx7Yfoup2zssedntwU0oZ5DEmk5Sdaw==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.9.4: - resolution: {integrity: sha512-SD3G8HKviFHg9xj7dNODUKDFgpG4xqD5nhyd0mYoB5iISepuZAvzSr8ywxgxKJ52yRzf/HWtVHc9AWwoTbljvA==} + react-router@7.10.1: + resolution: {integrity: sha512-gHL89dRa3kwlUYtRQ+m8NmxGI6CgqN+k4XyGjwcFoQwwCWF6xXpOCUlDovkXClS0d0XJN/5q7kc5W3kiFEd0Yw==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -3354,8 +3370,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -3369,8 +3385,8 @@ packages: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} - recharts@3.3.0: - resolution: {integrity: sha512-Vi0qmTB0iz1+/Cz9o5B7irVyUjX2ynvEgImbgMt/3sKRREcUM07QiYjS1QpAVrkmVlXqy5gykq4nGWMz9AS4Rg==} + recharts@3.6.0: + resolution: {integrity: sha512-L5bjxvQRAe26RlToBAziKUB7whaGKEwD3znoM6fz3DrTowCIC/FnJYnuq1GEzB8Zv2kdTfaxQfi5GoH0tBinyg==} engines: {node: '>=18'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3430,8 +3446,8 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} hasBin: true @@ -3446,14 +3462,18 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.52.4: - resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==} + rollup@4.53.5: + resolution: {integrity: sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -3482,8 +3502,8 @@ packages: engines: {node: '>=10'} hasBin: true - set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -3560,8 +3580,8 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - storybook@10.1.4: - resolution: {integrity: sha512-FrBjm8I8O+pYEOPHcdW9xWwgXSZxte7lza9q2lN3jFN4vuW79m5j0OnTQeR8z9MmIbBTvkIpp3yMBebl53Yt5Q==} + storybook@10.1.9: + resolution: {integrity: sha512-gHW/jOxLNzVw/Ys1XJovgrMFyh37ftMsLIw0l0h4fLsEyXhUABwrgjDp5bWrUmbQqemAIYVAAtw7UjPEdcHgkA==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -3612,8 +3632,8 @@ packages: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true @@ -3632,20 +3652,20 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - systeminformation@5.27.7: - resolution: {integrity: sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==} + systeminformation@5.27.14: + resolution: {integrity: sha512-3DoNDYSZBLxBwaJtQGWNpq0fonga/VZ47HY1+7/G3YoIPaPz93Df6egSzzTKbEMmlzUpy3eQ0nR9REuYIycXGg==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tabbable@6.3.0: + resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==} - tailwind-merge@3.3.1: - resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} + tailwind-merge@3.4.0: + resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} - tailwindcss@3.4.18: - resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==} + tailwindcss@3.4.19: + resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -3795,8 +3815,8 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typescript-eslint@8.46.1: - resolution: {integrity: sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA==} + typescript-eslint@8.50.0: + resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3846,8 +3866,8 @@ packages: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -3944,8 +3964,8 @@ packages: peerDependencies: vite: '>=3' - vite@7.1.10: - resolution: {integrity: sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==} + vite@7.3.0: + resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3984,18 +4004,18 @@ packages: yaml: optional: true - vitest@4.0.15: - resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} + vitest@4.0.16: + resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.15 - '@vitest/browser-preview': 4.0.15 - '@vitest/browser-webdriverio': 4.0.15 - '@vitest/ui': 4.0.15 + '@vitest/browser-playwright': 4.0.16 + '@vitest/browser-preview': 4.0.16 + '@vitest/browser-webdriverio': 4.0.16 + '@vitest/ui': 4.0.16 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4092,6 +4112,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -4129,21 +4153,21 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod@4.1.13: - resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} + zod@4.2.1: + resolution: {integrity: sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@acemir/cssom@0.9.24': {} + '@acemir/cssom@0.9.29': {} '@adobe/css-tools@4.4.4': {} '@alloc/quick-lru@5.2.0': {} - '@asamuzakjp/css-color@4.1.0': + '@asamuzakjp/css-color@4.1.1': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) @@ -4151,7 +4175,7 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 11.2.4 - '@asamuzakjp/dom-selector@6.7.5': + '@asamuzakjp/dom-selector@6.7.6': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 @@ -4163,23 +4187,23 @@ snapshots: '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.4': {} + '@babel/compat-data@7.28.5': {} - '@babel/core@7.28.4': + '@babel/core@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 + '@babel/generator': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -4189,19 +4213,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.3': + '@babel/generator@7.28.5': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.4 + '@babel/compat-data': 7.28.5 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.26.3 + browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 @@ -4209,17 +4233,17 @@ snapshots: '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -4227,8 +4251,6 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-option@7.27.1': {} @@ -4236,24 +4258,20 @@ snapshots: '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - - '@babel/parser@7.28.4': - dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/parser@7.28.5': dependencies: '@babel/types': 7.28.5 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/runtime@7.28.4': {} @@ -4261,26 +4279,21 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 - '@babel/traverse@7.28.4': + '@babel/traverse@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 + '@babel/generator': 7.28.5 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/types@7.28.4': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -4292,31 +4305,31 @@ snapshots: dependencies: '@emoji-mart/data': 1.2.1 '@shikijs/types': 3.2.1 - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/extension-bold': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-code': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-gapcursor': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-history': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-horizontal-rule': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-italic': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-link': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-paragraph': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-strike': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-table-cell': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-table-header': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-text': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-underline': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/pm': 2.26.3 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/extension-bold': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/extension-code': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/extension-gapcursor': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) + '@tiptap/extension-history': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) + '@tiptap/extension-horizontal-rule': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) + '@tiptap/extension-italic': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/extension-link': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) + '@tiptap/extension-paragraph': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/extension-strike': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/extension-table-cell': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/extension-table-header': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/extension-text': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/extension-underline': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/pm': 2.27.1 emoji-mart: 5.6.0 fast-deep-equal: 3.1.3 hast-util-from-dom: 5.0.1 prosemirror-dropcursor: 1.8.2 - prosemirror-highlight: 0.13.0(@shikijs/types@3.2.1)(@types/hast@3.0.4)(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-transform@1.10.4)(prosemirror-view@1.41.3) - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-tables: 1.8.1 - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 + prosemirror-highlight: 0.13.0(@shikijs/types@3.2.1)(@types/hast@3.0.4)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-transform@1.10.5)(prosemirror-view@1.41.4) + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-tables: 1.8.3 + prosemirror-transform: 1.10.5 + prosemirror-view: 1.41.4 rehype-format: 5.0.1 rehype-parse: 9.0.1 rehype-remark: 10.0.1 @@ -4327,7 +4340,7 @@ snapshots: remark-stringify: 11.0.0 unified: 11.0.5 uuid: 8.3.2 - y-prosemirror: 1.3.7(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) + y-prosemirror: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) y-protocols: 1.0.6(yjs@13.6.27) yjs: 13.6.27 transitivePeerDependencies: @@ -4338,16 +4351,16 @@ snapshots: - sugar-high - supports-color - '@blocknote/mantine@0.37.0(@types/hast@3.0.4)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@blocknote/mantine@0.37.0(@types/hast@3.0.4)(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@blocknote/core': 0.37.0(@types/hast@3.0.4) - '@blocknote/react': 0.37.0(@types/hast@3.0.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@mantine/core': 7.17.8(@mantine/hooks@7.17.8(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@mantine/hooks': 7.17.8(react@19.2.0) - '@mantine/utils': 6.0.22(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-icons: 5.5.0(react@19.2.0) + '@blocknote/react': 0.37.0(@types/hast@3.0.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@mantine/core': 7.17.8(@mantine/hooks@7.17.8(react@19.2.3))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@mantine/hooks': 7.17.8(react@19.2.3) + '@mantine/utils': 6.0.22(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-icons: 5.5.0(react@19.2.3) transitivePeerDependencies: - '@hocuspocus/provider' - '@types/hast' @@ -4358,19 +4371,19 @@ snapshots: - sugar-high - supports-color - '@blocknote/react@0.37.0(@types/hast@3.0.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@blocknote/react@0.37.0(@types/hast@3.0.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@blocknote/core': 0.37.0(@types/hast@3.0.4) '@emoji-mart/data': 1.2.1 - '@floating-ui/react': 0.26.28(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 - '@tiptap/react': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@floating-ui/react': 0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/pm': 2.27.1 + '@tiptap/react': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) emoji-mart: 5.6.0 lodash.merge: 4.6.2 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-icons: 5.5.0(react@19.2.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-icons: 5.5.0(react@19.2.3) transitivePeerDependencies: - '@hocuspocus/provider' - '@types/hast' @@ -4380,13 +4393,13 @@ snapshots: - sugar-high - supports-color - '@chromatic-com/storybook@4.1.3(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': + '@chromatic-com/storybook@4.1.3(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@neoconfetti/react': 1.0.0 chromatic: 13.3.4 filesize: 10.1.6 jsonfile: 6.2.0 - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) strip-ansi: 7.1.2 transitivePeerDependencies: - '@chromatic-com/cypress' @@ -4410,7 +4423,9 @@ snapshots: dependencies: '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-syntax-patches-for-csstree@1.0.20': {} + '@csstools/css-syntax-patches-for-csstree@1.0.14(postcss@8.5.6)': + dependencies: + postcss: 8.5.6 '@csstools/css-tokenizer@3.0.4': {} @@ -4422,7 +4437,7 @@ snapshots: combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 - form-data: 4.0.4 + form-data: 4.0.5 http-signature: 1.4.0 is-typedarray: 1.0.0 isstream: 0.1.2 @@ -4462,108 +4477,108 @@ snapshots: '@emoji-mart/data@1.2.1': {} - '@esbuild/aix-ppc64@0.25.11': + '@esbuild/aix-ppc64@0.27.1': optional: true - '@esbuild/android-arm64@0.25.11': + '@esbuild/android-arm64@0.27.1': optional: true - '@esbuild/android-arm@0.25.11': + '@esbuild/android-arm@0.27.1': optional: true - '@esbuild/android-x64@0.25.11': + '@esbuild/android-x64@0.27.1': optional: true - '@esbuild/darwin-arm64@0.25.11': + '@esbuild/darwin-arm64@0.27.1': optional: true - '@esbuild/darwin-x64@0.25.11': + '@esbuild/darwin-x64@0.27.1': optional: true - '@esbuild/freebsd-arm64@0.25.11': + '@esbuild/freebsd-arm64@0.27.1': optional: true - '@esbuild/freebsd-x64@0.25.11': + '@esbuild/freebsd-x64@0.27.1': optional: true - '@esbuild/linux-arm64@0.25.11': + '@esbuild/linux-arm64@0.27.1': optional: true - '@esbuild/linux-arm@0.25.11': + '@esbuild/linux-arm@0.27.1': optional: true - '@esbuild/linux-ia32@0.25.11': + '@esbuild/linux-ia32@0.27.1': optional: true - '@esbuild/linux-loong64@0.25.11': + '@esbuild/linux-loong64@0.27.1': optional: true - '@esbuild/linux-mips64el@0.25.11': + '@esbuild/linux-mips64el@0.27.1': optional: true - '@esbuild/linux-ppc64@0.25.11': + '@esbuild/linux-ppc64@0.27.1': optional: true - '@esbuild/linux-riscv64@0.25.11': + '@esbuild/linux-riscv64@0.27.1': optional: true - '@esbuild/linux-s390x@0.25.11': + '@esbuild/linux-s390x@0.27.1': optional: true - '@esbuild/linux-x64@0.25.11': + '@esbuild/linux-x64@0.27.1': optional: true - '@esbuild/netbsd-arm64@0.25.11': + '@esbuild/netbsd-arm64@0.27.1': optional: true - '@esbuild/netbsd-x64@0.25.11': + '@esbuild/netbsd-x64@0.27.1': optional: true - '@esbuild/openbsd-arm64@0.25.11': + '@esbuild/openbsd-arm64@0.27.1': optional: true - '@esbuild/openbsd-x64@0.25.11': + '@esbuild/openbsd-x64@0.27.1': optional: true - '@esbuild/openharmony-arm64@0.25.11': + '@esbuild/openharmony-arm64@0.27.1': optional: true - '@esbuild/sunos-x64@0.25.11': + '@esbuild/sunos-x64@0.27.1': optional: true - '@esbuild/win32-arm64@0.25.11': + '@esbuild/win32-arm64@0.27.1': optional: true - '@esbuild/win32-ia32@0.25.11': + '@esbuild/win32-ia32@0.27.1': optional: true - '@esbuild/win32-x64@0.25.11': + '@esbuild/win32-x64@0.27.1': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@1.21.7))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@1.21.7))': dependencies: - eslint: 9.37.0(jiti@1.21.7) + eslint: 9.39.2(jiti@1.21.7) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.0': + '@eslint/config-array@0.21.1': dependencies: - '@eslint/object-schema': 2.1.6 + '@eslint/object-schema': 2.1.7 debug: 4.4.3(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.0': + '@eslint/config-helpers@0.4.2': dependencies: - '@eslint/core': 0.16.0 + '@eslint/core': 0.17.0 - '@eslint/core@0.16.0': + '@eslint/core@0.17.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': + '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 debug: 4.4.3(supports-color@8.1.1) @@ -4571,19 +4586,19 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@9.37.0': {} + '@eslint/js@9.39.2': {} - '@eslint/object-schema@2.1.6': {} + '@eslint/object-schema@2.1.7': {} - '@eslint/plugin-kit@0.4.0': + '@eslint/plugin-kit@0.4.1': dependencies: - '@eslint/core': 0.16.0 + '@eslint/core': 0.17.0 levn: 0.4.1 '@floating-ui/core@1.7.3': @@ -4595,26 +4610,26 @@ snapshots: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@floating-ui/react-dom@2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@floating-ui/dom': 1.7.4 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - '@floating-ui/react@0.26.28(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@floating-ui/react@0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@floating-ui/react-dom': 2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@floating-ui/utils': 0.2.10 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - tabbable: 6.2.0 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + tabbable: 6.3.0 '@floating-ui/utils@0.2.10': {} - '@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.0))': + '@hookform/resolvers@5.2.2(react-hook-form@7.68.0(react@19.2.3))': dependencies: '@standard-schema/utils': 0.3.0 - react-hook-form: 7.65.0(react@19.2.0) + react-hook-form: 7.68.0(react@19.2.3) '@humanfs/core@0.19.1': {} @@ -4636,12 +4651,11 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.8.3)(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.3(typescript@5.8.3)(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))': dependencies: glob: 10.5.0 - magic-string: 0.30.21 react-docgen-typescript: 2.4.0(typescript@5.8.3) - vite: 7.1.10(@types/node@24.10.1)(jiti@1.21.7) + vite: 7.3.0(@types/node@25.0.3)(jiti@1.21.7) optionalDependencies: typescript: 5.8.3 @@ -4664,33 +4678,33 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@mantine/core@7.17.8(@mantine/hooks@7.17.8(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@mantine/core@7.17.8(@mantine/hooks@7.17.8(react@19.2.3))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@floating-ui/react': 0.26.28(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@mantine/hooks': 7.17.8(react@19.2.0) + '@floating-ui/react': 0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@mantine/hooks': 7.17.8(react@19.2.3) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-number-format: 5.4.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) - react-textarea-autosize: 8.5.9(@types/react@19.2.2)(react@19.2.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-number-format: 5.4.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-remove-scroll: 2.7.2(@types/react@19.2.7)(react@19.2.3) + react-textarea-autosize: 8.5.9(@types/react@19.2.7)(react@19.2.3) type-fest: 4.41.0 transitivePeerDependencies: - '@types/react' - '@mantine/hooks@7.17.8(react@19.2.0)': + '@mantine/hooks@7.17.8(react@19.2.3)': dependencies: - react: 19.2.0 + react: 19.2.3 - '@mantine/utils@6.0.22(react@19.2.0)': + '@mantine/utils@6.0.22(react@19.2.3)': dependencies: - react: 19.2.0 + react: 19.2.3 - '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)': + '@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.3)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.2.2 - react: 19.2.0 + '@types/react': 19.2.7 + react: 19.2.3 '@napi-rs/wasm-runtime@1.1.0': dependencies: @@ -4782,94 +4796,94 @@ snapshots: '@popperjs/core@2.11.8': {} - '@reduxjs/toolkit@2.9.1(react-redux@9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1))(react@19.2.0)': + '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1))(react@19.2.3)': dependencies: - '@standard-schema/spec': 1.0.0 + '@standard-schema/spec': 1.1.0 '@standard-schema/utils': 0.3.0 - immer: 10.1.3 + immer: 11.0.1 redux: 5.0.1 redux-thunk: 3.1.0(redux@5.0.1) reselect: 5.1.1 optionalDependencies: - react: 19.2.0 - react-redux: 9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1) + react: 19.2.3 + react-redux: 9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1) '@remirror/core-constants@3.0.0': {} '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/pluginutils@5.3.0(rollup@4.52.4)': + '@rollup/pluginutils@5.3.0(rollup@4.53.5)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.52.4 + rollup: 4.53.5 - '@rollup/rollup-android-arm-eabi@4.52.4': + '@rollup/rollup-android-arm-eabi@4.53.5': optional: true - '@rollup/rollup-android-arm64@4.52.4': + '@rollup/rollup-android-arm64@4.53.5': optional: true - '@rollup/rollup-darwin-arm64@4.52.4': + '@rollup/rollup-darwin-arm64@4.53.5': optional: true - '@rollup/rollup-darwin-x64@4.52.4': + '@rollup/rollup-darwin-x64@4.53.5': optional: true - '@rollup/rollup-freebsd-arm64@4.52.4': + '@rollup/rollup-freebsd-arm64@4.53.5': optional: true - '@rollup/rollup-freebsd-x64@4.52.4': + '@rollup/rollup-freebsd-x64@4.53.5': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.52.4': + '@rollup/rollup-linux-arm-gnueabihf@4.53.5': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.52.4': + '@rollup/rollup-linux-arm-musleabihf@4.53.5': optional: true - '@rollup/rollup-linux-arm64-gnu@4.52.4': + '@rollup/rollup-linux-arm64-gnu@4.53.5': optional: true - '@rollup/rollup-linux-arm64-musl@4.52.4': + '@rollup/rollup-linux-arm64-musl@4.53.5': optional: true - '@rollup/rollup-linux-loong64-gnu@4.52.4': + '@rollup/rollup-linux-loong64-gnu@4.53.5': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.52.4': + '@rollup/rollup-linux-ppc64-gnu@4.53.5': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.52.4': + '@rollup/rollup-linux-riscv64-gnu@4.53.5': optional: true - '@rollup/rollup-linux-riscv64-musl@4.52.4': + '@rollup/rollup-linux-riscv64-musl@4.53.5': optional: true - '@rollup/rollup-linux-s390x-gnu@4.52.4': + '@rollup/rollup-linux-s390x-gnu@4.53.5': optional: true - '@rollup/rollup-linux-x64-gnu@4.52.4': + '@rollup/rollup-linux-x64-gnu@4.53.5': optional: true - '@rollup/rollup-linux-x64-musl@4.52.4': + '@rollup/rollup-linux-x64-musl@4.53.5': optional: true - '@rollup/rollup-openharmony-arm64@4.52.4': + '@rollup/rollup-openharmony-arm64@4.53.5': optional: true - '@rollup/rollup-win32-arm64-msvc@4.52.4': + '@rollup/rollup-win32-arm64-msvc@4.53.5': optional: true - '@rollup/rollup-win32-ia32-msvc@4.52.4': + '@rollup/rollup-win32-ia32-msvc@4.53.5': optional: true - '@rollup/rollup-win32-x64-gnu@4.52.4': + '@rollup/rollup-win32-x64-gnu@4.53.5': optional: true - '@rollup/rollup-win32-x64-msvc@4.52.4': + '@rollup/rollup-win32-x64-msvc@4.53.5': optional: true '@shikijs/types@3.2.1': @@ -4879,25 +4893,25 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} - '@standard-schema/spec@1.0.0': {} + '@standard-schema/spec@1.1.0': {} '@standard-schema/utils@0.3.0': {} - '@storybook/addon-a11y@10.1.4(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': + '@storybook/addon-a11y@10.1.9(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@storybook/global': 5.0.0 axe-core: 4.11.0 - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/addon-docs@10.1.4(@types/react@19.2.2)(esbuild@0.25.11)(rollup@4.52.4)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))': + '@storybook/addon-docs@10.1.9(@types/react@19.2.7)(esbuild@0.27.1)(rollup@4.53.5)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))': dependencies: - '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) - '@storybook/csf-plugin': 10.1.4(esbuild@0.25.11)(rollup@4.52.4)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) - '@storybook/icons': 2.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@storybook/react-dom-shim': 10.1.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@mdx-js/react': 3.1.1(@types/react@19.2.7)(react@19.2.3) + '@storybook/csf-plugin': 10.1.9(esbuild@0.27.1)(rollup@4.53.5)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) + '@storybook/icons': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@storybook/react-dom-shim': 10.1.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -4906,99 +4920,99 @@ snapshots: - vite - webpack - '@storybook/addon-onboarding@10.1.4(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': + '@storybook/addon-onboarding@10.1.9(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/addon-vitest@10.1.4(@vitest/browser-playwright@4.0.15)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.0.15)': + '@storybook/addon-vitest@10.1.9(@vitest/browser-playwright@4.0.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vitest@4.0.16)': dependencies: '@storybook/global': 5.0.0 - '@storybook/icons': 2.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@storybook/icons': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) optionalDependencies: - '@vitest/browser-playwright': 4.0.15(playwright@1.57.0)(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))(vitest@4.0.15) - vitest: 4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.7)(jsdom@27.2.0) + '@vitest/browser-playwright': 4.0.16(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))(vitest@4.0.16) + vitest: 4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(jiti@1.21.7)(jsdom@27.3.0(postcss@8.5.6)) transitivePeerDependencies: - react - react-dom - '@storybook/builder-vite@10.1.4(esbuild@0.25.11)(rollup@4.52.4)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))': + '@storybook/builder-vite@10.1.9(esbuild@0.27.1)(rollup@4.53.5)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))': dependencies: - '@storybook/csf-plugin': 10.1.4(esbuild@0.25.11)(rollup@4.52.4)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) - '@vitest/mocker': 3.2.4(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@storybook/csf-plugin': 10.1.9(esbuild@0.27.1)(rollup@4.53.5)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) + '@vitest/mocker': 3.2.4(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-dedent: 2.2.0 - vite: 7.1.10(@types/node@24.10.1)(jiti@1.21.7) + vite: 7.3.0(@types/node@25.0.3)(jiti@1.21.7) transitivePeerDependencies: - esbuild - msw - rollup - webpack - '@storybook/csf-plugin@10.1.4(esbuild@0.25.11)(rollup@4.52.4)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))': + '@storybook/csf-plugin@10.1.9(esbuild@0.27.1)(rollup@4.53.5)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))': dependencies: - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) unplugin: 2.3.11 optionalDependencies: - esbuild: 0.25.11 - rollup: 4.52.4 - vite: 7.1.10(@types/node@24.10.1)(jiti@1.21.7) + esbuild: 0.27.1 + rollup: 4.53.5 + vite: 7.3.0(@types/node@25.0.3)(jiti@1.21.7) - '@storybook/experimental-addon-test@8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.0.15)': + '@storybook/experimental-addon-test@8.6.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vitest@4.0.16)': dependencies: '@storybook/global': 5.0.0 - '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@storybook/instrumenter': 8.6.14(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) - '@storybook/test': 8.6.14(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + '@storybook/icons': 1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@storybook/instrumenter': 8.6.14(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@storybook/test': 8.6.14(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) polished: 4.3.1 prompts: 2.4.2 - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-dedent: 2.2.0 optionalDependencies: - vitest: 4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.7)(jsdom@27.2.0) + vitest: 4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(jiti@1.21.7)(jsdom@27.3.0(postcss@8.5.6)) transitivePeerDependencies: - react - react-dom '@storybook/global@5.0.0': {} - '@storybook/icons@1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@storybook/icons@1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - '@storybook/icons@2.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@storybook/icons@2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - '@storybook/instrumenter@8.6.14(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': + '@storybook/instrumenter@8.6.14(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.9 - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/react-dom-shim@10.1.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': + '@storybook/react-dom-shim@10.1.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/react-vite@10.1.4(esbuild@0.25.11)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.52.4)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.8.3)(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))': + '@storybook/react-vite@10.1.9(esbuild@0.27.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.53.5)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.8.3)(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.8.3)(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) - '@rollup/pluginutils': 5.3.0(rollup@4.52.4) - '@storybook/builder-vite': 10.1.4(esbuild@0.25.11)(rollup@4.52.4)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) - '@storybook/react': 10.1.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.8.3) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.3(typescript@5.8.3)(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) + '@rollup/pluginutils': 5.3.0(rollup@4.53.5) + '@storybook/builder-vite': 10.1.9(esbuild@0.27.1)(rollup@4.53.5)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) + '@storybook/react': 10.1.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.8.3) empathic: 2.0.0 magic-string: 0.30.21 - react: 19.2.0 + react: 19.2.3 react-docgen: 8.0.2 - react-dom: 19.2.0(react@19.2.0) - resolve: 1.22.10 - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react-dom: 19.2.3(react@19.2.3) + resolve: 1.22.11 + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tsconfig-paths: 4.2.0 - vite: 7.1.10(@types/node@24.10.1)(jiti@1.21.7) + vite: 7.3.0(@types/node@25.0.3)(jiti@1.21.7) transitivePeerDependencies: - esbuild - msw @@ -5007,44 +5021,44 @@ snapshots: - typescript - webpack - '@storybook/react@10.1.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.8.3)': + '@storybook/react@10.1.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.8.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 10.1.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) - react: 19.2.0 + '@storybook/react-dom-shim': 10.1.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + react: 19.2.3 react-docgen: 8.0.2 - react-dom: 19.2.0(react@19.2.0) - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react-dom: 19.2.3(react@19.2.3) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@storybook/test@8.6.14(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': + '@storybook/test@8.6.14(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.14(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + '@storybook/instrumenter': 8.6.14(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@tanstack/query-core@5.90.5': {} + '@tanstack/query-core@5.90.12': {} - '@tanstack/query-devtools@5.90.1': {} + '@tanstack/query-devtools@5.91.1': {} - '@tanstack/react-query-devtools@5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(react@19.2.0)': + '@tanstack/react-query-devtools@5.91.1(@tanstack/react-query@5.90.12(react@19.2.3))(react@19.2.3)': dependencies: - '@tanstack/query-devtools': 5.90.1 - '@tanstack/react-query': 5.90.5(react@19.2.0) - react: 19.2.0 + '@tanstack/query-devtools': 5.91.1 + '@tanstack/react-query': 5.90.12(react@19.2.3) + react: 19.2.3 - '@tanstack/react-query@5.90.5(react@19.2.0)': + '@tanstack/react-query@5.90.12(react@19.2.3)': dependencies: - '@tanstack/query-core': 5.90.5 - react: 19.2.0 + '@tanstack/query-core': 5.90.12 + react: 19.2.3 '@testing-library/dom@10.4.0': dependencies: @@ -5087,15 +5101,15 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@testing-library/react@16.3.1(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 '@testing-library/dom': 10.4.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': dependencies: @@ -5105,111 +5119,111 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@tiptap/core@2.26.3(@tiptap/pm@2.26.3)': + '@tiptap/core@2.27.1(@tiptap/pm@2.27.1)': dependencies: - '@tiptap/pm': 2.26.3 + '@tiptap/pm': 2.27.1 - '@tiptap/extension-bold@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': + '@tiptap/extension-bold@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-bubble-menu@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': + '@tiptap/extension-bubble-menu@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/pm': 2.27.1 tippy.js: 6.3.7 - '@tiptap/extension-code@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': + '@tiptap/extension-code@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-floating-menu@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': + '@tiptap/extension-floating-menu@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/pm': 2.27.1 tippy.js: 6.3.7 - '@tiptap/extension-gapcursor@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': + '@tiptap/extension-gapcursor@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/pm': 2.27.1 - '@tiptap/extension-history@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': + '@tiptap/extension-history@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/pm': 2.27.1 - '@tiptap/extension-horizontal-rule@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': + '@tiptap/extension-horizontal-rule@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/pm': 2.27.1 - '@tiptap/extension-italic@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': + '@tiptap/extension-italic@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-link@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': + '@tiptap/extension-link@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/pm': 2.27.1 linkifyjs: 4.3.2 - '@tiptap/extension-paragraph@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': + '@tiptap/extension-paragraph@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-strike@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': + '@tiptap/extension-strike@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-table-cell@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': + '@tiptap/extension-table-cell@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-table-header@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': + '@tiptap/extension-table-header@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-text@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': + '@tiptap/extension-text@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-underline@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': + '@tiptap/extension-underline@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/pm@2.26.3': + '@tiptap/pm@2.27.1': dependencies: prosemirror-changeset: 2.3.1 prosemirror-collab: 1.3.1 prosemirror-commands: 1.7.1 prosemirror-dropcursor: 1.8.2 prosemirror-gapcursor: 1.4.0 - prosemirror-history: 1.4.1 + prosemirror-history: 1.5.0 prosemirror-inputrules: 1.5.1 prosemirror-keymap: 1.2.3 prosemirror-markdown: 1.13.2 prosemirror-menu: 1.2.5 - prosemirror-model: 1.25.3 + prosemirror-model: 1.25.4 prosemirror-schema-basic: 1.2.4 prosemirror-schema-list: 1.5.1 - prosemirror-state: 1.4.3 - prosemirror-tables: 1.8.1 - prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3) - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 - - '@tiptap/react@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/extension-bubble-menu': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-floating-menu': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 + prosemirror-state: 1.4.4 + prosemirror-tables: 1.8.3 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4) + prosemirror-transform: 1.10.5 + prosemirror-view: 1.41.4 + + '@tiptap/react@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/extension-bubble-menu': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) + '@tiptap/extension-floating-menu': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) + '@tiptap/pm': 2.27.1 '@types/use-sync-external-store': 0.0.6 fast-deep-equal: 3.1.3 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - use-sync-external-store: 1.6.0(react@19.2.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.3) '@tweenjs/tween.js@23.1.3': {} @@ -5222,24 +5236,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@types/chai@5.2.3': dependencies: @@ -5303,17 +5317,17 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.10.1': + '@types/node@25.0.3': dependencies: undici-types: 7.16.0 - '@types/react-dom@19.2.2(@types/react@19.2.2)': + '@types/react-dom@19.2.3(@types/react@19.2.7)': dependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - '@types/react@19.2.2': + '@types/react@19.2.7': dependencies: - csstype: 3.1.3 + csstype: 3.2.3 '@types/resolve@1.20.6': {} @@ -5329,7 +5343,7 @@ snapshots: '@tweenjs/tween.js': 23.1.3 '@types/stats.js': 0.17.4 '@types/webxr': 0.5.24 - '@webgpu/types': 0.1.66 + '@webgpu/types': 0.1.68 fflate: 0.8.2 meshoptimizer: 0.22.0 @@ -5343,19 +5357,18 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.3 optional: true - '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/type-utils': 8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.46.1 - eslint: 9.37.0(jiti@1.21.7) - graphemer: 1.4.0 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.50.0 + eslint: 9.39.2(jiti@1.21.7) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.8.3) @@ -5363,119 +5376,118 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3)': + '@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.50.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.37.0(jiti@1.21.7) + eslint: 9.39.2(jiti@1.21.7) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.1(typescript@5.8.3)': + '@typescript-eslint/project-service@8.50.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.8.3) - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.8.3) + '@typescript-eslint/types': 8.50.0 debug: 4.4.3(supports-color@8.1.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.46.1': + '@typescript-eslint/scope-manager@8.50.0': dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/visitor-keys': 8.50.0 - '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.37.0(jiti@1.21.7) + eslint: 9.39.2(jiti@1.21.7) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.46.1': {} + '@typescript-eslint/types@8.50.0': {} - '@typescript-eslint/typescript-estree@8.46.1(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.50.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.46.1(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.8.3) - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/project-service': 8.50.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.8.3) + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/visitor-keys': 8.50.0 debug: 4.4.3(supports-color@8.1.1) - fast-glob: 3.3.3 - is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 + tinyglobby: 0.2.15 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3)': + '@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@1.21.7)) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.8.3) - eslint: 9.37.0(jiti@1.21.7) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3) + eslint: 9.39.2(jiti@1.21.7) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.46.1': + '@typescript-eslint/visitor-keys@8.50.0': dependencies: - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.50.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.7.0(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))': + '@vitejs/plugin-react@4.7.0(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))': dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.1.10(@types/node@24.10.1)(jiti@1.21.7) + vite: 7.3.0(@types/node@25.0.3)(jiti@1.21.7) transitivePeerDependencies: - supports-color - '@vitest/browser-playwright@4.0.15(playwright@1.57.0)(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))(vitest@4.0.15)': + '@vitest/browser-playwright@4.0.16(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))(vitest@4.0.16)': dependencies: - '@vitest/browser': 4.0.15(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))(vitest@4.0.15) - '@vitest/mocker': 4.0.15(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) + '@vitest/browser': 4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))(vitest@4.0.16) + '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) playwright: 1.57.0 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.7)(jsdom@27.2.0) + vitest: 4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(jiti@1.21.7)(jsdom@27.3.0(postcss@8.5.6)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.0.15(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))(vitest@4.0.15)': + '@vitest/browser@4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))(vitest@4.0.16)': dependencies: - '@vitest/mocker': 4.0.15(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) - '@vitest/utils': 4.0.15 + '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) + '@vitest/utils': 4.0.16 magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.7)(jsdom@27.2.0) + vitest: 4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(jiti@1.21.7)(jsdom@27.3.0(postcss@8.5.6)) ws: 8.18.3 transitivePeerDependencies: - bufferutil @@ -5483,11 +5495,11 @@ snapshots: - utf-8-validate - vite - '@vitest/coverage-v8@4.0.15(vitest@4.0.15)': + '@vitest/coverage-v8@4.0.16(vitest@4.0.16)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.15 - ast-v8-to-istanbul: 0.3.8 + '@vitest/utils': 4.0.16 + ast-v8-to-istanbul: 0.3.9 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -5496,7 +5508,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.7)(jsdom@27.2.0) + vitest: 4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(jiti@1.21.7)(jsdom@27.3.0(postcss@8.5.6)) transitivePeerDependencies: - supports-color @@ -5515,30 +5527,30 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/expect@4.0.15': + '@vitest/expect@4.0.16': dependencies: - '@standard-schema/spec': 1.0.0 + '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.15 - '@vitest/utils': 4.0.15 + '@vitest/spy': 4.0.16 + '@vitest/utils': 4.0.16 chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))': + '@vitest/mocker@3.2.4(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.1.10(@types/node@24.10.1)(jiti@1.21.7) + vite: 7.3.0(@types/node@25.0.3)(jiti@1.21.7) - '@vitest/mocker@4.0.15(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))': + '@vitest/mocker@4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))': dependencies: - '@vitest/spy': 4.0.15 + '@vitest/spy': 4.0.16 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.1.10(@types/node@24.10.1)(jiti@1.21.7) + vite: 7.3.0(@types/node@25.0.3)(jiti@1.21.7) '@vitest/pretty-format@2.0.5': dependencies: @@ -5552,18 +5564,18 @@ snapshots: dependencies: tinyrainbow: 2.0.0 - '@vitest/pretty-format@4.0.15': + '@vitest/pretty-format@4.0.16': dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.15': + '@vitest/runner@4.0.16': dependencies: - '@vitest/utils': 4.0.15 + '@vitest/utils': 4.0.16 pathe: 2.0.3 - '@vitest/snapshot@4.0.15': + '@vitest/snapshot@4.0.16': dependencies: - '@vitest/pretty-format': 4.0.15 + '@vitest/pretty-format': 4.0.16 magic-string: 0.30.21 pathe: 2.0.3 @@ -5575,7 +5587,7 @@ snapshots: dependencies: tinyspy: 4.0.4 - '@vitest/spy@4.0.15': {} + '@vitest/spy@4.0.16': {} '@vitest/utils@2.0.5': dependencies: @@ -5596,12 +5608,12 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@vitest/utils@4.0.15': + '@vitest/utils@4.0.16': dependencies: - '@vitest/pretty-format': 4.0.15 + '@vitest/pretty-format': 4.0.16 tinyrainbow: 3.0.3 - '@webgpu/types@0.1.66': {} + '@webgpu/types@0.1.68': {} acorn-jsx@5.3.2(acorn@8.15.0): dependencies: @@ -5672,7 +5684,7 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.8: + ast-v8-to-istanbul@0.3.9: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -5684,12 +5696,11 @@ snapshots: at-least-node@1.0.0: {} - autoprefixer@10.4.21(postcss@8.5.6): + autoprefixer@10.4.23(postcss@8.5.6): dependencies: - browserslist: 4.26.3 - caniuse-lite: 1.0.30001751 - fraction.js: 4.3.7 - normalize-range: 0.1.2 + browserslist: 4.28.1 + caniuse-lite: 1.0.30001760 + fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -5700,10 +5711,10 @@ snapshots: axe-core@4.11.0: {} - axios@1.12.2(debug@4.4.3): + axios@1.13.2(debug@4.4.3): dependencies: follow-redirects: 1.15.11(debug@4.4.3) - form-data: 4.0.4 + form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -5714,7 +5725,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.8.17: {} + baseline-browser-mapping@2.9.8: {} bcrypt-pbkdf@1.0.2: dependencies: @@ -5743,13 +5754,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.26.3: + browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.8.17 - caniuse-lite: 1.0.30001751 - electron-to-chromium: 1.5.237 - node-releases: 2.0.25 - update-browserslist-db: 1.1.3(browserslist@4.26.3) + baseline-browser-mapping: 2.9.8 + caniuse-lite: 1.0.30001760 + electron-to-chromium: 1.5.267 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) buffer-crc32@0.2.13: {} @@ -5758,6 +5769,10 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + cachedir@2.4.0: {} call-bind-apply-helpers@1.0.2: @@ -5774,7 +5789,7 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001751: {} + caniuse-lite@1.0.30001760: {} caseless@0.12.0: {} @@ -5870,7 +5885,7 @@ snapshots: convert-source-map@2.0.0: {} - cookie@1.0.2: {} + cookie@1.1.1: {} core-util-is@1.0.2: {} @@ -5891,13 +5906,15 @@ snapshots: cssesc@3.0.0: {} - cssstyle@5.3.3: + cssstyle@5.3.4(postcss@8.5.6): dependencies: - '@asamuzakjp/css-color': 4.1.0 - '@csstools/css-syntax-patches-for-csstree': 1.0.20 + '@asamuzakjp/css-color': 4.1.1 + '@csstools/css-syntax-patches-for-csstree': 1.0.14(postcss@8.5.6) css-tree: 3.1.0 + transitivePeerDependencies: + - postcss - csstype@3.1.3: {} + csstype@3.2.3: {} cypress@15.7.1: dependencies: @@ -5938,7 +5955,7 @@ snapshots: proxy-from-env: 1.0.0 request-progress: 3.0.0 supports-color: 8.1.1 - systeminformation: 5.27.7 + systeminformation: 5.27.14 tmp: 0.2.5 tree-kill: 1.2.2 untildify: 4.0.0 @@ -6017,6 +6034,15 @@ snapshots: deep-is@0.1.4: {} + default-browser-id@5.0.1: {} + + default-browser@5.4.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-lazy-prop@3.0.0: {} + delayed-stream@1.0.0: {} dequal@2.0.3: {} @@ -6052,7 +6078,7 @@ snapshots: jsbn: 0.1.1 safer-buffer: 2.1.2 - electron-to-chromium@1.5.237: {} + electron-to-chromium@1.5.267: {} emoji-mart@5.6.0: {} @@ -6092,36 +6118,36 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es-toolkit@1.40.0: {} + es-toolkit@1.43.0: {} - esbuild@0.25.11: + esbuild@0.27.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.11 - '@esbuild/android-arm': 0.25.11 - '@esbuild/android-arm64': 0.25.11 - '@esbuild/android-x64': 0.25.11 - '@esbuild/darwin-arm64': 0.25.11 - '@esbuild/darwin-x64': 0.25.11 - '@esbuild/freebsd-arm64': 0.25.11 - '@esbuild/freebsd-x64': 0.25.11 - '@esbuild/linux-arm': 0.25.11 - '@esbuild/linux-arm64': 0.25.11 - '@esbuild/linux-ia32': 0.25.11 - '@esbuild/linux-loong64': 0.25.11 - '@esbuild/linux-mips64el': 0.25.11 - '@esbuild/linux-ppc64': 0.25.11 - '@esbuild/linux-riscv64': 0.25.11 - '@esbuild/linux-s390x': 0.25.11 - '@esbuild/linux-x64': 0.25.11 - '@esbuild/netbsd-arm64': 0.25.11 - '@esbuild/netbsd-x64': 0.25.11 - '@esbuild/openbsd-arm64': 0.25.11 - '@esbuild/openbsd-x64': 0.25.11 - '@esbuild/openharmony-arm64': 0.25.11 - '@esbuild/sunos-x64': 0.25.11 - '@esbuild/win32-arm64': 0.25.11 - '@esbuild/win32-ia32': 0.25.11 - '@esbuild/win32-x64': 0.25.11 + '@esbuild/aix-ppc64': 0.27.1 + '@esbuild/android-arm': 0.27.1 + '@esbuild/android-arm64': 0.27.1 + '@esbuild/android-x64': 0.27.1 + '@esbuild/darwin-arm64': 0.27.1 + '@esbuild/darwin-x64': 0.27.1 + '@esbuild/freebsd-arm64': 0.27.1 + '@esbuild/freebsd-x64': 0.27.1 + '@esbuild/linux-arm': 0.27.1 + '@esbuild/linux-arm64': 0.27.1 + '@esbuild/linux-ia32': 0.27.1 + '@esbuild/linux-loong64': 0.27.1 + '@esbuild/linux-mips64el': 0.27.1 + '@esbuild/linux-ppc64': 0.27.1 + '@esbuild/linux-riscv64': 0.27.1 + '@esbuild/linux-s390x': 0.27.1 + '@esbuild/linux-x64': 0.27.1 + '@esbuild/netbsd-arm64': 0.27.1 + '@esbuild/netbsd-x64': 0.27.1 + '@esbuild/openbsd-arm64': 0.27.1 + '@esbuild/openbsd-x64': 0.27.1 + '@esbuild/openharmony-arm64': 0.27.1 + '@esbuild/sunos-x64': 0.27.1 + '@esbuild/win32-arm64': 0.27.1 + '@esbuild/win32-ia32': 0.27.1 + '@esbuild/win32-x64': 0.27.1 escalade@3.2.0: {} @@ -6131,19 +6157,19 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-plugin-react-hooks@5.2.0(eslint@9.37.0(jiti@1.21.7)): + eslint-plugin-react-hooks@5.2.0(eslint@9.39.2(jiti@1.21.7)): dependencies: - eslint: 9.37.0(jiti@1.21.7) + eslint: 9.39.2(jiti@1.21.7) - eslint-plugin-react-refresh@0.4.24(eslint@9.37.0(jiti@1.21.7)): + eslint-plugin-react-refresh@0.4.25(eslint@9.39.2(jiti@1.21.7)): dependencies: - eslint: 9.37.0(jiti@1.21.7) + eslint: 9.39.2(jiti@1.21.7) - eslint-plugin-storybook@10.1.4(eslint@9.37.0(jiti@1.21.7))(storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.8.3): + eslint-plugin-storybook@10.1.9(eslint@9.39.2(jiti@1.21.7))(storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.8.3): dependencies: - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3) - eslint: 9.37.0(jiti@1.21.7) - storybook: 10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3) + eslint: 9.39.2(jiti@1.21.7) + storybook: 10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - supports-color - typescript @@ -6157,21 +6183,20 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.37.0(jiti@1.21.7): + eslint@9.39.2(jiti@1.21.7): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@1.21.7)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.4.0 - '@eslint/core': 0.16.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.37.0 - '@eslint/plugin-kit': 0.4.0 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.3 + '@eslint/js': 9.39.2 + '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -6245,7 +6270,7 @@ snapshots: dependencies: pify: 2.3.0 - expect-type@1.2.2: {} + expect-type@1.3.0: {} extend@3.0.2: {} @@ -6330,7 +6355,7 @@ snapshots: forever-agent@0.6.1: {} - form-data@4.0.4: + form-data@4.0.5: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -6342,7 +6367,7 @@ snapshots: dependencies: fd-package-json: 2.0.0 - fraction.js@4.3.7: {} + fraction.js@5.3.4: {} fs-extra@9.1.0: dependencies: @@ -6412,18 +6437,16 @@ snapshots: globals@14.0.0: {} - globals@16.4.0: {} + globals@16.5.0: {} - goober@2.1.18(csstype@3.1.3): + goober@2.1.18(csstype@3.2.3): dependencies: - csstype: 3.1.3 + csstype: 3.2.3 gopd@1.2.0: {} graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - has-flag@4.0.0: {} has-symbols@1.1.0: {} @@ -6522,7 +6545,7 @@ snapshots: comma-separated-tokens: 2.0.3 hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 @@ -6538,7 +6561,7 @@ snapshots: hast-util-to-text: 4.0.2 hast-util-whitespace: 3.0.0 mdast-util-phrasing: 4.1.0 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 mdast-util-to-string: 4.0.0 rehype-minify-whitespace: 6.0.2 trim-trailing-lines: 2.1.0 @@ -6606,7 +6629,9 @@ snapshots: ignore@7.0.5: {} - immer@10.1.3: {} + immer@10.2.0: {} + + immer@11.0.1: {} import-fresh@3.3.1: dependencies: @@ -6629,6 +6654,8 @@ snapshots: dependencies: hasown: 2.0.2 + is-docker@3.0.0: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -6637,6 +6664,10 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-installed-globally@0.4.0: dependencies: global-dirs: 3.0.1 @@ -6656,6 +6687,10 @@ snapshots: is-unicode-supported@0.1.0: {} + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + isexe@2.0.0: {} isomorphic.js@0.2.5: {} @@ -6697,21 +6732,17 @@ snapshots: js-tokens@9.0.1: {} - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - js-yaml@4.1.1: dependencies: argparse: 2.0.1 jsbn@0.1.1: {} - jsdom@27.2.0: + jsdom@27.3.0(postcss@8.5.6): dependencies: - '@acemir/cssom': 0.9.24 - '@asamuzakjp/dom-selector': 6.7.5 - cssstyle: 5.3.3 + '@acemir/cssom': 0.9.29 + '@asamuzakjp/dom-selector': 6.7.6 + cssstyle: 5.3.4(postcss@8.5.6) data-urls: 6.0.0 decimal.js: 10.6.0 html-encoding-sniffer: 4.0.0 @@ -6731,6 +6762,7 @@ snapshots: xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil + - postcss - supports-color - utf-8-validate @@ -6767,10 +6799,10 @@ snapshots: kleur@3.0.3: {} - knip@5.73.1(@types/node@24.10.1)(typescript@5.8.3): + knip@5.74.0(@types/node@25.0.3)(typescript@5.8.3): dependencies: '@nodelib/fs.walk': 1.2.8 - '@types/node': 24.10.1 + '@types/node': 25.0.3 fast-glob: 3.3.3 formatly: 0.3.0 jiti: 2.6.1 @@ -6782,14 +6814,14 @@ snapshots: smol-toml: 1.5.2 strip-json-comments: 5.0.3 typescript: 5.8.3 - zod: 4.1.13 + zod: 4.2.1 levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - lib0@0.2.114: + lib0@0.2.115: dependencies: isomorphic.js: 0.2.5 @@ -6850,9 +6882,9 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@0.534.0(react@19.2.0): + lucide-react@0.534.0(react@19.2.3): dependencies: - react: 19.2.0 + react: 19.2.3 lz-string@1.5.0: {} @@ -6969,7 +7001,7 @@ snapshots: '@types/mdast': 4.0.4 unist-util-is: 6.0.1 - mdast-util-to-hast@13.2.0: + mdast-util-to-hast@13.2.1: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 @@ -7239,12 +7271,10 @@ snapshots: natural-compare@1.4.0: {} - node-releases@2.0.25: {} + node-releases@2.0.27: {} normalize-path@3.0.0: {} - normalize-range@0.1.2: {} - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -7265,6 +7295,13 @@ snapshots: dependencies: mimic-fn: 2.1.0 + open@10.2.0: + dependencies: + default-browser: 5.4.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -7379,7 +7416,7 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 postcss-js@4.1.0(postcss@8.5.6): dependencies: @@ -7432,115 +7469,115 @@ snapshots: prosemirror-changeset@2.3.1: dependencies: - prosemirror-transform: 1.10.4 + prosemirror-transform: 1.10.5 prosemirror-collab@1.3.1: dependencies: - prosemirror-state: 1.4.3 + prosemirror-state: 1.4.4 prosemirror-commands@1.7.1: dependencies: - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 prosemirror-dropcursor@1.8.2: dependencies: - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 + prosemirror-view: 1.41.4 prosemirror-gapcursor@1.4.0: dependencies: prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-view: 1.41.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.4 - prosemirror-highlight@0.13.0(@shikijs/types@3.2.1)(@types/hast@3.0.4)(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-transform@1.10.4)(prosemirror-view@1.41.3): + prosemirror-highlight@0.13.0(@shikijs/types@3.2.1)(@types/hast@3.0.4)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-transform@1.10.5)(prosemirror-view@1.41.4): optionalDependencies: '@shikijs/types': 3.2.1 '@types/hast': 3.0.4 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 + prosemirror-view: 1.41.4 - prosemirror-history@1.4.1: + prosemirror-history@1.5.0: dependencies: - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 + prosemirror-view: 1.41.4 rope-sequence: 1.3.4 prosemirror-inputrules@1.5.1: dependencies: - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 prosemirror-keymap@1.2.3: dependencies: - prosemirror-state: 1.4.3 + prosemirror-state: 1.4.4 w3c-keyname: 2.2.8 prosemirror-markdown@1.13.2: dependencies: '@types/markdown-it': 14.1.2 markdown-it: 14.1.0 - prosemirror-model: 1.25.3 + prosemirror-model: 1.25.4 prosemirror-menu@1.2.5: dependencies: crelt: 1.0.6 prosemirror-commands: 1.7.1 - prosemirror-history: 1.4.1 - prosemirror-state: 1.4.3 + prosemirror-history: 1.5.0 + prosemirror-state: 1.4.4 - prosemirror-model@1.25.3: + prosemirror-model@1.25.4: dependencies: orderedmap: 2.1.1 prosemirror-schema-basic@1.2.4: dependencies: - prosemirror-model: 1.25.3 + prosemirror-model: 1.25.4 prosemirror-schema-list@1.5.1: dependencies: - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 - prosemirror-state@1.4.3: + prosemirror-state@1.4.4: dependencies: - prosemirror-model: 1.25.3 - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 + prosemirror-model: 1.25.4 + prosemirror-transform: 1.10.5 + prosemirror-view: 1.41.4 - prosemirror-tables@1.8.1: + prosemirror-tables@1.8.3: dependencies: prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 + prosemirror-view: 1.41.4 - prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3): + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4): dependencies: '@remirror/core-constants': 3.0.0 escape-string-regexp: 4.0.0 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-view: 1.41.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.4 - prosemirror-transform@1.10.4: + prosemirror-transform@1.10.5: dependencies: - prosemirror-model: 1.25.3 + prosemirror-model: 1.25.4 - prosemirror-view@1.41.3: + prosemirror-view@1.41.4: dependencies: - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 proxy-from-env@1.0.0: {} @@ -7567,110 +7604,108 @@ snapshots: react-docgen@8.0.2: dependencies: - '@babel/core': 7.28.4 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/core': 7.28.5 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 '@types/doctrine': 0.0.9 '@types/resolve': 1.20.6 doctrine: 3.0.0 - resolve: 1.22.10 + resolve: 1.22.11 strip-indent: 4.1.1 transitivePeerDependencies: - supports-color - react-dom@19.2.0(react@19.2.0): + react-dom@19.2.3(react@19.2.3): dependencies: - react: 19.2.0 + react: 19.2.3 scheduler: 0.27.0 - react-hook-form@7.65.0(react@19.2.0): + react-hook-form@7.68.0(react@19.2.3): dependencies: - react: 19.2.0 + react: 19.2.3 - react-hot-toast@2.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-hot-toast@2.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - csstype: 3.1.3 - goober: 2.1.18(csstype@3.1.3) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + csstype: 3.2.3 + goober: 2.1.18(csstype@3.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - react-icons@5.5.0(react@19.2.0): + react-icons@5.5.0(react@19.2.3): dependencies: - react: 19.2.0 + react: 19.2.3 react-is@17.0.2: {} - react-is@19.2.0: {} - - react-number-format@5.4.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-number-format@5.4.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - react-redux@9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1): + react-redux@9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 - react: 19.2.0 - use-sync-external-store: 1.6.0(react@19.2.0) + react: 19.2.3 + use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 redux: 5.0.1 react-refresh@0.17.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.2)(react@19.2.0): + react-remove-scroll-bar@2.3.8(@types/react@19.2.7)(react@19.2.3): dependencies: - react: 19.2.0 - react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.2.0) + react: 19.2.3 + react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.2.3) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - react-remove-scroll@2.7.1(@types/react@19.2.2)(react@19.2.0): + react-remove-scroll@2.7.2(@types/react@19.2.7)(react@19.2.3): dependencies: - react: 19.2.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.2)(react@19.2.0) - react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.2.0) + react: 19.2.3 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.7)(react@19.2.3) + react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.2.3) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.2)(react@19.2.0) - use-sidecar: 1.1.3(@types/react@19.2.2)(react@19.2.0) + use-callback-ref: 1.3.3(@types/react@19.2.7)(react@19.2.3) + use-sidecar: 1.1.3(@types/react@19.2.7)(react@19.2.3) optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - react-router-dom@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-router-dom@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-router: 7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - cookie: 1.0.2 - react: 19.2.0 - set-cookie-parser: 2.7.1 + cookie: 1.1.1 + react: 19.2.3 + set-cookie-parser: 2.7.2 optionalDependencies: - react-dom: 19.2.0(react@19.2.0) + react-dom: 19.2.3(react@19.2.3) - react-style-singleton@2.2.3(@types/react@19.2.2)(react@19.2.0): + react-style-singleton@2.2.3(@types/react@19.2.7)(react@19.2.3): dependencies: get-nonce: 1.0.1 - react: 19.2.0 + react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - react-textarea-autosize@8.5.9(@types/react@19.2.2)(react@19.2.0): + react-textarea-autosize@8.5.9(@types/react@19.2.7)(react@19.2.3): dependencies: '@babel/runtime': 7.28.4 - react: 19.2.0 - use-composed-ref: 1.4.0(@types/react@19.2.2)(react@19.2.0) - use-latest: 1.3.0(@types/react@19.2.2)(react@19.2.0) + react: 19.2.3 + use-composed-ref: 1.4.0(@types/react@19.2.7)(react@19.2.3) + use-latest: 1.3.0(@types/react@19.2.7)(react@19.2.3) transitivePeerDependencies: - '@types/react' - react@19.2.0: {} + react@19.2.3: {} read-cache@1.0.0: dependencies: @@ -7688,21 +7723,21 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 - recharts@3.3.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(redux@5.0.1): + recharts@3.6.0(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react-is@17.0.2)(react@19.2.3)(redux@5.0.1): dependencies: - '@reduxjs/toolkit': 2.9.1(react-redux@9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1))(react@19.2.0) + '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1))(react@19.2.3) clsx: 2.1.1 decimal.js-light: 2.5.1 - es-toolkit: 1.40.0 + es-toolkit: 1.43.0 eventemitter3: 5.0.1 - immer: 10.1.3 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-is: 19.2.0 - react-redux: 9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1) + immer: 10.2.0 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-is: 17.0.2 + react-redux: 9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1) reselect: 5.1.1 tiny-invariant: 1.3.3 - use-sync-external-store: 1.6.0(react@19.2.0) + use-sync-external-store: 1.6.0(react@19.2.3) victory-vendor: 37.3.6 transitivePeerDependencies: - '@types/react' @@ -7773,7 +7808,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 unified: 11.0.5 vfile: 6.0.3 @@ -7793,7 +7828,7 @@ snapshots: resolve-from@4.0.0: {} - resolve@1.22.10: + resolve@1.22.11: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 @@ -7808,36 +7843,38 @@ snapshots: rfdc@1.4.1: {} - rollup@4.52.4: + rollup@4.53.5: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.4 - '@rollup/rollup-android-arm64': 4.52.4 - '@rollup/rollup-darwin-arm64': 4.52.4 - '@rollup/rollup-darwin-x64': 4.52.4 - '@rollup/rollup-freebsd-arm64': 4.52.4 - '@rollup/rollup-freebsd-x64': 4.52.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.4 - '@rollup/rollup-linux-arm-musleabihf': 4.52.4 - '@rollup/rollup-linux-arm64-gnu': 4.52.4 - '@rollup/rollup-linux-arm64-musl': 4.52.4 - '@rollup/rollup-linux-loong64-gnu': 4.52.4 - '@rollup/rollup-linux-ppc64-gnu': 4.52.4 - '@rollup/rollup-linux-riscv64-gnu': 4.52.4 - '@rollup/rollup-linux-riscv64-musl': 4.52.4 - '@rollup/rollup-linux-s390x-gnu': 4.52.4 - '@rollup/rollup-linux-x64-gnu': 4.52.4 - '@rollup/rollup-linux-x64-musl': 4.52.4 - '@rollup/rollup-openharmony-arm64': 4.52.4 - '@rollup/rollup-win32-arm64-msvc': 4.52.4 - '@rollup/rollup-win32-ia32-msvc': 4.52.4 - '@rollup/rollup-win32-x64-gnu': 4.52.4 - '@rollup/rollup-win32-x64-msvc': 4.52.4 + '@rollup/rollup-android-arm-eabi': 4.53.5 + '@rollup/rollup-android-arm64': 4.53.5 + '@rollup/rollup-darwin-arm64': 4.53.5 + '@rollup/rollup-darwin-x64': 4.53.5 + '@rollup/rollup-freebsd-arm64': 4.53.5 + '@rollup/rollup-freebsd-x64': 4.53.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.5 + '@rollup/rollup-linux-arm-musleabihf': 4.53.5 + '@rollup/rollup-linux-arm64-gnu': 4.53.5 + '@rollup/rollup-linux-arm64-musl': 4.53.5 + '@rollup/rollup-linux-loong64-gnu': 4.53.5 + '@rollup/rollup-linux-ppc64-gnu': 4.53.5 + '@rollup/rollup-linux-riscv64-gnu': 4.53.5 + '@rollup/rollup-linux-riscv64-musl': 4.53.5 + '@rollup/rollup-linux-s390x-gnu': 4.53.5 + '@rollup/rollup-linux-x64-gnu': 4.53.5 + '@rollup/rollup-linux-x64-musl': 4.53.5 + '@rollup/rollup-openharmony-arm64': 4.53.5 + '@rollup/rollup-win32-arm64-msvc': 4.53.5 + '@rollup/rollup-win32-ia32-msvc': 4.53.5 + '@rollup/rollup-win32-x64-gnu': 4.53.5 + '@rollup/rollup-win32-x64-msvc': 4.53.5 fsevents: 2.3.3 rope-sequence@1.3.4: {} + run-applescript@7.1.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -7860,7 +7897,7 @@ snapshots: semver@7.7.3: {} - set-cookie-parser@2.7.1: {} + set-cookie-parser@2.7.2: {} shebang-command@2.0.0: dependencies: @@ -7946,18 +7983,19 @@ snapshots: std-env@3.10.0: {} - storybook@10.1.4(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + storybook@10.1.9(@testing-library/dom@10.4.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@storybook/global': 5.0.0 - '@storybook/icons': 2.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@storybook/icons': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@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/spy': 3.2.4 - esbuild: 0.25.11 + esbuild: 0.27.1 + open: 10.2.0 recast: 0.23.11 semver: 7.7.3 - use-sync-external-store: 1.6.0(react@19.2.0) + use-sync-external-store: 1.6.0(react@19.2.3) ws: 8.18.3 transitivePeerDependencies: - '@testing-library/dom' @@ -8005,14 +8043,14 @@ snapshots: strip-json-comments@5.0.3: {} - sucrase@3.35.0: + sucrase@3.35.1: dependencies: '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 - glob: 10.5.0 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 + tinyglobby: 0.2.15 ts-interface-checker: 0.1.13 supports-color@7.2.0: @@ -8027,13 +8065,13 @@ snapshots: symbol-tree@3.2.4: {} - systeminformation@5.27.7: {} + systeminformation@5.27.14: {} - tabbable@6.2.0: {} + tabbable@6.3.0: {} - tailwind-merge@3.3.1: {} + tailwind-merge@3.4.0: {} - tailwindcss@3.4.18: + tailwindcss@3.4.19: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -8055,8 +8093,8 @@ snapshots: postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 - resolve: 1.22.10 - sucrase: 3.35.0 + resolve: 1.22.11 + sucrase: 3.35.1 transitivePeerDependencies: - tsx - yaml @@ -8172,13 +8210,13 @@ snapshots: type-fest@4.41.0: {} - typescript-eslint@8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3): + typescript-eslint@8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3) - '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@1.21.7))(typescript@5.8.3) - eslint: 9.37.0(jiti@1.21.7) + '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.8.3) + eslint: 9.39.2(jiti@1.21.7) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -8238,9 +8276,9 @@ snapshots: untildify@4.0.0: {} - update-browserslist-db@1.1.3(browserslist@4.26.3): + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: - browserslist: 4.26.3 + browserslist: 4.28.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -8248,43 +8286,43 @@ snapshots: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.3(@types/react@19.2.2)(react@19.2.0): + use-callback-ref@1.3.3(@types/react@19.2.7)(react@19.2.3): dependencies: - react: 19.2.0 + react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - use-composed-ref@1.4.0(@types/react@19.2.2)(react@19.2.0): + use-composed-ref@1.4.0(@types/react@19.2.7)(react@19.2.3): dependencies: - react: 19.2.0 + react: 19.2.3 optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - use-isomorphic-layout-effect@1.2.1(@types/react@19.2.2)(react@19.2.0): + use-isomorphic-layout-effect@1.2.1(@types/react@19.2.7)(react@19.2.3): dependencies: - react: 19.2.0 + react: 19.2.3 optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - use-latest@1.3.0(@types/react@19.2.2)(react@19.2.0): + use-latest@1.3.0(@types/react@19.2.7)(react@19.2.3): dependencies: - react: 19.2.0 - use-isomorphic-layout-effect: 1.2.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.3 + use-isomorphic-layout-effect: 1.2.1(@types/react@19.2.7)(react@19.2.3) optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - use-sidecar@1.1.3(@types/react@19.2.2)(react@19.2.0): + use-sidecar@1.1.3(@types/react@19.2.7)(react@19.2.3): dependencies: detect-node-es: 1.1.0 - react: 19.2.0 + react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - use-sync-external-store@1.6.0(react@19.2.0): + use-sync-external-store@1.6.0(react@19.2.3): dependencies: - react: 19.2.0 + react: 19.2.3 util-deprecate@1.0.2: {} @@ -8332,39 +8370,39 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-plugin-mkcert@1.17.9(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)): + vite-plugin-mkcert@1.17.9(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)): dependencies: - axios: 1.12.2(debug@4.4.3) + axios: 1.13.2(debug@4.4.3) debug: 4.4.3(supports-color@8.1.1) picocolors: 1.1.1 - vite: 7.1.10(@types/node@24.10.1)(jiti@1.21.7) + vite: 7.3.0(@types/node@25.0.3)(jiti@1.21.7) transitivePeerDependencies: - supports-color - vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7): + vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7): dependencies: - esbuild: 0.25.11 + esbuild: 0.27.1 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.52.4 + rollup: 4.53.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.3 fsevents: 2.3.3 jiti: 1.21.7 - vitest@4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.7)(jsdom@27.2.0): + vitest@4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(jiti@1.21.7)(jsdom@27.3.0(postcss@8.5.6)): dependencies: - '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7)) - '@vitest/pretty-format': 4.0.15 - '@vitest/runner': 4.0.15 - '@vitest/snapshot': 4.0.15 - '@vitest/spy': 4.0.15 - '@vitest/utils': 4.0.15 + '@vitest/expect': 4.0.16 + '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7)) + '@vitest/pretty-format': 4.0.16 + '@vitest/runner': 4.0.16 + '@vitest/snapshot': 4.0.16 + '@vitest/spy': 4.0.16 + '@vitest/utils': 4.0.16 es-module-lexer: 1.7.0 - expect-type: 1.2.2 + expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 @@ -8374,12 +8412,12 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.1.10(@types/node@24.10.1)(jiti@1.21.7) + vite: 7.3.0(@types/node@25.0.3)(jiti@1.21.7) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.10.1 - '@vitest/browser-playwright': 4.0.15(playwright@1.57.0)(vite@7.1.10(@types/node@24.10.1)(jiti@1.21.7))(vitest@4.0.15) - jsdom: 27.2.0 + '@types/node': 25.0.3 + '@vitest/browser-playwright': 4.0.16(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(jiti@1.21.7))(vitest@4.0.16) + jsdom: 27.3.0(postcss@8.5.6) transitivePeerDependencies: - jiti - less @@ -8451,22 +8489,26 @@ snapshots: ws@8.18.3: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} - y-prosemirror@1.3.7(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27): + y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27): dependencies: - lib0: 0.2.114 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-view: 1.41.3 + lib0: 0.2.115 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.4 y-protocols: 1.0.6(yjs@13.6.27) yjs: 13.6.27 y-protocols@1.0.6(yjs@13.6.27): dependencies: - lib0: 0.2.114 + lib0: 0.2.115 yjs: 13.6.27 yallist@3.1.1: {} @@ -8478,10 +8520,10 @@ snapshots: yjs@13.6.27: dependencies: - lib0: 0.2.114 + lib0: 0.2.115 yocto-queue@0.1.0: {} - zod@4.1.13: {} + zod@4.2.1: {} zwitch@2.0.4: {} diff --git a/src/api/services/appeal.service.ts b/src/api/services/appeal.service.ts index 020daaa..8940551 100644 --- a/src/api/services/appeal.service.ts +++ b/src/api/services/appeal.service.ts @@ -2,7 +2,6 @@ import apiClient from '../apiClient'; import type { Appeal } from '../../types/entities'; import type { PaginatedAppealsResponse, SearchAppealsParams } from '../../types/shared.ts' - type UpdateAppealPayload = { state: 'accepted' | 'rejected'; }; @@ -14,8 +13,11 @@ interface ApiResponse { } const createAppeal = async (formData: FormData): Promise => { - - const response = await apiClient.post>('/appeals', formData); + const response = await apiClient.post>('/appeals', formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); return response.data.data; }; diff --git a/src/api/services/auth.service.ts b/src/api/services/auth.service.ts index cf10615..9e559a8 100644 --- a/src/api/services/auth.service.ts +++ b/src/api/services/auth.service.ts @@ -9,7 +9,11 @@ interface ApiResponse { } // Types for login and register requests -type LoginPayload = { mail: string; password_plaintext: string }; +type LoginPayload = { + mail: string; + password_plaintext: string; + rememberMe: boolean; +}; type RegisterPayload = Omit< User, | 'password' diff --git a/src/api/services/course.service.ts b/src/api/services/course.service.ts index c4b1402..7fce2c0 100644 --- a/src/api/services/course.service.ts +++ b/src/api/services/course.service.ts @@ -36,10 +36,17 @@ const getTrendingCourses = async (): Promise => { } const create = async (payload: FormData): Promise => { - console.log(payload.get('useInstitution')); + + console.log(payload.get('image')); + const response = await apiClient.post>( '/courses', - payload + payload, + { + headers: { + 'Content-Type': 'multipart/form-data', + }, + } ); return response.data.data; }; diff --git a/src/api/services/question.service.ts b/src/api/services/question.service.ts index 200289f..8d394c2 100644 --- a/src/api/services/question.service.ts +++ b/src/api/services/question.service.ts @@ -143,6 +143,31 @@ const remove = async ( ); }; +// Validar la respuesta de un estudiante a una pregunta +const validateAnswer = async ( + courseId: string, + questionId: string, + answer: number | string +): Promise<{ isCorrect: boolean }> => { + try { + console.log('Validating answer:', { courseId, questionId, answer }); + const response = await apiClient.post>( + `/courses/${courseId}/questions/${questionId}/validate`, + { answer }, + { + headers: { + 'Content-Type': 'application/json', + }, + } + ); + console.log('Validation result:', response.data.data); + return response.data.data; + } catch (error) { + console.error('Error validating answer:', error); + throw error; + } +}; + export const questionService = { create, createGeneral, @@ -151,4 +176,5 @@ export const questionService = { getById, update, delete: remove, + validateAnswer, }; diff --git a/src/components/common/NavBar.tsx b/src/components/common/NavBar.tsx index ada12ae..46e64ea 100644 --- a/src/components/common/NavBar.tsx +++ b/src/components/common/NavBar.tsx @@ -62,9 +62,7 @@ export function NavBar() { }); navigate('/login'); } else { - const hasPendingAppeal = appeals?.some(appeal => appeal.state === 'pending'); - - if (hasPendingAppeal) { + if (appeals && appeals.length > 0) { navigate('/professor/applications'); } else { navigate('/professor/apply'); @@ -122,7 +120,6 @@ export function NavBar() { )} - {/* --- ENVOLTORIO CORRECTO PARA CONTROLES DE ROL --- */}
{user?.role === 'admin' && } {user?.role === 'professor' && } diff --git a/src/components/landing/HeroSection.tsx b/src/components/landing/HeroSection.tsx index 0a02a94..cbd6bbb 100644 --- a/src/components/landing/HeroSection.tsx +++ b/src/components/landing/HeroSection.tsx @@ -1,7 +1,6 @@ import { Link } from 'react-router-dom'; import { Search, Users } from 'lucide-react'; import { lazy, Suspense } from 'react'; -import Button from '../ui/Button/Button'; import { useStudentCount } from '../../hooks/useStudent.ts' const RobotModel = lazy(() => import('./RobotModel.tsx')) @@ -36,13 +35,6 @@ export default function HeroSection() { Explorar Cursos -
diff --git a/src/components/landing/UnitEditor.tsx b/src/components/landing/UnitEditor.tsx index c3e6525..cf8c607 100644 --- a/src/components/landing/UnitEditor.tsx +++ b/src/components/landing/UnitEditor.tsx @@ -1,9 +1,13 @@ -import { useCreateBlockNote } from '@blocknote/react'; +import { + useCreateBlockNote, + getDefaultReactSlashMenuItems, + SuggestionMenuController +} from '@blocknote/react'; import { BlockNoteView } from '@blocknote/mantine'; +import { filterSuggestionItems } from '@blocknote/core'; import '@blocknote/mantine/style.css'; import '@blocknote/core/fonts/inter.css'; import type { Block, PartialBlock } from '@blocknote/core'; -import { useUploadUnitFile } from '../../hooks/useUnits.ts'; import { useEffect } from 'react'; interface UnitEditorProps { @@ -17,16 +21,8 @@ export default function UnitEditor({ initialContent, onChange, }: UnitEditorProps) { - const { mutateAsync: uploadFileToServer } = useUploadUnitFile(); - - const uploadFile = async (file: File): Promise => { - const url = await uploadFileToServer(file); - return url; - }; - - const editor = useCreateBlockNote({ - uploadFile, - }); + + const editor = useCreateBlockNote({}); useEffect(() => { if (editor) { @@ -52,8 +48,18 @@ export default function UnitEditor({ } }, [editor, initialContent]); + const forbiddenItems = ['Image', 'Video', 'Audio', 'File']; + + const getCustomSlashMenuItems = (query: string) => { + const defaultItems = getDefaultReactSlashMenuItems(editor); + const filteredItems = defaultItems.filter( + (item) => !forbiddenItems.includes(item.title) + ); + return filterSuggestionItems(filteredItems, query); + }; + return ( -
+
{ onChange(editor.document); }} - /> + slashMenu={false} + > + getCustomSlashMenuItems(query)} + /> +
); -} +} \ No newline at end of file diff --git a/src/components/professor/courseEditor/CourseHeader.tsx b/src/components/professor/courseEditor/CourseHeader.tsx index 4895841..9ecf02f 100644 --- a/src/components/professor/courseEditor/CourseHeader.tsx +++ b/src/components/professor/courseEditor/CourseHeader.tsx @@ -33,75 +33,80 @@ export default function CourseHeader({ return (
-
+
{courseId && ( <> {onOpenGeneralQuestions && ( )} )}
-
+
-

+

{courseName}

-

- Edita el contenido, las actividades y la configuración de tu curso. +

+ Edita el contenido y configuración.

-
+
+ -
-
+
+
@@ -113,18 +118,18 @@ export default function CourseHeader({ checked={isEditMode} onChange={onToggleEdit} /> -
+
- Editar + Edit
@@ -132,4 +137,4 @@ export default function CourseHeader({
); -} +} \ No newline at end of file diff --git a/src/components/professor/courseEditor/GeneralQuestionsManager.tsx b/src/components/professor/courseEditor/GeneralQuestionsManager.tsx index 380b520..59fd800 100644 --- a/src/components/professor/courseEditor/GeneralQuestionsManager.tsx +++ b/src/components/professor/courseEditor/GeneralQuestionsManager.tsx @@ -47,7 +47,7 @@ export default function GeneralQuestionsManager({ return (
- +

@@ -194,4 +194,4 @@ export default function GeneralQuestionsManager({

); -} +} \ No newline at end of file diff --git a/src/components/professor/courseEditor/UnitContent.tsx b/src/components/professor/courseEditor/UnitContent.tsx index ce09075..221a290 100644 --- a/src/components/professor/courseEditor/UnitContent.tsx +++ b/src/components/professor/courseEditor/UnitContent.tsx @@ -18,13 +18,13 @@ import { } from 'lucide-react'; import DocumentViewer from '../../ui/DocumentViewer/DocumentViewer'; import UnitEditor from '../../landing/UnitEditor'; -// import ActivityCard from '../../landing/professorCourseEdition/ActivityCard'; // Obsoleto, ahora usamos questions import type { Block } from '@blocknote/core'; import type { UnitEditorData, Question, Material, } from '../../../types/entities'; +import { cn } from '../../../lib/utils'; interface UnitContentProps { selectedUnit: UnitEditorData | null; @@ -75,7 +75,12 @@ export default function UnitContent({ return (
- +
@@ -115,7 +120,7 @@ export default function UnitContent({ -
+
Preguntas de la Unidad @@ -238,7 +243,6 @@ export default function UnitContent({
- {/* Modal de previsualización de materiales */} {previewMaterial && ( ); -} +} \ No newline at end of file diff --git a/src/components/professor/institutionManagement/ManageInstitutionSection.tsx b/src/components/professor/institutionManagement/ManageInstitutionSection.tsx index 67b53b1..4d0e921 100644 --- a/src/components/professor/institutionManagement/ManageInstitutionSection.tsx +++ b/src/components/professor/institutionManagement/ManageInstitutionSection.tsx @@ -1,47 +1,85 @@ import { useState } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '../../ui/Card/Card'; import Button from '../../ui/Button/Button'; -import { Users, UserMinus, AlertCircle, Crown, Inbox, Check, X } from 'lucide-react'; +import { + Users, + UserMinus, + AlertCircle, + Crown, + Inbox, + Check, + X, +} from 'lucide-react'; import { Avatar, AvatarImage, AvatarFallback } from '../../ui/Avatar/Avatar'; import type { Institution } from '../../../types/entities'; import { useRemoveProfessor } from '../../../hooks/useInstitutionMutations'; -import { useGetPendingRequests, useProcessJoinRequest } from '../../../hooks/useJoinRequests'; +import { + useGetPendingRequests, + useProcessJoinRequest, +} from '../../../hooks/useJoinRequests'; +import { + getProfessorName, + getProfessorEmail, + getProfessorProfilePicture, + getProfessorInitials, +} from '../../../lib/professor'; interface ManageInstitutionSectionProps { institution: Institution; } -export default function ManageInstitutionSection({ institution }: ManageInstitutionSectionProps) { - const { mutate: removeProfessor, isPending: isRemoving } = useRemoveProfessor(); - const { data: pendingRequests = [], isLoading: isLoadingRequests } = useGetPendingRequests(institution.institutionId); - const { mutate: processRequest, isPending: isProcessingRequest } = useProcessJoinRequest(); +export default function ManageInstitutionSection({ + institution, +}: ManageInstitutionSectionProps) { + const { mutate: removeProfessor, isPending: isRemoving } = + useRemoveProfessor(); + const { data: pendingRequests = [], isLoading: isLoadingRequests } = + useGetPendingRequests(institution.institutionId || institution.id || ''); + const { mutate: processRequest, isPending: isProcessingRequest } = + useProcessJoinRequest(); const [processingId, setProcessingId] = useState(null); - const handleProcessRequest = (requestId: string, action: 'accept' | 'reject') => { + const handleProcessRequest = ( + requestId: string, + action: 'accept' | 'reject' + ) => { setProcessingId(requestId); - processRequest({ requestId, action }, { - onSuccess: () => { - // Silencioso en caso de éxito - }, - onError: (error) => { - alert(`Error al procesar la solicitud: ${error.message}`); - }, - onSettled: () => { - setProcessingId(null); - }, - }); - }; - - const handleRemoveProfessor = (professorId: string, professorName: string) => { - if (confirm(`¿Estás seguro de que quieres remover a ${professorName} de la institución?`)) { - removeProfessor({ institutionId: institution.institutionId, professorId }, { + processRequest( + { requestId, action }, + { onSuccess: () => { // Silencioso en caso de éxito }, onError: (error) => { - alert(`Error al remover profesor: ${error.message}`); + alert(`Error al procesar la solicitud: ${error.message}`); }, - }); + onSettled: () => { + setProcessingId(null); + }, + } + ); + }; + + const handleRemoveProfessor = ( + professorId: string, + professorName: string + ) => { + if ( + confirm( + `¿Estás seguro de que quieres remover a ${professorName} de la institución?` + ) + ) { + removeProfessor( + { institutionId: institution.institutionId || institution.id || '', professorId }, + { + onSuccess: () => { + // Silencioso en caso de éxito + }, + onError: (error) => { + alert(`Error al remover profesor: ${error.message}`); + }, + } + ); } }; @@ -71,10 +109,14 @@ export default function ManageInstitutionSection({ institution }: ManageInstitut
- +
-

{allProfessors.length}

-

Miembros en la Institución

+

+ {allProfessors.length} +

+

+ Miembros en la Institución +

@@ -89,33 +131,62 @@ export default function ManageInstitutionSection({ institution }: ManageInstitut
{isLoadingRequests ? ( -

Cargando solicitudes...

+

+ Cargando solicitudes... +

) : pendingRequests.length === 0 ? (
-

No hay solicitudes pendientes.

+

+ No hay solicitudes pendientes. +

) : ( - pendingRequests.map(req => ( + pendingRequests.map((req) => (
- + - {req.professor.user?.name?.charAt(0)}{req.professor.user?.surname?.charAt(0)} + {getProfessorInitials(req.professor)}
-

{req.professor.user.name} {req.professor.user.surname}

-

{req.professor.user.mail}

+

+ {getProfessorName(req.professor)} +

+

+ {getProfessorEmail(req.professor) || + 'Email no disponible'} +

- -
@@ -127,41 +198,78 @@ export default function ManageInstitutionSection({ institution }: ManageInstitut
-

Miembros de la Institución

+

+ Miembros de la Institución +

{institution.manager?.user && (
- + - {institution.manager.user.name?.charAt(0)}{institution.manager.user.surname?.charAt(0)} + {institution.manager.user.name?.charAt(0)} + {institution.manager.user.surname?.charAt(0)}
-

{institution.manager.user.name} {institution.manager.user.surname} Encargado

-

{institution.manager.user.mail}

+

+ {institution.manager.user.name}{' '} + {institution.manager.user.surname} + + Encargado + +

+

+ {institution.manager.user.mail} +

)} {otherProfessors.length > 0 ? ( otherProfessors.map((professor) => ( -
+
- + - {professor.user.name?.charAt(0)}{professor.user.surname?.charAt(0)} + {getProfessorInitials(professor)}
-

{professor.user.name} {professor.user.surname}

-

{professor.user.mail}

+

+ {getProfessorName(professor)} +

+

+ {getProfessorEmail(professor) || + 'Email no disponible'} +

-
@@ -170,7 +278,9 @@ export default function ManageInstitutionSection({ institution }: ManageInstitut ) : (
-

Aún no hay otros miembros.

+

+ Aún no hay otros miembros. +

)}
@@ -178,4 +288,4 @@ export default function ManageInstitutionSection({ institution }: ManageInstitut ); -} \ No newline at end of file +} diff --git a/src/components/professor/institutionManagement/modals/JoinInstitutionModal.tsx b/src/components/professor/institutionManagement/modals/JoinInstitutionModal.tsx index 483a40c..60da589 100644 --- a/src/components/professor/institutionManagement/modals/JoinInstitutionModal.tsx +++ b/src/components/professor/institutionManagement/modals/JoinInstitutionModal.tsx @@ -30,7 +30,7 @@ export default function JoinInstitutionModal({ return institutions.filter( (inst) => inst.name.toLowerCase().includes(query) || - inst.description.toLowerCase().includes(query) || + inst.description?.toLowerCase().includes(query) || inst.aliases?.some((alias) => alias.toLowerCase().includes(query)) ); }, [institutions, searchQuery]); @@ -42,7 +42,7 @@ export default function JoinInstitutionModal({ const handleConfirmRequest = () => { if (!selectedInstitution) return; - createJoinRequest(selectedInstitution.institutionId, { + createJoinRequest(selectedInstitution.institutionId || selectedInstitution.id || '', { onSuccess: () => { handleClose(); }, @@ -82,7 +82,7 @@ export default function JoinInstitutionModal({

{selectedInstitution.description}

- {selectedInstitution.professors.length} profesores + {selectedInstitution.professors?.length || 0} profesores
diff --git a/src/components/student/QuestionsList.tsx b/src/components/student/QuestionsList.tsx index 0a8612c..82a0200 100644 --- a/src/components/student/QuestionsList.tsx +++ b/src/components/student/QuestionsList.tsx @@ -6,12 +6,20 @@ import type { Question } from '../../types/entities'; import { useState } from 'react'; import Button from '../ui/Button/Button'; import { cn } from '../../lib/utils'; +import { useValidateAnswer } from '../../hooks/useQuestions'; interface QuestionsListProps { courseId: string; questionIds: string[]; } +/** + * Valida que un string sea un ObjectId válido de MongoDB + */ +function isValidObjectId(id: string): boolean { + return /^[0-9a-fA-F]{24}$/.test(id); +} + /** * Componente para mostrar las preguntas de una unidad. * Carga las preguntas individualmente y permite al estudiante responderlas. @@ -20,7 +28,10 @@ export default function QuestionsList({ courseId, questionIds, }: QuestionsListProps) { - if (questionIds.length === 0) { + // Filtrar IDs inválidos + const validQuestionIds = questionIds?.filter(id => id && isValidObjectId(id)) ?? []; + + if (validQuestionIds.length === 0) { return ( @@ -43,12 +54,12 @@ export default function QuestionsList({ - Preguntas de Autoevaluación ({questionIds.length}) + Preguntas de Autoevaluación ({validQuestionIds.length})
- {questionIds.map((questionId, index) => ( + {validQuestionIds.map((questionId, index) => ( (null); const [showResult, setShowResult] = useState(false); + const [isCorrect, setIsCorrect] = useState(false); + + const validateAnswerMutation = useValidateAnswer(); const { data: question, @@ -83,6 +97,7 @@ function QuestionItem({ } = useQuery({ queryKey: ['question', courseId, questionId], queryFn: () => questionService.getById(courseId, questionId), + enabled: isValidObjectId(questionId), // Solo hacer query si el ID es válido }); if (isLoading) { @@ -108,19 +123,29 @@ function QuestionItem({ ); } - const handleSubmit = () => { - if (selectedAnswer !== null) { - setShowResult(true); + const handleSubmit = async () => { + if (selectedAnswer !== null && question?.id) { + try { + const result = await validateAnswerMutation.mutateAsync({ + courseId, + questionId: question.id, + answer: selectedAnswer, + }); + setIsCorrect(result.isCorrect); + setShowResult(true); + } catch (error) { + console.error('Error validating answer:', error); + // Mostrar error al usuario si es necesario + } } }; const handleReset = () => { setSelectedAnswer(null); setShowResult(false); + setIsCorrect(false); }; - const isCorrect = selectedAnswer === Number(question.payload.correctAnswer); - return (
@@ -135,8 +160,6 @@ function QuestionItem({
{question.payload.options.map((option, index) => { const isSelected = selectedAnswer === index; - const isCorrectOption = - index === Number(question.payload.correctAnswer); let borderColor = 'border-slate-200'; let bgColor = 'bg-white hover:bg-slate-50'; @@ -149,9 +172,6 @@ function QuestionItem({ borderColor = 'border-red-500'; bgColor = 'bg-red-50'; } - } else if (showResult && isCorrectOption) { - borderColor = 'border-green-500'; - bgColor = 'bg-green-50'; } else if (isSelected) { borderColor = 'border-blue-500'; bgColor = 'bg-blue-50'; @@ -181,9 +201,6 @@ function QuestionItem({ )} )} - {showResult && !isSelected && isCorrectOption && ( - - )}
); @@ -206,8 +223,8 @@ function QuestionItem({ )} > {isCorrect - ? '¡Correcto! Has seleccionado la respuesta correcta.' - : 'Incorrecto. Revisa la respuesta correcta marcada arriba.'} + ? '¡Correcto! Has seleccionado la respuesta correcta' + : 'Incorrecto. Intenta de nuevo.'}

)} @@ -216,11 +233,37 @@ function QuestionItem({ {!showResult ? ( ) : (
diff --git a/src/components/ui/CardList/CardList.tsx b/src/components/ui/CardList/CardList.tsx index fd5c760..f502810 100644 --- a/src/components/ui/CardList/CardList.tsx +++ b/src/components/ui/CardList/CardList.tsx @@ -7,9 +7,10 @@ import { Card, CardContent, CardTitle, CardDescription } from '../Card/Card'; import { Link } from 'react-router-dom'; import type { Course } from '../../../types/entities'; import { formatCurrency } from '../../../lib/currency'; +import { getProfessorName } from '../../../lib/professor'; interface CourseCardListProps extends React.HTMLAttributes { - /** + /** * The complete course object containing the information to be displayed (title, price, instructor, image, etc.). */ course: Course; @@ -20,116 +21,126 @@ interface CourseCardListProps extends React.HTMLAttributes { } /** * Horizontal card component used to display a summary of a course in lists. - * + * * Displays the image, title, short description, instructor, price, and basic statistics. * It is interactive and redirects to the course details. */ const CardList = React.forwardRef( ({ course, className, onViewMore, ...props }, ref) => { + const instructorName = getProfessorName(course.professor); - const instructorName = course.professor?.user - ? `${course.professor.user.name} ${course.professor.user.surname}` - : 'Instructor no disponible'; - - const displayAmountStudents = course?.studentsCount ?? course?.students?.length ?? 0; + const displayAmountStudents = + course?.studentsCount ?? course?.students?.length ?? 0; return ( - - -
-
- - {course.name} - -
- {course.isFree && ( - - Gratis - - )} + + +
+
+ + {course.name} + +
+ {course.isFree && ( + + Gratis + + )} +
-
-
-
-
-
- - {course.courseType?.name || 'Sin Categoría'} - -
- - {course.name} - - - {course.description} - -

- Por {instructorName} -

- -
-
- - {displayAmountStudents} { (displayAmountStudents ?? 0) === 1 ? 'Estudiante' : 'Estudiantes'} +
+
+
+
+ + {course.courseType?.name || 'Sin Categoría'} +
-
- - {course.units.length} {course.units.length === 1 ? 'Unidad' : 'Unidades'} + + {course.name} + + + {course.description} + +

+ Por {instructorName} +

+ +
+
+ + + {displayAmountStudents}{' '} + {(displayAmountStudents ?? 0) === 1 + ? 'Estudiante' + : 'Estudiantes'} + +
+
+ + + {course?.unitsCount ?? course?.units?.length ?? 0}{' '} + {(course?.unitsCount ?? + course?.units?.length ?? + 0) === 1 + ? 'Unidad' + : 'Unidades'} + +
-
-
-
- - {course.isFree ? ( - Gratis - ) : course.priceInCents ? ( - {formatCurrency(course.priceInCents)} - ) : ( - Precio no disponible - )} - +
+
+ + {course.isFree ? ( + Gratis + ) : course.priceInCents ? ( + {formatCurrency(course.priceInCents)} + ) : ( + Precio no disponible + )} + +
+ + +
- - -
-
- - - + + + ); } ); CardList.displayName = 'CardList'; -export default CardList; \ No newline at end of file +export default CardList; diff --git a/src/components/ui/CoursePreviewCard/CoursePreviewCard.tsx b/src/components/ui/CoursePreviewCard/CoursePreviewCard.tsx index dd7d997..2a0cbb8 100644 --- a/src/components/ui/CoursePreviewCard/CoursePreviewCard.tsx +++ b/src/components/ui/CoursePreviewCard/CoursePreviewCard.tsx @@ -42,40 +42,60 @@ interface IndividualPropsPreview extends BasePreviewCardProps { type CoursePreviewCardProps = CourseObjectProps | IndividualPropsPreview; -/** - *This component displays a preview card for a course. It can accept either a full - */ -const CoursePreviewCard = React.forwardRef( - ({ course, name, description, imageUrl, isFree, price, courseType, hideButton = false, hideInstructor = false, className, ...props }, ref) => { - +const CoursePreviewCard = React.forwardRef< + HTMLDivElement, + CoursePreviewCardProps +>( + ( + { + course, + name, + description, + imageUrl, + isFree, + price, + courseType, + hideButton = false, + hideInstructor = false, + onViewMore, + className, + ...props + }, + ref + ) => { const displayName = course?.name ?? name; const displayDescription = course?.description ?? description; const displayImage = course?.imageUrl ?? imageUrl; const displayIsFree = course?.isFree ?? isFree; + + const displayPriceInCents = + course?.priceInCents ?? + (price !== undefined ? Math.round(price * 100) : 0); - // Manejar precio: si es un curso, usar priceInCents; si son props individuales, convertir price (pesos) a centavos - const displayPriceInCents = course?.priceInCents ?? (price !== undefined ? Math.round(price * 100) : 0); const displayCourseType = course?.courseType ?? courseType; + const displayAmountStudents = course?.studentsCount ?? course?.students?.length ?? 0; + + const displayAmountUnits = course?.unitsCount ?? course?.units?.length ?? 0; const instructorName = course?.professor?.user ? `${course.professor.user.name} ${course.professor.user.surname}` : 'Instructor no disponible'; - + return (
{displayName
@@ -90,16 +110,15 @@ const CoursePreviewCard = React.forwardRef - {displayDescription || 'La descripción del curso aparecerá aquí...'} + {displayDescription || + 'La descripción del curso aparecerá aquí...'} {course && !hideInstructor && (

Por {instructorName}

- {course.professor?.institution && ( -

- {course.professor.institution.name} -

- )} +

+ {course.professor?.institution?.name || '\u00A0'} +

)} @@ -109,11 +128,21 @@ const CoursePreviewCard = React.forwardRef
- {displayAmountStudents} { (displayAmountStudents ?? 0) === 1 ? 'Estudiante' : 'Estudiantes'} + + {displayAmountStudents}{' '} + {(displayAmountStudents ?? 0) === 1 + ? 'Estudiante' + : 'Estudiantes'} +
- {course.units.length} {course.units.length === 1 ? 'Unidad' : 'Unidades'} + + {displayAmountUnits}{' '} + {(displayAmountUnits ?? 0) === 1 + ? 'Unidad' + : 'Unidades'} +
)} @@ -126,9 +155,15 @@ const CoursePreviewCard = React.forwardRef {!hideButton && ( - diff --git a/src/contexts/AuthProvider.tsx b/src/contexts/AuthProvider.tsx index d9df25b..ea97314 100644 --- a/src/contexts/AuthProvider.tsx +++ b/src/contexts/AuthProvider.tsx @@ -58,8 +58,13 @@ export const AuthProvider = ({ children }: { children: ReactNode }) => { const trySilentRefresh = async () => { try { - const { data } = await apiClient.post('/auth/refresh'); - const newToken = data.data.token; + const response = await apiClient.post('/auth/refresh'); + + if (response.status === 204) { + return false; + } + + const newToken = response.data.data.token; if (newToken) { await login(newToken); return true; diff --git a/src/hooks/useQuestions.ts b/src/hooks/useQuestions.ts index e0e8746..f3ac3e1 100644 --- a/src/hooks/useQuestions.ts +++ b/src/hooks/useQuestions.ts @@ -107,3 +107,17 @@ export const useDeleteQuestion = () => { }, }); }; + +export const useValidateAnswer = () => { + return useMutation({ + mutationFn: ({ + courseId, + questionId, + answer, + }: { + courseId: string; + questionId: string; + answer: number | string; + }) => questionService.validateAnswer(courseId, questionId, answer), + }); +}; diff --git a/src/hooks/useQuickSave.ts b/src/hooks/useQuickSave.ts index 144878d..319195b 100644 --- a/src/hooks/useQuickSave.ts +++ b/src/hooks/useQuickSave.ts @@ -1,12 +1,9 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useMutation } from '@tanstack/react-query'; import { courseService } from '../api/services/course.service'; import type { QuickSaveRequest } from '../types/entities'; import type { AxiosError } from 'axios'; -// Hook para guardado rápido sin validación completa export const useQuickSave = () => { - const queryClient = useQueryClient(); - return useMutation< void, AxiosError, @@ -14,8 +11,6 @@ export const useQuickSave = () => { >({ mutationFn: ({ courseId, data }) => courseService.quickSave(courseId, data), onSuccess: () => { - // Invalidar cache para reflejar cambios - queryClient.invalidateQueries({ queryKey: ['professorCourses'] }); }, }); -}; +}; \ No newline at end of file diff --git a/src/index.css b/src/index.css index f900776..f8212a8 100644 --- a/src/index.css +++ b/src/index.css @@ -82,4 +82,10 @@ } } -/* BlockNote Editor Z-Index - Configuración nativa */ +.bn-suggestion-menu { + z-index: 99999 !important; +} + +.blocknote-editor-wrapper { + overflow: visible !important; +} \ No newline at end of file diff --git a/src/lib/professor.ts b/src/lib/professor.ts new file mode 100644 index 0000000..023f7a8 --- /dev/null +++ b/src/lib/professor.ts @@ -0,0 +1,75 @@ +import type { Professor } from '../types/entities'; + +/** + * Helper para obtener el nombre del profesor de forma segura + * Maneja tanto la estructura antigua (con user) como la nueva (sin user) + */ +export function getProfessorName(professor?: Professor): string { + if (!professor) return 'Instructor no disponible'; + + // Nueva estructura de la API (profesor simplificado) + if (professor.name && professor.surname) { + return `${professor.name} ${professor.surname}`; + } + + // Estructura antigua (con user anidado) + if (professor.user?.name && professor.user?.surname) { + return `${professor.user.name} ${professor.user.surname}`; + } + + return 'Instructor'; +} + +/** + * Helper para obtener la foto de perfil del profesor + */ +export function getProfessorProfilePicture( + professor?: Professor +): string | undefined { + if (!professor) return undefined; + + // Nueva estructura + if (professor.profilePicture) { + return professor.profilePicture; + } + + // Estructura antigua + if (professor.user?.profile_picture) { + return professor.user.profile_picture; + } + + return undefined; +} + +/** + * Helper para obtener el email del profesor (solo en contextos donde se tiene acceso) + */ +export function getProfessorEmail(professor?: Professor): string | undefined { + if (!professor) return undefined; + + // Solo disponible en estructura completa + return professor.user?.mail; +} + +/** + * Helper para obtener las iniciales del profesor para avatares + */ +export function getProfessorInitials(professor?: Professor): string { + if (!professor) return '?'; + + let firstName = ''; + let lastName = ''; + + if (professor.name && professor.surname) { + firstName = professor.name; + lastName = professor.surname; + } else if (professor.user?.name && professor.user?.surname) { + firstName = professor.user.name; + lastName = professor.user.surname; + } + + const firstInitial = firstName.charAt(0).toUpperCase(); + const lastInitial = lastName.charAt(0).toUpperCase(); + + return firstInitial + lastInitial || '?'; +} diff --git a/src/pages/AboutPage.tsx b/src/pages/AboutPage.tsx index 1b1fb18..54a0f80 100644 --- a/src/pages/AboutPage.tsx +++ b/src/pages/AboutPage.tsx @@ -42,7 +42,6 @@ export default function AboutPage() {
  • Cursos en diversas áreas del conocimiento
  • Profesores calificados y expertos en sus campos
  • Evaluaciones y seguimiento de progreso
  • -
  • Certificados de finalización
  • Comunidad de aprendizaje activa
  • diff --git a/src/pages/Admin/ProfessorAppealsPage.tsx b/src/pages/Admin/ProfessorAppealsPage.tsx index 645ab84..99d505c 100644 --- a/src/pages/Admin/ProfessorAppealsPage.tsx +++ b/src/pages/Admin/ProfessorAppealsPage.tsx @@ -304,7 +304,7 @@ export default function ProfessorRequestsPage() {

    Experiencia y Motivación

    -

    +

    {selectedRequest.experienceMotivation}

    @@ -339,4 +339,4 @@ export default function ProfessorRequestsPage() { )}
    ); -} +} \ No newline at end of file diff --git a/src/pages/Auth/LoginPage.tsx b/src/pages/Auth/LoginPage.tsx index 90f4d93..bec8eeb 100644 --- a/src/pages/Auth/LoginPage.tsx +++ b/src/pages/Auth/LoginPage.tsx @@ -12,6 +12,7 @@ import { isAxiosError } from 'axios'; const LoginSchema = v.object({ mail: v.pipe(v.string(), v.email('Debe ser un email válido.')), password: v.pipe(v.string(), v.minLength(1, 'La contraseña es requerida.')), + rememberMe: v.boolean(), }); type LoginFormData = v.InferInput; @@ -31,6 +32,7 @@ const LoginPage = () => { const payload = { mail: data.mail, password_plaintext: data.password, + rememberMe: data.rememberMe, }; login(payload); }; @@ -65,9 +67,9 @@ const LoginPage = () => {

    Email

    -

    contacto@plataforma.com

    -

    soporte@plataforma.com

    +

    contacto.upskill@gmail.com

    @@ -235,7 +234,7 @@ export default function ContactPage() {

    Teléfono

    -

    +54 11 1234-5678

    +

    +54 9 3417777777

    Lunes a Viernes: 9:00 - 18:00

    @@ -254,7 +253,7 @@ export default function ContactPage() {

    Ubicación

    -

    Buenos Aires, Argentina

    +

    Rosario, Argentina

    diff --git a/src/pages/Course/CourseDetails.tsx b/src/pages/Course/CourseDetails.tsx index 269e793..e10b9b6 100644 --- a/src/pages/Course/CourseDetails.tsx +++ b/src/pages/Course/CourseDetails.tsx @@ -12,6 +12,10 @@ import { useCreatePreference } from '../../hooks/usePayment.ts'; import { formatCurrency } from '../../lib/currency'; import { AxiosError } from 'axios'; import { toast } from 'react-hot-toast'; +import { + getProfessorName, + getProfessorProfilePicture, +} from '../../lib/professor'; function CourseDetails() { const { courseId } = useParams<{ courseId: string }>(); @@ -181,13 +185,18 @@ function CourseDetails() {
    - {course.students?.length || 0} estudiantes + + {course.studentsCount ?? course.students?.length ?? 0}{' '} + estudiantes +
    - {course.units?.length || 0}{' '} - {course.units?.length === 1 ? 'lección' : 'lecciones'} + {course.unitsCount ?? course.units?.length ?? 0}{' '} + {(course.unitsCount ?? course.units?.length ?? 0) === 1 + ? 'lección' + : 'lecciones'}
    @@ -195,36 +204,51 @@ function CourseDetails() {
    {course.professor?.user?.name} -
    +

    Creado por

    - {course.professor?.user?.name}{' '} - {course.professor?.user?.surname} + {getProfessorName(course.professor)}
    - {course.institution?.institutionId ? ( -
    -

    Institución

    - - {course.institution?.name} - -
    - ) : null} + {(course.institution?.name || course.professor?.institution?.name) && ( + <> +
    +
    +
    + +
    +
    +

    Institución

    + {(course.institution?.id || course.institution?.institutionId || course.professor?.institution?.id) ? ( + + {course.institution?.name || course.professor?.institution?.name} + + ) : ( + + {course.institution?.name || course.professor?.institution?.name} + + )} +
    +
    + + )}
    @@ -251,18 +275,22 @@ function CourseDetails() { {seccion.description}

    ) : null} -

    - {seccion.materials?.length > 0 && ( - {seccion.materials.length} Recursos +

    + {(seccion.materialsCount ?? 0) > 0 && ( + + + {seccion.materialsCount} Material + {seccion.materialsCount !== 1 ? 'es' : ''} + )} - {seccion.materials?.length > 0 && - seccion.questions?.length > 0 && ( - · - )} - {seccion.questions?.length > 0 && ( - {seccion.questions.length} Preguntas + {(seccion.questionsCount ?? 0) > 0 && ( + + + {seccion.questionsCount} Pregunta + {seccion.questionsCount !== 1 ? 's' : ''} + )} -

    +
    diff --git a/src/pages/Course/CourseLearn.tsx b/src/pages/Course/CourseLearn.tsx index d1d8adc..eda8ef7 100644 --- a/src/pages/Course/CourseLearn.tsx +++ b/src/pages/Course/CourseLearn.tsx @@ -12,9 +12,10 @@ import MaterialsList from '../../components/student/MaterialsList'; import QuestionsList from '../../components/student/QuestionsList'; import Button from '../../components/ui/Button/Button'; import ErrorBoundary from '../../components/ui/ErrorBoundary/ErrorBoundary'; -import { CheckCircle2, BookOpen, ArrowLeft } from 'lucide-react'; +import { CheckCircle2, BookOpen, ArrowLeft, AlertCircle } from 'lucide-react'; import type { Unit } from '../../types/entities'; import toast from 'react-hot-toast'; +import { getProfessorName } from '../../lib/professor'; export default function CourseLearn() { const { courseId } = useParams<{ courseId: string }>(); @@ -41,13 +42,20 @@ export default function CourseLearn() { useEffect(() => { if (isErrorEnrollment && enrollmentError?.response?.status === 404) { navigate(`/courses/${courseId}`); - console.log("No enrollment found, redirecting to course details."); + console.log('No enrollment found, redirecting to course details.'); } if (courseUnits.length > 0 && !currentUnit) { setCurrentUnit(courseUnits[0]); } - }, [isErrorEnrollment, enrollmentError, courseUnits, currentUnit, courseId, navigate]); + }, [ + isErrorEnrollment, + enrollmentError, + courseUnits, + currentUnit, + courseId, + navigate, + ]); const handleSelectUnit = (unitNumber: number) => { const unit = courseUnits.find((u) => u.unitNumber === unitNumber); @@ -56,15 +64,21 @@ export default function CourseLearn() { window.scrollTo({ top: 0, behavior: 'smooth' }); } }; - + const handleToggleCompleteUnit = () => { if (!currentUnit || !enrollment) return; const isCompleted = completedUnits.includes(currentUnit.unitNumber); if (isCompleted) { - uncompleteUnit({ enrollmentId: enrollment.id, unitNumber: currentUnit.unitNumber }); + uncompleteUnit({ + enrollmentId: enrollment.id, + unitNumber: currentUnit.unitNumber, + }); } else { - toast.success("Unidad completada con éxito!") - completeUnit({ enrollmentId: enrollment.id, unitNumber: currentUnit.unitNumber }); + toast.success('Unidad completada con éxito!'); + completeUnit({ + enrollmentId: enrollment.id, + unitNumber: currentUnit.unitNumber, + }); } }; @@ -78,7 +92,7 @@ export default function CourseLearn() {
    ); } - + if (!enrollment || !course) { return (
    @@ -101,8 +115,8 @@ export default function CourseLearn() { const isCurrentUnitCompleted = currentUnit ? completedUnits.includes(currentUnit.unitNumber) : false; - - const instructorName = `${course.professor?.user?.name || ''} ${course.professor?.user?.surname || ''}`.trim() || 'Instructor'; + + const instructorName = getProfessorName(course?.professor); return (
    @@ -153,6 +167,24 @@ export default function CourseLearn() {
    + {course.status === 'en-desarrollo' && ( +
    +
    +
    + +
    +

    + Curso en Desarrollo +

    +

    + Este curso fue marcado como en desarrollo por el profesor, ten en cuenta que la información es susceptible a cambios. +

    +
    +
    +
    +
    + )} +
    -

    - {currentUnit.name} -

    +

    + {currentUnit.name} +

    - +
    @@ -198,13 +230,13 @@ export default function CourseLearn() {
    - - {currentUnit.materials.length > 0 && ( + + {currentUnit.materials && currentUnit.materials.length > 0 && (
    )} - {currentUnit.questions.length > 0 && ( + {currentUnit.questions && currentUnit.questions.length > 0 && (
    -
    - +
    +
    -
    ) : (
    -

    Comienza tu Aprendizaje

    +

    + Comienza tu Aprendizaje +

    {courseUnits.length > 0 ? 'Selecciona una unidad del menú para comenzar a ver el contenido.' @@ -245,4 +292,4 @@ export default function CourseLearn() {

    ); -} \ No newline at end of file +} diff --git a/src/pages/Course/CourseListPage.tsx b/src/pages/Course/CourseListPage.tsx index 9474b3b..7348bc2 100644 --- a/src/pages/Course/CourseListPage.tsx +++ b/src/pages/Course/CourseListPage.tsx @@ -14,13 +14,12 @@ import Button from '../../components/ui/Button/Button.tsx'; import { Search, LayoutGrid, List } from 'lucide-react'; import { useDebounce } from '../../hooks/useDebounce.ts'; import { useProfessors } from '../../hooks/useProfessor.ts'; - +import { getProfessorName } from '../../lib/professor'; const CourseListPage = () => { const navigate = useNavigate(); - + const [isGridView, setIsGridView] = useState(true); - // Get search params from URL (if needed in future) const [searchParams, setSearchParams] = useSearchParams(); @@ -30,11 +29,13 @@ const CourseListPage = () => { courseTypeId: searchParams.get('courseTypeId') || '', institutionId: searchParams.get('institutionId') || '', professorId: searchParams.get('professorId') || '', - isFree: searchParams.has('isFree') ? searchParams.get('isFree') === 'true' : undefined, + isFree: searchParams.has('isFree') + ? searchParams.get('isFree') === 'true' + : undefined, sortBy: searchParams.get('sortBy') || 'createdAt', sortOrder: (searchParams.get('sortOrder') as 'ASC' | 'DESC') || 'DESC', limit: Number(searchParams.get('limit')) || 9, - status: 'publicado' + status: 'publicado', }; const [searchTerm, setSearchTerm] = useState(filters.q || ''); @@ -54,12 +55,16 @@ const CourseListPage = () => { status: 'publicado', }); - const { data: courseTypesData, isLoading: isLoadingTypes } = useCourseTypes({}); + const { data: courseTypesData, isLoading: isLoadingTypes } = useCourseTypes( + {} + ); const courseTypes = courseTypesData?.courseTypes || []; - const {data: profeesorsData,isLoading:isLoadingProfessor } =useProfessors(); + const { data: profeesorsData, isLoading: isLoadingProfessor } = + useProfessors(); const professors = profeesorsData || []; - const { data: institutions, isLoading: isLoadingInstitutions } = useInstitutions(); + const { data: institutions, isLoading: isLoadingInstitutions } = + useInstitutions(); const courses = data?.pages.flatMap((page) => page.courses) || []; const totalCourses = data?.pages[0]?.total || 0; @@ -69,16 +74,18 @@ const CourseListPage = () => { key: keyof SearchCoursesParams, value: string | boolean | undefined | number ) => { - setSearchParams(prevParams => { - // Delete the param if the value is undefined, null or empty string - if (value === undefined || value === null || value === '') { - prevParams.delete(key); - } else { - - prevParams.set(key, String(value)); - } - return prevParams; - }, { replace: true }); + setSearchParams( + (prevParams) => { + // Delete the param if the value is undefined, null or empty string + if (value === undefined || value === null || value === '') { + prevParams.delete(key); + } else { + prevParams.set(key, String(value)); + } + return prevParams; + }, + { replace: true } + ); }; return ( @@ -143,12 +150,17 @@ const CourseListPage = () => { id="institution-filter" label="Institución" value={filters.institutionId || ''} - onChange={(e) => handleFilterChange('institutionId', e.target.value)} + onChange={(e) => + handleFilterChange('institutionId', e.target.value) + } disabled={isLoadingInstitutions} > {institutions?.map((inst) => ( - ))} @@ -159,14 +171,18 @@ const CourseListPage = () => { id="sort-by-filter" label="Ordenar por" value={`${filters.sortBy}-${filters.sortOrder}`} - onChange={(e) => { // Update both sortBy and sortOrder + onChange={(e) => { + // Update both sortBy and sortOrder const [sortBy, sortOrder] = e.target.value.split('-'); - - setSearchParams(prev => { - prev.set('sortBy', sortBy); - prev.set('sortOrder', sortOrder); - return prev; - }, { replace: true }); + + setSearchParams( + (prev) => { + prev.set('sortBy', sortBy); + prev.set('sortOrder', sortOrder); + return prev; + }, + { replace: true } + ); }} > @@ -175,23 +191,20 @@ const CourseListPage = () => { - handleFilterChange('professorId', e.target.value)} + disabled={isLoadingProfessor} + > + + {professors.map((professor) => ( - )) - } - - + ))} +
    @@ -268,4 +281,4 @@ const CourseListPage = () => { ); }; -export default CourseListPage; \ No newline at end of file +export default CourseListPage; diff --git a/src/pages/Course/TakeAssessmentPage.tsx b/src/pages/Course/TakeAssessmentPage.tsx index 2530a96..112b408 100644 --- a/src/pages/Course/TakeAssessmentPage.tsx +++ b/src/pages/Course/TakeAssessmentPage.tsx @@ -1,5 +1,5 @@ import { useParams, useNavigate } from 'react-router-dom'; -import { useState, useEffect, useCallback } from 'react'; +import { useState, useEffect, useCallback, useRef } from 'react'; import { ArrowLeft, Clock, AlertCircle, CheckCircle, Send } from 'lucide-react'; import Button from '../../components/ui/Button/Button'; import { @@ -35,15 +35,17 @@ export default function TakeAssessmentPage() { QuestionForStudent[] >([]); + const hasAutoSubmittedRef = useRef(false); + const { data: assessment, isLoading } = useAssessment(assessmentId); const startAttemptMutation = useStartAttempt(); const saveAnswersMutation = useSaveAnswers(); const submitAttemptMutation = useSubmitAttempt(); - const handleSubmit = useCallback(async () => { + const handleSubmit = useCallback(async (forceSubmit = false) => { if (!attemptId) return; - if (Object.keys(answers).length === 0) { + if (!forceSubmit && Object.keys(answers).length === 0) { alert('Debes responder al menos una pregunta para enviar la evaluación.'); return; } @@ -54,19 +56,29 @@ export default function TakeAssessmentPage() { answer, }) ); - + try { - await submitAttemptMutation.mutateAsync({ - attemptId, - submitData: { attemptId, answers: answersArray }, - }); + if (answersArray.length > 0) { + await submitAttemptMutation.mutateAsync({ + attemptId, + submitData: { attemptId, answers: answersArray }, + }); + + navigate( + `/courses/${courseId}/assessments/${assessmentId}/results/${attemptId}` + ); + } else if (forceSubmit) { + toast.error("El tiempo se agotó y no hubo respuestas registradas."); + navigate(`/courses/${courseId}/assessments`); + } - navigate( - `/courses/${courseId}/assessments/${assessmentId}/results/${attemptId}` - ); } catch (error) { console.error('Error submitting attempt:', error); - alert('Hubo un error al enviar la evaluación.'); + if (forceSubmit) { + navigate(`/courses/${courseId}/assessments`); + } else { + toast.error('Hubo un error al enviar la evaluación.'); + } } }, [ attemptId, @@ -91,13 +103,12 @@ export default function TakeAssessmentPage() { }); setAttemptId(attempt.id); setHasStarted(true); + hasAutoSubmittedRef.current = false; - // Guardamos las preguntas del intento (SIN respuestas correctas) if (attempt.assessment?.questions) { setAttemptQuestions(attempt.assessment.questions); } - // Si hay respuestas previas guardadas (auto-save), las cargamos if (attempt.answers && attempt.answers.length > 0) { const savedAnswers: Record = {}; attempt.answers.forEach((answer) => { @@ -152,18 +163,27 @@ export default function TakeAssessmentPage() { }, [hasStarted, assessment, timeLeft]); useEffect(() => { + if (hasAutoSubmittedRef.current) return; + if (timeLeft !== null && timeLeft > 0) { const timer = setInterval(() => { - setTimeLeft((prev) => (prev !== null ? prev - 1 : null)); + setTimeLeft((prev) => { + if (prev !== null && prev <= 1) { + clearInterval(timer); + return 0; + } + return prev !== null ? prev - 1 : null; + }); }, 1000); return () => clearInterval(timer); } else if (timeLeft === 0) { - handleSubmit(); + hasAutoSubmittedRef.current = true; + handleSubmit(true); } }, [timeLeft, handleSubmit]); useEffect(() => { - if (hasStarted && attemptId && Object.keys(answers).length > 0) { + if (hasStarted && attemptId && Object.keys(answers).length > 0 && !hasAutoSubmittedRef.current) { const autoSave = setInterval(() => { const answersArray = Object.entries(answers).map( ([questionId, answer]) => ({ @@ -334,8 +354,8 @@ export default function TakeAssessmentPage() {
    )}
    ); -} +} \ No newline at end of file diff --git a/src/pages/FAQPage.tsx b/src/pages/FAQPage.tsx index e315f25..5b7bb66 100644 --- a/src/pages/FAQPage.tsx +++ b/src/pages/FAQPage.tsx @@ -15,10 +15,6 @@ const faqs = [ question: '¿Cómo me inscribo en un curso?', answer: 'Una vez que encuentres un curso de tu interés, haz clic en él para ver los detalles. Si es gratuito, puedes inscribirte directamente. Si es de pago, deberás completar el proceso de pago.', }, - { - question: '¿Puedo obtener un certificado al completar un curso?', - answer: 'Sí, al completar exitosamente un curso y aprobar las evaluaciones requeridas, recibirás un certificado digital.', - }, { question: '¿Cómo me convierto en profesor?', answer: 'Debes registrarte como usuario y luego enviar una solicitud para convertirte en profesor desde tu perfil. Nuestro equipo revisará tu solicitud.', @@ -30,11 +26,7 @@ const faqs = [ { question: '¿Qué métodos de pago aceptan?', answer: 'Aceptamos pagos con tarjetas de crédito y débito a través de nuestra plataforma segura de pagos.', - }, - { - question: '¿Puedo solicitar un reembolso?', - answer: 'Ofrecemos reembolsos dentro de los primeros 7 días después de la compra si no has completado más del 20% del curso.', - }, + } ]; export default function FAQPage() { diff --git a/src/pages/Professor/ProfessorAnalyticsPage.tsx b/src/pages/Professor/ProfessorAnalyticsPage.tsx index af73e19..7fec156 100644 --- a/src/pages/Professor/ProfessorAnalyticsPage.tsx +++ b/src/pages/Professor/ProfessorAnalyticsPage.tsx @@ -18,6 +18,12 @@ import { import { useProfessorAnalytics } from '../../hooks/useProfessor.ts'; import { formatCurrency, toAmount } from '../../lib/currency'; +type MonthlyRevenuePoint = { + month: string; + revenue: number; + sales: number; +}; + const ProfessorAnalyticsPage = () => { const { data: analyticsData, isLoading } = useProfessorAnalytics(); @@ -26,26 +32,27 @@ const ProfessorAnalyticsPage = () => { const totalEarningsInCents = analyticsData?.totalEarningsInCents ?? 0; const totalSales = analyticsData?.totalSales ?? 0; - // Transformar datos mensuales para el gráfico - const monthlyRevenueData = + const monthNames = [ + 'Ene', + 'Feb', + 'Mar', + 'Abr', + 'May', + 'Jun', + 'Jul', + 'Ago', + 'Sep', + 'Oct', + 'Nov', + 'Dic', + ]; + + const monthlyRevenueData: MonthlyRevenuePoint[] = analyticsData?.monthlyEarnings?.map((item) => { - // Convertir formato "2025-10" a nombre de mes - const [, monthNum] = item.month.split('-'); - const monthNames = [ - 'Ene', - 'Feb', - 'Mar', - 'Abr', - 'May', - 'Jun', - 'Jul', - 'Ago', - 'Sep', - 'Oct', - 'Nov', - 'Dic', - ]; - const monthName = monthNames[parseInt(monthNum) - 1]; + const parts = item.month.split('-'); + const monthNum = parts[1] ?? '01'; + const monthIndex = Math.max(0, Math.min(11, parseInt(monthNum, 10) - 1)); + const monthName = monthNames[monthIndex] ?? monthNum; return { month: monthName, @@ -69,6 +76,7 @@ const ProfessorAnalyticsPage = () => { )} + Estudiantes totales @@ -81,6 +89,7 @@ const ProfessorAnalyticsPage = () => { )} + Cursos publicados @@ -91,6 +100,7 @@ const ProfessorAnalyticsPage = () => { )} + Ventas totales @@ -108,6 +118,7 @@ const ProfessorAnalyticsPage = () => { Ingresos Mensuales Tus ingresos de los últimos meses + {isLoading ? (
    @@ -128,8 +139,24 @@ const ProfessorAnalyticsPage = () => { border: '1px solid #e2e8f0', borderRadius: '0.5rem', }} - formatter={(value: number, name: string) => { - if (name === 'revenue') { + formatter={( + value: number | string | Array | undefined, + name: string | number | undefined + ) => { + const safeName = String(name ?? ''); + + if (value === undefined) { + return ['-', safeName === 'sales' ? 'Ventas' : safeName]; + } + + if (Array.isArray(value)) { + return [ + value, + safeName === 'sales' ? 'Ventas' : safeName, + ]; + } + + if (safeName === 'revenue' && typeof value === 'number') { return [ '$' + value.toLocaleString('es-AR', { @@ -139,7 +166,8 @@ const ProfessorAnalyticsPage = () => { 'Ingresos', ]; } - return [value, name === 'sales' ? 'Ventas' : name]; + + return [value, safeName === 'sales' ? 'Ventas' : safeName]; }} /> diff --git a/src/pages/Professor/ProfessorAppeal.tsx b/src/pages/Professor/ProfessorAppeal.tsx index 33e2f85..5d6de8b 100644 --- a/src/pages/Professor/ProfessorAppeal.tsx +++ b/src/pages/Professor/ProfessorAppeal.tsx @@ -104,20 +104,21 @@ export default function ProfessorApplication() { } return ( -
    -
    - - -
    -
    - +
    +
    +
    + + +
    +
    + +
    + UpSkill
    - UpSkill -
    - -
    + +
    -
    +
    +
    ) } \ No newline at end of file diff --git a/src/pages/Professor/ProfessorAppealStatusPage.tsx b/src/pages/Professor/ProfessorAppealStatusPage.tsx index 40c463d..157e64e 100644 --- a/src/pages/Professor/ProfessorAppealStatusPage.tsx +++ b/src/pages/Professor/ProfessorAppealStatusPage.tsx @@ -1,18 +1,19 @@ import { useState } from 'react'; -import { Link } from 'react-router-dom'; +import { Link, useNavigate } from 'react-router-dom'; import { useMyAppeals } from '../../hooks/useAppeals'; import { Card } from '../../components/ui/Card/Card'; import StatusBadge from '../../components/ui/StatusBadge/StatusBadge'; import Button from '../../components/ui/Button/Button'; import { Dialog, DialogHeader, DialogTitle } from '../../components/ui/Dialog/Dialog'; import DocumentViewer from '../../components/ui/DocumentViewer/DocumentViewer'; -import { ArrowLeft, Calendar, Eye, GraduationCap, ExternalLink, Info } from 'lucide-react'; +import { ArrowLeft, Calendar, Eye, GraduationCap, ExternalLink, Info, Plus } from 'lucide-react'; import type { Appeal } from '../../types/entities'; export default function ProfessorAppealStatusPage() { const { data: appeals, isLoading } = useMyAppeals(); const [selectedAppeal, setSelectedAppeal] = useState(null); const [documentUrlToShow, setDocumentUrlToShow] = useState(null); + const navigate = useNavigate(); if (isLoading) { return ( @@ -26,6 +27,8 @@ export default function ProfessorAppealStatusPage() { } const sortedAppeals = appeals?.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()) || []; + + const hasPendingAppeal = appeals?.some((appeal) => appeal.state === 'pending'); return (
    @@ -37,17 +40,28 @@ export default function ProfessorAppealStatusPage() {
    -
    - -
    -

    Solicitud en curso detectada

    -

    - Ya tienes una solicitud registrada en el sistema. Puedes ver el estado y los detalles de todas tus solicitudes a continuación. -

    + {hasPendingAppeal && ( +
    + +
    +

    Solicitud en curso detectada

    +

    + Ya tienes una solicitud pendiente de revisión. Cuando sea procesada, recibirás una notificación. +

    +
    -
    + )} -

    Mis Solicitudes

    +
    +

    Mis Solicitudes

    + + {!hasPendingAppeal && ( + + )} +
    {sortedAppeals.map((appeal) => ( diff --git a/src/pages/Professor/ProfessorCourseEdition.tsx b/src/pages/Professor/ProfessorCourseEdition.tsx index e5db68a..d641749 100644 --- a/src/pages/Professor/ProfessorCourseEdition.tsx +++ b/src/pages/Professor/ProfessorCourseEdition.tsx @@ -154,7 +154,7 @@ export default function ProfessorCourseEdition() { const currentUnit = units.find((u) => u.unitNumber === selectedUnitId); if (currentUnit && currentUnit.hasUnsavedChanges) { - performSave(selectedUnitId, currentUnit.detail); + performSave(selectedUnitId, currentUnit.detail || ''); } else { setLastSavedAt(new Date()); setSaveError(null); @@ -171,7 +171,6 @@ export default function ProfessorCourseEdition() { description: currentCourse.description, status: currentCourse.status || 'en-desarrollo', isFree: currentCourse.isFree, - // Convertir centavos a pesos para mostrar en el formulario price: currentCourse.priceInCents ? toAmount(currentCourse.priceInCents) : 0, @@ -190,12 +189,12 @@ export default function ProfessorCourseEdition() { setUnits(unitsFromBackend); - if (unitsFromBackend.length > 0 && selectedUnitId === null) { - setSelectedUnitId(unitsFromBackend[0].unitNumber); + if (unitsFromBackend.length > 0) { + setSelectedUnitId((prev) => (prev === null ? unitsFromBackend[0].unitNumber : prev)); } } } - }, [courses, courseId, selectedUnitId]); // selectedUnitId agregado a dependencias + }, [courses, courseId]); // Efecto para auto-guardar cuando cambias de unidad useEffect(() => { @@ -206,7 +205,7 @@ export default function ProfessorCourseEdition() { const previousUnit = units.find((u) => u.unitNumber === previousUnitId); if (previousUnit && previousUnit.hasUnsavedChanges) { - performSave(previousUnitId, previousUnit.detail); + performSave(previousUnitId, previousUnit.detail || ''); } } previousUnitRef.current = currentUnitId; @@ -220,7 +219,7 @@ export default function ProfessorCourseEdition() { if (hasUnsavedChanges) { const unitWithChanges = units.find((unit) => unit.hasUnsavedChanges); if (unitWithChanges && courseId) { - performSave(unitWithChanges.unitNumber, unitWithChanges.detail); + performSave(unitWithChanges.unitNumber, unitWithChanges.detail || ''); } event.preventDefault(); event.returnValue = ''; @@ -231,7 +230,6 @@ export default function ProfessorCourseEdition() { return () => window.removeEventListener('beforeunload', handleBeforeUnload); }, [units, courseId, performSave]); - // ... (Handlers para unidades, preguntas, materiales igual que antes) ... const handleCreateUnit = () => { if (!courseId || !courses) return; @@ -563,7 +561,6 @@ export default function ProfessorCourseEdition() { setNewImageFile(null); setSaveError(null); setLastSavedAt(new Date()); - toast.success('Configuración guardada exitosamente'); }, onError: (error) => { setSaveError(error.message || 'Error al guardar configuración'); diff --git a/src/pages/User/ProfessorProfileTab.tsx b/src/pages/User/ProfessorProfileTab.tsx index 0cb1778..acbb550 100644 --- a/src/pages/User/ProfessorProfileTab.tsx +++ b/src/pages/User/ProfessorProfileTab.tsx @@ -31,7 +31,7 @@ export default function InstructorProfileTab() { const handleLeaveInstitution = () => { if (professor?.institution && confirm('¿Estás seguro de que quieres abandonar esta institución?')) { - leaveInstitution(professor.institution.institutionId, { + leaveInstitution(professor.institution.institutionId || professor.institution.id || '', { onError: (error) => alert(`Error al abandonar la institución: ${error.message}`), }); } diff --git a/src/types/entities.ts b/src/types/entities.ts index 4f0f96c..ffbce51 100644 --- a/src/types/entities.ts +++ b/src/types/entities.ts @@ -17,9 +17,14 @@ export interface User { export interface Professor { id: string; - user: User; - state: string; - courses: Course[]; + // Cuando viene de la API completa (endpoints internos) + user?: User; + state?: string; + courses?: Course[]; + // Cuando viene de la API pública (simplificado) + name?: string; + surname?: string; + profilePicture?: string; institution?: Institution; managedInstitution?: Institution; } @@ -43,8 +48,9 @@ export interface Course { status: string; rating?: number; studentsCount?: number; - students: Student[]; - units: Unit[]; + unitsCount?: number; // Contador de unidades (para vistas públicas) + students?: Student[]; // Solo presente en vistas autorizadas + units?: Unit[]; // Solo presente para usuarios inscritos } export interface CourseType { @@ -55,13 +61,14 @@ export interface CourseType { } export interface Institution { - institutionId: string; + institutionId?: string; // Opcional en respuestas públicas + id?: string; // Algunas respuestas usan 'id' en lugar de 'institutionId' name: string; - description: string; - normalizedName: string; + description?: string; + normalizedName?: string; aliases?: string[]; - manager: Professor; - professors: Professor[]; + manager?: Professor; + professors?: Professor[]; } export type EnrollmentState = 'enrolled' | 'completed' | 'dropped'; @@ -97,7 +104,7 @@ export interface JoinRequest { export interface QuestionPayload { options: string[]; - correctAnswer: number | string; + correctAnswer?: number | string; // Opcional - solo disponible para profesores } export const QuestionType = { @@ -155,9 +162,13 @@ export interface Unit { unitNumber: number; // Identificador único + orden name: string; description?: string; - detail: string; // Contenido principal (no description) - questions: string[]; // Referencias a Question IDs (no objetos completos) - materials: Material[]; // Materiales embebidos + // Para vista pública (no inscrito) + materialsCount?: number; + questionsCount?: number; + // Para vista inscrito (con contenido completo) + detail?: string; // Contenido principal + questions?: string[]; // Referencias a Question IDs + materials?: Material[]; // Materiales embebidos } // Tipos específicos para edición de cursos diff --git a/vite.config.ts b/vite.config.ts index 0329fb4..8575627 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -10,11 +10,14 @@ import { fileURLToPath } from 'node:url'; import { storybookTest } from '@storybook/addon-vitest/vitest-plugin'; import { playwright } from '@vitest/browser-playwright'; -const dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url)); +const dirname = + typeof __dirname !== 'undefined' + ? __dirname + : path.dirname(fileURLToPath(import.meta.url)); // More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon export default defineConfig({ - plugins: [react(), mkcert()], + plugins: [react(), ...(process.env.CI ? [] : [mkcert()])], server: { port: 5173, host: true, @@ -58,27 +61,6 @@ export default defineConfig({ }, setupFiles: ['.storybook/vitest.setup.ts'] } - }, { - extends: true, - plugins: [ - // The plugin will run tests for the stories defined in your Storybook config - // See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest - storybookTest({ - configDir: path.join(dirname, '.storybook') - }) - ], - test: { - name: 'storybook', - browser: { - enabled: true, - headless: true, - provider: playwright({}), - instances: [{ - browser: 'chromium' - }] - }, - setupFiles: ['.storybook/vitest.setup.ts'] - } }] } -}); \ No newline at end of file +});