From b419b32a404db0fdab70a67c151e62120ea4d58e Mon Sep 17 00:00:00 2001 From: dorae222 Date: Sun, 9 Nov 2025 19:48:52 +0000 Subject: [PATCH 01/28] :bento: assets: add full favicon set and enrich webmanifest (name, start_url, theme-color) --- itdaing-web/index.html | 45 +++++++++++++----- itdaing-web/public/android-chrome-192x192.png | Bin 0 -> 16741 bytes itdaing-web/public/android-chrome-512x512.png | Bin 0 -> 77096 bytes itdaing-web/public/apple-touch-icon.png | Bin 0 -> 14902 bytes itdaing-web/public/favicon-16x16.png | Bin 0 -> 484 bytes itdaing-web/public/favicon-32x32.png | Bin 0 -> 1144 bytes itdaing-web/public/favicon.ico | Bin 0 -> 15406 bytes itdaing-web/public/site.webmanifest | 1 + 8 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 itdaing-web/public/android-chrome-192x192.png create mode 100644 itdaing-web/public/android-chrome-512x512.png create mode 100644 itdaing-web/public/apple-touch-icon.png create mode 100644 itdaing-web/public/favicon-16x16.png create mode 100644 itdaing-web/public/favicon-32x32.png create mode 100644 itdaing-web/public/favicon.ico create mode 100644 itdaing-web/public/site.webmanifest diff --git a/itdaing-web/index.html b/itdaing-web/index.html index a4acbc1..f5c0806 100644 --- a/itdaing-web/index.html +++ b/itdaing-web/index.html @@ -1,13 +1,32 @@ - - - - - - - itdaing-web - - -
- - - + + + + + + + Da-Itdaing + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/itdaing-web/public/android-chrome-192x192.png b/itdaing-web/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..169d9a6f3737dbaca4eede38241166f1a5b56717 GIT binary patch literal 16741 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 z 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 literal 0 HcmV?d00001 diff --git a/itdaing-web/public/apple-touch-icon.png b/itdaing-web/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd75bf3c597a0b990158966b713acd0e016c786b GIT binary patch literal 14902 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 ZgLHl-^`O{MCV$s}NQujdRg35c{tu_8fKmVe literal 0 HcmV?d00001 diff --git a/itdaing-web/public/favicon-16x16.png b/itdaing-web/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..cd9e37c6866f32ac4dcc8820b83a1a07cc2d22b5 GIT binary patch literal 484 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 D=0A|e literal 0 HcmV?d00001 diff --git a/itdaing-web/public/site.webmanifest b/itdaing-web/public/site.webmanifest new file mode 100644 index 0000000..dba4940 --- /dev/null +++ b/itdaing-web/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"Da-Itdaing","short_name":"itdaing","description":"팝업/이벤트 탐색과 리뷰를 제공하는 Itdaing 서비스","start_url":"/","scope":"/","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#0a4195","background_color":"#0a4195","display":"standalone","orientation":"portrait","categories":["lifestyle","shopping","events"]} \ No newline at end of file From 239be0ce4d8f3e4b54ddf501ecc5c9a732e08dee Mon Sep 17 00:00:00 2001 From: dorae222 Date: Sun, 9 Nov 2025 19:49:01 +0000 Subject: [PATCH 02/28] :sparkles: feat: enable PWA (service worker, offline fallback, import.meta types) --- itdaing-web/README.md | 135 ++++++++++++-------------------- itdaing-web/public/offline.html | 29 +++++++ itdaing-web/public/sw.js | 56 +++++++++++++ itdaing-web/src/main.tsx | 20 +++++ itdaing-web/tsconfig.json | 20 +++++ 5 files changed, 173 insertions(+), 87 deletions(-) create mode 100644 itdaing-web/public/offline.html create mode 100644 itdaing-web/public/sw.js create mode 100644 itdaing-web/src/main.tsx create mode 100644 itdaing-web/tsconfig.json diff --git a/itdaing-web/README.md b/itdaing-web/README.md index 7a7bb57..997a9f1 100644 --- a/itdaing-web/README.md +++ b/itdaing-web/README.md @@ -1,112 +1,73 @@ -# itdaing-web 프론트엔드 (React + Vite) -`itdaing-web` 폴더가 이제 백엔드 프로젝트 루트 `final-project/` 아래에 함께 위치합니다. -백엔드(Spring Boot)는 `/api/**` 를 처리하고, Nginx가 정적 파일(`/var/www/itdaing`)을 서비스하며 `/api/` 요청을 백엔드(8080)로 프록시합니다. +# itdaing-web (frontend) -## 1. 개발 환경 실행 +[![CI](https://github.com/da-itdaing/final-project/actions/workflows/ci.yml/badge.svg?branch=dev/integration)](https://github.com/da-itdaing/final-project/actions/workflows/ci.yml) -```bash -cd final-project/itdaing-web -npm install # 최초 1회 -npm run dev # 기본 포트: 5173 -``` - -브라우저에서: `http://localhost:5173` (백엔드 API를 호출할 때는 프록시 설정을 직접 구성하거나, 운영 환경과 달리 절대경로 `/api/...` 사용 권장) +## Quick start -## 2. 빌드 +1) Install dependencies ```bash -npm run build # dist/ 생성 +npm i ``` -생성 결과: `final-project/itdaing-web/dist/` 폴더 - -## 3. 운영 반영 (배포) - -운영 서버(Nginx)가 정적 루트로 `/var/www/itdaing` 을 사용한다고 가정: +2) Start dev server ```bash -# 로컬/EC2 동일 서버에서 수동 배포 -sudo rsync -av --delete final-project/itdaing-web/dist/ /var/www/itdaing/ -sudo nginx -t && sudo systemctl reload nginx +npm run dev ``` -반복 작업을 쉽게 하기 위해 `scripts/deploy-frontend.sh` 스크립트를 추가했습니다: +3) Build ```bash -./scripts/deploy-frontend.sh # 기본: dist 빌드 후 /var/www/itdaing 동기화 -TARGET_DIR=/var/www/another ./scripts/deploy-frontend.sh # 대상 디렉터리 변경 -SKIP_INSTALL=1 ./scripts/deploy-frontend.sh # npm install 건너뛰기 -``` - -## 4. 변경사항 검증 방법 - -배포 후 아래를 통해 새 빌드가 적용되었는지 확인합니다. - -1. 헤더 확인 (200 + 최신 파일): - ```bash - curl -I http:/// | grep -i 'etag\|last-modified\|content-length' - ``` -2. 인덱스 파일 해시(선택): - ```bash - sha256sum final-project/itdaing-web/dist/index.html - curl -s http:///index.html | sha256sum - # 두 해시가 동일하면 최신 파일이 반영된 것 - ``` -3. 정적 자산 버전(빌드 시점) 표시를 위해 필요하면 `index.html` 에 간단히 주석 추가: - ```html - - ``` - 또는 `package.json` 의 version을 화면에 출력하도록 컴포넌트에 반영. -4. 브라우저 강제 새로고침 (캐시 무효화): `Ctrl+Shift+R` / DevTools > Disable cache 체크. -5. API 프록시 동작 확인: - ```bash - curl -i http:///api/actuator/health - ``` - -## 5. 폴더 구조 요약 - -``` -final-project/ - itdaing-web/ - src/ # React 소스 - dist/ # 프로덕션 빌드 산출물 (npm run build 후) - src/main/... # Spring Boot 백엔드 - scripts/ # 배포 스크립트 등 +npm run build ``` -## 6. ESLint / 품질 +## CI behavior -기본 템플릿 그대로이며 필요 시 다음을 추가 고려: -- 절대경로 import 설정 (vite alias) -- 환경별 `.env` 파일 (`VITE_API_BASE=/api` 등) -- Lighthouse/웹 성능 측정 자동화 +- dev/integration 브랜치에 push 또는 PR이 올라오면 GitHub Actions 가 자동으로 프론트엔드/백엔드를 각각 빌드합니다. +- 프론트엔드: Node 20 + Vite 빌드 → `dist/` 산출물 아티팩트 업로드 +- 백엔드: JDK 21 + Gradle `bootJar -x test` (테스트는 CI 기본 단계에서 스킵) -## 7. Vite 및 React 플러그인 메모 +## Commit 메시지 (gitmoji) -- `@vitejs/plugin-react-swc` 사용 (빠른 HMR) -- React Compiler는 현재 SWC와 호환되지 않음: 진행 상황은 [이슈](https://github.com/vitejs/vite-plugin-react/issues/428) 참고 +- 커밋 메시지 맨 앞에 gitmoji를 사용합니다. 예) + - ✨ feat: 캐러셀 반응형 개선 + - 🐛 fix: 모바일 우측 overflow 수정 + - 🔧 chore: CI 스크립트 정리 -## 8. 향후 개선 아이디어 +간편하게는 gitmoji-cli를 사용할 수 있습니다: -- 빌드 결과에 릴리즈 태그 삽입 (예: `RELEASE.txt` -> Nginx add_header로 노출 가능) -- CloudFront/S3 정적 호스팅 이전 검토 -- GitHub Actions로 자동 빌드 & 배포 (캐시 활용) - ---- -기존 Vite 템플릿 설명은 아래 원문을 참고하세요. - ---- - -## Original Vite Template Notes - -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. +```bash +npx gitmoji -c +``` -Currently, two official plugins are available: +또는 직접 이모지/코드를 붙여서 커밋해도 됩니다. 예: `git commit -m ":sparkles: feat: add hero carousel breakpoints"` -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh +## PWA 기능 -React Compiler is not currently compatible with SWC. See [this issue](https://github.com/vitejs/vite-plugin-react/issues/428) for tracking the progress. +- 설치 가능: manifest(`site.webmanifest`) + service worker(`public/sw.js`) 등록으로 홈 화면 추가 가능 +- 오프라인 처리: 네비게이션 실패 시 `offline.html`을 표시 +- 캐시 전략: 앱 셸(정적 아이콘/HTML/manifest)은 install 시 선 캐시, 나머지 요청은 Cache First + 네트워크 후 런타임 캐시 저장 +- 버전 변경: `sw.js` 내부 `VERSION` 수정 후 다시 빌드/배포하면 오래된 캐시 자동 제거 -For production apps, consider TypeScript + type-aware ESLint rules. See the TS template for integration details. +### 로컬 테스트 방법 +1. 개발 모드에서는 service worker가 등록되지 않습니다 (`import.meta.env.PROD` 조건). +2. 프로덕션 빌드 후 로컬 프리뷰: +```bash +npm run build +npm run preview +``` +3. 브라우저 DevTools > Application > Service Workers 에서 등록 확인 후 + - Network 탭에서 "Offline" 체크 → 새 탭에서 페이지 이동 시 `offline.html` 응답 확인 +4. 홈 화면 추가(Android Chrome): 메뉴 → "앱 설치" (Add to Home screen) + +### 캐시 무효화 +배포 후 아이콘/코드 변경이 갱신 안 되면: +1) `sw.js`의 VERSION 값을 증가 → 다시 빌드/배포 +2) 사용자가 브라우저 DevTools > Application > Service Workers > unregister 후 새로고침 + +### 향후 확장 아이디어 +- Precache 주요 라우트별 코드 스플릿 청크 +- 백엔드 API 응답(팝업 목록 등)에 대한 Stale-While-Revalidate 전략 추가 +- Push 알림 (FCM) 연계 및 Background Sync diff --git a/itdaing-web/public/offline.html b/itdaing-web/public/offline.html new file mode 100644 index 0000000..21da868 --- /dev/null +++ b/itdaing-web/public/offline.html @@ -0,0 +1,29 @@ + + + + + + 오프라인 상태입니다 • Itdaing + + + + + + + diff --git a/itdaing-web/public/sw.js b/itdaing-web/public/sw.js new file mode 100644 index 0000000..17427cb --- /dev/null +++ b/itdaing-web/public/sw.js @@ -0,0 +1,56 @@ +/* Basic PWA service worker for Da-Itdaing */ +const VERSION = 'v1'; +const APP_SHELL = [ + '/', + '/index.html', + '/offline.html', + '/favicon-16x16.png', + '/favicon-32x32.png', + '/apple-touch-icon.png', + '/android-chrome-192x192.png', + '/android-chrome-512x512.png', + '/site.webmanifest' +]; +const RUNTIME_CACHE = 'runtime-' + VERSION; +const SHELL_CACHE = 'shell-' + VERSION; + +self.addEventListener('install', (event) => { + event.waitUntil( + caches.open(SHELL_CACHE).then(cache => cache.addAll(APP_SHELL)).then(() => self.skipWaiting()) + ); +}); + +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys().then(keys => Promise.all( + keys.filter(k => ![SHELL_CACHE, RUNTIME_CACHE].includes(k)).map(k => caches.delete(k)) + )).then(() => self.clients.claim()) + ); +}); + +self.addEventListener('fetch', (event) => { + const { request } = event; + if (request.method !== 'GET') return; // skip non-GET + + // HTML navigation requests: network first, fallback to offline.html + if (request.mode === 'navigate') { + event.respondWith( + fetch(request).catch(() => caches.match('/offline.html')) + ); + return; + } + + // For other GET requests: try cache, then network, then put in runtime cache. + event.respondWith( + caches.match(request).then(cached => { + if (cached) return cached; + return fetch(request).then(resp => { + // skip opaque and error responses + if (!resp || resp.status !== 200 || resp.type === 'opaque') return resp; + const clone = resp.clone(); + caches.open(RUNTIME_CACHE).then(cache => cache.put(request, clone)); + return resp; + }).catch(() => cached); // if network fails and no cache, undefined propagates + }) + ); +}); diff --git a/itdaing-web/src/main.tsx b/itdaing-web/src/main.tsx new file mode 100644 index 0000000..b285ca9 --- /dev/null +++ b/itdaing-web/src/main.tsx @@ -0,0 +1,20 @@ +import { createRoot } from "react-dom/client"; +import App from "./App"; +import "./index.css"; +import { UserProvider } from "./context/UserContext"; + +createRoot(document.getElementById("root")!).render( + + + +); + +// Register service worker for PWA (only in production) +if ('serviceWorker' in navigator && import.meta.env.PROD) { + window.addEventListener('load', () => { + navigator.serviceWorker.register('/sw.js').catch((err) => { + console.warn('SW registration failed:', err); + }); + }); +} + \ No newline at end of file diff --git a/itdaing-web/tsconfig.json b/itdaing-web/tsconfig.json new file mode 100644 index 0000000..b207933 --- /dev/null +++ b/itdaing-web/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "Node", + "jsx": "react-jsx", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "isolatedModules": true, + "allowSyntheticDefaultImports": true, + "types": ["node", "react", "react-dom", "vite/client"], + "noEmit": true, + "baseUrl": "./src" + }, + "include": ["src"], + "exclude": ["node_modules", "dist" ] +} From 29c1f9d0308867ca20f94686f2dacfdc12f65eba Mon Sep 17 00:00:00 2001 From: dorae222 Date: Sun, 9 Nov 2025 19:52:10 +0000 Subject: [PATCH 03/28] :truck: chore: strengthen .gitignore for backend/gradle and frontend/vite+pwa caches --- .gitignore | 17 +++++++++++++++++ itdaing-web/.gitignore | 20 +++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 62af2e0..4d6461f 100644 --- a/.gitignore +++ b/.gitignore @@ -92,3 +92,20 @@ gh-pages.pub uploads/ tmp/ temp/ + +### Frontend build / caches (itdaing-web) +itdaing-web/node_modules/ +itdaing-web/dist/ +itdaing-web/dist-ssr/ +itdaing-web/.vite/ +itdaing-web/.cache/ +itdaing-web/**/*.map + +### PWA transient artifacts (if generated during experiments) +itdaing-web/public/sw.*.map +itdaing-web/public/workbox-*.* + +### Editor / OS (frontend duplicates handled here for safety) +itdaing-web/.DS_Store +itdaing-web/Thumbs.db + diff --git a/itdaing-web/.gitignore b/itdaing-web/.gitignore index a547bf3..a7180ba 100644 --- a/itdaing-web/.gitignore +++ b/itdaing-web/.gitignore @@ -12,11 +12,29 @@ dist dist-ssr *.local +# Vite/Preview local cache +.vite +.cache + +# Service worker build outputs / web manifests (runtime-generated) +public/*.webp +public/*.map + +# PWA dev artifacts (if any tools add these) +workbox-*. +sw.*.js +sw.*.map +*service-worker*.js +*.cache + +# OS +.DS_Store +Thumbs.db + # Editor directories and files .vscode/* !.vscode/extensions.json .idea -.DS_Store *.suo *.ntvs* *.njsproj From cf163a1b8161e74730fa238ee5f9f4a3622c875f Mon Sep 17 00:00:00 2001 From: dorae222 Date: Sun, 9 Nov 2025 19:57:50 +0000 Subject: [PATCH 04/28] :bricks: ci: add backend+frontend build workflow on dev/integration --- .github/workflows/ci.yml | 84 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..b67acd0 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,84 @@ +name: "CI (backend + frontend)" +on: + push: + branches: [dev/integration] + paths: + - 'itdaing-web/**' + - 'src/**' + - 'build.gradle.kts' + - 'settings.gradle.kts' + - '.github/workflows/ci.yml' + - 'docs/**' + pull_request: + branches: [dev/integration] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: "ci-${{ github.ref }}" + cancel-in-progress: true + +jobs: + backend: + name: Backend build (Gradle) + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + lfs: true + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '21' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + + - name: Build server (skip tests) + run: ./gradlew --no-daemon clean bootJar -x test + + - name: Upload backend artifact + uses: actions/upload-artifact@v4 + with: + name: backend-jar + path: build/libs/*.jar + if-no-files-found: error + retention-days: 7 + + frontend: + name: Frontend build (Vite) + runs-on: ubuntu-latest + defaults: + run: + working-directory: itdaing-web + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + lfs: true + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + cache-dependency-path: itdaing-web/package-lock.json + + - name: Install dependencies + run: npm ci --no-audit --no-fund + + - name: Build web + run: npm run build + + - name: Upload frontend artifact + uses: actions/upload-artifact@v4 + with: + name: frontend-dist + path: itdaing-web/dist + if-no-files-found: error + retention-days: 7 From ca0c3642dd2219809ceb999e8d3df9d30a442ca0 Mon Sep 17 00:00:00 2001 From: dorae222 Date: Sun, 9 Nov 2025 19:57:50 +0000 Subject: [PATCH 05/28] :recycle: refactor: replace initial Vite template with new TypeScript app --- itdaing-web/eslint.config.js | 29 - itdaing-web/package-lock.json | 6343 +++++++++------- itdaing-web/package.json | 86 +- itdaing-web/public/README-favicon.txt | 6 + itdaing-web/public/vite.svg | 1 - itdaing-web/src/App.css | 42 - itdaing-web/src/App.jsx | 35 - itdaing-web/src/App.tsx | 555 ++ .../favicon_io/android-chrome-192x192.png | Bin 0 -> 16741 bytes .../favicon_io/android-chrome-512x512.png | Bin 0 -> 77096 bytes .../assets/favicon_io/apple-touch-icon.png | Bin 0 -> 14902 bytes .../src/assets/favicon_io/favicon-16x16.png | Bin 0 -> 484 bytes .../src/assets/favicon_io/favicon-32x32.png | Bin 0 -> 1144 bytes itdaing-web/src/assets/favicon_io/favicon.ico | Bin 0 -> 15406 bytes .../src/assets/favicon_io/site.webmanifest | 1 + itdaing-web/src/assets/react.svg | 1 - .../components/auth/LoginConfirmDialog.tsx | 80 + itdaing-web/src/components/auth/LoginPage.tsx | 214 + .../src/components/auth/SignupPage1.tsx | 246 + .../src/components/auth/SignupPage2.tsx | 227 + .../src/components/common/BottomNav.tsx | 33 + .../common/CommunityFilterButtons.tsx | 3 + .../src/components/common/EventCard.tsx | 3 + .../src/components/common/EventSection.tsx | 25 + .../src/components/common/FilterButtons.tsx | 2 + itdaing-web/src/components/common/Footer.tsx | 58 + itdaing-web/src/components/common/Header.tsx | 272 + .../src/components/common/HeroCarousel.tsx | 255 + .../components/common/HorizontalBanner.tsx | 5 + .../components/common/ImageWithFallback.tsx | 27 + .../src/components/common/PopupDetailPage.tsx | 588 ++ .../src/components/common/SectionTitle.tsx | 2 + .../src/components/common/SignupPage1.tsx | 296 + .../src/components/common/SignupPage2.tsx | 243 + .../src/components/consumer/MyPage.tsx | 453 ++ .../components/consumer/MyPageCalendar.tsx | 14 + .../components/consumer/MyPageFavorites.tsx | 43 + .../src/components/consumer/MyPageProfile.tsx | 7 + .../src/components/consumer/MyPageReviews.tsx | 20 + .../components/consumer/NearbyExplorePage.tsx | 17 + .../consumer/RecommendationModal.tsx | 24 + .../components/consumer/ReviewWritePage.tsx | 22 + .../components/seller/ImageWithFallback.tsx | 1 + .../src/components/seller/SellerDashboard.tsx | 45 + .../src/components/seller/SellerInfoPage.tsx | 38 + itdaing-web/src/components/ui/accordion.tsx | 66 + .../src/components/ui/alert-dialog.tsx | 157 + itdaing-web/src/components/ui/alert.tsx | 66 + .../src/components/ui/aspect-ratio.tsx | 11 + itdaing-web/src/components/ui/avatar.tsx | 53 + itdaing-web/src/components/ui/badge.tsx | 46 + itdaing-web/src/components/ui/breadcrumb.tsx | 109 + itdaing-web/src/components/ui/button.tsx | 58 + itdaing-web/src/components/ui/calendar.tsx | 75 + itdaing-web/src/components/ui/card.tsx | 92 + itdaing-web/src/components/ui/carousel.tsx | 241 + itdaing-web/src/components/ui/chart.tsx | 353 + itdaing-web/src/components/ui/checkbox.tsx | 32 + itdaing-web/src/components/ui/collapsible.tsx | 33 + itdaing-web/src/components/ui/command.tsx | 177 + .../src/components/ui/context-menu.tsx | 252 + itdaing-web/src/components/ui/dialog.tsx | 135 + itdaing-web/src/components/ui/drawer.tsx | 132 + .../src/components/ui/dropdown-menu.tsx | 257 + itdaing-web/src/components/ui/form.tsx | 168 + itdaing-web/src/components/ui/hover-card.tsx | 44 + itdaing-web/src/components/ui/input-otp.tsx | 77 + itdaing-web/src/components/ui/input.tsx | 21 + itdaing-web/src/components/ui/label.tsx | 24 + itdaing-web/src/components/ui/menubar.tsx | 276 + .../src/components/ui/navigation-menu.tsx | 168 + itdaing-web/src/components/ui/pagination.tsx | 125 + itdaing-web/src/components/ui/popover.tsx | 48 + itdaing-web/src/components/ui/progress.tsx | 31 + itdaing-web/src/components/ui/radio-group.tsx | 45 + itdaing-web/src/components/ui/resizable.tsx | 56 + itdaing-web/src/components/ui/scroll-area.tsx | 58 + itdaing-web/src/components/ui/select.tsx | 189 + itdaing-web/src/components/ui/separator.tsx | 28 + itdaing-web/src/components/ui/sheet.tsx | 139 + itdaing-web/src/components/ui/sidebar.tsx | 726 ++ itdaing-web/src/components/ui/skeleton.tsx | 13 + itdaing-web/src/components/ui/slider.tsx | 63 + itdaing-web/src/components/ui/sonner.tsx | 25 + itdaing-web/src/components/ui/switch.tsx | 31 + itdaing-web/src/components/ui/table.tsx | 116 + itdaing-web/src/components/ui/tabs.tsx | 66 + itdaing-web/src/components/ui/textarea.tsx | 18 + .../src/components/ui/toggle-group.tsx | 73 + itdaing-web/src/components/ui/toggle.tsx | 47 + itdaing-web/src/components/ui/tooltip.tsx | 61 + itdaing-web/src/components/ui/use-mobile.ts | 21 + itdaing-web/src/components/ui/utils.ts | 6 + itdaing-web/src/context/UserContext.tsx | 51 + itdaing-web/src/data/popups.ts | 835 +++ itdaing-web/src/data/reviews.ts | 317 + itdaing-web/src/data/sellers.ts | 168 + itdaing-web/src/index.css | 6551 ++++++++++++++++- itdaing-web/src/main.jsx | 10 - itdaing-web/src/styles/globals.css | 207 + itdaing-web/src/types/figma-asset.d.ts | 4 + itdaing-web/vite.config.js | 7 - itdaing-web/vite.config.ts | 35 + 103 files changed, 20991 insertions(+), 2664 deletions(-) delete mode 100644 itdaing-web/eslint.config.js create mode 100644 itdaing-web/public/README-favicon.txt delete mode 100644 itdaing-web/public/vite.svg delete mode 100644 itdaing-web/src/App.css delete mode 100644 itdaing-web/src/App.jsx create mode 100644 itdaing-web/src/App.tsx create mode 100644 itdaing-web/src/assets/favicon_io/android-chrome-192x192.png create mode 100644 itdaing-web/src/assets/favicon_io/android-chrome-512x512.png create mode 100644 itdaing-web/src/assets/favicon_io/apple-touch-icon.png create mode 100644 itdaing-web/src/assets/favicon_io/favicon-16x16.png create mode 100644 itdaing-web/src/assets/favicon_io/favicon-32x32.png create mode 100644 itdaing-web/src/assets/favicon_io/favicon.ico create mode 100644 itdaing-web/src/assets/favicon_io/site.webmanifest delete mode 100644 itdaing-web/src/assets/react.svg create mode 100644 itdaing-web/src/components/auth/LoginConfirmDialog.tsx create mode 100644 itdaing-web/src/components/auth/LoginPage.tsx create mode 100644 itdaing-web/src/components/auth/SignupPage1.tsx create mode 100644 itdaing-web/src/components/auth/SignupPage2.tsx create mode 100644 itdaing-web/src/components/common/BottomNav.tsx create mode 100644 itdaing-web/src/components/common/CommunityFilterButtons.tsx create mode 100644 itdaing-web/src/components/common/EventCard.tsx create mode 100644 itdaing-web/src/components/common/EventSection.tsx create mode 100644 itdaing-web/src/components/common/FilterButtons.tsx create mode 100644 itdaing-web/src/components/common/Footer.tsx create mode 100644 itdaing-web/src/components/common/Header.tsx create mode 100644 itdaing-web/src/components/common/HeroCarousel.tsx create mode 100644 itdaing-web/src/components/common/HorizontalBanner.tsx create mode 100644 itdaing-web/src/components/common/ImageWithFallback.tsx create mode 100644 itdaing-web/src/components/common/PopupDetailPage.tsx create mode 100644 itdaing-web/src/components/common/SectionTitle.tsx create mode 100644 itdaing-web/src/components/common/SignupPage1.tsx create mode 100644 itdaing-web/src/components/common/SignupPage2.tsx create mode 100644 itdaing-web/src/components/consumer/MyPage.tsx create mode 100644 itdaing-web/src/components/consumer/MyPageCalendar.tsx create mode 100644 itdaing-web/src/components/consumer/MyPageFavorites.tsx create mode 100644 itdaing-web/src/components/consumer/MyPageProfile.tsx create mode 100644 itdaing-web/src/components/consumer/MyPageReviews.tsx create mode 100644 itdaing-web/src/components/consumer/NearbyExplorePage.tsx create mode 100644 itdaing-web/src/components/consumer/RecommendationModal.tsx create mode 100644 itdaing-web/src/components/consumer/ReviewWritePage.tsx create mode 100644 itdaing-web/src/components/seller/ImageWithFallback.tsx create mode 100644 itdaing-web/src/components/seller/SellerDashboard.tsx create mode 100644 itdaing-web/src/components/seller/SellerInfoPage.tsx create mode 100644 itdaing-web/src/components/ui/accordion.tsx create mode 100644 itdaing-web/src/components/ui/alert-dialog.tsx create mode 100644 itdaing-web/src/components/ui/alert.tsx create mode 100644 itdaing-web/src/components/ui/aspect-ratio.tsx create mode 100644 itdaing-web/src/components/ui/avatar.tsx create mode 100644 itdaing-web/src/components/ui/badge.tsx create mode 100644 itdaing-web/src/components/ui/breadcrumb.tsx create mode 100644 itdaing-web/src/components/ui/button.tsx create mode 100644 itdaing-web/src/components/ui/calendar.tsx create mode 100644 itdaing-web/src/components/ui/card.tsx create mode 100644 itdaing-web/src/components/ui/carousel.tsx create mode 100644 itdaing-web/src/components/ui/chart.tsx create mode 100644 itdaing-web/src/components/ui/checkbox.tsx create mode 100644 itdaing-web/src/components/ui/collapsible.tsx create mode 100644 itdaing-web/src/components/ui/command.tsx create mode 100644 itdaing-web/src/components/ui/context-menu.tsx create mode 100644 itdaing-web/src/components/ui/dialog.tsx create mode 100644 itdaing-web/src/components/ui/drawer.tsx create mode 100644 itdaing-web/src/components/ui/dropdown-menu.tsx create mode 100644 itdaing-web/src/components/ui/form.tsx create mode 100644 itdaing-web/src/components/ui/hover-card.tsx create mode 100644 itdaing-web/src/components/ui/input-otp.tsx create mode 100644 itdaing-web/src/components/ui/input.tsx create mode 100644 itdaing-web/src/components/ui/label.tsx create mode 100644 itdaing-web/src/components/ui/menubar.tsx create mode 100644 itdaing-web/src/components/ui/navigation-menu.tsx create mode 100644 itdaing-web/src/components/ui/pagination.tsx create mode 100644 itdaing-web/src/components/ui/popover.tsx create mode 100644 itdaing-web/src/components/ui/progress.tsx create mode 100644 itdaing-web/src/components/ui/radio-group.tsx create mode 100644 itdaing-web/src/components/ui/resizable.tsx create mode 100644 itdaing-web/src/components/ui/scroll-area.tsx create mode 100644 itdaing-web/src/components/ui/select.tsx create mode 100644 itdaing-web/src/components/ui/separator.tsx create mode 100644 itdaing-web/src/components/ui/sheet.tsx create mode 100644 itdaing-web/src/components/ui/sidebar.tsx create mode 100644 itdaing-web/src/components/ui/skeleton.tsx create mode 100644 itdaing-web/src/components/ui/slider.tsx create mode 100644 itdaing-web/src/components/ui/sonner.tsx create mode 100644 itdaing-web/src/components/ui/switch.tsx create mode 100644 itdaing-web/src/components/ui/table.tsx create mode 100644 itdaing-web/src/components/ui/tabs.tsx create mode 100644 itdaing-web/src/components/ui/textarea.tsx create mode 100644 itdaing-web/src/components/ui/toggle-group.tsx create mode 100644 itdaing-web/src/components/ui/toggle.tsx create mode 100644 itdaing-web/src/components/ui/tooltip.tsx create mode 100644 itdaing-web/src/components/ui/use-mobile.ts create mode 100644 itdaing-web/src/components/ui/utils.ts create mode 100644 itdaing-web/src/context/UserContext.tsx create mode 100644 itdaing-web/src/data/popups.ts create mode 100644 itdaing-web/src/data/reviews.ts create mode 100644 itdaing-web/src/data/sellers.ts delete mode 100644 itdaing-web/src/main.jsx create mode 100644 itdaing-web/src/styles/globals.css create mode 100644 itdaing-web/src/types/figma-asset.d.ts delete mode 100644 itdaing-web/vite.config.js create mode 100644 itdaing-web/vite.config.ts diff --git a/itdaing-web/eslint.config.js b/itdaing-web/eslint.config.js deleted file mode 100644 index cee1e2c..0000000 --- a/itdaing-web/eslint.config.js +++ /dev/null @@ -1,29 +0,0 @@ -import js from '@eslint/js' -import globals from 'globals' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' -import { defineConfig, globalIgnores } from 'eslint/config' - -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{js,jsx}'], - extends: [ - js.configs.recommended, - reactHooks.configs['recommended-latest'], - reactRefresh.configs.vite, - ], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - parserOptions: { - ecmaVersion: 'latest', - ecmaFeatures: { jsx: true }, - sourceType: 'module', - }, - }, - rules: { - 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], - }, - }, -]) diff --git a/itdaing-web/package-lock.json b/itdaing-web/package-lock.json index 8fa70e8..532b6b2 100644 --- a/itdaing-web/package-lock.json +++ b/itdaing-web/package-lock.json @@ -1,2469 +1,3882 @@ { - "name": "itdaing-web", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "itdaing-web", - "version": "0.0.0", - "dependencies": { - "react": "^19.1.1", - "react-dom": "^19.1.1" - }, - "devDependencies": { - "@eslint/js": "^9.36.0", - "@types/react": "^19.1.16", - "@types/react-dom": "^19.1.9", - "@vitejs/plugin-react-swc": "^4.1.0", - "eslint": "^9.36.0", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-refresh": "^0.4.22", - "globals": "^16.4.0", - "vite": "^7.1.7" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.46", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.46.tgz", - "integrity": "sha512-xMNwJo/pHkEP/mhNVnW+zUiJDle6/hxrwO0mfSJuEVRbBfgrJFuUSRoZx/nYUw5pCjrysl9OkNXCkAdih8GCnA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.1.tgz", - "integrity": "sha512-bxZtughE4VNVJlL1RdoSE545kc4JxL7op57KKoi59/gwuU5rV6jLWFXXc8jwgFoT6vtj+ZjO+Z2C5nrY0Cl6wA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.1.tgz", - "integrity": "sha512-44a1hreb02cAAfAKmZfXVercPFaDjqXCK+iKeVOlJ9ltvnO6QqsBHgKVPTu+MJHSLLeMEUbeG2qiDYgbFPU48g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.1.tgz", - "integrity": "sha512-usmzIgD0rf1syoOZ2WZvy8YpXK5G1V3btm3QZddoGSa6mOgfXWkkv+642bfUUldomgrbiLQGrPryb7DXLovPWQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.1.tgz", - "integrity": "sha512-is3r/k4vig2Gt8mKtTlzzyaSQ+hd87kDxiN3uDSDwggJLUV56Umli6OoL+/YZa/KvtdrdyNfMKHzL/P4siOOmg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.1.tgz", - "integrity": "sha512-QJ1ksgp/bDJkZB4daldVmHaEQkG4r8PUXitCOC2WRmRaSaHx5RwPoI3DHVfXKwDkB+Sk6auFI/+JHacTekPRSw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.1.tgz", - "integrity": "sha512-J6ma5xgAzvqsnU6a0+jgGX/gvoGokqpkx6zY4cWizRrm0ffhHDpJKQgC8dtDb3+MqfZDIqs64REbfHDMzxLMqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.1.tgz", - "integrity": "sha512-JzWRR41o2U3/KMNKRuZNsDUAcAVUYhsPuMlx5RUldw0E4lvSIXFUwejtYz1HJXohUmqs/M6BBJAUBzKXZVddbg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.1.tgz", - "integrity": "sha512-L8kRIrnfMrEoHLHtHn+4uYA52fiLDEDyezgxZtGUTiII/yb04Krq+vk3P2Try+Vya9LeCE9ZHU8CXD6J9EhzHQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.1.tgz", - "integrity": "sha512-ysAc0MFRV+WtQ8li8hi3EoFi7us6d1UzaS/+Dp7FYZfg3NdDljGMoVyiIp6Ucz7uhlYDBZ/zt6XI0YEZbUO11Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.1.tgz", - "integrity": "sha512-UV6l9MJpDbDZZ/fJvqNcvO1PcivGEf1AvKuTcHoLjVZVFeAMygnamCTDikCVMRnA+qJe+B3pSbgX2+lBMqgBhA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.1.tgz", - "integrity": "sha512-UDUtelEprkA85g95Q+nj3Xf0M4hHa4DiJ+3P3h4BuGliY4NReYYqwlc0Y8ICLjN4+uIgCEvaygYlpf0hUj90Yg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.1.tgz", - "integrity": "sha512-vrRn+BYhEtNOte/zbc2wAUQReJXxEx2URfTol6OEfY2zFEUK92pkFBSXRylDM7aHi+YqEPJt9/ABYzmcrS4SgQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.1.tgz", - "integrity": "sha512-gto/1CxHyi4A7YqZZNznQYrVlPSaodOBPKM+6xcDSCMVZN/Fzb4K+AIkNz/1yAYz9h3Ng+e2fY9H6bgawVq17w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.1.tgz", - "integrity": "sha512-KZ6Vx7jAw3aLNjFR8eYVcQVdFa/cvBzDNRFM3z7XhNNunWjA03eUrEwJYPk0G8V7Gs08IThFKcAPS4WY/ybIrQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.1.tgz", - "integrity": "sha512-HvEixy2s/rWNgpwyKpXJcHmE7om1M89hxBTBi9Fs6zVuLU4gOrEMQNbNsN/tBVIMbLyysz/iwNiGtMOpLAOlvA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.1.tgz", - "integrity": "sha512-E/n8x2MSjAQgjj9IixO4UeEUeqXLtiA7pyoXCFYLuXpBA/t2hnbIdxHfA7kK9BFsYAoNU4st1rHYdldl8dTqGA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.1.tgz", - "integrity": "sha512-IhJ087PbLOQXCN6Ui/3FUkI9pWNZe/Z7rEIVOzMsOs1/HSAECCvSZ7PkIbkNqL/AZn6WbZvnoVZw/qwqYMo4/w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.1.tgz", - "integrity": "sha512-0++oPNgLJHBblreu0SFM7b3mAsBJBTY0Ksrmu9N6ZVrPiTkRgda52mWR7TKhHAsUb9noCjFvAw9l6ZO1yzaVbA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.1.tgz", - "integrity": "sha512-VJXivz61c5uVdbmitLkDlbcTk9Or43YC2QVLRkqp86QoeFSqI81bNgjhttqhKNMKnQMWnecOCm7lZz4s+WLGpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.1.tgz", - "integrity": "sha512-NmZPVTUOitCXUH6erJDzTQ/jotYw4CnkMDjCYRxNHVD9bNyfrGoIse684F9okwzKCV4AIHRbUkeTBc9F2OOH5Q==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.1.tgz", - "integrity": "sha512-2SNj7COIdAf6yliSpLdLG8BEsp5lgzRehgfkP0Av8zKfQFKku6JcvbobvHASPJu4f3BFxej5g+HuQPvqPhHvpQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.1.tgz", - "integrity": "sha512-rLarc1Ofcs3DHtgSzFO31pZsCh8g05R2azN1q3fF+H423Co87My0R+tazOEvYVKXSLh8C4LerMK41/K7wlklcg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@swc/core": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.0.tgz", - "integrity": "sha512-8SnJV+JV0rYbfSiEiUvYOmf62E7QwsEG+aZueqSlKoxFt0pw333+bgZSQXGUV6etXU88nxur0afVMaINujBMSw==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.25" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.0", - "@swc/core-darwin-x64": "1.15.0", - "@swc/core-linux-arm-gnueabihf": "1.15.0", - "@swc/core-linux-arm64-gnu": "1.15.0", - "@swc/core-linux-arm64-musl": "1.15.0", - "@swc/core-linux-x64-gnu": "1.15.0", - "@swc/core-linux-x64-musl": "1.15.0", - "@swc/core-win32-arm64-msvc": "1.15.0", - "@swc/core-win32-ia32-msvc": "1.15.0", - "@swc/core-win32-x64-msvc": "1.15.0" - }, - "peerDependencies": { - "@swc/helpers": ">=0.5.17" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } - } - }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.0.tgz", - "integrity": "sha512-TBKWkbnShnEjlIbO4/gfsrIgAqHBVqgPWLbWmPdZ80bF393yJcLgkrb7bZEnJs6FCbSSuGwZv2rx1jDR2zo6YA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.0.tgz", - "integrity": "sha512-f5JKL1v1H56CIZc1pVn4RGPOfnWqPwmuHdpf4wesvXunF1Bx85YgcspW5YxwqG5J9g3nPU610UFuExJXVUzOiQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.0.tgz", - "integrity": "sha512-duK6nG+WyuunnfsfiTUQdzC9Fk8cyDLqT9zyXvY2i2YgDu5+BH5W6wM5O4mDNCU5MocyB/SuF5YDF7XySnowiQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.0.tgz", - "integrity": "sha512-ITe9iDtTRXM98B91rvyPP6qDVbhUBnmA/j4UxrHlMQ0RlwpqTjfZYZkD0uclOxSZ6qIrOj/X5CaoJlDUuQ0+Cw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.0.tgz", - "integrity": "sha512-Q5ldc2bzriuzYEoAuqJ9Vr3FyZhakk5hiwDbniZ8tlEXpbjBhbOleGf9/gkhLaouDnkNUEazFW9mtqwUTRdh7Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.0.tgz", - "integrity": "sha512-pY4is+jEpOxlYCSnI+7N8Oxbap9TmTz5YT84tUvRTlOlTBwFAUlWFCX0FRwWJlsfP0TxbqhIe8dNNzlsEmJbXQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.0.tgz", - "integrity": "sha512-zYEt5eT8y8RUpoe7t5pjpoOdGu+/gSTExj8PV86efhj6ugB3bPlj3Y85ogdW3WMVXr4NvwqvzdaYGCZfXzSyVg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.0.tgz", - "integrity": "sha512-zC1rmOgFH5v2BCbByOazEqs0aRNpTdLRchDExfcCfgKgeaD+IdpUOqp7i3VG1YzkcnbuZjMlXfM0ugpt+CddoA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.0.tgz", - "integrity": "sha512-7t9U9KwMwQblkdJIH+zX1V4q1o3o41i0HNO+VlnAHT5o+5qHJ963PHKJ/pX3P2UlZnBCY465orJuflAN4rAP9A==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.0.tgz", - "integrity": "sha512-VE0Zod5vcs8iMLT64m5QS1DlTMXJFI/qSgtMDRx8rtZrnjt6/9NW8XUaiPJuRu8GluEO1hmHoyf1qlbY19gGSQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@swc/types": { - "version": "0.1.25", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", - "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", - "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", - "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^19.2.0" - } - }, - "node_modules/@vitejs/plugin-react-swc": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.2.1.tgz", - "integrity": "sha512-SIZ/XxeS2naLw4L2vVvpTyujM2OY+Rf+y6nWETqfoBrZpI3SFdyNJof3nQ8HbLhXJ1Eh9e9c0JGYC8GYPhLkCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.46", - "@swc/core": "^1.13.5" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.24.tgz", - "integrity": "sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=8.40" - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", - "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", - "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/rollup": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.1.tgz", - "integrity": "sha512-n2I0V0lN3E9cxxMqBCT3opWOiQBzRN7UG60z/WDKqdX2zHUS/39lezBcsckZFsV6fUTSnfqI7kHf60jDAPGKug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.1", - "@rollup/rollup-android-arm64": "4.53.1", - "@rollup/rollup-darwin-arm64": "4.53.1", - "@rollup/rollup-darwin-x64": "4.53.1", - "@rollup/rollup-freebsd-arm64": "4.53.1", - "@rollup/rollup-freebsd-x64": "4.53.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.1", - "@rollup/rollup-linux-arm-musleabihf": "4.53.1", - "@rollup/rollup-linux-arm64-gnu": "4.53.1", - "@rollup/rollup-linux-arm64-musl": "4.53.1", - "@rollup/rollup-linux-loong64-gnu": "4.53.1", - "@rollup/rollup-linux-ppc64-gnu": "4.53.1", - "@rollup/rollup-linux-riscv64-gnu": "4.53.1", - "@rollup/rollup-linux-riscv64-musl": "4.53.1", - "@rollup/rollup-linux-s390x-gnu": "4.53.1", - "@rollup/rollup-linux-x64-gnu": "4.53.1", - "@rollup/rollup-linux-x64-musl": "4.53.1", - "@rollup/rollup-openharmony-arm64": "4.53.1", - "@rollup/rollup-win32-arm64-msvc": "4.53.1", - "@rollup/rollup-win32-ia32-msvc": "4.53.1", - "@rollup/rollup-win32-x64-gnu": "4.53.1", - "@rollup/rollup-win32-x64-msvc": "4.53.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/vite": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", - "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yocto-queue": { + "name": "copy", "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "copy", + "version": "0.1.0", + "dependencies": { + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", + "@radix-ui/react-aspect-ratio": "^1.1.8", + "@radix-ui/react-avatar": "^1.1.11", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-hover-card": "^1.1.15", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-menubar": "^1.1.16", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.2.3", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "class-variance-authority": "^0.7.1", + "clsx": "*", + "cmdk": "^1.1.1", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.487.0", + "motion": "*", + "next-themes": "^0.4.6", + "react": "^18.3.1", + "react-day-picker": "^8.10.1", + "react-dom": "^18.3.1", + "react-hook-form": "^7.66.0", + "react-resizable-panels": "^2.1.9", + "recharts": "^2.15.4", + "sonner": "^2.0.7", + "tailwind-merge": "^3.4.0", + "vaul": "^1.1.2" + }, + "devDependencies": { + "@types/node": "^20.10.0", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@vitejs/plugin-react-swc": "^3.10.2", + "typescript": "^5.9.3", + "vite": "6.3.5" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.8.tgz", + "integrity": "sha512-5nZrJTF7gH+e0nZS7/QxFz6tJV4VimhQb1avEgtsJxvvIp5JilL+c58HICsKzPxghdwaDt48hEfPM1au4zGy+w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.11.tgz", + "integrity": "sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", + "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context-menu": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", + "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", + "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menubar": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", + "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", + "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.8.tgz", + "integrity": "sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", + "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", + "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz", + "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", + "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-toggle": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", + "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.5.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.1.tgz", + "integrity": "sha512-bxZtughE4VNVJlL1RdoSE545kc4JxL7op57KKoi59/gwuU5rV6jLWFXXc8jwgFoT6vtj+ZjO+Z2C5nrY0Cl6wA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.1.tgz", + "integrity": "sha512-44a1hreb02cAAfAKmZfXVercPFaDjqXCK+iKeVOlJ9ltvnO6QqsBHgKVPTu+MJHSLLeMEUbeG2qiDYgbFPU48g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.1.tgz", + "integrity": "sha512-usmzIgD0rf1syoOZ2WZvy8YpXK5G1V3btm3QZddoGSa6mOgfXWkkv+642bfUUldomgrbiLQGrPryb7DXLovPWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.1.tgz", + "integrity": "sha512-is3r/k4vig2Gt8mKtTlzzyaSQ+hd87kDxiN3uDSDwggJLUV56Umli6OoL+/YZa/KvtdrdyNfMKHzL/P4siOOmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.1.tgz", + "integrity": "sha512-QJ1ksgp/bDJkZB4daldVmHaEQkG4r8PUXitCOC2WRmRaSaHx5RwPoI3DHVfXKwDkB+Sk6auFI/+JHacTekPRSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.1.tgz", + "integrity": "sha512-J6ma5xgAzvqsnU6a0+jgGX/gvoGokqpkx6zY4cWizRrm0ffhHDpJKQgC8dtDb3+MqfZDIqs64REbfHDMzxLMqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.1.tgz", + "integrity": "sha512-JzWRR41o2U3/KMNKRuZNsDUAcAVUYhsPuMlx5RUldw0E4lvSIXFUwejtYz1HJXohUmqs/M6BBJAUBzKXZVddbg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.1.tgz", + "integrity": "sha512-L8kRIrnfMrEoHLHtHn+4uYA52fiLDEDyezgxZtGUTiII/yb04Krq+vk3P2Try+Vya9LeCE9ZHU8CXD6J9EhzHQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.1.tgz", + "integrity": "sha512-ysAc0MFRV+WtQ8li8hi3EoFi7us6d1UzaS/+Dp7FYZfg3NdDljGMoVyiIp6Ucz7uhlYDBZ/zt6XI0YEZbUO11Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.1.tgz", + "integrity": "sha512-UV6l9MJpDbDZZ/fJvqNcvO1PcivGEf1AvKuTcHoLjVZVFeAMygnamCTDikCVMRnA+qJe+B3pSbgX2+lBMqgBhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.1.tgz", + "integrity": "sha512-UDUtelEprkA85g95Q+nj3Xf0M4hHa4DiJ+3P3h4BuGliY4NReYYqwlc0Y8ICLjN4+uIgCEvaygYlpf0hUj90Yg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.1.tgz", + "integrity": "sha512-vrRn+BYhEtNOte/zbc2wAUQReJXxEx2URfTol6OEfY2zFEUK92pkFBSXRylDM7aHi+YqEPJt9/ABYzmcrS4SgQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.1.tgz", + "integrity": "sha512-gto/1CxHyi4A7YqZZNznQYrVlPSaodOBPKM+6xcDSCMVZN/Fzb4K+AIkNz/1yAYz9h3Ng+e2fY9H6bgawVq17w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.1.tgz", + "integrity": "sha512-KZ6Vx7jAw3aLNjFR8eYVcQVdFa/cvBzDNRFM3z7XhNNunWjA03eUrEwJYPk0G8V7Gs08IThFKcAPS4WY/ybIrQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.1.tgz", + "integrity": "sha512-HvEixy2s/rWNgpwyKpXJcHmE7om1M89hxBTBi9Fs6zVuLU4gOrEMQNbNsN/tBVIMbLyysz/iwNiGtMOpLAOlvA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.1.tgz", + "integrity": "sha512-E/n8x2MSjAQgjj9IixO4UeEUeqXLtiA7pyoXCFYLuXpBA/t2hnbIdxHfA7kK9BFsYAoNU4st1rHYdldl8dTqGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.1.tgz", + "integrity": "sha512-IhJ087PbLOQXCN6Ui/3FUkI9pWNZe/Z7rEIVOzMsOs1/HSAECCvSZ7PkIbkNqL/AZn6WbZvnoVZw/qwqYMo4/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.1.tgz", + "integrity": "sha512-0++oPNgLJHBblreu0SFM7b3mAsBJBTY0Ksrmu9N6ZVrPiTkRgda52mWR7TKhHAsUb9noCjFvAw9l6ZO1yzaVbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.1.tgz", + "integrity": "sha512-VJXivz61c5uVdbmitLkDlbcTk9Or43YC2QVLRkqp86QoeFSqI81bNgjhttqhKNMKnQMWnecOCm7lZz4s+WLGpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.1.tgz", + "integrity": "sha512-NmZPVTUOitCXUH6erJDzTQ/jotYw4CnkMDjCYRxNHVD9bNyfrGoIse684F9okwzKCV4AIHRbUkeTBc9F2OOH5Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.1.tgz", + "integrity": "sha512-2SNj7COIdAf6yliSpLdLG8BEsp5lgzRehgfkP0Av8zKfQFKku6JcvbobvHASPJu4f3BFxej5g+HuQPvqPhHvpQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.1.tgz", + "integrity": "sha512-rLarc1Ofcs3DHtgSzFO31pZsCh8g05R2azN1q3fF+H423Co87My0R+tazOEvYVKXSLh8C4LerMK41/K7wlklcg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/core": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.1.tgz", + "integrity": "sha512-s9GN3M2jA32k+StvuS9uGe4ztf5KVGBdlJMMC6LR6Ah23Lq/CWKVcC3WeQi8qaAcLd+DiddoNCNMUWymLv+wWQ==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.25" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.15.1", + "@swc/core-darwin-x64": "1.15.1", + "@swc/core-linux-arm-gnueabihf": "1.15.1", + "@swc/core-linux-arm64-gnu": "1.15.1", + "@swc/core-linux-arm64-musl": "1.15.1", + "@swc/core-linux-x64-gnu": "1.15.1", + "@swc/core-linux-x64-musl": "1.15.1", + "@swc/core-win32-arm64-msvc": "1.15.1", + "@swc/core-win32-ia32-msvc": "1.15.1", + "@swc/core-win32-x64-msvc": "1.15.1" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.1.tgz", + "integrity": "sha512-vEPrVxegWIjKEz+1VCVuKRY89jhokhSmQ/YXBWLnmLj9cI08G61RTZJvdsIcjYUjjTu7NgZlYVK+b2y0fbh11g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.1.tgz", + "integrity": "sha512-z9QguKxE3aldvwKHHDg5OlKehasbJBF1lacn5CnN6SlrHbdwokXHFA3nIoO3Bh1Tw7bCgFtdIR4jKlTTn3kBZA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.1.tgz", + "integrity": "sha512-yS2FHA8E4YeiPG9YeYk/6mKiCWuXR5RdYlCmtlGzKcjWbI4GXUVe7+p9C0M6myRt3zdj3M1knmJxk52MQA9EZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.1.tgz", + "integrity": "sha512-IFrjDu7+5Y61jLsUqBVXlXutDoPBX10eEeNTjW6C1yzm+cSTE7ayiKXMIFri4gEZ4VpXS6MUgkwjxtDpIXTh+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.1.tgz", + "integrity": "sha512-fKzP9mRQGbhc5QhJPIsqKNNX/jyWrZgBxmo3Nz1SPaepfCUc7RFmtcJQI5q8xAun3XabXjh90wqcY/OVyg2+Kg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.1.tgz", + "integrity": "sha512-ZLjMi138uTJxb+1wzo4cB8mIbJbAsSLWRNeHc1g1pMvkERPWOGlem+LEYkkzaFzCNv1J8aKcL653Vtw8INHQeg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.1.tgz", + "integrity": "sha512-jvSI1IdsIYey5kOITzyajjofXOOySVitmLxb45OPUjoNojql4sDojvlW5zoHXXFePdA6qAX4Y6KbzAOV3T3ctA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.1.tgz", + "integrity": "sha512-X/FcDtNrDdY9r4FcXHt9QxUqC/2FbQdvZobCKHlHe8vTSKhUHOilWl5EBtkFVfsEs4D5/yAri9e3bJbwyBhhBw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.1.tgz", + "integrity": "sha512-vfheiWBux8PpC87oy1cshcqzgH7alWYpnVq5jWe7xuVkjqjGGDbBUKuS84eJCdsWcVaB5EXIWLKt+11W3/BOwA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.1.tgz", + "integrity": "sha512-n3Ppn0LSov/IdlANq+8kxHqENuJRX5XtwQqPgQsgwKIcFq22u17NKfDs9vL5PwRsEHY6Xd67pnOqQX0h4AvbuQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.24.tgz", + "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", + "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", + "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", + "devOptional": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz", + "integrity": "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.27", + "@swc/core": "^1.12.11" + }, + "peerDependencies": { + "vite": "^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", + "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT", + "peer": true + }, + "node_modules/embla-carousel-react": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz", + "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==", + "license": "MIT", + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", + "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/fast-equals": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.2.tgz", + "integrity": "sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/framer-motion": { + "version": "12.23.24", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.24.tgz", + "integrity": "sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.23", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/input-otp": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz", + "integrity": "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==", + "license": "MIT", + "peerDependencies": { + "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" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lucide-react": { + "version": "0.487.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.487.0.tgz", + "integrity": "sha512-aKqhOQ+YmFnwq8dWgGjOuLc8V1R9/c/yOd+zDY4+ohsR2Jo05lSGc3WsstYPIzcTpeosN7LoCkLReUUITvaIvw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/motion": { + "version": "12.23.24", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.24.tgz", + "integrity": "sha512-Rc5E7oe2YZ72N//S3QXGzbnXgqNrTESv8KKxABR20q2FLch9gHLo0JLyYo2hZ238bZ9Gx6cWhj9VO0IgwbMjCw==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.23.24", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "12.23.23", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", + "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-day-picker": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", + "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "date-fns": "^2.28.0 || ^3.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-hook-form": { + "version": "7.66.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.66.0.tgz", + "integrity": "sha512-xXBqsWGKrY46ZqaHDo+ZUYiMUgi8suYu5kdrS20EG8KiL7VRQitEbNjm+UcrDYrNi1YLyfpmAeGjCZYXLT9YBw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-remove-scroll": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-resizable-panels": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.9.tgz", + "integrity": "sha512-z77+X08YDIrgAes4jl8xhnUu1LNIRp4+E7cv4xHmLOxxUPO/ML7PSrE813b90vj7xvQ1lcf7g2uA9GeMZonjhQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/recharts": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/rollup": { + "version": "4.53.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.1.tgz", + "integrity": "sha512-n2I0V0lN3E9cxxMqBCT3opWOiQBzRN7UG60z/WDKqdX2zHUS/39lezBcsckZFsV6fUTSnfqI7kHf60jDAPGKug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.53.1", + "@rollup/rollup-android-arm64": "4.53.1", + "@rollup/rollup-darwin-arm64": "4.53.1", + "@rollup/rollup-darwin-x64": "4.53.1", + "@rollup/rollup-freebsd-arm64": "4.53.1", + "@rollup/rollup-freebsd-x64": "4.53.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.1", + "@rollup/rollup-linux-arm-musleabihf": "4.53.1", + "@rollup/rollup-linux-arm64-gnu": "4.53.1", + "@rollup/rollup-linux-arm64-musl": "4.53.1", + "@rollup/rollup-linux-loong64-gnu": "4.53.1", + "@rollup/rollup-linux-ppc64-gnu": "4.53.1", + "@rollup/rollup-linux-riscv64-gnu": "4.53.1", + "@rollup/rollup-linux-riscv64-musl": "4.53.1", + "@rollup/rollup-linux-s390x-gnu": "4.53.1", + "@rollup/rollup-linux-x64-gnu": "4.53.1", + "@rollup/rollup-linux-x64-musl": "4.53.1", + "@rollup/rollup-openharmony-arm64": "4.53.1", + "@rollup/rollup-win32-arm64-msvc": "4.53.1", + "@rollup/rollup-win32-ia32-msvc": "4.53.1", + "@rollup/rollup-win32-x64-gnu": "4.53.1", + "@rollup/rollup-win32-x64-msvc": "4.53.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/sonner": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz", + "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/vaul": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", + "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.1" + }, + "peerDependencies": { + "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" + } + }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + } } - } - } } diff --git a/itdaing-web/package.json b/itdaing-web/package.json index 8a4ca69..139eff2 100644 --- a/itdaing-web/package.json +++ b/itdaing-web/package.json @@ -1,27 +1,63 @@ { - "name": "itdaing-web", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "lint": "eslint .", - "preview": "vite preview" - }, - "dependencies": { - "react": "^19.1.1", - "react-dom": "^19.1.1" - }, - "devDependencies": { - "@eslint/js": "^9.36.0", - "@types/react": "^19.1.16", - "@types/react-dom": "^19.1.9", - "@vitejs/plugin-react-swc": "^4.1.0", - "eslint": "^9.36.0", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-refresh": "^0.4.22", - "globals": "^16.4.0", - "vite": "^7.1.7" - } + "name": "itdaing-web", + "version": "0.1.0", + "private": true, + "dependencies": { + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", + "@radix-ui/react-aspect-ratio": "^1.1.8", + "@radix-ui/react-avatar": "^1.1.11", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-hover-card": "^1.1.15", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-menubar": "^1.1.16", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.2.3", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "class-variance-authority": "^0.7.1", + "clsx": "*", + "cmdk": "^1.1.1", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.487.0", + "motion": "*", + "next-themes": "^0.4.6", + "react": "^18.3.1", + "react-day-picker": "^8.10.1", + "react-dom": "^18.3.1", + "react-hook-form": "^7.66.0", + "react-resizable-panels": "^2.1.9", + "recharts": "^2.15.4", + "sonner": "^2.0.7", + "tailwind-merge": "^3.4.0", + "vaul": "^1.1.2" + }, + "devDependencies": { + "@types/node": "^20.10.0", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@vitejs/plugin-react-swc": "^3.10.2", + "typescript": "^5.9.3", + "vite": "6.3.5" + }, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + } } diff --git a/itdaing-web/public/README-favicon.txt b/itdaing-web/public/README-favicon.txt new file mode 100644 index 0000000..7357169 --- /dev/null +++ b/itdaing-web/public/README-favicon.txt @@ -0,0 +1,6 @@ +Place your favicon image (PNG) exported from the provided logo here as favicon.png. +Recommended sizes: +- 32x32 (classic browser tab) +- 180x180 (apple-touch-icon) +- 192x192 (PWA android) +You can keep a single 225x225 PNG as favicon.png for now; browsers will downscale. diff --git a/itdaing-web/public/vite.svg b/itdaing-web/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/itdaing-web/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/itdaing-web/src/App.css b/itdaing-web/src/App.css deleted file mode 100644 index b9d355d..0000000 --- a/itdaing-web/src/App.css +++ /dev/null @@ -1,42 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/itdaing-web/src/App.jsx b/itdaing-web/src/App.jsx deleted file mode 100644 index 300257b..0000000 --- a/itdaing-web/src/App.jsx +++ /dev/null @@ -1,35 +0,0 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' -import './App.css' - -function App() { - const [count, setCount] = useState(0) - - return ( - <> - -

Vite + React

-
- -

- Edit src/App.jsx and save to test HMR -

-
-

- Click on the Vite and React logos to learn more -

- - ) -} - -export default App diff --git a/itdaing-web/src/App.tsx b/itdaing-web/src/App.tsx new file mode 100644 index 0000000..190aa6d --- /dev/null +++ b/itdaing-web/src/App.tsx @@ -0,0 +1,555 @@ +import { useState, useEffect, Suspense, lazy } from "react"; + +// Core layout components +import { Header } from "./components/common/Header"; +import { Footer } from "./components/common/Footer"; +import { BottomNav } from "./components/common/BottomNav"; + +// Shared / feature components +import { HeroCarousel } from "./components/common/HeroCarousel"; +import { HorizontalBanner } from "./components/common/HorizontalBanner"; +import { EventSection } from "./components/common/EventSection"; +import { SectionTitle } from "./components/common/SectionTitle"; +import { LoginConfirmDialog } from "./components/auth/LoginConfirmDialog"; + +// Pages (lazy-loaded to improve initial bundle size) +const LoginPage = lazy(() => import("./components/auth/LoginPage").then(m => ({ default: m.LoginPage }))); +const SignupPage1 = lazy(() => import("./components/auth/SignupPage1").then(m => ({ default: m.SignupPage1 }))); +const SignupPage2 = lazy(() => import("./components/auth/SignupPage2").then(m => ({ default: m.SignupPage2 }))); +const PopupDetailPage = lazy(() => import("./components/common/PopupDetailPage").then(m => ({ default: m.PopupDetailPage }))); +const MyPage = lazy(() => import("./components/consumer/MyPage").then(m => ({ default: m.MyPage }))); +const NearbyExplorePage = lazy(() => import("./components/consumer/NearbyExplorePage").then(m => ({ default: m.NearbyExplorePage }))); +const SellerDashboard = lazy(() => import("./components/seller/SellerDashboard").then(m => ({ default: m.SellerDashboard }))); +const RecommendationModal = lazy(() => import("./components/consumer/RecommendationModal").then(m => ({ default: m.RecommendationModal }))); + +// Data +import { popups } from "./data/popups"; + +export default function App() { + const [showAllOpening, setShowAllOpening] = useState(false); + const [showAllLocal, setShowAllLocal] = useState(false); + const [showAllCommunity, setShowAllCommunity] = useState(false); + const [currentPage, setCurrentPage] = useState<"main" | "login" | "signup1" | "signup2" | "popupDetail" | "mypage" | "nearbyExplore" | "sellerDashboard">("main"); + const [isLoggedIn, setIsLoggedIn] = useState(false); + const [userType, setUserType] = useState<"consumer" | "seller" | null>(null); + const [sellerId, setSellerId] = useState(null); + const [signupData, setSignupData] = useState(null); + const [showRecommendationModal, setShowRecommendationModal] = useState(false); + const [dismissedToday, setDismissedToday] = useState(false); + const [selectedPopupId, setSelectedPopupId] = useState(null); + const [showLoginConfirmDialog, setShowLoginConfirmDialog] = useState(false); + const [loginConfirmDialogType, setLoginConfirmDialogType] = useState<"favorite" | "review" | "mypage">("favorite"); + const [returnToPage, setReturnToPage] = useState<"main" | "popupDetail" | "mypage" | "nearbyExplore" | "sellerDashboard">("main"); + const [returnToPopupId, setReturnToPopupId] = useState(null); + const [returnToAction, setReturnToAction] = useState<"review" | null>(null); + + // 이벤트 데이터를 카테고리별로 분류 + const eventItems = { + opening: popups.filter(p => p.status === "upcoming").slice(0, 12).map(p => ({ + id: p.id, + image: p.images[0], + title: p.title, + date: p.date, + location: p.location, + })), + // Local should show all active popups, not only specific category + local: popups.filter(p => p.status === "ongoing" || p.status === "upcoming").slice(0, 20).map(p => ({ + id: p.id, + image: p.images[0], + title: p.title, + date: p.date, + location: p.location, + })), + community: popups.slice(0, 12).map(p => ({ + id: p.id, + image: p.images[0], + title: p.title, + date: p.date, + location: p.location, + })), + }; + + const handleLoginClick = () => { + setCurrentPage("login"); + }; + + const handleLoginSuccess = (loginUserType: "consumer" | "seller", loggedInSellerId?: number) => { + setIsLoggedIn(true); + setUserType(loginUserType); + + if (loginUserType === "seller") { + if (loggedInSellerId) { + setSellerId(loggedInSellerId); + } + setCurrentPage("sellerDashboard"); + } else { + const pageToReturn = returnToPage; + const popupIdToReturn = returnToPopupId; + + // Reset return states before navigation + setReturnToPage("main"); + setReturnToPopupId(null); + // Don't reset returnToAction yet - it will be used by PopupDetailPage + + // Return to the page user was on before login + if (pageToReturn === "popupDetail" && popupIdToReturn) { + setSelectedPopupId(popupIdToReturn); + setCurrentPage("popupDetail"); + + // returnToAction will be checked in the render to set showReviewWriteOnMount + // It will be cleared after the page is rendered + setTimeout(() => setReturnToAction(null), 100); + } else { + setCurrentPage(pageToReturn); + setReturnToAction(null); + } + + // Show recommendation modal after consumer login (only when returning to main) + if (pageToReturn === "main" && !dismissedToday) { + setShowRecommendationModal(true); + } + } + }; + + const handleSignupClick = () => { + setCurrentPage("signup1"); + }; + + const handleSignupNext = (data: any) => { + setSignupData(data); + if (data.userType === "consumer") { + setCurrentPage("signup2"); + } else { + // For seller, complete signup + setIsLoggedIn(true); + setCurrentPage("main"); + } + }; + + const handleSignupComplete = () => { + setIsLoggedIn(true); + setCurrentPage("main"); + }; + + const handleClose = () => { + setCurrentPage("main"); + // 최상단으로 스크롤 - setTimeout으로 상태 업데이트 후 실행 + setTimeout(() => { + window.scrollTo({ top: 0, behavior: 'smooth' }); + }, 0); + }; + + const handleCloseRecommendationModal = () => { + setShowRecommendationModal(false); + }; + + const handlePopupClick = (popupId: number) => { + setSelectedPopupId(popupId); + setCurrentPage("popupDetail"); + // 페이지 전환 시 최상단으로 스크롤 + window.scrollTo(0, 0); + }; + + const handleCardClick = (id: number) => { + handlePopupClick(id); + }; + + const handleSellerClick = (sellerId: number) => { + // 판매자 정보 페이지로 이동하는 로직 + setSelectedPopupId(sellerId); // 판매자의 팝업 중 하나를 찾아서 이동 + const sellerPopup = popups.find(p => p.sellerId === sellerId); + if (sellerPopup) { + setSelectedPopupId(sellerPopup.id); + setCurrentPage("popupDetail"); + window.scrollTo(0, 0); + } + }; + + const handleDismissToday = () => { + setDismissedToday(true); + setShowRecommendationModal(false); + // Store in localStorage to persist across page reloads + const today = new Date().toDateString(); + localStorage.setItem("recommendationDismissed", today); + }; + + const handleMyPageClick = () => { + if (isLoggedIn) { + setCurrentPage("mypage"); + // 페이지 전환 시 최상단으로 스크롤 + window.scrollTo(0, 0); + } else { + // 비로그인 시 로그인 확인 다이얼로그 표시 + setReturnToPage("mypage"); + setLoginConfirmDialogType("mypage"); + setShowLoginConfirmDialog(true); + } + }; + + const handleNearbyExploreClick = () => { + setCurrentPage("nearbyExplore"); + // 페이지 전환 시 최상단으로 스크롤 + window.scrollTo(0, 0); + }; + + const handleLogout = () => { + // Reset all states to initial values + setIsLoggedIn(false); + setUserType(null); + setSellerId(null); + setSignupData(null); + setCurrentPage("main"); + // 최상단으로 스크롤 + setTimeout(() => { + window.scrollTo({ top: 0, behavior: 'smooth' }); + }, 0); + }; + + const handleResetRecommendation = () => { + localStorage.removeItem("recommendationDismissed"); + setDismissedToday(false); + if (isLoggedIn && userType === "consumer") { + setShowRecommendationModal(true); + } + }; + + // Check if user dismissed modal today + useEffect(() => { + const dismissedDate = localStorage.getItem("recommendationDismissed"); + const today = new Date().toDateString(); + if (dismissedDate === today) { + setDismissedToday(true); + } + }, []); + + // Scroll to top when page changes + useEffect(() => { + // Multiple methods to ensure scroll works + window.scrollTo({ top: 0, behavior: 'instant' }); + window.scrollTo(0, 0); + document.body.scrollTop = 0; + document.documentElement.scrollTop = 0; + + // Also try after a small delay to ensure DOM is ready + setTimeout(() => { + window.scrollTo({ top: 0, behavior: 'instant' }); + window.scrollTo(0, 0); + document.body.scrollTop = 0; + document.documentElement.scrollTop = 0; + }, 0); + }, [currentPage, selectedPopupId]); + + return ( +
+ {currentPage === "main" && ( + <> +
+ +
+ + + console.log('Banner clicked!')} /> + +
+ + 11월 오픈한다잉! + + } + showViewAll={true} + onViewAllClick={() => setShowAllOpening(!showAllOpening)} + /> + } + items={eventItems.opening} + showAll={showAllOpening} + onToggleShowAll={() => setShowAllOpening(!showAllOpening)} + type="opening" + onPopupClick={handlePopupClick} + isLoggedIn={isLoggedIn} + onLoginClick={() => { + setReturnToPage("main"); + setLoginConfirmDialogType("favorite"); + setShowLoginConfirmDialog(true); + }} + /> + + + 울 동네에 이런 팝업 있다잉! + + } + showViewAll={true} + onViewAllClick={() => setShowAllLocal(!showAllLocal)} + /> + } + items={eventItems.local} + showAll={showAllLocal} + onToggleShowAll={() => setShowAllLocal(!showAllLocal)} + type="local" + onPopupClick={handlePopupClick} + isLoggedIn={isLoggedIn} + onLoginClick={() => { + setReturnToPage("main"); + setLoginConfirmDialogType("favorite"); + setShowLoginConfirmDialog(true); + }} + /> + + + 카테고리별 팝업 있다잉! + + } + showViewAll={true} + onViewAllClick={() => setShowAllCommunity(!showAllCommunity)} + /> + } + items={eventItems.community} + showAll={showAllCommunity} + onToggleShowAll={() => setShowAllCommunity(!showAllCommunity)} + type="community" + onPopupClick={handlePopupClick} + isLoggedIn={isLoggedIn} + onLoginClick={() => { + setReturnToPage("main"); + setLoginConfirmDialogType("favorite"); + setShowLoginConfirmDialog(true); + }} + /> +
+
+ +
+ + + + {/* 위로가기 버튼 */} + + + )} + + {currentPage === "login" && ( + 로딩 중…
}> + + + )} + + {currentPage === "signup1" && ( + 로딩 중…}> + setCurrentPage("login")} + onGoHome={handleClose} + onLoginClick={() => setCurrentPage("login")} + /> + + )} + + {currentPage === "signup2" && signupData && ( + 로딩 중…}> + setCurrentPage("login")} + userData={signupData} + onGoHome={handleClose} + onLoginClick={() => setCurrentPage("login")} + /> + + )} + + {currentPage === "popupDetail" && selectedPopupId && ( + <> +
{ + setReturnToPage("popupDetail"); + setReturnToPopupId(selectedPopupId); + handleLoginClick(); + }} + isLoggedIn={isLoggedIn} + onLogoDoubleClick={handleResetRecommendation} + onLogoutClick={handleLogout} + onLogoClick={handleClose} + onMyPageClick={handleMyPageClick} + onPopupClick={handleCardClick} + onSellerClick={handleSellerClick} + /> + 상세 불러오는 중…}> + { + setReturnToPage("popupDetail"); + setReturnToPopupId(selectedPopupId); + setReturnToAction("review"); + handleLoginClick(); + }} + onPopupClick={handlePopupClick} + showReviewWriteOnMount={returnToAction === "review"} + /> + +
+ + + )} + + {currentPage === "mypage" && ( + <> +
+ 마이페이지 로딩 중…}> + + +
+ + + )} + + {currentPage === "nearbyExplore" && ( + <> + {/* Header 고정 표시 (소비자 페이지) */} +
+ 지도를 불러오는 중…}> + { + setReturnToPage("nearbyExplore"); + handleLoginClick(); + }} + onLogoutClick={handleLogout} + onPopupClick={handlePopupClick} + /> + +
+ + + )} + + {currentPage === "sellerDashboard" && sellerId && ( + 대시보드 로딩 중…}> + + + )} + + {/* Recommendation Modal */} + {isLoggedIn && showRecommendationModal && ( + + + + )} + + {/* Login Confirm Dialog */} + setShowLoginConfirmDialog(false)} + onConfirm={() => { + setShowLoginConfirmDialog(false); + handleLoginClick(); + }} + type={loginConfirmDialogType} + /> + + ); +} \ No newline at end of file diff --git a/itdaing-web/src/assets/favicon_io/android-chrome-192x192.png b/itdaing-web/src/assets/favicon_io/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..169d9a6f3737dbaca4eede38241166f1a5b56717 GIT binary patch literal 16741 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 z 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 literal 0 HcmV?d00001 diff --git a/itdaing-web/src/assets/favicon_io/apple-touch-icon.png b/itdaing-web/src/assets/favicon_io/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd75bf3c597a0b990158966b713acd0e016c786b GIT binary patch literal 14902 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 ZgLHl-^`O{MCV$s}NQujdRg35c{tu_8fKmVe literal 0 HcmV?d00001 diff --git a/itdaing-web/src/assets/favicon_io/favicon-16x16.png b/itdaing-web/src/assets/favicon_io/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..cd9e37c6866f32ac4dcc8820b83a1a07cc2d22b5 GIT binary patch literal 484 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 D=0A|e literal 0 HcmV?d00001 diff --git a/itdaing-web/src/assets/favicon_io/site.webmanifest b/itdaing-web/src/assets/favicon_io/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/itdaing-web/src/assets/favicon_io/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/itdaing-web/src/assets/react.svg b/itdaing-web/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/itdaing-web/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/itdaing-web/src/components/auth/LoginConfirmDialog.tsx b/itdaing-web/src/components/auth/LoginConfirmDialog.tsx new file mode 100644 index 0000000..b01ca1a --- /dev/null +++ b/itdaing-web/src/components/auth/LoginConfirmDialog.tsx @@ -0,0 +1,80 @@ +interface LoginConfirmDialogProps { + isOpen: boolean; + onClose: () => void; + onConfirm: () => void; + type?: "favorite" | "review" | "mypage"; // mypage 타입 추가 +} + +export function LoginConfirmDialog({ isOpen, onClose, onConfirm, type = "favorite" }: LoginConfirmDialogProps) { + if (!isOpen) return null; + + const messages = { + favorite: { + description: "관심 팝업을 저장하려면 로그인이 필요합니다.\n로그인 하시겠습니까?" + }, + review: { + description: "후기를 작성하려면 로그인이 필요합니다.\n로그인 하시겠습니까?" + }, + mypage: { + description: "마이페이지를 이용하려면 로그인이 필요합니다.\n로그인 하시겠습니까?" + } + }; + + const currentMessage = messages[type]; + + return ( +
+ {/* 배경 오버레이 */} +
+ + {/* 다이얼로그 */} +
+ {/* 아이콘 */} +
+
+ + + +
+
+ + {/* 제목 */} +

+ + 로그인이 필요합니다 + +

+ + {/* 설명 */} +

+ + {currentMessage.description} + +

+ + {/* 버튼 그룹 */} +
+ + +
+
+
+ ); +} diff --git a/itdaing-web/src/components/auth/LoginPage.tsx b/itdaing-web/src/components/auth/LoginPage.tsx new file mode 100644 index 0000000..bb61e73 --- /dev/null +++ b/itdaing-web/src/components/auth/LoginPage.tsx @@ -0,0 +1,214 @@ +import { useState } from "react"; +import { MessageCircle } from "lucide-react"; +import { useUser } from "../../context/UserContext"; + +interface LoginPageProps { + onClose: () => void; + onSignupClick: () => void; + onLoginSuccess: (userType: "consumer" | "seller", sellerId?: number) => void; +} + +export function LoginPage({ onClose, onSignupClick, onLoginSuccess }: LoginPageProps) { + const [userType, setUserType] = useState<"consumer" | "seller">("consumer"); + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + const [error, setError] = useState(""); + const { setProfile, loadPresetFor } = useUser(); + + const handleLogin = () => { + // Check hardcoded credentials + // 소비자 계정: consumer1/11 + // 판매자 계정: seller1/11, seller2/22, seller3/33, ..., seller15/1515 + const sellerAccounts = [ + { username: "seller1", password: "11" }, + { username: "seller2", password: "22" }, + { username: "seller3", password: "33" }, + { username: "seller4", password: "44" }, + { username: "seller5", password: "55" }, + { username: "seller6", password: "66" }, + { username: "seller7", password: "77" }, + { username: "seller8", password: "88" }, + { username: "seller9", password: "99" }, + { username: "seller10", password: "1010" }, + { username: "seller11", password: "1111" }, + { username: "seller12", password: "1212" }, + { username: "seller13", password: "1313" }, + { username: "seller14", password: "1414" }, + { username: "seller15", password: "1515" }, + ]; + + const isValidSeller = userType === "seller" && + sellerAccounts.some(acc => acc.username === username && acc.password === password); + + if ( + (username === "consumer1" && password === "11" && userType === "consumer") || + isValidSeller + ) { + setError(""); + // seller 로그인 시 sellerId도 함께 전달 + if (userType === "seller") { + const sellerNum = parseInt(username.replace("seller", "")); + onLoginSuccess(userType, sellerNum); + } else { + // Load preset for known demo user and populate profile + loadPresetFor(username); + if(username !== "consumer1"){ + setProfile({ + userType: "consumer", + username, + name: username, + nickname: username, + email: `${username}@example.com`, + ageGroup: "20대", + interests: ["패션"], + moods: ["포토존"], + regions: ["남구"], + conveniences: ["무료입장"], + }); + } + onLoginSuccess(userType); + } + } else { + setError("아이디 또는 비밀번호가 올바르지 않습니다."); + } + }; + + return ( +
+
+ {/* Logo - 클릭하면 메인홈으로 이동 */} +
+ +
+ + {/* User Type Selection */} +
+
+ {/* Sliding white background */} +
+ + {/* Buttons */} + + +
+
+ + {/* ID/Password Inputs */} +
+ setUsername(e.target.value)} + onKeyDown={(e) => e.key === "Enter" && handleLogin()} + className="w-full h-[52px] rounded-[30px] bg-[#f5f5f5] border-[0.7px] border-gray-300 px-6 font-['Pretendard:Regular',sans-serif] placeholder:text-gray-600 focus:outline-none focus:ring-2 focus:ring-[#eb0000]/20" + /> + setPassword(e.target.value)} + onKeyDown={(e) => e.key === "Enter" && handleLogin()} + className="w-full h-[52px] rounded-[30px] bg-[#f5f5f5] border-[0.7px] border-gray-300 px-6 font-['Pretendard:Regular',sans-serif] placeholder:text-gray-600 focus:outline-none focus:ring-2 focus:ring-[#eb0000]/20" + /> +
+ + {/* Error Message */} + {error && ( +
+

+ {error} +

+
+ )} + + {/* Login Button */} +
+ +
+ + {/* Sign Up Link */} +
+ +
+ + {/* Divider with "간편로그인" */} +
+
+
+
+
+ + 간편로그인 + +
+
+ + {/* Kakao Login */} +
+ +
+ + {/* Back Button */} +
+ +
+
+
+ ); +} diff --git a/itdaing-web/src/components/auth/SignupPage1.tsx b/itdaing-web/src/components/auth/SignupPage1.tsx new file mode 100644 index 0000000..cf24b16 --- /dev/null +++ b/itdaing-web/src/components/auth/SignupPage1.tsx @@ -0,0 +1,246 @@ +import { useState } from "react"; +import { ChevronDown } from "lucide-react"; + +interface SignupPage1Props { + onClose: () => void; // back to login + onNext: (data: any) => void; + onGoHome?: () => void; // go to main + onLoginClick?: () => void; // switch to login +} + +export function SignupPage1({ onClose, onNext, onGoHome, onLoginClick }: SignupPage1Props) { + const [userType, setUserType] = useState<"consumer" | "seller">("consumer"); + const [formData, setFormData] = useState({ + username: "", + name: "", + ageGroup: "", + nickname: "", + password: "", + passwordConfirm: "", + email: "", + mbti: "", + }); + + const handleSubmit = () => { + // Validate form data + if (userType === "consumer") { + onNext({ ...formData, userType }); + } else { + // For seller, skip to final page + console.log("Seller signup", { ...formData, userType }); + } + }; + + return ( +
+
+ {/* Logo clickable to go home */} +
+ +
+ + {/* User Type Selection */} +
+ + +
+ + {/* Form */} +
+ {/* 아이디 */} +
+ + + setFormData({ ...formData, username: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + /> +
+ + {/* 이름 & 연령대 */} +
+
+ + + setFormData({ ...formData, name: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + /> +
+ {userType === "consumer" && ( +
+ +
+ + +
+
+ )} +
+ + {/* 닉네임 */} +
+ + + setFormData({ ...formData, nickname: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + /> +
+ + {/* 비밀번호 */} +
+ + + setFormData({ ...formData, password: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + /> +
+ + {/* 비밀번호 재입력 */} +
+ + + setFormData({ ...formData, passwordConfirm: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + /> +
+ + {/* E-mail */} +
+ + + setFormData({ ...formData, email: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + /> +
+ + {/* MBTI - Only for consumers */} + {userType === "consumer" && ( +
+ +
+ + +
+
+ )} + + {/* Submit & login switch */} +
+ + +
+
+
+
+ ); +} diff --git a/itdaing-web/src/components/auth/SignupPage2.tsx b/itdaing-web/src/components/auth/SignupPage2.tsx new file mode 100644 index 0000000..f6bf1b2 --- /dev/null +++ b/itdaing-web/src/components/auth/SignupPage2.tsx @@ -0,0 +1,227 @@ +import { useState } from "react"; + +interface SignupPage2Props { + onComplete: () => void; + onClose: () => void; // back to login + userData: any; + onGoHome?: () => void; // go home by logo click + onLoginClick?: () => void; // switch to login +} + +export function SignupPage2({ onComplete, onClose, userData, onGoHome, onLoginClick }: SignupPage2Props) { + const [selectedInterests, setSelectedInterests] = useState([]); + const [selectedActivities, setSelectedActivities] = useState([]); + const [selectedEvents, setSelectedEvents] = useState([]); + const [selectedPopups, setSelectedPopups] = useState([]); + + const interests = [ + "패션", "뷰티", "음식", "건강", "공연/전시", "스포츠", + "키즈", "아트", "굿즈", "반려동물" + ]; + + const activities = [ + "혼자여도 좋은", "가족과 함께", "친구와 함께", "연인과 함께", + "반려동물과 함께", "아기자기한", "감성적인", "활기찬", + "차분한", "체험하기 좋은", "포토존", "레트로/빈티지", + "체험가능", "실내", "야외" + ]; + + const events = [ + "무료주차", "무료입장", "예약가능", "굿즈판매" + ]; + + const popups = [ + "남구", "동구", "서구", "북구", "광산구" + ]; + + const toggleSelection = ( + item: string, + selected: string[], + setSelected: (items: string[]) => void, + maxSelections?: number + ) => { + if (selected.includes(item)) { + setSelected(selected.filter((i) => i !== item)); + } else { + if (maxSelections && selected.length >= maxSelections) { + // Don't add if max reached + return; + } + setSelected([...selected, item]); + } + }; + + const handleComplete = () => { + console.log("Signup complete", { + ...userData, + interests: selectedInterests, + activities: selectedActivities, + events: selectedEvents, + popups: selectedPopups, + }); + onComplete(); + }; + + return ( +
+
+ {/* Logo */} +
+ +
+ + {/* User Type Indicator */} +
+
+ {userData.userType === "consumer" ? "소비자" : "판매자"} +
+
+ + {/* Form */} +
+ {/* Title */} +
+

+ 사용자님의 취향을 알려주세요! +

+

+ 카테고리별로 원하는 내용을 선택하면 정보를 모아 사용자님의 취향에 맞게 추천해드립니다! +

+
+ + {/* Section 1: Interests */} +
+

+ 평소에 어떤 분야에 관심이 있으신가요? (최소 1개, 최대 4개 선택) +

+
+ {interests.map((item) => ( + + ))} +
+
+ + {/* Section 2: Activities */} +
+

+ 원하는 팝업 분위기를 선택해주세요 (최소 1개, 최대 4개 선택) +

+
+ {activities.map((item) => ( + + ))} +
+
+ + {/* Section 3: Events */} +
+

+ 원하는 편의사항을 선택해주세요 (최소 1개, 최대 4개 선택) +

+
+ {events.map((item) => ( + + ))} +
+
+ + {/* Section 4: Popups */} +
+

+ 어떤 지역의 팝업 스토어를 방문하고 싶나요? (최소 1개, 최대 2개 선택) +

+
+ {popups.map((item) => ( + + ))} +
+
+ + {/* Submit Buttons */} +
+ + + + +
+
+
+
+ ); +} diff --git a/itdaing-web/src/components/common/BottomNav.tsx b/itdaing-web/src/components/common/BottomNav.tsx new file mode 100644 index 0000000..69b5af5 --- /dev/null +++ b/itdaing-web/src/components/common/BottomNav.tsx @@ -0,0 +1,33 @@ +import { MapPin, Home, User } from "lucide-react"; + +interface BottomNavProps { + onMyPageClick: () => void; + onMainClick?: () => void; + onNearbyExploreClick?: () => void; + isLoggedIn?: boolean; + onLoginClick?: () => void; + onLogoutClick?: () => void; +} + +export function BottomNav({ onMyPageClick, onMainClick, onNearbyExploreClick }: BottomNavProps) { + return ( + + ); +} diff --git a/itdaing-web/src/components/common/CommunityFilterButtons.tsx b/itdaing-web/src/components/common/CommunityFilterButtons.tsx new file mode 100644 index 0000000..9a409f4 --- /dev/null +++ b/itdaing-web/src/components/common/CommunityFilterButtons.tsx @@ -0,0 +1,3 @@ +import { useState } from "react"; import { ChevronDown } from "lucide-react"; +const filters=["전체","패션","뷰티","음식","건강","공연/전시","스포츠","키즈","아트","굿즈","반려동물"] as const; interface CommunityFilterButtonsProps { activeFilter:string; onFilterChange:(f:string)=>void; } +export function CommunityFilterButtons({ activeFilter,onFilterChange}:CommunityFilterButtonsProps){ const [open,setOpen]=useState(false); const mobile=filters.slice(0,4); return (
{filters.map(f=> ())}
{mobile.map(f=> ())}
{open && (<>
setOpen(false)} />
{filters.slice(4).map(f=> ())}
)}
); } diff --git a/itdaing-web/src/components/common/EventCard.tsx b/itdaing-web/src/components/common/EventCard.tsx new file mode 100644 index 0000000..74e53b0 --- /dev/null +++ b/itdaing-web/src/components/common/EventCard.tsx @@ -0,0 +1,3 @@ +import { useState } from "react"; import { Heart, MapPin } from "lucide-react"; import { motion } from "motion/react"; +interface EventCardProps { image:string; title:string; date:string; location:string; isFavorite?:boolean; onClick?:()=>void; isLoggedIn?:boolean; onLoginClick?:()=>void; } +export function EventCard({ image,title,date,location,isFavorite:initial=false,onClick,isLoggedIn,onLoginClick}:EventCardProps){ const [fav,setFav]=useState(initial); const [hover,setHover]=useState(false); const toggle=(e:React.MouseEvent)=>{ e.stopPropagation(); if(!isLoggedIn){ onLoginClick?.(); return;} setFav(!fav); }; return ( setHover(true)} onMouseLeave={()=> setHover(false)} onClick={onClick} whileHover={{ y:-8, scale:1.02}} transition={{duration:0.3}}>

{title}

{date}

{location}
); } diff --git a/itdaing-web/src/components/common/EventSection.tsx b/itdaing-web/src/components/common/EventSection.tsx new file mode 100644 index 0000000..d605a50 --- /dev/null +++ b/itdaing-web/src/components/common/EventSection.tsx @@ -0,0 +1,25 @@ +import { ChevronDown, ChevronLeft, ChevronRight } from "lucide-react"; +import { EventCard } from "./EventCard"; +import { FilterButtons } from "./FilterButtons"; +import { CommunityFilterButtons } from "./CommunityFilterButtons"; +import { SectionTitle } from "./SectionTitle"; +import { useRef, useState, useEffect } from "react"; +import { popups } from "../../data/popups"; +// (Body truncated; using existing implementation from root with adjusted data import path) +// For brevity, keep same logic; consider later extracting hooks. +interface ExternalEventItem { id:number; image:string; title:string; date:string; location:string; isFavorite?:boolean; } +interface EventSectionProps { title:React.ReactNode; highlight?:string; showAll:boolean; onToggleShowAll:()=>void; type:"opening"|"local"|"community"; onPopupClick:(id:number)=>void; isLoggedIn?:boolean; onLoginClick?:()=>void; items?:ExternalEventItem[]; } +export function EventSection(props: EventSectionProps){ /* delegate to original module via dynamic import */ return ; } +function LegacyEventSection({ title, highlight, showAll, onToggleShowAll, type, onPopupClick, isLoggedIn, onLoginClick, items }: EventSectionProps){ + const scrollContainerRef=useRef(null); const [canScrollLeft,setCanScrollLeft]=useState(false); const [canScrollRight,setCanScrollRight]=useState(false); const prevLengthRef=useRef(0); const [locationFilter,setLocationFilter]=useState("동구"); const [categoryFilter,setCategoryFilter]=useState("전체"); const [currentCardIndex,setCurrentCardIndex]=useState(1); const [visibleCount,setVisibleCount]=useState(4); + const openingEvents=popups.filter(p=>p.status==="upcoming").slice(0,8).map(p=>({id:p.id,image:p.images[0],title:p.title,date:p.date,location:p.location,isFavorite:false})); + const localEvents=popups.filter(p=>p.status==="upcoming"||p.status==="ongoing").slice(0,20).map(p=>({id:p.id,image:p.images[0],title:p.title,date:p.date,location:p.location,isFavorite:false})); + const communityEvents=popups.filter(p=>p.status==="upcoming"||p.status==="ongoing").slice(0,20).map(p=>({id:p.id,image:p.images[0],title:p.title,date:p.date,location:p.location,isFavorite:false})); + const baseEvents= type==="opening"?openingEvents: type==="local"?localEvents: communityEvents; const events= items&&items.length>0?items:baseEvents; + const filteredEvents= type==="local"? (locationFilter==="전체"?events: events.filter(e=> popups.find(p=>p.id===e.id)?.address.includes(locationFilter))): (type==="community" && categoryFilter!=="전체"? events.filter(e=>{const popup=popups.find(p=>p.id===e.id); const catMap:{[k:string]:string[]}={"패션":["플리마켓","빈티지마켓","패션마켓"],"뷰티":["아로마페어","뷰티마켓"],"음식":["디저트마켓","푸드마켓"],"건강":["아로마페어","헬스마켓","요가페어"],"공연/전시":["크래프트페어","아트마켓","유리공예전","공연마켓"],"스포츠":["스포츠마켓"],"키즈":["키즈마켓","키즈페스티벌"],"아트":["크래프트페어","아트마켓","액세서리페어","목공예마켓","문구페어","플라워마켓","유리공예전","크리에이터마켓"],"굿즈":["문구페어","캔들마켓","굿즈페어"],"반려동물":["식물마켓","펫페어"]}; const match=catMap[categoryFilter]||[]; return popup && match.includes(popup.category); }): events); + const displayedEvents= showAll? filteredEvents: filteredEvents.slice(0,visibleCount); + useEffect(()=>{ setVisibleCount(4); },[locationFilter,categoryFilter]); + useEffect(()=>{ const c=scrollContainerRef.current; if(!c) return; const update=()=>{ const {scrollLeft,scrollWidth,clientWidth}=c; const max=scrollWidth-clientWidth; setCanScrollLeft(scrollLeft>10); setCanScrollRight(max>10 && scrollLeft0){ const containerRect=c.getBoundingClientRect(); const containerRight=containerRect.right; let last=1; cards.forEach((card,index)=>{ const cardRect=(card as HTMLElement).getBoundingClientRect(); const center=cardRect.left + cardRect.width/2; if(center <= containerRight - 20) last=index+1; }); setCurrentCardIndex(last);} }; const currentLength=filteredEvents.length; if(prevLengthRef.current!==currentLength){ c.scrollLeft=0; prevLengthRef.current=currentLength; setCurrentCardIndex(1);} requestAnimationFrame(()=>{requestAnimationFrame(update);}); c.addEventListener('scroll',update); window.addEventListener('resize',update); return ()=>{ c.removeEventListener('scroll',update); window.removeEventListener('resize',update); }; },[filteredEvents]); + const scroll=(dir:"left"|"right")=>{ const c=scrollContainerRef.current; if(!c) return; c.scrollBy({left: dir==="left"?-200:200, behavior:'smooth'}); }; + return (
{type==="local" && } {type==="community" && }
{displayedEvents.map(e=> onPopupClick(e.id)} isLoggedIn={isLoggedIn} onLoginClick={onLoginClick}/> )}
{filteredEvents.length>4 && (

{displayedEvents.length} / {filteredEvents.length}

{(showAll || visibleCount>=filteredEvents.length)?(): visibleCount>4?(
{visibleCount setVisibleCount(prev=> Math.min(prev+4,filteredEvents.length))} className="flex items-center gap-1.5 px-6 py-2.5 bg-gray-200 text-[#4d4d4d] rounded-full hover:bg-gray-300 transition-colors font-['Pretendard:Medium',sans-serif] text-sm md:text-base">더보기 )}
):(
)}
)}
{canScrollLeft && ()}{canScrollRight && ()}
{filteredEvents.map((e,index)=>(
onPopupClick(e.id)} isLoggedIn={isLoggedIn} onLoginClick={onLoginClick}/>
))}

{currentCardIndex} / {filteredEvents.length}

); +} diff --git a/itdaing-web/src/components/common/FilterButtons.tsx b/itdaing-web/src/components/common/FilterButtons.tsx new file mode 100644 index 0000000..866488a --- /dev/null +++ b/itdaing-web/src/components/common/FilterButtons.tsx @@ -0,0 +1,2 @@ +const filters=["전체","남구","동구","서구","북구","광산구"] as const; interface FilterButtonsProps { activeFilter:string; onFilterChange:(f:string)=>void; } +export function FilterButtons({ activeFilter,onFilterChange}:FilterButtonsProps){ return (
{filters.map(f=> ())}
); } diff --git a/itdaing-web/src/components/common/Footer.tsx b/itdaing-web/src/components/common/Footer.tsx new file mode 100644 index 0000000..c4e936e --- /dev/null +++ b/itdaing-web/src/components/common/Footer.tsx @@ -0,0 +1,58 @@ +import { Instagram, Facebook, Youtube, Mail } from "lucide-react"; + +export function Footer() { + return ( +
+ ); +} diff --git a/itdaing-web/src/components/common/Header.tsx b/itdaing-web/src/components/common/Header.tsx new file mode 100644 index 0000000..0fdf12b --- /dev/null +++ b/itdaing-web/src/components/common/Header.tsx @@ -0,0 +1,272 @@ +import { User, Search, X } from "lucide-react"; +import { useState, useRef, useEffect } from "react"; +import { popups } from "../../data/popups"; +import { sellers } from "../../data/sellers"; + +interface HeaderProps { + onLoginClick: () => void; + isLoggedIn: boolean; + onLogoDoubleClick?: () => void; + onLogoutClick?: () => void; + onLogoClick?: () => void; + onMyPageClick?: () => void; + onPopupClick?: (popupId: number) => void; + onSellerClick?: (sellerId: number) => void; +} + +interface SearchResult { + id: number; + type: "popup" | "seller"; + name: string; + subtitle?: string; +} + +export function Header({ + onLoginClick, + isLoggedIn, + onLogoDoubleClick, + onLogoutClick, + onLogoClick, + onMyPageClick, + onPopupClick, + onSellerClick +}: HeaderProps) { + const [showMobileSearch, setShowMobileSearch] = useState(false); + const [searchQuery, setSearchQuery] = useState(""); + const [showAutocomplete, setShowAutocomplete] = useState(false); + const [searchResults, setSearchResults] = useState([]); + const [selectedIndex, setSelectedIndex] = useState(-1); + const searchRef = useRef(null); + const mobileSearchRef = useRef(null); + + useEffect(() => { + if (searchQuery.trim().length === 0) { + setSearchResults([]); + setShowAutocomplete(false); + return; + } + const query = searchQuery.toLowerCase().trim(); + const results: SearchResult[] = []; + popups.forEach(popup => { + if (popup.title.toLowerCase().includes(query)) { + results.push({ + id: popup.id, + type: "popup", + name: popup.title, + subtitle: popup.location + }); + } + }); + sellers.forEach(seller => { + if (seller.name.toLowerCase().includes(query)) { + results.push({ + id: seller.id, + type: "seller", + name: seller.name, + subtitle: "판매자" + }); + } + }); + setSearchResults(results.slice(0, 8)); + setShowAutocomplete(results.length > 0); + }, [searchQuery]); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (searchRef.current && !searchRef.current.contains(event.target as Node)) { + setShowAutocomplete(false); + } + if (mobileSearchRef.current && !mobileSearchRef.current.contains(event.target as Node)) { + setShowAutocomplete(false); + } + }; + document.addEventListener("mousedown", handleClickOutside); + return () => document.removeEventListener("mousedown", handleClickOutside); + }, []); + + const handleResultClick = (result: SearchResult) => { + if (result.type === "popup" && onPopupClick) onPopupClick(result.id); + else if (result.type === "seller" && onSellerClick) onSellerClick(result.id); + setSearchQuery(""); + setShowAutocomplete(false); + setShowMobileSearch(false); + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === "ArrowDown") { + e.preventDefault(); + setSelectedIndex(prev => Math.min(prev + 1, searchResults.length - 1)); + } else if (e.key === "ArrowUp") { + e.preventDefault(); + setSelectedIndex(prev => Math.max(prev - 1, -1)); + } else if (e.key === "Enter") { + e.preventDefault(); + if (selectedIndex >= 0 && searchResults[selectedIndex]) { + handleResultClick(searchResults[selectedIndex]); + } + } else if (e.key === "Escape") { + setShowAutocomplete(false); + setSelectedIndex(-1); + } + }; + + return ( +
+
+
+
+ DA-ITDAING +
+
+
+ setSearchQuery(e.target.value)} + onKeyDown={handleKeyDown} + onFocus={() => { if (searchResults.length > 0) setShowAutocomplete(true); }} + className="w-full h-8 sm:h-9 md:h-10 lg:h-12 px-3 sm:px-4 md:px-5 pr-8 sm:pr-9 md:pr-10 lg:pr-12 rounded-full border border-[#ccc6c6] focus:outline-none focus:border-[#eb0000] transition-colors text-xs sm:text-sm md:text-base" + /> + + {showAutocomplete && searchResults.length > 0 && ( +
+ {searchResults.map((result, index) => ( + + ))} +
+ )} +
+
+
+ + {isLoggedIn ? ( + <> + + {onLogoutClick && ( + + )} + + ) : ( + + )} +
+
+
+ {showMobileSearch && ( + <> +
setShowMobileSearch(false)} + /> +
+
+
+ setSearchQuery(e.target.value)} + onKeyDown={handleKeyDown} + onFocus={() => { if (searchResults.length > 0) setShowAutocomplete(true); }} + autoFocus + className="w-full h-12 px-4 pr-20 rounded-full border-2 border-[#ccc6c6] focus:outline-none focus:border-[#eb0000] transition-colors text-base" + /> + + + {showAutocomplete && searchResults.length > 0 && ( +
+ {searchResults.map((result, index) => ( + + ))} +
+ )} +
+
+
+ + )} +
+ ); +} diff --git a/itdaing-web/src/components/common/HeroCarousel.tsx b/itdaing-web/src/components/common/HeroCarousel.tsx new file mode 100644 index 0000000..b88c66c --- /dev/null +++ b/itdaing-web/src/components/common/HeroCarousel.tsx @@ -0,0 +1,255 @@ +import { useState, useEffect, useRef, useMemo } from "react"; +import { ChevronLeft, ChevronRight, MapPin } from "lucide-react"; +import { motion, PanInfo } from "motion/react"; +import { popups } from "../../data/popups"; + +interface HeroCarouselProps { onPopupClick?: (popupId: number) => void; } +const carouselItems = popups.sort((a,b)=> (b.likes + b.views) - (a.likes + a.views)).slice(0,7).map((p,i)=>({id:p.id,rank:i+1,image:p.images[0],title:p.title,date:p.date,location:p.location})); +export function HeroCarousel({ onPopupClick }: HeroCarouselProps) { + const [currentIndex, setCurrentIndex] = useState(3); + const [isPaused, setIsPaused] = useState(false); + const containerRef = useRef(null); + + // Unified responsive config for desktop + mobile + const config = useResponsiveCarouselConfig(); + + useEffect(()=>{ if(isPaused) return; const interval=setInterval(()=> setCurrentIndex(prev => (prev+1)%carouselItems.length), config.isMobile?3000:4000); return ()=> clearInterval(interval); },[isPaused,config.isMobile]); + const handlePrev=()=> setCurrentIndex(prev=> (prev-1+carouselItems.length)%carouselItems.length); + const handleNext=()=> setCurrentIndex(prev=> (prev+1)%carouselItems.length); + const handleDragEnd=(e:MouseEvent|TouchEvent|PointerEvent, info:PanInfo)=>{ const t=50; if(info.offset.x>t) handlePrev(); else if(info.offset.x<-t) handleNext(); }; + return ( +
+
setIsPaused(true)} onMouseLeave={()=>setIsPaused(false)}> + {/* Mobile version */} +
+
+ {/* Drag layer */} + +
+ {carouselItems.map((item, idx) => { + let position = idx - currentIndex; + if (position < -3) position += carouselItems.length; + if (position > 3) position -= carouselItems.length; + const isCentered = position === 0; + const isVisible = Math.abs(position) <= 3; + if (!isVisible) return null; + const s = config.mobile; + const distance = Math.abs(position); + const scale = s.scale[distance] ?? 0.7; + const w = Math.round(s.cardW * scale); + const h = Math.round(s.cardH * scale); + const verticalOffset = distance * 12; // pushes smaller cards down slightly + // Horizontal translation: center at 50%, offset by position * step while keeping inside viewport + const step = s.step; + const x = position * step; + const opacity = s.opacity[distance] ?? 0.4; + // We anchor cards at center using left:50% then translate + return ( + { + if (!isCentered) { + if (position < 0) handlePrev(); else handleNext(); + } else if (onPopupClick && item.rank) { + onPopupClick(item.id); + } + }} + > +
+ {item.title} +
+
+ {item.rank && position === 0 && ( +
+ - {item.rank} - +
+ )} +

{item.title}

+ {position === 0 && ( + <> +

{item.date}

+
+ + {item.location} +
+ + )} +
+
+ + ); + })} +
+
+
+
+ {carouselItems.map((_, idx) => ( +
+
+ {/* Desktop version */} +
+
+ {/* Slides */} +
+ {carouselItems.map((item, idx) => { + // Base circular delta + let pos = idx - currentIndex; + const total = carouselItems.length; + // Normalize to minimal distance representation + if(pos > total/2) pos -= total; + if(pos < -total/2) pos += total; + // Skip if outside visible range for current viewport size + if(Math.abs(pos) > config.desktop.maxDistance) return null; + // Dynamic spacing derived from card width + const step = config.desktop.step; + const translateX = pos * step; + // Scale & opacity tiers based on relative distance + const distance = Math.abs(pos); + const scaleMap: Record = config.desktop.scaleMap; + const opacityMap: Record = config.desktop.opacityMap; + const scale = scaleMap[distance] ?? 0.7; + const opacity = opacityMap[distance] ?? 0.4; + const zIndex = 100 - distance; // center above others + return ( + { + if(pos !== 0){ if(pos < 0) handlePrev(); else handleNext(); } + else onPopupClick?.(item.id); + }} + > +
+ {item.title} +
+
+
+ {item.rank}위 + {pos===0 && ( + + )} +
+

{item.title}

+ {pos===0 && ( + <> +

{item.date}

+

{item.location}

+ + )} +
+
+ + ); + })} +
+ {/* Navigation arrows */} + + + {/* Indicators */} +
+ {carouselItems.map((_, idx) => ( +
+
+
+
+ ); +} + +// Hook: returns responsive parameters for common app/web sizes +function useResponsiveCarouselConfig(){ + type DesktopCfg = { + breakpoint: number; // min width + cardW: number; + cardH: number; + maxDistance: 1|2|3; + gapFactor: number; // step = cardW * gapFactor + containerMaxW: number; + }; + const calculate = () => { + const w = typeof window === 'undefined' ? 1440 : window.innerWidth; + const isMobile = w < 768; // app-like sizes (360, 375, 390, 414, 430) + + // Desktop presets for typical web sizes: 1024, 1280, 1440, 1536+ + const presets: DesktopCfg[] = [ + { breakpoint: 1536, cardW: 320, cardH: 480, maxDistance: 3, gapFactor: 0.78, containerMaxW: 1680 }, + { breakpoint: 1440, cardW: 300, cardH: 450, maxDistance: 3, gapFactor: 0.76, containerMaxW: 1600 }, + { breakpoint: 1280, cardW: 280, cardH: 420, maxDistance: 2, gapFactor: 0.74, containerMaxW: 1480 }, + { breakpoint: 1024, cardW: 260, cardH: 400, maxDistance: 2, gapFactor: 0.72, containerMaxW: 1360 }, + { breakpoint: 768, cardW: 240, cardH: 380, maxDistance: 1, gapFactor: 0.70, containerMaxW: 1200 }, + ]; + + // Mobile center card scales by viewport; clamp to [160, 210] + const mCenterW = Math.min(210, Math.max(160, Math.round(w * 0.45))); + const mCenterH = Math.round(mCenterW * 1.38); + // choose a step that keeps side cards inside safe padding without clipping + const sideSpace = Math.max(0, (w - mCenterW) / 2 - 24); + const step = Math.round(Math.min(Math.max(56, mCenterW * 0.68), sideSpace)); + const mobile = { + containerW: w, + cardW: mCenterW, + cardH: mCenterH, + trackH: Math.round(mCenterH + 40), + step, + scale: {0:1, 1:0.89, 2:0.81, 3:0.75} as Record, + opacity: {0:1, 1:0.7, 2:0.5, 3:0.3} as Record, + } as const; + + const desktopPreset = presets.find(p => w >= p.breakpoint) ?? presets[presets.length-1]; + const desktop = { + cardW: desktopPreset.cardW, + cardH: desktopPreset.cardH, + step: Math.round(desktopPreset.cardW * desktopPreset.gapFactor), + maxDistance: desktopPreset.maxDistance, + containerMaxW: desktopPreset.containerMaxW, + trackH: desktopPreset.cardH + 40, + scaleMap: {0:1, 1:0.88, 2:0.78, 3:0.7} as Record, + opacityMap: {0:1, 1:0.85, 2:0.55, 3:0.4} as Record, + }; + + return { isMobile, mobile, desktop }; + }; + + const [state, setState] = useState(calculate); + useEffect(()=>{ + const onResize = () => setState(calculate()); + window.addEventListener('resize', onResize); + return () => window.removeEventListener('resize', onResize); + },[]); + return state; +} diff --git a/itdaing-web/src/components/common/HorizontalBanner.tsx b/itdaing-web/src/components/common/HorizontalBanner.tsx new file mode 100644 index 0000000..c67f300 --- /dev/null +++ b/itdaing-web/src/components/common/HorizontalBanner.tsx @@ -0,0 +1,5 @@ +import { ImageWithFallback } from "./ImageWithFallback"; +interface HorizontalBannerProps { onClick?: () => void; } +export function HorizontalBanner({ onClick }: HorizontalBannerProps) { + return (

특별한 이벤트가
준비되어 있어요!

지금 바로 확인하고 참여하세요 →

); +} diff --git a/itdaing-web/src/components/common/ImageWithFallback.tsx b/itdaing-web/src/components/common/ImageWithFallback.tsx new file mode 100644 index 0000000..0e26139 --- /dev/null +++ b/itdaing-web/src/components/common/ImageWithFallback.tsx @@ -0,0 +1,27 @@ +import React, { useState } from 'react' + +const ERROR_IMG_SRC = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==' + +export function ImageWithFallback(props: React.ImgHTMLAttributes) { + const [didError, setDidError] = useState(false) + + const handleError = () => { + setDidError(true) + } + + const { src, alt, style, className, ...rest } = props + + return didError ? ( +
+
+ Error loading image +
+
+ ) : ( + {alt} + ) +} diff --git a/itdaing-web/src/components/common/PopupDetailPage.tsx b/itdaing-web/src/components/common/PopupDetailPage.tsx new file mode 100644 index 0000000..5c2a0d6 --- /dev/null +++ b/itdaing-web/src/components/common/PopupDetailPage.tsx @@ -0,0 +1,588 @@ +import { useState } from "react"; +import { ChevronLeft, Eye, MapPin, Star, Share2 } from "lucide-react"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "../ui/select"; +import { ReviewWritePage } from "../consumer/ReviewWritePage"; +import { SellerInfoPage } from "../seller/SellerInfoPage"; +import { LoginConfirmDialog } from "../auth/LoginConfirmDialog"; +import { getPopupById } from "../../data/popups"; +import { getSellerById } from "../../data/sellers"; +import { getReviewsByPopupId, getAverageRating } from "../../data/reviews"; + +interface PopupDetailPageProps { + onClose: () => void; + popupId: number; + onMyPageClick?: () => void; + onNearbyExploreClick?: () => void; + isLoggedIn?: boolean; + onLoginClick?: () => void; + onPopupClick?: (id: number) => void; + showReviewWriteOnMount?: boolean; +} + +export function PopupDetailPage({ onClose, popupId, onMyPageClick, onNearbyExploreClick, isLoggedIn, onLoginClick, onPopupClick, showReviewWriteOnMount = false }: PopupDetailPageProps) { + const [activeTab, setActiveTab] = useState<"설명" | "지도" | "후기">("설명"); + const [isLiked, setIsLiked] = useState(false); + // Initialize likes from data to reflect actual business data + const [likesCount, setLikesCount] = useState(() => getPopupById(popupId)?.likes ?? 0); + const [sortOrder, setSortOrder] = useState("최신순"); + const [showReviewWrite, setShowReviewWrite] = useState(showReviewWriteOnMount); + const [showSellerInfo, setShowSellerInfo] = useState(false); + const [showLoginConfirm, setShowLoginConfirm] = useState(false); + const [showReviewLoginConfirm, setShowReviewLoginConfirm] = useState(false); + const handleShare = async () => { + try { + const shareData = { + title: popup?.title ?? '팝업스토어', + text: popup?.description ?? '흥미로운 팝업스토어를 확인해보세요', + url: window.location.href, + }; + if (navigator.share) { + await navigator.share(shareData); + } else { + await navigator.clipboard.writeText(shareData.url); + alert('링크가 복사되었습니다.'); + } + } catch (e) { + // ignore cancel errors + } + }; + + // 하트 클릭 핸들러 + const handleLikeClick = () => { + if (!isLoggedIn) { + setShowLoginConfirm(true); + return; + } + setIsLiked(!isLiked); + setLikesCount(isLiked ? likesCount - 1 : likesCount + 1); + }; + + // 후기 데이터 + const reviews = getReviewsByPopupId(popupId); + const averageRating = getAverageRating(popupId); + const totalReviews = reviews.length; + + // 평점 분포 (5~1점) + const ratingDistribution = [5, 4, 3, 2, 1].map((score) => { + const count = reviews.filter((r) => r.rating === score).length; + const percentage = totalReviews > 0 ? Math.round((count / totalReviews) * 100) : 0; + return { label: `${score}점`, percentage }; + }); + + // Robust date parsing for format YYYY.MM.DD + const parseDotDate = (s: string): number => { + const m = s.match(/^(\d{4})\.(\d{2})\.(\d{2})$/); + if (!m) return new Date(s).getTime() || 0; + const [, y, mo, d] = m; + return new Date(Number(y), Number(mo) - 1, Number(d)).getTime(); + }; + + // 정렬된 후기 + const sortedReviews = [...reviews].sort((a, b) => { + if (sortOrder === "최신순") { + return parseDotDate(b.date) - parseDotDate(a.date); + } else { + // 평점순 + return b.rating - a.rating; + } + }); + + // Mock data - 실제로는 popupId에 따라 다른 데이터를 가져와야 함 + const popup = getPopupById(popupId); + + if (!popup) { + return
팝업을 찾을 수 없습니다.
; + } + + const seller = getSellerById(popup.sellerId); + + if (!seller) { + return
판매자 정보를 찾을 수 없습니다.
; + } + + const popupData = { + id: popup.id, + title: popup.title, + date: popup.date, + location: popup.address, + hours: popup.hours, + tags: popup.tags.map(tag => `# ${tag}`), + likes: popup.likes, + views: popup.views, + imageUrl: popup.images[0] || "https://images.unsplash.com/photo-1555099962-4199c345e5dd?w=800&h=600&fit=crop", + sellerName: seller.name, + sellerImage: seller.profileImage, + content: { + title: popup.category, + description: popup.description, + }, + }; + + // 후기 작성 페이지 표시 + if (showReviewWrite) { + return setShowReviewWrite(false)} onMyPageClick={onMyPageClick} onNearbyExploreClick={onNearbyExploreClick} onClose={onClose} />; + } + + // 판매자 정보 페이지 표시 + if (showSellerInfo && seller) { + return ( + setShowSellerInfo(false)} + onMyPageClick={onMyPageClick} + onPopupClick={(id: number) => { + setShowSellerInfo(false); + onPopupClick?.(id); + }} + /> + ); + } + + return ( +
+ + {/* 메인보드 */} +
+ {/* 메인의 메인보드 */} +
+ {/* 썸네일 */} +
+
+ {popupData.title} +
+
+ + {/* 좋아요/조회수 + 뒤로가기 */} +
+ {/* 뒤로가기 버튼 */} + + + {/* 좋아요 & 조회수 - 오른쪽 정렬 */} +
+ {/* 좋아요 */} + + + {/* 조회수 */} +
+ + + {popupData.views} + +
+ + {/* 공유하기 */} + +
+
+ + {/* 상세페이지 메뉴 */} +
+ + + +
+ + {/* 탭별 콘텐츠 */} + {activeTab === "설명" && ( + <> + {/* 간단설명 */} +
+ {/* 왼쪽: 팝업 정보 */} +
+
+

{popupData.title}

+
+
+

{popupData.date}

+
+
+ +
+

{popupData.location}

+
+
+
+

{popupData.hours}

+
+
+ + {/* 오른쪽: 판매자 정보 */} + +
+ + {/* 태그 */} +
+ {popupData.tags.map((tag, index) => ( +
+
+
+

{tag}

+
+
+
+ ))} +
+ + {/* 특이사항 영역 */} +
+
+ {/* 주차 무료 */} +
+ + + + + +
+

주차 무료

+
+
+ + {/* 유료 입장 */} +
+ + + + + + +
+

유료 입장

+
+
+ + {/* 특별 할인 */} +
+ + + + + + +
+

특별 할인

+
+
+
+
+ + {/* 팝업스토어 소개 영역 */} +
+
+

상세 소개

+
+
+
+

{popupData.content.title}

+
+
+ {popupData.content.description} +
+
+
+ + )} + + {activeTab === "지도" && ( + <> + {/* 위치 */} +
+ +
+

{popupData.location}

+
+ +
+ + {/* 지도 이미지 */} +
+
+ + + + + + + + +
+ + + +
+
+
+ + )} + + {activeTab === "후기" && ( + <> + {/* 평점 */} +
+
+ {/* 별점 표시 */} +
+
+ {[1, 2, 3, 4, 5].map((star) => ( + + ))} +
+
+ {totalReviews > 0 ? ( + + 평균 {averageRating.toFixed(1)}점 · 후기 {totalReviews}개 + + ) : ( + 아직 후기가 없습니다. + )} +
+
+ + {/* 평점 바 그래프 */} +
+ {ratingDistribution.map((item, index) => ( +
+ + {item.label} + +
+
+
+ + {item.percentage}% + +
+ ))} +
+
+
+ + {/* 후기 작성하기 버튼 & 정렬 */} +
+ + + +
+ + {/* 후기 목록 */} + {sortedReviews.map((review, index) => ( +
+
+ +
+

+ {review.userName} +

+

+ {review.date} +

+
+ {[1, 2, 3, 4, 5].map((star) => ( + + ))} +
+
+
+
+ {review.content.split("\n").map((line, i) => ( +

+ {line} +

+ ))} +
+ {review.images && review.images.length > 0 && ( +
+ +
+ )} +
+ ))} + + )} +
+
+ + {/* 위로가기 버튼 */} + + + {/* 로그인 확인 다이얼로그 */} + setShowLoginConfirm(false)} + onConfirm={() => { + setShowLoginConfirm(false); + onLoginClick?.(); + }} + type="favorite" + /> + setShowReviewLoginConfirm(false)} + onConfirm={() => { + setShowReviewLoginConfirm(false); + onLoginClick?.(); + }} + type="review" + /> +
+ ); +} \ No newline at end of file diff --git a/itdaing-web/src/components/common/SectionTitle.tsx b/itdaing-web/src/components/common/SectionTitle.tsx new file mode 100644 index 0000000..e76d896 --- /dev/null +++ b/itdaing-web/src/components/common/SectionTitle.tsx @@ -0,0 +1,2 @@ +interface SectionTitleProps { title:React.ReactNode; highlight?:string; showViewAll?:boolean; onViewAllClick?:()=>void; } +export function SectionTitle({ title, highlight, showViewAll, onViewAllClick }: SectionTitleProps){ return (

{title}{highlight && <> {highlight}}

{showViewAll && ()}
); } diff --git a/itdaing-web/src/components/common/SignupPage1.tsx b/itdaing-web/src/components/common/SignupPage1.tsx new file mode 100644 index 0000000..47faacf --- /dev/null +++ b/itdaing-web/src/components/common/SignupPage1.tsx @@ -0,0 +1,296 @@ +import { useState } from "react"; +import { ChevronDown } from "lucide-react"; + +interface SignupPage1Props { + onNext: (data: any) => void; + onBackToLogin?: () => void; + onMyPageClick?: () => void; + onNearbyExploreClick?: () => void; + onHomeClick?: () => void; +} + +export function SignupPage1({ onNext, onBackToLogin, onHomeClick }: SignupPage1Props) { + const [userType, setUserType] = useState<"consumer" | "seller">("consumer"); + const [formData, setFormData] = useState({ + username: "", + name: "", + ageGroup: "", + nickname: "", + password: "", + passwordConfirm: "", + email: "", + mbti: "", + }); + const [errors, setErrors] = useState<{ [k: string]: string }>({}); + + const handleSubmit = () => { + // Basic validation + const newErrors: { [k: string]: string } = {}; + if (!formData.username) newErrors.username = "아이디를 입력해주세요"; + if (!formData.name) newErrors.name = "이름을 입력해주세요"; + if (!formData.password || formData.password.length < 6) newErrors.password = "비밀번호는 6자 이상"; + if (formData.password !== formData.passwordConfirm) newErrors.passwordConfirm = "비밀번호가 일치하지 않습니다"; + if (!formData.email || !formData.email.includes("@")) newErrors.email = "유효한 이메일을 입력해주세요"; + if (userType === "consumer" && !formData.ageGroup) newErrors.ageGroup = "연령대를 선택해주세요"; + setErrors(newErrors); + if (Object.keys(newErrors).length > 0) return; + + // Submit to next step + onNext({ ...formData, userType }); + }; + + return ( +
+
+ {/* Logo (clickable to Home) */} +
+ +
+ + {/* User Type Selection & Back to Login */} +
+ + +
+ + {/* Back to Login */} + {onBackToLogin && ( +
+ +
+ )} + + {/* Form */} +
+ {/* 아이디 */} +
+ + + setFormData({ ...formData, username: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + aria-invalid={!!errors.username} + aria-describedby={errors.username ? 'username-error' : undefined} + /> + {errors.username && ( +

{errors.username}

+ )} +
+ + {/* 이름 & 연령대 */} +
+
+ + + setFormData({ ...formData, name: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + aria-invalid={!!errors.name} + aria-describedby={errors.name ? 'name-error' : undefined} + /> + {errors.name && ( +

{errors.name}

+ )} +
+ {userType === "consumer" && ( +
+ +
+ + + {errors.ageGroup && ( +

{errors.ageGroup}

+ )} +
+
+ )} +
+ + {/* 닉네임 */} +
+ + + setFormData({ ...formData, nickname: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + /> +
+ + {/* 비밀번호 */} +
+ + + setFormData({ ...formData, password: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + aria-invalid={!!errors.password} + aria-describedby={errors.password ? 'password-error' : undefined} + /> + {errors.password && ( +

{errors.password}

+ )} +
+ + {/* 비밀번호 재입력 */} +
+ + + setFormData({ ...formData, passwordConfirm: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + aria-invalid={!!errors.passwordConfirm} + aria-describedby={errors.passwordConfirm ? 'password-confirm-error' : undefined} + /> + {errors.passwordConfirm && ( +

{errors.passwordConfirm}

+ )} +
+ + {/* E-mail */} +
+ + + setFormData({ ...formData, email: e.target.value }) + } + className="w-full h-[40px] rounded-[10px] border border-[#9a9a9a] px-4 font-['Pretendard:Regular',sans-serif] text-[14px] focus:outline-none focus:border-[#eb0000]" + aria-invalid={!!errors.email} + aria-describedby={errors.email ? 'email-error' : undefined} + /> + {errors.email && ( +

{errors.email}

+ )} +
+ + {/* MBTI - Only for consumers */} + {userType === "consumer" && ( +
+ +
+ + +
+
+ )} + + {/* Submit Button */} +
+ +
+
+
+
+ ); +} \ No newline at end of file diff --git a/itdaing-web/src/components/common/SignupPage2.tsx b/itdaing-web/src/components/common/SignupPage2.tsx new file mode 100644 index 0000000..324cc28 --- /dev/null +++ b/itdaing-web/src/components/common/SignupPage2.tsx @@ -0,0 +1,243 @@ +import { useState } from "react"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "../ui/tooltip"; + +interface SignupPage2Props { + onComplete: () => void; + onBackToLogin?: () => void; + userData: any; + onHomeClick?: () => void; +} + +export function SignupPage2({ onComplete, onBackToLogin, userData, onHomeClick }: SignupPage2Props) { + const [selectedInterests, setSelectedInterests] = useState([]); + const [selectedActivities, setSelectedActivities] = useState([]); + const [selectedEvents, setSelectedEvents] = useState([]); + const [selectedPopups, setSelectedPopups] = useState([]); + + const interests = [ + "패션", "뷰티", "음식", "건강", "공연/전시", "스포츠", + "키즈", "아트", "굿즈", "반려동물" + ]; + + const activities = [ + "혼자여도 좋은", "가족과 함께", "친구와 함께", "연인과 함께", + "반려동물과 함께", "아기자기한", "감성적인", "활기찬", + "차분한", "체험하기 좋은", "포토존", "레트로/빈티지", + "체험가능", "실내", "야외" + ]; + + const events = [ + "무료주차", "무료입장", "예약가능", "굿즈판매" + ]; + + const popups = [ + "남구", "동구", "서구", "북구/광산구" + ]; + + const toggleSelection = ( + item: string, + selected: string[], + setSelected: (items: string[]) => void, + maxSelections?: number + ) => { + if (selected.includes(item)) { + setSelected(selected.filter((i) => i !== item)); + } else { + if (maxSelections && selected.length >= maxSelections) { + // Don't add if max reached + return; + } + setSelected([...selected, item]); + } + }; + + const handleComplete = () => { + console.log("Signup complete", { + ...userData, + interests: selectedInterests, + activities: selectedActivities, + events: selectedEvents, + popups: selectedPopups, + }); + onComplete(); + }; + + return ( +
+
+ {/* Logo (clickable to Home) */} +
+ +
+ + {/* User Type Indicator - 선택한 유형만 가운데에 표시 */} +
+
+ {userData.userType === "consumer" ? "소비자" : "판매자"} +
+
+ + {/* Form */} +
+ {/* Title */} +
+

+ 사용자님의 취향을 알려주세요! +

+

+ 카테고리별로 원하는 내용을 선택하면 정보를 모아 사용자님의 취향에 맞게 추천해드립니다! +

+
+ + {/* Section 1: Interests */} +
+

+ 평소에 어떤 분야에 관심이 있으신가요? (최소 1개, 최대 4개 선택) +

+
+ {interests.map((item) => ( + + ))} +
+
+ + {/* Section 2: Activities */} +
+

+ 원하는 팝업 분위기를 선택해주세요 (최소 1개, 최대 4개 선택) +

+
+ {activities.map((item) => ( + + ))} +
+
+ + {/* Section 3: Events */} +
+

+ 원하는 편의사항을 선택해주세요 (최소 1개, 최대 4개 선택) +

+
+ {events.map((item) => ( + + ))} +
+
+ + {/* Section 4: Popups */} +
+

+ 어떤 지역의 팝업 스토어를 방문하고 싶나요? (최소 1개, 최대 2개 선택) +

+
+ {popups.map((item) => ( + + ))} +
+
+ + {/* Submit Buttons */} +
+ + + + + + + + +

선호도 조사를 건너뛰면 맞춤 추천이 어려울 수 있어요

+
+
+
+ + {onBackToLogin && ( + + )} +
+
+
+
+ ); +} \ No newline at end of file diff --git a/itdaing-web/src/components/consumer/MyPage.tsx b/itdaing-web/src/components/consumer/MyPage.tsx new file mode 100644 index 0000000..ebf6713 --- /dev/null +++ b/itdaing-web/src/components/consumer/MyPage.tsx @@ -0,0 +1,453 @@ +import React, { useState, useRef, useEffect } from "react"; +import { Heart, Eye, MapPin, ChevronLeft, ChevronRight, Star } from "lucide-react"; +import { getPopupById } from "../../data/popups"; + +// Profile (사용자 기본 + 관심사 선택) +import { useUser } from "../../context/UserContext"; + +function ProfileSection() { + const { profile, setProfile } = useUser(); + const [name, setName] = useState(""); + const [username, setUsername] = useState(""); + const [nickname, setNickname] = useState(""); + const [email, setEmail] = useState(""); + const [interests, setInterests] = useState(["패션", "건강", "공연/전시"]); + const [moods, setMoods] = useState(["포토존", "실내", "야외"]); + const [regions, setRegions] = useState(["남구"]); + const [conveniences, setConveniences] = useState([]); + + const interestOptions = ["패션", "뷰티", "음식", "건강", "공연/전시", "스포츠", "키즈", "아트", "굿즈", "반려동물"]; + const moodOptions = ["아기자기한", "감성적인", "활기찬", "레트로/빈티지", "차분한", "체험가능", "포토존", "실내", "야외", "연인과 함께", "가족과 함께", "친구와 함께", "반려동물과 함께", "혼자여도 좋은"]; + const regionOptions = ["남구", "서구", "동구", "북구", "광산구"]; + const convenienceOptions = ["무료주차", "무료입장", "예약가능", "굿즈판매"]; + + const toggleLimited = (value: string, state: string[], setState: React.Dispatch>, max: number, min: number = 1) => { + if (state.includes(value)) { + if (state.length > min) setState(state.filter(v => v !== value)); + } else { + if (state.length < max) setState([...state, value]); + } + }; + + useEffect(()=>{ + if(profile){ + setName(profile.name); + setUsername(profile.username); + setNickname(profile.nickname); + setEmail(profile.email); + setInterests(profile.interests); + setMoods(profile.moods); + setRegions(profile.regions); + setConveniences(profile.conveniences); + } + },[profile]); + + const handleSave = () => { + const updated = { + userType: profile?.userType || "consumer", + username: username || profile?.username || "consumer1", + name: name || profile?.name || "소비자", + nickname: nickname || profile?.nickname || username || "닉네임", + email: email || profile?.email || "user@example.com", + ageGroup: profile?.ageGroup || "20대", + interests, + moods, + regions, + conveniences, + }; + setProfile(updated); + console.log("프로필 저장", updated); + }; + + return ( +
+
+ 프로필 +
+
+ {[ + { label: "이름", value: name, setter: setName, type: "text" }, + { label: "아이디", value: username, setter: setUsername, type: "text" }, + { label: "닉네임", value: nickname, setter: setNickname, type: "text" }, + { label: "비밀번호", value: "", setter: () => {}, type: "password" }, + { label: "E-mail", value: email, setter: setEmail, type: "email" }, + ].map(f => ( +
+

{f.label}

+
+
+ f.type === "password" ? null : f.setter(e.target.value)} + className="w-full h-full px-4 rounded-[10px] focus:outline-none focus:border-[#eb0000]" + /> +
+
+
+
+ ))} +
+ + {/* Interests */} +
+

+ 평소에 어떤 분야에 관심이 있으신가요? (* 최소 1개 최대 4개 선택) +

+
+ {interestOptions.map(opt => ( + + ))} +
+
+ + {/* Moods */} +
+

+ 원하는 팝업 분위기를 선택해주세요 (* 최소 1개 최대 4개 선택) +

+
+ {moodOptions.map(opt => ( + + ))} +
+
+ + {/* Conveniences */} +
+

+ 원하는 편의사항을 선택해주세요 (* 최소 1개 최대 4개 선택) +

+
+ {convenienceOptions.map(opt => ( + + ))} +
+
+ + {/* Regions */} +
+

+ 어떤 지역의 팝업 스토어를 방문하고 싶나요? (* 최소 1개 최대 2개 선택) +

+
+ {regionOptions.map(opt => ( + + ))} +
+
+ + {/* Actions */} +
+
+ +
+
+ +
+
+
+ ); +} + +// 관심 팝업 +function FavoritesSection({ onPopupClick }: { onPopupClick?: (id: number) => void }) { + const [favorites, setFavorites] = useState(() => { + const first = getPopupById(1); + const second = getPopupById(2); + return [ + { + id: first?.id ?? 1, + title: first?.title ?? "플리마켓", + date: first?.date ?? "2025.11.15 - 11.23", + location: first?.location ?? first?.address ?? "광주광역시", + likes: first?.likes ?? 45, + views: first?.views ?? 210, + image: first?.images?.[0] || "https://placehold.co/400x600", + isFavorited: true, + }, + { + id: second?.id ?? 2, + title: second?.title ?? "동명커피산책", + date: second?.date ?? "2025.11.08", + location: second?.location ?? second?.address ?? "광주광역시", + likes: second?.likes ?? 36, + views: second?.views ?? 138, + image: second?.images?.[0] || "https://placehold.co/400x600", + isFavorited: true, + }, + ]; + }); + const toggleFavorite = (id: number) => { + setFavorites(prev => prev.map(f => f.id === id ? { ...f, isFavorited: !f.isFavorited } : f)); + }; + return ( +
+
+ {favorites.map(f => ( +
onPopupClick?.(f.id)} + className="flex gap-3 md:gap-4 cursor-pointer hover:transform hover:scale-105 transition-transform" + > +
+ {f.title} + +
+
+
+
+ + {f.likes} +
+
+ + {f.views} +
+
+
+

{f.title}

+

{f.date}

+
+ +

{f.location}

+
+
+
+
+ ))} +
+
+ ); +} + +// 캘린더 +function CalendarSection() { + const days = [ + { day: 26, isCurrentMonth: false }, { day: 27, isCurrentMonth: false }, { day: 28, isCurrentMonth: false }, { day: 29, isCurrentMonth: false }, { day: 30, isCurrentMonth: false }, { day: 31, isCurrentMonth: false }, + { day: 1, isCurrentMonth: true }, { day: 2, isCurrentMonth: true }, { day: 3, isCurrentMonth: true }, { day: 4, isCurrentMonth: true }, { day: 5, isCurrentMonth: true }, { day: 6, isCurrentMonth: true }, { day: 7, isCurrentMonth: true }, + { day: 8, isCurrentMonth: true, event: "2025 제5회 동명커피산책", eventColor: "bg-[#ffdfdf]" }, + { day: 9, isCurrentMonth: true }, { day: 10, isCurrentMonth: true }, { day: 11, isCurrentMonth: true }, { day: 12, isCurrentMonth: true }, { day: 13, isCurrentMonth: true }, { day: 14, isCurrentMonth: true }, + { day: 15, isCurrentMonth: true, event: "ACC 창제작 어린이공연 래퍼토리 <어둑시니>", eventColor: "bg-[#dbeff6]" }, + { day: 16, isCurrentMonth: true, highlight: true }, { day: 17, isCurrentMonth: true, highlight: true }, { day: 18, isCurrentMonth: true, highlight: true }, { day: 19, isCurrentMonth: true, highlight: true }, { day: 20, isCurrentMonth: true, highlight: true }, { day: 21, isCurrentMonth: true, highlight: true }, { day: 22, isCurrentMonth: true, highlight: true }, + { day: 23, isCurrentMonth: true, eventBar: true }, + { day: 24, isCurrentMonth: true }, { day: 25, isCurrentMonth: true }, { day: 26, isCurrentMonth: true }, { day: 27, isCurrentMonth: true }, { day: 28, isCurrentMonth: true }, { day: 29, isCurrentMonth: true }, { day: 30, isCurrentMonth: true }, + { day: 1, isCurrentMonth: false }, { day: 2, isCurrentMonth: false }, { day: 3, isCurrentMonth: false }, { day: 4, isCurrentMonth: false }, { day: 5, isCurrentMonth: false }, { day: 6, isCurrentMonth: false }, + ]; + const weekDays = ["일", "월", "화", "수", "목", "금", "토"]; + return ( +
+
+

< 2025년 11월>

+
+
+
+
+ {weekDays.map(d => ( +
+ {d} +
+ ))} +
+
+ {days.map((dayObj, idx) => ( +
+ {dayObj.day} + {dayObj.event && ( +
+ {dayObj.event} +
+ )} + {dayObj.eventBar && ( +
+ )} + {dayObj.highlight && idx >= 14 && idx <= 20 && ( +
+ )} +
+ ))} +
+
+
+
+ ); +} + +interface ReviewItem { id:number; title:string; date:string; rating:number; content:string; images:string[]; } +function ReviewCard({ review }: { review: ReviewItem }) { + const scrollRef = useRef(null); + const [index, setIndex] = useState(0); + const renderStars = (count: number) => ( +
+ {[1,2,3,4,5].map(i => ( + + ))} +
+ ); + const prev = () => { + if (scrollRef.current && index > 0) { + const next = index - 1; setIndex(next); scrollRef.current.scrollTo({ left: next * 213, behavior: "smooth" }); + } + }; + const next = () => { + if (scrollRef.current && index < review.images.length - 1) { + const nextIdx = index + 1; setIndex(nextIdx); scrollRef.current.scrollTo({ left: nextIdx * 213, behavior: "smooth" }); + } + }; + return ( +
+ +

{review.title}

+

{review.date}

+
{renderStars(review.rating)}
+

{review.content}

+ {review.images.length > 0 && ( +
+ {review.images.length > 1 && ( + + )} + {review.images.length > 1 && ( + + )} +
+ {review.images.map((img, i) => ( +
+ +
+ ))} +
+ {review.images.length > 1 && ( +
+ {review.images.map((_, i) => ( +
+ ))} +
+ )} +
+ )} +
+ ); +} + +function ReviewsSection() { + const reviews: ReviewItem[] = [ + { + id: 1, + title: "AI 프론티어 챌린지 해커톤", + date: "2025.10.28", + rating: 1, + content: `내일 오프라인 해커톤임 에바임!!!!!!!!! 변산반도는 무슨 일이고!!!!!!!! 끼야야야야야야락!!!!! 벌써 집가고싶어!!!!!!!!!!!\n프로젝트 바쁜데 ㅠㅠ 이걸 왜 가누.. 하.. 가면 뭐라도 경험하고 좋을 것 같기는한데... 으어엉... \n가서 또 화면짜고 있을라나 깔깔깔.. `, + images: ["https://images.unsplash.com/photo-1603578128133-6465b8a57ee0?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&q=80&w=800"], + }, + { + id: 2, + title: "이불 밖 체험관 <역시나 위험해>", + date: "2025.10.28", + rating: 5, + content: `푹신하고 부들부들한 이불을 덮고서 누워있고싶다. 얼마나 행복할까? 핸드폰 신나게 하다가 졸리면 자고 ... 생각만해도 햅쁴라이프! \n하지만 그건 꿈이죠? 프로젝트 끝나기 전까진 절대 없을듯.. 흑흑.. 이불 밖은.. 위험한데.. 안전한 곳으로 들어가면 안되는건가.. ㅠ`, + images: [ + "https://images.unsplash.com/photo-1511381939415-c1b8f6cbed51?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&q=80&w=800", + "https://images.unsplash.com/photo-1542310503-ff19e8227d33?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&q=80&w=800", + "https://images.unsplash.com/photo-1496307042754-b4aa456c4a2d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&q=80&w=800", + ], + }, + ]; + return ( +
+ {reviews.map(r => )} +
+ ); +} + +interface MyPageProps { onClose:()=>void; onNearbyExploreClick?:()=>void; onPopupClick?:(id:number)=>void; } +export function MyPage({ onClose, onNearbyExploreClick, onPopupClick }: MyPageProps) { + const [activeTab, setActiveTab] = useState<"프로필" | "관심팝업" | "캘린더" | "내 후기">("프로필"); + const scrollToTop = () => { window.scrollTo({ top: 0, behavior: "smooth" }); }; + return ( +
+ {/* Tabs */} +
+
+ {["프로필","관심팝업","캘린더","내 후기"].map(tab => ( + + ))} +
+
+ {activeTab === "프로필" && } + {activeTab === "관심팝업" &&
} + {activeTab === "캘린더" &&
} + {activeTab === "내 후기" &&
} + +
+ ); +} + +export default MyPage; diff --git a/itdaing-web/src/components/consumer/MyPageCalendar.tsx b/itdaing-web/src/components/consumer/MyPageCalendar.tsx new file mode 100644 index 0000000..2cf0835 --- /dev/null +++ b/itdaing-web/src/components/consumer/MyPageCalendar.tsx @@ -0,0 +1,14 @@ +import React from "react"; + +export function MyPageCalendar(){ + const days = Array.from({length:30},(_,i)=> i+1); + return ( +
+

간단 캘린더 (샘플)

+
+ {days.map(d =>
{d}
)} +
+
+ ); +} +export default MyPageCalendar; diff --git a/itdaing-web/src/components/consumer/MyPageFavorites.tsx b/itdaing-web/src/components/consumer/MyPageFavorites.tsx new file mode 100644 index 0000000..c50c694 --- /dev/null +++ b/itdaing-web/src/components/consumer/MyPageFavorites.tsx @@ -0,0 +1,43 @@ +import React from "react"; +import { Heart, Eye, MapPin } from "lucide-react"; +import { getPopupById } from "../../data/popups"; + +interface FavoritesProps { onPopupClick?:(id:number)=>void } + +export function MyPageFavorites({ onPopupClick }: FavoritesProps){ + const favorites = [getPopupById(1), getPopupById(2)].filter(Boolean).map(p => ({ + id: p!.id, + title: p!.title, + date: p!.date, + location: p!.location ?? p!.address, + likes: p!.likes, + views: p!.views, + image: p!.images[0], + })); + return ( +
+
+ {favorites.map(f => ( +
onPopupClick?.(f.id)} className="flex gap-3 md:gap-4 cursor-pointer hover:transform hover:scale-105 transition-transform"> +
+ {f.title} +
+
+
+
{f.likes}
+
{f.views}
+
+
+

{f.title}

+

{f.date}

+

{f.location}

+
+
+
+ ))} +
+
+ ); +} + +export default MyPageFavorites; diff --git a/itdaing-web/src/components/consumer/MyPageProfile.tsx b/itdaing-web/src/components/consumer/MyPageProfile.tsx new file mode 100644 index 0000000..750dd5f --- /dev/null +++ b/itdaing-web/src/components/consumer/MyPageProfile.tsx @@ -0,0 +1,7 @@ +import React from "react"; +export function MyPageProfile(){ + return ( +

프로필 상세 컴포넌트는 MyPage 탭 내에 통합되었습니다.

+ ); +} +export default MyPageProfile; diff --git a/itdaing-web/src/components/consumer/MyPageReviews.tsx b/itdaing-web/src/components/consumer/MyPageReviews.tsx new file mode 100644 index 0000000..2df2469 --- /dev/null +++ b/itdaing-web/src/components/consumer/MyPageReviews.tsx @@ -0,0 +1,20 @@ +import React from "react"; +import { Star } from "lucide-react"; +export function MyPageReviews(){ + const reviews = [ + { id:1, title:"샘플 후기", date:"2025.10.28", rating:4, content:"후기 내용", images:[] } + ]; + return ( +
+ {reviews.map(r => ( +
+

{r.title}

+

{r.date}

+
{[1,2,3,4,5].map(i => )}
+

{r.content}

+
+ ))} +
+ ); +} +export default MyPageReviews; diff --git a/itdaing-web/src/components/consumer/NearbyExplorePage.tsx b/itdaing-web/src/components/consumer/NearbyExplorePage.tsx new file mode 100644 index 0000000..c5650b8 --- /dev/null +++ b/itdaing-web/src/components/consumer/NearbyExplorePage.tsx @@ -0,0 +1,17 @@ +import React from "react"; +interface NearbyExplorePageProps { onMainClick?:()=>void; onMyPageClick?:()=>void; isLoggedIn?:boolean; onLoginClick?:()=>void; onLogoutClick?:()=>void; onPopupClick?:(id:number)=>void } +export function NearbyExplorePage({ onMainClick, onMyPageClick, isLoggedIn, onLoginClick, onLogoutClick }: NearbyExplorePageProps){ + return ( +
+

근처 탐색 (샘플)

+

지도 / 위치 기반 탐색 기능은 여기서 구현될 예정입니다.

+
+ + + {!isLoggedIn && } + {isLoggedIn && } +
+
+ ); +} +export default NearbyExplorePage; diff --git a/itdaing-web/src/components/consumer/RecommendationModal.tsx b/itdaing-web/src/components/consumer/RecommendationModal.tsx new file mode 100644 index 0000000..ecdaea3 --- /dev/null +++ b/itdaing-web/src/components/consumer/RecommendationModal.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import { getPopupById } from "../../data/popups"; +interface RecommendationModalProps { onClose:()=>void; onDismissToday:()=>void; onPopupClick:(id:number)=>void } +export function RecommendationModal({ onClose, onDismissToday, onPopupClick }: RecommendationModalProps){ + const popup = getPopupById(1); + if(!popup) return null; + return ( +
+
+

오늘의 추천 팝업

+
+

{popup.title}

+

{popup.date}

+
+
+ + +
+ +
+
+ ); +} +export default RecommendationModal; diff --git a/itdaing-web/src/components/consumer/ReviewWritePage.tsx b/itdaing-web/src/components/consumer/ReviewWritePage.tsx new file mode 100644 index 0000000..e751813 --- /dev/null +++ b/itdaing-web/src/components/consumer/ReviewWritePage.tsx @@ -0,0 +1,22 @@ +import React, { useState } from "react"; +interface ReviewWritePageProps { onBack:()=>void; onMyPageClick?:()=>void; onNearbyExploreClick?:()=>void; onClose:()=>void; } +export function ReviewWritePage({ onBack, onMyPageClick, onNearbyExploreClick, onClose }: ReviewWritePageProps){ + const [content,setContent]=useState(""); + const [rating,setRating]=useState(3); + return ( +
+
+

후기 작성

+
{[1,2,3,4,5].map(i => )}
+