diff --git a/.github/actions/pnpm-install/action.yml b/.github/actions/pnpm-install/action.yml index a305a41f1..988227e3f 100644 --- a/.github/actions/pnpm-install/action.yml +++ b/.github/actions/pnpm-install/action.yml @@ -7,7 +7,7 @@ runs: - name: Setup pnpm uses: pnpm/action-setup@v2 with: - version: 8 # or your preferred version + version: 8 - name: Get pnpm store directory id: pnpm-cache diff --git a/.github/workflows/ci-app.yml b/.github/workflows/ci-app.yml deleted file mode 100644 index 1f31d00f7..000000000 --- a/.github/workflows/ci-app.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: CI-APP -on: - pull_request: - paths: - - 'services/ahhachul.com/**' - - 'package.json' - - 'pnpm-lock.yaml' - - '.github/workflows/**' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -env: - DEFAULT_NODE_VERSION: '20.13.0' - -jobs: - ci: - runs-on: ubuntu-latest - timeout-minutes: 15 - - steps: - - name: Check out the repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up Node.js - uses: actions/setup-node@v3 - timeout-minutes: 1 - with: - node-version: ${{ env.DEFAULT_NODE_VERSION }} - - - name: Install dependencies - uses: ./.github/actions/pnpm-install - timeout-minutes: 5 - - - name: Create .env file for ahhachul.com - timeout-minutes: 1 - run: | - echo '${{ secrets.DEV_REACT_APP_CONFIG }}' > config.json - cat config.json | jq -r 'to_entries[] | "\(.key)=\(.value)"' >> services/ahhachul.com/.env - - - name: Lint ahhachul.com - timeout-minutes: 3 - run: pnpm lint:app - continue-on-error: false - - - name: Test ahhachul.com - if: success() - timeout-minutes: 5 - run: pnpm test:app - continue-on-error: false - - - name: Build ahhachul.com - if: success() - timeout-minutes: 5 - run: pnpm build:app - continue-on-error: false - - - name: Upload test results - if: always() - uses: actions/upload-artifact@v3 - with: - name: test-results - path: services/ahhachul.com/coverage - retention-days: 7 diff --git a/.github/workflows/ci-one-app.yml b/.github/workflows/ci-one-app.yml deleted file mode 100644 index f5e0b11d3..000000000 --- a/.github/workflows/ci-one-app.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: CI-ONE-APP -on: - pull_request: - paths: - - 'services/one-app/**' - - 'package.json' - - 'pnpm-lock.yaml' - - '.github/workflows/**' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -env: - DEFAULT_NODE_VERSION: '20.13.0' - -jobs: - ci: - runs-on: ubuntu-latest - timeout-minutes: 15 - - steps: - - name: Check out the repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up Node.js - uses: actions/setup-node@v3 - timeout-minutes: 1 - with: - node-version: ${{ env.DEFAULT_NODE_VERSION }} - - - name: Install dependencies - uses: ./.github/actions/pnpm-install - timeout-minutes: 5 - - - name: Create .env file for one-app - timeout-minutes: 1 - run: | - echo '${{ secrets.DEV_ONE_APP_CONFIG }}' | jq -r 'to_entries | .[] | "\(.key)=\(.value)"' > services/one-app/.env - - - name: TypeScript Compilation Check - timeout-minutes: 3 - working-directory: ./services/one-app - run: pnpm tsc --noEmit --project tsconfig.json - continue-on-error: false - - - name: Lint one-app - timeout-minutes: 3 - run: pnpm lint:one-app - continue-on-error: false - - - name: Test one-app - if: success() - timeout-minutes: 5 - run: pnpm test:one-app - continue-on-error: false - - - name: Build one-app - if: success() - timeout-minutes: 5 - run: pnpm build:one-app - continue-on-error: false - - - name: Upload test results - if: always() - uses: actions/upload-artifact@v3 - with: - name: one-app-test-results - path: services/one-app/coverage - retention-days: 7 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..41f5b1bcc --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,58 @@ +name: APP CI + +on: + pull_request: + paths: + - 'services/**' + - 'package.json' + - 'pnpm-lock.yaml' + - '.github/workflows/**' + +permissions: + actions: read + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + DEFAULT_NODE_VERSION: '20.13.0' + HUSKY: '0' + NEXT_TELEMETRY_DISABLED: '1' + NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} + +jobs: + main: + name: ๐Ÿš€ CI Pipeline + runs-on: ubuntu-latest + timeout-minutes: 15 + + steps: + - name: ๐Ÿ“ฅ Checkout Repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: ๐Ÿ”จ Setup Node.js + uses: actions/setup-node@v3 + timeout-minutes: 1 + with: + node-version: ${{ env.DEFAULT_NODE_VERSION }} + + - name: ๐Ÿ“ฆ Install Dependencies + uses: ./.github/actions/pnpm-install + timeout-minutes: 5 + + - name: ๐Ÿ”„ Set Nx Base/Head + uses: nrwl/nx-set-shas@v4 + + - name: ๐Ÿ”‘ Create Environment File + timeout-minutes: 1 + run: | + echo '${{ secrets.DEV_REACT_APP_CONFIG }}' > config.json + echo '${{ secrets.DEV_ONE_APP_CONFIG }}' | jq -r 'to_entries | .[] | "\(.key)=\(.value)"' > services/one-app/.env + + - name: ๐Ÿƒ Run CI Tasks + run: | + pnpm nx affected --parallel=3 -t type-check,build,test,lint diff --git a/.github/workflows/deploy-app.yml b/.github/workflows/deploy-app.yml index cb88c05e0..162457e00 100644 --- a/.github/workflows/deploy-app.yml +++ b/.github/workflows/deploy-app.yml @@ -4,6 +4,8 @@ on: push: branches: - main + # ์ถ”ํ›„ develop ๋ธŒ๋ Œ์น˜๋Š” ์ œ์™ธ + - develop paths: - 'services/ahhachul.com/**' @@ -39,7 +41,7 @@ jobs: cat config.json | jq -r 'to_entries[] | "\(.key)=\(.value)"' >> services/ahhachul.com/.env - name: Build ahhachul.com - run: pnpm build:app + run: pnpm app:build - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v2 diff --git a/.github/workflows/deploy-one-app.yml b/.github/workflows/deploy-nextjs.yml similarity index 98% rename from .github/workflows/deploy-one-app.yml rename to .github/workflows/deploy-nextjs.yml index d02e9bddb..878cd0b1d 100644 --- a/.github/workflows/deploy-one-app.yml +++ b/.github/workflows/deploy-nextjs.yml @@ -4,6 +4,8 @@ on: push: branches: - main + # ์ถ”ํ›„ develop ๋ธŒ๋ Œ์น˜๋Š” ์ œ์™ธ + - develop paths: - 'services/one-app/**' diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..25fa6215f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib" +} diff --git a/Dockerfile b/Dockerfile index a760ab1b0..7d2258652 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,27 @@ -FROM node:20-alpine +FROM node:20.13.0-alpine + +RUN npm install -g pnpm + RUN apk add --no-cache libc6-compat + WORKDIR /app -COPY services/one-app ./services/one-app -COPY nx.json tsconfig* ./ -COPY package.json ./ -COPY pnpm-lock.yaml ./ -COPY pnpm-workspace.yaml ./ -COPY .nx ./ +COPY packages/utils ./packages/utils +COPY services/one-app ./services/one-app +COPY nx.json tsconfig* ./ +COPY package.json ./ +COPY pnpm-lock.yaml ./ +COPY pnpm-workspace.yaml ./ +COPY .nx ./ RUN pnpm install +RUN pnpm add -w sharp + ENV NEXT_TELEMETRY_DISABLED=1 -RUN pnpm build:one-app +RUN pnpm nextjs:build EXPOSE 3000 -CMD ["pnpm", "start:one-app"] +CMD ["pnpm", "nextjs:start"] \ No newline at end of file diff --git a/nx.json b/nx.json index 18af629a9..f3df7a6c0 100644 --- a/nx.json +++ b/nx.json @@ -1,78 +1,64 @@ { "extends": "nx/presets/npm.json", - "affected": { - "defaultBase": "main" - }, - "workspaceLayout": { - "appsDir": "services", - "libsDir": "packages" - }, - "tasksRunnerOptions": { - "default": { - "runner": "nx/tasks-runners/default", - "options": { - "cacheableOperations": ["build", "test", "test:run", "test:coverage", "lint", "lint:fix"] - } - } - }, + "workspaceLayout": { "appsDir": "services", "libsDir": "packages" }, "targetDefaults": { - "dev": { - "cache": false, - "persistent": true - }, - "build": { - "dependsOn": ["^build"], - "outputs": ["{projectRoot}/dist/**"] - }, - "start": { - "dependsOn": ["build"], - "cache": false, - "persistent": true + "type-check": { + "cache": true, + "inputs": [ + "{projectRoot}/**/*.{ts,tsx}", + "{projectRoot}/tsconfig.json", + "{workspaceRoot}/tsconfig.base.json" + ] }, "lint": { - "dependsOn": ["^lint"], - "inputs": ["{projectRoot}/**/*.{js,ts,tsx}"] - }, - "lint:fix": { - "dependsOn": ["^lint:fix"], - "inputs": ["{projectRoot}/**/*.{js,ts,tsx}"] - }, - "test": { - "dependsOn": ["^build"], - "cache": false, - "inputs": ["{projectRoot}/src/**/*.{js,ts,tsx}", "{projectRoot}/test/**/*.{js,ts,tsx}"] - }, - "test:run": { - "dependsOn": ["^build"], "cache": true, - "inputs": ["{projectRoot}/src/**/*.{js,ts,tsx}", "{projectRoot}/test/**/*.{js,ts,tsx}"] + "inputs": [ + "{projectRoot}/**/*.{js,ts,tsx}", + "{projectRoot}/.eslintrc.*", + "{workspaceRoot}/.eslintrc.*" + ] }, - "test:coverage": { - "dependsOn": ["^build"], + "build": { "cache": true, - "inputs": ["{projectRoot}/src/**/*.{js,ts,tsx}", "{projectRoot}/test/**/*.{js,ts,tsx}"], - "outputs": ["{projectRoot}/coverage/**"] - }, - "test:playwright": { "dependsOn": ["^build"], - "cache": false, - "inputs": ["{projectRoot}/src/**/*.{js,ts,tsx}", "{projectRoot}/e2e/**/*.{js,ts,tsx}"] + "inputs": ["production", "{workspaceRoot}/package.json"], + "outputs": ["{projectRoot}/dist/**", "{projectRoot}/.next/**"] }, - "test:playwright:ui": { - "dependsOn": ["^build"], - "cache": false, - "inputs": ["{projectRoot}/src/**/*.{js,ts,tsx}", "{projectRoot}/e2e/**/*.{js,ts,tsx}"] + "test": { + "cache": true, + "inputs": [ + "{projectRoot}/src/**/*.{js,ts,tsx}", + "{projectRoot}/test/**/*.{js,ts,tsx}", + "{projectRoot}/jest.config.*", + "{workspaceRoot}/jest.config.*" + ] }, - "test:all": { - "dependsOn": ["^build", "test:run", "test:playwright"], - "cache": false + "start": { "cache": false, "persistent": true, "dependsOn": ["^build"] }, + "lint:fix": { + "cache": true, + "inputs": [ + "{projectRoot}/**/*.{js,ts,tsx}", + "{projectRoot}/.eslintrc.*", + "{workspaceRoot}/.eslintrc.*" + ] } }, + "defaultBase": "main", "namedInputs": { - "default": ["{projectRoot}/**/*", "!{projectRoot}/**/*.md"], - "production": ["default", "!{projectRoot}/**/*.spec.ts"] + "default": [ + "{projectRoot}/**/*", + "!{projectRoot}/**/*.md", + "!{projectRoot}/**/CHANGELOG.md", + "!{projectRoot}/**/*.spec.ts", + "!{projectRoot}/coverage/**" + ], + "production": [ + "default", + "!{projectRoot}/**/*.spec.ts", + "!{projectRoot}/test/**/*", + "!{projectRoot}/**/__tests__/**/*" + ] }, - "implicitDependencies": { - "**/.env.*local": "*" - } + "parallel": 3, + "nxCloudId": "67a199375e4612c72a76ed4f" } diff --git a/package.json b/package.json index c66f4eb5e..804221ec6 100644 --- a/package.json +++ b/package.json @@ -1,27 +1,25 @@ { - "name": "ahhachul-front", + "name": "ahhachul", "private": true, "scripts": { - "clean:branch": "git fetch --prune && git branch | grep -v '^*' | xargs git branch -D", - "clean:cache": "nx reset", "prepare": "husky", "preinstall": "corepack enable", - "start": "nx run-many --target=start --all", - "lint": "nx run-many --target=lint --all", - "lint:fix": "nx run-many --target=lint:fix --all", - "test": "nx run-many --target=test --all", - "test:run": "nx run-many --target=test:run --all", - "test:coverage": "nx run-many --target=test:coverage --all", - "test:e2e": "nx run-many --target=test:playwright --all", - "test:e2e:ui": "nx run-many --target=test:playwright:ui --all", - "build:all": "nx run-many --target=build --all", - "lint:app": "nx lint @ahhachul/app", - "test:app": "nx test @ahhachul/app", - "build:app": "nx build @ahhachul/app", - "lint:one-app": "nx lint @ahhachul/one-app", - "test:one-app": "nx test @ahhachul/one-app", - "build:one-app": "nx build @ahhachul/one-app", - "start:one-app": "nx start @ahhachul/one-app" + "clean:branch": "git fetch --prune && git branch | grep -v '^*' | xargs git branch -D", + "clean:cache": "nx reset", + "app:type": "nx type-check @ahhachul/app", + "app:lint": "nx lint @ahhachul/app", + "app:test": "nx test @ahhachul/app", + "app:build": "nx build @ahhachul/app", + "nextjs:type": "nx type-check @ahhachul/one-app", + "nextjs:lint": "nx lint @ahhachul/one-app", + "nextjs:test": "nx test @ahhachul/one-app", + "nextjs:build": "nx build @ahhachul/one-app", + "nextjs:start": "nx start @ahhachul/one-app", + "all:start": "nx run-many --target=start --all", + "all:build": "nx run-many --target=build --all", + "all:lint": "nx run-many --target=lint --all", + "all:lint:fix": "nx run-many --target=lint:fix --all", + "all:test": "nx run-many --target=test --all" }, "devDependencies": { "@trivago/prettier-plugin-sort-imports": "^4.3.0", @@ -37,7 +35,7 @@ "nano-staged": "^0.8.0", "nx": "^20.3.1", "prettier": "^3.2.5", - "typescript": "5.4.5" + "typescript": "^5" }, "packageManager": "pnpm@9.1.0", "engines": { diff --git a/packages/utils/package.json b/packages/utils/package.json index 7441d57ca..15f4b9028 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -18,6 +18,7 @@ "date-fns": "^4.1.0" }, "devDependencies": { - "@types/crypto-js": "^4.2.2" + "@types/crypto-js": "^4.2.2", + "typescript": "^5" } } diff --git a/services/one-app/src/common/utils/array.ts b/packages/utils/src/array.ts similarity index 100% rename from services/one-app/src/common/utils/array.ts rename to packages/utils/src/array.ts diff --git a/services/one-app/src/common/utils/common.ts b/packages/utils/src/delay.ts similarity index 100% rename from services/one-app/src/common/utils/common.ts rename to packages/utils/src/delay.ts diff --git a/services/ahhachul.com/src/utils/form.ts b/packages/utils/src/form.ts similarity index 88% rename from services/ahhachul.com/src/utils/form.ts rename to packages/utils/src/form.ts index 7498d15f0..fc32118ac 100644 --- a/services/ahhachul.com/src/utils/form.ts +++ b/packages/utils/src/form.ts @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ - export const appendFilesToFormData = (formData: FormData, files: File[], name = 'files'): void => { files.forEach(file => { formData.append(name, file, file.name); @@ -16,6 +14,7 @@ export const extractFormData = ( form: T, excludeKey: K, ): Omit => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const { [excludeKey]: _, ...restData } = form; return restData; }; diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 5c2a163f0..dd92de197 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,4 +1,7 @@ export * from './date'; +export * from './form'; +export * from './delay'; +export * from './array'; export * from './number'; export * from './object'; export * from './crypto'; diff --git a/packages/utils/src/object.ts b/packages/utils/src/object.ts index 6be9e40af..8d072f80f 100644 --- a/packages/utils/src/object.ts +++ b/packages/utils/src/object.ts @@ -1,4 +1,5 @@ -import type { ObjectKeys } from './object.type'; +export type ObjectQueryParams = Record; +export type ObjectKeys> = `${Exclude}`; export const isValidObject = (obj: unknown): obj is Record => { return typeof obj === 'object' && obj !== null && !Array.isArray(obj); @@ -30,3 +31,23 @@ export function objectEntries>( ): Array<[ObjectKeys, Type[ObjectKeys]]> { return Object.entries(obj) as Array<[ObjectKeys, Type[ObjectKeys]]>; } + +export const objectToQueryString = (params: ObjectQueryParams): string => { + return Object.entries(params) + .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) + .join('&'); +}; + +export const queryStringToObject = (queryString: string): Record => { + const query = queryString.startsWith('?') ? queryString.slice(1) : queryString; + + if (!query) return {}; + + return query.split('&').reduce((params: Record, param) => { + const [key, value] = param.split('=').map(decodeURIComponent); + if (key) { + params[key] = value || ''; + } + return params; + }, {}); +}; diff --git a/packages/utils/src/object.type.ts b/packages/utils/src/object.type.ts deleted file mode 100644 index d513115c4..000000000 --- a/packages/utils/src/object.type.ts +++ /dev/null @@ -1 +0,0 @@ -export type ObjectKeys> = `${Exclude}`; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a0f96da2..d047c519f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,10 +12,10 @@ importers: version: 4.3.0(prettier@3.4.2) '@typescript-eslint/eslint-plugin': specifier: ^7.10.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) '@typescript-eslint/parser': specifier: ^7.10.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.4.5) + version: 7.18.0(eslint@8.57.1)(typescript@5.7.3) eslint: specifier: ^8.56.0 version: 8.57.1 @@ -27,13 +27,13 @@ importers: version: 6.0.2(eslint@8.57.1) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.4.2) + version: 5.2.3(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.4.2) eslint-plugin-react: specifier: ^7.34.1 version: 7.37.4(eslint@8.57.1) eslint-plugin-unused-imports: specifier: ^4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1) + version: 4.1.4(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1) husky: specifier: ^9.0.11 version: 9.1.7 @@ -42,13 +42,13 @@ importers: version: 0.8.0 nx: specifier: ^20.3.1 - version: 20.3.1(@swc/core@1.10.7) + version: 20.3.3(@swc/core@1.10.11) prettier: specifier: ^3.2.5 version: 3.4.2 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: ^5 + version: 5.7.3 packages/esbuild-config: dependencies: @@ -68,51 +68,54 @@ importers: '@types/crypto-js': specifier: ^4.2.2 version: 4.2.2 + typescript: + specifier: ^5 + version: 5.7.3 services/ahhachul.com: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@18.3.18)(react@18.3.1) + version: 11.14.0(@types/react@19.0.8)(react@19.0.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@hookform/resolvers': specifier: ^3.9.1 - version: 3.10.0(react-hook-form@7.54.2(react@18.3.1)) + version: 3.10.0(react-hook-form@7.54.2(react@19.0.0)) '@lexical/react': specifier: ^0.23.1 - version: 0.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.22) + version: 0.23.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(yjs@13.6.23) '@lottiefiles/react-lottie-player': specifier: ^3.6.0 - version: 3.6.0(react@18.3.1) + version: 3.6.0(react@19.0.0) '@radix-ui/react-dropdown-menu': specifier: ^2.1.4 - version: 2.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@stackflow/core': specifier: ^1.0.10 - version: 1.1.0 + version: 1.1.1 '@stackflow/link': specifier: ^1.4.0 - version: 1.6.0(@stackflow/core@1.1.0)(@stackflow/plugin-history-sync@1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@stackflow/plugin-preload@1.4.3(@stackflow/core@1.1.0)(@stackflow/plugin-history-sync@1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + version: 1.6.1(@stackflow/core@1.1.1)(@stackflow/plugin-history-sync@1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@stackflow/plugin-preload@1.4.3(@stackflow/core@1.1.1)(@stackflow/plugin-history-sync@1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@stackflow/plugin-basic-ui': specifier: ^1.5.3 - version: 1.11.1(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(babel-plugin-macros@3.1.0)(react@18.3.1) + version: 1.11.1(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(babel-plugin-macros@3.1.0)(react@19.0.0) '@stackflow/plugin-history-sync': specifier: ^1.4.0 - version: 1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + version: 1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@stackflow/plugin-preload': specifier: ^1.4.1 - version: 1.4.3(@stackflow/core@1.1.0)(@stackflow/plugin-history-sync@1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + version: 1.4.3(@stackflow/core@1.1.1)(@stackflow/plugin-history-sync@1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@stackflow/plugin-renderer-basic': specifier: ^1.1.8 - version: 1.1.13(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + version: 1.1.13(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@stackflow/react': specifier: ^1.1.8 - version: 1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1) + version: 1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0) '@tanstack/react-query': specifier: ^5.62.8 - version: 5.64.1(react@18.3.1) + version: 5.64.2(react@19.0.0) axios: specifier: ^1.7.9 version: 1.7.9 @@ -124,31 +127,31 @@ importers: version: 0.23.1 motion: specifier: ^11.18.0 - version: 11.18.0(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: - specifier: ^18.3.1 - version: 18.3.1 + specifier: ^19.0.0 + version: 19.0.0 react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) react-hook-form: specifier: ^7.49.3 - version: 7.54.2(react@18.3.1) + version: 7.54.2(react@19.0.0) react-intersection-observer: specifier: ^9.15.0 - version: 9.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 9.15.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-lazy-load-image-component: specifier: ^1.6.3 - version: 1.6.3(react@18.3.1) + version: 1.6.3(react@19.0.0) react-loading-skeleton: specifier: ^3.5.0 - version: 3.5.0(react@18.3.1) + version: 3.5.0(react@19.0.0) react-swipeable: specifier: ^7.0.2 - version: 7.0.2(react@18.3.1) + version: 7.0.2(react@19.0.0) react-zoom-pan-pinch: specifier: 3.6.0 - version: 3.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) rxjs: specifier: ^7.8.1 version: 7.8.1 @@ -157,107 +160,125 @@ importers: version: 11.2.1 vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - zod: - specifier: ^3.24.1 - version: 3.24.1 + version: 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) zustand: specifier: ^5.0.2 - version: 5.0.3(@types/react@18.3.18)(immer@9.0.21)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + version: 5.0.3(@types/react@19.0.8)(react@19.0.0) devDependencies: '@ahhachul/utils': specifier: workspace:* version: link:../../packages/utils '@playwright/test': specifier: ^1.49.1 - version: 1.49.1 + version: 1.50.0 + '@svgr/plugin-svgo': + specifier: ^8.1.0 + version: 8.1.0(@svgr/core@8.1.0(typescript@5.7.3))(typescript@5.7.3) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 '@testing-library/react': specifier: ^16.1.0 - version: 16.1.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@testing-library/react-hooks': specifier: ^8.0.1 - version: 8.0.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 8.0.1(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@testing-library/user-event': specifier: ^14.5.2 - version: 14.5.2(@testing-library/dom@10.4.0) + version: 14.6.1(@testing-library/dom@10.4.0) '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 '@types/node': - specifier: 20.13.0 + specifier: ^20 version: 20.13.0 '@types/react': - specifier: ^18.3.12 - version: 18.3.18 + specifier: ^19 + version: 19.0.8 '@types/react-dom': - specifier: ^18.3.1 - version: 18.3.5(@types/react@18.3.18) + specifier: ^19 + version: 19.0.3(@types/react@19.0.8) '@types/react-lazy-load-image-component': specifier: ^1.6.4 version: 1.6.4 '@vitejs/plugin-react-swc': specifier: ^3.7.2 - version: 3.7.2(@swc/helpers@0.5.15)(vite@6.0.7(@types/node@20.13.0)(jiti@1.21.7)(terser@5.37.0)(yaml@2.7.0)) + version: 3.7.2(@swc/helpers@0.5.15)(vite@6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0)) '@vitest/coverage-v8': specifier: ^2.1.8 - version: 2.1.8(vitest@2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(happy-dom@12.10.3)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5))(terser@5.37.0)) + version: 2.1.8(vitest@2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.7.3))) '@vitest/ui': specifier: ^2.1.8 version: 2.1.8(vitest@2.1.8) + autocannon: + specifier: ^8.0.0 + version: 8.0.0 globals: specifier: ^15.12.0 version: 15.14.0 jsdom: specifier: ^26.0.0 version: 26.0.0 + lighthouse: + specifier: ^12.3.0 + version: 12.3.0 msw: specifier: ^2.7.0 - version: 2.7.0(@types/node@20.13.0)(typescript@5.4.5) + version: 2.7.0(@types/node@20.13.0)(typescript@5.7.3) + puppeteer: + specifier: ^24.1.1 + version: 24.1.1(typescript@5.7.3) + rollup-plugin-visualizer: + specifier: ^5.14.0 + version: 5.14.0(rollup@4.32.0) + sharp: + specifier: ^0.33.5 + version: 0.33.5 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: ^5 + version: 5.7.3 vite: specifier: ^6.0.1 - version: 6.0.7(@types/node@20.13.0)(jiti@1.21.7)(terser@5.37.0)(yaml@2.7.0) + version: 6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0) + vite-bundle-analyzer: + specifier: ^0.16.1 + version: 0.16.1 + vite-plugin-image-optimizer: + specifier: ^1.1.8 + version: 1.1.8(vite@6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0)) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.3.0(rollup@4.30.1)(typescript@5.4.5)(vite@6.0.7(@types/node@20.13.0)(jiti@1.21.7)(terser@5.37.0)(yaml@2.7.0)) + version: 4.3.0(rollup@4.32.0)(typescript@5.7.3)(vite@6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0)) vitest: specifier: ^2.1.8 - version: 2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(happy-dom@12.10.3)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5))(terser@5.37.0) + version: 2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.7.3)) services/one-app: dependencies: '@lexical/react': specifier: ^0.21.0 - version: 0.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.22) + version: 0.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(yjs@13.6.23) '@lottiefiles/react-lottie-player': specifier: ^3.5.4 - version: 3.5.4(react@18.3.1) + version: 3.6.0(react@19.0.0) '@radix-ui/react-dialog': specifier: ^1.1.2 - version: 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-dropdown-menu': specifier: ^2.1.2 - version: 2.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-slot': specifier: ^1.1.1 - version: 1.1.1(@types/react@18.3.18)(react@18.3.1) + version: 1.1.1(@types/react@19.0.8)(react@19.0.0) '@tanstack/react-query': - specifier: ^5.59.16 - version: 5.64.1(react@18.3.1) - axios: - specifier: ^1.7.7 - version: 1.7.9 + specifier: ^5.62.8 + version: 5.64.2(react@19.0.0) date-fns: specifier: ^4.1.0 version: 4.1.0 embla-carousel-react: specifier: ^8.5.1 - version: 8.5.2(react@18.3.1) + version: 8.5.2(react@19.0.0) js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -266,59 +287,65 @@ importers: version: 0.21.0 lucide-react: specifier: ^0.460.0 - version: 0.460.0(react@18.3.1) + version: 0.460.0(react@19.0.0) next: - specifier: 15.1.4 - version: 15.1.4(@babel/core@7.26.0)(@playwright/test@1.49.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - nuqs: - specifier: ^2.2.2 - version: 2.3.0(next@15.1.4(@babel/core@7.26.0)(@playwright/test@1.49.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-router-dom@7.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-router@7.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - query-string: - specifier: ^9.1.1 - version: 9.1.1 + specifier: 15.1.6 + version: 15.1.6(@babel/core@7.26.7)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + nextjs-toploader: + specifier: ^3.7.15 + version: 3.7.15(next@15.1.6(@babel/core@7.26.7)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: - specifier: ^18.3.1 - version: 18.3.1 + specifier: ^19.0.0 + version: 19.0.0 react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) + react-hook-form: + specifier: ^7.49.3 + version: 7.54.2(react@19.0.0) react-intersection-observer: - specifier: ^9.13.1 - version: 9.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^9.15.0 + version: 9.15.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-lazy-load-image-component: specifier: ^1.6.3 - version: 1.6.3(react@18.3.1) + version: 1.6.3(react@19.0.0) react-loading-skeleton: specifier: ^3.5.0 - version: 3.5.0(react@18.3.1) + version: 3.5.0(react@19.0.0) + react-swipeable: + specifier: ^7.0.2 + version: 7.0.2(react@19.0.0) react-zoom-pan-pinch: specifier: 3.6.0 - version: 3.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) swiper: specifier: ^11.1.15 version: 11.2.1 vaul: specifier: ^1.1.1 - version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) zod: specifier: ^3.23.8 version: 3.24.1 zustand: - specifier: ^5.0.0 - version: 5.0.3(@types/react@18.3.18)(immer@9.0.21)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + specifier: ^5.0.2 + version: 5.0.3(@types/react@19.0.8)(react@19.0.0) devDependencies: + '@ahhachul/utils': + specifier: workspace:* + version: link:../../packages/utils '@faker-js/faker': specifier: ^9.0.3 - version: 9.3.0 - '@mswjs/http-middleware': - specifier: ^0.10.2 - version: 0.10.3(msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5)) + version: 9.4.0 + '@next/bundle-analyzer': + specifier: ^15.1.6 + version: 15.1.6 '@svgr/webpack': specifier: ^8.1.0 - version: 8.1.0(typescript@5.4.5) + version: 8.1.0(typescript@5.7.3) '@tanstack/react-query-devtools': specifier: ^5.59.16 - version: 5.64.1(@tanstack/react-query@5.64.1(react@18.3.1))(react@18.3.1) + version: 5.64.2(@tanstack/react-query@5.64.2(react@19.0.0))(react@19.0.0) '@testing-library/dom': specifier: ^10.4.0 version: 10.4.0 @@ -327,16 +354,10 @@ importers: version: 6.6.3 '@testing-library/react': specifier: ^16.0.1 - version: 16.1.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@testing-library/user-event': specifier: ^14.5.2 - version: 14.5.2(@testing-library/dom@10.4.0) - '@types/cors': - specifier: ^2.8.17 - version: 2.8.17 - '@types/express': - specifier: ^5.0.0 - version: 5.0.0 + version: 14.6.1(@testing-library/dom@10.4.0) '@types/jest': specifier: ^29.5.14 version: 29.5.14 @@ -344,59 +365,56 @@ importers: specifier: ^3.0.6 version: 3.0.6 '@types/node': - specifier: 20.13.0 + specifier: ^20 version: 20.13.0 '@types/react': - specifier: ^18.3.12 - version: 18.3.18 + specifier: ^19 + version: 19.0.8 '@types/react-dom': - specifier: ^18.3.1 - version: 18.3.5(@types/react@18.3.18) + specifier: ^19 + version: 19.0.3(@types/react@19.0.8) '@types/react-lazy-load-image-component': specifier: ^1.6.4 version: 1.6.4 + autocannon: + specifier: ^8.0.0 + version: 8.0.0 autoprefixer: specifier: ^10.0.1 - version: 10.4.20(postcss@8.5.0) - class-variance-authority: - specifier: ^0.7.0 - version: 0.7.1 + version: 10.4.20(postcss@8.5.1) clsx: specifier: ^2.1.1 version: 2.1.1 - cors: - specifier: ^2.8.5 - version: 2.8.5 - express: - specifier: ^4.21.1 - version: 4.21.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.13.0)(babel-plugin-macros@3.1.0) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 + lighthouse: + specifier: ^12.3.0 + version: 12.3.0 msw: specifier: ^2.5.2 - version: 2.7.0(@types/node@20.13.0)(typescript@5.4.5) + version: 2.7.0(@types/node@20.13.0)(typescript@5.7.3) postcss: specifier: ^8 - version: 8.5.0 + version: 8.5.1 + puppeteer: + specifier: ^24.1.1 + version: 24.1.1(typescript@5.7.3) tailwind-merge: specifier: ^2.5.4 version: 2.6.0 tailwindcss: specifier: ^3.3.0 version: 3.4.17 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.17) ts-jest: specifier: ^29.1.1 - version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.13.0)(babel-plugin-macros@3.1.0))(typescript@5.4.5) + version: 29.2.5(@babel/core@7.26.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.7))(jest@29.7.0(@types/node@20.13.0)(babel-plugin-macros@3.1.0))(typescript@5.7.3) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: ^5 + version: 5.7.3 packages: '@adobe/css-tools@4.4.1': @@ -419,10 +437,16 @@ packages: } engines: { node: '>=6.0.0' } - '@asamuzakjp/css-color@2.8.2': + '@asamuzakjp/css-color@2.8.3': + resolution: + { + integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==, + } + + '@assemblyscript/loader@0.19.23': resolution: { - integrity: sha512-RtWv9jFN2/bLExuZgFFZ0I3pWWeezAHGgrmjqGGWclATl1aDe3yhCUaI0Ilkp6OCk9zX7+FjvDasEX8Q9Rxc5w==, + integrity: sha512-ulkCYfFbYj01ie1MDOyxv2F6SpRN1TOj7fQxbP07D6HmeR+gr2JLSmINKjga2emB+b1L2KGrFKBTc+e00p54nw==, } '@babel/code-frame@7.26.2': @@ -439,10 +463,10 @@ packages: } engines: { node: '>=6.9.0' } - '@babel/core@7.26.0': + '@babel/core@7.26.7': resolution: { - integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==, + integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==, } engines: { node: '>=6.9.0' } @@ -618,17 +642,17 @@ packages: } engines: { node: '>=6.9.0' } - '@babel/helpers@7.26.0': + '@babel/helpers@7.26.7': resolution: { - integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==, + integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==, } engines: { node: '>=6.9.0' } - '@babel/parser@7.26.5': + '@babel/parser@7.26.7': resolution: { - integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==, + integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==, } engines: { node: '>=6.0.0' } hasBin: true @@ -1297,19 +1321,19 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.25.9': + '@babel/plugin-transform-typeof-symbol@7.26.7': resolution: { - integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==, + integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==, } engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.26.5': + '@babel/plugin-transform-typescript@7.26.7': resolution: { - integrity: sha512-GJhPO0y8SD5EYVCy2Zr+9dSZcEgaSmq5BLR0Oc25TOEhC+ba49vUAGZFjy8v79z9E1mdldq4x9d1xgh4L1d5dQ==, + integrity: sha512-5cJurntg+AT+cgelGP9Bt788DKiAw9gIMSMU2NJrLAilnj0m8WZWUNZPSLOmadYsujHutpgElO+50foX+ib/Wg==, } engines: { node: '>=6.9.0' } peerDependencies: @@ -1351,10 +1375,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.26.0': + '@babel/preset-env@7.26.7': resolution: { - integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==, + integrity: sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==, } engines: { node: '>=6.9.0' } peerDependencies: @@ -1386,10 +1410,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.26.0': + '@babel/runtime@7.26.7': resolution: { - integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==, + integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==, } engines: { node: '>=6.9.0' } @@ -1407,10 +1431,10 @@ packages: } engines: { node: '>=6.9.0' } - '@babel/traverse@7.26.5': + '@babel/traverse@7.26.7': resolution: { - integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==, + integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==, } engines: { node: '>=6.9.0' } @@ -1421,10 +1445,10 @@ packages: } engines: { node: '>=6.9.0' } - '@babel/types@7.26.5': + '@babel/types@7.26.7': resolution: { - integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==, + integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==, } engines: { node: '>=6.9.0' } @@ -1452,6 +1476,13 @@ packages: integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==, } + '@colors/colors@1.5.0': + resolution: + { + integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==, + } + engines: { node: '>=0.1.90' } + '@csstools/color-helpers@5.0.1': resolution: { @@ -1495,6 +1526,13 @@ packages: } engines: { node: '>=18' } + '@discoveryjs/json-ext@0.5.7': + resolution: + { + integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==, + } + engines: { node: '>=10.0.0' } + '@emnapi/core@1.3.1': resolution: { @@ -2266,10 +2304,10 @@ packages: } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - '@faker-js/faker@9.3.0': + '@faker-js/faker@9.4.0': resolution: { - integrity: sha512-r0tJ3ZOkMd9xsu3VRfqlFR6cz0V/jFYRswAIpC+m/DIfAUXq7g8N7wTAlhSANySXYGKzGryfDXwtwsY8TxEIDw==, + integrity: sha512-85+k0AxaZSTowL0gXp8zYWDIrWclTbRPg/pm/V0dSFZ6W6D4lhcG3uuZl4zLsEKfEvs69xDbLN2cHQudwp95JA==, } engines: { node: '>=18.0.0', npm: '>=9.0.0' } @@ -2300,6 +2338,36 @@ packages: integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==, } + '@formatjs/ecma402-abstract@2.3.2': + resolution: + { + integrity: sha512-6sE5nyvDloULiyOMbOTJEEgWL32w+VHkZQs8S02Lnn8Y/O5aQhjOEXwWzvR7SsBE/exxlSpY2EsWZgqHbtLatg==, + } + + '@formatjs/fast-memoize@2.2.6': + resolution: + { + integrity: sha512-luIXeE2LJbQnnzotY1f2U2m7xuQNj2DA8Vq4ce1BY9ebRZaoPB1+8eZ6nXpLzsxuW5spQxr7LdCg+CApZwkqkw==, + } + + '@formatjs/icu-messageformat-parser@2.11.0': + resolution: + { + integrity: sha512-Hp81uTjjdTk3FLh/dggU5NK7EIsVWc5/ZDWrIldmf2rBuPejuZ13CZ/wpVE2SToyi4EiroPTQ1XJcJuZFIxTtw==, + } + + '@formatjs/icu-skeleton-parser@1.8.12': + resolution: + { + integrity: sha512-QRAY2jC1BomFQHYDMcZtClqHR55EEnB96V7Xbk/UiBodsuFc5kujybzt87+qj1KqmJozFhk6n4KiT1HKwAkcfg==, + } + + '@formatjs/intl-localematcher@0.5.10': + resolution: + { + integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==, + } + '@hookform/resolvers@3.10.0': resolution: { @@ -2674,12 +2742,6 @@ packages: } engines: { node: '>=6.0.0' } - '@jridgewell/source-map@0.3.6': - resolution: - { - integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==, - } - '@jridgewell/sourcemap-codec@1.5.0': resolution: { @@ -2960,14 +3022,6 @@ packages: peerDependencies: yjs: '>=13.5.22' - '@lottiefiles/react-lottie-player@3.5.4': - resolution: - { - integrity: sha512-2FptWtHQ+o7MzdsMKSvNZ1Mz7xtKSYI0WL9HjZ1r+CvsXR3lbLQUDp7Pwx6qhg0Akm4VluQ+8/D1S1fcr1Ao4w==, - } - peerDependencies: - react: 16 - 18 - '@lottiefiles/react-lottie-player@3.6.0': resolution: { @@ -2976,20 +3030,17 @@ packages: peerDependencies: react: 16 - 19 - '@mdn/browser-compat-data@5.6.29': + '@mdn/browser-compat-data@5.6.33': resolution: { - integrity: sha512-+s2wY7ftjoXf3UwyvR7U4EKDCpUuxlCdnv2OP5BAk1uvoCgUVVU0GtVNolD5Gj+1oVWX1y5a4Yj/LIaThUDmGA==, + integrity: sha512-56GEfTIgrPXAc9EL3MbJmv0QiIxZR/UzpOCzPtCGsW/IYr+3Bj1DbtBXnNMD2vOMqv1UVdCxy7LXxRcU+wxO5A==, } - '@mswjs/http-middleware@0.10.3': + '@minimistjs/subarg@1.0.0': resolution: { - integrity: sha512-6CoX9IivDF7hggORdA4vX6uz+pkY1urGQMhmviHmYya/0b4EXwmhaXlGLQG3G29heqb3qdjp61V0+E2xRtyR5A==, + integrity: sha512-Q/ONBiM2zNeYUy0mVSO44mWWKYM3UHuEK43PKIOzJCbvUnPoMH1K+gk3cf1kgnCVJFlWmddahQQCmrmBGlk9jQ==, } - engines: { node: '>=18' } - peerDependencies: - msw: '>=2.0.0' '@mswjs/interceptors@0.37.5': resolution: @@ -3004,79 +3055,85 @@ packages: integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==, } - '@next/env@15.1.4': + '@next/bundle-analyzer@15.1.6': + resolution: + { + integrity: sha512-hGzQyDqJzFHcHNCyTqM3o05BpVq5tGnRODccZBVJDBf5Miv/26UJPMB0wh9L9j3ylgHC+0/v8BaBnBBek1rC6Q==, + } + + '@next/env@15.1.6': resolution: { - integrity: sha512-2fZ5YZjedi5AGaeoaC0B20zGntEHRhi2SdWcu61i48BllODcAmmtj8n7YarSPt4DaTsJaBFdxQAVEVzgmx2Zpw==, + integrity: sha512-d9AFQVPEYNr+aqokIiPLNK/MTyt3DWa/dpKveiAaVccUadFbhFEvY6FXYX2LJO2Hv7PHnLBu2oWwB4uBuHjr/w==, } - '@next/swc-darwin-arm64@15.1.4': + '@next/swc-darwin-arm64@15.1.6': resolution: { - integrity: sha512-wBEMBs+np+R5ozN1F8Y8d/Dycns2COhRnkxRc+rvnbXke5uZBHkUGFgWxfTXn5rx7OLijuUhyfB+gC/ap58dDw==, + integrity: sha512-u7lg4Mpl9qWpKgy6NzEkz/w0/keEHtOybmIl0ykgItBxEM5mYotS5PmqTpo+Rhg8FiOiWgwr8USxmKQkqLBCrw==, } engines: { node: '>= 10' } cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.4': + '@next/swc-darwin-x64@15.1.6': resolution: { - integrity: sha512-7sgf5rM7Z81V9w48F02Zz6DgEJulavC0jadab4ZsJ+K2sxMNK0/BtF8J8J3CxnsJN3DGcIdC260wEKssKTukUw==, + integrity: sha512-x1jGpbHbZoZ69nRuogGL2MYPLqohlhnT9OCU6E6QFewwup+z+M6r8oU47BTeJcWsF2sdBahp5cKiAcDbwwK/lg==, } engines: { node: '>= 10' } cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.4': + '@next/swc-linux-arm64-gnu@15.1.6': resolution: { - integrity: sha512-JaZlIMNaJenfd55kjaLWMfok+vWBlcRxqnRoZrhFQrhM1uAehP3R0+Aoe+bZOogqlZvAz53nY/k3ZyuKDtT2zQ==, + integrity: sha512-jar9sFw0XewXsBzPf9runGzoivajeWJUc/JkfbLTC4it9EhU8v7tCRLH7l5Y1ReTMN6zKJO0kKAGqDk8YSO2bg==, } engines: { node: '>= 10' } cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.4': + '@next/swc-linux-arm64-musl@15.1.6': resolution: { - integrity: sha512-7EBBjNoyTO2ipMDgCiORpwwOf5tIueFntKjcN3NK+GAQD7OzFJe84p7a2eQUeWdpzZvhVXuAtIen8QcH71ZCOQ==, + integrity: sha512-+n3u//bfsrIaZch4cgOJ3tXCTbSxz0s6brJtU3SzLOvkJlPQMJ+eHVRi6qM2kKKKLuMY+tcau8XD9CJ1OjeSQQ==, } engines: { node: '>= 10' } cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.4': + '@next/swc-linux-x64-gnu@15.1.6': resolution: { - integrity: sha512-9TGEgOycqZFuADyFqwmK/9g6S0FYZ3tphR4ebcmCwhL8Y12FW8pIBKJvSwV+UBjMkokstGNH+9F8F031JZKpHw==, + integrity: sha512-SpuDEXixM3PycniL4iVCLyUyvcl6Lt0mtv3am08sucskpG0tYkW1KlRhTgj4LI5ehyxriVVcfdoxuuP8csi3kQ==, } engines: { node: '>= 10' } cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.4': + '@next/swc-linux-x64-musl@15.1.6': resolution: { - integrity: sha512-0578bLRVDJOh+LdIoKvgNDz77+Bd85c5JrFgnlbI1SM3WmEQvsjxTA8ATu9Z9FCiIS/AliVAW2DV/BDwpXbtiQ==, + integrity: sha512-L4druWmdFSZIIRhF+G60API5sFB7suTbDRhYWSjiw0RbE+15igQvE2g2+S973pMGvwN3guw7cJUjA/TmbPWTHQ==, } engines: { node: '>= 10' } cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.4': + '@next/swc-win32-arm64-msvc@15.1.6': resolution: { - integrity: sha512-JgFCiV4libQavwII+kncMCl30st0JVxpPOtzWcAI2jtum4HjYaclobKhj+JsRu5tFqMtA5CJIa0MvYyuu9xjjQ==, + integrity: sha512-s8w6EeqNmi6gdvM19tqKKWbCyOBvXFbndkGHl+c9YrzsLARRdCHsD9S1fMj8gsXm9v8vhC8s3N8rjuC/XrtkEg==, } engines: { node: '>= 10' } cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.4': + '@next/swc-win32-x64-msvc@15.1.6': resolution: { - integrity: sha512-xxsJy9wzq7FR5SqPCUqdgSXiNXrMuidgckBa8nH9HtjjxsilgcN6VgXF6tZ3uEWuVEadotQJI8/9EQ6guTC4Yw==, + integrity: sha512-6xomMuu54FAFxttYr5PJbEfu96godcxBTRk1OhAvJq0/EnmFU/Ybiax30Snis4vdWZ9LGpf7Roy5fSs7v/5ROQ==, } engines: { node: '>= 10' } cpu: [x64] @@ -3103,91 +3160,91 @@ packages: } engines: { node: '>= 8' } - '@nx/nx-darwin-arm64@20.3.1': + '@nx/nx-darwin-arm64@20.3.3': resolution: { - integrity: sha512-bx++T9/8l4PK1yDTxPnROT7RG8CkWGkxKC0D7xlS/YQzE7CelDfgNYu0Bd7upZF4gafW2Uz3dd3j6WhvZLxbbg==, + integrity: sha512-4C7ShMrqp1vbH1ZgvSlkt0f35hJcqKtRcf8n/tCck46rnMkj4egXi3K1dE6uQcOorwiD1ttAr0DHcI1TTqcNXw==, } engines: { node: '>= 10' } cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@20.3.1': + '@nx/nx-darwin-x64@20.3.3': resolution: { - integrity: sha512-elg2GiSivMHU1iLFYZ+FojM2V/FmTlC8e5FKM6nZ+bIqeoBoJm8Rxxe/kEtcsPdvjj+YiKSmXOP9s45DJb9WWw==, + integrity: sha512-OUtJ7gA09pJC+a+RcZf1bGbMM4T7a/IcPb97z1xOoxr5Wm2s8BGBQUW2CKJ5gCp5iI1pGo44F12u0G9gbYClow==, } engines: { node: '>= 10' } cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@20.3.1': + '@nx/nx-freebsd-x64@20.3.3': resolution: { - integrity: sha512-1iKZOCcU7bVAC2kdoukfJ7AOTLBhm69+vPff3HCJQ0DI/5ZbmiaPeBMsAVFtJ0jFGix8yYIhgvtXgDEfbXXRFQ==, + integrity: sha512-q4SABgKYWPGOcdfRZne6n8HF4CzltRL5nJ3q093jQAUO93yPXtWzhQBaKZIZr6aPoqq0/NuH6xY4gNo4w9F8Bg==, } engines: { node: '>= 10' } cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@20.3.1': + '@nx/nx-linux-arm-gnueabihf@20.3.3': resolution: { - integrity: sha512-LAteJ1/mWYdvj7zpXuWRUq1lvUiV6YVXCdFK3+7lDW+qvW3bb5zzUwbVDAF/pPeTjBrsdHDzSWOCLm/LKtYtMw==, + integrity: sha512-e07PJcVsBT/Aelo/Vj6hLplDZamGCZ3zOJpW3XVBhdG4DC4sn+jodsdrIASoEpmF70VB89lzQsm9GrAgQPaWOA==, } engines: { node: '>= 10' } cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@20.3.1': + '@nx/nx-linux-arm64-gnu@20.3.3': resolution: { - integrity: sha512-2Qf+6NcAeODELyJR+V9hjC9kl2DwJTdI7Bw+BuiyXftfPHvZ86P//FC8kPjNaJCEEm/ZStP6Jcb1zlp4Eo2wBw==, + integrity: sha512-1Z9chlN0/hWzliMer7TvdLT8cb6BKpGjZ15a+rQuUbO/CyLhY21Ct+lXtnaBERnNPYJpNOJlrbBDuF/9wpZ4CQ==, } engines: { node: '>= 10' } cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@20.3.1': + '@nx/nx-linux-arm64-musl@20.3.3': resolution: { - integrity: sha512-8S8jlN6GFQpRakZ2ZVWq6eFnLVrEObIaxnYD0QMbsMf+qiedDJt+cDh1xebcPRvgpSgJVlJ8P6hun5+K/FiQDQ==, + integrity: sha512-RrLgujPU5NfDrsDRa7Y2isxGb8XkoQeJkTMUl1xmBK2Qnf4jAUn0PH0ULWrRMNgChi4nYUTn/Sf+2m6Uyoqcfw==, } engines: { node: '>= 10' } cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@20.3.1': + '@nx/nx-linux-x64-gnu@20.3.3': resolution: { - integrity: sha512-qC2On2qwYCtn/Kt8epvUn0H3NY6zG9yYhiNjkm6RvVTDmvogFQ4gtfiWSRP/EnabCRqM8FACDIO/ws5CnRBX+Q==, + integrity: sha512-/WmCnPxv1eR8tyYiFp4XoMbcXrJ8a/OIw1rpZZ5ceMKgH8lPaF2/KFf04JZZygrCKletEdqqIojBXz4AHoaueQ==, } engines: { node: '>= 10' } cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@20.3.1': + '@nx/nx-linux-x64-musl@20.3.3': resolution: { - integrity: sha512-KKwHSfV1PEKW82eJ8vxZTPepoaLbaXH/aI0VOKZbBO4ytGyGUr9wFuWPsyo06rK7qtSD7w9bN7xpiBGQk0QTsg==, + integrity: sha512-y4BJsR0fgJrXY3P7GkWfUZAeQEHMTXvaRHvzJfBSBPmnVcVZDYNTfEQYnslp8m8ahKdlJwtflxzykJ4Bwf55fw==, } engines: { node: '>= 10' } cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@20.3.1': + '@nx/nx-win32-arm64-msvc@20.3.3': resolution: { - integrity: sha512-YujkXXHn9rhtwZRDxiaxSPOMX7JkfGmXAFdyEfxhE3Dc/HjFgI+xJZ478/atttR7DWIwGpQJVLpbFWbFFpoNNg==, + integrity: sha512-BHqZitBaGT9ybv386B5QKxP5N66+xpTiYlKClzQ44o6Ca8QxnkugI64exBdcQyj+DRiL6HJhN14kaPJ1KrsKRA==, } engines: { node: '>= 10' } cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@20.3.1': + '@nx/nx-win32-x64-msvc@20.3.3': resolution: { - integrity: sha512-Os8iCamvHhE5noQKFE9D9xkiI529918tufTYmEhJ9ZmLU/ybVA0We6r7gXjYzdNfA3DtwfGXvNvUpy3u+pZXOg==, + integrity: sha512-6HcbAKghEypt4aMAoDjPn2sa6FG0MyiDabpV/cVLKokK09ngyy6qQDa5vSCUSDwI542XBxqtcv0AcZi7Ez+XUQ==, } engines: { node: '>= 10' } cpu: [x64] @@ -3211,6 +3268,12 @@ packages: integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==, } + '@paulirish/trace_engine@0.0.39': + resolution: + { + integrity: sha512-2Y/ejHX5DDi5bjfWY/0c/BLVSfQ61Jw1Hy60Hnh0hfEO632D3FVctkzT4Q/lVAdvIPR0bUaok9JDTr1pu/OziA==, + } + '@pkgjs/parseargs@0.11.0': resolution: { @@ -3225,10 +3288,10 @@ packages: } engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } - '@playwright/test@1.49.1': + '@playwright/test@1.50.0': resolution: { - integrity: sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==, + integrity: sha512-ZGNXbt+d65EGjBORQHuYKj+XhCewlwpnSd/EDuLPZGSiEWmgOJB5RmMCCYGy5aMfTs9wx61RivfDKi8H/hcMvw==, } engines: { node: '>=18' } hasBin: true @@ -3239,6 +3302,22 @@ packages: integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==, } + '@puppeteer/browsers@2.6.1': + resolution: + { + integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==, + } + engines: { node: '>=18' } + hasBin: true + + '@puppeteer/browsers@2.7.0': + resolution: + { + integrity: sha512-bO61XnTuopsz9kvtfqhVbH6LTM1koxK0IlBR+yuVrM2LB7mk8+5o1w18l5zqd5cs8xlf+ntgambqRqGifMDjog==, + } + engines: { node: '>=18' } + hasBin: true + '@radix-ui/primitive@1.1.1': resolution: { @@ -3301,10 +3380,10 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.1.4': + '@radix-ui/react-dialog@1.1.5': resolution: { - integrity: sha512-Ur7EV1IwQGCyaAuyDRiOLA5JIUZxELJljF+MbM/2NC0BYwfuRrbpS30BiQBJrVruscgUkieKkqXYDOoByaxIoA==, + integrity: sha512-LaO3e5h/NOEL4OfXjxD43k9Dx+vn+8n+PCFt6uhX/BADFflllyv3WJG6rgvvSVBxpTch938Qq/LGc2MMxipXPw==, } peerDependencies: '@types/react': '*' @@ -3329,10 +3408,10 @@ packages: '@types/react': optional: true - '@radix-ui/react-dismissable-layer@1.1.3': + '@radix-ui/react-dismissable-layer@1.1.4': resolution: { - integrity: sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==, + integrity: sha512-XDUI0IVYVSwjMXxM6P4Dfti7AH+Y4oS/TB+sglZ/EXc7cqLwGAmp1NlMrcUjj7ks6R5WTZuWKv44FBbLpwU3sA==, } peerDependencies: '@types/react': '*' @@ -3345,10 +3424,10 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dropdown-menu@2.1.4': + '@radix-ui/react-dropdown-menu@2.1.5': resolution: { - integrity: sha512-iXU1Ab5ecM+yEepGAWK8ZhMyKX4ubFdCNtol4sT9D0OVErG9PNElfx3TQhjw7n7BC5nFVz68/5//clWy+8TXzA==, + integrity: sha512-50ZmEFL1kOuLalPKHrLWvPFMons2fGx9TqQCWlPwDVpbAnaUJ1g4XNcKqFNMQymYU0kKWR4MDDi+9vUQBGFgcQ==, } peerDependencies: '@types/react': '*' @@ -3401,10 +3480,10 @@ packages: '@types/react': optional: true - '@radix-ui/react-menu@2.1.4': + '@radix-ui/react-menu@2.1.5': resolution: { - integrity: sha512-BnOgVoL6YYdHAG6DtXONaR29Eq4nvbi8rutrV/xlr3RQCMMb3yqP85Qiw/3NReozrSW+4dfLkK+rc1hb4wPU/A==, + integrity: sha512-uH+3w5heoMJtqVCgYOtYVMECk1TOrkUn0OG0p5MqXC0W2ppcuVeESbou8PTHoqAjbdTEK19AGXBWcEtR5WpEQg==, } peerDependencies: '@types/react': '*' @@ -3599,158 +3678,200 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.30.1': + '@rollup/rollup-android-arm-eabi@4.32.0': resolution: { - integrity: sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==, + integrity: sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==, } cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.30.1': + '@rollup/rollup-android-arm64@4.32.0': resolution: { - integrity: sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==, + integrity: sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==, } cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.30.1': + '@rollup/rollup-darwin-arm64@4.32.0': resolution: { - integrity: sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==, + integrity: sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==, } cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.30.1': + '@rollup/rollup-darwin-x64@4.32.0': resolution: { - integrity: sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==, + integrity: sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==, } cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.30.1': + '@rollup/rollup-freebsd-arm64@4.32.0': resolution: { - integrity: sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==, + integrity: sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==, } cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.30.1': + '@rollup/rollup-freebsd-x64@4.32.0': resolution: { - integrity: sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==, + integrity: sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==, } cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.30.1': + '@rollup/rollup-linux-arm-gnueabihf@4.32.0': resolution: { - integrity: sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==, + integrity: sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==, } cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.30.1': + '@rollup/rollup-linux-arm-musleabihf@4.32.0': resolution: { - integrity: sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==, + integrity: sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==, } cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.30.1': + '@rollup/rollup-linux-arm64-gnu@4.32.0': resolution: { - integrity: sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==, + integrity: sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==, } cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.30.1': + '@rollup/rollup-linux-arm64-musl@4.32.0': resolution: { - integrity: sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==, + integrity: sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==, } cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.30.1': + '@rollup/rollup-linux-loongarch64-gnu@4.32.0': resolution: { - integrity: sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==, + integrity: sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==, } cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': resolution: { - integrity: sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==, + integrity: sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==, } cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.30.1': + '@rollup/rollup-linux-riscv64-gnu@4.32.0': resolution: { - integrity: sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==, + integrity: sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==, } cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.30.1': + '@rollup/rollup-linux-s390x-gnu@4.32.0': resolution: { - integrity: sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==, + integrity: sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==, } cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.30.1': + '@rollup/rollup-linux-x64-gnu@4.32.0': resolution: { - integrity: sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==, + integrity: sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==, } cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.30.1': + '@rollup/rollup-linux-x64-musl@4.32.0': resolution: { - integrity: sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==, + integrity: sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==, } cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.30.1': + '@rollup/rollup-win32-arm64-msvc@4.32.0': resolution: { - integrity: sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==, + integrity: sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==, } cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.30.1': + '@rollup/rollup-win32-ia32-msvc@4.32.0': resolution: { - integrity: sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==, + integrity: sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==, } cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.30.1': + '@rollup/rollup-win32-x64-msvc@4.32.0': resolution: { - integrity: sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==, + integrity: sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==, } cpu: [x64] os: [win32] + '@sentry-internal/tracing@7.120.3': + resolution: + { + integrity: sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg==, + } + engines: { node: '>=8' } + + '@sentry/core@7.120.3': + resolution: + { + integrity: sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==, + } + engines: { node: '>=8' } + + '@sentry/integrations@7.120.3': + resolution: + { + integrity: sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ==, + } + engines: { node: '>=8' } + + '@sentry/node@7.120.3': + resolution: + { + integrity: sha512-t+QtekZedEfiZjbkRAk1QWJPnJlFBH/ti96tQhEq7wmlk3VszDXraZvLWZA0P2vXyglKzbWRGkT31aD3/kX+5Q==, + } + engines: { node: '>=8' } + + '@sentry/types@7.120.3': + resolution: + { + integrity: sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==, + } + engines: { node: '>=8' } + + '@sentry/utils@7.120.3': + resolution: + { + integrity: sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==, + } + engines: { node: '>=8' } + '@sinclair/typebox@0.27.8': resolution: { @@ -3769,22 +3890,22 @@ packages: integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==, } - '@stackflow/config@1.2.0': + '@stackflow/config@1.2.1': resolution: { - integrity: sha512-rb7LJf0BolnldZoIcds+38jDzXoMI+4tigq6R2OmEeZRdJCDDbfAZZnQpdhUNTSAMatZIL7b0U/X4JE2R9gCQA==, + integrity: sha512-ri2grP+BOOsIZvsFFLHZKhd1HJVPg4j8Ums09waP+voQm3hzFPnMKCEMh/cMzcSxKb+j9skWTCzDEJMTeXTQBA==, } - '@stackflow/core@1.1.0': + '@stackflow/core@1.1.1': resolution: { - integrity: sha512-IjrcTM9itdmolgURRciq8xVpI0C3mmTRRoBn2smcRSjeDBk/qUM/k37QlL+uGgcoV+kaKXpkeVXhhSIFsYAKjw==, + integrity: sha512-jU5zMRwfazPkojn5o35sR8zmtUMyQM+SBRUtIVMiyksZrvPKAtQA4h9sZ5a1/OLyXnoRKsheYwR6cRqm6pt8DQ==, } - '@stackflow/link@1.6.0': + '@stackflow/link@1.6.1': resolution: { - integrity: sha512-GQJPJJTL2la3+w5baKUAzfzieNSRm7nWuKwq2vjBHygnN668UVpUNwepc96lvaCj75x4u1l6c7w5IOfjCCwPTQ==, + integrity: sha512-M8Vu/rNn1MzFhBMJDzfCQuFU8zKTRVY1W4PoqIXVDIn9mZS1Kr8+Iaak3yODM/lPts8EZkIuRKrbf+8O3jxXaQ==, } peerDependencies: '@stackflow/core': ^1.1.0-canary.0 @@ -3805,10 +3926,10 @@ packages: '@types/react': '>=16.8.0' react: '>=16.8.0' - '@stackflow/plugin-history-sync@1.7.0': + '@stackflow/plugin-history-sync@1.7.1': resolution: { - integrity: sha512-7iJXWizB7x8cONzPdeVBkSPdRkR3Q8jVZv/84y5hyh6+MdZ9fbOKK7rtP1ZjN2/hk+kDBmXdE6jLN2b3dDWIQQ==, + integrity: sha512-qgmqil2We1Hjcg6pu5jvrOUAi98hbdQF2/d3KGnOurCUc8PYxl8o0JKbyTkoOMBRDeBOVgtQBwpHEYB3t3jwvQ==, } peerDependencies: '@stackflow/config': ^1.0.1-canary.0 @@ -3851,10 +3972,10 @@ packages: '@types/react': '>=16.8.0' react: '>=16.8.0' - '@stackflow/react@1.4.1': + '@stackflow/react@1.4.2': resolution: { - integrity: sha512-udbUmfYz2hn36+rPej3NgQqLyR0hlj+Wllh+rWS5TBz7A1lkdvWkKzOx1lhrTrNhShGn06auNlys2OWne/N8lQ==, + integrity: sha512-PuWD9t/1Ah7bhiea/B1mrQ0TDwQnqNCRJ20lArvmkObmJ+hi963LQvq8T1Sl5Q+STFZWZ4HOTx04FSZDkbUgNg==, } peerDependencies: '@stackflow/config': ^1.0.1-canary.0 @@ -3982,100 +4103,100 @@ packages: } engines: { node: '>=14' } - '@swc/core-darwin-arm64@1.10.7': + '@swc/core-darwin-arm64@1.10.11': resolution: { - integrity: sha512-SI0OFg987P6hcyT0Dbng3YRISPS9uhLX1dzW4qRrfqQdb0i75lPJ2YWe9CN47HBazrIA5COuTzrD2Dc0TcVsSQ==, + integrity: sha512-ZpgEaNcx2e5D+Pd0yZGVbpSrEDOEubn7r2JXoNBf0O85lPjUm3HDzGRfLlV/MwxRPAkwm93eLP4l7gYnc50l3g==, } engines: { node: '>=10' } cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.10.7': + '@swc/core-darwin-x64@1.10.11': resolution: { - integrity: sha512-RFIAmWVicD/l3RzxgHW0R/G1ya/6nyMspE2cAeDcTbjHi0I5qgdhBWd6ieXOaqwEwiCd0Mot1g2VZrLGoBLsjQ==, + integrity: sha512-szObinnq2o7spXMDU5pdunmUeLrfV67Q77rV+DyojAiGJI1RSbEQotLOk+ONOLpoapwGUxOijFG4IuX1xiwQ2g==, } engines: { node: '>=10' } cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.10.7': + '@swc/core-linux-arm-gnueabihf@1.10.11': resolution: { - integrity: sha512-QP8vz7yELWfop5mM5foN6KkLylVO7ZUgWSF2cA0owwIaziactB2hCPZY5QU690coJouk9KmdFsPWDnaCFUP8tg==, + integrity: sha512-tVE8aXQwd8JUB9fOGLawFJa76nrpvp3dvErjozMmWSKWqtoeO7HV83aOrVtc8G66cj4Vq7FjTE9pOJeV1FbKRw==, } engines: { node: '>=10' } cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.10.7': + '@swc/core-linux-arm64-gnu@1.10.11': resolution: { - integrity: sha512-NgUDBGQcOeLNR+EOpmUvSDIP/F7i/OVOKxst4wOvT5FTxhnkWrW+StJGKj+DcUVSK5eWOYboSXr1y+Hlywwokw==, + integrity: sha512-geFkENU5GMEKO7FqHOaw9HVlpQEW10nICoM6ubFc0hXBv8dwRXU4vQbh9s/isLSFRftw1m4jEEWixAnXSw8bxQ==, } engines: { node: '>=10' } cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.10.7': + '@swc/core-linux-arm64-musl@1.10.11': resolution: { - integrity: sha512-gp5Un3EbeSThBIh6oac5ZArV/CsSmTKj5jNuuUAuEsML3VF9vqPO+25VuxCvsRf/z3py+xOWRaN2HY/rjMeZog==, + integrity: sha512-2mMscXe/ivq8c4tO3eQSbQDFBvagMJGlalXCspn0DgDImLYTEnt/8KHMUMGVfh0gMJTZ9q4FlGLo7mlnbx99MQ==, } engines: { node: '>=10' } cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.10.7': + '@swc/core-linux-x64-gnu@1.10.11': resolution: { - integrity: sha512-k/OxLLMl/edYqbZyUNg6/bqEHTXJT15l9WGqsl/2QaIGwWGvles8YjruQYQ9d4h/thSXLT9gd8bExU2D0N+bUA==, + integrity: sha512-eu2apgDbC4xwsigpl6LS+iyw6a3mL6kB4I+6PZMbFF2nIb1Dh7RGnu70Ai6mMn1o80fTmRSKsCT3CKMfVdeNFg==, } engines: { node: '>=10' } cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.10.7': + '@swc/core-linux-x64-musl@1.10.11': resolution: { - integrity: sha512-XeDoURdWt/ybYmXLCEE8aSiTOzEn0o3Dx5l9hgt0IZEmTts7HgHHVeRgzGXbR4yDo0MfRuX5nE1dYpTmCz0uyA==, + integrity: sha512-0n+wPWpDigwqRay4IL2JIvAqSKCXv6nKxPig9M7+epAlEQlqX+8Oq/Ap3yHtuhjNPb7HmnqNJLCXT1Wx+BZo0w==, } engines: { node: '>=10' } cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.10.7': + '@swc/core-win32-arm64-msvc@1.10.11': resolution: { - integrity: sha512-nYAbi/uLS+CU0wFtBx8TquJw2uIMKBnl04LBmiVoFrsIhqSl+0MklaA9FVMGA35NcxSJfcm92Prl2W2LfSnTqQ==, + integrity: sha512-7+bMSIoqcbXKosIVd314YjckDRPneA4OpG1cb3/GrkQTEDXmWT3pFBBlJf82hzJfw7b6lfv6rDVEFBX7/PJoLA==, } engines: { node: '>=10' } cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.10.7': + '@swc/core-win32-ia32-msvc@1.10.11': resolution: { - integrity: sha512-+aGAbsDsIxeLxw0IzyQLtvtAcI1ctlXVvVcXZMNXIXtTURM876yNrufRo4ngoXB3jnb1MLjIIjgXfFs/eZTUSw==, + integrity: sha512-6hkLl4+3KjP/OFTryWxpW7YFN+w4R689TSPwiII4fFgsFNupyEmLWWakKfkGgV2JVA59L4Oi02elHy/O1sbgtw==, } engines: { node: '>=10' } cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.10.7': + '@swc/core-win32-x64-msvc@1.10.11': resolution: { - integrity: sha512-TBf4clpDBjF/UUnkKrT0/th76/zwvudk5wwobiTFqDywMApHip5O0VpBgZ+4raY2TM8k5+ujoy7bfHb22zu17Q==, + integrity: sha512-kKNE2BGu/La2k2WFHovenqZvGQAHRIU+rd2/6a7D6EiQ6EyimtbhUqjCCZ+N1f5fIAnvM+sMdLiQJq4jdd/oOQ==, } engines: { node: '>=10' } cpu: [x64] os: [win32] - '@swc/core@1.10.7': + '@swc/core@1.10.11': resolution: { - integrity: sha512-py91kjI1jV5D5W/Q+PurBdGsdU5TFbrzamP7zSCqLdMcHkKi3rQEM5jkQcZr0MXXSJTaayLxS3MWYTBIkzPDrg==, + integrity: sha512-3zGU5y3S20cAwot9ZcsxVFNsSVaptG+dKdmAxORSE3EX7ixe1Xn5kUwLlgIsM4qrwTUWCJDLNhRS+2HLFivcDg==, } engines: { node: '>=10' } peerDependencies: @@ -4102,31 +4223,31 @@ packages: integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==, } - '@tanstack/query-core@5.64.1': + '@tanstack/query-core@5.64.2': resolution: { - integrity: sha512-978Wx4Wl4UJZbmvU/rkaM9cQtXXrbhK0lsz/UZhYIbyKYA8E4LdomTwyh2GHZ4oU0BKKoDH4YlKk2VscCUgNmg==, + integrity: sha512-hdO8SZpWXoADNTWXV9We8CwTkXU88OVWRBcsiFrk7xJQnhm6WRlweDzMD+uH+GnuieTBVSML6xFa17C2cNV8+g==, } - '@tanstack/query-devtools@5.62.16': + '@tanstack/query-devtools@5.64.2': resolution: { - integrity: sha512-3ff6UBJr0H3nIhfLSl9911rvKqXf0u4B58jl0uYdDWLqPk9pCvYIbxC35cGxK2+8INl4IaFVUHb/IdgWrNkg3Q==, + integrity: sha512-3DautR5UpVZdk/qNIhioZVF7g8fdQZ1U98sBEEk4Tzz3tihSBNMPgwlP40nzgbPEDBIrn/j/oyyvNBVSo083Vw==, } - '@tanstack/react-query-devtools@5.64.1': + '@tanstack/react-query-devtools@5.64.2': resolution: { - integrity: sha512-8ajcGE3wXYlb4KuJnkFYkJwJKc/qmPNTpQD7YTgLRMBPTGGp1xk7VMzxL87DoXuweO8luplUUblJJ3noVs/luQ==, + integrity: sha512-+ZjJVnPzc8BUV/Eklu2k9T/IAyAyvwoCHqOaOrk2sbU33LFhM52BpX4eyENXn0bx5LwV3DJZgEQlIzucoemfGQ==, } peerDependencies: - '@tanstack/react-query': ^5.64.1 + '@tanstack/react-query': ^5.64.2 react: ^18 || ^19 - '@tanstack/react-query@5.64.1': + '@tanstack/react-query@5.64.2': resolution: { - integrity: sha512-vW5ggHpIO2Yjj44b4sB+Fd3cdnlMJppXRBJkEHvld6FXh3j5dwWJoQo7mGtKI2RbSFyiyu/PhGAy0+Vv5ev9Eg==, + integrity: sha512-3pakNscZNm8KJkxmovvtZ4RaXLyiYYobwleTMvpIGUoKRa8j8VlrQKNl5W8VUEfVfZKkikvXVddLuWMbcSCA1Q==, } peerDependencies: react: ^18 || ^19 @@ -4164,10 +4285,10 @@ packages: react-test-renderer: optional: true - '@testing-library/react@16.1.0': + '@testing-library/react@16.2.0': resolution: { - integrity: sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg==, + integrity: sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==, } engines: { node: '>=18' } peerDependencies: @@ -4182,10 +4303,10 @@ packages: '@types/react-dom': optional: true - '@testing-library/user-event@14.5.2': + '@testing-library/user-event@14.6.1': resolution: { - integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==, + integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==, } engines: { node: '>=12', npm: '>=6' } peerDependencies: @@ -4198,6 +4319,12 @@ packages: } engines: { node: '>= 10' } + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: + { + integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==, + } + '@trivago/prettier-plugin-sort-imports@4.3.0': resolution: { @@ -4253,72 +4380,30 @@ packages: integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==, } - '@types/body-parser@1.19.5': - resolution: - { - integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==, - } - - '@types/connect@3.4.38': - resolution: - { - integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==, - } - '@types/cookie@0.6.0': resolution: { integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==, } - '@types/cors@2.8.17': - resolution: - { - integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==, - } - '@types/crypto-js@4.2.2': resolution: { integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==, } - '@types/eslint@9.6.1': - resolution: - { - integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==, - } - '@types/estree@1.0.6': resolution: { integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, } - '@types/express-serve-static-core@5.0.4': - resolution: - { - integrity: sha512-5kz9ScmzBdzTgB/3susoCgfqNDzBjvLL4taparufgSvlwjdLy6UyUy9T/tCpYd2GIdIilCatC4iSQS0QSYHt0w==, - } - - '@types/express@5.0.0': - resolution: - { - integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==, - } - '@types/graceful-fs@4.1.9': resolution: { integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==, } - '@types/http-errors@2.0.4': - resolution: - { - integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==, - } - '@types/istanbul-lib-coverage@2.0.6': resolution: { @@ -4355,18 +4440,6 @@ packages: integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==, } - '@types/json-schema@7.0.15': - resolution: - { - integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, - } - - '@types/mime@1.3.5': - resolution: - { - integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==, - } - '@types/node@20.13.0': resolution: { @@ -4379,31 +4452,13 @@ packages: integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==, } - '@types/prop-types@15.7.14': - resolution: - { - integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==, - } - - '@types/qs@6.9.18': - resolution: - { - integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==, - } - - '@types/range-parser@1.2.7': + '@types/react-dom@19.0.3': resolution: { - integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==, - } - - '@types/react-dom@18.3.5': - resolution: - { - integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==, + integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==, } peerDependencies: - '@types/react': ^18.0.0 + '@types/react': ^19.0.0 '@types/react-lazy-load-image-component@1.6.4': resolution: @@ -4411,22 +4466,10 @@ packages: integrity: sha512-8pFPeDPF4yVG4lU1/ixZidJEEDZmEOYOTYDvmIu2IAabyuv97Q7n/93nMCocHvQ7vD1czKGiW+op55D9m3MkdA==, } - '@types/react@18.3.18': - resolution: - { - integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==, - } - - '@types/send@0.17.4': + '@types/react@19.0.8': resolution: { - integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==, - } - - '@types/serve-static@1.15.7': - resolution: - { - integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==, + integrity: sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==, } '@types/stack-utils@2.0.3': @@ -4459,6 +4502,12 @@ packages: integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==, } + '@types/yauzl@2.10.3': + resolution: + { + integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==, + } + '@typescript-eslint/eslint-plugin@7.18.0': resolution: { @@ -4541,10 +4590,10 @@ packages: } engines: { node: ^18.18.0 || >=20.0.0 } - '@ungap/structured-clone@1.2.1': + '@ungap/structured-clone@1.3.0': resolution: { - integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==, + integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==, } '@vanilla-extract/css@1.17.0': @@ -4678,13 +4727,6 @@ packages: } deprecated: Use your platform's native atob() and btoa() methods instead - accepts@1.3.8: - resolution: - { - integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, - } - engines: { node: '>= 0.6' } - acorn-globals@7.0.1: resolution: { @@ -4841,12 +4883,6 @@ packages: } engines: { node: '>= 0.4' } - array-flatten@1.1.1: - resolution: - { - integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==, - } - array-includes@3.1.8: resolution: { @@ -4909,6 +4945,20 @@ packages: integrity: sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==, } + ast-types@0.13.4: + resolution: + { + integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==, + } + engines: { node: '>=4' } + + async-function@1.0.0: + resolution: + { + integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==, + } + engines: { node: '>= 0.4' } + async@3.2.6: resolution: { @@ -4921,6 +4971,13 @@ packages: integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, } + autocannon@8.0.0: + resolution: + { + integrity: sha512-fMMcWc2JPFcUaqHeR6+PbmEpTxCrPZyBUM95oG4w3ngJ8NfBNas/ZXA+pTHXLqJ0UlFVTcy05GC25WxKx/M20A==, + } + hasBin: true + autoprefixer@10.4.20: resolution: { @@ -4938,12 +4995,25 @@ packages: } engines: { node: '>= 0.4' } + axe-core@4.10.2: + resolution: + { + integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==, + } + engines: { node: '>=4' } + axios@1.7.9: resolution: { integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==, } + b4a@1.6.7: + resolution: + { + integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==, + } + babel-jest@29.7.0: resolution: { @@ -5021,12 +5091,59 @@ packages: integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, } + bare-events@2.5.4: + resolution: + { + integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==, + } + + bare-fs@4.0.1: + resolution: + { + integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==, + } + engines: { bare: '>=1.7.0' } + + bare-os@3.4.0: + resolution: + { + integrity: sha512-9Ous7UlnKbe3fMi7Y+qh0DwAup6A1JkYgPnjvMDNOlmnxNRQvQ/7Nst+OnUQKzk0iAT0m9BisbDVp9gCv8+ETA==, + } + engines: { bare: '>=1.6.0' } + + bare-path@3.0.0: + resolution: + { + integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==, + } + + bare-stream@2.6.4: + resolution: + { + integrity: sha512-G6i3A74FjNq4nVrrSTUz5h3vgXzBJnjmWAVlBWaZETkgu+LgKd7AiyOml3EDJY1AHlIbBHKDXE+TUT53Ff8OaA==, + } + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + base64-js@1.5.1: resolution: { integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, } + basic-ftp@5.0.5: + resolution: + { + integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==, + } + engines: { node: '>=10.0.0' } + binary-extensions@2.3.0: resolution: { @@ -5040,13 +5157,6 @@ packages: integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, } - body-parser@1.20.3: - resolution: - { - integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==, - } - engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } - boolbase@1.0.0: resolution: { @@ -5093,6 +5203,12 @@ packages: integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, } + buffer-crc32@0.2.13: + resolution: + { + integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, + } + buffer-from@1.1.2: resolution: { @@ -5112,13 +5228,6 @@ packages: } engines: { node: '>=10.16.0' } - bytes@3.1.2: - resolution: - { - integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, - } - engines: { node: '>= 0.8' } - cac@6.7.14: resolution: { @@ -5175,10 +5284,10 @@ packages: } engines: { node: '>=10' } - caniuse-lite@1.0.30001692: + caniuse-lite@1.0.30001695: resolution: { - integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==, + integrity: sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==, } chai@5.1.2: @@ -5209,6 +5318,12 @@ packages: } engines: { node: '>=10' } + char-spinner@1.0.1: + resolution: + { + integrity: sha512-acv43vqJ0+N0rD+Uw3pDHSxP30FHrywu2NO6/wBaHChJIizpDeBUd6NjqhNhy9LGaEAhZAXn46QzmlAvIWd16g==, + } + check-error@2.1.1: resolution: { @@ -5223,23 +5338,41 @@ packages: } engines: { node: '>= 8.10.0' } - ci-info@3.9.0: + chrome-launcher@1.1.2: resolution: { - integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==, + integrity: sha512-YclTJey34KUm5jB1aEJCq807bSievi7Nb/TU4Gu504fUYi3jw3KCIaH6L7nFWQhdEgH3V+wCh+kKD1P5cXnfxw==, } - engines: { node: '>=8' } + engines: { node: '>=12.13.0' } + hasBin: true - cjs-module-lexer@1.4.1: + chromium-bidi@0.11.0: resolution: { - integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==, + integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==, + } + peerDependencies: + devtools-protocol: '*' + + chromium-bidi@1.1.0: + resolution: + { + integrity: sha512-HislCEczCuamWm3+55Lig9XKmMF13K+BGKum9rwtDAzgUAHT4h5jNwhDmD4U20VoVUG8ujnv9UZ89qiIf5uF8w==, + } + peerDependencies: + devtools-protocol: '*' + + ci-info@3.9.0: + resolution: + { + integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==, } + engines: { node: '>=8' } - class-variance-authority@0.7.1: + cjs-module-lexer@1.4.1: resolution: { - integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==, + integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==, } cli-cursor@3.1.0: @@ -5256,6 +5389,13 @@ packages: } engines: { node: '>=6' } + cli-table3@0.6.5: + resolution: + { + integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==, + } + engines: { node: 10.* || >= 12.* } + cli-width@4.1.0: resolution: { @@ -5322,6 +5462,13 @@ packages: integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==, } + color-support@1.1.3: + resolution: + { + integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==, + } + hasBin: true + color@4.2.3: resolution: { @@ -5336,12 +5483,6 @@ packages: } engines: { node: '>= 0.8' } - commander@2.20.3: - resolution: - { - integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, - } - commander@4.1.1: resolution: { @@ -5362,19 +5503,12 @@ packages: integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, } - content-disposition@0.5.4: - resolution: - { - integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, - } - engines: { node: '>= 0.6' } - - content-type@1.0.5: + configstore@5.0.1: resolution: { - integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, + integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==, } - engines: { node: '>= 0.6' } + engines: { node: '>=8' } convert-source-map@1.9.0: resolution: @@ -5388,19 +5522,6 @@ packages: integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, } - cookie-signature@1.0.6: - resolution: - { - integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==, - } - - cookie@0.7.1: - resolution: - { - integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==, - } - engines: { node: '>= 0.6' } - cookie@0.7.2: resolution: { @@ -5408,26 +5529,12 @@ packages: } engines: { node: '>= 0.6' } - cookie@1.0.2: - resolution: - { - integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==, - } - engines: { node: '>=18' } - core-js-compat@3.40.0: resolution: { integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==, } - cors@2.8.5: - resolution: - { - integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, - } - engines: { node: '>= 0.10' } - cosmiconfig@7.1.0: resolution: { @@ -5447,6 +5554,18 @@ packages: typescript: optional: true + cosmiconfig@9.0.0: + resolution: + { + integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==, + } + engines: { node: '>=14' } + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + create-jest@29.7.0: resolution: { @@ -5455,6 +5574,12 @@ packages: engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true + cross-argv@2.0.0: + resolution: + { + integrity: sha512-YIaY9TR5Nxeb8SMdtrU8asWVM4jqJDNDYlKV21LxtYcfNJhp1kEsgSa6qXwXgzN0WQWGODps0+TlGp2xQSHwOg==, + } + cross-spawn@7.0.6: resolution: { @@ -5468,6 +5593,19 @@ packages: integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==, } + crypto-random-string@2.0.0: + resolution: + { + integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==, + } + engines: { node: '>=8' } + + csp_evaluator@1.1.1: + resolution: + { + integrity: sha512-N3ASg0C4kNPUaNxt1XAvzHIVuzdtr8KLgfk1O8WDyimp1GisPAHESupArO2ieHk9QWbrJ/WkQODyh21Ps/xhxw==, + } + css-select@5.1.0: resolution: { @@ -5548,6 +5686,13 @@ packages: integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==, } + data-uri-to-buffer@6.0.2: + resolution: + { + integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==, + } + engines: { node: '>= 14' } + data-urls@3.0.2: resolution: { @@ -5589,6 +5734,12 @@ packages: integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==, } + debounce@1.2.1: + resolution: + { + integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==, + } + debug@2.6.9: resolution: { @@ -5612,18 +5763,11 @@ packages: supports-color: optional: true - decimal.js@10.4.3: - resolution: - { - integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==, - } - - decode-uri-component@0.4.1: + decimal.js@10.5.0: resolution: { - integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==, + integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==, } - engines: { node: '>=14.16' } dedent@1.5.3: resolution: @@ -5689,19 +5833,19 @@ packages: } engines: { node: '>= 0.4' } - delayed-stream@1.0.0: + degenerator@5.0.1: resolution: { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, + integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==, } - engines: { node: '>=0.4.0' } + engines: { node: '>= 14' } - depd@2.0.0: + delayed-stream@1.0.0: resolution: { - integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, + integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, } - engines: { node: '>= 0.8' } + engines: { node: '>=0.4.0' } dequal@2.0.3: resolution: @@ -5710,13 +5854,6 @@ packages: } engines: { node: '>=6' } - destroy@1.2.0: - resolution: - { - integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==, - } - engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } - detect-libc@2.0.3: resolution: { @@ -5737,6 +5874,24 @@ packages: integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, } + devtools-protocol@0.0.1312386: + resolution: + { + integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==, + } + + devtools-protocol@0.0.1367902: + resolution: + { + integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==, + } + + devtools-protocol@0.0.1380148: + resolution: + { + integrity: sha512-1CJABgqLxbYxVI+uJY/UDUHJtJ0KZTSjNYJYKqd9FRoXT33WDakDHNxRapMEgzeJ/C3rcs01+avshMnPmKQbvA==, + } + didyoumean@1.2.2: resolution: { @@ -5828,6 +5983,13 @@ packages: integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, } + dot-prop@5.3.0: + resolution: + { + integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, + } + engines: { node: '>=8' } + dotenv-expand@11.0.7: resolution: { @@ -5849,16 +6011,16 @@ packages: } engines: { node: '>= 0.4' } - eastasianwidth@0.2.0: + duplexer@0.1.2: resolution: { - integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, + integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, } - ee-first@1.1.1: + eastasianwidth@0.2.0: resolution: { - integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, + integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, } ejs@3.1.10: @@ -5869,10 +6031,10 @@ packages: engines: { node: '>=0.10.0' } hasBin: true - electron-to-chromium@1.5.80: + electron-to-chromium@1.5.88: resolution: { - integrity: sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw==, + integrity: sha512-K3C2qf1o+bGzbilTDCTBhTQcMS9KW60yTAaTeeXsfvQuTDDwlokLam/AdqlqcSy9u4UainDgsHV23ksXAOgamw==, } embla-carousel-react@8.5.2: @@ -5916,20 +6078,6 @@ packages: integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, } - encodeurl@1.0.2: - resolution: - { - integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, - } - engines: { node: '>= 0.8' } - - encodeurl@2.0.0: - resolution: - { - integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==, - } - engines: { node: '>= 0.8' } - end-of-stream@1.4.4: resolution: { @@ -5950,6 +6098,13 @@ packages: } engines: { node: '>=0.12' } + env-paths@2.2.1: + resolution: + { + integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, + } + engines: { node: '>=6' } + error-ex@1.3.2: resolution: { @@ -5990,10 +6145,10 @@ packages: integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==, } - es-object-atoms@1.0.1: + es-object-atoms@1.1.1: resolution: { - integrity: sha512-BPOBuyUF9QIVhuNLhbToCLHP6+0MHwZ7xLBkPPCZqK4JmpJgGnv10035STzzQwFpqdzNFMB3irvDI63IagvDwA==, + integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, } engines: { node: '>= 0.4' } @@ -6048,12 +6203,6 @@ packages: } engines: { node: '>=6' } - escape-html@1.0.3: - resolution: - { - integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, - } - escape-string-regexp@1.0.5: resolution: { @@ -6101,10 +6250,10 @@ packages: peerDependencies: eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-prettier@5.2.1: + eslint-plugin-prettier@5.2.3: resolution: { - integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==, + integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==, } engines: { node: ^14.18.0 || >=16.0.0 } peerDependencies: @@ -6217,13 +6366,6 @@ packages: } engines: { node: '>=0.10.0' } - etag@1.8.1: - resolution: - { - integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, - } - engines: { node: '>= 0.6' } - execa@5.1.1: resolution: { @@ -6252,12 +6394,13 @@ packages: } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - express@4.21.2: + extract-zip@2.0.1: resolution: { - integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==, + integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==, } - engines: { node: '>= 0.10.0' } + engines: { node: '>= 10.17.0' } + hasBin: true fast-deep-equal@3.1.3: resolution: @@ -6271,6 +6414,12 @@ packages: integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, } + fast-fifo@1.3.2: + resolution: + { + integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==, + } + fast-glob@3.3.3: resolution: { @@ -6302,10 +6451,16 @@ packages: integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, } - fdir@6.4.2: + fd-slicer@1.1.0: + resolution: + { + integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==, + } + + fdir@6.4.3: resolution: { - integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==, + integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==, } peerDependencies: picomatch: ^3 || ^4 @@ -6346,20 +6501,6 @@ packages: } engines: { node: '>=8' } - filter-obj@5.1.0: - resolution: - { - integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==, - } - engines: { node: '>=14.16' } - - finalhandler@1.3.1: - resolution: - { - integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==, - } - engines: { node: '>= 0.8' } - find-root@1.1.0: resolution: { @@ -6412,11 +6553,12 @@ packages: debug: optional: true - for-each@0.3.3: + for-each@0.3.4: resolution: { - integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, + integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==, } + engines: { node: '>= 0.4' } foreground-child@3.3.0: resolution: @@ -6432,23 +6574,16 @@ packages: } engines: { node: '>= 6' } - forwarded@0.2.0: - resolution: - { - integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, - } - engines: { node: '>= 0.6' } - fraction.js@4.3.7: resolution: { integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==, } - framer-motion@11.18.0: + framer-motion@11.18.2: resolution: { - integrity: sha512-Vmjl5Al7XqKHzDFnVqzi1H9hzn5w4eN/bdqXTymVpU2UuMQuz9w6UPdsL9dFBeH7loBlnu4qcEXME+nvbkcIOw==, + integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==, } peerDependencies: '@emotion/is-prop-valid': '*' @@ -6462,13 +6597,6 @@ packages: react-dom: optional: true - fresh@0.5.2: - resolution: - { - integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==, - } - engines: { node: '>= 0.6' } - front-matter@4.0.2: resolution: { @@ -6564,6 +6692,13 @@ packages: } engines: { node: '>= 0.4' } + get-stream@5.2.0: + resolution: + { + integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, + } + engines: { node: '>=8' } + get-stream@6.0.1: resolution: { @@ -6578,6 +6713,13 @@ packages: } engines: { node: '>= 0.4' } + get-uri@6.0.4: + resolution: + { + integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==, + } + engines: { node: '>= 14' } + glob-parent@5.1.2: resolution: { @@ -6667,10 +6809,17 @@ packages: } engines: { node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0 } - happy-dom@12.10.3: + gzip-size@6.0.0: + resolution: + { + integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==, + } + engines: { node: '>=10' } + + has-async-hooks@1.0.0: resolution: { - integrity: sha512-JzUXOh0wdNGY54oKng5hliuBkq/+aT1V3YpTM+lrN/GoLQTANZsMaIvmHiHe612rauHvPJnDZkZ+5GZR++1Abg==, + integrity: sha512-YF0VPGjkxr7AyyQQNykX8zK4PvtEDsUJAPqwu06UFz1lb6EvI53sPh5H1kWxg8NXI5LsfRCZ8uX9NkYDZBb/mw==, } has-bigints@1.1.0: @@ -6721,6 +6870,19 @@ packages: } engines: { node: '>= 0.4' } + hdr-histogram-js@3.0.0: + resolution: + { + integrity: sha512-/EpvQI2/Z98mNFYEnlqJ8Ogful8OpArLG/6Tf2bPnkutBVLIeMVNHjk1ZDfshF2BUweipzbk+dB1hgSB7SIakw==, + } + engines: { node: '>=14' } + + hdr-histogram-percentiles-obj@3.0.0: + resolution: + { + integrity: sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==, + } + headers-polyfill@4.0.3: resolution: { @@ -6759,12 +6921,18 @@ packages: integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, } - http-errors@2.0.0: + http-link-header@1.1.3: resolution: { - integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, + integrity: sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==, + } + engines: { node: '>=6.0.0' } + + http-parser-js@0.5.9: + resolution: + { + integrity: sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==, } - engines: { node: '>= 0.8' } http-proxy-agent@5.0.0: resolution: @@ -6809,12 +6977,11 @@ packages: engines: { node: '>=18' } hasBin: true - iconv-lite@0.4.24: + hyperid@3.3.0: resolution: { - integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, + integrity: sha512-7qhCVT4MJIoEsNcbhglhdmBKb09QtcmJNiIQGq7js/Khf5FtQQ9bzcAuloeqBeee7XD7JqDeve9KNlQya5tSGQ==, } - engines: { node: '>=0.10.0' } iconv-lite@0.6.3: resolution: @@ -6836,10 +7003,16 @@ packages: } engines: { node: '>= 4' } - immer@9.0.21: + image-ssim@0.2.0: + resolution: + { + integrity: sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==, + } + + immediate@3.0.6: resolution: { - integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==, + integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==, } import-fresh@3.3.0: @@ -6891,12 +7064,18 @@ packages: } engines: { node: '>= 0.4' } - ipaddr.js@1.9.1: + intl-messageformat@10.7.14: + resolution: + { + integrity: sha512-mMGnE4E1otdEutV5vLUdCxRJygHB5ozUBxsPB5qhitewssrS/qGruq9bmvIRkkGsNeK5ZWLfYRld18UHGTIifQ==, + } + + ip-address@9.0.5: resolution: { - integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, + integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==, } - engines: { node: '>= 0.10' } + engines: { node: '>= 12' } is-array-buffer@3.0.5: resolution: @@ -6917,10 +7096,10 @@ packages: integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==, } - is-async-function@2.1.0: + is-async-function@2.1.1: resolution: { - integrity: sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==, + integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==, } engines: { node: '>= 0.4' } @@ -7057,6 +7236,13 @@ packages: } engines: { node: '>=0.12.0' } + is-obj@2.0.0: + resolution: + { + integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, + } + engines: { node: '>=8' } + is-path-inside@3.0.3: resolution: { @@ -7064,6 +7250,13 @@ packages: } engines: { node: '>=8' } + is-plain-object@5.0.0: + resolution: + { + integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==, + } + engines: { node: '>=0.10.0' } + is-potential-custom-element-name@1.0.1: resolution: { @@ -7119,6 +7312,12 @@ packages: } engines: { node: '>= 0.4' } + is-typedarray@1.0.0: + resolution: + { + integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==, + } + is-unicode-supported@0.1.0: resolution: { @@ -7474,6 +7673,12 @@ packages: } hasBin: true + jpeg-js@0.4.4: + resolution: + { + integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==, + } + js-cookie@3.0.5: resolution: { @@ -7481,6 +7686,13 @@ packages: } engines: { node: '>=14' } + js-library-detector@6.7.0: + resolution: + { + integrity: sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==, + } + engines: { node: '>=12' } + js-tokens@4.0.0: resolution: { @@ -7501,6 +7713,12 @@ packages: } hasBin: true + jsbn@1.1.0: + resolution: + { + integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==, + } + jsdom@20.0.3: resolution: { @@ -7641,27 +7859,59 @@ packages: engines: { node: '>=16' } hasBin: true - lilconfig@3.1.3: + lie@3.1.1: resolution: { - integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==, + integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==, } - engines: { node: '>=14' } - lines-and-columns@1.2.4: + lighthouse-logger@2.0.1: resolution: { - integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==, } - lines-and-columns@2.0.3: + lighthouse-stack-packs@1.12.2: resolution: { - integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==, + integrity: sha512-Ug8feS/A+92TMTCK6yHYLwaFMuelK/hAKRMdldYkMNwv+d9PtWxjXEg6rwKtsUXTADajhdrhXyuNCJ5/sfmPFw==, } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - locate-path@5.0.0: + lighthouse@12.3.0: + resolution: + { + integrity: sha512-OaLE8DasnwQkn2CBo2lKtD+IQv42mNP3T+Vaw29I++rAh0Zpgc6SM15usdIYyzhRMR5EWFxze5Fyb+HENJSh2A==, + } + engines: { node: '>=18.16' } + hasBin: true + + lilconfig@3.1.3: + resolution: + { + integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==, + } + engines: { node: '>=14' } + + lines-and-columns@1.2.4: + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } + + lines-and-columns@2.0.3: + resolution: + { + integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + localforage@1.10.0: + resolution: + { + integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==, + } + + locate-path@5.0.0: resolution: { integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, @@ -7675,12 +7925,36 @@ packages: } engines: { node: '>=10' } + lodash-es@4.17.21: + resolution: + { + integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, + } + + lodash.chunk@4.2.0: + resolution: + { + integrity: sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==, + } + + lodash.clonedeep@4.5.0: + resolution: + { + integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==, + } + lodash.debounce@4.0.8: resolution: { integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, } + lodash.flatten@4.4.0: + resolution: + { + integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==, + } + lodash.memoize@4.1.2: resolution: { @@ -7712,6 +7986,12 @@ packages: } engines: { node: '>=10' } + lookup-closest-locale@6.2.0: + resolution: + { + integrity: sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==, + } + loose-envify@1.4.0: resolution: { @@ -7743,18 +8023,18 @@ packages: integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, } - lru-cache@11.0.2: + lru-cache@5.1.1: resolution: { - integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==, + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, } - engines: { node: 20 || >=22 } - lru-cache@5.1.1: + lru-cache@7.18.3: resolution: { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, + integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==, } + engines: { node: '>=12' } lucide-react@0.460.0: resolution: @@ -7783,6 +8063,13 @@ packages: integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==, } + make-dir@3.1.0: + resolution: + { + integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, + } + engines: { node: '>=8' } + make-dir@4.0.0: resolution: { @@ -7802,6 +8089,18 @@ packages: integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, } + manage-path@2.0.0: + resolution: + { + integrity: sha512-NJhyB+PJYTpxhxZJ3lecIGgh4kwIY2RAh44XvAz9UlqthlQwtPBf62uBVR8XaD8CRuSjQ6TnZH2lNJkbLPZM2A==, + } + + marky@1.2.5: + resolution: + { + integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==, + } + math-intrinsics@1.1.0: resolution: { @@ -7827,19 +8126,6 @@ packages: integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==, } - media-typer@0.3.0: - resolution: - { - integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==, - } - engines: { node: '>= 0.6' } - - merge-descriptors@1.0.3: - resolution: - { - integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==, - } - merge-stream@2.0.0: resolution: { @@ -7853,12 +8139,11 @@ packages: } engines: { node: '>= 8' } - methods@1.1.2: + metaviewport-parser@0.3.0: resolution: { - integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==, + integrity: sha512-EoYJ8xfjQ6kpe9VbVHvZTZHiOl4HL1Z18CrZ+qahvLXT7ZO4YTC2JMyt5FaUp9JJp6J4Ybb/z7IsCXZt86/QkQ==, } - engines: { node: '>= 0.6' } micromatch@4.0.8: resolution: @@ -7881,14 +8166,6 @@ packages: } engines: { node: '>= 0.6' } - mime@1.6.0: - resolution: - { - integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, - } - engines: { node: '>=4' } - hasBin: true - mimic-fn@2.1.0: resolution: { @@ -7955,22 +8232,22 @@ packages: integrity: sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ==, } - motion-dom@11.16.4: + motion-dom@11.18.1: resolution: { - integrity: sha512-2wuCie206pCiP2K23uvwJeci4pMFfyQKpWI0Vy6HrCTDzDCer4TsYtT7IVnuGbDeoIV37UuZiUr6SZMHEc1Vww==, + integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==, } - motion-utils@11.16.0: + motion-utils@11.18.1: resolution: { - integrity: sha512-ngdWPjg31rD4WGXFi0eZ00DQQqKKu04QExyv/ymlC+3k+WIgYVFbt6gS5JsFPbJODTF/r8XiE/X+SsoT9c0ocw==, + integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==, } - motion@11.18.0: + motion@11.18.2: resolution: { - integrity: sha512-uJ4zNXh/4K9C5wftxHKlXLHC0Rc9dHSHPyO1P6T9XE2bTn2z8C2lOZX/M8vAmFp0gtJTJ3aYkv44lTtJSfv6+A==, + integrity: sha512-JLjvFDuFr42NFtcVoMAyC2sEjnpA8xpy6qWPyzQvCloznAyQ8FIXioxWfHiLtgYhoVpfUqSWpn1h9++skj9+Wg==, } peerDependencies: '@emotion/is-prop-valid': '*' @@ -8051,17 +8328,17 @@ packages: integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, } - negotiator@0.6.3: + netmask@2.0.2: resolution: { - integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, + integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==, } - engines: { node: '>= 0.6' } + engines: { node: '>= 0.4.0' } - next@15.1.4: + next@15.1.6: resolution: { - integrity: sha512-mTaq9dwaSuwwOrcu3ebjDYObekkxRnXpuVL21zotM8qE2W0HBOdVIdg2Li9QjMEZrj73LN96LcWcz62V19FjAg==, + integrity: sha512-Hch4wzbaX0vKQtalpXvUiw5sYivBy4cm5rzUKrBnUB/y436LGrvOUqYvlSeNVCWFO/770gDlltR9gqZH62ct4Q==, } engines: { node: ^18.18.0 || ^19.8.0 || >= 20.0.0 } hasBin: true @@ -8082,6 +8359,16 @@ packages: sass: optional: true + nextjs-toploader@3.7.15: + resolution: + { + integrity: sha512-DvvXEJVRPfE2j1HVXgFhmPl8pRcLb/4mvyVBDuYdMdkbEY7KJghp0fG5iOZ002cV6awbBw9j/Di7vQL8LRazxQ==, + } + peerDependencies: + next: '>= 6.0.0' + react: '>= 16.0.0' + react-dom: '>= 16.0.0' + no-case@3.0.4: resolution: { @@ -8127,32 +8414,17 @@ packages: } engines: { node: '>=8' } - nth-check@2.1.1: + nprogress@0.2.0: resolution: { - integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, + integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==, } - nuqs@2.3.0: + nth-check@2.1.1: resolution: { - integrity: sha512-ChS56bJZdaTQzCJb6jPel6cIHYh8/V/GSIjZoIe5yAssGdcrVaBFBgzHfJW6IewbR6yc1Zch2CmGsdgztR+xmA==, + integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, } - peerDependencies: - '@remix-run/react': '>=2' - next: '>=14.2.0' - react: '>=18.2.0 || ^19.0.0-0' - react-router: ^7 - react-router-dom: ^6 || ^7 - peerDependenciesMeta: - '@remix-run/react': - optional: true - next: - optional: true - react-router: - optional: true - react-router-dom: - optional: true nwsapi@2.2.16: resolution: @@ -8160,10 +8432,10 @@ packages: integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==, } - nx@20.3.1: + nx@20.3.3: resolution: { - integrity: sha512-pO48DoQAwVKBEF7/od3bc1tHBYfafgiuS/hHX3yGmhpWW58baIlxMWFp6QY9+A9Q0R+26pd6AEGnE7d1f7+i/g==, + integrity: sha512-IUu2D8/bVa7aSr3ViRcrmpTGO2FKqzJoio6gjeq/YbyUHyjrrq5HUmHFx30Wm2vmC1BGm0MeyakTNUJzQvfAog==, } hasBin: true peerDependencies: @@ -8231,12 +8503,12 @@ packages: } engines: { node: '>= 0.4' } - on-finished@2.4.1: + on-net-listen@1.1.2: resolution: { - integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, + integrity: sha512-y1HRYy8s/RlcBvDUwKXSmkODMdx4KSuIvloCnQYJ2LdBBC1asY4HtfhXwe3UWknLakATZDnbzht2Ijw3M1EqFg==, } - engines: { node: '>= 0.8' } + engines: { node: '>=9.4.0 || ^8.9.4' } once@1.4.0: resolution: @@ -8258,6 +8530,13 @@ packages: } engines: { node: '>=12' } + opener@1.5.2: + resolution: + { + integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==, + } + hasBin: true + optionator@0.9.4: resolution: { @@ -8320,12 +8599,32 @@ packages: } engines: { node: '>=6' } + pac-proxy-agent@7.1.0: + resolution: + { + integrity: sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==, + } + engines: { node: '>= 14' } + + pac-resolver@7.0.1: + resolution: + { + integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==, + } + engines: { node: '>= 14' } + package-json-from-dist@1.0.1: resolution: { integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==, } + pako@1.0.11: + resolution: + { + integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, + } + parent-module@1.0.1: resolution: { @@ -8333,6 +8632,12 @@ packages: } engines: { node: '>=6' } + parse-cache-control@1.0.1: + resolution: + { + integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==, + } + parse-json@5.2.0: resolution: { @@ -8346,13 +8651,6 @@ packages: integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==, } - parseurl@1.3.3: - resolution: - { - integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, - } - engines: { node: '>= 0.8' } - path-exists@4.0.0: resolution: { @@ -8387,12 +8685,6 @@ packages: } engines: { node: '>=16 || 14 >=14.18' } - path-to-regexp@0.1.12: - resolution: - { - integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==, - } - path-to-regexp@6.3.0: resolution: { @@ -8419,6 +8711,12 @@ packages: } engines: { node: '>= 14.16' } + pend@1.2.0: + resolution: + { + integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==, + } + picocolors@1.1.1: resolution: { @@ -8460,18 +8758,18 @@ packages: } engines: { node: '>=8' } - playwright-core@1.49.1: + playwright-core@1.50.0: resolution: { - integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==, + integrity: sha512-CXkSSlr4JaZs2tZHI40DsZUN/NIwgaUPsyLuOAaIZp2CyF2sN5MM5NJsyB188lFSSozFxQ5fPT4qM+f0tH/6wQ==, } engines: { node: '>=18' } hasBin: true - playwright@1.49.1: + playwright@1.50.0: resolution: { - integrity: sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==, + integrity: sha512-+GinGfGTrd2IfX1TA4N2gNmeIksSb+IAe589ZH+FlmpV3MYTx6+buChGIuDLQwrGNCw2lWibqV50fU510N7S+w==, } engines: { node: '>=18' } hasBin: true @@ -8545,10 +8843,10 @@ packages: } engines: { node: ^10 || ^12 || >=14 } - postcss@8.5.0: + postcss@8.5.1: resolution: { - integrity: sha512-27VKOqrYfPncKA2NrFOVhP5MGAfHKLYn/Q0mz9cNQyRAKYi3VNHwYU2qKKqPCqgBmeeJ0uAFB56NumXZ5ZReXg==, + integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==, } engines: { node: ^10 || ^12 || >=14 } @@ -8574,6 +8872,13 @@ packages: engines: { node: '>=14' } hasBin: true + pretty-bytes@5.6.0: + resolution: + { + integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==, + } + engines: { node: '>=6' } + pretty-format@27.5.1: resolution: { @@ -8595,6 +8900,13 @@ packages: } engines: { node: '>=6' } + progress@2.0.3: + resolution: + { + integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, + } + engines: { node: '>=0.4.0' } + prompts@2.4.2: resolution: { @@ -8608,12 +8920,12 @@ packages: integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, } - proxy-addr@2.0.7: + proxy-agent@6.5.0: resolution: { - integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, + integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==, } - engines: { node: '>= 0.10' } + engines: { node: '>= 14' } proxy-from-env@1.1.0: resolution: @@ -8627,66 +8939,66 @@ packages: integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==, } - punycode@2.3.1: + pump@3.0.2: resolution: { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==, } - engines: { node: '>=6' } - pure-rand@6.1.0: + punycode@2.3.1: resolution: { - integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==, + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, } + engines: { node: '>=6' } - qs@6.13.0: + puppeteer-core@23.11.1: resolution: { - integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==, + integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==, } - engines: { node: '>=0.6' } + engines: { node: '>=18' } - query-string@9.1.1: + puppeteer-core@24.1.1: resolution: { - integrity: sha512-MWkCOVIcJP9QSKU52Ngow6bsAWAPlPK2MludXvcrS2bGZSl+T1qX9MZvRIkqUIkGLJquMJHWfsT6eRqUpp4aWg==, + integrity: sha512-7FF3gq6bpIsbq3I8mfbodXh3DCzXagoz3l2eGv1cXooYU4g0P4mcHQVHuBD4iSZPXNg8WjzlP5kmRwK9UvwF0A==, } engines: { node: '>=18' } - querystringify@2.2.0: + puppeteer@24.1.1: resolution: { - integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, + integrity: sha512-fuhceZ5HZuDXVuaMIRxUuDHfCJLmK0pXh8FlzVQ0/+OApStevxZhU5kAVeYFOEqeCF5OoAyZjcWbdQK27xW/9A==, } + engines: { node: '>=18' } + hasBin: true - queue-microtask@1.2.3: + pure-rand@6.1.0: resolution: { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==, } - range-parser@1.2.1: + querystringify@2.2.0: resolution: { - integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, + integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, } - engines: { node: '>= 0.6' } - raw-body@2.5.2: + queue-microtask@1.2.3: resolution: { - integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==, + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, } - engines: { node: '>= 0.8' } - react-dom@18.3.1: + react-dom@19.0.0: resolution: { - integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==, + integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==, } peerDependencies: - react: ^18.3.1 + react: ^19.0.0 react-error-boundary@3.1.4: resolution: @@ -8712,22 +9024,10 @@ packages: peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-intersection-observer@9.14.1: - resolution: - { - integrity: sha512-k1xIUn3sCQi3ugNeF64FJb3zwve5mcetvAUR9JazXeOmtap4IP2evN8rs+yf6SQ7F1QydsOGiqTmt+lySKZ9uA==, - } - peerDependencies: - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - react-dom: - optional: true - - react-intersection-observer@9.15.0: + react-intersection-observer@9.15.1: resolution: { - integrity: sha512-qul9TzGgZtHIHAsLOXnRfMWNYCrqjU87HMKhRjwC8l6XSxz2Bo0xmpq5pklaXGj+brx2gSMe8lp1K17mMP2Q8w==, + integrity: sha512-vGrqYEVWXfH+AGu241uzfUpNK4HAdhCkSAyFdkMb9VWWXs6mxzBLpWCxEy9YcnDNY2g9eO6z7qUtTBdA9hc8pA==, } peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -8783,10 +9083,10 @@ packages: '@types/react': optional: true - react-remove-scroll@2.6.2: + react-remove-scroll@2.6.3: resolution: { - integrity: sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==, + integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==, } engines: { node: '>=10' } peerDependencies: @@ -8796,29 +9096,6 @@ packages: '@types/react': optional: true - react-router-dom@7.1.1: - resolution: - { - integrity: sha512-vSrQHWlJ5DCfyrhgo0k6zViOe9ToK8uT5XGSmnuC2R3/g261IdIMpZVqfjD6vWSXdnf5Czs4VA/V60oVR6/jnA==, - } - engines: { node: '>=20.0.0' } - peerDependencies: - react: '>=18' - react-dom: '>=18' - - react-router@7.1.1: - resolution: - { - integrity: sha512-39sXJkftkKWRZ2oJtHhCxmoCrBCULr/HAH4IT5DHlgu/Q0FCPV0S4Lx+abjDTx/74xoZzNYDYbOZWlJjruyuDQ==, - } - engines: { node: '>=20.0.0' } - peerDependencies: - react: '>=18' - react-dom: '>=18' - peerDependenciesMeta: - react-dom: - optional: true - react-style-singleton@2.2.3: resolution: { @@ -8850,10 +9127,10 @@ packages: react: '*' react-dom: '*' - react@18.3.1: + react@19.0.0: resolution: { - integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==, + integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==, } engines: { node: '>=0.10.0' } @@ -8943,6 +9220,12 @@ packages: } hasBin: true + reinterval@1.1.0: + resolution: + { + integrity: sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==, + } + require-directory@2.1.1: resolution: { @@ -9006,6 +9289,12 @@ packages: } engines: { node: '>=8' } + retimer@3.0.0: + resolution: + { + integrity: sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==, + } + reusify@1.0.4: resolution: { @@ -9021,10 +9310,33 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup@4.30.1: + robots-parser@3.0.1: + resolution: + { + integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==, + } + engines: { node: '>=10.0.0' } + + rollup-plugin-visualizer@5.14.0: + resolution: + { + integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==, + } + engines: { node: '>=18' } + hasBin: true + peerDependencies: + rolldown: 1.x + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true + + rollup@4.32.0: resolution: { - integrity: sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==, + integrity: sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==, } engines: { node: '>=18.0.0', npm: '>=8.0.0' } hasBin: true @@ -9087,12 +9399,19 @@ packages: } engines: { node: '>=v12.22.7' } - scheduler@0.23.2: + scheduler@0.25.0: resolution: { - integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==, + integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==, } + semver@5.7.2: + resolution: + { + integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==, + } + hasBin: true + semver@6.3.1: resolution: { @@ -9108,26 +9427,6 @@ packages: engines: { node: '>=10' } hasBin: true - send@0.19.0: - resolution: - { - integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==, - } - engines: { node: '>= 0.8.0' } - - serve-static@1.16.2: - resolution: - { - integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==, - } - engines: { node: '>= 0.8.0' } - - set-cookie-parser@2.7.1: - resolution: - { - integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==, - } - set-function-length@1.2.2: resolution: { @@ -9149,12 +9448,6 @@ packages: } engines: { node: '>= 0.4' } - setprototypeof@1.2.0: - resolution: - { - integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, - } - sharp@0.33.5: resolution: { @@ -9229,6 +9522,13 @@ packages: integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==, } + sirv@2.0.4: + resolution: + { + integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==, + } + engines: { node: '>= 10' } + sirv@3.0.0: resolution: { @@ -9249,12 +9549,33 @@ packages: } engines: { node: '>=8' } + smart-buffer@4.2.0: + resolution: + { + integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==, + } + engines: { node: '>= 6.0.0', npm: '>= 3.0.0' } + snake-case@3.0.4: resolution: { integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==, } + socks-proxy-agent@8.0.5: + resolution: + { + integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==, + } + engines: { node: '>= 14' } + + socks@2.8.3: + resolution: + { + integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==, + } + engines: { node: '>= 10.0.0', npm: '>= 3.0.0' } + source-map-js@1.2.1: resolution: { @@ -9268,12 +9589,6 @@ packages: integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==, } - source-map-support@0.5.21: - resolution: - { - integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, - } - source-map@0.5.7: resolution: { @@ -9288,12 +9603,19 @@ packages: } engines: { node: '>=0.10.0' } - split-on-first@3.0.0: + source-map@0.7.4: resolution: { - integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==, + integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, } - engines: { node: '>=12' } + engines: { node: '>= 8' } + + speedline-core@1.4.3: + resolution: + { + integrity: sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==, + } + engines: { node: '>=8.0' } sprintf-js@1.0.3: resolution: @@ -9301,6 +9623,12 @@ packages: integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, } + sprintf-js@1.1.3: + resolution: + { + integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==, + } + stack-utils@2.0.6: resolution: { @@ -9334,6 +9662,12 @@ packages: } engines: { node: '>=10.0.0' } + streamx@2.22.0: + resolution: + { + integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==, + } + strict-event-emitter@0.5.1: resolution: { @@ -9541,14 +9875,6 @@ packages: integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==, } - tailwindcss-animate@1.0.7: - resolution: - { - integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==, - } - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - tailwindcss@3.4.17: resolution: { @@ -9557,6 +9883,12 @@ packages: engines: { node: '>=14.0.0' } hasBin: true + tar-fs@3.0.8: + resolution: + { + integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==, + } + tar-stream@2.2.0: resolution: { @@ -9564,13 +9896,11 @@ packages: } engines: { node: '>=6' } - terser@5.37.0: + tar-stream@3.1.7: resolution: { - integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==, + integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==, } - engines: { node: '>=10' } - hasBin: true test-exclude@6.0.0: resolution: @@ -9586,6 +9916,12 @@ packages: } engines: { node: '>=18' } + text-decoder@1.2.3: + resolution: + { + integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==, + } + text-table@0.2.0: resolution: { @@ -9605,6 +9941,25 @@ packages: integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, } + third-party-web@0.26.2: + resolution: + { + integrity: sha512-taJ0Us0lKoYBqcbccMuDElSUPOxmBfwlHe1OkHQ3KFf+RwovvBHdXhbFk9XJVQE2vHzxbTwvwg5GFsT9hbDokQ==, + } + + through@2.3.8: + resolution: + { + integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, + } + + timestring@6.0.0: + resolution: + { + integrity: sha512-wMctrWD2HZZLuIlchlkE2dfXJh7J2KDI9Dwl+2abPYg0mswQHfOAyQW3jJg1pY5VfttSINZuKcXoB3FGypVklA==, + } + engines: { node: '>=8' } + tinybench@2.9.0: resolution: { @@ -9645,16 +10000,28 @@ packages: } engines: { node: '>=14.0.0' } - tldts-core@6.1.71: + tldts-core@6.1.75: + resolution: + { + integrity: sha512-AOvV5YYIAFFBfransBzSTyztkc3IMfz5Eq3YluaRiEu55nn43Fzaufx70UqEKYr8BoLCach4q8g/bg6e5+/aFw==, + } + + tldts-core@6.1.76: resolution: { - integrity: sha512-LRbChn2YRpic1KxY+ldL1pGXN/oVvKfCVufwfVzEQdFYNo39uF7AJa/WXdo+gYO7PTvdfkCPCed6Hkvz/kR7jg==, + integrity: sha512-uzhJ02RaMzgQR3yPoeE65DrcHI6LoM4saUqXOt/b5hmb3+mc4YWpdSeAQqVqRUlQ14q8ZuLRWyBR1ictK1dzzg==, } - tldts@6.1.71: + tldts-icann@6.1.76: resolution: { - integrity: sha512-LQIHmHnuzfZgZWAf2HzL83TIIrD8NhhI0DVxqo9/FdOd4ilec+NTNZOlDZf7EwrTNoutccbsHjvWHYXLAtvxjw==, + integrity: sha512-RgyLN7i/wCF3dZCWi2Qwmk68lNnPjBanLDnn0aLqAAe0ZLMr7+j3BYIzNJ7+bc5XuqZ6lATnRwlH52gSQiKOXw==, + } + + tldts@6.1.75: + resolution: + { + integrity: sha512-+lFzEXhpl7JXgWYaXcB6DqTYXbUArvrWAE/5ioq/X3CdWLbDjpPP4XTrQBmEJ91y3xbe4Fkw7Lxv4P3GWeJaNg==, } hasBin: true @@ -9685,13 +10052,6 @@ packages: } engines: { node: '>=8.0' } - toidentifier@1.0.1: - resolution: - { - integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, - } - engines: { node: '>=0.6' } - totalist@3.0.1: resolution: { @@ -9782,12 +10142,6 @@ packages: integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, } - turbo-stream@2.4.0: - resolution: - { - integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==, - } - type-check@0.4.0: resolution: { @@ -9816,20 +10170,13 @@ packages: } engines: { node: '>=10' } - type-fest@4.32.0: + type-fest@4.33.0: resolution: { - integrity: sha512-rfgpoi08xagF3JSdtJlCwMq9DGNDE0IMh3Mkpc1wUypg9vPi786AiqeBBKcqvIkq42azsBM85N490fyZjeUftw==, + integrity: sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g==, } engines: { node: '>=16' } - type-is@1.6.18: - resolution: - { - integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, - } - engines: { node: '>= 0.6' } - typed-array-buffer@1.0.3: resolution: { @@ -9858,10 +10205,22 @@ packages: } engines: { node: '>= 0.4' } - typescript@5.4.5: + typed-query-selector@2.12.0: + resolution: + { + integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==, + } + + typedarray-to-buffer@3.1.5: + resolution: + { + integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==, + } + + typescript@5.7.3: resolution: { - integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==, + integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==, } engines: { node: '>=14.17' } hasBin: true @@ -9873,6 +10232,12 @@ packages: } engines: { node: '>= 0.4' } + unbzip2-stream@1.4.3: + resolution: + { + integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==, + } + undici-types@5.26.5: resolution: { @@ -9907,19 +10272,19 @@ packages: } engines: { node: '>=4' } - universalify@0.2.0: + unique-string@2.0.0: resolution: { - integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==, + integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==, } - engines: { node: '>= 4.0.0' } + engines: { node: '>=8' } - unpipe@1.0.0: + universalify@0.2.0: resolution: { - integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, + integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==, } - engines: { node: '>= 0.8' } + engines: { node: '>= 4.0.0' } update-browserslist-db@1.1.2: resolution: @@ -9975,26 +10340,24 @@ packages: '@types/react': optional: true - use-sync-external-store@1.4.0: + util-deprecate@1.0.2: resolution: { - integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==, + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, } - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - util-deprecate@1.0.2: + uuid-parse@1.1.0: resolution: { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, + integrity: sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==, } - utils-merge@1.0.1: + uuid@8.3.2: resolution: { - integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==, + integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, } - engines: { node: '>= 0.4.0' } + hasBin: true v8-to-istanbul@9.3.0: resolution: @@ -10003,13 +10366,6 @@ packages: } engines: { node: '>=10.12.0' } - vary@1.1.2: - resolution: - { - integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, - } - engines: { node: '>= 0.8' } - vaul@1.1.2: resolution: { @@ -10019,6 +10375,13 @@ packages: react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + vite-bundle-analyzer@0.16.1: + resolution: + { + integrity: sha512-3JtgXfu205taefMK1QZiEFYxCaBFJIkxuX71Eb7qbSneZUJNIat2u5DqBIVP4jZ5AK8G5QXXvQsSmlkFeazZGA==, + } + hasBin: true + vite-node@2.1.8: resolution: { @@ -10027,6 +10390,15 @@ packages: engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true + vite-plugin-image-optimizer@1.1.8: + resolution: + { + integrity: sha512-40bYRDHQLUOrIwJIJQqyKJHrfgVshqzDLtMy8SEgf+fB7PnppslSTTkY7PJFrBGqgbCdOdN9KkqsvccXmnEa5Q==, + } + engines: { node: '>=14' } + peerDependencies: + vite: '>=3' + vite-plugin-svgr@4.3.0: resolution: { @@ -10035,10 +10407,10 @@ packages: peerDependencies: vite: '>=2.6.0' - vite@5.4.11: + vite@5.4.14: resolution: { - integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==, + integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==, } engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true @@ -10069,10 +10441,10 @@ packages: terser: optional: true - vite@6.0.7: + vite@6.0.11: resolution: { - integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==, + integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==, } engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 } hasBin: true @@ -10173,6 +10545,14 @@ packages: } engines: { node: '>=12' } + webpack-bundle-analyzer@4.10.1: + resolution: + { + integrity: sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==, + } + engines: { node: '>= 10.13.0' } + hasBin: true + whatwg-encoding@2.0.0: resolution: { @@ -10293,6 +10673,12 @@ packages: integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, } + write-file-atomic@3.0.3: + resolution: + { + integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==, + } + write-file-atomic@4.0.2: resolution: { @@ -10300,6 +10686,21 @@ packages: } engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + ws@7.5.10: + resolution: + { + integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==, + } + engines: { node: '>=8.3.0' } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.18.0: resolution: { @@ -10315,6 +10716,13 @@ packages: utf-8-validate: optional: true + xdg-basedir@4.0.0: + resolution: + { + integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==, + } + engines: { node: '>=8' } + xml-name-validator@4.0.0: resolution: { @@ -10377,10 +10785,16 @@ packages: } engines: { node: '>=12' } - yjs@13.6.22: + yauzl@2.10.0: resolution: { - integrity: sha512-+mJxdbmitioqqsql1Zro4dqT3t9HgmW4dxlPtkcsKFJhXSAMyk3lwawhQFxZjj2upJXzhrTUDsaDkZgJWnv3NA==, + integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==, + } + + yjs@13.6.23: + resolution: + { + integrity: sha512-ExtnT5WIOVpkL56bhLeisG/N5c4fmzKn4k0ROVfJa5TY2QHbH7F0Wu2T5ZhR7ErsFWQEFafyrnSI8TPKVF9Few==, } engines: { node: '>=16.0.0', npm: '>=8.0.0' } @@ -10398,6 +10812,12 @@ packages: } engines: { node: '>=18' } + zod@3.23.8: + resolution: + { + integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==, + } + zod@3.24.1: resolution: { @@ -10435,13 +10855,15 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@asamuzakjp/css-color@2.8.2': + '@asamuzakjp/css-color@2.8.3': dependencies: '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - lru-cache: 11.0.2 + lru-cache: 10.4.3 + + '@assemblyscript/loader@0.19.23': {} '@babel/code-frame@7.26.2': dependencies: @@ -10451,18 +10873,18 @@ snapshots: '@babel/compat-data@7.26.5': {} - '@babel/core@7.26.0': + '@babel/core@7.26.7': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 '@babel/generator': 7.26.5 '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helpers': 7.26.7 + '@babel/parser': 7.26.7 '@babel/template': 7.25.9 - '@babel/traverse': 7.26.5 - '@babel/types': 7.26.5 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 convert-source-map: 2.0.0 debug: 4.4.0 gensync: 1.0.0-beta.2 @@ -10479,15 +10901,15 @@ snapshots: '@babel/generator@7.26.5': dependencies: - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@babel/helper-compilation-targets@7.26.5': dependencies: @@ -10497,29 +10919,29 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.7 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.0)': + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-plugin-utils': 7.26.5 debug: 4.4.0 @@ -10530,74 +10952,74 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@babel/helper-function-name@7.24.7': dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@babel/helper-hoist-variables@7.24.7': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.5 - '@babel/types': 7.26.5 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.26.5 - '@babel/types': 7.26.5 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@babel/helper-plugin-utils@7.26.5': {} - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.0)': + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.26.5 - '@babel/types': 7.26.5 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 transitivePeerDependencies: - supports-color '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@babel/helper-string-parser@7.25.9': {} @@ -10608,633 +11030,633 @@ snapshots: '@babel/helper-wrap-function@7.25.9': dependencies: '@babel/template': 7.25.9 - '@babel/traverse': 7.26.5 - '@babel/types': 7.26.5 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/helpers@7.26.0': + '@babel/helpers@7.26.7': dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 - '@babel/parser@7.26.5': + '@babel/parser@7.26.7': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.7) + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.0)': + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) - '@babel/traverse': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) + '@babel/traverse': 7.26.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/template': 7.25.9 - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.0)': + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/types': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 regenerator-transform: 0.15.2 - '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typescript@7.26.5(@babel/core@7.26.0)': + '@babel/plugin-transform-typescript@7.26.7(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/preset-env@7.26.0(@babel/core@7.26.0)': + '@babel/preset-env@7.26.7(@babel/core@7.26.7)': dependencies: '@babel/compat-data': 7.26.5 - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.0) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.7) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.7) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.7) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.7) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.7) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.7) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.7) core-js-compat: 3.40.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 esutils: 2.0.3 - '@babel/preset-react@7.26.3(@babel/core@7.26.0)': + '@babel/preset-react@7.26.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': + '@babel/preset-typescript@7.26.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-typescript': 7.26.5(@babel/core@7.26.0) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-typescript': 7.26.7(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - '@babel/runtime@7.26.0': + '@babel/runtime@7.26.7': dependencies: regenerator-runtime: 0.14.1 '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 '@babel/traverse@7.23.2': dependencies: @@ -11244,20 +11666,20 @@ snapshots: '@babel/helper-function-name': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/traverse@7.26.5': + '@babel/traverse@7.26.7': dependencies: '@babel/code-frame': 7.26.2 '@babel/generator': 7.26.5 - '@babel/parser': 7.26.5 + '@babel/parser': 7.26.7 '@babel/template': 7.25.9 - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: @@ -11268,7 +11690,7 @@ snapshots: '@babel/helper-validator-identifier': 7.25.9 to-fast-properties: 2.0.0 - '@babel/types@7.26.5': + '@babel/types@7.26.7': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 @@ -11288,6 +11710,9 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 + '@colors/colors@1.5.0': + optional: true + '@csstools/color-helpers@5.0.1': {} '@csstools/css-calc@2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': @@ -11308,6 +11733,8 @@ snapshots: '@csstools/css-tokenizer@3.0.3': {} + '@discoveryjs/json-ext@0.5.7': {} + '@emnapi/core@1.3.1': dependencies: '@emnapi/wasi-threads': 1.0.1 @@ -11324,7 +11751,7 @@ snapshots: '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.25.9 - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.7 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -11353,19 +11780,19 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1)': + '@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.7 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 18.3.1 + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 transitivePeerDependencies: - supports-color @@ -11379,26 +11806,26 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.7 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) + '@emotion/react': 11.14.0(@types/react@19.0.8)(react@19.0.0) '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) '@emotion/utils': 1.4.2 - react: 18.3.1 + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 transitivePeerDependencies: - supports-color '@emotion/unitless@0.10.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 '@emotion/utils@1.4.2': {} @@ -11637,7 +12064,7 @@ snapshots: '@eslint/js@8.57.1': {} - '@faker-js/faker@9.3.0': {} + '@faker-js/faker@9.4.0': {} '@floating-ui/core@1.6.9': dependencies: @@ -11648,17 +12075,43 @@ snapshots: '@floating-ui/core': 1.6.9 '@floating-ui/utils': 0.2.9 - '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@floating-ui/dom': 1.6.13 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) '@floating-ui/utils@0.2.9': {} - '@hookform/resolvers@3.10.0(react-hook-form@7.54.2(react@18.3.1))': + '@formatjs/ecma402-abstract@2.3.2': + dependencies: + '@formatjs/fast-memoize': 2.2.6 + '@formatjs/intl-localematcher': 0.5.10 + decimal.js: 10.5.0 + tslib: 2.8.1 + + '@formatjs/fast-memoize@2.2.6': + dependencies: + tslib: 2.8.1 + + '@formatjs/icu-messageformat-parser@2.11.0': + dependencies: + '@formatjs/ecma402-abstract': 2.3.2 + '@formatjs/icu-skeleton-parser': 1.8.12 + tslib: 2.8.1 + + '@formatjs/icu-skeleton-parser@1.8.12': + dependencies: + '@formatjs/ecma402-abstract': 2.3.2 + tslib: 2.8.1 + + '@formatjs/intl-localematcher@0.5.10': + dependencies: + tslib: 2.8.1 + + '@hookform/resolvers@3.10.0(react-hook-form@7.54.2(react@19.0.0))': dependencies: - react-hook-form: 7.54.2(react@18.3.1) + react-hook-form: 7.54.2(react@19.0.0) '@humanwhocodes/config-array@0.13.0': dependencies: @@ -11927,7 +12380,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -11964,12 +12417,6 @@ snapshots: '@jridgewell/set-array@1.2.1': {} - '@jridgewell/source-map@0.3.6': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - optional: true - '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': @@ -12005,7 +12452,7 @@ snapshots: lexical: 0.23.1 prismjs: 1.29.0 - '@lexical/devtools-core@0.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@lexical/devtools-core@0.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@lexical/html': 0.21.0 '@lexical/link': 0.21.0 @@ -12013,10 +12460,10 @@ snapshots: '@lexical/table': 0.21.0 '@lexical/utils': 0.21.0 lexical: 0.21.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@lexical/devtools-core@0.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@lexical/devtools-core@0.23.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@lexical/html': 0.23.1 '@lexical/link': 0.23.1 @@ -12024,8 +12471,8 @@ snapshots: '@lexical/table': 0.23.1 '@lexical/utils': 0.23.1 lexical: 0.23.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) '@lexical/dragon@0.21.0': dependencies: @@ -12147,11 +12594,11 @@ snapshots: '@lexical/utils': 0.23.1 lexical: 0.23.1 - '@lexical/react@0.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.22)': + '@lexical/react@0.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(yjs@13.6.23)': dependencies: '@lexical/clipboard': 0.21.0 '@lexical/code': 0.21.0 - '@lexical/devtools-core': 0.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@lexical/devtools-core': 0.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@lexical/dragon': 0.21.0 '@lexical/hashtag': 0.21.0 '@lexical/history': 0.21.0 @@ -12166,19 +12613,19 @@ snapshots: '@lexical/table': 0.21.0 '@lexical/text': 0.21.0 '@lexical/utils': 0.21.0 - '@lexical/yjs': 0.21.0(yjs@13.6.22) + '@lexical/yjs': 0.21.0(yjs@13.6.23) lexical: 0.21.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-error-boundary: 3.1.4(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-error-boundary: 3.1.4(react@19.0.0) transitivePeerDependencies: - yjs - '@lexical/react@0.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.22)': + '@lexical/react@0.23.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(yjs@13.6.23)': dependencies: '@lexical/clipboard': 0.23.1 '@lexical/code': 0.23.1 - '@lexical/devtools-core': 0.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@lexical/devtools-core': 0.23.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@lexical/dragon': 0.23.1 '@lexical/hashtag': 0.23.1 '@lexical/history': 0.23.1 @@ -12193,11 +12640,11 @@ snapshots: '@lexical/table': 0.23.1 '@lexical/text': 0.23.1 '@lexical/utils': 0.23.1 - '@lexical/yjs': 0.23.1(yjs@13.6.22) + '@lexical/yjs': 0.23.1(yjs@13.6.23) lexical: 0.23.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-error-boundary: 3.1.4(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-error-boundary: 3.1.4(react@19.0.0) transitivePeerDependencies: - yjs @@ -12257,39 +12704,30 @@ snapshots: '@lexical/table': 0.23.1 lexical: 0.23.1 - '@lexical/yjs@0.21.0(yjs@13.6.22)': + '@lexical/yjs@0.21.0(yjs@13.6.23)': dependencies: '@lexical/offset': 0.21.0 '@lexical/selection': 0.21.0 lexical: 0.21.0 - yjs: 13.6.22 + yjs: 13.6.23 - '@lexical/yjs@0.23.1(yjs@13.6.22)': + '@lexical/yjs@0.23.1(yjs@13.6.23)': dependencies: '@lexical/offset': 0.23.1 '@lexical/selection': 0.23.1 lexical: 0.23.1 - yjs: 13.6.22 - - '@lottiefiles/react-lottie-player@3.5.4(react@18.3.1)': - dependencies: - lottie-web: 5.12.2 - react: 18.3.1 + yjs: 13.6.23 - '@lottiefiles/react-lottie-player@3.6.0(react@18.3.1)': + '@lottiefiles/react-lottie-player@3.6.0(react@19.0.0)': dependencies: lottie-web: 5.12.2 - react: 18.3.1 + react: 19.0.0 - '@mdn/browser-compat-data@5.6.29': {} + '@mdn/browser-compat-data@5.6.33': {} - '@mswjs/http-middleware@0.10.3(msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5))': + '@minimistjs/subarg@1.0.0': dependencies: - express: 4.21.2 - msw: 2.7.0(@types/node@20.13.0)(typescript@5.4.5) - strict-event-emitter: 0.5.1 - transitivePeerDependencies: - - supports-color + minimist: 1.2.8 '@mswjs/interceptors@0.37.5': dependencies: @@ -12306,30 +12744,37 @@ snapshots: '@emnapi/runtime': 1.3.1 '@tybys/wasm-util': 0.9.0 - '@next/env@15.1.4': {} + '@next/bundle-analyzer@15.1.6': + dependencies: + webpack-bundle-analyzer: 4.10.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate - '@next/swc-darwin-arm64@15.1.4': + '@next/env@15.1.6': {} + + '@next/swc-darwin-arm64@15.1.6': optional: true - '@next/swc-darwin-x64@15.1.4': + '@next/swc-darwin-x64@15.1.6': optional: true - '@next/swc-linux-arm64-gnu@15.1.4': + '@next/swc-linux-arm64-gnu@15.1.6': optional: true - '@next/swc-linux-arm64-musl@15.1.4': + '@next/swc-linux-arm64-musl@15.1.6': optional: true - '@next/swc-linux-x64-gnu@15.1.4': + '@next/swc-linux-x64-gnu@15.1.6': optional: true - '@next/swc-linux-x64-musl@15.1.4': + '@next/swc-linux-x64-musl@15.1.6': optional: true - '@next/swc-win32-arm64-msvc@15.1.4': + '@next/swc-win32-arm64-msvc@15.1.6': optional: true - '@next/swc-win32-x64-msvc@15.1.4': + '@next/swc-win32-x64-msvc@15.1.6': optional: true '@nodelib/fs.scandir@2.1.5': @@ -12344,34 +12789,34 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.18.0 - '@nx/nx-darwin-arm64@20.3.1': + '@nx/nx-darwin-arm64@20.3.3': optional: true - '@nx/nx-darwin-x64@20.3.1': + '@nx/nx-darwin-x64@20.3.3': optional: true - '@nx/nx-freebsd-x64@20.3.1': + '@nx/nx-freebsd-x64@20.3.3': optional: true - '@nx/nx-linux-arm-gnueabihf@20.3.1': + '@nx/nx-linux-arm-gnueabihf@20.3.3': optional: true - '@nx/nx-linux-arm64-gnu@20.3.1': + '@nx/nx-linux-arm64-gnu@20.3.3': optional: true - '@nx/nx-linux-arm64-musl@20.3.1': + '@nx/nx-linux-arm64-musl@20.3.3': optional: true - '@nx/nx-linux-x64-gnu@20.3.1': + '@nx/nx-linux-x64-gnu@20.3.3': optional: true - '@nx/nx-linux-x64-musl@20.3.1': + '@nx/nx-linux-x64-musl@20.3.3': optional: true - '@nx/nx-win32-arm64-msvc@20.3.1': + '@nx/nx-win32-arm64-msvc@20.3.3': optional: true - '@nx/nx-win32-x64-msvc@20.3.1': + '@nx/nx-win32-x64-msvc@20.3.3': optional: true '@open-draft/deferred-promise@2.2.0': {} @@ -12383,336 +12828,400 @@ snapshots: '@open-draft/until@2.1.0': {} + '@paulirish/trace_engine@0.0.39': + dependencies: + third-party-web: 0.26.2 + '@pkgjs/parseargs@0.11.0': optional: true '@pkgr/core@0.1.1': {} - '@playwright/test@1.49.1': + '@playwright/test@1.50.0': dependencies: - playwright: 1.49.1 + playwright: 1.50.0 '@polka/url@1.0.0-next.28': {} + '@puppeteer/browsers@2.6.1': + dependencies: + debug: 4.4.0 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.6.3 + tar-fs: 3.0.8 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - supports-color + + '@puppeteer/browsers@2.7.0': + dependencies: + debug: 4.4.0 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.6.3 + tar-fs: 3.0.8 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - supports-color + '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-arrow@1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-collection@1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.8)(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-context@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-context@1.1.1(@types/react@19.0.8)(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-dialog@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.4(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) aria-hidden: 1.2.4 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.2(@types/react@18.3.18)(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-remove-scroll: 2.6.3(@types/react@19.0.8)(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-direction@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-direction@1.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.4(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-dropdown-menu@2.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-menu': 2.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-menu': 2.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.0.8)(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-id@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-id@1.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-menu@2.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-menu@2.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.4(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) aria-hidden: 1.2.4 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.2(@types/react@18.3.18)(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-remove-scroll: 2.6.3(@types/react@19.0.8)(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-popper@1.2.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-popper@1.2.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.8)(react@19.0.0) '@radix-ui/rect': 1.1.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-portal@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-primitive@2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-slot@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-slot@1.1.1(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-rect@1.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: '@radix-ui/rect': 1.1.0 - react: 18.3.1 + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - '@radix-ui/react-use-size@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-size@1.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 '@radix-ui/rect@1.1.0': {} - '@rollup/pluginutils@5.1.4(rollup@4.30.1)': + '@rollup/pluginutils@5.1.4(rollup@4.32.0)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.30.1 + rollup: 4.32.0 - '@rollup/rollup-android-arm-eabi@4.30.1': + '@rollup/rollup-android-arm-eabi@4.32.0': optional: true - '@rollup/rollup-android-arm64@4.30.1': + '@rollup/rollup-android-arm64@4.32.0': optional: true - '@rollup/rollup-darwin-arm64@4.30.1': + '@rollup/rollup-darwin-arm64@4.32.0': optional: true - '@rollup/rollup-darwin-x64@4.30.1': + '@rollup/rollup-darwin-x64@4.32.0': optional: true - '@rollup/rollup-freebsd-arm64@4.30.1': + '@rollup/rollup-freebsd-arm64@4.32.0': optional: true - '@rollup/rollup-freebsd-x64@4.30.1': + '@rollup/rollup-freebsd-x64@4.32.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.30.1': + '@rollup/rollup-linux-arm-gnueabihf@4.32.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.30.1': + '@rollup/rollup-linux-arm-musleabihf@4.32.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.30.1': + '@rollup/rollup-linux-arm64-gnu@4.32.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.30.1': + '@rollup/rollup-linux-arm64-musl@4.32.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.30.1': + '@rollup/rollup-linux-loongarch64-gnu@4.32.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.30.1': + '@rollup/rollup-linux-riscv64-gnu@4.32.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.30.1': + '@rollup/rollup-linux-s390x-gnu@4.32.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.30.1': + '@rollup/rollup-linux-x64-gnu@4.32.0': optional: true - '@rollup/rollup-linux-x64-musl@4.30.1': + '@rollup/rollup-linux-x64-musl@4.32.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.30.1': + '@rollup/rollup-win32-arm64-msvc@4.32.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.30.1': + '@rollup/rollup-win32-ia32-msvc@4.32.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.30.1': + '@rollup/rollup-win32-x64-msvc@4.32.0': optional: true + '@sentry-internal/tracing@7.120.3': + dependencies: + '@sentry/core': 7.120.3 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 + + '@sentry/core@7.120.3': + dependencies: + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 + + '@sentry/integrations@7.120.3': + dependencies: + '@sentry/core': 7.120.3 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 + localforage: 1.10.0 + + '@sentry/node@7.120.3': + dependencies: + '@sentry-internal/tracing': 7.120.3 + '@sentry/core': 7.120.3 + '@sentry/integrations': 7.120.3 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 + + '@sentry/types@7.120.3': {} + + '@sentry/utils@7.120.3': + dependencies: + '@sentry/types': 7.120.3 + '@sinclair/typebox@0.27.8': {} '@sinonjs/commons@3.0.1': @@ -12723,128 +13232,128 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@stackflow/config@1.2.0': {} + '@stackflow/config@1.2.1': {} - '@stackflow/core@1.1.0': + '@stackflow/core@1.1.1': dependencies: react-fast-compare: 3.2.2 - '@stackflow/link@1.6.0(@stackflow/core@1.1.0)(@stackflow/plugin-history-sync@1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@stackflow/plugin-preload@1.4.3(@stackflow/core@1.1.0)(@stackflow/plugin-history-sync@1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': + '@stackflow/link@1.6.1(@stackflow/core@1.1.1)(@stackflow/plugin-history-sync@1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@stackflow/plugin-preload@1.4.3(@stackflow/core@1.1.1)(@stackflow/plugin-history-sync@1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@stackflow/core': 1.1.0 - '@stackflow/plugin-history-sync': 1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) - '@stackflow/plugin-preload': 1.4.3(@stackflow/core@1.1.0)(@stackflow/plugin-history-sync@1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) - '@stackflow/react': 1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - react: 18.3.1 + '@stackflow/core': 1.1.1 + '@stackflow/plugin-history-sync': 1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@stackflow/plugin-preload': 1.4.3(@stackflow/core@1.1.1)(@stackflow/plugin-history-sync@1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@stackflow/react': 1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0) + '@types/react': 19.0.8 + react: 19.0.0 - '@stackflow/plugin-basic-ui@1.11.1(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(babel-plugin-macros@3.1.0)(react@18.3.1)': + '@stackflow/plugin-basic-ui@1.11.1(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(babel-plugin-macros@3.1.0)(react@19.0.0)': dependencies: - '@stackflow/core': 1.1.0 - '@stackflow/react': 1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1) - '@stackflow/react-ui-core': 1.2.1(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 + '@stackflow/core': 1.1.1 + '@stackflow/react': 1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0) + '@stackflow/react-ui-core': 1.2.1(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@types/react': 19.0.8 '@vanilla-extract/css': 1.17.0(babel-plugin-macros@3.1.0) '@vanilla-extract/dynamic': 2.1.2 '@vanilla-extract/private': 1.0.6 '@vanilla-extract/recipes': 0.5.5(@vanilla-extract/css@1.17.0(babel-plugin-macros@3.1.0)) - react: 18.3.1 + react: 19.0.0 transitivePeerDependencies: - babel-plugin-macros - '@stackflow/plugin-history-sync@1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': + '@stackflow/plugin-history-sync@1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@stackflow/config': 1.2.0 - '@stackflow/core': 1.1.0 - '@stackflow/react': 1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 + '@stackflow/config': 1.2.1 + '@stackflow/core': 1.1.1 + '@stackflow/react': 1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0) + '@types/react': 19.0.8 flatted: 3.3.2 history: 5.3.0 - react: 18.3.1 + react: 19.0.0 url-pattern: 1.0.3 - '@stackflow/plugin-preload@1.4.3(@stackflow/core@1.1.0)(@stackflow/plugin-history-sync@1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': + '@stackflow/plugin-preload@1.4.3(@stackflow/core@1.1.1)(@stackflow/plugin-history-sync@1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@stackflow/core': 1.1.0 - '@stackflow/plugin-history-sync': 1.7.0(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) - '@stackflow/react': 1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - react: 18.3.1 + '@stackflow/core': 1.1.1 + '@stackflow/plugin-history-sync': 1.7.1(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@stackflow/react': 1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0) + '@types/react': 19.0.8 + react: 19.0.0 - '@stackflow/plugin-renderer-basic@1.1.13(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': + '@stackflow/plugin-renderer-basic@1.1.13(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@stackflow/core': 1.1.0 - '@stackflow/react': 1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - react: 18.3.1 + '@stackflow/core': 1.1.1 + '@stackflow/react': 1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0) + '@types/react': 19.0.8 + react: 19.0.0 - '@stackflow/react-ui-core@1.2.1(@stackflow/core@1.1.0)(@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': + '@stackflow/react-ui-core@1.2.1(@stackflow/core@1.1.1)(@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@stackflow/core': 1.1.0 - '@stackflow/react': 1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - react: 18.3.1 + '@stackflow/core': 1.1.1 + '@stackflow/react': 1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0) + '@types/react': 19.0.8 + react: 19.0.0 - '@stackflow/react@1.4.1(@stackflow/config@1.2.0)(@stackflow/core@1.1.0)(@types/react@18.3.18)(react@18.3.1)': + '@stackflow/react@1.4.2(@stackflow/config@1.2.1)(@stackflow/core@1.1.1)(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@stackflow/config': 1.2.0 - '@stackflow/core': 1.1.0 - '@types/react': 18.3.18 + '@stackflow/config': 1.2.1 + '@stackflow/core': 1.1.1 + '@types/react': 19.0.8 history: 5.3.0 - react: 18.3.1 + react: 19.0.0 react-fast-compare: 3.2.2 url-pattern: 1.0.3 - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.0)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 - '@svgr/babel-preset@8.1.0(@babel/core@7.26.0)': + '@svgr/babel-preset@8.1.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.26.0 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.0) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.0) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.7) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.7) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.7) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.7) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.7) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.7) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.7) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.7) - '@svgr/core@8.1.0(typescript@5.4.5)': + '@svgr/core@8.1.0(typescript@5.7.3)': dependencies: - '@babel/core': 7.26.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.26.7) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig: 8.3.6(typescript@5.7.3) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -12852,87 +13361,87 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.4.5))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.7.3))': dependencies: - '@babel/core': 7.26.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.26.0) - '@svgr/core': 8.1.0(typescript@5.4.5) + '@babel/core': 7.26.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.26.7) + '@svgr/core': 8.1.0(typescript@5.7.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.4.5))(typescript@5.4.5)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.7.3))(typescript@5.7.3)': dependencies: - '@svgr/core': 8.1.0(typescript@5.4.5) - cosmiconfig: 8.3.6(typescript@5.4.5) + '@svgr/core': 8.1.0(typescript@5.7.3) + cosmiconfig: 8.3.6(typescript@5.7.3) deepmerge: 4.3.1 svgo: 3.3.2 transitivePeerDependencies: - typescript - '@svgr/webpack@8.1.0(typescript@5.4.5)': + '@svgr/webpack@8.1.0(typescript@5.7.3)': dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.0) - '@babel/preset-env': 7.26.0(@babel/core@7.26.0) - '@babel/preset-react': 7.26.3(@babel/core@7.26.0) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) - '@svgr/core': 8.1.0(typescript@5.4.5) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5))(typescript@5.4.5) + '@babel/core': 7.26.7 + '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.7) + '@babel/preset-env': 7.26.7(@babel/core@7.26.7) + '@babel/preset-react': 7.26.3(@babel/core@7.26.7) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.7) + '@svgr/core': 8.1.0(typescript@5.7.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.7.3)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.7.3))(typescript@5.7.3) transitivePeerDependencies: - supports-color - typescript - '@swc/core-darwin-arm64@1.10.7': + '@swc/core-darwin-arm64@1.10.11': optional: true - '@swc/core-darwin-x64@1.10.7': + '@swc/core-darwin-x64@1.10.11': optional: true - '@swc/core-linux-arm-gnueabihf@1.10.7': + '@swc/core-linux-arm-gnueabihf@1.10.11': optional: true - '@swc/core-linux-arm64-gnu@1.10.7': + '@swc/core-linux-arm64-gnu@1.10.11': optional: true - '@swc/core-linux-arm64-musl@1.10.7': + '@swc/core-linux-arm64-musl@1.10.11': optional: true - '@swc/core-linux-x64-gnu@1.10.7': + '@swc/core-linux-x64-gnu@1.10.11': optional: true - '@swc/core-linux-x64-musl@1.10.7': + '@swc/core-linux-x64-musl@1.10.11': optional: true - '@swc/core-win32-arm64-msvc@1.10.7': + '@swc/core-win32-arm64-msvc@1.10.11': optional: true - '@swc/core-win32-ia32-msvc@1.10.7': + '@swc/core-win32-ia32-msvc@1.10.11': optional: true - '@swc/core-win32-x64-msvc@1.10.7': + '@swc/core-win32-x64-msvc@1.10.11': optional: true - '@swc/core@1.10.7(@swc/helpers@0.5.15)': + '@swc/core@1.10.11(@swc/helpers@0.5.15)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.17 optionalDependencies: - '@swc/core-darwin-arm64': 1.10.7 - '@swc/core-darwin-x64': 1.10.7 - '@swc/core-linux-arm-gnueabihf': 1.10.7 - '@swc/core-linux-arm64-gnu': 1.10.7 - '@swc/core-linux-arm64-musl': 1.10.7 - '@swc/core-linux-x64-gnu': 1.10.7 - '@swc/core-linux-x64-musl': 1.10.7 - '@swc/core-win32-arm64-msvc': 1.10.7 - '@swc/core-win32-ia32-msvc': 1.10.7 - '@swc/core-win32-x64-msvc': 1.10.7 + '@swc/core-darwin-arm64': 1.10.11 + '@swc/core-darwin-x64': 1.10.11 + '@swc/core-linux-arm-gnueabihf': 1.10.11 + '@swc/core-linux-arm64-gnu': 1.10.11 + '@swc/core-linux-arm64-musl': 1.10.11 + '@swc/core-linux-x64-gnu': 1.10.11 + '@swc/core-linux-x64-musl': 1.10.11 + '@swc/core-win32-arm64-msvc': 1.10.11 + '@swc/core-win32-ia32-msvc': 1.10.11 + '@swc/core-win32-x64-msvc': 1.10.11 '@swc/helpers': 0.5.15 '@swc/counter@0.1.3': {} @@ -12945,25 +13454,25 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@tanstack/query-core@5.64.1': {} + '@tanstack/query-core@5.64.2': {} - '@tanstack/query-devtools@5.62.16': {} + '@tanstack/query-devtools@5.64.2': {} - '@tanstack/react-query-devtools@5.64.1(@tanstack/react-query@5.64.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-query-devtools@5.64.2(@tanstack/react-query@5.64.2(react@19.0.0))(react@19.0.0)': dependencies: - '@tanstack/query-devtools': 5.62.16 - '@tanstack/react-query': 5.64.1(react@18.3.1) - react: 18.3.1 + '@tanstack/query-devtools': 5.64.2 + '@tanstack/react-query': 5.64.2(react@19.0.0) + react: 19.0.0 - '@tanstack/react-query@5.64.1(react@18.3.1)': + '@tanstack/react-query@5.64.2(react@19.0.0)': dependencies: - '@tanstack/query-core': 5.64.1 - react: 18.3.1 + '@tanstack/query-core': 5.64.2 + react: 19.0.0 '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.7 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -12981,35 +13490,37 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react-hooks@8.0.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react-hooks@8.0.1(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@babel/runtime': 7.26.0 - react: 18.3.1 - react-error-boundary: 3.1.4(react@18.3.1) + '@babel/runtime': 7.26.7 + react: 19.0.0 + react-error-boundary: 3.1.4(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - react-dom: 18.3.1(react@18.3.1) + '@types/react': 19.0.8 + react-dom: 19.0.0(react@19.0.0) - '@testing-library/react@16.1.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.7 '@testing-library/dom': 10.4.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': dependencies: '@testing-library/dom': 10.4.0 '@tootallnate/once@2.0.0': {} + '@tootallnate/quickjs-emscripten@0.23.0': {} + '@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.4.2)': dependencies: '@babel/generator': 7.17.7 - '@babel/parser': 7.26.5 + '@babel/parser': 7.26.7 '@babel/traverse': 7.23.2 '@babel/types': 7.17.0 javascript-natural-sort: 0.7.1 @@ -13028,70 +13539,35 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.5 - - '@types/body-parser@1.19.5': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.13.0 - - '@types/connect@3.4.38': - dependencies: - '@types/node': 20.13.0 + '@babel/types': 7.26.7 '@types/cookie@0.6.0': {} - '@types/cors@2.8.17': - dependencies: - '@types/node': 20.13.0 - '@types/crypto-js@4.2.2': {} - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - optional: true - '@types/estree@1.0.6': {} - '@types/express-serve-static-core@5.0.4': - dependencies: - '@types/node': 20.13.0 - '@types/qs': 6.9.18 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - - '@types/express@5.0.0': - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 5.0.4 - '@types/qs': 6.9.18 - '@types/serve-static': 1.15.7 - '@types/graceful-fs@4.1.9': dependencies: '@types/node': 20.13.0 - '@types/http-errors@2.0.4': {} - '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -13115,48 +13591,25 @@ snapshots: '@types/tough-cookie': 4.0.5 parse5: 7.2.1 - '@types/json-schema@7.0.15': - optional: true - - '@types/mime@1.3.5': {} - '@types/node@20.13.0': dependencies: undici-types: 5.26.5 '@types/parse-json@4.0.2': {} - '@types/prop-types@15.7.14': {} - - '@types/qs@6.9.18': {} - - '@types/range-parser@1.2.7': {} - - '@types/react-dom@18.3.5(@types/react@18.3.18)': + '@types/react-dom@19.0.3(@types/react@19.0.8)': dependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 '@types/react-lazy-load-image-component@1.6.4': dependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 csstype: 3.1.3 - '@types/react@18.3.18': + '@types/react@19.0.8': dependencies: - '@types/prop-types': 15.7.14 csstype: 3.1.3 - '@types/send@0.17.4': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.13.0 - - '@types/serve-static@1.15.7': - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 20.13.0 - '@types/send': 0.17.4 - '@types/stack-utils@2.0.3': {} '@types/statuses@2.0.5': {} @@ -13169,34 +13622,39 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5)': + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 20.13.0 + optional: true + + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.3) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.3) '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.4.5) + ts-api-utils: 1.4.3(typescript@5.7.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.4.0 eslint: 8.57.1 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -13205,21 +13663,21 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.3) debug: 4.4.0 eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.4.5) + ts-api-utils: 1.4.3(typescript@5.7.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 @@ -13228,18 +13686,18 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.4.5) + ts-api-utils: 1.4.3(typescript@5.7.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -13250,7 +13708,7 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.1': {} + '@ungap/structured-clone@1.3.0': {} '@vanilla-extract/css@1.17.0(babel-plugin-macros@3.1.0)': dependencies: @@ -13279,14 +13737,14 @@ snapshots: dependencies: '@vanilla-extract/css': 1.17.0(babel-plugin-macros@3.1.0) - '@vitejs/plugin-react-swc@3.7.2(@swc/helpers@0.5.15)(vite@6.0.7(@types/node@20.13.0)(jiti@1.21.7)(terser@5.37.0)(yaml@2.7.0))': + '@vitejs/plugin-react-swc@3.7.2(@swc/helpers@0.5.15)(vite@6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0))': dependencies: - '@swc/core': 1.10.7(@swc/helpers@0.5.15) - vite: 6.0.7(@types/node@20.13.0)(jiti@1.21.7)(terser@5.37.0)(yaml@2.7.0) + '@swc/core': 1.10.11(@swc/helpers@0.5.15) + vite: 6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - '@swc/helpers' - '@vitest/coverage-v8@2.1.8(vitest@2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(happy-dom@12.10.3)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5))(terser@5.37.0))': + '@vitest/coverage-v8@2.1.8(vitest@2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.7.3)))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -13300,7 +13758,7 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(happy-dom@12.10.3)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5))(terser@5.37.0) + vitest: 2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.7.3)) transitivePeerDependencies: - supports-color @@ -13311,14 +13769,14 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5))(vite@5.4.11(@types/node@20.13.0)(terser@5.37.0))': + '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@20.13.0)(typescript@5.7.3))(vite@5.4.14(@types/node@20.13.0))': dependencies: '@vitest/spy': 2.1.8 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - msw: 2.7.0(@types/node@20.13.0)(typescript@5.4.5) - vite: 5.4.11(@types/node@20.13.0)(terser@5.37.0) + msw: 2.7.0(@types/node@20.13.0)(typescript@5.7.3) + vite: 5.4.14(@types/node@20.13.0) '@vitest/pretty-format@2.1.8': dependencies: @@ -13348,7 +13806,7 @@ snapshots: sirv: 3.0.0 tinyglobby: 0.2.10 tinyrainbow: 1.2.0 - vitest: 2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(happy-dom@12.10.3)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5))(terser@5.37.0) + vitest: 2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.7.3)) '@vitest/utils@2.1.8': dependencies: @@ -13369,11 +13827,6 @@ snapshots: abab@2.0.6: {} - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - acorn-globals@7.0.1: dependencies: acorn: 8.14.0 @@ -13452,14 +13905,12 @@ snapshots: call-bound: 1.0.3 is-array-buffer: 3.0.5 - array-flatten@1.1.1: {} - array-includes@3.1.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 get-intrinsic: 1.2.7 is-string: 1.1.1 @@ -13471,7 +13922,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 es-shim-unscopables: 1.0.2 array.prototype.flat@1.3.3: @@ -13510,26 +13961,60 @@ snapshots: ast-metadata-inferer@0.8.1: dependencies: - '@mdn/browser-compat-data': 5.6.29 + '@mdn/browser-compat-data': 5.6.33 + + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + async-function@1.0.0: {} async@3.2.6: {} asynckit@0.4.0: {} - autoprefixer@10.4.20(postcss@8.5.0): + autocannon@8.0.0: + dependencies: + '@minimistjs/subarg': 1.0.0 + chalk: 4.1.2 + char-spinner: 1.0.1 + cli-table3: 0.6.5 + color-support: 1.1.3 + cross-argv: 2.0.0 + form-data: 4.0.1 + has-async-hooks: 1.0.0 + hdr-histogram-js: 3.0.0 + hdr-histogram-percentiles-obj: 3.0.0 + http-parser-js: 0.5.9 + hyperid: 3.3.0 + lodash.chunk: 4.2.0 + lodash.clonedeep: 4.5.0 + lodash.flatten: 4.4.0 + manage-path: 2.0.0 + on-net-listen: 1.1.2 + pretty-bytes: 5.6.0 + progress: 2.0.3 + reinterval: 1.1.0 + retimer: 3.0.0 + semver: 7.6.3 + timestring: 6.0.0 + + autoprefixer@10.4.20(postcss@8.5.1): dependencies: browserslist: 4.24.4 - caniuse-lite: 1.0.30001692 + caniuse-lite: 1.0.30001695 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.0 + postcss: 8.5.1 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 + axe-core@4.10.2: {} + axios@1.7.9: dependencies: follow-redirects: 1.15.9 @@ -13538,13 +14023,15 @@ snapshots: transitivePeerDependencies: - debug - babel-jest@29.7.0(@babel/core@7.26.0): + b4a@1.6.7: {} + + babel-jest@29.7.0(@babel/core@7.26.7): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.26.0) + babel-preset-jest: 29.6.3(@babel/core@7.26.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -13564,69 +14051,98 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.7 cosmiconfig: 7.1.0 resolve: 1.22.10 - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.7): dependencies: '@babel/compat-data': 7.26.5 - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.7): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.7) core-js-compat: 3.40.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.7): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/core': 7.26.7 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): - dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) - - babel-preset-jest@29.6.3(@babel/core@7.26.0): - dependencies: - '@babel/core': 7.26.0 + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.7): + dependencies: + '@babel/core': 7.26.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.7) + + babel-preset-jest@29.6.3(@babel/core@7.26.7): + dependencies: + '@babel/core': 7.26.7 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) balanced-match@1.0.2: {} + bare-events@2.5.4: + optional: true + + bare-fs@4.0.1: + dependencies: + bare-events: 2.5.4 + bare-path: 3.0.0 + bare-stream: 2.6.4(bare-events@2.5.4) + transitivePeerDependencies: + - bare-buffer + optional: true + + bare-os@3.4.0: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.4.0 + optional: true + + bare-stream@2.6.4(bare-events@2.5.4): + dependencies: + streamx: 2.22.0 + optionalDependencies: + bare-events: 2.5.4 + optional: true + base64-js@1.5.1: {} + basic-ftp@5.0.5: {} + binary-extensions@2.3.0: {} bl@4.1.0: @@ -13635,23 +14151,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - body-parser@1.20.3: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - boolbase@1.0.0: {} brace-expansion@1.1.11: @@ -13669,8 +14168,8 @@ snapshots: browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001692 - electron-to-chromium: 1.5.80 + caniuse-lite: 1.0.30001695 + electron-to-chromium: 1.5.88 node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) @@ -13682,6 +14181,8 @@ snapshots: dependencies: node-int64: 0.4.0 + buffer-crc32@0.2.13: {} + buffer-from@1.1.2: {} buffer@5.7.1: @@ -13693,8 +14194,6 @@ snapshots: dependencies: streamsearch: 1.1.0 - bytes@3.1.2: {} - cac@6.7.14: {} call-bind-apply-helpers@1.0.1: @@ -13722,7 +14221,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001692: {} + caniuse-lite@1.0.30001695: {} chai@5.1.2: dependencies: @@ -13744,6 +14243,8 @@ snapshots: char-regex@1.0.2: {} + char-spinner@1.0.1: {} + check-error@2.1.1: {} chokidar@3.6.0: @@ -13758,13 +14259,30 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - ci-info@3.9.0: {} + chrome-launcher@1.1.2: + dependencies: + '@types/node': 20.13.0 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 2.0.1 + transitivePeerDependencies: + - supports-color - cjs-module-lexer@1.4.1: {} + chromium-bidi@0.11.0(devtools-protocol@0.0.1367902): + dependencies: + devtools-protocol: 0.0.1367902 + mitt: 3.0.1 + zod: 3.23.8 - class-variance-authority@0.7.1: + chromium-bidi@1.1.0(devtools-protocol@0.0.1380148): dependencies: - clsx: 2.1.1 + devtools-protocol: 0.0.1380148 + mitt: 3.0.1 + zod: 3.24.1 + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.1: {} cli-cursor@3.1.0: dependencies: @@ -13772,6 +14290,12 @@ snapshots: cli-spinners@2.6.1: {} + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + cli-width@4.1.0: {} client-only@0.0.1: {} @@ -13800,55 +14324,43 @@ snapshots: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - optional: true + + color-support@1.1.3: {} color@4.2.3: dependencies: color-convert: 2.0.1 color-string: 1.9.1 - optional: true combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - commander@2.20.3: - optional: true - commander@4.1.1: {} commander@7.2.0: {} concat-map@0.0.1: {} - content-disposition@0.5.4: + configstore@5.0.1: dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} + dot-prop: 5.3.0 + graceful-fs: 4.2.11 + make-dir: 3.1.0 + unique-string: 2.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 4.0.0 convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} - cookie-signature@1.0.6: {} - - cookie@0.7.1: {} - cookie@0.7.2: {} - cookie@1.0.2: - optional: true - core-js-compat@3.40.0: dependencies: browserslist: 4.24.4 - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -13857,14 +14369,23 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@8.3.6(typescript@5.4.5): + cosmiconfig@8.3.6(typescript@5.7.3): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 + + cosmiconfig@9.0.0(typescript@5.7.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.7.3 create-jest@29.7.0(@types/node@20.13.0)(babel-plugin-macros@3.1.0): dependencies: @@ -13881,6 +14402,8 @@ snapshots: - supports-color - ts-node + cross-argv@2.0.0: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -13889,6 +14412,10 @@ snapshots: crypto-js@4.2.0: {} + crypto-random-string@2.0.0: {} + + csp_evaluator@1.1.1: {} + css-select@5.1.0: dependencies: boolbase: 1.0.0 @@ -13927,11 +14454,13 @@ snapshots: cssstyle@4.2.1: dependencies: - '@asamuzakjp/css-color': 2.8.2 + '@asamuzakjp/css-color': 2.8.3 rrweb-cssom: 0.8.0 csstype@3.1.3: {} + data-uri-to-buffer@6.0.2: {} + data-urls@3.0.2: dependencies: abab: 2.0.6 @@ -13963,6 +14492,8 @@ snapshots: date-fns@4.1.0: {} + debounce@1.2.1: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -13971,9 +14502,7 @@ snapshots: dependencies: ms: 2.1.3 - decimal.js@10.4.3: {} - - decode-uri-component@0.4.1: {} + decimal.js@10.5.0: {} dedent@1.5.3(babel-plugin-macros@3.1.0): optionalDependencies: @@ -14005,21 +14534,28 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - delayed-stream@1.0.0: {} + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 - depd@2.0.0: {} + delayed-stream@1.0.0: {} dequal@2.0.3: {} - destroy@1.2.0: {} - - detect-libc@2.0.3: - optional: true + detect-libc@2.0.3: {} detect-newline@3.1.0: {} detect-node-es@1.1.0: {} + devtools-protocol@0.0.1312386: {} + + devtools-protocol@0.0.1367902: {} + + devtools-protocol@0.0.1380148: {} + didyoumean@1.2.2: {} diff-sequences@29.6.3: {} @@ -14069,6 +14605,10 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + dotenv-expand@11.0.7: dependencies: dotenv: 16.4.7 @@ -14081,21 +14621,21 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - eastasianwidth@0.2.0: {} + duplexer@0.1.2: {} - ee-first@1.1.1: {} + eastasianwidth@0.2.0: {} ejs@3.1.10: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.80: {} + electron-to-chromium@1.5.88: {} - embla-carousel-react@8.5.2(react@18.3.1): + embla-carousel-react@8.5.2(react@19.0.0): dependencies: embla-carousel: 8.5.2 embla-carousel-reactive-utils: 8.5.2(embla-carousel@8.5.2) - react: 18.3.1 + react: 19.0.0 embla-carousel-reactive-utils@8.5.2(embla-carousel@8.5.2): dependencies: @@ -14109,10 +14649,6 @@ snapshots: emoji-regex@9.2.2: {} - encodeurl@1.0.2: {} - - encodeurl@2.0.0: {} - end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -14123,6 +14659,8 @@ snapshots: entities@4.5.0: {} + env-paths@2.2.1: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -14139,7 +14677,7 @@ snapshots: data-view-byte-offset: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 es-set-tostringtag: 2.1.0 es-to-primitive: 1.3.0 function.prototype.name: 1.1.8 @@ -14206,7 +14744,7 @@ snapshots: es-module-lexer@1.6.0: {} - es-object-atoms@1.0.1: + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -14308,8 +14846,6 @@ snapshots: escalade@3.2.0: {} - escape-html@1.0.3: {} - escape-string-regexp@1.0.5: {} escape-string-regexp@2.0.0: {} @@ -14330,24 +14866,23 @@ snapshots: eslint-plugin-compat@6.0.2(eslint@8.57.1): dependencies: - '@mdn/browser-compat-data': 5.6.29 + '@mdn/browser-compat-data': 5.6.33 ast-metadata-inferer: 0.8.1 browserslist: 4.24.4 - caniuse-lite: 1.0.30001692 + caniuse-lite: 1.0.30001695 eslint: 8.57.1 find-up: 5.0.0 globals: 15.14.0 lodash.memoize: 4.1.2 semver: 7.6.3 - eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.4.2): + eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.4.2): dependencies: eslint: 8.57.1 prettier: 3.4.2 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 optionalDependencies: - '@types/eslint': 9.6.1 eslint-config-prettier: 9.1.0(eslint@8.57.1) eslint-plugin-react@7.37.4(eslint@8.57.1): @@ -14372,11 +14907,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1): dependencies: eslint: 8.57.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) eslint-scope@7.2.2: dependencies: @@ -14394,7 +14929,7 @@ snapshots: '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.1 + '@ungap/structured-clone': 1.3.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -14454,8 +14989,6 @@ snapshots: esutils@2.0.3: {} - etag@1.8.1: {} - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -14480,39 +15013,13 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - express@4.21.2: + extract-zip@2.0.1: dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.3 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.7.1 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.3.1 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.3 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.12 - proxy-addr: 2.0.7 - qs: 6.13.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 + debug: 4.4.0 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 transitivePeerDependencies: - supports-color @@ -14520,6 +15027,8 @@ snapshots: fast-diff@1.3.0: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -14540,7 +15049,11 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.4.2(picomatch@4.0.2): + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fdir@6.4.3(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -14562,20 +15075,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - filter-obj@5.1.0: {} - - finalhandler@1.3.1: - dependencies: - debug: 2.6.9 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - find-root@1.1.0: {} find-up@4.1.0: @@ -14600,7 +15099,7 @@ snapshots: follow-redirects@1.15.9: {} - for-each@0.3.3: + for-each@0.3.4: dependencies: is-callable: 1.2.7 @@ -14615,21 +15114,17 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 - forwarded@0.2.0: {} - fraction.js@4.3.7: {} - framer-motion@11.18.0(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - motion-dom: 11.16.4 - motion-utils: 11.16.0 + motion-dom: 11.18.1 + motion-utils: 11.18.1 tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 1.3.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - fresh@0.5.2: {} + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) front-matter@4.0.2: dependencies: @@ -14667,7 +15162,7 @@ snapshots: call-bind-apply-helpers: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 @@ -14682,7 +15177,11 @@ snapshots: get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 get-stream@6.0.1: {} @@ -14692,6 +15191,14 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.7 + get-uri@6.0.4: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -14746,18 +15253,14 @@ snapshots: graphemer@1.4.0: {} - graphql@16.10.0: {} - - happy-dom@12.10.3: - dependencies: - css.escape: 1.5.1 - entities: 4.5.0 - iconv-lite: 0.6.3 - webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 - whatwg-mimetype: 3.0.0 - optional: true - + graphql@16.10.0: {} + + gzip-size@6.0.0: + dependencies: + duplexer: 0.1.2 + + has-async-hooks@1.0.0: {} + has-bigints@1.1.0: {} has-flag@4.0.0: {} @@ -14780,11 +15283,19 @@ snapshots: dependencies: function-bind: 1.1.2 + hdr-histogram-js@3.0.0: + dependencies: + '@assemblyscript/loader': 0.19.23 + base64-js: 1.5.1 + pako: 1.0.11 + + hdr-histogram-percentiles-obj@3.0.0: {} + headers-polyfill@4.0.3: {} history@5.3.0: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.7 hoist-non-react-statics@3.3.2: dependencies: @@ -14800,13 +15311,9 @@ snapshots: html-escaper@2.0.2: {} - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 + http-link-header@1.1.3: {} + + http-parser-js@0.5.9: {} http-proxy-agent@5.0.0: dependencies: @@ -14841,9 +15348,11 @@ snapshots: husky@9.1.7: {} - iconv-lite@0.4.24: + hyperid@3.3.0: dependencies: - safer-buffer: 2.1.2 + buffer: 5.7.1 + uuid: 8.3.2 + uuid-parse: 1.1.0 iconv-lite@0.6.3: dependencies: @@ -14853,8 +15362,9 @@ snapshots: ignore@5.3.2: {} - immer@9.0.21: - optional: true + image-ssim@0.2.0: {} + + immediate@3.0.6: {} import-fresh@3.3.0: dependencies: @@ -14883,7 +15393,17 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 - ipaddr.js@1.9.1: {} + intl-messageformat@10.7.14: + dependencies: + '@formatjs/ecma402-abstract': 2.3.2 + '@formatjs/fast-memoize': 2.2.6 + '@formatjs/icu-messageformat-parser': 2.11.0 + tslib: 2.8.1 + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 is-array-buffer@3.0.5: dependencies: @@ -14893,11 +15413,11 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: - optional: true + is-arrayish@0.3.2: {} - is-async-function@2.1.0: + is-async-function@2.1.1: dependencies: + async-function: 1.0.0 call-bound: 1.0.3 get-proto: 1.0.1 has-tostringtag: 1.0.2 @@ -14969,8 +15489,12 @@ snapshots: is-number@7.0.0: {} + is-obj@2.0.0: {} + is-path-inside@3.0.3: {} + is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} is-regex@1.2.1: @@ -15003,6 +15527,8 @@ snapshots: dependencies: which-typed-array: 1.1.18 + is-typedarray@1.0.0: {} + is-unicode-supported@0.1.0: {} is-weakmap@2.0.2: {} @@ -15030,8 +15556,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.26.0 - '@babel/parser': 7.26.5 + '@babel/core': 7.26.7 + '@babel/parser': 7.26.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -15040,8 +15566,8 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.26.0 - '@babel/parser': 7.26.5 + '@babel/core': 7.26.7 + '@babel/parser': 7.26.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.3 @@ -15078,7 +15604,7 @@ snapshots: iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 get-intrinsic: 1.2.7 get-proto: 1.0.1 has-symbols: 1.1.0 @@ -15152,10 +15678,10 @@ snapshots: jest-config@29.7.0(@types/node@20.13.0)(babel-plugin-macros@3.1.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.0) + babel-jest: 29.7.0(@babel/core@7.26.7) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -15351,15 +15877,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@babel/generator': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) + '@babel/types': 7.26.7 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -15424,8 +15950,12 @@ snapshots: jiti@1.21.7: {} + jpeg-js@0.4.4: {} + js-cookie@3.0.5: {} + js-library-detector@6.7.0: {} + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -15437,6 +15967,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsbn@1.1.0: {} + jsdom@20.0.3: dependencies: abab: 2.0.6 @@ -15445,7 +15977,7 @@ snapshots: cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 - decimal.js: 10.4.3 + decimal.js: 10.5.0 domexception: 4.0.0 escodegen: 2.1.0 form-data: 4.0.1 @@ -15474,7 +16006,7 @@ snapshots: dependencies: cssstyle: 4.2.1 data-urls: 5.0.0 - decimal.js: 10.4.3 + decimal.js: 10.5.0 form-data: 4.0.1 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 @@ -15544,12 +16076,65 @@ snapshots: dependencies: isomorphic.js: 0.2.5 + lie@3.1.1: + dependencies: + immediate: 3.0.6 + + lighthouse-logger@2.0.1: + dependencies: + debug: 2.6.9 + marky: 1.2.5 + transitivePeerDependencies: + - supports-color + + lighthouse-stack-packs@1.12.2: {} + + lighthouse@12.3.0: + dependencies: + '@paulirish/trace_engine': 0.0.39 + '@sentry/node': 7.120.3 + axe-core: 4.10.2 + chrome-launcher: 1.1.2 + configstore: 5.0.1 + csp_evaluator: 1.1.1 + devtools-protocol: 0.0.1312386 + enquirer: 2.3.6 + http-link-header: 1.1.3 + intl-messageformat: 10.7.14 + jpeg-js: 0.4.4 + js-library-detector: 6.7.0 + lighthouse-logger: 2.0.1 + lighthouse-stack-packs: 1.12.2 + lodash-es: 4.17.21 + lookup-closest-locale: 6.2.0 + metaviewport-parser: 0.3.0 + open: 8.4.2 + parse-cache-control: 1.0.1 + puppeteer-core: 23.11.1 + robots-parser: 3.0.1 + semver: 5.7.2 + speedline-core: 1.4.3 + third-party-web: 0.26.2 + tldts-icann: 6.1.76 + ws: 7.5.10 + yargs: 17.7.2 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} lines-and-columns@2.0.3: {} + localforage@1.10.0: + dependencies: + lie: 3.1.1 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -15558,8 +16143,16 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash-es@4.17.21: {} + + lodash.chunk@4.2.0: {} + + lodash.clonedeep@4.5.0: {} + lodash.debounce@4.0.8: {} + lodash.flatten@4.4.0: {} + lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} @@ -15573,6 +16166,8 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + lookup-closest-locale@6.2.0: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -15587,15 +16182,15 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.0.2: {} - lru-cache@5.1.1: dependencies: yallist: 3.1.1 - lucide-react@0.460.0(react@18.3.1): + lru-cache@7.18.3: {} + + lucide-react@0.460.0(react@19.0.0): dependencies: - react: 18.3.1 + react: 19.0.0 lz-string@1.5.0: {} @@ -15605,10 +16200,14 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 source-map-js: 1.2.1 + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + make-dir@4.0.0: dependencies: semver: 7.6.3 @@ -15619,6 +16218,10 @@ snapshots: dependencies: tmpl: 1.0.5 + manage-path@2.0.0: {} + + marky@1.2.5: {} + math-intrinsics@1.1.0: {} mdn-data@2.0.28: {} @@ -15627,17 +16230,13 @@ snapshots: media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.26.0 - - media-typer@0.3.0: {} - - merge-descriptors@1.0.3: {} + '@babel/runtime': 7.26.7 merge-stream@2.0.0: {} merge2@1.4.1: {} - methods@1.1.2: {} + metaviewport-parser@0.3.0: {} micromatch@4.0.8: dependencies: @@ -15650,8 +16249,6 @@ snapshots: dependencies: mime-db: 1.52.0 - mime@1.6.0: {} - mimic-fn@2.1.0: {} min-indent@1.0.1: {} @@ -15680,20 +16277,20 @@ snapshots: modern-ahocorasick@1.1.0: {} - motion-dom@11.16.4: + motion-dom@11.18.1: dependencies: - motion-utils: 11.16.0 + motion-utils: 11.18.1 - motion-utils@11.16.0: {} + motion-utils@11.18.1: {} - motion@11.18.0(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - framer-motion: 11.18.0(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + framer-motion: 11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 1.3.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) mrmime@2.0.0: {} @@ -15701,7 +16298,7 @@ snapshots: ms@2.1.3: {} - msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5): + msw@2.7.0(@types/node@20.13.0)(typescript@5.7.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 @@ -15719,10 +16316,10 @@ snapshots: path-to-regexp: 6.3.0 picocolors: 1.1.1 strict-event-emitter: 0.5.1 - type-fest: 4.32.0 + type-fest: 4.33.0 yargs: 17.7.2 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - '@types/node' @@ -15742,34 +16339,42 @@ snapshots: natural-compare@1.4.0: {} - negotiator@0.6.3: {} + netmask@2.0.2: {} - next@15.1.4(@babel/core@7.26.0)(@playwright/test@1.49.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.1.6(@babel/core@7.26.7)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@next/env': 15.1.4 + '@next/env': 15.1.6 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001692 + caniuse-lite: 1.0.30001695 postcss: 8.4.31 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.6(@babel/core@7.26.0)(babel-plugin-macros@3.1.0)(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + styled-jsx: 5.1.6(@babel/core@7.26.7)(babel-plugin-macros@3.1.0)(react@19.0.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.4 - '@next/swc-darwin-x64': 15.1.4 - '@next/swc-linux-arm64-gnu': 15.1.4 - '@next/swc-linux-arm64-musl': 15.1.4 - '@next/swc-linux-x64-gnu': 15.1.4 - '@next/swc-linux-x64-musl': 15.1.4 - '@next/swc-win32-arm64-msvc': 15.1.4 - '@next/swc-win32-x64-msvc': 15.1.4 - '@playwright/test': 1.49.1 + '@next/swc-darwin-arm64': 15.1.6 + '@next/swc-darwin-x64': 15.1.6 + '@next/swc-linux-arm64-gnu': 15.1.6 + '@next/swc-linux-arm64-musl': 15.1.6 + '@next/swc-linux-x64-gnu': 15.1.6 + '@next/swc-linux-x64-musl': 15.1.6 + '@next/swc-win32-arm64-msvc': 15.1.6 + '@next/swc-win32-x64-msvc': 15.1.6 + '@playwright/test': 1.50.0 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + nextjs-toploader@3.7.15(next@15.1.6(@babel/core@7.26.7)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + next: 15.1.6(@babel/core@7.26.7)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + nprogress: 0.2.0 + prop-types: 15.8.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + no-case@3.0.4: dependencies: lower-case: 2.0.2 @@ -15789,22 +16394,15 @@ snapshots: dependencies: path-key: 3.1.1 + nprogress@0.2.0: {} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 - nuqs@2.3.0(next@15.1.4(@babel/core@7.26.0)(@playwright/test@1.49.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-router-dom@7.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-router@7.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): - dependencies: - mitt: 3.0.1 - react: 18.3.1 - optionalDependencies: - next: 15.1.4(@babel/core@7.26.0)(@playwright/test@1.49.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-router: 7.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-router-dom: 7.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - nwsapi@2.2.16: {} - nx@20.3.1(@swc/core@1.10.7): + nx@20.3.3(@swc/core@1.10.11): dependencies: '@napi-rs/wasm-runtime': 0.2.4 '@yarnpkg/lockfile': 1.1.0 @@ -15841,17 +16439,17 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 20.3.1 - '@nx/nx-darwin-x64': 20.3.1 - '@nx/nx-freebsd-x64': 20.3.1 - '@nx/nx-linux-arm-gnueabihf': 20.3.1 - '@nx/nx-linux-arm64-gnu': 20.3.1 - '@nx/nx-linux-arm64-musl': 20.3.1 - '@nx/nx-linux-x64-gnu': 20.3.1 - '@nx/nx-linux-x64-musl': 20.3.1 - '@nx/nx-win32-arm64-msvc': 20.3.1 - '@nx/nx-win32-x64-msvc': 20.3.1 - '@swc/core': 1.10.7(@swc/helpers@0.5.15) + '@nx/nx-darwin-arm64': 20.3.3 + '@nx/nx-darwin-x64': 20.3.3 + '@nx/nx-freebsd-x64': 20.3.3 + '@nx/nx-linux-arm-gnueabihf': 20.3.3 + '@nx/nx-linux-arm64-gnu': 20.3.3 + '@nx/nx-linux-arm64-musl': 20.3.3 + '@nx/nx-linux-x64-gnu': 20.3.3 + '@nx/nx-linux-x64-musl': 20.3.3 + '@nx/nx-win32-arm64-msvc': 20.3.3 + '@nx/nx-win32-x64-msvc': 20.3.3 + '@swc/core': 1.10.11(@swc/helpers@0.5.15) transitivePeerDependencies: - debug @@ -15868,7 +16466,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.3 define-properties: 1.2.1 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 has-symbols: 1.1.0 object-keys: 1.1.1 @@ -15876,25 +16474,23 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 object.fromentries@2.0.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 object.values@1.2.1: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 define-properties: 1.2.1 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 + on-net-listen@1.1.2: {} once@1.4.0: dependencies: @@ -15910,6 +16506,8 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + opener@1.5.2: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -15956,12 +16554,34 @@ snapshots: p-try@2.2.0: {} + pac-proxy-agent@7.1.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.3 + debug: 4.4.0 + get-uri: 6.0.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + package-json-from-dist@1.0.1: {} + pako@1.0.11: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 + parse-cache-control@1.0.1: {} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.26.2 @@ -15973,8 +16593,6 @@ snapshots: dependencies: entities: 4.5.0 - parseurl@1.3.3: {} - path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -15988,8 +16606,6 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.12: {} - path-to-regexp@6.3.0: {} path-type@4.0.0: {} @@ -15998,6 +16614,8 @@ snapshots: pathval@2.0.0: {} + pend@1.2.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -16012,38 +16630,38 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.49.1: {} + playwright-core@1.50.0: {} - playwright@1.49.1: + playwright@1.50.0: dependencies: - playwright-core: 1.49.1 + playwright-core: 1.50.0 optionalDependencies: fsevents: 2.3.2 possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.5.0): + postcss-import@15.1.0(postcss@8.5.1): dependencies: - postcss: 8.5.0 + postcss: 8.5.1 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.10 - postcss-js@4.0.1(postcss@8.5.0): + postcss-js@4.0.1(postcss@8.5.1): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.0 + postcss: 8.5.1 - postcss-load-config@4.0.2(postcss@8.5.0): + postcss-load-config@4.0.2(postcss@8.5.1): dependencies: lilconfig: 3.1.3 yaml: 2.7.0 optionalDependencies: - postcss: 8.5.0 + postcss: 8.5.1 - postcss-nested@6.2.0(postcss@8.5.0): + postcss-nested@6.2.0(postcss@8.5.1): dependencies: - postcss: 8.5.0 + postcss: 8.5.1 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -16059,7 +16677,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.0: + postcss@8.5.1: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -16073,6 +16691,8 @@ snapshots: prettier@3.4.2: {} + pretty-bytes@5.6.0: {} + pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 @@ -16087,6 +16707,8 @@ snapshots: prismjs@1.29.0: {} + progress@2.0.3: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -16098,10 +16720,18 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 - proxy-addr@2.0.7: + proxy-agent@6.5.0: dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 + agent-base: 7.1.3 + debug: 4.4.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.1.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color proxy-from-env@1.1.0: {} @@ -16109,61 +16739,83 @@ snapshots: dependencies: punycode: 2.3.1 + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode@2.3.1: {} - pure-rand@6.1.0: {} + puppeteer-core@23.11.1: + dependencies: + '@puppeteer/browsers': 2.6.1 + chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + debug: 4.4.0 + devtools-protocol: 0.0.1367902 + typed-query-selector: 2.12.0 + ws: 8.18.0 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate - qs@6.13.0: + puppeteer-core@24.1.1: dependencies: - side-channel: 1.1.0 + '@puppeteer/browsers': 2.7.0 + chromium-bidi: 1.1.0(devtools-protocol@0.0.1380148) + debug: 4.4.0 + devtools-protocol: 0.0.1380148 + typed-query-selector: 2.12.0 + ws: 8.18.0 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate - query-string@9.1.1: + puppeteer@24.1.1(typescript@5.7.3): dependencies: - decode-uri-component: 0.4.1 - filter-obj: 5.1.0 - split-on-first: 3.0.0 + '@puppeteer/browsers': 2.7.0 + chromium-bidi: 1.1.0(devtools-protocol@0.0.1380148) + cosmiconfig: 9.0.0(typescript@5.7.3) + devtools-protocol: 0.0.1380148 + puppeteer-core: 24.1.1 + typed-query-selector: 2.12.0 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - typescript + - utf-8-validate + + pure-rand@6.1.0: {} querystringify@2.2.0: {} queue-microtask@1.2.3: {} - range-parser@1.2.1: {} - - raw-body@2.5.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - react-dom@18.3.1(react@18.3.1): + react-dom@19.0.0(react@19.0.0): dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 + react: 19.0.0 + scheduler: 0.25.0 - react-error-boundary@3.1.4(react@18.3.1): + react-error-boundary@3.1.4(react@19.0.0): dependencies: - '@babel/runtime': 7.26.0 - react: 18.3.1 + '@babel/runtime': 7.26.7 + react: 19.0.0 react-fast-compare@3.2.2: {} - react-hook-form@7.54.2(react@18.3.1): + react-hook-form@7.54.2(react@19.0.0): dependencies: - react: 18.3.1 + react: 19.0.0 - react-intersection-observer@9.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-intersection-observer@9.15.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - react: 18.3.1 + react: 19.0.0 optionalDependencies: - react-dom: 18.3.1(react@18.3.1) - - react-intersection-observer@9.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - react: 18.3.1 - optionalDependencies: - react-dom: 18.3.1(react@18.3.1) + react-dom: 19.0.0(react@19.0.0) react-is@16.13.1: {} @@ -16171,73 +16823,53 @@ snapshots: react-is@18.3.1: {} - react-lazy-load-image-component@1.6.3(react@18.3.1): + react-lazy-load-image-component@1.6.3(react@19.0.0): dependencies: lodash.debounce: 4.0.8 lodash.throttle: 4.1.1 - react: 18.3.1 + react: 19.0.0 - react-loading-skeleton@3.5.0(react@18.3.1): + react-loading-skeleton@3.5.0(react@19.0.0): dependencies: - react: 18.3.1 + react: 19.0.0 - react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): + react-remove-scroll-bar@2.3.8(@types/react@19.0.8)(react@19.0.0): dependencies: - react: 18.3.1 - react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) + react: 19.0.0 + react-style-singleton: 2.2.3(@types/react@19.0.8)(react@19.0.0) tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - react-remove-scroll@2.6.2(@types/react@18.3.18)(react@18.3.1): + react-remove-scroll@2.6.3(@types/react@19.0.8)(react@19.0.0): dependencies: - react: 18.3.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@18.3.1) - react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) + react: 19.0.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.0.8)(react@19.0.0) + react-style-singleton: 2.2.3(@types/react@19.0.8)(react@19.0.0) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.3.18)(react@18.3.1) - use-sidecar: 1.1.3(@types/react@18.3.18)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.18 - - react-router-dom@7.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-router: 7.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - optional: true - - react-router@7.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@types/cookie': 0.6.0 - cookie: 1.0.2 - react: 18.3.1 - set-cookie-parser: 2.7.1 - turbo-stream: 2.4.0 + use-callback-ref: 1.3.3(@types/react@19.0.8)(react@19.0.0) + use-sidecar: 1.1.3(@types/react@19.0.8)(react@19.0.0) optionalDependencies: - react-dom: 18.3.1(react@18.3.1) - optional: true + '@types/react': 19.0.8 - react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): + react-style-singleton@2.2.3(@types/react@19.0.8)(react@19.0.0): dependencies: get-nonce: 1.0.1 - react: 18.3.1 + react: 19.0.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - react-swipeable@7.0.2(react@18.3.1): + react-swipeable@7.0.2(react@19.0.0): dependencies: - react: 18.3.1 + react: 19.0.0 - react-zoom-pan-pinch@3.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-zoom-pan-pinch@3.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - react@18.3.1: - dependencies: - loose-envify: 1.4.0 + react@19.0.0: {} read-cache@1.0.0: dependencies: @@ -16264,7 +16896,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 get-intrinsic: 1.2.7 get-proto: 1.0.1 which-builtin-type: 1.2.1 @@ -16279,7 +16911,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.7 regexp.prototype.flags@1.5.4: dependencies: @@ -16305,6 +16937,8 @@ snapshots: dependencies: jsesc: 3.0.2 + reinterval@1.1.0: {} + require-directory@2.1.1: {} requires-port@1.0.0: {} @@ -16336,35 +16970,48 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + retimer@3.0.0: {} + reusify@1.0.4: {} rimraf@3.0.2: dependencies: glob: 7.2.3 - rollup@4.30.1: + robots-parser@3.0.1: {} + + rollup-plugin-visualizer@5.14.0(rollup@4.32.0): + dependencies: + open: 8.4.2 + picomatch: 4.0.2 + source-map: 0.7.4 + yargs: 17.7.2 + optionalDependencies: + rollup: 4.32.0 + + rollup@4.32.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.30.1 - '@rollup/rollup-android-arm64': 4.30.1 - '@rollup/rollup-darwin-arm64': 4.30.1 - '@rollup/rollup-darwin-x64': 4.30.1 - '@rollup/rollup-freebsd-arm64': 4.30.1 - '@rollup/rollup-freebsd-x64': 4.30.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.30.1 - '@rollup/rollup-linux-arm-musleabihf': 4.30.1 - '@rollup/rollup-linux-arm64-gnu': 4.30.1 - '@rollup/rollup-linux-arm64-musl': 4.30.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.30.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.30.1 - '@rollup/rollup-linux-riscv64-gnu': 4.30.1 - '@rollup/rollup-linux-s390x-gnu': 4.30.1 - '@rollup/rollup-linux-x64-gnu': 4.30.1 - '@rollup/rollup-linux-x64-musl': 4.30.1 - '@rollup/rollup-win32-arm64-msvc': 4.30.1 - '@rollup/rollup-win32-ia32-msvc': 4.30.1 - '@rollup/rollup-win32-x64-msvc': 4.30.1 + '@rollup/rollup-android-arm-eabi': 4.32.0 + '@rollup/rollup-android-arm64': 4.32.0 + '@rollup/rollup-darwin-arm64': 4.32.0 + '@rollup/rollup-darwin-x64': 4.32.0 + '@rollup/rollup-freebsd-arm64': 4.32.0 + '@rollup/rollup-freebsd-x64': 4.32.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.32.0 + '@rollup/rollup-linux-arm-musleabihf': 4.32.0 + '@rollup/rollup-linux-arm64-gnu': 4.32.0 + '@rollup/rollup-linux-arm64-musl': 4.32.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.32.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.32.0 + '@rollup/rollup-linux-riscv64-gnu': 4.32.0 + '@rollup/rollup-linux-s390x-gnu': 4.32.0 + '@rollup/rollup-linux-x64-gnu': 4.32.0 + '@rollup/rollup-linux-x64-musl': 4.32.0 + '@rollup/rollup-win32-arm64-msvc': 4.32.0 + '@rollup/rollup-win32-ia32-msvc': 4.32.0 + '@rollup/rollup-win32-x64-msvc': 4.32.0 fsevents: 2.3.3 rrweb-cssom@0.8.0: {} @@ -16404,44 +17051,14 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 + scheduler@0.25.0: {} + + semver@5.7.2: {} semver@6.3.1: {} semver@7.6.3: {} - send@0.19.0: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - serve-static@1.16.2: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.19.0 - transitivePeerDependencies: - - supports-color - - set-cookie-parser@2.7.1: - optional: true - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -16462,9 +17079,7 @@ snapshots: dependencies: dunder-proto: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.1 - - setprototypeof@1.2.0: {} + es-object-atoms: 1.1.1 sharp@0.33.5: dependencies: @@ -16491,7 +17106,6 @@ snapshots: '@img/sharp-wasm32': 0.33.5 '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 - optional: true shebang-command@2.0.0: dependencies: @@ -16536,7 +17150,12 @@ snapshots: simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 - optional: true + + sirv@2.0.4: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 sirv@3.0.0: dependencies: @@ -16548,32 +17167,49 @@ snapshots: slash@3.0.0: {} + smart-buffer@4.2.0: {} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.8.1 - source-map-js@1.2.1: {} + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color - source-map-support@0.5.13: + socks@2.8.3: dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 + ip-address: 9.0.5 + smart-buffer: 4.2.0 - source-map-support@0.5.21: + source-map-js@1.2.1: {} + + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - optional: true source-map@0.5.7: {} source-map@0.6.1: {} - split-on-first@3.0.0: {} + source-map@0.7.4: {} + + speedline-core@1.4.3: + dependencies: + '@types/node': 20.13.0 + image-ssim: 0.2.0 + jpeg-js: 0.4.4 sprintf-js@1.0.3: {} + sprintf-js@1.1.3: {} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -16586,6 +17222,13 @@ snapshots: streamsearch@1.1.0: {} + streamx@2.22.0: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + strict-event-emitter@0.5.1: {} string-length@4.0.2: @@ -16612,7 +17255,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 get-intrinsic: 1.2.7 gopd: 1.2.0 has-symbols: 1.1.0 @@ -16633,7 +17276,7 @@ snapshots: define-data-property: 1.1.4 define-properties: 1.2.1 es-abstract: 1.23.9 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 string.prototype.trimend@1.0.9: @@ -16641,13 +17284,13 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.3 define-properties: 1.2.1 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.1 + es-object-atoms: 1.1.1 string_decoder@1.3.0: dependencies: @@ -16673,12 +17316,12 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.26.0)(babel-plugin-macros@3.1.0)(react@18.3.1): + styled-jsx@5.1.6(@babel/core@7.26.7)(babel-plugin-macros@3.1.0)(react@19.0.0): dependencies: client-only: 0.0.1 - react: 18.3.1 + react: 19.0.0 optionalDependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 babel-plugin-macros: 3.1.0 stylis@4.2.0: {} @@ -16726,10 +17369,6 @@ snapshots: tailwind-merge@2.6.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.17): - dependencies: - tailwindcss: 3.4.17 - tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 @@ -16746,17 +17385,27 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.0 - postcss-import: 15.1.0(postcss@8.5.0) - postcss-js: 4.0.1(postcss@8.5.0) - postcss-load-config: 4.0.2(postcss@8.5.0) - postcss-nested: 6.2.0(postcss@8.5.0) + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1) + postcss-nested: 6.2.0(postcss@8.5.1) postcss-selector-parser: 6.1.2 resolve: 1.22.10 sucrase: 3.35.0 transitivePeerDependencies: - ts-node + tar-fs@3.0.8: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.0.1 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer + tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -16765,13 +17414,11 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - terser@5.37.0: + tar-stream@3.1.7: dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.14.0 - commander: 2.20.3 - source-map-support: 0.5.21 - optional: true + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.0 test-exclude@6.0.0: dependencies: @@ -16785,6 +17432,10 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + text-table@0.2.0: {} thenify-all@1.6.0: @@ -16795,13 +17446,19 @@ snapshots: dependencies: any-promise: 1.3.0 + third-party-web@0.26.2: {} + + through@2.3.8: {} + + timestring@6.0.0: {} + tinybench@2.9.0: {} tinyexec@0.3.2: {} tinyglobby@0.2.10: dependencies: - fdir: 6.4.2(picomatch@4.0.2) + fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 tinypool@1.0.2: {} @@ -16810,11 +17467,17 @@ snapshots: tinyspy@3.0.2: {} - tldts-core@6.1.71: {} + tldts-core@6.1.75: {} - tldts@6.1.71: + tldts-core@6.1.76: {} + + tldts-icann@6.1.76: + dependencies: + tldts-core: 6.1.76 + + tldts@6.1.75: dependencies: - tldts-core: 6.1.71 + tldts-core: 6.1.75 tmp@0.2.3: {} @@ -16826,8 +17489,6 @@ snapshots: dependencies: is-number: 7.0.0 - toidentifier@1.0.1: {} - totalist@3.0.1: {} tough-cookie@4.1.4: @@ -16839,7 +17500,7 @@ snapshots: tough-cookie@5.1.0: dependencies: - tldts: 6.1.71 + tldts: 6.1.75 tr46@3.0.0: dependencies: @@ -16849,13 +17510,13 @@ snapshots: dependencies: punycode: 2.3.1 - ts-api-utils@1.4.3(typescript@5.4.5): + ts-api-utils@1.4.3(typescript@5.7.3): dependencies: - typescript: 5.4.5 + typescript: 5.7.3 ts-interface-checker@0.1.13: {} - ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.13.0)(babel-plugin-macros@3.1.0))(typescript@5.4.5): + ts-jest@29.2.5(@babel/core@7.26.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.7))(jest@29.7.0(@types/node@20.13.0)(babel-plugin-macros@3.1.0))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -16866,13 +17527,13 @@ snapshots: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.4.5 + typescript: 5.7.3 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.7 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.0) + babel-jest: 29.7.0(@babel/core@7.26.7) tsconfig-paths@4.2.0: dependencies: @@ -16882,9 +17543,6 @@ snapshots: tslib@2.8.1: {} - turbo-stream@2.4.0: - optional: true - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -16895,12 +17553,7 @@ snapshots: type-fest@0.21.3: {} - type-fest@4.32.0: {} - - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 + type-fest@4.33.0: {} typed-array-buffer@1.0.3: dependencies: @@ -16911,7 +17564,7 @@ snapshots: typed-array-byte-length@1.0.3: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.4 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 @@ -16920,7 +17573,7 @@ snapshots: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.4 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 @@ -16929,13 +17582,19 @@ snapshots: typed-array-length@1.0.7: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.4 gopd: 1.2.0 is-typed-array: 1.1.15 possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.10 - typescript@5.4.5: {} + typed-query-selector@2.12.0: {} + + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + + typescript@5.7.3: {} unbox-primitive@1.1.0: dependencies: @@ -16944,6 +17603,11 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + undici-types@5.26.5: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -16957,9 +17621,11 @@ snapshots: unicode-property-aliases-ecmascript@2.1.0: {} - universalify@0.2.0: {} + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 - unpipe@1.0.0: {} + universalify@0.2.0: {} update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: @@ -16978,29 +17644,26 @@ snapshots: url-pattern@1.0.3: {} - use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@19.0.8)(react@19.0.0): dependencies: - react: 18.3.1 + react: 19.0.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 19.0.8 - use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): + use-sidecar@1.1.3(@types/react@19.0.8)(react@19.0.0): dependencies: detect-node-es: 1.1.0 - react: 18.3.1 + react: 19.0.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 - - use-sync-external-store@1.4.0(react@18.3.1): - dependencies: - react: 18.3.1 - optional: true + '@types/react': 19.0.8 util-deprecate@1.0.2: {} - utils-merge@1.0.1: {} + uuid-parse@1.1.0: {} + + uuid@8.3.2: {} v8-to-istanbul@9.3.0: dependencies: @@ -17008,24 +17671,24 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - vary@1.1.2: {} - - vaul@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + vaul@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@radix-ui/react-dialog': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@radix-ui/react-dialog': 1.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - vite-node@2.1.8(@types/node@20.13.0)(terser@5.37.0): + vite-bundle-analyzer@0.16.1: {} + + vite-node@2.1.8(@types/node@20.13.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 1.1.2 - vite: 5.4.11(@types/node@20.13.0)(terser@5.37.0) + vite: 5.4.14(@types/node@20.13.0) transitivePeerDependencies: - '@types/node' - less @@ -17037,43 +17700,47 @@ snapshots: - supports-color - terser - vite-plugin-svgr@4.3.0(rollup@4.30.1)(typescript@5.4.5)(vite@6.0.7(@types/node@20.13.0)(jiti@1.21.7)(terser@5.37.0)(yaml@2.7.0)): + vite-plugin-image-optimizer@1.1.8(vite@6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0)): dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.30.1) - '@svgr/core': 8.1.0(typescript@5.4.5) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5)) - vite: 6.0.7(@types/node@20.13.0)(jiti@1.21.7)(terser@5.37.0)(yaml@2.7.0) + ansi-colors: 4.1.3 + pathe: 1.1.2 + vite: 6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0) + + vite-plugin-svgr@4.3.0(rollup@4.32.0)(typescript@5.7.3)(vite@6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0)): + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.32.0) + '@svgr/core': 8.1.0(typescript@5.7.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.7.3)) + vite: 6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - rollup - supports-color - typescript - vite@5.4.11(@types/node@20.13.0)(terser@5.37.0): + vite@5.4.14(@types/node@20.13.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.0 - rollup: 4.30.1 + postcss: 8.5.1 + rollup: 4.32.0 optionalDependencies: '@types/node': 20.13.0 fsevents: 2.3.3 - terser: 5.37.0 - vite@6.0.7(@types/node@20.13.0)(jiti@1.21.7)(terser@5.37.0)(yaml@2.7.0): + vite@6.0.11(@types/node@20.13.0)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.24.2 - postcss: 8.5.0 - rollup: 4.30.1 + postcss: 8.5.1 + rollup: 4.32.0 optionalDependencies: '@types/node': 20.13.0 fsevents: 2.3.3 jiti: 1.21.7 - terser: 5.37.0 yaml: 2.7.0 - vitest@2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(happy-dom@12.10.3)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5))(terser@5.37.0): + vitest@2.1.8(@types/node@20.13.0)(@vitest/ui@2.1.8)(jsdom@26.0.0)(msw@2.7.0(@types/node@20.13.0)(typescript@5.7.3)): dependencies: '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@20.13.0)(typescript@5.4.5))(vite@5.4.11(@types/node@20.13.0)(terser@5.37.0)) + '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@20.13.0)(typescript@5.7.3))(vite@5.4.14(@types/node@20.13.0)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.8 '@vitest/snapshot': 2.1.8 @@ -17089,13 +17756,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@20.13.0)(terser@5.37.0) - vite-node: 2.1.8(@types/node@20.13.0)(terser@5.37.0) + vite: 5.4.14(@types/node@20.13.0) + vite-node: 2.1.8(@types/node@20.13.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.13.0 '@vitest/ui': 2.1.8(vitest@2.1.8) - happy-dom: 12.10.3 jsdom: 26.0.0 transitivePeerDependencies: - less @@ -17126,6 +17792,25 @@ snapshots: webidl-conversions@7.0.0: {} + webpack-bundle-analyzer@4.10.1: + dependencies: + '@discoveryjs/json-ext': 0.5.7 + acorn: 8.14.0 + acorn-walk: 8.3.4 + commander: 7.2.0 + debounce: 1.2.1 + escape-string-regexp: 4.0.0 + gzip-size: 6.0.0 + html-escaper: 2.0.2 + is-plain-object: 5.0.0 + opener: 1.5.2 + picocolors: 1.1.1 + sirv: 2.0.4 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 @@ -17161,7 +17846,7 @@ snapshots: call-bound: 1.0.3 function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 - is-async-function: 2.1.0 + is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 is-generator-function: 1.1.0 @@ -17184,7 +17869,7 @@ snapshots: available-typed-arrays: 1.0.7 call-bind: 1.0.8 call-bound: 1.0.3 - for-each: 0.3.3 + for-each: 0.3.4 gopd: 1.2.0 has-tostringtag: 1.0.2 @@ -17219,13 +17904,24 @@ snapshots: wrappy@1.0.2: {} + write-file-atomic@3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 + ws@7.5.10: {} + ws@8.18.0: {} + xdg-basedir@4.0.0: {} + xml-name-validator@4.0.0: {} xml-name-validator@5.0.0: {} @@ -17252,7 +17948,12 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yjs@13.6.22: + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yjs@13.6.23: dependencies: lib0: 0.2.99 @@ -17260,11 +17961,11 @@ snapshots: yoctocolors-cjs@2.1.2: {} + zod@3.23.8: {} + zod@3.24.1: {} - zustand@5.0.3(@types/react@18.3.18)(immer@9.0.21)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + zustand@5.0.3(@types/react@19.0.8)(react@19.0.0): optionalDependencies: - '@types/react': 18.3.18 - immer: 9.0.21 - react: 18.3.1 - use-sync-external-store: 1.4.0(react@18.3.1) + '@types/react': 19.0.8 + react: 19.0.0 diff --git a/services/ahhachul.com/.gitignore b/services/ahhachul.com/.gitignore index b88c8135a..df0781a1b 100644 --- a/services/ahhachul.com/.gitignore +++ b/services/ahhachul.com/.gitignore @@ -23,6 +23,6 @@ dist-ssr *.sln *.sw? /test-results/ -/playwright-report/ +e2e/playwright-report/ /blob-report/ /playwright/.cache/ diff --git a/services/ahhachul.com/index.html b/services/ahhachul.com/index.html index e25318e76..49d836277 100644 --- a/services/ahhachul.com/index.html +++ b/services/ahhachul.com/index.html @@ -3,6 +3,7 @@ + { const endpoint = diff --git a/services/ahhachul.com/src/apis/request/lostFound.ts b/services/ahhachul.com/src/apis/request/lostFound.ts index d18853f2b..132d4e391 100644 --- a/services/ahhachul.com/src/apis/request/lostFound.ts +++ b/services/ahhachul.com/src/apis/request/lostFound.ts @@ -1,3 +1,5 @@ +import { appendFilesToFormData, createJsonBlob, extractFormData } from '@ahhachul/utils'; + import axiosInstance from '@/apis/fetcher'; import type { ApiResponse, @@ -10,7 +12,6 @@ import type { WithPostId, LostFoundEditForm, } from '@/types'; -import { appendFilesToFormData, createJsonBlob, extractFormData } from '@/utils'; export const fetchLostFoundList = async (req: LostFoundListParams) => { const { data } = await axiosInstance.get>>( diff --git a/services/ahhachul.com/src/components/common/appErrorBoundary/ErrorBoundary.component.tsx b/services/ahhachul.com/src/components/common/appErrorBoundary/ErrorBoundary.component.tsx index 1cba636ba..8753342c2 100644 --- a/services/ahhachul.com/src/components/common/appErrorBoundary/ErrorBoundary.component.tsx +++ b/services/ahhachul.com/src/components/common/appErrorBoundary/ErrorBoundary.component.tsx @@ -2,7 +2,7 @@ import React from 'react'; import type { AxiosError } from 'axios'; -import { isChangedArray } from '@/utils'; +import { isChangedArray } from '@ahhachul/utils'; type ErrorFallbackProps = { error: AxiosError; diff --git a/services/ahhachul.com/src/components/common/gnb/Gnb.styled.ts b/services/ahhachul.com/src/components/common/gnb/Gnb.styled.ts index a83b16e60..3da46efbe 100644 --- a/services/ahhachul.com/src/components/common/gnb/Gnb.styled.ts +++ b/services/ahhachul.com/src/components/common/gnb/Gnb.styled.ts @@ -9,7 +9,6 @@ export const Navbar = styled.nav` display: grid; grid-template-columns: repeat(5, 1fr); width: 100%; - height: 60px; background: ${({ theme }) => theme.colors.white}; border-top: 1px solid ${({ theme }) => theme.colors.gray[20]}; z-index: ${({ theme }) => theme.zIndex.navbar}; diff --git a/services/ahhachul.com/src/components/common/gnb/navItem/NavItem.styled.ts b/services/ahhachul.com/src/components/common/gnb/navItem/NavItem.styled.ts index 52f1b6f32..74545559e 100644 --- a/services/ahhachul.com/src/components/common/gnb/navItem/NavItem.styled.ts +++ b/services/ahhachul.com/src/components/common/gnb/navItem/NavItem.styled.ts @@ -15,7 +15,7 @@ export const NavItemButton = styled.button` align-items: center; justify-content: center; gap: 2px; - height: 100%; + height: 60px; padding: 2px; text-align: center; text-decoration: none; diff --git a/services/ahhachul.com/src/components/common/iosBottomPadding/IOSBottomPadding.component.tsx b/services/ahhachul.com/src/components/common/iosBottomPadding/IOSBottomPadding.component.tsx index faf226253..97ff01c4a 100644 --- a/services/ahhachul.com/src/components/common/iosBottomPadding/IOSBottomPadding.component.tsx +++ b/services/ahhachul.com/src/components/common/iosBottomPadding/IOSBottomPadding.component.tsx @@ -1,9 +1,9 @@ -import { isIOS } from '@/constants'; +import { isWebView } from '@/constants'; import * as S from './IOSBottomPadding.styled'; export const IOSBottomPadding = () => { - if (!isIOS()) return null; + if (!isWebView()) return null; return ; }; diff --git a/services/ahhachul.com/src/components/domain/community/searchResults/skeleton/SearchedList.skeleton.styled.tsx b/services/ahhachul.com/src/components/domain/community/searchResults/skeleton/SearchedList.skeleton.styled.tsx index 61a495ed9..6f557d4cb 100644 --- a/services/ahhachul.com/src/components/domain/community/searchResults/skeleton/SearchedList.skeleton.styled.tsx +++ b/services/ahhachul.com/src/components/domain/community/searchResults/skeleton/SearchedList.skeleton.styled.tsx @@ -27,7 +27,7 @@ export const SectionWrapper = styled.section` `; export const ArticleItem = styled.article<{ delay: number }>` - padding: 24px 20px; + padding: 20px; opacity: 0; animation: fadeIn 0.5s ease-in-out forwards; border-bottom: 1px solid ${({ theme }) => theme.colors.gray[20]}; diff --git a/services/ahhachul.com/src/components/domain/home/panel/welcomeMessage/WelcomeMessage.component.tsx b/services/ahhachul.com/src/components/domain/home/panel/welcomeMessage/WelcomeMessage.component.tsx index 751f9333d..33879bc09 100644 --- a/services/ahhachul.com/src/components/domain/home/panel/welcomeMessage/WelcomeMessage.component.tsx +++ b/services/ahhachul.com/src/components/domain/home/panel/welcomeMessage/WelcomeMessage.component.tsx @@ -1,30 +1,23 @@ -import { useState, useEffect } from 'react'; - import { useAuth } from '@/contexts'; import { useFetchUserProfile } from '@/services/user'; import * as S from './WelcomeMessage.styled'; import { getRandomGreeting } from './WelcomeMessage.util'; +const greetingPhrase = getRandomGreeting(); + const WelcomeMessage = () => { const { isCheckingAuthState } = useAuth(); const { data: userInfo, isLoading } = useFetchUserProfile(); - const [greeting, setGreeting] = useState(''); - const displayName = userInfo?.result?.nickname || '์•„ํ•˜์ฒ '; - useEffect(() => { - // ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ๋žœ๋ค ๋ฌธ๊ตฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. - setGreeting(getRandomGreeting()); - }, []); - - if (!greeting || isLoading || isCheckingAuthState) return null; + if (isLoading || isCheckingAuthState) return null; return ( {displayName}๋‹˜, - {greeting} + {greetingPhrase} ); }; diff --git a/services/ahhachul.com/src/components/domain/lostFound/postDetail/lost112InfoTable/Lost112InfoTable.styled.tsx b/services/ahhachul.com/src/components/domain/lostFound/postDetail/lost112InfoTable/Lost112InfoTable.styled.tsx index 3e61622fa..d608216cd 100644 --- a/services/ahhachul.com/src/components/domain/lostFound/postDetail/lost112InfoTable/Lost112InfoTable.styled.tsx +++ b/services/ahhachul.com/src/components/domain/lostFound/postDetail/lost112InfoTable/Lost112InfoTable.styled.tsx @@ -44,20 +44,19 @@ export const Value = styled.div` `} `; -export const StyledLink = styled.button` - ${({ theme }) => css` - ${theme.fonts.labelMedium}; - color: #1d4ed8; - `} +export const StyledLink = styled(Value)` + color: #1d4ed8; `; export const StatusWrapper = styled.div` - margin-top: 24px; + margin-top: 12px; + padding-top: 12px; display: flex; align-items: center; gap: 8px; justify-content: center; color: ${({ theme }) => theme.colors.green[600]}; + border-top: ${({ theme }) => `1px solid ${theme.colors.gray[20]}`}; `; export const StatusDot = styled.div` diff --git a/services/ahhachul.com/src/components/domain/lostFound/postDetail/template/LostFoundDetail.component.tsx b/services/ahhachul.com/src/components/domain/lostFound/postDetail/template/LostFoundDetail.component.tsx index dd90947ff..aee3ce8b1 100644 --- a/services/ahhachul.com/src/components/domain/lostFound/postDetail/template/LostFoundDetail.component.tsx +++ b/services/ahhachul.com/src/components/domain/lostFound/postDetail/template/LostFoundDetail.component.tsx @@ -18,6 +18,8 @@ interface LostFoundDetailProps { const LostFoundDetail = ({ id }: LostFoundDetailProps) => { const { data: post } = useFetchLostFoundDetail(id); + console.log('post', post); + const images = post.isFromLost112 ? [ { diff --git a/services/ahhachul.com/src/components/domain/lostFound/searchResults/skeleton/SearchedList.skeleton.styled.tsx b/services/ahhachul.com/src/components/domain/lostFound/searchResults/skeleton/SearchedList.skeleton.styled.tsx index 61a495ed9..6f557d4cb 100644 --- a/services/ahhachul.com/src/components/domain/lostFound/searchResults/skeleton/SearchedList.skeleton.styled.tsx +++ b/services/ahhachul.com/src/components/domain/lostFound/searchResults/skeleton/SearchedList.skeleton.styled.tsx @@ -27,7 +27,7 @@ export const SectionWrapper = styled.section` `; export const ArticleItem = styled.article<{ delay: number }>` - padding: 24px 20px; + padding: 20px; opacity: 0; animation: fadeIn 0.5s ease-in-out forwards; border-bottom: 1px solid ${({ theme }) => theme.colors.gray[20]}; diff --git a/services/ahhachul.com/src/hooks/useDisableScrolll.test.ts b/services/ahhachul.com/src/hooks/useDisableScrolll.test.ts index d2bb3c239..d615ddf2b 100644 --- a/services/ahhachul.com/src/hooks/useDisableScrolll.test.ts +++ b/services/ahhachul.com/src/hooks/useDisableScrolll.test.ts @@ -1,4 +1,4 @@ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { describe, expect, test, beforeEach } from 'vitest'; import useDisableScroll from './useDisableScroll'; @@ -17,12 +17,12 @@ describe('useDisableScroll', () => { }); test('๋งˆ์šดํŠธ๋˜๋ฉด overflow-y๊ฐ€ hidden์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค', () => { - renderHook(useDisableScroll); + renderHook(() => useDisableScroll()); expect(document.body.style.overflowY).toBe('hidden'); }); test('์–ธ๋งˆ์šดํŠธ๋˜๋ฉด overflow-y๊ฐ€ scroll๋กœ ์ดˆ๊ธฐํ™”๋˜์–ด์•ผ ํ•œ๋‹ค', () => { - const { unmount } = renderHook(useDisableScroll); + const { unmount } = renderHook(() => useDisableScroll()); expect(document.body.style.overflowY).toBe('hidden'); unmount(); diff --git a/services/ahhachul.com/src/main.tsx b/services/ahhachul.com/src/main.tsx index f12e6409a..cc86b4135 100644 --- a/services/ahhachul.com/src/main.tsx +++ b/services/ahhachul.com/src/main.tsx @@ -2,10 +2,9 @@ import { Suspense } from 'react'; import { createRoot } from 'react-dom/client'; import App from './App'; -import { UiComponent } from './components'; createRoot(document.getElementById('root')!).render( - }> + , ); diff --git a/services/ahhachul.com/src/mocks/handlers/example.ts b/services/ahhachul.com/src/mocks/handlers/example.ts index 0bbeab20e..469bdd9c2 100644 --- a/services/ahhachul.com/src/mocks/handlers/example.ts +++ b/services/ahhachul.com/src/mocks/handlers/example.ts @@ -6,7 +6,7 @@ export const handlers = [ http.get('https://example.com/user', () => { // ...and respond to them using this JSON response. return HttpResponse.json({ - id: 'c7b3d8e0-5e0b-4b0f-8b3a-3b9f4b3d3b3d', + id: 'c7b3d8e0-5e0b-4b0f-8b3a-qwer1234xx', firstName: 'John', lastName: 'Maverick', }); diff --git a/services/ahhachul.com/src/pages/comment/[commentId]/edit.tsx b/services/ahhachul.com/src/pages/comment/[commentId]/edit.tsx index f24bdd66f..a265d9980 100644 --- a/services/ahhachul.com/src/pages/comment/[commentId]/edit.tsx +++ b/services/ahhachul.com/src/pages/comment/[commentId]/edit.tsx @@ -1,5 +1,5 @@ const EditCommentPage = () => { - return
edit
; + return
Hi
; }; export default EditCommentPage; diff --git a/services/ahhachul.com/src/pages/comment/[commentId]/reply.tsx b/services/ahhachul.com/src/pages/comment/[commentId]/reply.tsx index 04bf7a211..9bd7b04a2 100644 --- a/services/ahhachul.com/src/pages/comment/[commentId]/reply.tsx +++ b/services/ahhachul.com/src/pages/comment/[commentId]/reply.tsx @@ -1,5 +1,5 @@ const NewCommentReplyPage = () => { - return
edit
; + return
Hi
; }; export default NewCommentReplyPage; diff --git a/services/ahhachul.com/src/services/community.ts b/services/ahhachul.com/src/services/community.ts index e08260022..9ee5e3931 100644 --- a/services/ahhachul.com/src/services/community.ts +++ b/services/ahhachul.com/src/services/community.ts @@ -5,6 +5,8 @@ import { useSuspenseQuery, } from '@tanstack/react-query'; +import { removeFalsyValues } from '@ahhachul/utils'; + import * as api from '@/apis/request'; import { TIMESTAMP } from '@/constants'; import { useFlow } from '@/stackflow'; @@ -15,7 +17,7 @@ import { type CommunityListParams, type SubwayLineFilterOptions, } from '@/types'; -import * as formatter from '@/utils/format'; +import { formatSubwayFilterOption } from '@/utils'; export const communityKeys = { all: ['community'] as const, @@ -30,12 +32,12 @@ export const communityKeys = { export const useFetchCommunityList = (filters: CommunityListParams) => { const favoriteLine = 2; - const req = formatter.deleteObjectKeyWithEmptyValue( + const req = removeFalsyValues( { categoryType: filters.categoryType, content: filters.content, writer: filters.writer, - subwayLineId: formatter.formatSubwayFilterOption(filters.subwayLineId, favoriteLine), + subwayLineId: formatSubwayFilterOption(filters.subwayLineId, favoriteLine), }, { removeZero: true, removeEmptyStrings: true }, ) as CommunityListParams; diff --git a/services/ahhachul.com/src/services/lostFound.ts b/services/ahhachul.com/src/services/lostFound.ts index c8fcab00a..bb0a04640 100644 --- a/services/ahhachul.com/src/services/lostFound.ts +++ b/services/ahhachul.com/src/services/lostFound.ts @@ -5,6 +5,8 @@ import { useSuspenseQuery, } from '@tanstack/react-query'; +import { removeFalsyValues } from '@ahhachul/utils'; + import * as api from '@/apis/request'; import { TIMESTAMP } from '@/constants'; import { useFlow } from '@/stackflow'; @@ -15,7 +17,7 @@ import { type LostFoundListParams, type SubwayLineFilterOptions, } from '@/types'; -import * as formatter from '@/utils/format'; +import { formatSubwayFilterOption } from '@/utils'; export const lostFoundKeys = { all: ['lostFound'] as const, @@ -30,11 +32,11 @@ export const lostFoundKeys = { export const useFetchLostFoundList = (filters: LostFoundListParams) => { const favoriteLine = 3; - const req = formatter.deleteObjectKeyWithEmptyValue( + const req = removeFalsyValues( { lostType: filters.lostType, keyword: filters.keyword, - subwayLineId: formatter.formatSubwayFilterOption(filters.subwayLineId, favoriteLine), + subwayLineId: formatSubwayFilterOption(filters.subwayLineId, favoriteLine), }, { removeZero: true, removeEmptyStrings: true }, ) as LostFoundListParams; diff --git a/services/ahhachul.com/src/types/share.ts b/services/ahhachul.com/src/types/share.ts index d89943a1a..6187cf434 100644 --- a/services/ahhachul.com/src/types/share.ts +++ b/services/ahhachul.com/src/types/share.ts @@ -2,7 +2,7 @@ import { WEB_SERVICE_URL } from '@/constants'; export type ShareablePageMap = { CommunityDetailPage: 'community'; - LostFoundDetailPage: 'lostFound'; + LostFoundDetailPage: 'lost-found'; ComplaintDetailPage: 'complaint'; }; diff --git a/services/ahhachul.com/src/utils/common.ts b/services/ahhachul.com/src/utils/common.ts index 4aca41232..230c579c7 100644 --- a/services/ahhachul.com/src/utils/common.ts +++ b/services/ahhachul.com/src/utils/common.ts @@ -1,10 +1,3 @@ -export const isChangedArray = (a: unknown[] = [], b: unknown[] = []) => - a.length !== b.length || a.some((item, index) => !Object.is(item, b[index])); - -export const isValidObject = (obj: unknown): obj is Record => { - return typeof obj === 'object' && obj !== null && !Array.isArray(obj); -}; - export const parseFileExtOfName = (fileName: string): string => fileName.split('.').at(-1) ?? ''; export const downloadFile = (url: string) => { diff --git a/services/ahhachul.com/src/utils/format.ts b/services/ahhachul.com/src/utils/format.ts index 60e040d40..30f76e5d6 100644 --- a/services/ahhachul.com/src/utils/format.ts +++ b/services/ahhachul.com/src/utils/format.ts @@ -1,7 +1,5 @@ import { SubwayLineFilterOptions } from '@/types'; -import { isValidObject } from './common'; - export const formatSubwayFilterOption = ( lineFilter: SubwayLineFilterOptions, favoriteLine: number, @@ -14,27 +12,6 @@ export const formatSubwayFilterOption = ( } }; -export const deleteObjectKeyWithEmptyValue = >( - obj: T, - options: { removeEmptyStrings?: boolean; removeZero?: boolean } = {}, -): Partial => { - if (!isValidObject(obj)) { - throw new Error('obj must be a non-null object'); - } - - return Object.entries(obj).reduce((result, [key, value]) => { - if ( - value !== undefined && - value !== null && - (options.removeZero ? value !== 0 : true) && - (options.removeEmptyStrings ? value !== '' : true) - ) { - result[key as keyof T] = value; - } - return result; - }, {} as Partial); -}; - export const formatLost112Content = (content: string) => { const formattedText = content .replace(/ํ•˜์˜€์Šต๋‹ˆ๋‹ค. /g, 'ํ•˜์˜€์Šต๋‹ˆ๋‹ค.\n\n') diff --git a/services/ahhachul.com/src/utils/index.ts b/services/ahhachul.com/src/utils/index.ts index c53973888..4b23bfa24 100644 --- a/services/ahhachul.com/src/utils/index.ts +++ b/services/ahhachul.com/src/utils/index.ts @@ -1,4 +1,3 @@ -export * from './form'; export * from './common'; export * from './format'; export * from './pagination'; diff --git a/services/ahhachul.com/src/utils/share.ts b/services/ahhachul.com/src/utils/share.ts index 8ae571be6..260cf6f9d 100644 --- a/services/ahhachul.com/src/utils/share.ts +++ b/services/ahhachul.com/src/utils/share.ts @@ -8,7 +8,7 @@ export const getSharePageURL = { const urlMap: ShareableURLMap = { CommunityDetailPage: `${WEB_SERVICE_URL}/community`, - LostFoundDetailPage: `${WEB_SERVICE_URL}/lostFound`, + LostFoundDetailPage: `${WEB_SERVICE_URL}/lost-found`, ComplaintDetailPage: `${WEB_SERVICE_URL}/complaint`, } as const; diff --git a/services/ahhachul.com/vite.config.ts b/services/ahhachul.com/vite.config.ts index c1c03f985..bb5256dea 100644 --- a/services/ahhachul.com/vite.config.ts +++ b/services/ahhachul.com/vite.config.ts @@ -1,11 +1,68 @@ import react from '@vitejs/plugin-react-swc'; import * as path from 'node:path'; +import { visualizer } from 'rollup-plugin-visualizer'; import { defineConfig } from 'vite'; +import { ViteImageOptimizer } from 'vite-plugin-image-optimizer'; import svgr from 'vite-plugin-svgr'; -// https://vitejs.dev/config/ export default defineConfig({ - plugins: [react({ jsxImportSource: '@emotion/react' }), svgr()], + plugins: [ + react({ jsxImportSource: '@emotion/react' }), + visualizer({ + filename: 'stats.html', + gzipSize: true, + brotliSize: true, + }), + svgr({ + svgrOptions: { + plugins: ['@svgr/plugin-svgo', '@svgr/plugin-jsx'], + svgoConfig: { + multipass: true, + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + cleanupNumericValues: false, + removeViewBox: false, + removeUselessStrokeAndFill: false, + cleanupIds: false, + convertPathData: false, + }, + }, + }, + 'sortAttrs', + 'removeXMLProcInst', + 'removeXMLNS', + 'removeDimensions', + 'minifyStyles', + 'removeComments', + 'removeHiddenElems', + 'removeEmptyAttrs', + 'removeEmptyText', + 'removeEmptyContainers', + 'collapseGroups', + 'removeMetadata', + { + name: 'convertPathData', + params: { + floatPrecision: 2, + }, + }, + { + name: 'addAttributesToSVGElement', + params: { + attributes: [{ xmlns: 'http://www.w3.org/2000/svg' }], + }, + }, + ], + }, + }, + }), + ViteImageOptimizer({ + test: /\.(jpe?g|png|gif|webp)$/i, + }), + ], server: { port: 3000, }, diff --git a/services/one-app/custom.d.ts b/services/one-app/custom.d.ts deleted file mode 100644 index 6ecb272bc..000000000 --- a/services/one-app/custom.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.svg' { - import React from 'react'; - const svg: React.FC>; - export default svg; -} diff --git a/services/one-app/next.config.mjs b/services/one-app/next.config.mjs deleted file mode 100644 index da8298a45..000000000 --- a/services/one-app/next.config.mjs +++ /dev/null @@ -1,23 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - reactStrictMode: true, - webpack(config, options) { - // SVG ํŒŒ์ผ์„ @svgr/webpack์œผ๋กœ ์ฒ˜๋ฆฌ - config.module.rules.push({ - test: /\.svg$/, - use: [ - { - loader: '@svgr/webpack', - options: { - svgo: true, - typescript: true, - }, - }, - ], - }); - - return config; - }, -}; - -export default nextConfig; diff --git a/services/one-app/next.config.ts b/services/one-app/next.config.ts new file mode 100644 index 000000000..2e6b21df6 --- /dev/null +++ b/services/one-app/next.config.ts @@ -0,0 +1,44 @@ +const withBundleAnalyzer = require('@next/bundle-analyzer')({ + enabled: process.env.ANALYZE === 'true', +}); + +/** @type {import('next').NextConfig} */ +const nextConfig = { + experimental: { + serverActions: { + bodySizeLimit: '10mb', + }, + turbo: { + rules: { + '*.svg': { + loaders: ['@svgr/webpack'], + as: '*.js', + }, + }, + }, + }, + images: { + loader: 'default', + formats: ['image/avif', 'image/webp'], + imageSizes: [16, 32, 48, 64, 96, 128, 256, 384], + deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], + }, + webpack(config: any) { + config.module.rules.push({ + test: /\.svg$/, + use: [ + { + loader: '@svgr/webpack', + options: { + svgo: true, + typescript: true, + }, + }, + ], + }); + + return config; + }, +}; + +module.exports = withBundleAnalyzer(nextConfig); diff --git a/services/one-app/package.json b/services/one-app/package.json index 60f08110c..275a700ee 100644 --- a/services/one-app/package.json +++ b/services/one-app/package.json @@ -1,13 +1,12 @@ { "name": "@ahhachul/one-app", - "version": "0.1.0", + "version": "0.0.1", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbopack", "build": "next build", "start": "next start", - "dev:mocking": "NEXT_PUBLIC_API_MOCKING=enabled next dev", - "server:mocking": "npx tsx watch ./src/mocks/http.ts", + "type-check": "tsc --noEmit", "lint:es": "eslint src", "lint:es:fix": "eslint src --fix", "lint:etc": "prettier src --check", @@ -16,7 +15,11 @@ "lint:fix": "pnpm lint:es:fix && pnpm lint:etc:fix", "test": "jest", "test:watch": "jest --watch", - "test:coverage": "jest --coverage" + "test:coverage": "jest --coverage", + "analyze": "ANALYZE=true next build", + "test:perf": "node scripts/performance-test.mjs", + "test:perf:load": "autocannon http://localhost:3000", + "test:perf:lighthouse": "lighthouse http://localhost:3000 --view" }, "dependencies": { "@lexical/react": "^0.21.0", @@ -24,58 +27,56 @@ "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-dropdown-menu": "^2.1.2", "@radix-ui/react-slot": "^1.1.1", - "@tanstack/react-query": "^5.59.16", - "axios": "^1.7.7", + "@tanstack/react-query": "^5.62.8", "date-fns": "^4.1.0", "embla-carousel-react": "^8.5.1", "js-cookie": "^3.0.5", "lexical": "^0.21.0", "lucide-react": "^0.460.0", - "next": "15.1.4", - "nuqs": "^2.2.2", - "query-string": "^9.1.1", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-intersection-observer": "^9.13.1", + "next": "15.1.6", + "nextjs-toploader": "^3.7.15", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-hook-form": "^7.49.3", + "react-intersection-observer": "^9.15.0", "react-lazy-load-image-component": "^1.6.3", "react-loading-skeleton": "^3.5.0", + "react-swipeable": "^7.0.2", "react-zoom-pan-pinch": "3.6.0", "swiper": "^11.1.15", "vaul": "^1.1.1", "zod": "^3.23.8", - "zustand": "^5.0.0" + "zustand": "^5.0.2" }, "devDependencies": { + "@ahhachul/utils": "workspace:*", "@faker-js/faker": "^9.0.3", - "@mswjs/http-middleware": "^0.10.2", + "@next/bundle-analyzer": "^15.1.6", "@svgr/webpack": "^8.1.0", "@tanstack/react-query-devtools": "^5.59.16", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.2", "@testing-library/react": "^16.0.1", "@testing-library/user-event": "^14.5.2", - "@types/cors": "^2.8.17", - "@types/express": "^5.0.0", "@types/jest": "^29.5.14", "@types/js-cookie": "^3.0.6", - "@types/node": "20.13.0", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", "@types/react-lazy-load-image-component": "^1.6.4", + "autocannon": "^8.0.0", "autoprefixer": "^10.0.1", - "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", - "cors": "^2.8.5", - "express": "^4.21.1", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", + "lighthouse": "^12.3.0", "msw": "^2.5.2", + "puppeteer": "^24.1.1", "postcss": "^8", "tailwind-merge": "^2.5.4", "tailwindcss": "^3.3.0", - "tailwindcss-animate": "^1.0.7", "ts-jest": "^29.1.1", - "typescript": "5.4.5" + "typescript": "^5" }, "msw": { "workerDirectory": [ diff --git a/services/one-app/scripts/performance-test.mjs b/services/one-app/scripts/performance-test.mjs new file mode 100644 index 000000000..97b7944ab --- /dev/null +++ b/services/one-app/scripts/performance-test.mjs @@ -0,0 +1,31 @@ +import autocannon from 'autocannon'; +import lighthouse from 'lighthouse'; +import puppeteer from 'puppeteer'; + +async function runPerformanceTests() { + // Lighthouse ํ…Œ์ŠคํŠธ + const browser = await puppeteer.launch({ headless: true }); + const results = await lighthouse('http://localhost:3000', { + port: new URL(browser.wsEndpoint()).port, + output: 'html', + logLevel: 'info', + }); + + console.log('Lighthouse scores:', results.lhr.categories.performance.score * 100); + + // ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ + const loadTestResults = await autocannon({ + url: 'http://localhost:3000', + connections: 10, + duration: 10, + }); + + console.log('Load test results:', { + 'Avg Latency': loadTestResults.latency.average, + 'Req/Sec': loadTestResults.requests.average, + }); + + await browser.close(); +} + +runPerformanceTests().catch(console.error); diff --git a/services/one-app/src/__test__/1__StartPage.spec.tsx b/services/one-app/src/__test__/1__StartPage.spec.tsx index 03d160313..03356868c 100644 --- a/services/one-app/src/__test__/1__StartPage.spec.tsx +++ b/services/one-app/src/__test__/1__StartPage.spec.tsx @@ -1,8 +1,17 @@ import { render, screen } from '@testing-library/react'; -import Page from '@/app/(site)/page'; +import Home from '@/app/page'; -it.skip('App Router: Works with Server Components', () => { - render(); - expect(screen.getByRole('heading', { name: /App Router/i })).toHaveTextContent('App Router'); +describe('Home Page', () => { + it('renders welcome message', () => { + render(); + expect(screen.getByRole('main')).toBeInTheDocument(); + expect(screen.getByText('์•„ํ•˜์ฒ ๋‹˜,')).toBeInTheDocument(); + }); + + it('has correct styling', () => { + render(); + const main = screen.getByRole('main'); + expect(main).toHaveClass('flex', 'min-h-screen', 'flex-col', 'text-black', 'bg-white', 'pt-4'); + }); }); diff --git a/services/one-app/src/app/(auth)/@modal/(.)i/flow/login/page.tsx b/services/one-app/src/app/(auth)/@modal/(.)i/flow/login/page.tsx new file mode 100644 index 000000000..e48bc68f8 --- /dev/null +++ b/services/one-app/src/app/(auth)/@modal/(.)i/flow/login/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
; +} diff --git a/services/one-app/src/app/(auth)/@modal/default.tsx b/services/one-app/src/app/(auth)/@modal/default.tsx new file mode 100644 index 000000000..6ddf1b76f --- /dev/null +++ b/services/one-app/src/app/(auth)/@modal/default.tsx @@ -0,0 +1,3 @@ +export default function Default() { + return null; +} diff --git a/services/one-app/src/app/(auth)/i/flow/login/page.tsx b/services/one-app/src/app/(auth)/i/flow/login/page.tsx new file mode 100644 index 000000000..e48bc68f8 --- /dev/null +++ b/services/one-app/src/app/(auth)/i/flow/login/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
; +} diff --git a/services/one-app/src/app/(site)/login/_component/HelloOnLogin.tsx b/services/one-app/src/app/(auth)/login/_component/HelloOnLogin.tsx similarity index 85% rename from services/one-app/src/app/(site)/login/_component/HelloOnLogin.tsx rename to services/one-app/src/app/(auth)/login/_component/HelloOnLogin.tsx index 128207ab1..e73e4d2e0 100644 --- a/services/one-app/src/app/(site)/login/_component/HelloOnLogin.tsx +++ b/services/one-app/src/app/(auth)/login/_component/HelloOnLogin.tsx @@ -1,4 +1,4 @@ -import { LogoIcon, LogoTextIcon } from '@/common/assets/icons'; +import { LogoIcon, LogoTextIcon } from '@/asset/icon'; export const HelloOnLogin: React.FC = () => { return ( diff --git a/services/one-app/src/app/(site)/login/_component/SocialLoginButton.tsx b/services/one-app/src/app/(auth)/login/_component/SocialLoginButton.tsx similarity index 73% rename from services/one-app/src/app/(site)/login/_component/SocialLoginButton.tsx rename to services/one-app/src/app/(auth)/login/_component/SocialLoginButton.tsx index 9eebc6463..dd6846502 100644 --- a/services/one-app/src/app/(site)/login/_component/SocialLoginButton.tsx +++ b/services/one-app/src/app/(auth)/login/_component/SocialLoginButton.tsx @@ -1,19 +1,21 @@ +'use client'; + import React from 'react'; -import type { SocialLoginOption } from '@/model'; +import type { SocialLoginOption } from '@/types'; interface SocialLoginButtonProps extends SocialLoginOption { - onLogin: () => Promise; + onLoginAction: () => Promise; } export const SocialLoginButton: React.FC = ({ social, bgColor, icon: Icon, - onLogin, + onLoginAction, }) => ( +//

ํšŒ์›๊ฐ€์ž…

+//
+//

+// ๋‹‰๋„ค์ž„์„ ์„ค์ •ํ•ด์ฃผ์„ธ์š” +//

+//
+//
+// +//
+// {isValidateOk ? : isValidateError ? : null} +//
+//
+//
+// +// {nickNameStatusMessage} +// +// {lengthIndicator} +//
+//
+// +// +// ); +// }; +// export default SetNickNamePage; + +export default function SetNickNamePage() { + return ( +
+
+
+ ); +} diff --git a/services/one-app/src/app/(main-service)/community/[id]/_components/CommunityDetail.tsx b/services/one-app/src/app/(main-service)/community/[id]/_components/CommunityDetail.tsx new file mode 100644 index 000000000..af76da8e7 --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/[id]/_components/CommunityDetail.tsx @@ -0,0 +1,79 @@ +'use client'; + +import { useQuery } from '@tanstack/react-query'; + +import { formatDateTime } from '@ahhachul/utils'; + +import { ReadonlyEditor } from '@/component/Editor'; +// import { SUBWAY_LOGO_SVG_LIST } from '@/component'; +import { TIMESTAMP } from '@/constant'; +import { cn, isLexicalContent } from '@/util'; + +import { CommunityTypeBadge } from './CommunityTypeBadge'; + +import { getCommunityDetailPost } from '../_lib/getDetailPost'; + +type Props = { + id: number; +}; + +export default function CommunityPostDetail({ id }: Props) { + const { data: post } = useQuery({ + queryKey: ['community-post', id], + queryFn: getCommunityDetailPost, + staleTime: 5 * TIMESTAMP.MINUTE, + select: res => res.result, + }); + + if (!post) return null; + + // const images = post.isFromLost112 + // ? [ + // { + // imageId: getRandomInt(), + // imageUrl: post.externalSourceImageUrl, + // }, + // ] + // : post.images; + + return ( + <> +
+ {/* */} +
+ +
+ {post.title} +
+
+
+ {post.writer || '๋กœ์ŠคํŠธ 112'} + {formatDateTime(post.createdAt!)} +
+
+ {/* {SUBWAY_LOGO_SVG_LIST[post.subwayLineId]} */} +
+
+
+ +
+ {isLexicalContent(post.content) ? ( + div>div]:p-0', '[&>div>div]:border-none')} + /> + ) : ( +

{post.content}

+ )} +
+
+ + {/* */} + {/* */} + + ); +} diff --git a/services/one-app/src/app/(main-service)/community/[id]/_components/CommunityTypeBadge.tsx b/services/one-app/src/app/(main-service)/community/[id]/_components/CommunityTypeBadge.tsx new file mode 100644 index 000000000..4dd05bfd4 --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/[id]/_components/CommunityTypeBadge.tsx @@ -0,0 +1,19 @@ +'use client'; + +import { CommunityType } from '@/types/community'; + +interface Props { + communityType: CommunityType; +} + +export const CommunityTypeBadge = ({ communityType }: Props) => { + return ( +
+ {communityType === CommunityType.FREE + ? '์ž์œ ' + : communityType === CommunityType.HUMOR + ? '์œ ๋จธ' + : '์ •๋ณด'} +
+ ); +}; diff --git a/services/one-app/src/app/(site)/lost-found/_components/postDetail/Lost112ArticleTable.tsx b/services/one-app/src/app/(main-service)/community/[id]/_components/Lost112ArticleTable.tsx similarity index 94% rename from services/one-app/src/app/(site)/lost-found/_components/postDetail/Lost112ArticleTable.tsx rename to services/one-app/src/app/(main-service)/community/[id]/_components/Lost112ArticleTable.tsx index d7f176ca8..92caeae66 100644 --- a/services/one-app/src/app/(site)/lost-found/_components/postDetail/Lost112ArticleTable.tsx +++ b/services/one-app/src/app/(main-service)/community/[id]/_components/Lost112ArticleTable.tsx @@ -1,7 +1,10 @@ +'use client'; + import Link from 'next/link'; -import { formatDate } from '@/common/utils'; -import type { LostFoundPostDetail } from '@/model'; +import { formatDateTime } from '@ahhachul/utils'; + +import type { LostFoundPostDetail } from '@/types'; interface Props { post: LostFoundPostDetail; @@ -17,7 +20,7 @@ export const Lost112ArticleTable = ({ post }: Props) => {
์Šต๋“์ผ
-
{formatDate(post.createdAt)}
+
{formatDateTime(post.createdAt)}
{post?.storage && ( <> diff --git a/services/one-app/src/app/(site)/lost-found/_components/postDetail/RecommendArticles.tsx b/services/one-app/src/app/(main-service)/community/[id]/_components/RecommendArticles.tsx similarity index 65% rename from services/one-app/src/app/(site)/lost-found/_components/postDetail/RecommendArticles.tsx rename to services/one-app/src/app/(main-service)/community/[id]/_components/RecommendArticles.tsx index 318f4505d..e017aca79 100644 --- a/services/one-app/src/app/(site)/lost-found/_components/postDetail/RecommendArticles.tsx +++ b/services/one-app/src/app/(main-service)/community/[id]/_components/RecommendArticles.tsx @@ -1,13 +1,15 @@ -import { ChevronIcon } from '@/common/assets/icons'; -import { RecommendArticleCard } from '@/common/components'; -import type { RecommendPost } from '@/model'; +'use client'; + +import { ChevronIcon } from '@/asset/icon'; +import { RecommendArticleCard } from '@/component'; +import { IRecommendPost } from '@/types'; interface Props { - posts: RecommendPost[]; + posts: IRecommendPost[]; } export const RecommendArticles = ({ posts }: Props) => { - if (!posts.length) return null; + if (!posts?.length) return null; return (
diff --git a/services/one-app/src/app/(main-service)/community/[id]/_lib/getDetailPost.ts b/services/one-app/src/app/(main-service)/community/[id]/_lib/getDetailPost.ts new file mode 100644 index 000000000..37f648395 --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/[id]/_lib/getDetailPost.ts @@ -0,0 +1,25 @@ +import { QueryFunction } from '@tanstack/react-query'; + +import type { IResponse } from '@/types'; +import type { CommunityDetail } from '@/types/community'; + +export const getCommunityDetailPost: QueryFunction< + IResponse, + [_1: string, id: number] +> = async ({ queryKey }) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_1, id] = queryKey; + const res = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}/community-posts/${id}`, { + next: { + tags: ['lcommunity-post', id.toString()], + }, + credentials: 'include', + }); + + if (!res.ok) { + // This will activate the closest `error.js` Error Boundary + throw new Error('Failed to fetch data'); + } + + return res.json(); +}; diff --git a/services/one-app/src/app/(main-service)/community/[id]/_lib/getDetailPostServer.ts b/services/one-app/src/app/(main-service)/community/[id]/_lib/getDetailPostServer.ts new file mode 100644 index 000000000..a2bf0ad92 --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/[id]/_lib/getDetailPostServer.ts @@ -0,0 +1,25 @@ +import { cookies } from 'next/headers'; + +export const getCommunityDetailPostServer = async ({ + queryKey, +}: { + queryKey: [string, number]; +}) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_1, id] = queryKey; + const res = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}/community-posts/${id}`, { + next: { + revalidate: 3600, + tags: ['community-post', id.toString()], + }, + credentials: 'include', + headers: { Cookie: (await cookies()).toString() }, + }); + + if (!res.ok) { + // This will activate the closest `error.js` Error Boundary + throw new Error('Failed to fetch data'); + } + + return res.json(); +}; diff --git a/services/one-app/src/app/(main-service)/community/[id]/page.tsx b/services/one-app/src/app/(main-service)/community/[id]/page.tsx new file mode 100644 index 000000000..d67a47478 --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/[id]/page.tsx @@ -0,0 +1,39 @@ +import { dehydrate, HydrationBoundary, QueryClient } from '@tanstack/react-query'; +import type { Metadata } from 'next'; + +import CommunityPostDetail from './_components/CommunityDetail'; +import { getCommunityDetailPostServer } from './_lib/getDetailPostServer'; + +export async function generateMetadata({ params }: Props): Promise { + const { id } = await params; + const post = await getCommunityDetailPostServer({ queryKey: ['community-post', id] }); + + return { + title: `์ง€ํ•˜์ฒ  ์ปค๋ฎค๋‹ˆํ‹ฐ ์•„ํ•˜์ฒ  / ${post.result.title}`, + description: post.result.content, + }; +} + +type Props = { + params: Promise<{ + id: number; + }>; +}; + +export default async function CommunityDetailPage(props: Props) { + const { id } = await props.params; + const queryClient = new QueryClient(); + await queryClient.prefetchQuery({ + queryKey: ['community-post', id], + queryFn: getCommunityDetailPostServer, + }); + const dehydratedState = dehydrate(queryClient); + + return ( +
+ + + +
+ ); +} diff --git a/services/one-app/src/app/(main-service)/community/_components/CommunityPosts.tsx b/services/one-app/src/app/(main-service)/community/_components/CommunityPosts.tsx new file mode 100644 index 000000000..ac7975b7b --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/_components/CommunityPosts.tsx @@ -0,0 +1,61 @@ +'use client'; + +import { Fragment, useEffect } from 'react'; +import { useInView } from 'react-intersection-observer'; + +import { InfiniteData, useInfiniteQuery } from '@tanstack/react-query'; +import Link from 'next/link'; +import { useSearchParams } from 'next/navigation'; + +import { ArticleListSuspenseFallback, Post } from '@/component'; +import type { ApiResponse, PaginatedList } from '@/types'; +import { CommunityPost } from '@/types/community'; + +import { getCommunityPosts } from '../_lib/getCommunityPosts'; + +export default function CommunityPosts() { + const searchParams = useSearchParams(); + + const { data, hasNextPage, fetchNextPage, isFetching, isPending } = useInfiniteQuery< + ApiResponse>, + Error, + InfiniteData>>, + [_1: string, _2: string, _3: string], + string + >({ + queryKey: ['community', 'posts', searchParams.toString()], + queryFn: getCommunityPosts, + initialPageParam: '', + getNextPageParam: lastPage => lastPage.result.pageToken, + staleTime: 60 * 1000, + gcTime: 300 * 1000, + }); + + const { ref, inView } = useInView({ + delay: 500, + threshold: 0, + }); + + useEffect(() => { + if (inView) { + !isFetching && hasNextPage && fetchNextPage(); + } + }, [inView, isFetching, hasNextPage, fetchNextPage]); + + if (isPending) return ; + + return ( + <> + {data?.pages.map((page, i) => ( + + {page.result.data.map(post => ( + + + + ))} + + ))} +
+ + ); +} diff --git a/services/one-app/src/app/(main-service)/community/_components/FilterList.tsx b/services/one-app/src/app/(main-service)/community/_components/FilterList.tsx new file mode 100644 index 000000000..f1c4b9a2b --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/_components/FilterList.tsx @@ -0,0 +1,27 @@ +'use client'; + +import { useSearchParams } from 'next/navigation'; + +import { ResetFilter, DropdownFilter } from '@/component'; +import { subwayLineIdOptions } from '@/constant'; +import { communityTypeOptions, defaultCommunityFilterValues } from '@/constant/community'; +import { SubwayLineFilterOptions } from '@/types'; +import { CommunityType } from '@/types/community'; + +const Filters = () => { + const searchParams = useSearchParams(); + const category = (searchParams.get('category') as CommunityType) ?? CommunityType.HOT; + const subwayLineId = + (searchParams.get('subwayLineId') as SubwayLineFilterOptions) ?? + SubwayLineFilterOptions.ALL_LINES; + + return ( +
+ + + +
+ ); +}; + +export default Filters; diff --git a/services/one-app/src/app/(main-service)/community/_lib/getCommunityPosts.tsx b/services/one-app/src/app/(main-service)/community/_lib/getCommunityPosts.tsx new file mode 100644 index 000000000..a9fcf0b61 --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/_lib/getCommunityPosts.tsx @@ -0,0 +1,46 @@ +import { objectToQueryString, removeFalsyValues } from '@ahhachul/utils'; + +import { fetchClient } from '@/lib/fetch-client'; +import { type ApiResponse, type PaginatedList } from '@/types'; +import { type CommunityListParams, type CommunityPost, CommunityType } from '@/types/community'; + +type Props = { + pageParam?: string; + queryKey: [_1: string, _2: string, filters: string]; +}; + +export async function getCommunityPosts({ + pageParam, + queryKey, +}: Props): Promise>> { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_1, _2, query] = queryKey; + + const filters = new URLSearchParams(query); + + const endpoint = + filters.has('category') && filters.get('category') !== CommunityType.HOT + ? 'community-posts' + : 'community-hot-posts'; + + const params = removeFalsyValues({ + ...(filters.get('keyword') && { content: filters.get('keyword') || '' }), + ...(filters.get('subwayLineId') && { subwayLineId: filters.get('subwayLineId') || '' }), + pageSize: 10, + sort: 'createdAt,desc', + ...(pageParam && { pageToken: pageParam }), + ...(filters.has('category') && + filters.get('category') !== CommunityType.HOT && { + categoryType: filters.get('category'), + }), + }) as Partial; + + return await fetchClient( + `${process.env.NEXT_PUBLIC_BASE_URL}/${endpoint}?${objectToQueryString(params)}`, + { + next: { + tags: ['community', 'posts'], + }, + }, + ); +} diff --git a/services/one-app/src/app/(main-service)/community/_lib/metadata.ts b/services/one-app/src/app/(main-service)/community/_lib/metadata.ts new file mode 100644 index 000000000..3d54f8fab --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/_lib/metadata.ts @@ -0,0 +1,27 @@ +import type { Metadata } from 'next'; + +import { SUBWAY_LINES } from '@/constant'; +import { CommunityType } from '@/types/community'; + +export async function generateCommunityMetadata( + searchParams: Promise<{ + q?: string; + subwayLineId?: string; + category?: CommunityType; + }>, +): Promise { + const { subwayLineId } = await searchParams; + + const baseTitle = '์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€ํ•˜์ฒ  / 1๋“ฑ ์ง€ํ•˜์ฒ  ๋ฏผ์› & ์œ ์‹ค๋ฌผ & ์ปค๋ฎค๋‹ˆํ‹ฐ ์ •๋ณด ์•ฑ'; + + const title = + subwayLineId && +subwayLineId !== 0 + ? `${SUBWAY_LINES.find(subway => subway.id === +subwayLineId)?.name} ${baseTitle}` + : baseTitle; + + return { + title, + description: '์ง€ํ•˜์ฒ ์— ๋‹น์‹ ์˜ ๋”ฐ๋œปํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ฑ„์›Œ๋‚˜๊ฐ€์š”', + applicationName: '์•„ํ•˜์ฒ  | AhHachul', + }; +} diff --git a/services/one-app/src/app/(main-service)/community/_lib/prefetchPosts.ts b/services/one-app/src/app/(main-service)/community/_lib/prefetchPosts.ts new file mode 100644 index 000000000..019e25b17 --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/_lib/prefetchPosts.ts @@ -0,0 +1,28 @@ +import type { QueryClient, InfiniteData } from '@tanstack/react-query'; + +import { objectToQueryString } from '@ahhachul/utils'; + +import type { ApiResponse, PaginatedList, SubwayLineFilterOptions } from '@/types'; +import { CommunityPost, CommunityType } from '@/types/community'; + +import { getCommunityPosts } from './getCommunityPosts'; + +type SearchParams = { + q?: string; + category?: CommunityType; + subwayLineId?: SubwayLineFilterOptions; +}; + +export async function prefetchPosts(queryClient: QueryClient, query: SearchParams) { + await queryClient.prefetchInfiniteQuery< + ApiResponse>, + Error, + InfiniteData>>, + [_1: string, _2: string, _3: string], + string + >({ + queryKey: ['community', 'posts', objectToQueryString(query)], + queryFn: getCommunityPosts, + initialPageParam: '', + }); +} diff --git a/services/one-app/src/app/(main-service)/community/page.tsx b/services/one-app/src/app/(main-service)/community/page.tsx new file mode 100644 index 000000000..444e8196d --- /dev/null +++ b/services/one-app/src/app/(main-service)/community/page.tsx @@ -0,0 +1,47 @@ +import { dehydrate, HydrationBoundary, QueryClient } from '@tanstack/react-query'; +import { headers } from 'next/headers'; + +import SearchForm from '@/component/SearchForm'; +import { SubwayLineFilterOptions } from '@/types'; +import { CommunityType } from '@/types/community'; + +import CommunityPosts from './_components/CommunityPosts'; +import Filters from './_components/FilterList'; +import { generateCommunityMetadata } from './_lib/metadata'; +import { prefetchPosts } from './_lib/prefetchPosts'; + +type Props = { + searchParams: Promise<{ + q?: string; + category?: CommunityType; + subwayLineId?: SubwayLineFilterOptions; + }>; +}; + +export async function generateMetadata({ searchParams }: Props) { + return generateCommunityMetadata(searchParams); +} + +export default async function CommunityPage({ searchParams }: Props) { + const query = await searchParams; + const headersList = await headers(); + const isServerRender = !headersList.get('next-url'); + + let dehydratedState; + + if (isServerRender) { + const queryClient = new QueryClient(); + await prefetchPosts(queryClient, query); + dehydratedState = dehydrate(queryClient); + } + + return ( +
+ + + + + +
+ ); +} diff --git a/services/one-app/src/app/(main-service)/complaint/page.tsx b/services/one-app/src/app/(main-service)/complaint/page.tsx new file mode 100644 index 000000000..cec80d480 --- /dev/null +++ b/services/one-app/src/app/(main-service)/complaint/page.tsx @@ -0,0 +1,3 @@ +export default function ComplaintPage() { + return
๋ฏผ์›
; +} diff --git a/services/one-app/src/app/(main-service)/lost-found/[id]/_components/Lost112ArticleTable.tsx b/services/one-app/src/app/(main-service)/lost-found/[id]/_components/Lost112ArticleTable.tsx new file mode 100644 index 000000000..92caeae66 --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/[id]/_components/Lost112ArticleTable.tsx @@ -0,0 +1,77 @@ +'use client'; + +import Link from 'next/link'; + +import { formatDateTime } from '@ahhachul/utils'; + +import type { LostFoundPostDetail } from '@/types'; + +interface Props { + post: LostFoundPostDetail; +} + +export const Lost112ArticleTable = ({ post }: Props) => { + return ( +
+
+

+ ์œ ์‹ค๋ฌผ ์ƒ์„ธ์ •๋ณด +

+ +
+
์Šต๋“์ผ
+
{formatDateTime(post.createdAt)}
+ + {post?.storage && ( + <> +
์Šต๋“์žฅ์†Œ
+
{post.storage}
+ + )} + + {post?.categoryName && ( + <> +
๋ฌผํ’ˆ๋ถ„๋ฅ˜
+
{post.categoryName}
+ + )} + + {post?.storageNumber && ( + <> +
๋ณด๊ด€ ์žฅ์†Œ ์ „ํ™”๋ฒˆํ˜ธ
+
{post.storageNumber}
+ + )} + + {post?.storage && ( + <> +
๋ณด๊ด€์žฅ์†Œ
+
{post.storage}
+ + )} + + {post?.pageUrl && ( + <> +
์›๋ณธ ๊ฒŒ์‹œ๊ธ€
+ + ๋ฐ”๋กœ๊ฐ€๊ธฐ + + + )} +
+ +
+
+ + {post.status === 'PROGRESS' ? 'ํ˜„์žฌ ๋ณด๊ด€์ค‘ ์ž…๋‹ˆ๋‹ค.' : '์ฐพ๊ธฐ ์™„๋ฃŒ!'} + +
+
+
+ ); +}; diff --git a/services/one-app/src/app/(site)/lost-found/_components/postDetail/PostDetail.tsx b/services/one-app/src/app/(main-service)/lost-found/[id]/_components/LostFoundDetail.tsx similarity index 62% rename from services/one-app/src/app/(site)/lost-found/_components/postDetail/PostDetail.tsx rename to services/one-app/src/app/(main-service)/lost-found/[id]/_components/LostFoundDetail.tsx index cc6e95021..2d09180fe 100644 --- a/services/one-app/src/app/(site)/lost-found/_components/postDetail/PostDetail.tsx +++ b/services/one-app/src/app/(main-service)/lost-found/[id]/_components/LostFoundDetail.tsx @@ -1,41 +1,48 @@ 'use client'; +import { useQuery } from '@tanstack/react-query'; import Image from 'next/image'; -import { LexicalSyntaxContentParser } from '@/app/(site)/_component/Editor'; -import { BaseArticleImages, CommentTextField, SUBWAY_LOGO_SVG_LIST } from '@/common/components'; -import { cn, formatDate, getRandomInt, isLexicalContent } from '@/common/utils'; +import { formatDateTime } from '@ahhachul/utils'; + +import { ReadonlyEditor } from '@/component/Editor'; +// import { SUBWAY_LOGO_SVG_LIST } from '@/component'; +import { TIMESTAMP } from '@/constant'; +import { cn, isLexicalContent } from '@/util'; -import { LostFoundCommentList } from './CommentList'; import { Lost112ArticleTable } from './Lost112ArticleTable'; import { LostTypeBadge } from './LostTypeBadge'; import { RecommendArticles } from './RecommendArticles'; -import { useGetLostFoundDetail, useLostFoundComment } from '../../_lib'; +import { getLostFoundDetailPost } from '../_lib/getDetailPost'; type Props = { - lostId: number; + id: number; }; -export const LostFoundPostDetail = ({ lostId }: Props) => { - const { data: post } = useGetLostFoundDetail(lostId); - const isLexicalSyntaxContent = isLexicalContent(post.content); +export default function LostFoundPostDetail({ id }: Props) { + const { data: post } = useQuery({ + queryKey: ['lost-found-post', id], + queryFn: getLostFoundDetailPost, + staleTime: 5 * TIMESTAMP.MINUTE, + select: res => res.result, + }); - const { handleChangeComment, handleSubmitComment } = useLostFoundComment(lostId); + if (!post) return null; - const images = post.isFromLost112 - ? [ - { - imageId: getRandomInt(), - imageUrl: post.externalSourceImageUrl, - }, - ] - : post.images; + // const images = post.isFromLost112 + // ? [ + // { + // imageId: getRandomInt(), + // imageUrl: post.externalSourceImageUrl, + // }, + // ] + // : post.images; return ( <>
- + {/* */}
@@ -44,10 +51,10 @@ export const LostFoundPostDetail = ({ lostId }: Props) => {
{post.writer || '๋กœ์ŠคํŠธ 112'} - {formatDate(post.createdAt)} + {formatDateTime(post.createdAt!)}
- {SUBWAY_LOGO_SVG_LIST[post.subwayLineId]} + {/* {SUBWAY_LOGO_SVG_LIST[post.subwayLineId]} */}
@@ -69,8 +76,8 @@ export const LostFoundPostDetail = ({ lostId }: Props) => { )}
- {isLexicalSyntaxContent ? ( - div>div]:p-0', '[&>div>div]:border-none')} /> @@ -81,12 +88,12 @@ export const LostFoundPostDetail = ({ lostId }: Props) => {
- - */} + {/* + /> */} ); -}; +} diff --git a/services/one-app/src/app/(site)/lost-found/_components/postDetail/LostTypeBadge.tsx b/services/one-app/src/app/(main-service)/lost-found/[id]/_components/LostTypeBadge.tsx similarity index 88% rename from services/one-app/src/app/(site)/lost-found/_components/postDetail/LostTypeBadge.tsx rename to services/one-app/src/app/(main-service)/lost-found/[id]/_components/LostTypeBadge.tsx index 3a75a8596..3202e8980 100644 --- a/services/one-app/src/app/(site)/lost-found/_components/postDetail/LostTypeBadge.tsx +++ b/services/one-app/src/app/(main-service)/lost-found/[id]/_components/LostTypeBadge.tsx @@ -1,6 +1,6 @@ 'use client'; -import type { LostFoundType } from '@/model'; +import type { LostFoundType } from '@/types'; interface Props { lostFoundType: LostFoundType; diff --git a/services/one-app/src/app/(main-service)/lost-found/[id]/_components/RecommendArticles.tsx b/services/one-app/src/app/(main-service)/lost-found/[id]/_components/RecommendArticles.tsx new file mode 100644 index 000000000..e017aca79 --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/[id]/_components/RecommendArticles.tsx @@ -0,0 +1,25 @@ +'use client'; + +import { ChevronIcon } from '@/asset/icon'; +import { RecommendArticleCard } from '@/component'; +import { IRecommendPost } from '@/types'; + +interface Props { + posts: IRecommendPost[]; +} + +export const RecommendArticles = ({ posts }: Props) => { + if (!posts?.length) return null; + + return ( +
+
+ ์ถ”์ฒœ ์Šต๋“๋ฌผ + +
+ {posts.map(post => ( + + ))} +
+ ); +}; diff --git a/services/one-app/src/app/(main-service)/lost-found/[id]/_lib/getComments.ts b/services/one-app/src/app/(main-service)/lost-found/[id]/_lib/getComments.ts new file mode 100644 index 000000000..e9c8ca18f --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/[id]/_lib/getComments.ts @@ -0,0 +1,25 @@ +import { QueryFunction } from '@tanstack/react-query'; + +import { CommentList, IResponse } from '@/types'; + +export const getLostFoundComments: QueryFunction< + IResponse, + [_1: string, id: number, _2: string] +> = async ({ queryKey }) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_1, id] = queryKey; + const res = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}/lost-posts/${id}/comments`, { + next: { + tags: ['lost-found-post', id.toString(), 'comments'], + }, + credentials: 'include', + cache: 'no-store', + }); + + if (!res.ok) { + // This will activate the closest `error.js` Error Boundary + throw new Error('Failed to fetch data'); + } + + return res.json(); +}; diff --git a/services/one-app/src/app/(main-service)/lost-found/[id]/_lib/getDetailPost.ts b/services/one-app/src/app/(main-service)/lost-found/[id]/_lib/getDetailPost.ts new file mode 100644 index 000000000..7f32488e0 --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/[id]/_lib/getDetailPost.ts @@ -0,0 +1,24 @@ +import { QueryFunction } from '@tanstack/react-query'; + +import { IResponse, LostFoundPostDetail } from '@/types'; + +export const getLostFoundDetailPost: QueryFunction< + IResponse, + [_1: string, id: number] +> = async ({ queryKey }) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_1, id] = queryKey; + const res = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}/lost-posts/${id}`, { + next: { + tags: ['lost-found-post', id.toString()], + }, + credentials: 'include', + }); + + if (!res.ok) { + // This will activate the closest `error.js` Error Boundary + throw new Error('Failed to fetch data'); + } + + return res.json(); +}; diff --git a/services/one-app/src/app/(main-service)/lost-found/[id]/_lib/getDetailPostServer.ts b/services/one-app/src/app/(main-service)/lost-found/[id]/_lib/getDetailPostServer.ts new file mode 100644 index 000000000..12d6da0a4 --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/[id]/_lib/getDetailPostServer.ts @@ -0,0 +1,25 @@ +import { cookies } from 'next/headers'; + +export const getLostFoundDetailPostServer = async ({ + queryKey, +}: { + queryKey: [string, number]; +}) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_1, id] = queryKey; + const res = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}/lost-posts/${id}`, { + next: { + revalidate: 3600, + tags: ['lost-found-post', id.toString()], + }, + credentials: 'include', + headers: { Cookie: (await cookies()).toString() }, + }); + + if (!res.ok) { + // This will activate the closest `error.js` Error Boundary + throw new Error('Failed to fetch data'); + } + + return res.json(); +}; diff --git a/services/one-app/src/app/(main-service)/lost-found/[id]/edit/page.tsx b/services/one-app/src/app/(main-service)/lost-found/[id]/edit/page.tsx new file mode 100644 index 000000000..9f841dad5 --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/[id]/edit/page.tsx @@ -0,0 +1,11 @@ +type Props = { + params: Promise<{ + lostId: string; + }>; +}; + +export default async function LostFoundEditPage({ params }: Props) { + const { lostId } = await params; + + return
{lostId}
; +} diff --git a/services/one-app/src/app/(main-service)/lost-found/[id]/page.tsx b/services/one-app/src/app/(main-service)/lost-found/[id]/page.tsx new file mode 100644 index 000000000..67ffa067b --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/[id]/page.tsx @@ -0,0 +1,44 @@ +import { dehydrate, HydrationBoundary, QueryClient } from '@tanstack/react-query'; +import type { Metadata } from 'next'; + +import LostFoundPostDetail from './_components/LostFoundDetail'; +import { getLostFoundComments } from './_lib/getComments'; +import { getLostFoundDetailPostServer } from './_lib/getDetailPostServer'; + +export async function generateMetadata({ params }: Props): Promise { + const { id } = await params; + const post = await getLostFoundDetailPostServer({ queryKey: ['lost-found-post', id] }); + + return { + title: `์ง€ํ•˜์ฒ  ์œ ์‹ค๋ฌผ ์•„ํ•˜์ฒ  / ${post.result.title}`, + description: post.result.content, + }; +} + +type Props = { + params: Promise<{ + id: number; + }>; +}; + +export default async function LostFoundDetailPage(props: Props) { + const { id } = await props.params; + const queryClient = new QueryClient(); + await queryClient.prefetchQuery({ + queryKey: ['lost-found-post', id], + queryFn: getLostFoundDetailPostServer, + }); + await queryClient.prefetchQuery({ + queryKey: ['lost-found-post', id, 'comments'], + queryFn: getLostFoundComments, + }); + const dehydratedState = dehydrate(queryClient); + + return ( +
+ + + +
+ ); +} diff --git a/services/one-app/src/app/(main-service)/lost-found/_components/FilterList.tsx b/services/one-app/src/app/(main-service)/lost-found/_components/FilterList.tsx new file mode 100644 index 000000000..9b1ca87c5 --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/_components/FilterList.tsx @@ -0,0 +1,24 @@ +'use client'; + +import { useSearchParams } from 'next/navigation'; + +import { ResetFilter, DropdownFilter } from '@/component'; +import { subwayLineIdOptions } from '@/constant'; +import { defaultLostFoundFilterValues, lostTypeOptions } from '@/constant/lost-found'; +import { LostFoundType, SubwayLineFilterOptions } from '@/types'; + +export default function Filters() { + const searchParams = useSearchParams(); + const category = (searchParams.get('category') as LostFoundType) ?? LostFoundType.LOST; + const subwayLineId = + (searchParams.get('subwayLineId') as SubwayLineFilterOptions) ?? + SubwayLineFilterOptions.ALL_LINES; + + return ( +
+ + + +
+ ); +} diff --git a/services/one-app/src/app/(main-service)/lost-found/_components/LostFoundPosts.tsx b/services/one-app/src/app/(main-service)/lost-found/_components/LostFoundPosts.tsx new file mode 100644 index 000000000..fc32aef24 --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/_components/LostFoundPosts.tsx @@ -0,0 +1,60 @@ +'use client'; + +import { Fragment, useEffect } from 'react'; +import { useInView } from 'react-intersection-observer'; + +import { InfiniteData, useInfiniteQuery } from '@tanstack/react-query'; +import Link from 'next/link'; +import { useSearchParams } from 'next/navigation'; + +import { ArticleListSuspenseFallback, Post } from '@/component'; +import type { ApiResponse, LostFoundPost, PaginatedList } from '@/types'; + +import { getLostFoundPosts } from '../_lib/getLostFoundPosts'; + +export default function LostFoundPosts() { + const searchParams = useSearchParams(); + + const { data, hasNextPage, fetchNextPage, isFetching, isPending } = useInfiniteQuery< + ApiResponse>, + Error, + InfiniteData>>, + [_1: string, _2: string, _3: string], + string + >({ + queryKey: ['lost-found', 'posts', searchParams.toString()], + queryFn: getLostFoundPosts, + initialPageParam: '', + getNextPageParam: lastPage => lastPage.result.pageToken, + staleTime: 60 * 1000, + gcTime: 300 * 1000, + }); + + const { ref, inView } = useInView({ + delay: 500, + threshold: 0, + }); + + useEffect(() => { + if (inView) { + !isFetching && hasNextPage && fetchNextPage(); + } + }, [inView, isFetching, hasNextPage, fetchNextPage]); + + if (isPending) return ; + + return ( + <> + {data?.pages.map((page, i) => ( + + {page.result.data.map(post => ( + + + + ))} + + ))} +
+ + ); +} diff --git a/services/one-app/src/app/(main-service)/lost-found/_lib/getLostFoundPosts.tsx b/services/one-app/src/app/(main-service)/lost-found/_lib/getLostFoundPosts.tsx new file mode 100644 index 000000000..122d27156 --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/_lib/getLostFoundPosts.tsx @@ -0,0 +1,36 @@ +import { objectToQueryString, removeFalsyValues } from '@ahhachul/utils'; + +import { fetchClient } from '@/lib/fetch-client'; +import { LostFoundType, type ApiResponse, type LostFoundPost, type PaginatedList } from '@/types'; + +type Props = { + pageParam?: string; + queryKey: [_1: string, _2: string, filters: string]; +}; + +export async function getLostFoundPosts({ + pageParam, + queryKey, +}: Props): Promise>> { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_1, _2, query] = queryKey; + + const filters = new URLSearchParams(query); + + const params = removeFalsyValues({ + ...(filters.get('keyword') && { keyword: filters.get('keyword') || '' }), + ...(filters.get('subwayLineId') && { subwayLineId: filters.get('subwayLineId') || '' }), + pageSize: 10, + ...(pageParam && { pageToken: pageParam }), + ...{ lostType: filters.get('category') || LostFoundType.LOST }, + }); + + return await fetchClient( + `${process.env.NEXT_PUBLIC_BASE_URL}/lost-posts?${objectToQueryString(params)}`, + { + next: { + tags: ['lost-found', 'posts'], + }, + }, + ); +} diff --git a/services/one-app/src/app/(main-service)/lost-found/_lib/metadata.ts b/services/one-app/src/app/(main-service)/lost-found/_lib/metadata.ts new file mode 100644 index 000000000..ce6a72ffc --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/_lib/metadata.ts @@ -0,0 +1,27 @@ +import type { Metadata } from 'next'; + +import { SUBWAY_LINES } from '@/constant'; +import { LostFoundType } from '@/types'; + +export async function generateLostFoundMetadata( + searchParams: Promise<{ + q?: string; + subwayLineId?: string; + category?: LostFoundType; + }>, +): Promise { + const { subwayLineId } = await searchParams; + + const baseTitle = '์œ ์‹ค๋ฌผ ์ง€ํ•˜์ฒ  / 1๋“ฑ ์ง€ํ•˜์ฒ  ๋ฏผ์› & ์œ ์‹ค๋ฌผ & ์ปค๋ฎค๋‹ˆํ‹ฐ ์ •๋ณด ์•ฑ'; + + const title = + subwayLineId && +subwayLineId !== 0 + ? `${SUBWAY_LINES.find(subway => subway.id === +subwayLineId)?.name} ${baseTitle}` + : baseTitle; + + return { + title, + description: '์ง€ํ•˜์ฒ ์— ๋‹น์‹ ์˜ ๋”ฐ๋œปํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ฑ„์›Œ๋‚˜๊ฐ€์š”', + applicationName: '์•„ํ•˜์ฒ  | AhHachul', + }; +} diff --git a/services/one-app/src/app/(main-service)/lost-found/_lib/prefetchPosts.ts b/services/one-app/src/app/(main-service)/lost-found/_lib/prefetchPosts.ts new file mode 100644 index 000000000..77f577d4a --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/_lib/prefetchPosts.ts @@ -0,0 +1,33 @@ +import type { QueryClient, InfiniteData } from '@tanstack/react-query'; + +import { objectToQueryString } from '@ahhachul/utils'; + +import type { + ApiResponse, + LostFoundPost, + LostFoundType, + PaginatedList, + SubwayLineFilterOptions, +} from '@/types'; + +import { getLostFoundPosts } from './getLostFoundPosts'; + +type SearchParams = { + q?: string; + category?: LostFoundType; + subwayLineId?: SubwayLineFilterOptions; +}; + +export async function prefetchPosts(queryClient: QueryClient, query: SearchParams) { + await queryClient.prefetchInfiniteQuery< + ApiResponse>, + Error, + InfiniteData>>, + [_1: string, _2: string, _3: string], + string + >({ + queryKey: ['lost-found', 'posts', objectToQueryString(query)], + queryFn: getLostFoundPosts, + initialPageParam: '', + }); +} diff --git a/services/one-app/src/app/(main-service)/lost-found/new/page.tsx b/services/one-app/src/app/(main-service)/lost-found/new/page.tsx new file mode 100644 index 000000000..362d117db --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/new/page.tsx @@ -0,0 +1,10 @@ +const NewLostFoundPage = () => { + return ( +
+ {/* + */} +
+ ); +}; + +export default NewLostFoundPage; diff --git a/services/one-app/src/app/(main-service)/lost-found/page.tsx b/services/one-app/src/app/(main-service)/lost-found/page.tsx new file mode 100644 index 000000000..90f6c449b --- /dev/null +++ b/services/one-app/src/app/(main-service)/lost-found/page.tsx @@ -0,0 +1,46 @@ +import { dehydrate, HydrationBoundary, QueryClient } from '@tanstack/react-query'; +import { headers } from 'next/headers'; + +import SearchForm from '@/component/SearchForm'; +import type { LostFoundType, SubwayLineFilterOptions } from '@/types'; + +import Filters from './_components/FilterList'; +import LostFoundPosts from './_components/LostFoundPosts'; +import { generateLostFoundMetadata } from './_lib/metadata'; +import { prefetchPosts } from './_lib/prefetchPosts'; + +type Props = { + searchParams: Promise<{ + q?: string; + category?: LostFoundType; + subwayLineId?: SubwayLineFilterOptions; + }>; +}; + +export async function generateMetadata({ searchParams }: Props) { + return generateLostFoundMetadata(searchParams); +} + +export default async function LostFoundPage({ searchParams }: Props) { + const query = await searchParams; + const headersList = await headers(); + const isServerRender = !headersList.get('next-url'); + + let dehydratedState; + + if (isServerRender) { + const queryClient = new QueryClient(); + await prefetchPosts(queryClient, query); + dehydratedState = dehydrate(queryClient); + } + + return ( +
+ + + + + +
+ ); +} diff --git a/services/one-app/src/app/(main-service)/me/page.tsx b/services/one-app/src/app/(main-service)/me/page.tsx new file mode 100644 index 000000000..d10c6242b --- /dev/null +++ b/services/one-app/src/app/(main-service)/me/page.tsx @@ -0,0 +1,3 @@ +export default function MyPage() { + return
MyPage
; +} diff --git a/services/one-app/src/app/(site)/_component/Editor/index.ts b/services/one-app/src/app/(site)/_component/Editor/index.ts deleted file mode 100644 index 3543adf57..000000000 --- a/services/one-app/src/app/(site)/_component/Editor/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './Editor'; -export * from './LexicalSyntaxContentParser'; - -export * from './plugins'; diff --git a/services/one-app/src/app/(site)/_component/LoggedIn.tsx b/services/one-app/src/app/(site)/_component/LoggedIn.tsx deleted file mode 100644 index 9198a9747..000000000 --- a/services/one-app/src/app/(site)/_component/LoggedIn.tsx +++ /dev/null @@ -1,21 +0,0 @@ -'use client'; - -import { useEffect, useState } from 'react'; - -import { AuthService } from '@/common/service/AuthService'; - -// ์—†์–ด์งˆ ์ปดํฌ๋„ŒํŠธ -export default function LoggedIn() { - const [isLoggedIn, setIsLoggedIn] = useState(null); - - useEffect(() => { - // Check login state on the client side - setIsLoggedIn(AuthService.isLoggedIn); - }, []); - - if (isLoggedIn === null) { - return null; - } - - return

Logged in: {isLoggedIn ? 'O' : 'X'}

; -} diff --git a/services/one-app/src/app/(site)/_component/index.ts b/services/one-app/src/app/(site)/_component/index.ts deleted file mode 100644 index e8b6f30bb..000000000 --- a/services/one-app/src/app/(site)/_component/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as LoggedIn } from './LoggedIn'; diff --git a/services/one-app/src/app/(site)/_hook/index.ts b/services/one-app/src/app/(site)/_hook/index.ts deleted file mode 100644 index 44b098bef..000000000 --- a/services/one-app/src/app/(site)/_hook/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './useReport'; diff --git a/services/one-app/src/app/(site)/_lib/comment.ts b/services/one-app/src/app/(site)/_lib/comment.ts deleted file mode 100644 index f44d6b3e4..000000000 --- a/services/one-app/src/app/(site)/_lib/comment.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { useMutation } from '@tanstack/react-query'; - -import { apiClient } from '@/app/api'; -import type { Comment, IResponse } from '@/model'; - -export const deleteComment = (commentId: number) => - apiClient.delete>>(`comments/${commentId}`); - -export const useDeleteComment = () => { - return useMutation({ - mutationFn: deleteComment, - }); -}; - -export const updateComment = async (data: { content: string; commentId: number }) => { - const response = await apiClient.patch>>( - `comments/${data.commentId}`, - { - content: data.content, - }, - ); - return response.data; -}; - -export const useUpdateComment = () => { - return useMutation({ - mutationFn: updateComment, - }); -}; diff --git a/services/one-app/src/app/(site)/_lib/index.ts b/services/one-app/src/app/(site)/_lib/index.ts deleted file mode 100644 index 6e8fe75e5..000000000 --- a/services/one-app/src/app/(site)/_lib/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './comment'; diff --git a/services/one-app/src/app/(site)/layout.tsx b/services/one-app/src/app/(site)/layout.tsx deleted file mode 100644 index d05a3d010..000000000 --- a/services/one-app/src/app/(site)/layout.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import 'react-lazy-load-image-component/src/effects/opacity.css'; - -import type { Metadata } from 'next'; -import { NuqsAdapter } from 'nuqs/adapters/next/app'; - -import { RQProvider, MSWComponent } from '@/app/_components'; -import { Pretendard } from '@/common/assets/fonts/pretendard'; -import { cn } from '@/common/utils/cn'; - -import '../globals.css'; - -export const metadata: Metadata = { - title: 'Create Next App', - description: 'Generated by create next app', -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - - - {children} - - - - ); -} diff --git a/services/one-app/src/app/(site)/login/_lib/checkNickname.ts b/services/one-app/src/app/(site)/login/_lib/checkNickname.ts deleted file mode 100644 index f85a631c5..000000000 --- a/services/one-app/src/app/(site)/login/_lib/checkNickname.ts +++ /dev/null @@ -1,41 +0,0 @@ -import axios from 'axios'; -import { z } from 'zod'; - -import { apiClient } from '@/app/api'; -import { APIResponseCode, RESPONSE_MESSAGES } from '@/common/constants'; -import { sleep } from '@/common/utils'; - -const CheckNicknameResponseSchema = z.object({ - code: z.literal(APIResponseCode.SUCCESS), - message: z.literal(RESPONSE_MESSAGES[APIResponseCode.SUCCESS]), - result: z.object({ - available: z.boolean(), - }), -}); - -type CheckNicknameResponse = z.infer; - -export const checkNickname = async (nickname: string) => { - try { - const [res] = await Promise.all([ - apiClient.post('/members/check-nickname', { - nickname, - }), - sleep(300), - ]); - - return CheckNicknameResponseSchema.parse(res.data); - } catch (error) { - if (axios.isAxiosError(error)) { - // Axios ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ - throw new Error(`Sign in failed: ${error.response?.data?.message || error.message}`); - } else if (error instanceof z.ZodError) { - // Zod ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ - throw new Error(`Validation failed: ${error.errors.map(e => e.message).join(', ')}`); - } else { - // ๊ธฐํƒ€ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ - console.error('Unexpected error during sign in:', error); - throw new Error('An unexpected error occurred during sign in.'); - } - } -}; diff --git a/services/one-app/src/app/(site)/login/_lib/getRedirectUrl.ts b/services/one-app/src/app/(site)/login/_lib/getRedirectUrl.ts deleted file mode 100644 index df26289d7..000000000 --- a/services/one-app/src/app/(site)/login/_lib/getRedirectUrl.ts +++ /dev/null @@ -1,33 +0,0 @@ -import axios from 'axios'; -import { z } from 'zod'; - -import { apiClient } from '@/app/api'; -import { APIResponseCode, RESPONSE_MESSAGES } from '@/common/constants'; -import type { SocialSignInType } from '@/model'; - -const RedirectUrlResponseSchema = z.object({ - code: z.literal(APIResponseCode.SUCCESS), - message: z.literal(RESPONSE_MESSAGES[APIResponseCode.SUCCESS]), - result: z.object({ - redirectUrl: z.string(), - }), -}); - -type RedirectUrlResponse = z.infer; - -export async function getRedirectUrl(params: SocialSignInType): Promise { - try { - const response = await apiClient.get( - `/auth/redirect-url?providerType=${params}`, - ); - - return RedirectUrlResponseSchema.parse(response.data); - } catch (error) { - if (axios.isAxiosError(error) && error.response) { - console.error('Server responded with error:', error.response.data); - } else { - console.error('Error during sign in:', error); - } - throw error; - } -} diff --git a/services/one-app/src/app/(site)/login/_lib/index.ts b/services/one-app/src/app/(site)/login/_lib/index.ts deleted file mode 100644 index c4252451b..000000000 --- a/services/one-app/src/app/(site)/login/_lib/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './utils'; -export * from './checkNickname'; -export * from './requestLogin'; -export * from './getRedirectUrl'; -export * from './useCheckNickname'; -export * from './socialLoginOptions'; diff --git a/services/one-app/src/app/(site)/login/_lib/requestLogin.ts b/services/one-app/src/app/(site)/login/_lib/requestLogin.ts deleted file mode 100644 index aaf254d38..000000000 --- a/services/one-app/src/app/(site)/login/_lib/requestLogin.ts +++ /dev/null @@ -1,49 +0,0 @@ -import axios from 'axios'; -import { z } from 'zod'; - -import { apiClient } from '@/app/api'; -import { APIResponseCode, RESPONSE_MESSAGES } from '@/common/constants'; -import type { SocialSignInType } from '@/model'; - -// TODO, ์‹คํŒจ ์ผ€์ด์Šค ์ถ”๊ฐ€ -export const LoginResponseSchema = z.object({ - code: z.literal(APIResponseCode.SUCCESS), - message: z.literal(RESPONSE_MESSAGES[APIResponseCode.SUCCESS]), - result: z.object({ - memberId: z.string(), - isNeedAdditionalUserInfo: z.boolean(), - accessToken: z.string(), - accessTokenExpiresIn: z.number(), - refreshToken: z.string(), - refreshTokenExpiresIn: z.number(), - }), -}); - -export async function requestLogin({ - providerType, - providerCode, -}: { - providerType: SocialSignInType; - providerCode: string; -}) { - try { - const res = await apiClient.post(`/auth/login`, { - providerType, - providerCode, - }); - - return LoginResponseSchema.parse(res.data); - } catch (error) { - if (axios.isAxiosError(error)) { - // Axios ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ - throw new Error(`Sign in failed: ${error.response?.data?.message || error.message}`); - } else if (error instanceof z.ZodError) { - // Zod ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ - throw new Error(`Validation failed: ${error.errors.map(e => e.message).join(', ')}`); - } else { - // ๊ธฐํƒ€ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ - console.error('Unexpected error during sign in:', error); - throw new Error('An unexpected error occurred during sign in.'); - } - } -} diff --git a/services/one-app/src/app/(site)/login/_lib/useCheckNickname.ts b/services/one-app/src/app/(site)/login/_lib/useCheckNickname.ts deleted file mode 100644 index 4aa82d16f..000000000 --- a/services/one-app/src/app/(site)/login/_lib/useCheckNickname.ts +++ /dev/null @@ -1,89 +0,0 @@ -'use client'; - -import { useState } from 'react'; - -import { useMutation } from '@tanstack/react-query'; - -import { checkNickname } from '@/app/(site)/login/_lib'; -import { useDebounce } from '@/common/hooks'; - -const MAX_LENGTH = 10; -const MIN_LENGTH = 2; - -enum ErrorStatus { - TOO_SHORT = `๋‹‰๋„ค์ž„์€ ${MIN_LENGTH}์ž ์ด์ƒ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.`, - TOO_LONG = `ํ•œ๊ธ€,์˜๋ฌธ ${MAX_LENGTH}์ž ์ดํ•˜๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.`, - DUPLICATED_NAME = '์ค‘๋ณต์ธ ๋‹‰๋„ค์ž„์ด๋ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.', - INVALID_FORMAT = '์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค.', -} - -export const useCheckNickname = () => { - const { mutateAsync: nicknameChecking, status } = useMutation({ - mutationFn: checkNickname, - }); - - const [nickname, setNickname] = useState(''); - const [isTouched, setIsTouched] = useState(false); - const [errorMessage, setErrorMessage] = useState(''); - - const isNicknameChecking = status === 'pending'; - const isValidateOk = nickname.length >= MIN_LENGTH && errorMessage === ''; - const isValidateError = isTouched && (nickname.length < MIN_LENGTH || errorMessage !== ''); - - const disabled = - errorMessage !== '' || nickname.length < MIN_LENGTH || nickname.length > MAX_LENGTH; - - const lengthIndicator = `${nickname.length} / ${MAX_LENGTH}`; - - const handleInputChange = (e: React.ChangeEvent) => { - const value = e.target.value.slice(0, MAX_LENGTH); - setNickname(value); - if (!isTouched) setIsTouched(true); - checkNicknameValidity(value); - }; - - const checkNicknameValidity = useDebounce(async (value: string) => { - if (value.length < MIN_LENGTH) { - setErrorMessage(ErrorStatus.TOO_SHORT); - return; - } - if (value.length > MAX_LENGTH) { - setErrorMessage(ErrorStatus.TOO_LONG); - return; - } - - try { - const res = await nicknameChecking(value); - if (!res.result.available) { - setErrorMessage(ErrorStatus.DUPLICATED_NAME); - } else { - setErrorMessage(''); - } - } catch (error) { - setErrorMessage(ErrorStatus.INVALID_FORMAT); - } - }, 500); - - const nickNameStatusMessage = (() => { - if (errorMessage) { - return errorMessage; - } - if (isValidateOk) { - return '์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹‰๋„ค์ž„ ์ž…๋‹ˆ๋‹ค.'; - } - return `๋‹‰๋„ค์ž„์€ ${MIN_LENGTH}์ž ์ด์ƒ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.`; - })(); - - return { - nickname, - disabled, - errorMessage, - lengthIndicator, - isTouched, - isValidateOk, - isValidateError, - isNicknameChecking, - nickNameStatusMessage, - handleInputChange, - }; -}; diff --git a/services/one-app/src/app/(site)/login/_lib/utils.tsx b/services/one-app/src/app/(site)/login/_lib/utils.tsx deleted file mode 100644 index 86a56fdad..000000000 --- a/services/one-app/src/app/(site)/login/_lib/utils.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { CheckIcon, AlertCircleIcon } from '@/common/assets/icons'; - -export const renderIndicatorIcon = (isValidateOk: boolean, isValidateError: boolean) => { - if (isValidateOk) { - return ; - } - if (isValidateError) { - return ; - } - return null; -}; diff --git a/services/one-app/src/app/(site)/login/callback/page.tsx b/services/one-app/src/app/(site)/login/callback/page.tsx deleted file mode 100644 index 6d38038e4..000000000 --- a/services/one-app/src/app/(site)/login/callback/page.tsx +++ /dev/null @@ -1,73 +0,0 @@ -'use client'; - -import { Suspense, useRef, useEffect } from 'react'; - -import { useRouter, useSearchParams } from 'next/navigation'; -import { useShallow } from 'zustand/shallow'; - -import { AuthService } from '@/common/service/AuthService'; -import { isValidSocialSignInType } from '@/model/Auth'; -import { useTemporaryAuthStore } from '@/store/auth'; - -import { requestLogin } from '../_lib/requestLogin'; - -function LoginCallback() { - const router = useRouter(); - const isLoadingRef = useRef(false); - const { setTempAuth } = useTemporaryAuthStore( - useShallow(state => ({ - setTempAuth: state.setTempAuth, - })), - ); - - const searchParams = useSearchParams(); - const providerType = searchParams.get('type'); - const providerCode = searchParams.get('code'); - - const handleLogin = async () => { - if (isLoadingRef.current) { - return; - } - - if (!providerType || !providerCode || !isValidSocialSignInType(providerType)) { - return; - } - - try { - isLoadingRef.current = true; - const { result } = await requestLogin({ - providerType, - providerCode, - }); - - const { accessToken, refreshToken, isNeedAdditionalUserInfo } = result; - - if (!isNeedAdditionalUserInfo) { - AuthService.setToken(accessToken, refreshToken); - router.replace('/'); - } else { - setTempAuth({ accessToken, refreshToken }); - router.replace('/login/nickname'); - } - } catch (error) { - console.error(error); - router.replace('/login?error=from_callback'); - } finally { - isLoadingRef.current = false; - } - }; - - useEffect(() => { - handleLogin(); - }, []); - - return null; -} - -export default function LoginCallbackPage() { - return ( - Loading...
}> - - - ); -} diff --git a/services/one-app/src/app/(site)/login/nickname/page.tsx b/services/one-app/src/app/(site)/login/nickname/page.tsx deleted file mode 100644 index f0b93ebbd..000000000 --- a/services/one-app/src/app/(site)/login/nickname/page.tsx +++ /dev/null @@ -1,128 +0,0 @@ -'use client'; - -import { useMutation } from '@tanstack/react-query'; -import { useRouter } from 'next/navigation'; -import { useShallow } from 'zustand/shallow'; - -import ArrowLeftIcon from '@/common/assets/icons/arrow-left'; -import SpinnerIcon from '@/common/assets/icons/loading-spinner'; -import { AuthService } from '@/common/service/AuthService'; -import { cn } from '@/common/utils/cn'; -import { useTemporaryAuthStore } from '@/store/auth'; - -import { updateUser } from '../../my/_lib/updateUser'; -import { useCheckNickname } from '../_lib/useCheckNickname'; -import { renderIndicatorIcon } from '../_lib/utils'; - -const NicknameSetup = () => { - const router = useRouter(); - const { - nickname, - disabled, - lengthIndicator, - isTouched, - isValidateOk, - isValidateError, - isNicknameChecking, - nickNameStatusMessage, - handleInputChange, - } = useCheckNickname(); - - const { auth, reset: removeTemporaryAuth } = useTemporaryAuthStore( - useShallow(state => ({ - auth: state.auth, - reset: state.reset, - })), - ); - const { mutate: updateUserAndTryLoginProcessDone, status } = useMutation({ - mutationFn: updateUser, - onSuccess: () => { - if (!auth) return; - - const { accessToken, refreshToken } = auth; - AuthService.setToken(accessToken, refreshToken); - removeTemporaryAuth(); - router.replace('/'); - }, - }); - - const handleSubmit = () => { - if (disabled || !auth) return; - updateUserAndTryLoginProcessDone({ nickname, auth }); - }; - - const isUpdating = status === 'pending'; - const isProcessing = isNicknameChecking || isUpdating; - - return ( -
-
- -

ํšŒ์›๊ฐ€์ž…

-
- -

- ๋‹‰๋„ค์ž„์„ ์„ค์ •ํ•ด์ฃผ์„ธ์š” -

- -
-
- -
- {renderIndicatorIcon(isValidateOk, isValidateError)} -
-
- -
- - {nickNameStatusMessage} - - {lengthIndicator} -
-
- - -
- ); -}; - -export default NicknameSetup; diff --git a/services/one-app/src/app/(site)/lost-found/[lostId]/edit/page.tsx b/services/one-app/src/app/(site)/lost-found/[lostId]/edit/page.tsx deleted file mode 100644 index b82a536e9..000000000 --- a/services/one-app/src/app/(site)/lost-found/[lostId]/edit/page.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { SuspenseQueryBoundary } from '@/common/components'; - -import LostFoundEdit from '../../_components/LostFoundEdit'; - -type Props = { - params: Promise<{ - lostId: string; - }>; -}; - -export default async function LostFoundEditPage({ params }: Props) { - const { lostId } = await params; - - return ( - error
} suspenseFallback={
loading
}> - - - ); -} diff --git a/services/one-app/src/app/(site)/lost-found/[lostId]/page.tsx b/services/one-app/src/app/(site)/lost-found/[lostId]/page.tsx deleted file mode 100644 index 9bf54eac8..000000000 --- a/services/one-app/src/app/(site)/lost-found/[lostId]/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -'use client'; - -import { SuspenseQueryBoundary, ArticleDetailSuspenseFallback } from '@/common/components'; - -import { LostFoundPostDetail } from '../_components'; - -type Props = { - params: Promise<{ - lostId: number; - }>; -}; - -export default async function LostFoundDetailPage({ params }: Props) { - const { lostId } = await params; - - return ( -
-
- error
} - suspenseFallback={} - > - - -
- - ); -} diff --git a/services/one-app/src/app/(site)/lost-found/_components/LostFoundCreate.tsx b/services/one-app/src/app/(site)/lost-found/_components/LostFoundCreate.tsx deleted file mode 100644 index b90f3527a..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/LostFoundCreate.tsx +++ /dev/null @@ -1,9 +0,0 @@ -'use client'; - -import LostFoundForm from './LostFoundForm'; - -const LostFoundCreate = () => { - return ; -}; - -export default LostFoundCreate; diff --git a/services/one-app/src/app/(site)/lost-found/_components/LostFoundDetail.tsx b/services/one-app/src/app/(site)/lost-found/_components/LostFoundDetail.tsx deleted file mode 100644 index 0638d0d16..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/LostFoundDetail.tsx +++ /dev/null @@ -1,15 +0,0 @@ -'use client'; - -import { useGetLostFoundDetail } from '../_lib/get'; - -type Params = { - lostId: string; -}; - -const LostFoundDetail = ({ lostId }: Params) => { - const { data } = useGetLostFoundDetail(Number(lostId)); - - return
{data?.title}
; -}; - -export default LostFoundDetail; diff --git a/services/one-app/src/app/(site)/lost-found/_components/LostFoundEdit.tsx b/services/one-app/src/app/(site)/lost-found/_components/LostFoundEdit.tsx deleted file mode 100644 index 85874bedb..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/LostFoundEdit.tsx +++ /dev/null @@ -1,14 +0,0 @@ -'use client'; - -import LostFoundForm from './LostFoundForm'; - -import useFormAdapter from '../_hook/useFormAdapter'; - -const LostFoundEdit = ({ lostId }: { lostId: string }) => { - const lostFoundFormData = useFormAdapter({ - lostId: Number(lostId), - }); - return ; -}; - -export default LostFoundEdit; diff --git a/services/one-app/src/app/(site)/lost-found/_components/LostFoundForm.tsx b/services/one-app/src/app/(site)/lost-found/_components/LostFoundForm.tsx deleted file mode 100644 index 0a2ea0f64..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/LostFoundForm.tsx +++ /dev/null @@ -1,208 +0,0 @@ -'use client'; - -import { useState } from 'react'; - -import { type EditorState } from 'lexical'; -import { useRouter } from 'next/navigation'; - -import { Editor } from '@/app/(site)/_component/Editor'; -import ArrowLeftIcon from '@/common/assets/icons/arrow-left'; -import CloseCircleIcon from '@/common/assets/icons/close-circle'; -import ImagePlaceHolder from '@/common/assets/icons/image-placeholder'; -import createFormData from '@/lib/createFormData'; -import type { LostFoundFormData } from '@/model/LostFound'; - -import SelectLineDrawer from './SelectLineDrawer'; - -import useFormImage from '../_hook/useFormImage'; -import useFormInitialize from '../_hook/useFormInitialize'; -import { usePostLostFound } from '../_lib/post'; - -type Props = { - lostId?: string | null; - initialFormData?: LostFoundFormData | null; -}; - -const LostFoundForm = ({ lostId = null, initialFormData = null }: Props) => { - const router = useRouter(); - - const { mutate: lostFoundMutate } = usePostLostFound((id: string) => { - router.push(`/lost-found/${id}`); - }); - - const { images, setImages, removeImageIds, handleFileChange, onDeleteImage } = useFormImage(); - - const [subwayLineId, setSubwayLineId] = useState(1); - const [title, setTitle] = useState(''); - const [lostType, setLostType] = useState('LOST'); - const [editorContent, setEditorContent] = useState(null); - - const isActiveSubmitButton = !!title && !!subwayLineId && !!editorContent; - - const onSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - - const contentData = { - title, - content: editorContent, - subwayLineId, - lostType, - ...(lostId && removeImageIds.length && { removeImageIds }), - }; - - const postData = createFormData({ - jsonDataKey: 'content', - jsonData: contentData, - fileDataKey: 'files', - fileData: images.flatMap(image => (image.data !== null ? [image.data] : [])), - }); - lostFoundMutate({ lostId, postData }); - }; - - const onChangeEditorContent = (editorState: EditorState | null) => { - if (editorState) { - setEditorContent(JSON.stringify(editorState.toJSON())); - } else { - setEditorContent(null); - } - }; - - useFormInitialize({ - initialFormData, - initCallback: ({ title, initialContent, subwayLineId, images }) => { - setTitle(title); - setEditorContent(initialContent); - setSubwayLineId(subwayLineId); - setImages(images); - }, - }); - - return ( -
-
- - -
-
-
-

์œ ์‹ค๋ฌผ ์ƒ์„ธ์ •๋ณด

-
- - {images.map((image, index) => { - return ( -
- {`Uploaded - -
- ); - })} -
-
- -
-
-

์นดํ…Œ๊ณ ๋ฆฌ

- -
-
- setLostType(e.target.value)} - className="peer/lost hidden" - /> - - - setLostType(e.target.value)} - className="peer/acquire hidden" - /> - -
-
-
-
-

ํ˜ธ์„  ์„ ํƒ

- -
- -
-
-
-

์ œ๋ชฉ

- -
- setTitle(e.target.value)} - className="w-full border py-3 pl-3 pr-4 outline-none rounded-[5px] text-body-large-semi text-gray-90 placeholder:text-gray-70" - /> -
-
-
-

์ž์„ธํ•œ ์„ค๋ช…

- -
- -
-
-
- ); -}; - -export default LostFoundForm; diff --git a/services/one-app/src/app/(site)/lost-found/_components/SelectLineDrawer.tsx b/services/one-app/src/app/(site)/lost-found/_components/SelectLineDrawer.tsx deleted file mode 100644 index 6a50cf469..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/SelectLineDrawer.tsx +++ /dev/null @@ -1,135 +0,0 @@ -'use client'; - -import { useState, useEffect, useCallback } from 'react'; - -import clsx from 'clsx'; - -import ArrowDownIcon from '@/common/assets/icons/arrow-down'; -import { Carousel, CarouselContent, CarouselItem } from '@/common/components/Carousel'; -import { type CarouselApi } from '@/common/components/Carousel'; -import { - Drawer, - DrawerTrigger, - DrawerClose, - DrawerContent, - DrawerHeader, - DrawerFooter, - DrawerTitle, - DrawerDescription, -} from '@/common/components/Drawer'; -import SUBWAY_LINES from '@/common/constants/subwayLines'; -import { cn } from '@/common/utils/cn'; - -const CAROUSEL_SUBWAY_LINES = SUBWAY_LINES.reduce( - (acc, _, index) => { - if (index % 12 === 0) { - acc.push(SUBWAY_LINES.slice(index, index + 12)); - } - return acc; - }, - [] as Array<{ name: string; id: number }[]>, -); - -const DotButton = ({ active, onClick }: { active: boolean; onClick: () => void }) => { - const buttonClass = clsx('h-2 rounded-full cursor-pointer transition-width duration-300', { - 'w-[15px] bg-[#33333E]': active, - 'w-2 bg-[#CED0DD]': !active, - }); - - return - - -
- - ํ˜ธ์„  ๋ณ€๊ฒฝ - - ์†Œ์‹์ด ๊ถ๊ธˆํ•œ ํ˜ธ์„ ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. - - - - - {CAROUSEL_SUBWAY_LINES.map(lines => { - return ( - - {lines.map(line => { - return ( -
- - -
- ); - })} -
- ); - })} -
-
-
- {CAROUSEL_SUBWAY_LINES.map((_, index) => { - return ( - onClickDotButton(index)} - /> - ); - })} -
- - - - - -
-
- - ); -}; - -export default SelectLineDrawer; diff --git a/services/one-app/src/app/(site)/lost-found/_components/index.ts b/services/one-app/src/app/(site)/lost-found/_components/index.ts deleted file mode 100644 index a43e09157..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './postDetail'; -export * from './searchResults'; diff --git a/services/one-app/src/app/(site)/lost-found/_components/postDetail/CommentList.tsx b/services/one-app/src/app/(site)/lost-found/_components/postDetail/CommentList.tsx deleted file mode 100644 index 66156939b..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/postDetail/CommentList.tsx +++ /dev/null @@ -1,42 +0,0 @@ -'use client'; - -import { BookmarkIcon } from '@/common/assets/icons'; -import { - BaseCommentList, - SuspenseQueryBoundary, - CommentListSuspenseFallback, -} from '@/common/components'; - -import { useGetLostFoundComments } from '../../_lib'; - -interface Props { - commentCnt: number; - articleId: number; -} - -export const CommentListInner = ({ articleId }: Pick) => { - const { data } = useGetLostFoundComments(articleId); - - return ; -}; - -export const LostFoundCommentList = ({ commentCnt, articleId }: Props) => { - return ( -
-
-
- ๋Œ“๊ธ€ - {commentCnt} -
- -
- } - suspenseFallback={} - keys={[articleId]} - > - - -
- ); -}; diff --git a/services/one-app/src/app/(site)/lost-found/_components/postDetail/index.ts b/services/one-app/src/app/(site)/lost-found/_components/postDetail/index.ts deleted file mode 100644 index 81b45b21c..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/postDetail/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './PostDetail'; -export * from './CommentList'; -export * from './LostTypeBadge'; -export * from './Lost112ArticleTable'; -export * from './RecommendArticles'; diff --git a/services/one-app/src/app/(site)/lost-found/_components/searchResults/filterList/FilterList.tsx b/services/one-app/src/app/(site)/lost-found/_components/searchResults/filterList/FilterList.tsx deleted file mode 100644 index 0fa4a64fe..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/searchResults/filterList/FilterList.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { ResetFilter, SearchFilter, DropdownFilter } from '@/common/components'; -import { subwayLineIdOptions } from '@/common/constants'; -import { type LostFoundFilters, LostFoundType } from '@/model'; -import { FilterState } from '@/store'; - -const lostTypeOptions = { - [LostFoundType.LOST]: '๋ถ„์‹ค๋ฌผ', - [LostFoundType.ACQUIRE]: '์Šต๋“๋ฌผ', -}; - -interface LostFoundFilterListProps extends Omit, 'loaded'> {} - -export const LostFoundFilterList = ({ - filters, - activatedCount, - handleSelect, - handleReset, -}: LostFoundFilterListProps) => { - return ( -
- -
- - - -
-
- ); -}; diff --git a/services/one-app/src/app/(site)/lost-found/_components/searchResults/filterList/index.ts b/services/one-app/src/app/(site)/lost-found/_components/searchResults/filterList/index.ts deleted file mode 100644 index e20122849..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/searchResults/filterList/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './FilterList'; diff --git a/services/one-app/src/app/(site)/lost-found/_components/searchResults/index.ts b/services/one-app/src/app/(site)/lost-found/_components/searchResults/index.ts deleted file mode 100644 index a97766c6d..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/searchResults/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './filterList'; -export * from './searchedList'; diff --git a/services/one-app/src/app/(site)/lost-found/_components/searchResults/searchedList/SearchedList.tsx b/services/one-app/src/app/(site)/lost-found/_components/searchResults/searchedList/SearchedList.tsx deleted file mode 100644 index 596a26b7f..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/searchResults/searchedList/SearchedList.tsx +++ /dev/null @@ -1,56 +0,0 @@ -'use client'; - -import { useMemo } from 'react'; - -import Link from 'next/link'; - -import { useGetLostFoundList } from '@/app/(site)/lost-found/_lib/get'; -import { ArticleCard, EmptyArticleList } from '@/common/components'; -import { useIntersectionObserver } from '@/common/hooks'; -import { flattenInfinityList, formatSubwayLineId } from '@/common/utils'; -import type { LostFoundFilters } from '@/model'; - -interface Props { - keyword: string | null; - filters: LostFoundFilters; -} - -export const LostFoundSearchedList = ({ keyword, filters }: Props) => { - const temporaryUserFavoriteLineId = 1; // TODO: ์ถ”ํ›„ ์œ ์ €๊ฐ€ ์ฆ๊ฒจ์ฐพ๋Š” ์—ญ ์„ค์žฅํ•˜๋Š” ํ”ผ์ณ ๊ฐœ๋ฐœ ํ›„ ์ˆ˜์ •ํ•˜๊ธฐ - const subwayLineId = useMemo( - () => formatSubwayLineId(filters.subwayLineId, temporaryUserFavoriteLineId), - [filters.subwayLineId], - ); - - const { data, hasNextPage, isFetchingNextPage, fetchNextPage } = useGetLostFoundList({ - pageSize: 40, - keyword, - subwayLineId, - lostType: filters.lostType, - }); - - const lostArticles = flattenInfinityList(data); - const intersectCallback = () => !isFetchingNextPage && fetchNextPage(); - const { ref: loadMoreRef } = useIntersectionObserver({ - callback: intersectCallback, - }); - - if (!lostArticles.length) return ; - - return ( -
- {lostArticles.map((item, idx) => ( - - - - ))} - {hasNextPage && ( - - ๋” ๋ณด๊ธฐ - - )} -
- ); -}; - -export default LostFoundSearchedList; diff --git a/services/one-app/src/app/(site)/lost-found/_components/searchResults/searchedList/index.ts b/services/one-app/src/app/(site)/lost-found/_components/searchResults/searchedList/index.ts deleted file mode 100644 index 99498b23f..000000000 --- a/services/one-app/src/app/(site)/lost-found/_components/searchResults/searchedList/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './SearchedList'; diff --git a/services/one-app/src/app/(site)/lost-found/_hook/useFormAdapter.tsx b/services/one-app/src/app/(site)/lost-found/_hook/useFormAdapter.tsx deleted file mode 100644 index 0b25f87cb..000000000 --- a/services/one-app/src/app/(site)/lost-found/_hook/useFormAdapter.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { useMemo } from 'react'; - -import type { LostFoundFormData } from '@/model/LostFound'; - -import { useGetLostFoundDetail } from '../_lib/get'; - -type UseLostFoundFormAdapter = ({ lostId }: { lostId: number }) => LostFoundFormData; - -const DEFAULT_DATA: LostFoundFormData = { - title: '', - initialContent: '', - subwayLineId: 1, - lostType: 'LOST' as LostFoundFormData['lostType'], - images: [], -} as const; - -const useLostFoundFormAdapter: UseLostFoundFormAdapter = ({ lostId }) => { - const { data } = useGetLostFoundDetail(lostId); - - const result = useMemo(() => { - if (!data) { - return DEFAULT_DATA; - } - - return { - title: data.title ?? '', - initialContent: data.content ?? '', - subwayLineId: data.subwayLineId ?? 1, - lostType: data.lostType ?? 'LOST', - images: - data.images.map(image => ({ - id: image.imageId ?? null, - data: null, - url: image.imageUrl, - })) ?? [], - }; - }, [data]); - - return result; -}; - -export default useLostFoundFormAdapter; diff --git a/services/one-app/src/app/(site)/lost-found/_hook/useFormImage.tsx b/services/one-app/src/app/(site)/lost-found/_hook/useFormImage.tsx deleted file mode 100644 index 933dd0126..000000000 --- a/services/one-app/src/app/(site)/lost-found/_hook/useFormImage.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { useState } from 'react'; - -import type { DetailImages } from '@/model/LostFound'; - -const MAX_IMAGE_LENGTH = 5; -const MAX_FILE_SIZE = 10 * 1024 * 1024; - -const useFormImage = () => { - const [images, setImages] = useState([]); - const [removeImageIds, setRemoveImageIds] = useState([]); - - const handleFileChange = (e: React.ChangeEvent) => { - if (images.length >= MAX_IMAGE_LENGTH) { - alert(`์ด๋ฏธ์ง€๋Š” ์ตœ๋Œ€ ${MAX_IMAGE_LENGTH}์žฅ๊นŒ์ง€ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.`); - return; - } - - const fileBlob = e.target.files?.[0]; - if (!fileBlob) return; - if (fileBlob.size > MAX_FILE_SIZE) { - alert(`ํŒŒ์ผ ์šฉ๋Ÿ‰์€ ์ตœ๋Œ€ ${MAX_FILE_SIZE / 1024 / 1024}MB๊นŒ์ง€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.`); - return; - } - - const fileUrl = URL.createObjectURL(fileBlob); - setImages(prev => [...prev, { id: null, data: fileBlob, url: fileUrl }]); - e.target.value = ''; - }; - - const onDeleteImage = (index: number) => { - const targetImageId = images[index].id; - if (targetImageId !== null) { - setRemoveImageIds(prev => [...prev, targetImageId]); - } - setImages(prev => prev.filter((_, i) => i !== index)); - }; - - return { images, setImages, removeImageIds, handleFileChange, onDeleteImage }; -}; - -export default useFormImage; diff --git a/services/one-app/src/app/(site)/lost-found/_hook/useFormInitialize.tsx b/services/one-app/src/app/(site)/lost-found/_hook/useFormInitialize.tsx deleted file mode 100644 index 6e0210599..000000000 --- a/services/one-app/src/app/(site)/lost-found/_hook/useFormInitialize.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { useEffect } from 'react'; - -import type { LostFoundFormData } from '@/model/LostFound'; - -type Params = { - initialFormData: LostFoundFormData | null; - initCallback: (params: LostFoundFormData) => void; -}; - -const useLostFoundFormInitialize = ({ initialFormData, initCallback }: Params) => { - useEffect(() => { - if (initialFormData) { - initCallback(initialFormData); - } - }, [initialFormData]); -}; - -export default useLostFoundFormInitialize; diff --git a/services/one-app/src/app/(site)/lost-found/_lib/comments.ts b/services/one-app/src/app/(site)/lost-found/_lib/comments.ts deleted file mode 100644 index 8abd847a6..000000000 --- a/services/one-app/src/app/(site)/lost-found/_lib/comments.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { useSuspenseQuery, useMutation } from '@tanstack/react-query'; - -import { apiClient } from '@/app/api'; -import { TIMESTAMP } from '@/common/constants'; -import { generateQueryKey } from '@/common/utils'; -import type { IResponse, Comment, CommentList } from '@/model'; - -const getLostFoundComments = (articleId: number) => - apiClient.get>(`/lost-posts/${articleId}/comments`); - -export const useGetLostFoundComments = (articleId: number) => - useSuspenseQuery({ - queryKey: generateQueryKey(['LOST_FOUND']).comments(articleId), - queryFn: () => getLostFoundComments(articleId), - staleTime: 5 * TIMESTAMP.MINUTE, // default: 5๋ถ„, ๊ธ€ ์ˆ˜์ • ์‹œ์—๋Š” ๋”ฐ๋กœ ์—…๋ฐ์ดํŠธ ๊ด€๋ฆฌ - select: res => { - return res.data.result; - }, - }); - -export const postLostFoundComment = async (data: { - articleId: number; - content: string; - upperCommentId?: number; - isPrivate?: boolean; -}) => { - const { articleId, content, upperCommentId = null, isPrivate = false } = data; - const response = await apiClient.post< - IResponse> - >(`/lost-found/${articleId}/comments`, { - content, - upperCommentId, - isPrivate, - }); - return response.data; -}; - -export const useLostFoundPostComment = () => { - return useMutation({ - mutationFn: postLostFoundComment, - }); -}; diff --git a/services/one-app/src/app/(site)/lost-found/_lib/get.ts b/services/one-app/src/app/(site)/lost-found/_lib/get.ts deleted file mode 100644 index b0435c9d2..000000000 --- a/services/one-app/src/app/(site)/lost-found/_lib/get.ts +++ /dev/null @@ -1,44 +0,0 @@ -'use client'; - -import { useSuspenseQuery, useSuspenseInfiniteQuery } from '@tanstack/react-query'; - -import { apiClient } from '@/app/api'; -import { TIMESTAMP } from '@/common/constants'; -import { generateQueryKey, objectToQueryString } from '@/common/utils'; -import type { - IResponse, - ListResponseWithPagination, - LostFoundPost, - LostFoundPostDetail, - LostFoundListParams, -} from '@/model'; - -const getLostFoundList = (params: LostFoundListParams) => - apiClient.get>>( - `/lost-posts?${objectToQueryString(params, { removeZero: true })}`, - ); - -export const useGetLostFoundList = (params: LostFoundListParams) => - useSuspenseInfiniteQuery({ - queryKey: generateQueryKey(['LOST_FOUND']).list({ params }), - queryFn: ({ pageParam = params.pageToken }) => - getLostFoundList({ - ...params, - ...(pageParam && { pageToken: pageParam }), - }), - initialPageParam: '', - getNextPageParam: lastPage => lastPage.data.result.pageToken, - gcTime: TIMESTAMP.MINUTE, - staleTime: TIMESTAMP.SECOND, - }); - -const getLostFoundDetail = (id: number) => - apiClient.get>(`/lost-posts/${id}`); - -export const useGetLostFoundDetail = (id: number) => - useSuspenseQuery({ - queryKey: generateQueryKey(['LOST_FOUND']).detail(id), - queryFn: () => getLostFoundDetail(id), - staleTime: 5 * TIMESTAMP.MINUTE, - select: res => res.data.result, - }); diff --git a/services/one-app/src/app/(site)/lost-found/_lib/index.ts b/services/one-app/src/app/(site)/lost-found/_lib/index.ts deleted file mode 100644 index 54aaf8468..000000000 --- a/services/one-app/src/app/(site)/lost-found/_lib/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './get'; -export * from './comments'; -export * from './useLostFoundComment'; -export * from './useLostFoundFilterStore'; diff --git a/services/one-app/src/app/(site)/lost-found/_lib/post.ts b/services/one-app/src/app/(site)/lost-found/_lib/post.ts deleted file mode 100644 index 44e6b6153..000000000 --- a/services/one-app/src/app/(site)/lost-found/_lib/post.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { useMutation } from '@tanstack/react-query'; - -import { apiClient } from '@/app/api'; -import type { ErrorCode } from '@/model/Error'; - -type PostLostFoundParams = { - lostId: string | null; - postData: FormData; -}; - -const postLostFound = ({ lostId, postData }: PostLostFoundParams) => - apiClient.post(`/lost-posts/${lostId || ''}`, postData, { - headers: { - 'Content-Type': 'multipart/form-data', - }, - }); - -export const usePostLostFound = (successCallback: (id: string) => void) => { - return useMutation({ - mutationFn: (params: PostLostFoundParams) => postLostFound(params), - onError: () => { - alert('์œ ์‹ค๋ฌผ ๋“ฑ๋ก ์—๋Ÿฌ ๋ฐœ์ƒ'); - }, - onSuccess: (res: { data: { code: ErrorCode; result: { id: string } } }) => { - const { - data: { - code, - result: { id }, - }, - } = res; - - if (code === '100') { - successCallback(id); - } - }, - }); -}; diff --git a/services/one-app/src/app/(site)/lost-found/_lib/useLostFoundComment.ts b/services/one-app/src/app/(site)/lost-found/_lib/useLostFoundComment.ts deleted file mode 100644 index 4944daf74..000000000 --- a/services/one-app/src/app/(site)/lost-found/_lib/useLostFoundComment.ts +++ /dev/null @@ -1,27 +0,0 @@ -'use client'; - -import { useRef } from 'react'; - -import type { EditorState } from 'lexical'; - -import { useLostFoundPostComment } from './comments'; - -export const useLostFoundComment = (articleId: number) => { - const content = useRef(''); - const { mutate: postComment } = useLostFoundPostComment(); - - const handleChangeComment = (val: EditorState | null) => { - content.current = JSON.stringify(val ? val.toJSON() : null); - }; - - const handleSubmitComment = () => { - postComment({ - articleId, - content: content.current, - }); - }; - return { - handleChangeComment, - handleSubmitComment, - }; -}; diff --git a/services/one-app/src/app/(site)/lost-found/_lib/useLostFoundFilterStore.ts b/services/one-app/src/app/(site)/lost-found/_lib/useLostFoundFilterStore.ts deleted file mode 100644 index e558fa413..000000000 --- a/services/one-app/src/app/(site)/lost-found/_lib/useLostFoundFilterStore.ts +++ /dev/null @@ -1,38 +0,0 @@ -'use client'; - -import { useQueryState } from 'nuqs'; - -import { LostFoundType, type LostFoundFilters } from '@/model'; -import { SubwayLineFilterOptions } from '@/model/Subway'; -import { FilterState, APP_UNIQUE_FILTER_ID_LIST, createFilterStoreWithPersist } from '@/store'; - -const LOST_FOUND_FILTER_DEFAULT_VALUES: LostFoundFilters = { - lostType: LostFoundType.LOST, - subwayLineId: SubwayLineFilterOptions.ALL_LINES, -} as const; - -export const useLostFoundFilters = () => { - const [keyword] = useQueryState('keyword'); - const { filters, loaded, activatedCount, handleSelect, handleReset } = - createFilterStoreWithPersist( - LOST_FOUND_FILTER_DEFAULT_VALUES, - APP_UNIQUE_FILTER_ID_LIST.LOST_FOUND, - )(); - - const boundaryKeys = [...Object.values(filters), keyword]; - - const getFilterProps = (): Omit, 'loaded'> => ({ - filters, - activatedCount, - handleSelect, - handleReset, - }); - - return { - loaded, - filters, - keyword, - boundaryKeys, - getFilterProps, - }; -}; diff --git a/services/one-app/src/app/(site)/lost-found/create/page.tsx b/services/one-app/src/app/(site)/lost-found/create/page.tsx deleted file mode 100644 index 6161d63af..000000000 --- a/services/one-app/src/app/(site)/lost-found/create/page.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import LostFoundCreate from '../_components/LostFoundCreate'; - -const LostFoundCreatePage = () => { - return ( -
- -
- ); -}; - -export default LostFoundCreatePage; diff --git a/services/one-app/src/app/(site)/lost-found/page.tsx b/services/one-app/src/app/(site)/lost-found/page.tsx deleted file mode 100644 index e3da5a372..000000000 --- a/services/one-app/src/app/(site)/lost-found/page.tsx +++ /dev/null @@ -1,38 +0,0 @@ -'use client'; - -import { Suspense } from 'react'; - -import { Spinner, SuspenseQueryBoundary, ArticleListSuspenseFallback } from '@/common/components'; - -import { LostFoundFilterList, LostFoundSearchedList } from './_components'; -import { useLostFoundFilters } from './_lib'; - -function LostFound() { - const { loaded, keyword, filters, boundaryKeys, getFilterProps } = useLostFoundFilters(); - - return loaded ? ( -
-
- - {}} - errorFallback={
error
} - suspenseFallback={} - > - -
-
-
- ) : ( - - ); -} - -export default function LostFoundPage() { - return ( - }> - - - ); -} diff --git a/services/one-app/src/app/(site)/my/_lib/index.ts b/services/one-app/src/app/(site)/my/_lib/index.ts deleted file mode 100644 index e6eb352ab..000000000 --- a/services/one-app/src/app/(site)/my/_lib/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './updateUser'; diff --git a/services/one-app/src/app/(site)/my/_lib/updateUser.ts b/services/one-app/src/app/(site)/my/_lib/updateUser.ts deleted file mode 100644 index 1dc17abaa..000000000 --- a/services/one-app/src/app/(site)/my/_lib/updateUser.ts +++ /dev/null @@ -1,49 +0,0 @@ -import axios from 'axios'; -import { z } from 'zod'; - -import { API_BASE_URL, RESPONSE_MESSAGES, APIResponseCode } from '@/common/constants'; -import type { TemporaryUserAuthData } from '@/store'; - -const GenderSchema = z.enum(['MALE', 'FEMALE']).nullable(); - -const AgeRangeSchema = z - .enum(['1', '10', '20', '30', '40', '50', '60', '70', '80', '90']) - .nullable(); - -const UpdateUserResponseSchema = z.object({ - code: z.literal(APIResponseCode.SUCCESS), - message: z.literal(RESPONSE_MESSAGES[APIResponseCode.SUCCESS]), - result: z.object({ - nickname: z.string(), - gender: GenderSchema, - ageRange: AgeRangeSchema, - }), -}); - -type UpdateUserResponse = z.infer; - -export const updateUser = async (data: { nickname: string; auth: TemporaryUserAuthData }) => { - try { - const accessToken = data.auth.accessToken; - const res = await axios.patch( - `${API_BASE_URL}/members`, - { nickname: data.nickname }, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - - return UpdateUserResponseSchema.parse(res.data); - } catch (error) { - if (axios.isAxiosError(error)) { - throw new Error(`Update user failed: ${error.response?.data?.message || error.message}`); - } else if (error instanceof z.ZodError) { - throw new Error(`Validation failed: ${error.errors.map(e => e.message).join(', ')}`); - } else { - console.error('Unexpected error during user update:', error); - throw new Error('An unexpected error occurred during user update.'); - } - } -}; diff --git a/services/one-app/src/app/(site)/not-found.tsx b/services/one-app/src/app/(site)/not-found.tsx deleted file mode 100644 index 2e7973e44..000000000 --- a/services/one-app/src/app/(site)/not-found.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { NextPage } from 'next'; -import Link from 'next/link'; - -const NotFound: NextPage = () => { - return ( -
-
์ด ํŽ˜์ด์ง€๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ๊ฒฝํ•ด๋ณด์„ธ์š”.
- ์ด๋™ -
- ); -}; - -export default NotFound; diff --git a/services/one-app/src/app/(site)/page.tsx b/services/one-app/src/app/(site)/page.tsx deleted file mode 100644 index ddb477586..000000000 --- a/services/one-app/src/app/(site)/page.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import Link from 'next/link'; - -import LoggedIn from './_component/LoggedIn'; - -export default function Home() { - return ( -
-
- ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ - - ์œ ์‹ค๋ฌผ ํŽ˜์ด์ง€ - ์œ ์‹ค๋ฌผ ๋“ฑ๋กํ•˜๊ธฐ -
-
- ); -} diff --git a/services/one-app/src/app/(user)/messages/page.tsx b/services/one-app/src/app/(user)/messages/page.tsx new file mode 100644 index 000000000..b1b1bfee6 --- /dev/null +++ b/services/one-app/src/app/(user)/messages/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
MyPage
; +} diff --git a/services/one-app/src/app/(user)/notifications/page.tsx b/services/one-app/src/app/(user)/notifications/page.tsx new file mode 100644 index 000000000..e47d84faa --- /dev/null +++ b/services/one-app/src/app/(user)/notifications/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Hi
; +} diff --git a/services/one-app/src/app/(user)/user/[username]/page.tsx b/services/one-app/src/app/(user)/user/[username]/page.tsx new file mode 100644 index 000000000..b1b1bfee6 --- /dev/null +++ b/services/one-app/src/app/(user)/user/[username]/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
MyPage
; +} diff --git a/services/one-app/src/app/_components/AuthSession.tsx b/services/one-app/src/app/_components/AuthSession.tsx new file mode 100644 index 000000000..687c52f79 --- /dev/null +++ b/services/one-app/src/app/_components/AuthSession.tsx @@ -0,0 +1,9 @@ +'use client'; + +type Props = { + children: React.ReactNode; +}; + +export default function AuthSession({ children }: Props) { + return
{children}
; +} diff --git a/services/one-app/src/app/_components/Header.tsx b/services/one-app/src/app/_components/Header.tsx new file mode 100644 index 000000000..cbd0c7526 --- /dev/null +++ b/services/one-app/src/app/_components/Header.tsx @@ -0,0 +1,88 @@ +import Link from 'next/link'; + +export default function Header() { + return ( +
+ + + +
    +
  • + + + + + + + + +
  • +
  • + + + + + + +
  • +
+
+ ); +} diff --git a/services/one-app/src/app/_components/NavMenu.tsx b/services/one-app/src/app/_components/NavMenu.tsx new file mode 100644 index 000000000..cd988f38b --- /dev/null +++ b/services/one-app/src/app/_components/NavMenu.tsx @@ -0,0 +1,273 @@ +'use client'; + +import Link from 'next/link'; +import { usePathname } from 'next/navigation'; + +import { cn } from '@/util'; + +export default function NavMenu() { + const pathname = usePathname(); + + if (['/', '/community', '/lost-found', '/complaint', '/me'].includes(pathname)) { + return ( + + ); + } else { + return null; + } +} diff --git a/services/one-app/src/app/_components/RQProvider.tsx b/services/one-app/src/app/_components/RQProvider.tsx deleted file mode 100644 index c4333aae7..000000000 --- a/services/one-app/src/app/_components/RQProvider.tsx +++ /dev/null @@ -1,33 +0,0 @@ -'use client'; - -import React, { useState } from 'react'; - -import { QueryClientProvider, QueryClient } from '@tanstack/react-query'; -import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; - -type Props = { - children: React.ReactNode; -}; - -export const RQProvider = ({ children }: Props) => { - const [client] = useState( - new QueryClient({ - defaultOptions: { - // react-query ์ „์—ญ ์„ค์ • - queries: { - retry: false, - retryOnMount: true, - refetchOnReconnect: false, - refetchOnWindowFocus: false, - }, - }, - }), - ); - - return ( - - {children} - - - ); -}; diff --git a/services/one-app/src/app/_components/WelcomeMessage.spec.tsx b/services/one-app/src/app/_components/WelcomeMessage.spec.tsx new file mode 100644 index 000000000..683f18062 --- /dev/null +++ b/services/one-app/src/app/_components/WelcomeMessage.spec.tsx @@ -0,0 +1,28 @@ +import { render, screen } from '@testing-library/react'; + +import WelcomeMessage from './WelcomeMessage'; + +describe('WelcomeMessage', () => { + it('renders username correctly', () => { + render(); + expect(screen.getByText('์•„ํ•˜์ฒ ๋‹˜,')).toBeInTheDocument(); + }); + + it('renders a greeting phrase', () => { + render(); + + const greetingPhrases = [ + '๋ฉ‹์ง„ ์˜ค๋Š˜์„ ์‘์›ํ•ด์š”', + '์ •๋ง ์ž˜ํ•˜๊ณ  ์žˆ์–ด์š”', + '์–ธ์ œ๋‚˜ ๋Š˜ ์‘์›ํ• ๊ฒŒ์š”', + '๋งค์ผ๋งค์ผ ๋ฐ˜๊ฐ€์›Œ์š”!', + 'ํž˜์ฐจ๊ฒŒ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”?', + 'ํ™œ์ง ์›ƒ๋Š” ํ•˜๋ฃจ๋˜์„ธ์š”', + 'ํ•˜๋‚˜์”ฉ ์ด๋ค„๊ฐ€๋ณผ๊นŒ์š”?', + '๋ชฉํ‘œ์— ํ•œ ๊ฑธ์Œ ๋‹ค๊ฐ€๊ฐ€์š”!', + ]; + + const greeting = screen.getByText(content => greetingPhrases.includes(content)); + expect(greeting).toBeInTheDocument(); + }); +}); diff --git a/services/one-app/src/app/_components/WelcomeMessage.tsx b/services/one-app/src/app/_components/WelcomeMessage.tsx new file mode 100644 index 000000000..7cc55fd52 --- /dev/null +++ b/services/one-app/src/app/_components/WelcomeMessage.tsx @@ -0,0 +1,29 @@ +const GREETING_PHRASES = [ + '๋ฉ‹์ง„ ์˜ค๋Š˜์„ ์‘์›ํ•ด์š”', + '์ •๋ง ์ž˜ํ•˜๊ณ  ์žˆ์–ด์š”', + '์–ธ์ œ๋‚˜ ๋Š˜ ์‘์›ํ• ๊ฒŒ์š”', + '๋งค์ผ๋งค์ผ ๋ฐ˜๊ฐ€์›Œ์š”!', + 'ํž˜์ฐจ๊ฒŒ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”?', + 'ํ™œ์ง ์›ƒ๋Š” ํ•˜๋ฃจ๋˜์„ธ์š”', + 'ํ•˜๋‚˜์”ฉ ์ด๋ค„๊ฐ€๋ณผ๊นŒ์š”?', + '๋ชฉํ‘œ์— ํ•œ ๊ฑธ์Œ ๋‹ค๊ฐ€๊ฐ€์š”!', +] as const; + +type GreetingPhrase = (typeof GREETING_PHRASES)[number]; + +const getRandomGreeting = (): GreetingPhrase => { + return GREETING_PHRASES[Math.floor(Math.random() * GREETING_PHRASES.length)]; +}; + +const greetingPhrase = getRandomGreeting(); + +const WelcomeMessage = () => { + return ( +

+ {'์•„ํ•˜์ฒ '}๋‹˜, + {greetingPhrase} +

+ ); +}; + +export default WelcomeMessage; diff --git a/services/one-app/src/app/_components/index.ts b/services/one-app/src/app/_components/index.ts deleted file mode 100644 index a7d2112a1..000000000 --- a/services/one-app/src/app/_components/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './RQProvider'; -export * from './MSWComponent'; diff --git a/services/one-app/src/app/api/index.ts b/services/one-app/src/app/api/index.ts deleted file mode 100644 index d6cf84d4b..000000000 --- a/services/one-app/src/app/api/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -import axios, { AxiosError, AxiosInstance, isAxiosError } from 'axios'; - -import { API_BASE_URL } from '@/common/constants'; -import { AuthService } from '@/common/service'; -import type { APIErrorResponse } from '@/model'; - -// TODO, access_token ์„ ํƒ์ ์œผ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์•ˆ ๋ชจ์ƒ‰ (axios type ํ™•์žฅ) -// publicํ•œ ํ•จ์ˆ˜(์ธ๊ธฐ ๊ฒ€์ƒ‰ ์ˆœ์œ„ ๋“ฑ)๋“ค์˜ ๊ฒฝ์šฐ ๊ตณ์ด access_token์ด ์—†์Œ์„ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Œ - -const setInterceptor = (instance: AxiosInstance) => { - instance.interceptors.request.use( - config => { - const requestConfig = config; - - // Access Token ์„ค์ • - const accessToken = AuthService.accessToken; - if (accessToken) { - requestConfig.headers.Authorization = `Bearer ${accessToken}`; - } - - return requestConfig; - }, - (err: AxiosError): Promise => Promise.reject(err), - ); - - // TODO, ์‘๋‹ต ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋‹ค๋“ฌ๊ธฐ - instance.interceptors.response.use( - response => response, - async error => { - if (isAxiosError(error) && error.response?.data) { - const { code } = error.response.data as APIErrorResponse; - - // console.log(code, error.response.data); - - if (code === '202') { - // ์•ก์„ธ์Šค ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ ์žฌ์š”์ฒญ - return AuthService.resetTokenAndRetryRequest(error); - } - - if (['201', '203', '204', '205'].includes(code)) { - // ์„ธ์…˜ ๋งŒ๋ฃŒ ์‹œ ๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌ - AuthService.expireSession(); - return Promise.reject(error); - } - } - - console.error(error); - return Promise.reject(error); - }, - ); - - return instance; -}; - -const apiClient = setInterceptor( - axios.create({ - baseURL: API_BASE_URL, - }), -); - -export { apiClient }; diff --git a/services/one-app/src/app/layout.tsx b/services/one-app/src/app/layout.tsx new file mode 100644 index 000000000..1da79e366 --- /dev/null +++ b/services/one-app/src/app/layout.tsx @@ -0,0 +1,61 @@ +import type { Metadata, Viewport } from 'next'; +import NextTopLoader from 'nextjs-toploader'; + +import { Pretendard } from '@/asset/font/pretendard'; +import Providers from '@/context/providers'; +import { cn } from '@/util/cn'; + +import Header from './_components/Header'; +import NavMenu from './_components/NavMenu'; +import './globals.css'; + +export const viewport: Viewport = { + themeColor: 'white', + width: 'device-width', + initialScale: 1, + maximumScale: 1, + userScalable: false, +}; + +export const metadata: Metadata = { + title: '์•„ํ•˜์ฒ  / 1๋“ฑ ์ง€ํ•˜์ฒ  ๋ฏผ์› & ์œ ์‹ค๋ฌผ & ์ปค๋ฎค๋‹ˆํ‹ฐ ์ •๋ณด ์•ฑ', + description: '์ง€ํ•˜์ฒ ์— ๋‹น์‹ ์˜ ๋”ฐ๋œปํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ฑ„์›Œ๋‚˜๊ฐ€์š”', + applicationName: '์•„ํ•˜์ฒ  | AhHachul', + keywords: [ + '์ง€ํ•˜์ฒ ', + '์ง€ํ•˜์ฒ  ๋ฏผ์›', + '์ง€ํ•˜์ฒ  ์œ ์‹ค๋ฌผ', + '์ง€ํ•˜์ฒ  ๋ถ„์‹ค๋ฌผ', + '1ํ˜ธ์„ ', + '2ํ˜ธ์„ ', + '3ํ˜ธ์„ ', + '4ํ˜ธ์„ ', + '5ํ˜ธ์„ ', + '6ํ˜ธ์„ ', + '7ํ˜ธ์„ ', + '8ํ˜ธ์„ ', + '9ํ˜ธ์„ ', + '์‹ ๋ถ„๋‹น์„ ', + '์ˆ˜์ธ๋ถ„๋‹น์„ ', + '๊ฒฝ์˜์ค‘์•™์„ ', + ].join(', '), +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + + +
+ {children} + + + + + ); +} diff --git a/services/one-app/src/app/not-found.tsx b/services/one-app/src/app/not-found.tsx new file mode 100644 index 000000000..51afe3439 --- /dev/null +++ b/services/one-app/src/app/not-found.tsx @@ -0,0 +1,19 @@ +import type { Metadata } from 'next'; +import Link from 'next/link'; + +export const metadata: Metadata = { + title: + '์š”์ฒญํ•˜์‹  ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค / ์•„ํ•˜์ฒ  - 1๋“ฑ ์ง€ํ•˜์ฒ  ๋ฏผ์› & ์œ ์‹ค๋ฌผ & ์ปค๋ฎค๋‹ˆํ‹ฐ ์ •๋ณด ์•ฑ', + description: '์š”์ฒญํ•˜์‹  ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค', +}; + +export default function NotFound() { + return ( +
+
์ด ํŽ˜์ด์ง€๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ๊ฒฝํ•ด๋ณด์„ธ์š”.
+ + ํ™ˆ์œผ๋กœ ์ด๋™ + +
+ ); +} diff --git a/services/one-app/src/app/page.tsx b/services/one-app/src/app/page.tsx new file mode 100644 index 000000000..947d1d1e2 --- /dev/null +++ b/services/one-app/src/app/page.tsx @@ -0,0 +1,17 @@ +import type { Metadata } from 'next'; + +import WelcomeMessage from '@/app/_components/WelcomeMessage'; + +export const metadata: Metadata = { + title: 'ํ™ˆ / 1๋“ฑ ์ง€ํ•˜์ฒ  ๋ฏผ์› & ์œ ์‹ค๋ฌผ & ์ปค๋ฎค๋‹ˆํ‹ฐ ์ •๋ณด ์•ฑ', + description: '์ง€ํ•˜์ฒ ์— ๋‹น์‹ ์˜ ๋”ฐ๋œปํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ฑ„์›Œ๋‚˜๊ฐ€์š”', + applicationName: '์•„ํ•˜์ฒ  | AhHachul', +}; + +export default function Home() { + return ( +
+ +
+ ); +} diff --git a/services/one-app/src/common/assets/fonts/pretendard/index.ts b/services/one-app/src/asset/font/pretendard/index.ts similarity index 100% rename from services/one-app/src/common/assets/fonts/pretendard/index.ts rename to services/one-app/src/asset/font/pretendard/index.ts diff --git a/services/one-app/src/common/assets/fonts/pretendard/pretendard-variable.woff2 b/services/one-app/src/asset/font/pretendard/pretendard-variable.woff2 similarity index 100% rename from services/one-app/src/common/assets/fonts/pretendard/pretendard-variable.woff2 rename to services/one-app/src/asset/font/pretendard/pretendard-variable.woff2 diff --git a/services/one-app/src/common/assets/graphics/character/index.ts b/services/one-app/src/asset/graphic/character/index.ts similarity index 100% rename from services/one-app/src/common/assets/graphics/character/index.ts rename to services/one-app/src/asset/graphic/character/index.ts diff --git a/services/one-app/src/common/assets/graphics/character/no-results.svg b/services/one-app/src/asset/graphic/character/no-results.svg similarity index 100% rename from services/one-app/src/common/assets/graphics/character/no-results.svg rename to services/one-app/src/asset/graphic/character/no-results.svg diff --git a/services/one-app/src/common/assets/graphics/index.ts b/services/one-app/src/asset/graphic/index.ts similarity index 100% rename from services/one-app/src/common/assets/graphics/index.ts rename to services/one-app/src/asset/graphic/index.ts diff --git a/services/one-app/src/common/assets/icons/alert-circle.tsx b/services/one-app/src/asset/icon/alert-circle.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/alert-circle.tsx rename to services/one-app/src/asset/icon/alert-circle.tsx diff --git a/services/one-app/src/common/assets/icons/apple.tsx b/services/one-app/src/asset/icon/apple.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/apple.tsx rename to services/one-app/src/asset/icon/apple.tsx diff --git a/services/one-app/src/common/assets/icons/arrow-down.tsx b/services/one-app/src/asset/icon/arrow-down.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/arrow-down.tsx rename to services/one-app/src/asset/icon/arrow-down.tsx diff --git a/services/one-app/src/common/assets/icons/arrow-left.tsx b/services/one-app/src/asset/icon/arrow-left.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/arrow-left.tsx rename to services/one-app/src/asset/icon/arrow-left.tsx diff --git a/services/one-app/src/common/assets/icons/check.tsx b/services/one-app/src/asset/icon/check.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/check.tsx rename to services/one-app/src/asset/icon/check.tsx diff --git a/services/one-app/src/common/assets/icons/chevron-down.tsx b/services/one-app/src/asset/icon/chevron-down.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/chevron-down.tsx rename to services/one-app/src/asset/icon/chevron-down.tsx diff --git a/services/one-app/src/common/assets/icons/close-circle.tsx b/services/one-app/src/asset/icon/close-circle.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/close-circle.tsx rename to services/one-app/src/asset/icon/close-circle.tsx diff --git a/services/one-app/src/common/assets/icons/comment.tsx b/services/one-app/src/asset/icon/comment.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/comment.tsx rename to services/one-app/src/asset/icon/comment.tsx diff --git a/services/one-app/src/common/assets/icons/google.tsx b/services/one-app/src/asset/icon/google.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/google.tsx rename to services/one-app/src/asset/icon/google.tsx diff --git a/services/one-app/src/common/assets/icons/image-placeholder.tsx b/services/one-app/src/asset/icon/image-placeholder.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/image-placeholder.tsx rename to services/one-app/src/asset/icon/image-placeholder.tsx diff --git a/services/one-app/src/common/assets/icons/index.ts b/services/one-app/src/asset/icon/index.ts similarity index 100% rename from services/one-app/src/common/assets/icons/index.ts rename to services/one-app/src/asset/icon/index.ts diff --git a/services/one-app/src/common/assets/icons/kakao.tsx b/services/one-app/src/asset/icon/kakao.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/kakao.tsx rename to services/one-app/src/asset/icon/kakao.tsx diff --git a/services/one-app/src/common/assets/icons/line/Incheon-one.svg b/services/one-app/src/asset/icon/line/Incheon-one.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/Incheon-one.svg rename to services/one-app/src/asset/icon/line/Incheon-one.svg diff --git a/services/one-app/src/common/assets/icons/line/Incheon-two.svg b/services/one-app/src/asset/icon/line/Incheon-two.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/Incheon-two.svg rename to services/one-app/src/asset/icon/line/Incheon-two.svg diff --git a/services/one-app/src/common/assets/icons/line/airport.svg b/services/one-app/src/asset/icon/line/airport.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/airport.svg rename to services/one-app/src/asset/icon/line/airport.svg diff --git a/services/one-app/src/common/assets/icons/line/eight.svg b/services/one-app/src/asset/icon/line/eight.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/eight.svg rename to services/one-app/src/asset/icon/line/eight.svg diff --git a/services/one-app/src/common/assets/icons/line/everline.svg b/services/one-app/src/asset/icon/line/everline.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/everline.svg rename to services/one-app/src/asset/icon/line/everline.svg diff --git a/services/one-app/src/common/assets/icons/line/five.svg b/services/one-app/src/asset/icon/line/five.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/five.svg rename to services/one-app/src/asset/icon/line/five.svg diff --git a/services/one-app/src/common/assets/icons/line/four.svg b/services/one-app/src/asset/icon/line/four.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/four.svg rename to services/one-app/src/asset/icon/line/four.svg diff --git a/services/one-app/src/common/assets/icons/line/gimpo-gold.svg b/services/one-app/src/asset/icon/line/gimpo-gold.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/gimpo-gold.svg rename to services/one-app/src/asset/icon/line/gimpo-gold.svg diff --git a/services/one-app/src/common/assets/icons/line/gyeongchun.svg b/services/one-app/src/asset/icon/line/gyeongchun.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/gyeongchun.svg rename to services/one-app/src/asset/icon/line/gyeongchun.svg diff --git a/services/one-app/src/common/assets/icons/line/gyeonggang.svg b/services/one-app/src/asset/icon/line/gyeonggang.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/gyeonggang.svg rename to services/one-app/src/asset/icon/line/gyeonggang.svg diff --git a/services/one-app/src/common/assets/icons/line/gyeongui-jungang.svg b/services/one-app/src/asset/icon/line/gyeongui-jungang.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/gyeongui-jungang.svg rename to services/one-app/src/asset/icon/line/gyeongui-jungang.svg diff --git a/services/one-app/src/common/assets/icons/line/nine.svg b/services/one-app/src/asset/icon/line/nine.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/nine.svg rename to services/one-app/src/asset/icon/line/nine.svg diff --git a/services/one-app/src/common/assets/icons/line/one.svg b/services/one-app/src/asset/icon/line/one.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/one.svg rename to services/one-app/src/asset/icon/line/one.svg diff --git a/services/one-app/src/common/assets/icons/line/seohae.svg b/services/one-app/src/asset/icon/line/seohae.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/seohae.svg rename to services/one-app/src/asset/icon/line/seohae.svg diff --git a/services/one-app/src/common/assets/icons/line/seven.svg b/services/one-app/src/asset/icon/line/seven.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/seven.svg rename to services/one-app/src/asset/icon/line/seven.svg diff --git a/services/one-app/src/common/assets/icons/line/shinbundang.svg b/services/one-app/src/asset/icon/line/shinbundang.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/shinbundang.svg rename to services/one-app/src/asset/icon/line/shinbundang.svg diff --git a/services/one-app/src/common/assets/icons/line/sillim.svg b/services/one-app/src/asset/icon/line/sillim.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/sillim.svg rename to services/one-app/src/asset/icon/line/sillim.svg diff --git a/services/one-app/src/common/assets/icons/line/six.svg b/services/one-app/src/asset/icon/line/six.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/six.svg rename to services/one-app/src/asset/icon/line/six.svg diff --git a/services/one-app/src/common/assets/icons/line/suin-bundang.svg b/services/one-app/src/asset/icon/line/suin-bundang.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/suin-bundang.svg rename to services/one-app/src/asset/icon/line/suin-bundang.svg diff --git a/services/one-app/src/common/assets/icons/line/three.svg b/services/one-app/src/asset/icon/line/three.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/three.svg rename to services/one-app/src/asset/icon/line/three.svg diff --git a/services/one-app/src/common/assets/icons/line/two.svg b/services/one-app/src/asset/icon/line/two.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/two.svg rename to services/one-app/src/asset/icon/line/two.svg diff --git a/services/one-app/src/common/assets/icons/line/ui-sinseol.svg b/services/one-app/src/asset/icon/line/ui-sinseol.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/ui-sinseol.svg rename to services/one-app/src/asset/icon/line/ui-sinseol.svg diff --git a/services/one-app/src/common/assets/icons/line/uijeongbu.svg b/services/one-app/src/asset/icon/line/uijeongbu.svg similarity index 100% rename from services/one-app/src/common/assets/icons/line/uijeongbu.svg rename to services/one-app/src/asset/icon/line/uijeongbu.svg diff --git a/services/one-app/src/common/assets/icons/loading-spinner.tsx b/services/one-app/src/asset/icon/loading-spinner.tsx similarity index 94% rename from services/one-app/src/common/assets/icons/loading-spinner.tsx rename to services/one-app/src/asset/icon/loading-spinner.tsx index 114be99e5..a207d3247 100644 --- a/services/one-app/src/common/assets/icons/loading-spinner.tsx +++ b/services/one-app/src/asset/icon/loading-spinner.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { cn } from '@/common/utils/cn'; +import { cn } from '@/util/cn'; interface SpinnerIconProps extends React.SVGProps { size?: number; diff --git a/services/one-app/src/common/assets/icons/logo-text.tsx b/services/one-app/src/asset/icon/logo-text.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/logo-text.tsx rename to services/one-app/src/asset/icon/logo-text.tsx diff --git a/services/one-app/src/common/assets/icons/logo.tsx b/services/one-app/src/asset/icon/logo.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/logo.tsx rename to services/one-app/src/asset/icon/logo.tsx diff --git a/services/one-app/src/common/assets/icons/mic.svg b/services/one-app/src/asset/icon/mic.svg similarity index 100% rename from services/one-app/src/common/assets/icons/mic.svg rename to services/one-app/src/asset/icon/mic.svg diff --git a/services/one-app/src/common/assets/icons/plus.tsx b/services/one-app/src/asset/icon/plus.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/plus.tsx rename to services/one-app/src/asset/icon/plus.tsx diff --git a/services/one-app/src/common/assets/icons/search.tsx b/services/one-app/src/asset/icon/search.tsx similarity index 100% rename from services/one-app/src/common/assets/icons/search.tsx rename to services/one-app/src/asset/icon/search.tsx diff --git a/services/one-app/src/common/assets/icons/subway-logo/index.ts b/services/one-app/src/asset/icon/subway-logo/index.ts similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/index.ts rename to services/one-app/src/asset/icon/subway-logo/index.ts diff --git a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_1.svg b/services/one-app/src/asset/icon/subway-logo/subway_logo_1.svg similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/subway_logo_1.svg rename to services/one-app/src/asset/icon/subway-logo/subway_logo_1.svg diff --git a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_2.svg b/services/one-app/src/asset/icon/subway-logo/subway_logo_2.svg similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/subway_logo_2.svg rename to services/one-app/src/asset/icon/subway-logo/subway_logo_2.svg diff --git a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_3.svg b/services/one-app/src/asset/icon/subway-logo/subway_logo_3.svg similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/subway_logo_3.svg rename to services/one-app/src/asset/icon/subway-logo/subway_logo_3.svg diff --git a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_4.svg b/services/one-app/src/asset/icon/subway-logo/subway_logo_4.svg similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/subway_logo_4.svg rename to services/one-app/src/asset/icon/subway-logo/subway_logo_4.svg diff --git a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_5.svg b/services/one-app/src/asset/icon/subway-logo/subway_logo_5.svg similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/subway_logo_5.svg rename to services/one-app/src/asset/icon/subway-logo/subway_logo_5.svg diff --git a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_6.svg b/services/one-app/src/asset/icon/subway-logo/subway_logo_6.svg similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/subway_logo_6.svg rename to services/one-app/src/asset/icon/subway-logo/subway_logo_6.svg diff --git a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_7.svg b/services/one-app/src/asset/icon/subway-logo/subway_logo_7.svg similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/subway_logo_7.svg rename to services/one-app/src/asset/icon/subway-logo/subway_logo_7.svg diff --git a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_8.svg b/services/one-app/src/asset/icon/subway-logo/subway_logo_8.svg similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/subway_logo_8.svg rename to services/one-app/src/asset/icon/subway-logo/subway_logo_8.svg diff --git a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_9.svg b/services/one-app/src/asset/icon/subway-logo/subway_logo_9.svg similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/subway_logo_9.svg rename to services/one-app/src/asset/icon/subway-logo/subway_logo_9.svg diff --git a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_GTX_A.svg b/services/one-app/src/asset/icon/subway-logo/subway_logo_GTX_A.svg similarity index 100% rename from services/one-app/src/common/assets/icons/subway-logo/subway_logo_GTX_A.svg rename to services/one-app/src/asset/icon/subway-logo/subway_logo_GTX_A.svg diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\352\262\275\352\260\225.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\352\262\275\352\260\225.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\352\262\275\352\260\225.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\352\262\275\352\260\225.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\352\262\275\354\235\230\354\244\221\354\225\231.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\352\262\275\354\235\230\354\244\221\354\225\231.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\352\262\275\354\235\230\354\244\221\354\225\231.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\352\262\275\354\235\230\354\244\221\354\225\231.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\352\262\275\354\266\230.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\352\262\275\354\266\230.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\352\262\275\354\266\230.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\352\262\275\354\266\230.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\352\263\265\355\225\255.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\352\263\265\355\225\255.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\352\263\265\355\225\255.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\352\263\265\355\225\255.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\352\271\200\355\217\254\352\263\250\353\223\234.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\352\271\200\355\217\254\352\263\250\353\223\234.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\352\271\200\355\217\254\352\263\250\353\223\234.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\352\271\200\355\217\254\352\263\250\353\223\234.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\204\234\355\225\264.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\354\204\234\355\225\264.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\204\234\355\225\264.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\354\204\234\355\225\264.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\210\230\354\235\270\353\266\204\353\213\271.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\354\210\230\354\235\270\353\266\204\353\213\271.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\210\230\354\235\270\353\266\204\353\213\271.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\354\210\230\354\235\270\353\266\204\353\213\271.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\213\240\353\246\274.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\354\213\240\353\246\274.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\213\240\353\246\274.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\354\213\240\353\246\274.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\213\240\353\266\204\353\213\271.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\354\213\240\353\266\204\353\213\271.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\213\240\353\266\204\353\213\271.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\354\213\240\353\266\204\353\213\271.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\227\220\353\262\204\353\235\274\354\235\270.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\354\227\220\353\262\204\353\235\274\354\235\270.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\227\220\353\262\204\353\235\274\354\235\270.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\354\227\220\353\262\204\353\235\274\354\235\270.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\232\260\354\235\264\354\213\240\354\204\244.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\354\232\260\354\235\264\354\213\240\354\204\244.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\232\260\354\235\264\354\213\240\354\204\244.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\354\232\260\354\235\264\354\213\240\354\204\244.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\235\230\354\240\225\353\266\200.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\354\235\230\354\240\225\353\266\200.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\235\230\354\240\225\353\266\200.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\354\235\230\354\240\225\353\266\200.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\235\270\354\262\234_1.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\354\235\270\354\262\234_1.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\235\270\354\262\234_1.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\354\235\270\354\262\234_1.svg" diff --git "a/services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\235\270\354\262\234_2.svg" "b/services/one-app/src/asset/icon/subway-logo/subway_logo_\354\235\270\354\262\234_2.svg" similarity index 100% rename from "services/one-app/src/common/assets/icons/subway-logo/subway_logo_\354\235\270\354\262\234_2.svg" rename to "services/one-app/src/asset/icon/subway-logo/subway_logo_\354\235\270\354\262\234_2.svg" diff --git a/services/one-app/src/common/assets/icons/svgs/bookmark.svg b/services/one-app/src/asset/icon/svgs/bookmark.svg similarity index 100% rename from services/one-app/src/common/assets/icons/svgs/bookmark.svg rename to services/one-app/src/asset/icon/svgs/bookmark.svg diff --git a/services/one-app/src/common/assets/icons/svgs/chevron.svg b/services/one-app/src/asset/icon/svgs/chevron.svg similarity index 100% rename from services/one-app/src/common/assets/icons/svgs/chevron.svg rename to services/one-app/src/asset/icon/svgs/chevron.svg diff --git a/services/one-app/src/common/assets/icons/svgs/dot.svg b/services/one-app/src/asset/icon/svgs/dot.svg similarity index 100% rename from services/one-app/src/common/assets/icons/svgs/dot.svg rename to services/one-app/src/asset/icon/svgs/dot.svg diff --git a/services/one-app/src/common/assets/icons/svgs/ellipsis.svg b/services/one-app/src/asset/icon/svgs/ellipsis.svg similarity index 100% rename from services/one-app/src/common/assets/icons/svgs/ellipsis.svg rename to services/one-app/src/asset/icon/svgs/ellipsis.svg diff --git a/services/one-app/src/common/assets/icons/svgs/index.ts b/services/one-app/src/asset/icon/svgs/index.ts similarity index 100% rename from services/one-app/src/common/assets/icons/svgs/index.ts rename to services/one-app/src/asset/icon/svgs/index.ts diff --git a/services/one-app/src/common/assets/icons/svgs/mic.svg b/services/one-app/src/asset/icon/svgs/mic.svg similarity index 100% rename from services/one-app/src/common/assets/icons/svgs/mic.svg rename to services/one-app/src/asset/icon/svgs/mic.svg diff --git a/services/one-app/src/common/assets/lottie/loading.json b/services/one-app/src/asset/lottie/loading.json similarity index 100% rename from services/one-app/src/common/assets/lottie/loading.json rename to services/one-app/src/asset/lottie/loading.json diff --git a/services/one-app/src/common/components/Filter/SearchFilter.tsx b/services/one-app/src/common/components/Filter/SearchFilter.tsx deleted file mode 100644 index b8804bd68..000000000 --- a/services/one-app/src/common/components/Filter/SearchFilter.tsx +++ /dev/null @@ -1,44 +0,0 @@ -'use client'; - -import React, { useState, useEffect } from 'react'; - -import { useQueryState } from 'nuqs'; - -import { SearchIcon } from '@/common/assets/icons'; -import { useDebounce } from '@/common/hooks'; - -export const SearchFilter = () => { - const [keyword, setKeyword] = useQueryState('keyword', { - scroll: true, - defaultValue: '', - }); - const [inputValue, setInputValue] = useState(keyword); - - const debouncedSetKeyword = useDebounce((value: string) => { - setKeyword(value || null); - }, 300); - - const handleChange = (e: React.ChangeEvent) => { - const value = e.target.value; - setInputValue(value); - debouncedSetKeyword(value); - }; - - useEffect(() => { - setInputValue(keyword); - }, [keyword]); - - return ( -
- - -
- ); -}; diff --git a/services/one-app/src/common/components/Subway/index.ts b/services/one-app/src/common/components/Subway/index.ts deleted file mode 100644 index ca4946655..000000000 --- a/services/one-app/src/common/components/Subway/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './subway-logo-icon-map'; diff --git a/services/one-app/src/common/configure-axios.ts b/services/one-app/src/common/configure-axios.ts deleted file mode 100644 index c241835d5..000000000 --- a/services/one-app/src/common/configure-axios.ts +++ /dev/null @@ -1,17 +0,0 @@ -import axios, { AxiosRequestConfig } from 'axios'; - -const config: AxiosRequestConfig = {}; -const baseURL = - process.env.NEXT_PUBLIC_API_MOCKING === 'enabled' - ? 'http://localhost:9090' - : process.env.NEXT_PUBLIC_BASE_URL; -config.baseURL = baseURL; - -const API_BASE = axios.create(config); -enum API_ROUTES { - AUTH = '/auth', - MEMBER = '/members', - COMMUNITY = '/community-posts', -} - -export { API_BASE, API_ROUTES }; diff --git a/services/one-app/src/common/constants/colors.ts b/services/one-app/src/common/constants/colors.ts deleted file mode 100644 index 5869dd76b..000000000 --- a/services/one-app/src/common/constants/colors.ts +++ /dev/null @@ -1,65 +0,0 @@ -module.exports = { - primary: { - primary: '#00BAF6', - primary_pressed: '#009ED1', - primary_hover: '#80DDFB', - }, - secondary: { - secondary: '#D0EEFF', - secondary_pressed: '#B8E5FF', - secondary_hover: '#E2F5FF', - }, - subway: { - s1: '#2A3E91', - s2: '#60B157', - s3: '#FE8A39', - s4: '#509DD8', - s5: '#7F41D8', - s6: '#A95523', - s7: '#727719', - s8: '#D2386E', - s9: '#D1A946', - airport: '#82B5E0', // ๊ณตํ•ญ - gyeongui: '#8CC2A7', // ๊ฒฝ์˜์ค‘์•™ - gyeongchun: '#4FAC7F', // ๊ฒฝ์ถ˜ - suinBundang: '#E1AB3A', // ์ˆ˜์ธ๋ถ„๋‹น - sinBundang: '#BC2A38', // ์‹ ๋ถ„๋‹น - gyeonggang: '#3C74EA', // ๊ฒฝ๊ฐ• - seohae: '#98C255', // ์„œํ•ด - incheon1: '#7899CB', // ์ธ์ฒœ1 - incheon2: '#E9AD54', // ์ธ์ฒœ2 - everline: '#89C07A', // ์—๋ฒ„๋ผ์ธ - uijeongbu: '#C5C03E', // ์˜์ •๋ถ€ - wuisinseol: '#8CC2A7', // ์šฐ์ด์‹ ์„ค - gimpoGold: '#907227', // ๊น€ํฌ๊ณจ๋“œ - sinlim: '#5367A0', // ์‹ ๋ฆผ - }, - gray: { - 0: '#FFFFFF', - 10: '#FCFCFC', - 20: '#F5F5F5', - 30: '#EAECF1', - 40: '#DCDEE7', - 50: '#CED0DD', - 60: '#B7B9C3', - 70: '#95979F', - 80: '#74757C', - 90: '#33333E', - 100: '#121212', - }, - green: { - 50: '#eafaf0', - 100: '#bdf0d1', - 200: '#9de9bb', - 300: '#70df9d', - 400: '#55d989', - 500: '#2acf6c', - 600: '#26bc62', - 700: '#1e934d', - 800: '#17723b', - 900: '#12572d', - }, - 'key-color': '#2ACF6C', - red: '#EB4D3D', - black: '#272727', -}; diff --git a/services/one-app/src/common/constants/env.ts b/services/one-app/src/common/constants/env.ts deleted file mode 100644 index 044ce6b29..000000000 --- a/services/one-app/src/common/constants/env.ts +++ /dev/null @@ -1,23 +0,0 @@ -export enum AppEnv { - PRODUCTION = 'production', - STAGING = 'staging', - DEV = 'development', -} - -export const APP_ENV = process.env.NEXT_PUBLIC_APP_ENV || AppEnv.DEV; -export const IS_DEV_ENV = APP_ENV === AppEnv.DEV; - -export const SITE_URL = (() => { - if (IS_DEV_ENV) return 'http://localhost:3000'; - if (APP_ENV === AppEnv.DEV) return process.env.APP_DEV_URL; - return process.env.APP_PRODUCTION_URL; -})(); - -export const API_BASE_URL = - process.env.NEXT_PUBLIC_API_MOCKING === 'enabled' - ? 'http://localhost:9090' - : IS_DEV_ENV - ? 'https://api.dev.ahhachul.com/v1' - : 'https://api.ahhachul.com/v1'; - -export const IS_SERVER = typeof window === 'undefined'; diff --git a/services/one-app/src/common/constants/fallback-action.ts b/services/one-app/src/common/constants/fallback-action.ts deleted file mode 100644 index eaa93afdb..000000000 --- a/services/one-app/src/common/constants/fallback-action.ts +++ /dev/null @@ -1 +0,0 @@ -export const FALLBACK_ACTION_CLASS_NAME = '-ahhachul-fallback-action'; diff --git a/services/one-app/src/common/constants/subway.ts b/services/one-app/src/common/constants/subway.ts deleted file mode 100644 index 2af091841..000000000 --- a/services/one-app/src/common/constants/subway.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { SubwayLineFilterOptions } from '@/model'; - -export const subwayLineIdOptions = { - [SubwayLineFilterOptions.ALL_LINES]: '์ „์ฒด ํ˜ธ์„  ๋ณด๊ธฐ', - [SubwayLineFilterOptions.ONLY_MY_LINE]: '๋‚ด ํ˜ธ์„ ๋งŒ ๋ณด๊ธฐ', -} as const; diff --git a/services/one-app/src/common/service/AuthService.ts b/services/one-app/src/common/service/AuthService.ts deleted file mode 100644 index 196c51465..000000000 --- a/services/one-app/src/common/service/AuthService.ts +++ /dev/null @@ -1,112 +0,0 @@ -import axios, { AxiosError } from 'axios'; -import Cookies from 'js-cookie'; - -import { apiClient } from '@/app/api'; -import { IS_DEV_ENV } from '@/common/constants'; -import { CookieKey } from '@/model'; - -class _AuthService { - private isFetchingAccessToken = false; - private tokenSubscribers: Array<(accessToken: string) => void> = []; - - constructor() {} - - get accessToken() { - return Cookies.get(CookieKey.ACCESS_TOKEN); - } - - get refreshToken() { - return Cookies.get(CookieKey.REFRESH_TOKEN); - } - - setToken(accessToken: string, refreshToken: string) { - Cookies.set(CookieKey.ACCESS_TOKEN, accessToken, { - sameSite: 'lax', // CSRF ๋ฐฉ์ง€ - secure: !IS_DEV_ENV, - path: '/', // ๋ชจ๋“  ๊ฒฝ๋กœ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ • - }); - Cookies.set(CookieKey.REFRESH_TOKEN, refreshToken, { - sameSite: 'lax', // CSRF ๋ฐฉ์ง€ - secure: !IS_DEV_ENV, - path: '/', // ๋ชจ๋“  ๊ฒฝ๋กœ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ • - }); - } - - expireSession() { - Cookies.remove(CookieKey.ACCESS_TOKEN); - Cookies.remove(CookieKey.REFRESH_TOKEN); - window.location.replace('/login'); // TODO, ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ฒฝ๋กœ ์„ค์ • - } - - get isLoggedIn() { - return !!this.accessToken && !!this.refreshToken; - } - - async renewAccessToken() { - if (this.isFetchingAccessToken) return; - - if (!this.refreshToken) { - throw new Error('Refresh token is missing'); - } - - try { - this.isFetchingAccessToken = true; - const response = await apiClient.post(`/auth/token/refresh`, { - refreshToken: this.refreshToken, - }); - const { accessToken, refreshToken } = response.data; - this.setToken(accessToken, refreshToken); - - this.broadcastTokenUpdate(accessToken); - } catch (error) { - this.expireSession(); - throw error; - } finally { - this.isFetchingAccessToken = false; - } - } - - async resetTokenAndRetryRequest(error: AxiosError): Promise { - if (!this.refreshToken) { - this.expireSession(); - return Promise.reject(error); - } - - const retryRequest = new Promise((resolve, reject) => { - this.addSubscriber((newAccessToken: string) => { - if (error.config) { - error.config.headers = error.config.headers || {}; - error.config.headers['Authorization'] = `Bearer ${newAccessToken}`; - - // axios๋ฅผ ์‚ฌ์šฉํ•ด ์›๋ž˜ ์š”์ฒญ์„ ๋‹ค์‹œ ์‹œ๋„ - resolve(axios(error.config)); - } else { - // config๊ฐ€ ์—†์œผ๋ฉด reject๋กœ ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜ - reject(new Error('Request configuration is missing')); - } - }); - }); - - if (!this.isFetchingAccessToken) { - this.isFetchingAccessToken = true; - try { - await this.renewAccessToken(); - } catch (err) { - return Promise.reject(err); - } - } - - return retryRequest; - } - - private broadcastTokenUpdate(newAccessToken: string) { - this.tokenSubscribers.forEach(callback => callback(newAccessToken)); - this.tokenSubscribers = []; - } - - private addSubscriber(callback: (accessToken: string) => void) { - this.tokenSubscribers.push(callback); - } -} - -export const AuthService = new _AuthService(); diff --git a/services/one-app/src/common/service/index.ts b/services/one-app/src/common/service/index.ts deleted file mode 100644 index af1ad50c5..000000000 --- a/services/one-app/src/common/service/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './AuthService'; diff --git a/services/one-app/src/common/utils/date.ts b/services/one-app/src/common/utils/date.ts deleted file mode 100644 index 6f9bb4f77..000000000 --- a/services/one-app/src/common/utils/date.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { format, formatDistanceToNow, isValid } from 'date-fns'; -import { ko } from 'date-fns/locale'; - -/** - * @description ์ดˆ๋ฅผ MM:SS ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. - */ -export const formatMMSS = (totalSeconds: number) => { - const minutes = Math.floor(totalSeconds / 60); - const seconds = totalSeconds % 60; - - return { - minutes, - seconds, - formattedMinutes: String(minutes).padStart(2, '0'), - formattedSeconds: String(seconds).padStart(2, '0'), - }; -}; - -/** - * @description ๋‚ ์งœ๋ฅผ 'MM.DD HH:mm' ํ˜•์‹์œผ๋กœ ํฌ๋งทํŒ…ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. - */ -export const formatToStandardDate = (dateString: string): string => { - return format(new Date(dateString), 'MM.dd HH:mm'); -}; - -/** - * @description ๋‚ ์งœ๋ฅผ ์ƒํ™ฉ์— ๋งž๋Š” ํ˜•์‹์œผ๋กœ ํฌ๋งทํŒ…ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. - * - 1๋ถ„ ์ด๋‚ด: '๋ฐฉ๊ธˆ ์ „' - * - 24์‹œ๊ฐ„ ์ด๋‚ด: 'n์‹œ๊ฐ„ ์ „' - * - 24์‹œ๊ฐ„ ์ดํ›„: 'MM.DD HH:mm' ๋˜๋Š” 'n์ผ ์ „' - */ -export function formatDate(date: string, shouldShowStandardDate = true) { - const d = new Date(date); - - if (!isValid(d)) { - return '์•Œ ์ˆ˜ ์—†์Œ'; - } - - const now = Date.now(); - const diffInSeconds = (now - d.getTime()) / 1000; - - // 1๋ถ„ ์ด๋‚ด - if (diffInSeconds < 60) { - return '๋ฐฉ๊ธˆ ์ „'; - } - - // 24์‹œ๊ฐ„ ์ด๋‚ด - if (diffInSeconds < 60 * 60 * 24) { - return formatDistanceToNow(d, { addSuffix: true, locale: ko }); - } - - // 24์‹œ๊ฐ„ ์ดํ›„ - return shouldShowStandardDate - ? formatToStandardDate(date) - : formatDistanceToNow(d, { addSuffix: true, locale: ko }); -} diff --git a/services/one-app/src/common/utils/index.ts b/services/one-app/src/common/utils/index.ts deleted file mode 100644 index 305faf813..000000000 --- a/services/one-app/src/common/utils/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './cn'; -export * from './date'; -export * from './array'; -export * from './number'; -export * from './common'; -export * from './object'; -export * from './subway'; -export * from './validate'; -export * from './react-query'; diff --git a/services/one-app/src/common/utils/number.ts b/services/one-app/src/common/utils/number.ts deleted file mode 100644 index 826926c72..000000000 --- a/services/one-app/src/common/utils/number.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function getRandomInt(min = 1, max = 10) { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min + 1)) + min; -} diff --git a/services/one-app/src/common/utils/object.ts b/services/one-app/src/common/utils/object.ts deleted file mode 100644 index 1d8c5882a..000000000 --- a/services/one-app/src/common/utils/object.ts +++ /dev/null @@ -1,45 +0,0 @@ -import queryString from 'query-string'; - -import type { ObjectKeys } from '@/model'; - -export const isValidObject = (obj: unknown): obj is Record => { - return typeof obj === 'object' && obj !== null && !Array.isArray(obj); -}; - -export function removeFalsyValues>( - obj: T, - options: { removeEmptyStrings?: boolean; removeZero?: boolean } = {}, -): Partial { - if (!isValidObject(obj)) { - throw new Error('obj must be a non-null object'); - } - - return Object.entries(obj).reduce((result, [key, value]) => { - if ( - value !== undefined && - value !== null && - (options.removeZero ? value !== 0 : true) && - (options.removeEmptyStrings ? value !== '' : true) - ) { - result[key as keyof T] = value; - } - return result; - }, {} as Partial); -} - -export const objectToQueryString = >( - params: T, - options?: { removeEmptyStrings?: boolean; removeZero?: boolean }, -): string => { - if (!isValidObject(params)) { - throw new Error('params must be a non-null object'); - } - - return queryString.stringify(removeFalsyValues(params, options)); -}; - -export function objectEntries>( - obj: Type, -): Array<[ObjectKeys, Type[ObjectKeys]]> { - return Object.entries(obj) as Array<[ObjectKeys, Type[ObjectKeys]]>; -} diff --git a/services/one-app/src/common/utils/react-query.ts b/services/one-app/src/common/utils/react-query.ts deleted file mode 100644 index d55e2c86d..000000000 --- a/services/one-app/src/common/utils/react-query.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { InfiniteData } from '@tanstack/react-query'; -import { AxiosResponse } from 'axios'; - -import type { IResponse, ListResponseWithPagination } from '@/model'; - -export const generateQueryKey = (type: string[]) => { - return { - all: type, - lists() { - return [...this.all, 'list'] as const; - }, - list(filters: Record) { - return [...this.lists(), filters] as const; - }, - details() { - return [...this.all, 'detail'] as const; - }, - detail(id: number | string) { - return [...this.details(), id] as const; - }, - comments(id: number | string) { - return [...this.detail(id), 'comments'] as const; - }, - }; -}; - -export const flattenInfinityList = ( - data: InfiniteData>>, unknown>, -): TData[] => { - return data.pages.map(page => page?.data?.result?.data ?? []).flat(); -}; diff --git a/services/one-app/src/common/utils/subway.ts b/services/one-app/src/common/utils/subway.ts deleted file mode 100644 index 324865d62..000000000 --- a/services/one-app/src/common/utils/subway.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const formatSubwayLineId = (filtersSubwayLineId: string, userFavoriteLineId: number) => { - switch (filtersSubwayLineId) { - case 'ALL_LINES': - return 0; - case 'ONLY_MY_LINE': - default: - return userFavoriteLineId; - } -}; diff --git a/services/one-app/src/common/components/Article/ArticleCard.tsx b/services/one-app/src/component/Article/ArticleCard.tsx similarity index 63% rename from services/one-app/src/common/components/Article/ArticleCard.tsx rename to services/one-app/src/component/Article/ArticleCard.tsx index 982f15637..29968feaf 100644 --- a/services/one-app/src/common/components/Article/ArticleCard.tsx +++ b/services/one-app/src/component/Article/ArticleCard.tsx @@ -1,26 +1,28 @@ 'use client'; -import { LexicalSyntaxContentParser } from '@/app/(site)/_component/Editor'; -import { DotIcon, CommentIcon } from '@/common/assets/icons'; -import { SUBWAY_LOGO_SVG_LIST } from '@/common/components'; -import { cn, isLexicalContent, formatDate } from '@/common/utils'; -import type { Post } from '@/model'; +import { LazyLoadImage } from 'react-lazy-load-image-component'; +import 'react-lazy-load-image-component/src/effects/opacity.css'; + +import { formatDateTime } from '@ahhachul/utils'; + +import type { IPost } from '@/types'; +import { cn, isLexicalContent } from '@/util'; + +import { ReadonlyEditor } from '../Editor'; interface Props { - post: Post; + post: IPost; } -export const ArticleCard = ({ post }: Props) => { - const isLexicalSyntaxContent = isLexicalContent(post.content); - +export const Post = ({ post }: Props) => { return (
{post.title}
- {isLexicalSyntaxContent ? ( - {
{post?.imageUrl && (
- {/* TODO */} - {/* */} + />
)}
- {SUBWAY_LOGO_SVG_LIST[post.subwayLineId]} - - {post.writer || 'LOST112'} - - {formatDate(post.createdAt, false)} + {/* {SUBWAY_LOGO_SVG_LIST[post.subwayLineId]} */} + {/* */} + {post.writer || '๋กœ์ŠคํŠธ 112'} + {/* */} + {formatDateTime(post.createdAt)}
- + {/* */} {post.commentCnt}
diff --git a/services/one-app/src/common/components/Article/ArticleDetail.suspense.tsx b/services/one-app/src/component/Article/ArticleDetail.suspense.tsx similarity index 97% rename from services/one-app/src/common/components/Article/ArticleDetail.suspense.tsx rename to services/one-app/src/component/Article/ArticleDetail.suspense.tsx index 259fb94bb..98dee43cd 100644 --- a/services/one-app/src/common/components/Article/ArticleDetail.suspense.tsx +++ b/services/one-app/src/component/Article/ArticleDetail.suspense.tsx @@ -1,7 +1,7 @@ 'use client'; -import { useIsDeferred } from '@/common/hooks'; -import { cn } from '@/common/utils'; +import { useIsDeferred } from '@/hook'; +import { cn } from '@/util'; import { BaseSkeleton } from '../BaseSkeleton'; diff --git a/services/one-app/src/common/components/Article/ArticleImages.tsx b/services/one-app/src/component/Article/ArticleImages.tsx similarity index 92% rename from services/one-app/src/common/components/Article/ArticleImages.tsx rename to services/one-app/src/component/Article/ArticleImages.tsx index 41d3c8965..0accc8887 100644 --- a/services/one-app/src/common/components/Article/ArticleImages.tsx +++ b/services/one-app/src/component/Article/ArticleImages.tsx @@ -4,11 +4,11 @@ import { Pagination } from 'swiper/modules'; import { Swiper, SwiperSlide } from 'swiper/react'; // import { LazyLoadImage } from 'react-lazy-load-image-component'; -import type { PostImage } from '@/model'; +import type { IPostImage } from '@/types'; interface Props { label: string; - images: PostImage[]; + images: IPostImage[]; canShowFullImageDialog?: boolean; } @@ -32,7 +32,7 @@ export const BaseArticleImages = ({ return ( <> - {images.length === 1 ? ( + {images?.length === 1 ? (
*/}
- ) : images.length > 1 ? ( + ) : images && images.length > 1 ? ( - {images.map(img => ( + {images?.map(img => ( { - const { isDeferred } = useIsDeferred(500); - - return isDeferred ? ( + return (
{
{
- {/* ์ด๋ฏธ์ง€ ์Šค์ผˆ๋ ˆํ†ค - ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ™œ์„ฑํ™” */}
@@ -56,5 +52,5 @@ export const ArticleListSuspenseFallback = () => {
))} - ) : null; + ); }; diff --git a/services/one-app/src/common/components/Article/EmptyArticleList.tsx b/services/one-app/src/component/Article/EmptyArticleList.tsx similarity index 81% rename from services/one-app/src/common/components/Article/EmptyArticleList.tsx rename to services/one-app/src/component/Article/EmptyArticleList.tsx index 391814ef5..648376823 100644 --- a/services/one-app/src/common/components/Article/EmptyArticleList.tsx +++ b/services/one-app/src/component/Article/EmptyArticleList.tsx @@ -1,4 +1,4 @@ -import { EmptyGraphic } from '@/common/assets/graphics'; +import { EmptyGraphic } from '@/asset/graphic'; export const EmptyArticleList = () => { return ( diff --git a/services/one-app/src/common/components/Article/FullImageViewer.tsx b/services/one-app/src/component/Article/FullImageViewer.tsx similarity index 100% rename from services/one-app/src/common/components/Article/FullImageViewer.tsx rename to services/one-app/src/component/Article/FullImageViewer.tsx diff --git a/services/one-app/src/common/components/Article/RecommendArticleCard.tsx b/services/one-app/src/component/Article/RecommendArticleCard.tsx similarity index 82% rename from services/one-app/src/common/components/Article/RecommendArticleCard.tsx rename to services/one-app/src/component/Article/RecommendArticleCard.tsx index 5adad26d7..163d76430 100644 --- a/services/one-app/src/common/components/Article/RecommendArticleCard.tsx +++ b/services/one-app/src/component/Article/RecommendArticleCard.tsx @@ -1,11 +1,10 @@ -'use client'; +import { formatDateTime } from '@ahhachul/utils'; -import { DotIcon } from '@/common/assets/icons'; -import { formatDate } from '@/common/utils'; -import type { RecommendPost } from '@/model'; +import { DotIcon } from '@/asset/icon'; +import type { IRecommendPost } from '@/types'; interface Props { - post: RecommendPost; + post: IRecommendPost; } export const RecommendArticleCard = ({ post }: Props) => { @@ -19,13 +18,12 @@ export const RecommendArticleCard = ({ post }: Props) => {
LOST112 - {formatDate(post.createdAt, false)} + {formatDateTime(post.createdAt)}
{post?.imageUrl && (
- {/* TODO */} {/* ; diff --git a/services/one-app/src/common/components/Comment/BaseCommentList.suspense.tsx b/services/one-app/src/component/Comment/BaseCommentList.suspense.tsx similarity index 93% rename from services/one-app/src/common/components/Comment/BaseCommentList.suspense.tsx rename to services/one-app/src/component/Comment/BaseCommentList.suspense.tsx index 71e4ac700..7d4486dbc 100644 --- a/services/one-app/src/common/components/Comment/BaseCommentList.suspense.tsx +++ b/services/one-app/src/component/Comment/BaseCommentList.suspense.tsx @@ -1,7 +1,7 @@ 'use client'; -import { useIsDeferred } from '@/common/hooks'; -import { cn } from '@/common/utils'; +import { useIsDeferred } from '@/hook'; +import { cn } from '@/util'; import { BaseSkeleton } from '../BaseSkeleton'; diff --git a/services/one-app/src/common/components/Comment/BaseCommentList.tsx b/services/one-app/src/component/Comment/BaseCommentList.tsx similarity index 94% rename from services/one-app/src/common/components/Comment/BaseCommentList.tsx rename to services/one-app/src/component/Comment/BaseCommentList.tsx index 43e3b5269..2bd414f1e 100644 --- a/services/one-app/src/common/components/Comment/BaseCommentList.tsx +++ b/services/one-app/src/component/Comment/BaseCommentList.tsx @@ -2,7 +2,7 @@ import React from 'react'; -import type { CommentList } from '@/model'; +import type { CommentList } from '@/types'; import { CommentCard } from './CommentCard'; import { EmptyCommentList } from './EmptyCommentList'; diff --git a/services/one-app/src/common/components/Comment/CommentCard.tsx b/services/one-app/src/component/Comment/CommentCard.tsx similarity index 71% rename from services/one-app/src/common/components/Comment/CommentCard.tsx rename to services/one-app/src/component/Comment/CommentCard.tsx index bf4ce6ac6..5d8050c62 100644 --- a/services/one-app/src/common/components/Comment/CommentCard.tsx +++ b/services/one-app/src/component/Comment/CommentCard.tsx @@ -1,9 +1,12 @@ 'use client'; -import { LexicalSyntaxContentParser } from '@/app/(site)/_component/Editor'; -import { EllipsisIcon } from '@/common/assets/icons'; -import { cn, formatDate } from '@/common/utils'; -import type { Comment } from '@/model'; +import { formatDateTime } from '@ahhachul/utils'; + +import { EllipsisIcon } from '@/asset/icon'; +import type { Comment } from '@/types'; +import { cn } from '@/util'; + +import { ReadonlyEditor } from '../Editor'; interface CommentCardProps { comment: Comment; @@ -24,14 +27,16 @@ export const CommentCard = ({ comment, asChild = false }: CommentCardProps) => {
{comment.status === 'CREATED' ? ( - div>div]:p-0', '[&>div>div]:border-none')} /> ) : (
์‚ญ์ œ๋œ ๋Œ“๊ธ€์ž…๋‹ˆ๋‹ค.
)} - {formatDate(comment.createdAt)} + + {formatDateTime(comment.createdAt, { format: 'short' })} +
diff --git a/services/one-app/src/common/components/Comment/CommentTextField.tsx b/services/one-app/src/component/Comment/CommentTextField.tsx similarity index 95% rename from services/one-app/src/common/components/Comment/CommentTextField.tsx rename to services/one-app/src/component/Comment/CommentTextField.tsx index 3d843eb6a..b897e039e 100644 --- a/services/one-app/src/common/components/Comment/CommentTextField.tsx +++ b/services/one-app/src/component/Comment/CommentTextField.tsx @@ -4,8 +4,9 @@ import React from 'react'; import { EditorState } from 'lexical'; -import { Editor } from '@/app/(site)/_component/Editor'; -import { cn } from '@/common/utils'; +import { cn } from '@/util'; + +import { Editor } from '../Editor'; interface CommentTextFieldProps { placeholder: string; diff --git a/services/one-app/src/common/components/Comment/EmptyCommentList.tsx b/services/one-app/src/component/Comment/EmptyCommentList.tsx similarity index 92% rename from services/one-app/src/common/components/Comment/EmptyCommentList.tsx rename to services/one-app/src/component/Comment/EmptyCommentList.tsx index 6059f0945..6d59cfe40 100644 --- a/services/one-app/src/common/components/Comment/EmptyCommentList.tsx +++ b/services/one-app/src/component/Comment/EmptyCommentList.tsx @@ -1,6 +1,6 @@ 'use client'; -import { cn } from '@/common/utils/cn'; +import { cn } from '@/util/cn'; interface Props { className?: string; diff --git a/services/one-app/src/common/components/Comment/index.ts b/services/one-app/src/component/Comment/index.ts similarity index 100% rename from services/one-app/src/common/components/Comment/index.ts rename to services/one-app/src/component/Comment/index.ts diff --git a/services/one-app/src/common/components/ConditionalRender.spec.tsx b/services/one-app/src/component/ConditionalRender.spec.tsx similarity index 100% rename from services/one-app/src/common/components/ConditionalRender.spec.tsx rename to services/one-app/src/component/ConditionalRender.spec.tsx diff --git a/services/one-app/src/common/components/ConditionalRender.tsx b/services/one-app/src/component/ConditionalRender.tsx similarity index 100% rename from services/one-app/src/common/components/ConditionalRender.tsx rename to services/one-app/src/component/ConditionalRender.tsx diff --git a/services/one-app/src/common/components/Drawer.tsx b/services/one-app/src/component/Drawer.tsx similarity index 98% rename from services/one-app/src/common/components/Drawer.tsx rename to services/one-app/src/component/Drawer.tsx index 2af68e890..443d7ce3f 100644 --- a/services/one-app/src/common/components/Drawer.tsx +++ b/services/one-app/src/component/Drawer.tsx @@ -4,7 +4,7 @@ import * as React from 'react'; import { Drawer as DrawerPrimitive } from 'vaul'; -import { cn } from '@/common/utils/cn'; +import { cn } from '@/util/cn'; const Drawer = ({ shouldScaleBackground = true, diff --git a/services/one-app/src/app/(site)/_component/Editor/Editor.tsx b/services/one-app/src/component/Editor/Editor.tsx similarity index 84% rename from services/one-app/src/app/(site)/_component/Editor/Editor.tsx rename to services/one-app/src/component/Editor/Editor.tsx index f414d7359..6e62c890c 100644 --- a/services/one-app/src/app/(site)/_component/Editor/Editor.tsx +++ b/services/one-app/src/component/Editor/Editor.tsx @@ -7,11 +7,7 @@ import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin'; import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin'; import type { EditorState } from 'lexical'; -import { - OnChangePlugin, - SpeechToTextPlugin, - SpeechToTextToolbarPlugin, -} from '@/app/(site)/_component/Editor'; +import { OnChangePlugin, SpeechToTextPlugin, SpeechToTextToolbarPlugin } from './plugin'; const theme = {}; @@ -35,12 +31,18 @@ const Placeholder = ({ type Props = { showMic?: boolean; readonly?: boolean; - placeholder?: string; + placeholder?: string | false; initialState?: string; onChange?: (editorState: EditorState | null) => void; }; -export const Editor = ({ showMic, readonly, placeholder, initialState, onChange }: Props) => { +export const Editor = ({ + showMic, + readonly, + placeholder = false, + initialState, + onChange, +}: Props) => { const initialConfig = { namespace: 'MyEditor', theme, @@ -54,7 +56,7 @@ export const Editor = ({ showMic, readonly, placeholder, initialState, onChange contentEditable={ } - placeholder={} + placeholder={placeholder && } ErrorBoundary={LexicalErrorBoundary} /> diff --git a/services/one-app/src/app/(site)/_component/Editor/LexicalSyntaxContentParser.tsx b/services/one-app/src/component/Editor/ReadonlyEditor.tsx similarity index 66% rename from services/one-app/src/app/(site)/_component/Editor/LexicalSyntaxContentParser.tsx rename to services/one-app/src/component/Editor/ReadonlyEditor.tsx index a2fb183dc..c4da73a22 100644 --- a/services/one-app/src/app/(site)/_component/Editor/LexicalSyntaxContentParser.tsx +++ b/services/one-app/src/component/Editor/ReadonlyEditor.tsx @@ -1,13 +1,13 @@ import { Editor } from '.'; -import { cn } from '@/common/utils/cn'; +import { cn } from '@/util/cn'; export type Props = { content: string; className?: string; }; -export const LexicalSyntaxContentParser = ({ content, className }: Props) => { +export const ReadonlyEditor = ({ content, className }: Props) => { return (
diff --git a/services/one-app/src/app/(site)/_hook/useReport.ts b/services/one-app/src/component/Editor/hook/useReport.ts similarity index 100% rename from services/one-app/src/app/(site)/_hook/useReport.ts rename to services/one-app/src/component/Editor/hook/useReport.ts diff --git a/services/one-app/src/component/Editor/index.ts b/services/one-app/src/component/Editor/index.ts new file mode 100644 index 000000000..99fb4b707 --- /dev/null +++ b/services/one-app/src/component/Editor/index.ts @@ -0,0 +1,4 @@ +export * from './plugin'; + +export * from './Editor'; +export * from './ReadonlyEditor'; diff --git a/services/one-app/src/app/(site)/_component/Editor/plugins/OnChangePlugin.tsx b/services/one-app/src/component/Editor/plugin/OnChangePlugin.tsx similarity index 100% rename from services/one-app/src/app/(site)/_component/Editor/plugins/OnChangePlugin.tsx rename to services/one-app/src/component/Editor/plugin/OnChangePlugin.tsx diff --git a/services/one-app/src/app/(site)/_component/Editor/plugins/SpeechToTextPlugin.tsx b/services/one-app/src/component/Editor/plugin/SpeechToTextPlugin.tsx similarity index 98% rename from services/one-app/src/app/(site)/_component/Editor/plugins/SpeechToTextPlugin.tsx rename to services/one-app/src/component/Editor/plugin/SpeechToTextPlugin.tsx index 5e87e5666..acbdf4c37 100644 --- a/services/one-app/src/app/(site)/_component/Editor/plugins/SpeechToTextPlugin.tsx +++ b/services/one-app/src/component/Editor/plugin/SpeechToTextPlugin.tsx @@ -20,7 +20,7 @@ import { UNDO_COMMAND, } from 'lexical'; -import { useReport } from '@/app/(site)/_hook'; +import { useReport } from '../hook/useReport'; export const SPEECH_TO_TEXT_COMMAND: LexicalCommand = createCommand('SPEECH_TO_TEXT_COMMAND'); diff --git a/services/one-app/src/app/(site)/_component/Editor/plugins/SpeechToTextToolbarPlugin.tsx b/services/one-app/src/component/Editor/plugin/SpeechToTextToolbarPlugin.tsx similarity index 96% rename from services/one-app/src/app/(site)/_component/Editor/plugins/SpeechToTextToolbarPlugin.tsx rename to services/one-app/src/component/Editor/plugin/SpeechToTextToolbarPlugin.tsx index 8121c4554..abb632426 100644 --- a/services/one-app/src/app/(site)/_component/Editor/plugins/SpeechToTextToolbarPlugin.tsx +++ b/services/one-app/src/component/Editor/plugin/SpeechToTextToolbarPlugin.tsx @@ -4,7 +4,7 @@ import { useEffect, useRef, useState } from 'react'; import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; -import { MicIcon } from '@/common/assets/icons'; +import { MicIcon } from '@/asset/icon'; import { SPEECH_TO_TEXT_COMMAND } from './SpeechToTextPlugin'; diff --git a/services/one-app/src/app/(site)/_component/Editor/plugins/index.ts b/services/one-app/src/component/Editor/plugin/index.ts similarity index 100% rename from services/one-app/src/app/(site)/_component/Editor/plugins/index.ts rename to services/one-app/src/component/Editor/plugin/index.ts diff --git a/services/one-app/src/common/components/Filter/DropdownFilter.tsx b/services/one-app/src/component/Filter/DropdownFilter.tsx similarity index 56% rename from services/one-app/src/common/components/Filter/DropdownFilter.tsx rename to services/one-app/src/component/Filter/DropdownFilter.tsx index 5fac887a3..349cf15fc 100644 --- a/services/one-app/src/common/components/Filter/DropdownFilter.tsx +++ b/services/one-app/src/component/Filter/DropdownFilter.tsx @@ -3,36 +3,55 @@ import React from 'react'; import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; +import { usePathname, useSearchParams } from 'next/navigation'; +import { useRouter } from 'nextjs-toploader/app'; -import { CheckIcon, ChevronDownIcon } from '@/common/assets/icons'; -import { cn, objectEntries } from '@/common/utils'; -import type { KeyOf } from '@/model'; +import { objectEntries } from '@ahhachul/utils'; -export interface DropdownFilterProps, K extends KeyOf> { - name: K; - filters: T; - options: Record; - onSelect: (key: K, value: T[K]) => void; +import { CheckIcon, ChevronDownIcon } from '@/asset/icon'; +import type { KeyOf, ObjectQueryParams } from '@/types'; +import { cn } from '@/util'; + +export interface DropdownFilterProps> { + name: string; + value: K; + options: T; } -export const DropdownFilter = , K extends KeyOf>({ - filters, - options, - onSelect, +export const DropdownFilter = >({ name, + value, + options, }: DropdownFilterProps): React.ReactElement => { - const activeValue = filters[name]; - const defaultValue = Object.keys(options)[0] as T[K]; - const isActive = activeValue !== defaultValue; + const defaultValue = Object.keys(options)[0] as KeyOf; + const isActive = defaultValue !== value; + + const router = useRouter(); + const pathname = usePathname(); + const searchParams = useSearchParams(); + + const onSelect = (newVal: string) => { + let newSearchParams = new URLSearchParams(searchParams); + + if (newVal === defaultValue) { + newSearchParams.delete(name); + } else { + newSearchParams.set(name, newVal); + } + + router.push(`${pathname}?${newSearchParams.toString()}`); + }; return ( @@ -48,8 +67,8 @@ export const DropdownFilter = , K extends KeyOf )} > onSelect(name, newValue as T[K])} + value={value as string} + onValueChange={newValue => onSelect(newValue)} > {objectEntries(options).map(([val, label]) => ( void; + options: ObjectQueryParams; } -export const ResetFilter = ({ activatedCount, handleReset }: Props) => { - const renderThis = activatedCount > 0; +export const ResetFilter = ({ options }: Props) => { + const router = useRouter(); + const pathname = usePathname(); + + const clearSearchParams = () => { + router.push(pathname); + }; + + const searchParams = useSearchParams(); + const renderThis = !!searchParams.toString(); + const activatedCount = Object.keys(options).filter( + key => searchParams.has(key) && searchParams.get(key) !== options[key], + ).length; return (