From ee65853d6d05e0123549847ad0f876c61f4d7554 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Wed, 17 Jun 2026 01:11:48 +0900
Subject: [PATCH 001/789] docs: add README with project intro and AI
collaboration links
---
README.md | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 78 insertions(+)
create mode 100644 README.md
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..cfe23571
--- /dev/null
+++ b/README.md
@@ -0,0 +1,78 @@
+
+
Timo
+
+
+ (서비스 한 줄 소개를 여기에 작성하세요)
+
+
+
+
+
+
+
+
+
+ 컨벤션 ·
+ 아키텍처 ·
+ AI 협업
+
+
+
+
+
+
+---
+
+## Timo란?
+
+(서비스 배경, 핵심 기능, 타겟 사용자를 2~3문장으로 작성하세요)
+
+## 왜 만들었나요?
+
+- **이유 1**: 설명
+- **이유 2**: 설명
+- **이유 3**: 설명
+
+## 주요 기능
+
+- **기능 1**: 설명
+- **기능 2**: 설명
+- **기능 3**: 설명
+
+---
+
+## 팀원
+
+| 이름 | 역할 | GitHub |
+|------|------|--------|
+| - | - | [@-]() |
+| - | - | [@-]() |
+| - | - | [@-]() |
+
+---
+
+## 문서
+
+| 내용 | 경로 |
+|------|------|
+| Git·코드·폴더 구조 컨벤션 | [docs/conventions.md](./docs/conventions.md) |
+| 기술 스택·컴포넌트 계층·상태 전략 | [docs/architecture.md](./docs/architecture.md) |
+| 디자인 토큰·피그마 연동 | [docs/design.md](./docs/design.md) |
+
+## AI 협업
+
+Claude Code·Codex 공통 진입점은 [AGENTS.md](./AGENTS.md)입니다.
+
+| 내용 | 경로 |
+|------|------|
+| 작업별 스킬 라우팅 | [AGENTS.md](./AGENTS.md) |
+| 스킬 목록 | [docs/agent/skill-index.md](./docs/agent/skill-index.md) |
+| 스킬 추가 방법 | [docs/agent/how-to-add-skill.md](./docs/agent/how-to-add-skill.md) |
+
+---
+
+## 라이선스
+
+MIT © Timo Team
From ec33b765b1cbe5e2d5897caf34e6d0945d588fcc Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 18 Jun 2026 01:06:27 +0900
Subject: [PATCH 002/789] =?UTF-8?q?docs:=20pr=20=ED=85=9C=ED=94=8C?=
=?UTF-8?q?=EB=A6=BF=20=EC=97=85=EB=A1=9C=EB=93=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/PULL_REQUEST_TEPLATE.md | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
create mode 100644 .github/PULL_REQUEST_TEPLATE.md
diff --git a/.github/PULL_REQUEST_TEPLATE.md b/.github/PULL_REQUEST_TEPLATE.md
new file mode 100644
index 00000000..9bbbacfd
--- /dev/null
+++ b/.github/PULL_REQUEST_TEPLATE.md
@@ -0,0 +1,29 @@
+## ISSUE 🔗
+
+
+
+
+
+## What is this PR? 🔍
+
+
+
+
+
+## To Reviewers
+
+
+
+## Screenshot 📷
+
+
+
+
+
+## Test Checklist ✔
+
+
+
+- [ ] TODO
+- [ ] TODO
+- [ ] TODO
From 2f65537b7b7bf60ba9af9d27cf492dcb468a1c9a Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 18 Jun 2026 01:10:23 +0900
Subject: [PATCH 003/789] =?UTF-8?q?docs:=20=EC=9D=B4=EC=8A=88=20=ED=85=9C?=
=?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EC=97=85=EB=A1=9C=EB=93=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/ISSUE_TEMPLATE/.gitkeep | 0
.github/ISSUE_TEMPLATE/bug_report.md | 29 +++++++++++++++++++++++
.github/ISSUE_TEMPLATE/feature_request.md | 22 +++++++++++++++++
3 files changed, 51 insertions(+)
delete mode 100644 .github/ISSUE_TEMPLATE/.gitkeep
create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md
create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md
diff --git a/.github/ISSUE_TEMPLATE/.gitkeep b/.github/ISSUE_TEMPLATE/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000..ed57735b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,29 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: "[FIX]"
+labels: ""
+assignees: ""
+---
+
+## 어떤 버그인가요?
+
+> 어떤 버그인지 간결하게 설명해주세요.
+
+
+
+## 어떤 상황에서 발생한 버그인가요?
+
+> (가능하면) Given-When-Then 형식으로 서술해주세요.
+
+
+
+## 예상 결과
+
+> 예상했던 정상적인 결과가 어떤 것이었는지 설명해주세요.
+
+
+
+## 참고자료
+
+> 관련 문서, 스크린샷, 또는 예시 등이 있다면 여기에 첨부해주세요.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 00000000..112934dd
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,22 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: "[FEAT]"
+labels: ""
+assignees: ""
+---
+
+### 🛠️ 만들고자 한 기능 설명
+
+### ✅ TODO LIST
+
+- [ ] 할 일
+- [ ] 할 일
+
+### ⏰ 예상 작업 기간
+
+### 📝 참고 링크(선택)
+
+### 🗣️ ETC(선택)
+
+### 📸 피그마 스크린샷
From fd1e9c346dfd68ea520e0a0f91d906d4c6c3e38f Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 19 Jun 2026 01:23:04 +0900
Subject: [PATCH 004/789] =?UTF-8?q?chore(root):=20=EB=AA=A8=EB=85=B8?=
=?UTF-8?q?=EB=A0=88=ED=8F=AC=20=EB=A3=A8=ED=8A=B8=20=ED=99=98=EA=B2=BD=20?=
=?UTF-8?q?=EC=84=A4=EC=A0=95=20(#1)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- pnpm + Turborepo 기반 워크스페이스 루트 설정 파일을 추가했습니다
---
.gitignore | 38 +
.npmrc | 0
package.json | 24 +
pnpm-lock.yaml | 2971 +++++++++++++++++++++++++++++++++++++++++++
pnpm-workspace.yaml | 3 +
turbo.json | 21 +
6 files changed, 3057 insertions(+)
create mode 100644 .gitignore
create mode 100644 .npmrc
create mode 100644 package.json
create mode 100644 pnpm-lock.yaml
create mode 100644 pnpm-workspace.yaml
create mode 100644 turbo.json
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..96fab4fe
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,38 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# Dependencies
+node_modules
+.pnp
+.pnp.js
+
+# Local env files
+.env
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+# Testing
+coverage
+
+# Turbo
+.turbo
+
+# Vercel
+.vercel
+
+# Build Outputs
+.next/
+out/
+build
+dist
+
+
+# Debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Misc
+.DS_Store
+*.pem
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 00000000..e69de29b
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..5eddf068
--- /dev/null
+++ b/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "timo",
+ "private": true,
+ "scripts": {
+ "build": "turbo run build",
+ "build:web": "turbo run build --filter=timo-web",
+ "dev": "turbo run dev",
+ "dev:web": "turbo run dev --filter=timo-web",
+ "lint": "turbo run lint",
+ "lint:web": "turbo run lint --filter=timo-web",
+ "format": "prettier --write \"**/*.{ts,tsx,md}\"",
+ "check-types": "turbo run check-types",
+ "check-types:web": "turbo run check-types --filter=timo-web"
+ },
+ "devDependencies": {
+ "prettier": "^3.7.4",
+ "turbo": "^2.9.18",
+ "typescript": "5.9.2"
+ },
+ "packageManager": "pnpm@9.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 00000000..c6c8e86a
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,2971 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ prettier:
+ specifier: ^3.7.4
+ version: 3.7.4
+ turbo:
+ specifier: ^2.9.18
+ version: 2.9.18
+ typescript:
+ specifier: 5.9.2
+ version: 5.9.2
+
+ apps/timo-web:
+ dependencies:
+ '@repo/ui':
+ specifier: workspace:*
+ version: link:../../packages/ui
+ next:
+ specifier: 16.2.0
+ version: 16.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react:
+ specifier: ^19.2.0
+ version: 19.2.0
+ react-dom:
+ specifier: ^19.2.0
+ version: 19.2.0(react@19.2.0)
+ devDependencies:
+ '@repo/eslint-config':
+ specifier: workspace:*
+ version: link:../../packages/eslint-config
+ '@repo/typescript-config':
+ specifier: workspace:*
+ version: link:../../packages/typescript-config
+ '@types/node':
+ specifier: ^22.15.3
+ version: 22.15.3
+ '@types/react':
+ specifier: 19.2.2
+ version: 19.2.2
+ '@types/react-dom':
+ specifier: 19.2.2
+ version: 19.2.2(@types/react@19.2.2)
+ eslint:
+ specifier: ^9.39.1
+ version: 9.39.1
+ typescript:
+ specifier: 5.9.2
+ version: 5.9.2
+
+ packages/eslint-config:
+ devDependencies:
+ '@eslint/js':
+ specifier: ^9.39.1
+ version: 9.39.1
+ '@next/eslint-plugin-next':
+ specifier: ^16.2.0
+ version: 16.2.0
+ eslint:
+ specifier: ^9.39.1
+ version: 9.39.1
+ eslint-config-prettier:
+ specifier: ^10.1.1
+ version: 10.1.1(eslint@9.39.1)
+ eslint-plugin-only-warn:
+ specifier: ^1.1.0
+ version: 1.1.0
+ eslint-plugin-react:
+ specifier: ^7.37.5
+ version: 7.37.5(eslint@9.39.1)
+ eslint-plugin-react-hooks:
+ specifier: ^5.2.0
+ version: 5.2.0(eslint@9.39.1)
+ eslint-plugin-turbo:
+ specifier: ^2.7.1
+ version: 2.7.1(eslint@9.39.1)(turbo@2.9.18)
+ globals:
+ specifier: ^16.5.0
+ version: 16.5.0
+ typescript:
+ specifier: ^5.9.2
+ version: 5.9.2
+ typescript-eslint:
+ specifier: ^8.50.0
+ version: 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+
+ packages/typescript-config: {}
+
+ packages/ui:
+ dependencies:
+ react:
+ specifier: ^19.2.0
+ version: 19.2.0
+ react-dom:
+ specifier: ^19.2.0
+ version: 19.2.0(react@19.2.0)
+ devDependencies:
+ '@repo/eslint-config':
+ specifier: workspace:*
+ version: link:../eslint-config
+ '@repo/typescript-config':
+ specifier: workspace:*
+ version: link:../typescript-config
+ '@types/node':
+ specifier: ^22.15.3
+ version: 22.15.3
+ '@types/react':
+ specifier: 19.2.2
+ version: 19.2.2
+ '@types/react-dom':
+ specifier: 19.2.2
+ version: 19.2.2(@types/react@19.2.2)
+ eslint:
+ specifier: ^9.39.1
+ version: 9.39.1
+ typescript:
+ specifier: 5.9.2
+ version: 5.9.2
+
+packages:
+
+ '@emnapi/runtime@1.7.1':
+ resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
+
+ '@eslint-community/eslint-utils@4.9.0':
+ resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/config-array@0.21.1':
+ resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.3.1':
+ resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.39.1':
+ resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.7':
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.7':
+ resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
+
+ '@img/colour@1.0.0':
+ resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==}
+ engines: {node: '>=18'}
+
+ '@img/sharp-darwin-arm64@0.34.5':
+ resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-darwin-x64@0.34.5':
+ resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-arm64@1.2.4':
+ resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-x64@1.2.4':
+ resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-linux-arm64@1.2.4':
+ resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-arm@1.2.4':
+ resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-ppc64@1.2.4':
+ resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-riscv64@1.2.4':
+ resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-s390x@1.2.4':
+ resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-x64@1.2.4':
+ resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
+ resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-x64@1.2.4':
+ resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-linux-arm64@0.34.5':
+ resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-linux-arm@0.34.5':
+ resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-linux-ppc64@0.34.5':
+ resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@img/sharp-linux-riscv64@0.34.5':
+ resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@img/sharp-linux-s390x@0.34.5':
+ resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-linux-x64@0.34.5':
+ resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-linuxmusl-arm64@0.34.5':
+ resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-linuxmusl-x64@0.34.5':
+ resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-wasm32@0.34.5':
+ resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
+
+ '@img/sharp-win32-arm64@0.34.5':
+ resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@img/sharp-win32-ia32@0.34.5':
+ resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@img/sharp-win32-x64@0.34.5':
+ resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@next/env@16.2.0':
+ resolution: {integrity: sha512-OZIbODWWAi0epQRCRjNe1VO45LOFBzgiyqmTLzIqWq6u1wrxKnAyz1HH6tgY/Mc81YzIjRPoYsPAEr4QV4l9TA==}
+
+ '@next/eslint-plugin-next@16.2.0':
+ resolution: {integrity: sha512-3D3pEMcGKfENC9Pzlkr67GOm+205+5hRdYPZvHuNIy5sr9k0ybSU8g+sxOO/R/RLEh/gWZ3UlY+5LmEyZ1xgXQ==}
+
+ '@next/swc-darwin-arm64@16.2.0':
+ resolution: {integrity: sha512-/JZsqKzKt01IFoiLLAzlNqys7qk2F3JkcUhj50zuRhKDQkZNOz9E5N6wAQWprXdsvjRP4lTFj+/+36NSv5AwhQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@next/swc-darwin-x64@16.2.0':
+ resolution: {integrity: sha512-/hV8erWq4SNlVgglUiW5UmQ5Hwy5EW/AbbXlJCn6zkfKxTy/E/U3V8U1Ocm2YCTUoFgQdoMxRyRMOW5jYy4ygg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@next/swc-linux-arm64-gnu@16.2.0':
+ resolution: {integrity: sha512-GkjL/Q7MWOwqWR9zoxu1TIHzkOI2l2BHCf7FzeQG87zPgs+6WDh+oC9Sw9ARuuL/FUk6JNCgKRkA6rEQYadUaw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@next/swc-linux-arm64-musl@16.2.0':
+ resolution: {integrity: sha512-1ffhC6KY5qWLg5miMlKJp3dZbXelEfjuXt1qcp5WzSCQy36CV3y+JT7OC1WSFKizGQCDOcQbfkH/IjZP3cdRNA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@next/swc-linux-x64-gnu@16.2.0':
+ resolution: {integrity: sha512-FmbDcZQ8yJRq93EJSL6xaE0KK/Rslraf8fj1uViGxg7K4CKBCRYSubILJPEhjSgZurpcPQq12QNOJQ0DRJl6Hg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@next/swc-linux-x64-musl@16.2.0':
+ resolution: {integrity: sha512-HzjIHVkmGAwRbh/vzvoBWWEbb8BBZPxBvVbDQDvzHSf3D8RP/4vjw7MNLDXFF9Q1WEzeQyEj2zdxBtVAHu5Oyw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@next/swc-win32-arm64-msvc@16.2.0':
+ resolution: {integrity: sha512-UMiFNQf5H7+1ZsZPxEsA064WEuFbRNq/kEXyepbCnSErp4f5iut75dBA8UeerFIG3vDaQNOfCpevnERPp2V+nA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@next/swc-win32-x64-msvc@16.2.0':
+ resolution: {integrity: sha512-DRrNJKW+/eimrZgdhVN1uvkN1OI4j6Lpefwr44jKQ0YQzztlmOBUUzHuV5GxOMPK3nmodAYElUVCY8ZXo/IWeA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@swc/helpers@0.5.15':
+ resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
+
+ '@turbo/darwin-64@2.9.18':
+ resolution: {integrity: sha512-9f27peFu16ur8c0v9nUFUEyBnbKuuFsUTjHFWfmwGfzySBXbHwzU44QhZon6Mznz0cHsIr3984NQj/bVrnGSRw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@turbo/darwin-arm64@2.9.18':
+ resolution: {integrity: sha512-9A6TMRq/Ib+QnbhLlgkhOm+624wO4pzSQ/yQviQfWHOlFvaYxdnIAYmu2H6TS6y7kSVL0DvzNe04NbESTOzFVQ==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@turbo/linux-64@2.9.18':
+ resolution: {integrity: sha512-zCdIDtz69AnbYh913elJRRoF3QY5aa2HNnf+4rAkc7bQ+tWujiDkCNV7stazOUPggaDvhKIf2Z87qHftTeXSkw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@turbo/linux-arm64@2.9.18':
+ resolution: {integrity: sha512-Va1kXI04naMgYwqv/5Dfa36dTDx8015U7oaQAjrXa45ua9OoFjSV4OmvkML4EmXvUclQHCiBRbY8bvd0jV7eAg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@turbo/windows-64@2.9.18':
+ resolution: {integrity: sha512-m0kDhZANxSNz9ck1ybogFscHabriAsp4eDFNrN/1H5WrgTF7b3VlcPZnhuO3v2+E2KnCbeAc+UUT10BZZHdDKw==}
+ cpu: [x64]
+ os: [win32]
+
+ '@turbo/windows-arm64@2.9.18':
+ resolution: {integrity: sha512-nUdR8WqoomUys9iIQmG45TMiizJ+5BV8egSeLLZba/AWblyp3fVBcIH1kSE58OtK4g2YzbMJEth6Ttv9w5rqMA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/node@22.15.3':
+ resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==}
+
+ '@types/react-dom@19.2.2':
+ resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
+ '@types/react@19.2.2':
+ resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==}
+
+ '@typescript-eslint/eslint-plugin@8.50.0':
+ resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.50.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/parser@8.50.0':
+ resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/project-service@8.50.0':
+ resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/scope-manager@8.50.0':
+ resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/tsconfig-utils@8.50.0':
+ resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/type-utils@8.50.0':
+ resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/types@8.50.0':
+ resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/typescript-estree@8.50.0':
+ resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/utils@8.50.0':
+ resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/visitor-keys@8.50.0':
+ resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ array-buffer-byte-length@1.0.2:
+ resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
+ engines: {node: '>= 0.4'}
+
+ array-includes@3.1.9:
+ resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.findlast@1.2.5:
+ resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flat@1.3.3:
+ resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flatmap@1.3.3:
+ resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.tosorted@1.1.4:
+ resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
+ engines: {node: '>= 0.4'}
+
+ arraybuffer.prototype.slice@1.0.4:
+ resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
+ engines: {node: '>= 0.4'}
+
+ async-function@1.0.0:
+ resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
+ engines: {node: '>= 0.4'}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ baseline-browser-mapping@2.10.8:
+ resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ caniuse-lite@1.0.30001761:
+ resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ client-only@0.0.1:
+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ data-view-buffer@1.0.2:
+ resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-length@1.0.2:
+ resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-offset@1.0.1:
+ resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
+ engines: {node: '>= 0.4'}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ doctrine@2.1.0:
+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+ engines: {node: '>=0.10.0'}
+
+ dotenv@16.0.3:
+ resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
+ engines: {node: '>=12'}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ es-abstract@1.24.0:
+ resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
+ engines: {node: '>= 0.4'}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-iterator-helpers@1.2.1:
+ resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ es-shim-unscopables@1.1.0:
+ resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
+ engines: {node: '>= 0.4'}
+
+ es-to-primitive@1.3.0:
+ resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
+ engines: {node: '>= 0.4'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eslint-config-prettier@10.1.1:
+ resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+
+ eslint-plugin-only-warn@1.1.0:
+ resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==}
+ engines: {node: '>=6'}
+
+ eslint-plugin-react-hooks@5.2.0:
+ resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
+ 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
+
+ eslint-plugin-react@7.37.5:
+ resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
+
+ eslint-plugin-turbo@2.7.1:
+ resolution: {integrity: sha512-ZC7dTOdw6tGuvx1CeC1WQ0pMkgT/Jmj69QW93d63nysiLbbKRLiDKKA9s/TvwJHq8Uvbou2+hnU8if1L0jHsVQ==}
+ peerDependencies:
+ eslint: '>6.6.0'
+ turbo: '>2.0.0'
+
+ eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint@9.39.1:
+ resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-glob@3.3.1:
+ resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ function.prototype.name@1.1.8:
+ resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
+ engines: {node: '>= 0.4'}
+
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ get-symbol-description@1.1.0:
+ resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
+ globals@16.5.0:
+ resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
+ engines: {node: '>=18'}
+
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ has-bigints@1.1.0:
+ resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
+ engines: {node: '>= 0.4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.2.0:
+ resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ ignore@7.0.5:
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+ engines: {node: '>= 4'}
+
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ internal-slot@1.1.0:
+ resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
+ engines: {node: '>= 0.4'}
+
+ is-array-buffer@3.0.5:
+ resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
+ engines: {node: '>= 0.4'}
+
+ is-async-function@2.1.1:
+ resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
+ engines: {node: '>= 0.4'}
+
+ is-bigint@1.1.0:
+ resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
+ engines: {node: '>= 0.4'}
+
+ is-boolean-object@1.2.2:
+ resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
+ engines: {node: '>= 0.4'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-data-view@1.0.2:
+ resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
+ engines: {node: '>= 0.4'}
+
+ is-date-object@1.1.0:
+ resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-finalizationregistry@1.1.1:
+ resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
+ engines: {node: '>= 0.4'}
+
+ is-generator-function@1.1.0:
+ resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
+
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
+
+ is-number-object@1.1.1:
+ resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
+
+ is-shared-array-buffer@1.0.4:
+ resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
+ engines: {node: '>= 0.4'}
+
+ is-string@1.1.1:
+ resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
+ engines: {node: '>= 0.4'}
+
+ is-symbol@1.1.1:
+ resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
+ engines: {node: '>= 0.4'}
+
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
+
+ is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
+
+ is-weakref@1.1.1:
+ resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
+ engines: {node: '>= 0.4'}
+
+ is-weakset@2.0.4:
+ resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
+ engines: {node: '>= 0.4'}
+
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ iterator.prototype@1.1.5:
+ resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
+ engines: {node: '>= 0.4'}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ jsx-ast-utils@3.3.5:
+ resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
+ engines: {node: '>=4.0'}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ next@16.2.0:
+ resolution: {integrity: sha512-NLBVrJy1pbV1Yn00L5sU4vFyAHt5XuSjzrNyFnxo6Com0M0KrL6hHM5B99dbqXb2bE9pm4Ow3Zl1xp6HVY9edQ==}
+ engines: {node: '>=20.9.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ '@playwright/test': ^1.51.1
+ babel-plugin-react-compiler: '*'
+ react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@playwright/test':
+ optional: true
+ babel-plugin-react-compiler:
+ optional: true
+ sass:
+ optional: true
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.7:
+ resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
+ engines: {node: '>= 0.4'}
+
+ object.entries@1.1.9:
+ resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
+ engines: {node: '>= 0.4'}
+
+ object.fromentries@2.0.8:
+ resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
+ engines: {node: '>= 0.4'}
+
+ object.values@1.2.1:
+ resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
+ engines: {node: '>= 0.4'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ own-keys@1.0.1:
+ resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
+ engines: {node: '>= 0.4'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
+ engines: {node: '>= 0.4'}
+
+ postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ prettier@3.7.4:
+ resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
+ engines: {node: '>=14'}
+
+ prop-types@15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ react-dom@19.2.0:
+ resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
+ peerDependencies:
+ react: ^19.2.0
+
+ react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
+ react@19.2.0:
+ resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
+ engines: {node: '>=0.10.0'}
+
+ reflect.getprototypeof@1.0.10:
+ resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
+ engines: {node: '>= 0.4'}
+
+ regexp.prototype.flags@1.5.4:
+ resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
+ engines: {node: '>= 0.4'}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve@2.0.0-next.5:
+ resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ safe-array-concat@1.1.3:
+ resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
+ engines: {node: '>=0.4'}
+
+ safe-push-apply@1.0.0:
+ resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
+ engines: {node: '>= 0.4'}
+
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+
+ set-proto@1.0.0:
+ resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
+ engines: {node: '>= 0.4'}
+
+ sharp@0.34.5:
+ resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ stop-iteration-iterator@1.1.0:
+ resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.matchall@4.0.12:
+ resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.repeat@1.0.0:
+ resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
+
+ string.prototype.trim@1.2.10:
+ resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimend@1.0.9:
+ resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ styled-jsx@5.1.6:
+ resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
+ engines: {node: '>= 12.0.0'}
+ peerDependencies:
+ '@babel/core': '*'
+ babel-plugin-macros: '*'
+ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ babel-plugin-macros:
+ optional: true
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ ts-api-utils@2.1.0:
+ resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
+ engines: {node: '>=18.12'}
+ peerDependencies:
+ typescript: '>=4.8.4'
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ turbo@2.9.18:
+ resolution: {integrity: sha512-bwabv6PupzeavybzEoArBAkwq5fnzwf8OFnRtpHwnviFWuwJPFxtyH+aVp36TmIqK3aYYgtTJ3J0m2ysxxSzQg==}
+ hasBin: true
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ typed-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-length@1.0.3:
+ resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-offset@1.0.4:
+ resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-length@1.0.7:
+ resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
+ engines: {node: '>= 0.4'}
+
+ typescript-eslint@8.50.0:
+ resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ typescript@5.9.2:
+ resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ unbox-primitive@1.1.0:
+ resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
+ engines: {node: '>= 0.4'}
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ which-boxed-primitive@1.1.1:
+ resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
+ engines: {node: '>= 0.4'}
+
+ which-builtin-type@1.2.1:
+ resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
+ engines: {node: '>= 0.4'}
+
+ which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
+
+ which-typed-array@1.1.19:
+ resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@emnapi/runtime@1.7.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)':
+ dependencies:
+ eslint: 9.39.1
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.2': {}
+
+ '@eslint/config-array@0.21.1':
+ dependencies:
+ '@eslint/object-schema': 2.1.7
+ debug: 4.4.3
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.4.2':
+ dependencies:
+ '@eslint/core': 0.17.0
+
+ '@eslint/core@0.17.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.3.1':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.3
+ espree: 10.4.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@9.39.1': {}
+
+ '@eslint/object-schema@2.1.7': {}
+
+ '@eslint/plugin-kit@0.4.1':
+ dependencies:
+ '@eslint/core': 0.17.0
+ levn: 0.4.1
+
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.7':
+ dependencies:
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.4.3
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.4.3': {}
+
+ '@img/colour@1.0.0':
+ optional: true
+
+ '@img/sharp-darwin-arm64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.2.4
+ optional: true
+
+ '@img/sharp-darwin-x64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.2.4
+ optional: true
+
+ '@img/sharp-libvips-darwin-arm64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-darwin-x64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-ppc64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-riscv64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-s390x@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-x64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-x64@1.2.4':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-arm@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-ppc64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-ppc64': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-riscv64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-riscv64': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-s390x@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-x64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.2.4
+ optional: true
+
+ '@img/sharp-linuxmusl-arm64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
+ optional: true
+
+ '@img/sharp-linuxmusl-x64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.4
+ optional: true
+
+ '@img/sharp-wasm32@0.34.5':
+ dependencies:
+ '@emnapi/runtime': 1.7.1
+ optional: true
+
+ '@img/sharp-win32-arm64@0.34.5':
+ optional: true
+
+ '@img/sharp-win32-ia32@0.34.5':
+ optional: true
+
+ '@img/sharp-win32-x64@0.34.5':
+ optional: true
+
+ '@next/env@16.2.0': {}
+
+ '@next/eslint-plugin-next@16.2.0':
+ dependencies:
+ fast-glob: 3.3.1
+
+ '@next/swc-darwin-arm64@16.2.0':
+ optional: true
+
+ '@next/swc-darwin-x64@16.2.0':
+ optional: true
+
+ '@next/swc-linux-arm64-gnu@16.2.0':
+ optional: true
+
+ '@next/swc-linux-arm64-musl@16.2.0':
+ optional: true
+
+ '@next/swc-linux-x64-gnu@16.2.0':
+ optional: true
+
+ '@next/swc-linux-x64-musl@16.2.0':
+ optional: true
+
+ '@next/swc-win32-arm64-msvc@16.2.0':
+ optional: true
+
+ '@next/swc-win32-x64-msvc@16.2.0':
+ optional: true
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@swc/helpers@0.5.15':
+ dependencies:
+ tslib: 2.8.1
+
+ '@turbo/darwin-64@2.9.18':
+ optional: true
+
+ '@turbo/darwin-arm64@2.9.18':
+ optional: true
+
+ '@turbo/linux-64@2.9.18':
+ optional: true
+
+ '@turbo/linux-arm64@2.9.18':
+ optional: true
+
+ '@turbo/windows-64@2.9.18':
+ optional: true
+
+ '@turbo/windows-arm64@2.9.18':
+ optional: true
+
+ '@types/estree@1.0.8': {}
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/node@22.15.3':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/react-dom@19.2.2(@types/react@19.2.2)':
+ dependencies:
+ '@types/react': 19.2.2
+
+ '@types/react@19.2.2':
+ dependencies:
+ csstype: 3.1.3
+
+ '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2))(eslint@9.39.1)(typescript@5.9.2)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ '@typescript-eslint/visitor-keys': 8.50.0
+ eslint: 9.39.1
+ ignore: 7.0.5
+ natural-compare: 1.4.0
+ ts-api-utils: 2.1.0(typescript@5.9.2)
+ typescript: 5.9.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
+ '@typescript-eslint/visitor-keys': 8.50.0
+ debug: 4.4.3
+ eslint: 9.39.1
+ typescript: 5.9.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/project-service@8.50.0(typescript@5.9.2)':
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.2)
+ '@typescript-eslint/types': 8.50.0
+ debug: 4.4.3
+ typescript: 5.9.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@8.50.0':
+ dependencies:
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/visitor-keys': 8.50.0
+
+ '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.9.2)':
+ dependencies:
+ typescript: 5.9.2
+
+ '@typescript-eslint/type-utils@8.50.0(eslint@9.39.1)(typescript@5.9.2)':
+ dependencies:
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ debug: 4.4.3
+ eslint: 9.39.1
+ ts-api-utils: 2.1.0(typescript@5.9.2)
+ typescript: 5.9.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@8.50.0': {}
+
+ '@typescript-eslint/typescript-estree@8.50.0(typescript@5.9.2)':
+ dependencies:
+ '@typescript-eslint/project-service': 8.50.0(typescript@5.9.2)
+ '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.2)
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/visitor-keys': 8.50.0
+ debug: 4.4.3
+ minimatch: 9.0.5
+ semver: 7.7.3
+ tinyglobby: 0.2.15
+ ts-api-utils: 2.1.0(typescript@5.9.2)
+ typescript: 5.9.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@8.50.0(eslint@9.39.1)(typescript@5.9.2)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
+ eslint: 9.39.1
+ typescript: 5.9.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/visitor-keys@8.50.0':
+ dependencies:
+ '@typescript-eslint/types': 8.50.0
+ eslint-visitor-keys: 4.2.1
+
+ acorn-jsx@5.3.2(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
+ acorn@8.15.0: {}
+
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ argparse@2.0.1: {}
+
+ array-buffer-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ is-array-buffer: 3.0.5
+
+ array-includes@3.1.9:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ is-string: 1.1.1
+ math-intrinsics: 1.1.0
+
+ array.prototype.findlast@1.2.5:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ es-shim-unscopables: 1.1.0
+
+ array.prototype.flat@1.3.3:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-shim-unscopables: 1.1.0
+
+ array.prototype.flatmap@1.3.3:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-shim-unscopables: 1.1.0
+
+ array.prototype.tosorted@1.1.4:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-shim-unscopables: 1.1.0
+
+ arraybuffer.prototype.slice@1.0.4:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ is-array-buffer: 3.0.5
+
+ async-function@1.0.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.1.0
+
+ balanced-match@1.0.2: {}
+
+ baseline-browser-mapping@2.10.8: {}
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ callsites@3.1.0: {}
+
+ caniuse-lite@1.0.30001761: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ client-only@0.0.1: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ concat-map@0.0.1: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ csstype@3.1.3: {}
+
+ data-view-buffer@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ data-view-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ data-view-byte-offset@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ deep-is@0.1.4: {}
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ detect-libc@2.1.2:
+ optional: true
+
+ doctrine@2.1.0:
+ dependencies:
+ esutils: 2.0.3
+
+ dotenv@16.0.3: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ es-abstract@1.24.0:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ arraybuffer.prototype.slice: 1.0.4
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ data-view-buffer: 1.0.2
+ data-view-byte-length: 1.0.2
+ data-view-byte-offset: 1.0.1
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ es-set-tostringtag: 2.1.0
+ es-to-primitive: 1.3.0
+ function.prototype.name: 1.1.8
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ get-symbol-description: 1.1.0
+ globalthis: 1.0.4
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+ has-proto: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ internal-slot: 1.1.0
+ is-array-buffer: 3.0.5
+ is-callable: 1.2.7
+ is-data-view: 1.0.2
+ is-negative-zero: 2.0.3
+ is-regex: 1.2.1
+ is-set: 2.0.3
+ is-shared-array-buffer: 1.0.4
+ is-string: 1.1.1
+ is-typed-array: 1.1.15
+ is-weakref: 1.1.1
+ math-intrinsics: 1.1.0
+ object-inspect: 1.13.4
+ object-keys: 1.1.1
+ object.assign: 4.1.7
+ own-keys: 1.0.1
+ regexp.prototype.flags: 1.5.4
+ safe-array-concat: 1.1.3
+ safe-push-apply: 1.0.0
+ safe-regex-test: 1.1.0
+ set-proto: 1.0.0
+ stop-iteration-iterator: 1.1.0
+ string.prototype.trim: 1.2.10
+ string.prototype.trimend: 1.0.9
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.3
+ typed-array-byte-length: 1.0.3
+ typed-array-byte-offset: 1.0.4
+ typed-array-length: 1.0.7
+ unbox-primitive: 1.1.0
+ which-typed-array: 1.1.19
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-iterator-helpers@1.2.1:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-set-tostringtag: 2.1.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ globalthis: 1.0.4
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+ has-proto: 1.2.0
+ has-symbols: 1.1.0
+ internal-slot: 1.1.0
+ iterator.prototype: 1.1.5
+ safe-array-concat: 1.1.3
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es-shim-unscopables@1.1.0:
+ dependencies:
+ hasown: 2.0.2
+
+ es-to-primitive@1.3.0:
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.1.0
+ is-symbol: 1.1.1
+
+ escape-string-regexp@4.0.0: {}
+
+ eslint-config-prettier@10.1.1(eslint@9.39.1):
+ dependencies:
+ eslint: 9.39.1
+
+ eslint-plugin-only-warn@1.1.0: {}
+
+ eslint-plugin-react-hooks@5.2.0(eslint@9.39.1):
+ dependencies:
+ eslint: 9.39.1
+
+ eslint-plugin-react@7.37.5(eslint@9.39.1):
+ dependencies:
+ array-includes: 3.1.9
+ array.prototype.findlast: 1.2.5
+ array.prototype.flatmap: 1.3.3
+ array.prototype.tosorted: 1.1.4
+ doctrine: 2.1.0
+ es-iterator-helpers: 1.2.1
+ eslint: 9.39.1
+ estraverse: 5.3.0
+ hasown: 2.0.2
+ jsx-ast-utils: 3.3.5
+ minimatch: 3.1.2
+ object.entries: 1.1.9
+ object.fromentries: 2.0.8
+ object.values: 1.2.1
+ prop-types: 15.8.1
+ resolve: 2.0.0-next.5
+ semver: 6.3.1
+ string.prototype.matchall: 4.0.12
+ string.prototype.repeat: 1.0.0
+
+ eslint-plugin-turbo@2.7.1(eslint@9.39.1)(turbo@2.9.18):
+ dependencies:
+ dotenv: 16.0.3
+ eslint: 9.39.1
+ turbo: 2.9.18
+
+ eslint-scope@8.4.0:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.1: {}
+
+ eslint@9.39.1:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.21.1
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.1
+ '@eslint/js': 9.39.1
+ '@eslint/plugin-kit': 0.4.1
+ '@humanfs/node': 0.16.7
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ 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.4
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@10.4.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 4.2.1
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
+ esutils@2.0.3: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-glob@3.3.1:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fastq@1.19.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+
+ flatted@3.3.3: {}
+
+ for-each@0.3.5:
+ dependencies:
+ is-callable: 1.2.7
+
+ function-bind@1.1.2: {}
+
+ function.prototype.name@1.1.8:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ functions-have-names: 1.2.3
+ hasown: 2.0.2
+ is-callable: 1.2.7
+
+ functions-have-names@1.2.3: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-symbol-description@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ globals@14.0.0: {}
+
+ globals@16.5.0: {}
+
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.2.0
+
+ gopd@1.2.0: {}
+
+ has-bigints@1.1.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-proto@1.2.0:
+ dependencies:
+ dunder-proto: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ ignore@5.3.2: {}
+
+ ignore@7.0.5: {}
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ imurmurhash@0.1.4: {}
+
+ internal-slot@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.1.0
+
+ is-array-buffer@3.0.5:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ is-async-function@2.1.1:
+ dependencies:
+ async-function: 1.0.0
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-bigint@1.1.0:
+ dependencies:
+ has-bigints: 1.1.0
+
+ is-boolean-object@1.2.2:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-callable@1.2.7: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-data-view@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ is-typed-array: 1.1.15
+
+ is-date-object@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-finalizationregistry@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-generator-function@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-map@2.0.3: {}
+
+ is-negative-zero@2.0.3: {}
+
+ is-number-object@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-number@7.0.0: {}
+
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ is-set@2.0.3: {}
+
+ is-shared-array-buffer@1.0.4:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-string@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-symbol@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-symbols: 1.1.0
+ safe-regex-test: 1.1.0
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.19
+
+ is-weakmap@2.0.2: {}
+
+ is-weakref@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-weakset@2.0.4:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ isarray@2.0.5: {}
+
+ isexe@2.0.0: {}
+
+ iterator.prototype@1.1.5:
+ dependencies:
+ define-data-property: 1.1.4
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ has-symbols: 1.1.0
+ set-function-name: 2.0.2
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-buffer@3.0.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ jsx-ast-utils@3.3.5:
+ dependencies:
+ array-includes: 3.1.9
+ array.prototype.flat: 1.3.3
+ object.assign: 4.1.7
+ object.values: 1.2.1
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.merge@4.6.2: {}
+
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
+ math-intrinsics@1.1.0: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.11: {}
+
+ natural-compare@1.4.0: {}
+
+ next@16.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
+ dependencies:
+ '@next/env': 16.2.0
+ '@swc/helpers': 0.5.15
+ baseline-browser-mapping: 2.10.8
+ caniuse-lite: 1.0.30001761
+ postcss: 8.4.31
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ styled-jsx: 5.1.6(react@19.2.0)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 16.2.0
+ '@next/swc-darwin-x64': 16.2.0
+ '@next/swc-linux-arm64-gnu': 16.2.0
+ '@next/swc-linux-arm64-musl': 16.2.0
+ '@next/swc-linux-x64-gnu': 16.2.0
+ '@next/swc-linux-x64-musl': 16.2.0
+ '@next/swc-win32-arm64-msvc': 16.2.0
+ '@next/swc-win32-x64-msvc': 16.2.0
+ sharp: 0.34.5
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
+ object-assign@4.1.1: {}
+
+ object-inspect@1.13.4: {}
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.7:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+ has-symbols: 1.1.0
+ object-keys: 1.1.1
+
+ object.entries@1.1.9:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ object.fromentries@2.0.8:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
+
+ object.values@1.2.1:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ own-keys@1.0.1:
+ dependencies:
+ get-intrinsic: 1.3.0
+ object-keys: 1.1.1
+ safe-push-apply: 1.0.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.3: {}
+
+ possible-typed-array-names@1.1.0: {}
+
+ postcss@8.4.31:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prelude-ls@1.2.1: {}
+
+ prettier@3.7.4: {}
+
+ prop-types@15.8.1:
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ react-is: 16.13.1
+
+ punycode@2.3.1: {}
+
+ queue-microtask@1.2.3: {}
+
+ react-dom@19.2.0(react@19.2.0):
+ dependencies:
+ react: 19.2.0
+ scheduler: 0.27.0
+
+ react-is@16.13.1: {}
+
+ react@19.2.0: {}
+
+ reflect.getprototypeof@1.0.10:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ which-builtin-type: 1.2.1
+
+ regexp.prototype.flags@1.5.4:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ set-function-name: 2.0.2
+
+ resolve-from@4.0.0: {}
+
+ resolve@2.0.0-next.5:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ reusify@1.1.0: {}
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ safe-array-concat@1.1.3:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ has-symbols: 1.1.0
+ isarray: 2.0.5
+
+ safe-push-apply@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ isarray: 2.0.5
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
+ scheduler@0.27.0: {}
+
+ semver@6.3.1: {}
+
+ semver@7.7.3: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+
+ set-proto@1.0.0:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+
+ sharp@0.34.5:
+ dependencies:
+ '@img/colour': 1.0.0
+ detect-libc: 2.1.2
+ semver: 7.7.3
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.34.5
+ '@img/sharp-darwin-x64': 0.34.5
+ '@img/sharp-libvips-darwin-arm64': 1.2.4
+ '@img/sharp-libvips-darwin-x64': 1.2.4
+ '@img/sharp-libvips-linux-arm': 1.2.4
+ '@img/sharp-libvips-linux-arm64': 1.2.4
+ '@img/sharp-libvips-linux-ppc64': 1.2.4
+ '@img/sharp-libvips-linux-riscv64': 1.2.4
+ '@img/sharp-libvips-linux-s390x': 1.2.4
+ '@img/sharp-libvips-linux-x64': 1.2.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.4
+ '@img/sharp-linux-arm': 0.34.5
+ '@img/sharp-linux-arm64': 0.34.5
+ '@img/sharp-linux-ppc64': 0.34.5
+ '@img/sharp-linux-riscv64': 0.34.5
+ '@img/sharp-linux-s390x': 0.34.5
+ '@img/sharp-linux-x64': 0.34.5
+ '@img/sharp-linuxmusl-arm64': 0.34.5
+ '@img/sharp-linuxmusl-x64': 0.34.5
+ '@img/sharp-wasm32': 0.34.5
+ '@img/sharp-win32-arm64': 0.34.5
+ '@img/sharp-win32-ia32': 0.34.5
+ '@img/sharp-win32-x64': 0.34.5
+ optional: true
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
+ source-map-js@1.2.1: {}
+
+ stop-iteration-iterator@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ internal-slot: 1.1.0
+
+ string.prototype.matchall@4.0.12:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ internal-slot: 1.1.0
+ regexp.prototype.flags: 1.5.4
+ set-function-name: 2.0.2
+ side-channel: 1.1.0
+
+ string.prototype.repeat@1.0.0:
+ dependencies:
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+
+ string.prototype.trim@1.2.10:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
+ has-property-descriptors: 1.0.2
+
+ string.prototype.trimend@1.0.9:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ string.prototype.trimstart@1.0.8:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ strip-json-comments@3.1.1: {}
+
+ styled-jsx@5.1.6(react@19.2.0):
+ dependencies:
+ client-only: 0.0.1
+ react: 19.2.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ ts-api-utils@2.1.0(typescript@5.9.2):
+ dependencies:
+ typescript: 5.9.2
+
+ tslib@2.8.1: {}
+
+ turbo@2.9.18:
+ optionalDependencies:
+ '@turbo/darwin-64': 2.9.18
+ '@turbo/darwin-arm64': 2.9.18
+ '@turbo/linux-64': 2.9.18
+ '@turbo/linux-arm64': 2.9.18
+ '@turbo/windows-64': 2.9.18
+ '@turbo/windows-arm64': 2.9.18
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ typed-array-buffer@1.0.3:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-length@1.0.3:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-offset@1.0.4:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+ reflect.getprototypeof: 1.0.10
+
+ typed-array-length@1.0.7:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ is-typed-array: 1.1.15
+ possible-typed-array-names: 1.1.0
+ reflect.getprototypeof: 1.0.10
+
+ typescript-eslint@8.50.0(eslint@9.39.1)(typescript@5.9.2):
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2))(eslint@9.39.1)(typescript@5.9.2)
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ eslint: 9.39.1
+ typescript: 5.9.2
+ transitivePeerDependencies:
+ - supports-color
+
+ typescript@5.9.2: {}
+
+ unbox-primitive@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-bigints: 1.1.0
+ has-symbols: 1.1.0
+ which-boxed-primitive: 1.1.1
+
+ undici-types@6.21.0: {}
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ which-boxed-primitive@1.1.1:
+ dependencies:
+ is-bigint: 1.1.0
+ is-boolean-object: 1.2.2
+ is-number-object: 1.1.1
+ is-string: 1.1.1
+ is-symbol: 1.1.1
+
+ which-builtin-type@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ function.prototype.name: 1.1.8
+ has-tostringtag: 1.0.2
+ is-async-function: 2.1.1
+ is-date-object: 1.1.0
+ is-finalizationregistry: 1.1.1
+ is-generator-function: 1.1.0
+ is-regex: 1.2.1
+ is-weakref: 1.1.1
+ isarray: 2.0.5
+ which-boxed-primitive: 1.1.1
+ which-collection: 1.0.2
+ which-typed-array: 1.1.19
+
+ which-collection@1.0.2:
+ dependencies:
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.4
+
+ which-typed-array@1.1.19:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ for-each: 0.3.5
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ word-wrap@1.2.5: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 00000000..3ff5faaa
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,3 @@
+packages:
+ - "apps/*"
+ - "packages/*"
diff --git a/turbo.json b/turbo.json
new file mode 100644
index 00000000..6bde2596
--- /dev/null
+++ b/turbo.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://turborepo.dev/schema.json",
+ "ui": "tui",
+ "tasks": {
+ "build": {
+ "dependsOn": ["^build"],
+ "inputs": ["$TURBO_DEFAULT$", ".env*"],
+ "outputs": [".next/**", "!.next/cache/**", "!.next/dev/**"]
+ },
+ "lint": {
+ "dependsOn": ["^lint"]
+ },
+ "check-types": {
+ "dependsOn": ["^check-types"]
+ },
+ "dev": {
+ "cache": false,
+ "persistent": true
+ }
+ }
+}
From 55df04c1e58fd681eefcc1cca4322ca7ce2a86c8 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 19 Jun 2026 01:23:11 +0900
Subject: [PATCH 005/789] =?UTF-8?q?chore(web):=20Next.js=20=EC=95=B1=20?=
=?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EA=B5=AC=EC=A1=B0=20=EC=B6=94=EA=B0=80=20?=
=?UTF-8?q?(#1)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- timo-web Next.js 애플리케이션 초기 구조를 추가했습니다
---
apps/timo-web/.gitignore | 36 ++++++++++++++++++++++++++++++++++
apps/timo-web/README.md | 36 ++++++++++++++++++++++++++++++++++
apps/timo-web/app/globals.css | 0
apps/timo-web/app/layout.tsx | 18 +++++++++++++++++
apps/timo-web/app/page.tsx | 3 +++
apps/timo-web/eslint.config.js | 4 ++++
apps/timo-web/next.config.js | 4 ++++
apps/timo-web/package.json | 28 ++++++++++++++++++++++++++
apps/timo-web/tsconfig.json | 19 ++++++++++++++++++
9 files changed, 148 insertions(+)
create mode 100644 apps/timo-web/.gitignore
create mode 100644 apps/timo-web/README.md
create mode 100644 apps/timo-web/app/globals.css
create mode 100644 apps/timo-web/app/layout.tsx
create mode 100644 apps/timo-web/app/page.tsx
create mode 100644 apps/timo-web/eslint.config.js
create mode 100644 apps/timo-web/next.config.js
create mode 100644 apps/timo-web/package.json
create mode 100644 apps/timo-web/tsconfig.json
diff --git a/apps/timo-web/.gitignore b/apps/timo-web/.gitignore
new file mode 100644
index 00000000..ce1f6254
--- /dev/null
+++ b/apps/timo-web/.gitignore
@@ -0,0 +1,36 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# env files (can opt-in for committing if needed)
+.env*
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/apps/timo-web/README.md b/apps/timo-web/README.md
new file mode 100644
index 00000000..a98bfa81
--- /dev/null
+++ b/apps/timo-web/README.md
@@ -0,0 +1,36 @@
+This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/create-next-app).
+
+## Getting Started
+
+First, run the development server:
+
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+# or
+bun dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
+
+This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load Inter, a custom Google Font.
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
diff --git a/apps/timo-web/app/globals.css b/apps/timo-web/app/globals.css
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/layout.tsx b/apps/timo-web/app/layout.tsx
new file mode 100644
index 00000000..f8a817c3
--- /dev/null
+++ b/apps/timo-web/app/layout.tsx
@@ -0,0 +1,18 @@
+import type { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "Timo",
+ description: "Timo web",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/apps/timo-web/app/page.tsx b/apps/timo-web/app/page.tsx
new file mode 100644
index 00000000..35f243c3
--- /dev/null
+++ b/apps/timo-web/app/page.tsx
@@ -0,0 +1,3 @@
+export default function Home() {
+ return <>Hi Timo>;
+}
diff --git a/apps/timo-web/eslint.config.js b/apps/timo-web/eslint.config.js
new file mode 100644
index 00000000..47b0670b
--- /dev/null
+++ b/apps/timo-web/eslint.config.js
@@ -0,0 +1,4 @@
+import { nextJsConfig } from "@repo/eslint-config/next-js";
+
+/** @type {import("eslint").Linter.Config[]} */
+export default nextJsConfig;
diff --git a/apps/timo-web/next.config.js b/apps/timo-web/next.config.js
new file mode 100644
index 00000000..4678774e
--- /dev/null
+++ b/apps/timo-web/next.config.js
@@ -0,0 +1,4 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {};
+
+export default nextConfig;
diff --git a/apps/timo-web/package.json b/apps/timo-web/package.json
new file mode 100644
index 00000000..ae48876f
--- /dev/null
+++ b/apps/timo-web/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "timo-web",
+ "version": "0.1.0",
+ "type": "module",
+ "private": true,
+ "scripts": {
+ "dev": "next dev --port 3000",
+ "build": "next build",
+ "start": "next start",
+ "lint": "eslint --max-warnings 0",
+ "check-types": "next typegen && tsc --noEmit"
+ },
+ "dependencies": {
+ "@repo/ui": "workspace:*",
+ "next": "16.2.0",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0"
+ },
+ "devDependencies": {
+ "@repo/eslint-config": "workspace:*",
+ "@repo/typescript-config": "workspace:*",
+ "@types/node": "^22.15.3",
+ "@types/react": "19.2.2",
+ "@types/react-dom": "19.2.2",
+ "eslint": "^9.39.1",
+ "typescript": "5.9.2"
+ }
+}
diff --git a/apps/timo-web/tsconfig.json b/apps/timo-web/tsconfig.json
new file mode 100644
index 00000000..c0346be0
--- /dev/null
+++ b/apps/timo-web/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "extends": "@repo/typescript-config/nextjs.json",
+ "compilerOptions": {
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "strictNullChecks": true
+ },
+ "include": [
+ "**/*.ts",
+ "**/*.tsx",
+ "next-env.d.ts",
+ "next.config.js",
+ ".next/types/**/*.ts"
+ ],
+ "exclude": ["node_modules"]
+}
From 5cedaea91e9394d122ce5772c908f07f652b4952 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 19 Jun 2026 01:23:17 +0900
Subject: [PATCH 006/789] =?UTF-8?q?chore(ui):=20UI=20=EA=B3=B5=EC=9C=A0=20?=
=?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=B4=88=EA=B8=B0=20=EA=B5=AC?=
=?UTF-8?q?=EC=A1=B0=20=EC=B6=94=EA=B0=80=20(#1)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 공유 UI 패키지 초기 구조를 추가했습니다
---
packages/ui/eslint.config.mjs | 4 ++++
packages/ui/package.json | 26 ++++++++++++++++++++++++++
packages/ui/src/button.tsx | 20 ++++++++++++++++++++
packages/ui/src/card.tsx | 27 +++++++++++++++++++++++++++
packages/ui/src/code.tsx | 11 +++++++++++
packages/ui/tsconfig.json | 9 +++++++++
6 files changed, 97 insertions(+)
create mode 100644 packages/ui/eslint.config.mjs
create mode 100644 packages/ui/package.json
create mode 100644 packages/ui/src/button.tsx
create mode 100644 packages/ui/src/card.tsx
create mode 100644 packages/ui/src/code.tsx
create mode 100644 packages/ui/tsconfig.json
diff --git a/packages/ui/eslint.config.mjs b/packages/ui/eslint.config.mjs
new file mode 100644
index 00000000..19170f88
--- /dev/null
+++ b/packages/ui/eslint.config.mjs
@@ -0,0 +1,4 @@
+import { config } from "@repo/eslint-config/react-internal";
+
+/** @type {import("eslint").Linter.Config} */
+export default config;
diff --git a/packages/ui/package.json b/packages/ui/package.json
new file mode 100644
index 00000000..90c14881
--- /dev/null
+++ b/packages/ui/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@repo/ui",
+ "version": "0.0.0",
+ "private": true,
+ "exports": {
+ "./*": "./src/*.tsx"
+ },
+ "scripts": {
+ "lint": "eslint . --max-warnings 0",
+ "generate:component": "turbo gen react-component",
+ "check-types": "tsc --noEmit"
+ },
+ "devDependencies": {
+ "@repo/eslint-config": "workspace:*",
+ "@repo/typescript-config": "workspace:*",
+ "@types/node": "^22.15.3",
+ "@types/react": "19.2.2",
+ "@types/react-dom": "19.2.2",
+ "eslint": "^9.39.1",
+ "typescript": "5.9.2"
+ },
+ "dependencies": {
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0"
+ }
+}
diff --git a/packages/ui/src/button.tsx b/packages/ui/src/button.tsx
new file mode 100644
index 00000000..78e5420c
--- /dev/null
+++ b/packages/ui/src/button.tsx
@@ -0,0 +1,20 @@
+"use client";
+
+import { ReactNode } from "react";
+
+interface ButtonProps {
+ children: ReactNode;
+ className?: string;
+ appName: string;
+}
+
+export const Button = ({ children, className, appName }: ButtonProps) => {
+ return (
+
+ );
+};
diff --git a/packages/ui/src/card.tsx b/packages/ui/src/card.tsx
new file mode 100644
index 00000000..7b988937
--- /dev/null
+++ b/packages/ui/src/card.tsx
@@ -0,0 +1,27 @@
+import { type JSX } from "react";
+
+export function Card({
+ className,
+ title,
+ children,
+ href,
+}: {
+ className?: string;
+ title: string;
+ children: React.ReactNode;
+ href: string;
+}): JSX.Element {
+ return (
+
+
+ {title} ->
+
+ {children}
+
+ );
+}
diff --git a/packages/ui/src/code.tsx b/packages/ui/src/code.tsx
new file mode 100644
index 00000000..f7cbd22a
--- /dev/null
+++ b/packages/ui/src/code.tsx
@@ -0,0 +1,11 @@
+import { type JSX } from "react";
+
+export function Code({
+ children,
+ className,
+}: {
+ children: React.ReactNode;
+ className?: string;
+}): JSX.Element {
+ return {children};
+}
diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json
new file mode 100644
index 00000000..ed023ce4
--- /dev/null
+++ b/packages/ui/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "@repo/typescript-config/react-library.json",
+ "compilerOptions": {
+ "outDir": "dist",
+ "strictNullChecks": true
+ },
+ "include": ["src"],
+ "exclude": ["node_modules", "dist"]
+}
From dc40450e11aade5500e3e54aefde5d662ce61773 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 19 Jun 2026 01:23:25 +0900
Subject: [PATCH 007/789] =?UTF-8?q?chore(config):=20ESLint=20=EB=B0=8F=20T?=
=?UTF-8?q?ypeScript=20=EC=84=A4=EC=A0=95=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?=
=?UTF-8?q?=EC=B6=94=EA=B0=80=20(#1)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 공유 ESLint 및 TypeScript 설정 패키지를 추가했습니다
---
packages/eslint-config/README.md | 3 +
packages/eslint-config/base.js | 32 +++++++++++
packages/eslint-config/next.js | 57 +++++++++++++++++++
packages/eslint-config/package.json | 24 ++++++++
packages/eslint-config/react-internal.js | 39 +++++++++++++
packages/typescript-config/base.json | 19 +++++++
packages/typescript-config/nextjs.json | 12 ++++
packages/typescript-config/package.json | 9 +++
packages/typescript-config/react-library.json | 7 +++
9 files changed, 202 insertions(+)
create mode 100644 packages/eslint-config/README.md
create mode 100644 packages/eslint-config/base.js
create mode 100644 packages/eslint-config/next.js
create mode 100644 packages/eslint-config/package.json
create mode 100644 packages/eslint-config/react-internal.js
create mode 100644 packages/typescript-config/base.json
create mode 100644 packages/typescript-config/nextjs.json
create mode 100644 packages/typescript-config/package.json
create mode 100644 packages/typescript-config/react-library.json
diff --git a/packages/eslint-config/README.md b/packages/eslint-config/README.md
new file mode 100644
index 00000000..8b42d901
--- /dev/null
+++ b/packages/eslint-config/README.md
@@ -0,0 +1,3 @@
+# `@turbo/eslint-config`
+
+Collection of internal eslint configurations.
diff --git a/packages/eslint-config/base.js b/packages/eslint-config/base.js
new file mode 100644
index 00000000..09d316ef
--- /dev/null
+++ b/packages/eslint-config/base.js
@@ -0,0 +1,32 @@
+import js from "@eslint/js";
+import eslintConfigPrettier from "eslint-config-prettier";
+import turboPlugin from "eslint-plugin-turbo";
+import tseslint from "typescript-eslint";
+import onlyWarn from "eslint-plugin-only-warn";
+
+/**
+ * A shared ESLint configuration for the repository.
+ *
+ * @type {import("eslint").Linter.Config[]}
+ * */
+export const config = [
+ js.configs.recommended,
+ eslintConfigPrettier,
+ ...tseslint.configs.recommended,
+ {
+ plugins: {
+ turbo: turboPlugin,
+ },
+ rules: {
+ "turbo/no-undeclared-env-vars": "warn",
+ },
+ },
+ {
+ plugins: {
+ onlyWarn,
+ },
+ },
+ {
+ ignores: ["dist/**"],
+ },
+];
diff --git a/packages/eslint-config/next.js b/packages/eslint-config/next.js
new file mode 100644
index 00000000..4df088ac
--- /dev/null
+++ b/packages/eslint-config/next.js
@@ -0,0 +1,57 @@
+import js from "@eslint/js";
+import { globalIgnores } from "eslint/config";
+import eslintConfigPrettier from "eslint-config-prettier";
+import tseslint from "typescript-eslint";
+import pluginReactHooks from "eslint-plugin-react-hooks";
+import pluginReact from "eslint-plugin-react";
+import globals from "globals";
+import pluginNext from "@next/eslint-plugin-next";
+import { config as baseConfig } from "./base.js";
+
+/**
+ * A custom ESLint configuration for libraries that use Next.js.
+ *
+ * @type {import("eslint").Linter.Config[]}
+ * */
+export const nextJsConfig = [
+ ...baseConfig,
+ js.configs.recommended,
+ eslintConfigPrettier,
+ ...tseslint.configs.recommended,
+ globalIgnores([
+ // Default ignores of eslint-config-next:
+ ".next/**",
+ "out/**",
+ "build/**",
+ "next-env.d.ts",
+ ]),
+ {
+ ...pluginReact.configs.flat.recommended,
+ languageOptions: {
+ ...pluginReact.configs.flat.recommended.languageOptions,
+ globals: {
+ ...globals.serviceworker,
+ },
+ },
+ },
+ {
+ plugins: {
+ "@next/next": pluginNext,
+ },
+ rules: {
+ ...pluginNext.configs.recommended.rules,
+ ...pluginNext.configs["core-web-vitals"].rules,
+ },
+ },
+ {
+ plugins: {
+ "react-hooks": pluginReactHooks,
+ },
+ settings: { react: { version: "detect" } },
+ rules: {
+ ...pluginReactHooks.configs.recommended.rules,
+ // React scope no longer necessary with new JSX transform.
+ "react/react-in-jsx-scope": "off",
+ },
+ },
+];
diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json
new file mode 100644
index 00000000..6fd5c24d
--- /dev/null
+++ b/packages/eslint-config/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "@repo/eslint-config",
+ "version": "0.0.0",
+ "type": "module",
+ "private": true,
+ "exports": {
+ "./base": "./base.js",
+ "./next-js": "./next.js",
+ "./react-internal": "./react-internal.js"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.39.1",
+ "@next/eslint-plugin-next": "^16.2.0",
+ "eslint": "^9.39.1",
+ "eslint-config-prettier": "^10.1.1",
+ "eslint-plugin-only-warn": "^1.1.0",
+ "eslint-plugin-react": "^7.37.5",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-turbo": "^2.7.1",
+ "globals": "^16.5.0",
+ "typescript": "^5.9.2",
+ "typescript-eslint": "^8.50.0"
+ }
+}
diff --git a/packages/eslint-config/react-internal.js b/packages/eslint-config/react-internal.js
new file mode 100644
index 00000000..daeccba2
--- /dev/null
+++ b/packages/eslint-config/react-internal.js
@@ -0,0 +1,39 @@
+import js from "@eslint/js";
+import eslintConfigPrettier from "eslint-config-prettier";
+import tseslint from "typescript-eslint";
+import pluginReactHooks from "eslint-plugin-react-hooks";
+import pluginReact from "eslint-plugin-react";
+import globals from "globals";
+import { config as baseConfig } from "./base.js";
+
+/**
+ * A custom ESLint configuration for libraries that use React.
+ *
+ * @type {import("eslint").Linter.Config[]} */
+export const config = [
+ ...baseConfig,
+ js.configs.recommended,
+ eslintConfigPrettier,
+ ...tseslint.configs.recommended,
+ pluginReact.configs.flat.recommended,
+ {
+ languageOptions: {
+ ...pluginReact.configs.flat.recommended.languageOptions,
+ globals: {
+ ...globals.serviceworker,
+ ...globals.browser,
+ },
+ },
+ },
+ {
+ plugins: {
+ "react-hooks": pluginReactHooks,
+ },
+ settings: { react: { version: "detect" } },
+ rules: {
+ ...pluginReactHooks.configs.recommended.rules,
+ // React scope no longer necessary with new JSX transform.
+ "react/react-in-jsx-scope": "off",
+ },
+ },
+];
diff --git a/packages/typescript-config/base.json b/packages/typescript-config/base.json
new file mode 100644
index 00000000..5117f2a3
--- /dev/null
+++ b/packages/typescript-config/base.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "compilerOptions": {
+ "declaration": true,
+ "declarationMap": true,
+ "esModuleInterop": true,
+ "incremental": false,
+ "isolatedModules": true,
+ "lib": ["es2022", "DOM", "DOM.Iterable"],
+ "module": "NodeNext",
+ "moduleDetection": "force",
+ "moduleResolution": "NodeNext",
+ "noUncheckedIndexedAccess": true,
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "target": "ES2022"
+ }
+}
diff --git a/packages/typescript-config/nextjs.json b/packages/typescript-config/nextjs.json
new file mode 100644
index 00000000..e6defa48
--- /dev/null
+++ b/packages/typescript-config/nextjs.json
@@ -0,0 +1,12 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "extends": "./base.json",
+ "compilerOptions": {
+ "plugins": [{ "name": "next" }],
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "allowJs": true,
+ "jsx": "preserve",
+ "noEmit": true
+ }
+}
diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json
new file mode 100644
index 00000000..27c0e604
--- /dev/null
+++ b/packages/typescript-config/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@repo/typescript-config",
+ "version": "0.0.0",
+ "private": true,
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/typescript-config/react-library.json b/packages/typescript-config/react-library.json
new file mode 100644
index 00000000..c3a1b26f
--- /dev/null
+++ b/packages/typescript-config/react-library.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "extends": "./base.json",
+ "compilerOptions": {
+ "jsx": "react-jsx"
+ }
+}
From b9ea3643bcd65225bd09698be97ee2008224be09 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 19 Jun 2026 01:23:33 +0900
Subject: [PATCH 008/789] =?UTF-8?q?docs(root):=20=ED=94=84=EB=A1=9C?=
=?UTF-8?q?=EC=A0=9D=ED=8A=B8=20=EC=95=84=ED=82=A4=ED=85=8D=EC=B2=98=20?=
=?UTF-8?q?=EB=B0=8F=20=EC=BB=A8=EB=B2=A4=EC=85=98=20=EB=AC=B8=EC=84=9C=20?=
=?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20(#1)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 프로젝트 아키텍처 구조와 개발 컨벤션 문서를 작성했습니다
---
docs/architecture.md | 83 ++++++++++++++++++-
docs/conventions.md | 186 ++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 267 insertions(+), 2 deletions(-)
diff --git a/docs/architecture.md b/docs/architecture.md
index 543e6deb..4754a4a1 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -1 +1,82 @@
-
+# Architecture
+
+## 기술 스택
+
+| 분류 | 도구 | 비고 |
+|------|------|------|
+| Monorepo | Turborepo + pnpm workspace | 빌드 캐싱, 파이프라인 최적화 |
+| Framework | Next.js 16 (App Router) | SSR/SSG, Server Components |
+| Language | TypeScript 5.9 | strict 모드 |
+| Styling | Tailwind CSS | 유틸리티 클래스 기반 |
+| State — 전역 | Zustand | 클라이언트 전역 상태 |
+| State — 서버 | TanStack React Query | API 캐싱, 동기화 |
+| API Client | swagger-typescript-api | OpenAPI 스펙 → 타입 자동 생성 |
+| Monitoring | Sentry | 런타임 에러 및 성능 추적 |
+| Formatter | Prettier | 팀 컨벤션 자동 적용 |
+| Linter | ESLint 9 (flat config) | `--max-warnings 0` |
+| Git Hooks | Husky | 커밋 전 lint/format |
+| Code Review | CodeRabbit | PR마다 AI 리뷰 |
+| Assets | SVG sprite | SVG → React 컴포넌트 |
+| Deployment | Vercel | Turborepo Remote Cache 연동 |
+
+---
+
+## 모노레포 구조
+
+```
+timo-client/
+├── apps/
+│ └── timo-web/ # Next.js 앱 (port 3000)
+│ ├── app/ # App Router 페이지·레이아웃
+│ ├── components/ # 앱 전용 컴포넌트
+│ ├── hooks/ # 앱 전용 커스텀 훅
+│ ├── stores/ # Zustand 스토어
+│ ├── queries/ # React Query 훅
+│ └── lib/ # API 클라이언트, 유틸
+├── packages/
+│ ├── ui/ # 공유 UI 컴포넌트 (@repo/ui)
+│ ├── eslint-config/ # 공유 ESLint 설정 (@repo/eslint-config)
+│ └── typescript-config/ # 공유 tsconfig (@repo/typescript-config)
+└── docs/
+```
+
+---
+
+## 컴포넌트 계층
+
+```
+pages (app/)
+ └── feature 컴포넌트 (components/feature/) ← 도메인 로직 포함
+ └── ui 컴포넌트 (components/ui/ 또는 @repo/ui) ← 순수 표현
+```
+
+- **pages**: 라우팅 단위. 데이터 페칭(React Query) 및 레이아웃만 담당
+- **feature 컴포넌트**: 특정 도메인 기능 단위. 스토어·쿼리 직접 접근 가능
+- **ui 컴포넌트**: props만 받는 순수 presentational. 상태·사이드이펙트 없음
+- **@repo/ui**: 앱 간 공유되는 범용 UI (Button, Card 등)
+
+---
+
+## 상태 관리 전략
+
+| 상태 종류 | 도구 | 위치 |
+|----------|------|------|
+| 서버 데이터 (API) | TanStack React Query | `queries/` |
+| 클라이언트 전역 | Zustand | `stores/` |
+| URL / 필터 / 페이지네이션 | Next.js searchParams | `app/` 라우트 |
+| 폼 | React Hook Form (로컬) | 각 feature 컴포넌트 |
+| 컴포넌트 로컬 | useState / useReducer | 컴포넌트 내부 |
+
+**규칙:**
+- 서버 상태를 Zustand에 복사하지 않는다 — React Query가 단일 출처
+- 파생 값은 store에 저장하지 않고 selector로 계산
+- URL로 공유 가능한 상태(필터, 탭)는 searchParams에 먼저 고려
+
+---
+
+## 모듈 경계
+
+- `apps/timo-web` → `packages/ui` 참조 가능
+- `packages/ui` → `apps/*` 참조 금지
+- 패키지 간 참조는 반드시 `workspace:*`로 선언
+- 앱 내부 도메인 간 직접 import 금지 — 공유 로직은 `lib/` 또는 `packages/`로 추출
diff --git a/docs/conventions.md b/docs/conventions.md
index 8b88152b..c6a1c629 100644
--- a/docs/conventions.md
+++ b/docs/conventions.md
@@ -1 +1,185 @@
-
+# Conventions
+
+## 이슈 & PR 제목 컨벤션
+
+### 형식
+
+```
+[TYPE] 제목을 한 문장으로 작성
+```
+
+### TYPE
+
+작업 성격에 맞게 자유롭게 지정한다. 대문자로 작성.
+
+```
+[FEAT], [FIX], [REFACTOR], [DOCS], [CHORE], [CI], [INIT] 등
+```
+
+### 예시
+
+```
+[FEAT] 소셜 로그인 기능 구현
+[FIX] 로그인 후 리다이렉트 오류 수정
+[INIT] 프로젝트 초기 설정
+[CI] GitHub Actions 워크플로우 추가
+```
+
+### 규칙
+
+- `[TYPE]` 뒤에 한 칸 띄우고 제목 작성
+- 제목 끝에 `.` 금지
+- 제목은 명사형 또는 동사원형으로 종결
+
+---
+
+## 커밋 컨벤션
+
+### 커밋 타입
+
+| 타입 | 설명 |
+|------|------|
+| `feat` | 새로운 기능 추가 |
+| `fix` | 버그 수정 |
+| `refactor` | 코드 리팩토링 (기능 변경 없음) |
+| `style` | 코드 포맷팅, 세미콜론 누락 등 코드 자체 변경 없는 경우 |
+| `name` | 파일/폴더명 변경 |
+| `file` | 파일/폴더 이동 |
+| `remove` | 파일 삭제만 수행 |
+| `comment` | 주석 추가 및 변경 |
+| `docs` | 문서 수정 |
+| `chore` | 패키지 매니저 수정, .gitignore 등 기타 |
+
+### 커밋 형식
+
+```
+prefix: 작업내용 (#이슈번호)
+
+ex) feat: 검색 결과 필터링 기능 추가 (#1)
+```
+
+### 커밋 규칙
+
+1. 제목과 본문은 빈 행으로 분리
+2. 본문에는 **무엇을, 왜** 변경했는지 작성 (어떻게 X)
+3. 제목 첫 글자 대문자, 끝에 `.` 금지
+4. 제목은 영문 기준 50자 이내
+5. 마지막에 이슈 번호 추가 `(#이슈번호)`
+6. 여러 변경 사항은 글머리 기호로 나열
+
+```
+feat: 소셜 로그인 기능 구현 (#5)
+
+- 카카오 OAuth 연동
+- 로그인 후 메인 페이지로 리다이렉트
+- 토큰 저장 로직 추가
+```
+
+---
+
+## 브랜치 컨벤션
+
+### 브랜치 구조
+
+```
+main ── develop ──────────────── feat
+ └── !HOTFIX └── release/x.x.x └── fix
+ └── refactor
+```
+
+### 브랜치 타입
+
+| 브랜치 | 설명 |
+|--------|------|
+| `main` | 실제 서비스 브랜치 |
+| `develop` | 배포 전 작업 기준 브랜치 (default) |
+| `feat` | 기능 단위 개발 |
+| `fix` | 버그/에러 수정 |
+| `refactor` | 코드 구조 개선 |
+| `release` | 릴리즈 준비 |
+| `!HOTFIX` | 서비스 중 긴급 수정 (main에서 분기) |
+
+### 브랜치 형식
+
+```
+prefix/scope/이슈번호-작업내용
+(띄어쓰기는 -로 대체, kebab-case)
+
+scope: web / package-ui (앱·패키지 단위)
+
+ex) feat/web/1-add-searching-result
+ fix/web/8-login-error
+ refactor/web/12-remove-duplication
+ release/0.1.0
+```
+
+---
+
+## 파일/폴더 네이밍
+
+| 대상 | 컨벤션 | 예시 |
+|------|--------|------|
+| 폴더 | `kebab-case` | `user-profile/` |
+| 컴포넌트 파일 | `PascalCase` | `UserCard.tsx` |
+| Hook / API / Utils | `kebab-case` | `use-auth.ts`, `auth-api.ts`, `format-date.ts` |
+| TanStack Query | `kebab-case` | `use-user-query.ts`, `use-user-mutation.ts` |
+
+---
+
+## 코드 스타일
+
+### 핵심 규칙
+
+- TypeScript `any` **절대 사용 금지** → `unknown` 후 타입 narrowing
+- 절대 경로 import 사용
+- ESLint 룰 임의 수정 금지
+
+### 컴포넌트
+
+- Arrow function으로 선언: `export const Component = () => {}`
+- Named export 사용 (default export 지양)
+- 자식 없으면 self-closing: ``
+- 최상단 래퍼는 Fragment: `<>…>`
+
+### 변수/상수
+
+- `const` → `let` 순서로 선언 (`var` 금지)
+- 상수: `UPPER_SNAKE_CASE` (ex. `API_KEY`)
+- Boolean: `is` 접두사 (ex. `isActive`)
+- 복수 데이터: 끝에 `s` (ex. `userLists`)
+- 문자열 조합: 템플릿 리터럴 사용
+- 줄임말 지양, 의미 있는 명칭 사용
+
+### 함수
+
+동사+명사 형식, 화살표 함수 사용:
+
+| 접두사 | 용도 |
+|--------|------|
+| `get` | 값을 가져와 반환 |
+| `create` | 새로운 값/변수 생성 |
+| `check` | 내부 로직 확인 |
+| `convert` | 특정 형태로 변환 |
+| `add` / `minus` | 더하거나 빼는 연산 |
+| `filter` | 배열 필터링 후 반환 |
+| `handle` | 이벤트 핸들러 전용 (ex. `handleResetClick`) |
+| `has` | boolean 반환 유틸 (ex. `hasEmail`) |
+
+- `handle` 접두사는 이벤트 핸들러에만 사용
+- `key` prop: 정적 리스트 → `index` 허용 / 동적 리스트 → 반드시 고유 `id`
+
+### 타입/인터페이스
+
+- `PascalCase` 네이밍
+- `interface` 우선 사용 (`type`은 유니언·튜플·리터럴에만)
+- Props 타입: 접미사 `Props` (ex. `HeaderProps`)
+- type alias: 접미사 `Types`
+
+### 접근성 (A11y)
+
+- `div` 남발 금지 → 시맨틱 태그 사용 (`main`, `article`, `section`, `nav`, `header`, `footer`)
+- 헤딩 레벨 점프 금지, 페이지당 `` 하나
+- 텍스트 없는 버튼에 `aria-label` 필수
+- `outline: none`으로 포커스 테두리 제거 금지
+- 버튼은 `
-
-
---
## What Is Timo?
-Timo is a timebox-based to-do service that converts tasks into actionable, time-bound blocks — so you actually finish what you plan. Unlike traditional to-do lists, Timo asks you to estimate how long each task will take, then builds your day around those time blocks. As you use it, Timo learns your time patterns and helps you plan more realistically with AI-powered time recommendations.
+Timo is a timebox-based to-do service that converts tasks into actionable, time-bound blocks — so you actually finish what you plan.
+
+Unlike traditional to-do lists, Timo asks you to estimate how long each task will take, then builds your day around those time blocks.
+
+As you use it, Timo learns your time patterns and helps you plan more realistically with AI-powered time recommendations.
## Why We Built It
@@ -40,21 +40,13 @@ Timo is a timebox-based to-do service that converts tasks into actionable, time-
## Features
-### ✏️ Todo + Time Estimate
-
-Add tasks with an expected duration and optional tags. The estimate becomes the foundation of your daily schedule.
-
-### 📦 Automatic Timebox Scheduling
-
-Each task is automatically converted into a time block on your schedule — turning a flat to-do list into an executable plan.
-
-### ⏱️ Timer-Based Execution
+- **✏️ Todo + Time Estimate**: Add tasks with an expected duration and optional tags. The estimate becomes the foundation of your daily schedule.
-Start a timebox and a timer begins. Pause, extend, or go full-screen to stay focused. When time is up, you get a notification. Actual time spent is recorded automatically.
+- **📦 Automatic Timebox Scheduling**: Each task is automatically converted into a time block on your schedule — turning a flat to-do list into an executable plan.
-### 🤖 AI Time Recommendations
+- **⏱️ Timer-Based Execution**: Start a timebox and a timer begins. Pause, extend, or go full-screen to stay focused. When time is up, you get a notification. Actual time spent is recorded automatically.
-Timo learns how long similar tasks actually take you, then recommends more accurate time estimates — making future plans increasingly realistic.
+- **🤖 AI Time Recommendations**: Timo learns how long similar tasks actually take you, then recommends more accurate time estimates — making future plans increasingly realistic.
## Getting Started
diff --git a/README_ko.md b/README_ko.md
index 4e8a993a..40254027 100644
--- a/README_ko.md
+++ b/README_ko.md
@@ -20,17 +20,17 @@
English
-
-
---
## Timo란?
-Timo는 할 일을 실행 가능한 시간 단위(타임박스)로 변환해주는 투두 서비스입니다. 단순히 할 일 목록을 나열하는 대신, 각 태스크에 예상 소요 시간을 입력하면 하루 일정이 자동으로 구성됩니다. 반복 사용을 통해 Timo는 개인의 시간 사용 패턴을 학습하고, AI 기반 시간 추천으로 점점 더 현실적인 계획 수립을 돕습니다.
+Timo는 할 일을 실행 가능한 시간 단위(타임박스)로 변환해주는 투두 서비스입니다.
+
+단순히 할 일 목록을 나열하는 대신, 각 태스크에 예상 소요 시간을 입력하면 하루 일정이 자동으로 구성됩니다.
+
+반복 사용을 통해 Timo는 개인의 시간 사용 패턴을 학습하고, AI 기반 시간 추천으로 점점 더 현실적인 계획 수립을 돕습니다.
## 왜 만들었나요?
@@ -40,21 +40,13 @@ Timo는 할 일을 실행 가능한 시간 단위(타임박스)로 변환해주
## 주요 기능
-### ✏️ 투두 + 예상 소요 시간 입력
-
-태스크를 입력할 때 예상 소요 시간과 태그를 함께 설정합니다. 이 정보가 하루 일정의 기반이 됩니다.
-
-### 📦 타임박스 자동 생성
-
-입력된 태스크는 실행 가능한 시간 단위의 타임박스로 자동 변환됩니다. 평면적인 리스트가 실행 가능한 일정으로 바뀝니다.
-
-### ⏱️ 타이머 기반 실행
+- **✏️ 투두 + 예상 소요 시간 입력**: 태스크를 입력할 때 예상 소요 시간과 태그를 함께 설정합니다. 이 정보가 하루 일정의 기반이 됩니다.
-타임박스를 시작하면 타이머가 작동합니다. 일시정지·연장·전체화면 기능을 제공하며, 완료 시 알림을 받을 수 있습니다. 실제 수행 시간은 자동으로 기록됩니다.
+- **📦 타임박스 자동 생성**: 입력된 태스크는 실행 가능한 시간 단위의 타임박스로 자동 변환됩니다. 평면적인 리스트가 실행 가능한 일정으로 바뀝니다.
-### 🤖 AI 소요 시간 추천
+- **⏱️ 타이머 기반 실행**: 타임박스를 시작하면 타이머가 작동합니다. 일시정지·연장·전체화면 기능을 제공하며, 완료 시 알림을 받을 수 있습니다. 실제 수행 시간은 자동으로 기록됩니다.
-반복 사용을 통해 유사 태스크의 실제 소요 시간 패턴을 학습하고, 더 정확한 시간 추천을 제공합니다. 이를 통해 사용할수록 더 현실적인 계획을 세울 수 있습니다.
+- **🤖 AI 소요 시간 추천**: 반복 사용을 통해 유사 태스크의 실제 소요 시간 패턴을 학습하고, 더 정확한 시간 추천을 제공합니다. 이를 통해 사용할수록 더 현실적인 계획을 세울 수 있습니다.
## 실행 방법
From 9c885295cdd24faed58eb91b7392399393a5e5a6 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Thu, 25 Jun 2026 02:20:52 +0900
Subject: [PATCH 078/789] =?UTF-8?q?chore(web):=20TanStack=20Query=20&=20Ax?=
=?UTF-8?q?ios=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=84=A4=EC=B9=98=20(#17)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- @tanstack/react-query, axios 패키지를 설치했습니다
Co-Authored-By: Claude Sonnet 4.6
---
apps/timo-web/package.json | 3 +
pnpm-lock.yaml | 149 ++++++++++++++++++++++++++++++++++++-
2 files changed, 150 insertions(+), 2 deletions(-)
diff --git a/apps/timo-web/package.json b/apps/timo-web/package.json
index 2eb1bd37..c24f4ea6 100644
--- a/apps/timo-web/package.json
+++ b/apps/timo-web/package.json
@@ -12,6 +12,9 @@
},
"dependencies": {
"@repo/timo-design-system": "workspace:*",
+ "@tanstack/react-query": "^5.101.1",
+ "@tanstack/react-query-devtools": "^5.101.1",
+ "axios": "^1.18.1",
"next": "16.2.0",
"react": "^19.2.0",
"react-dom": "^19.2.0"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b0af7a8a..6f1a25c3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,6 +26,15 @@ importers:
'@repo/timo-design-system':
specifier: workspace:*
version: link:../../packages/timo-design-system
+ '@tanstack/react-query':
+ specifier: ^5.101.1
+ version: 5.101.1(react@19.2.0)
+ '@tanstack/react-query-devtools':
+ specifier: ^5.101.1
+ version: 5.101.1(@tanstack/react-query@5.101.1(react@19.2.0))(react@19.2.0)
+ axios:
+ specifier: ^1.18.1
+ version: 1.18.1
next:
specifier: 16.2.0
version: 16.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
@@ -682,6 +691,23 @@ packages:
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
+ '@tanstack/query-core@5.101.1':
+ resolution: {integrity: sha512-Y6Y92dkXtNqx67m2pMSxUsA3zOCwv862JexZRP8/EPwvKXMPu9m8rv43spiXWzOUIggQ3SQApttALStzhA8B4g==}
+
+ '@tanstack/query-devtools@5.101.1':
+ resolution: {integrity: sha512-37RQ9U2PxlXQiv1era2t+uHgVhmiyvxqTMu30+KoVf0rufiucu6rpGRKFJk61Wh5OAZFKqCQd6lxTzFWfLZiuQ==}
+
+ '@tanstack/react-query-devtools@5.101.1':
+ resolution: {integrity: sha512-OXFR9XKdEslraq3cpl3kCUeNvTIq/xGWEZiFZdn2bLB/q4WxSALMEDKYZ5yYjMQytsfnQxwQYqV4qtVEf0nuog==}
+ peerDependencies:
+ '@tanstack/react-query': ^5.101.1
+ react: ^18 || ^19
+
+ '@tanstack/react-query@5.101.1':
+ resolution: {integrity: sha512-ZnONUuQKJe1bJMStXUL1s5uKN9FcfC28j5cK+iDZcdSHtUv1wtin1cGc/Oewhf2Oc4eKY7lggtpvT/AbMmhHew==}
+ peerDependencies:
+ react: ^18 || ^19
+
'@turbo/darwin-64@2.9.18':
resolution: {integrity: sha512-9f27peFu16ur8c0v9nUFUEyBnbKuuFsUTjHFWfmwGfzySBXbHwzU44QhZon6Mznz0cHsIr3984NQj/bVrnGSRw==}
cpu: [x64]
@@ -802,6 +828,10 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
+ agent-base@6.0.2:
+ resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
+ engines: {node: '>= 6.0.0'}
+
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@@ -848,10 +878,16 @@ packages:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
+ axios@1.18.1:
+ resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==}
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -910,6 +946,10 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -952,6 +992,10 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
@@ -1126,10 +1170,23 @@ packages:
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+ follow-redirects@1.16.0:
+ resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
for-each@0.3.5:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
+ form-data@4.0.6:
+ resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==}
+ engines: {node: '>= 6'}
+
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
@@ -1203,6 +1260,14 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ hasown@2.0.4:
+ resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
+ engines: {node: '>= 0.4'}
+
+ https-proxy-agent@5.0.1:
+ resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
+ engines: {node: '>= 6'}
+
iconv-lite@0.7.2:
resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
engines: {node: '>=0.10.0'}
@@ -1390,6 +1455,14 @@ packages:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -1522,6 +1595,10 @@ packages:
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ proxy-from-env@2.1.0:
+ resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
+ engines: {node: '>=10'}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -2202,6 +2279,21 @@ snapshots:
dependencies:
tslib: 2.8.1
+ '@tanstack/query-core@5.101.1': {}
+
+ '@tanstack/query-devtools@5.101.1': {}
+
+ '@tanstack/react-query-devtools@5.101.1(@tanstack/react-query@5.101.1(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@tanstack/query-devtools': 5.101.1
+ '@tanstack/react-query': 5.101.1(react@19.2.0)
+ react: 19.2.0
+
+ '@tanstack/react-query@5.101.1(react@19.2.0)':
+ dependencies:
+ '@tanstack/query-core': 5.101.1
+ react: 19.2.0
+
'@turbo/darwin-64@2.9.18':
optional: true
@@ -2340,6 +2432,12 @@ snapshots:
acorn@8.15.0: {}
+ agent-base@6.0.2:
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
@@ -2414,10 +2512,22 @@ snapshots:
async-function@1.0.0: {}
+ asynckit@0.4.0: {}
+
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.1.0
+ axios@1.18.1:
+ dependencies:
+ follow-redirects: 1.16.0
+ form-data: 4.0.6
+ https-proxy-agent: 5.0.1
+ proxy-from-env: 2.1.0
+ transitivePeerDependencies:
+ - debug
+ - supports-color
+
balanced-match@1.0.2: {}
baseline-browser-mapping@2.10.8: {}
@@ -2473,6 +2583,10 @@ snapshots:
color-name@1.1.4: {}
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
concat-map@0.0.1: {}
cross-spawn@7.0.6:
@@ -2519,6 +2633,8 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
+ delayed-stream@1.0.0: {}
+
detect-libc@2.1.2:
optional: true
@@ -2625,7 +2741,7 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.3.0
has-tostringtag: 1.0.2
- hasown: 2.0.2
+ hasown: 2.0.4
es-shim-unscopables@1.1.0:
dependencies:
@@ -2814,10 +2930,20 @@ snapshots:
flatted@3.3.3: {}
+ follow-redirects@1.16.0: {}
+
for-each@0.3.5:
dependencies:
is-callable: 1.2.7
+ form-data@4.0.6:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.4
+ mime-types: 2.1.35
+
function-bind@1.1.2: {}
function.prototype.name@1.1.8:
@@ -2841,7 +2967,7 @@ snapshots:
get-proto: 1.0.1
gopd: 1.2.0
has-symbols: 1.1.0
- hasown: 2.0.2
+ hasown: 2.0.4
math-intrinsics: 1.1.0
get-proto@1.0.1:
@@ -2896,6 +3022,17 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ hasown@2.0.4:
+ dependencies:
+ function-bind: 1.1.2
+
+ https-proxy-agent@5.0.1:
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
iconv-lite@0.7.2:
dependencies:
safer-buffer: 2.1.2
@@ -3086,6 +3223,12 @@ snapshots:
braces: 3.0.3
picomatch: 2.3.1
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.12
@@ -3219,6 +3362,8 @@ snapshots:
object-assign: 4.1.1
react-is: 16.13.1
+ proxy-from-env@2.1.0: {}
+
punycode@2.3.1: {}
queue-microtask@1.2.3: {}
From c776a8693c7bcba98ef3974a065b0fa232942eb4 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Thu, 25 Jun 2026 02:20:58 +0900
Subject: [PATCH 079/789] =?UTF-8?q?init(web):=20TanStack=20Query=20&=20Axi?=
=?UTF-8?q?os=20=EC=B4=88=EA=B8=B0=20=EC=84=B8=ED=8C=85=20(#17)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- axios 공통 인스턴스를 생성했습니다
- QueryClient 및 QueryClientProvider를 설정했습니다
- Provider를 레이아웃에 연결했습니다
Co-Authored-By: Claude Sonnet 4.6
---
apps/timo-web/app/layout.tsx | 5 ++++-
apps/timo-web/lib/.gitkeep | 0
apps/timo-web/lib/axios.ts | 14 ++++++++++++++
apps/timo-web/lib/providers.tsx | 14 ++++++++++++++
apps/timo-web/lib/query-client.ts | 12 ++++++++++++
5 files changed, 44 insertions(+), 1 deletion(-)
delete mode 100644 apps/timo-web/lib/.gitkeep
create mode 100644 apps/timo-web/lib/axios.ts
create mode 100644 apps/timo-web/lib/providers.tsx
create mode 100644 apps/timo-web/lib/query-client.ts
diff --git a/apps/timo-web/app/layout.tsx b/apps/timo-web/app/layout.tsx
index f8a817c3..d76ee95f 100644
--- a/apps/timo-web/app/layout.tsx
+++ b/apps/timo-web/app/layout.tsx
@@ -1,4 +1,5 @@
import type { Metadata } from "next";
+import Providers from "../lib/providers";
export const metadata: Metadata = {
title: "Timo",
@@ -12,7 +13,9 @@ export default function RootLayout({
}>) {
return (
- {children}
+
+ {children}
+
);
}
diff --git a/apps/timo-web/lib/.gitkeep b/apps/timo-web/lib/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/lib/axios.ts b/apps/timo-web/lib/axios.ts
new file mode 100644
index 00000000..c3dc67d2
--- /dev/null
+++ b/apps/timo-web/lib/axios.ts
@@ -0,0 +1,14 @@
+import axios from "axios";
+
+export const instance = axios.create({
+ baseURL: process.env.NEXT_PUBLIC_API_BASE_URL,
+});
+
+instance.interceptors.response.use(
+ (response) => response,
+ (error) => {
+ const status = error?.response?.status;
+ // 추후 인증 방식 확정 후 에러 핸들링 추가
+ return Promise.reject(error);
+ },
+);
diff --git a/apps/timo-web/lib/providers.tsx b/apps/timo-web/lib/providers.tsx
new file mode 100644
index 00000000..26e59877
--- /dev/null
+++ b/apps/timo-web/lib/providers.tsx
@@ -0,0 +1,14 @@
+"use client";
+
+import { QueryClientProvider } from "@tanstack/react-query";
+import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
+import { queryClient } from "./query-client";
+
+export default function Providers({ children }: { children: React.ReactNode }) {
+ return (
+
+ {children}
+
+
+ );
+}
diff --git a/apps/timo-web/lib/query-client.ts b/apps/timo-web/lib/query-client.ts
new file mode 100644
index 00000000..b6ec2fcc
--- /dev/null
+++ b/apps/timo-web/lib/query-client.ts
@@ -0,0 +1,12 @@
+import { QueryClient } from "@tanstack/react-query";
+
+export const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ retry: 1,
+ staleTime: 1000 * 60 * 5,
+ gcTime: 1000 * 60 * 10,
+ refetchOnWindowFocus: false,
+ },
+ },
+});
From 0a02c298b11b44f269e06ea3c36a4ef52f06c553 Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Thu, 25 Jun 2026 03:02:30 +0900
Subject: [PATCH 080/789] =?UTF-8?q?chore(config):=20App=20Router=20?=
=?UTF-8?q?=ED=8A=B9=EC=88=98=20=ED=8C=8C=EC=9D=BC=20ESLint=20=EC=98=88?=
=?UTF-8?q?=EC=99=B8=20=EC=B6=94=EA=B0=80=20(#13)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Next.js App Router 예약 파일(page, layout, loading, error 등)은 export default function 형식이 표준이라 arrow-function 강제 규칙에서 제외했습니다
---
packages/eslint-config/next.js | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/packages/eslint-config/next.js b/packages/eslint-config/next.js
index 2ba7af67..a49d88fd 100644
--- a/packages/eslint-config/next.js
+++ b/packages/eslint-config/next.js
@@ -9,6 +9,13 @@ import globals from "globals";
import pluginNext from "@next/eslint-plugin-next";
import { config as baseConfig } from "./base.js";
+/**
+ * Next.js App Router는 page/layout 등 예약 파일에서 `export default function Page() {}`
+ * 형식의 함수 선언을 표준으로 사용하므로, 해당 파일들은 arrow-function 강제 규칙에서 제외한다.
+ */
+const APP_ROUTER_SPECIAL_FILES =
+ "**/app/**/{page,layout,loading,error,global-error,not-found,template,default,route}.{js,jsx,ts,tsx}";
+
/**
* A custom ESLint configuration for libraries that use Next.js.
*
@@ -65,4 +72,10 @@ export const nextJsConfig = [
},
},
pluginJsxA11y.flatConfigs.recommended,
+ {
+ files: [APP_ROUTER_SPECIAL_FILES],
+ rules: {
+ "react/function-component-definition": "off",
+ },
+ },
];
From 6faeea64969427a431dc1617d590a20c6d6256da Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Thu, 25 Jun 2026 03:03:24 +0900
Subject: [PATCH 081/789] =?UTF-8?q?refactor(web):=20App=20Router=20?=
=?UTF-8?q?=ED=8A=B9=EC=88=98=20=ED=8C=8C=EC=9D=BC=EC=9D=84=20function=20d?=
=?UTF-8?q?eclaration=EC=9C=BC=EB=A1=9C=20=EB=90=98=EB=8F=8C=EB=A6=BC=20(#?=
=?UTF-8?q?13)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 변경된 컨벤션에 맞춰 named export·arrow function을 export default function Page() {} 형식으로 되돌렸습니다
---
apps/timo-web/app/(auth)/login/page.tsx | 6 ++----
apps/timo-web/app/(auth)/signup/page.tsx | 6 ++----
apps/timo-web/app/layout.tsx | 6 ++----
apps/timo-web/app/page.tsx | 6 ++----
4 files changed, 8 insertions(+), 16 deletions(-)
diff --git a/apps/timo-web/app/(auth)/login/page.tsx b/apps/timo-web/app/(auth)/login/page.tsx
index 08adf11e..428f4881 100644
--- a/apps/timo-web/app/(auth)/login/page.tsx
+++ b/apps/timo-web/app/(auth)/login/page.tsx
@@ -1,5 +1,3 @@
-export const LoginPage = () => {
+export default function LoginPage() {
return <>>;
-};
-
-export default LoginPage;
+}
diff --git a/apps/timo-web/app/(auth)/signup/page.tsx b/apps/timo-web/app/(auth)/signup/page.tsx
index 687e2c7b..cf8714a9 100644
--- a/apps/timo-web/app/(auth)/signup/page.tsx
+++ b/apps/timo-web/app/(auth)/signup/page.tsx
@@ -1,5 +1,3 @@
-export const SignupPage = () => {
+export default function SignupPage() {
return <>>;
-};
-
-export default SignupPage;
+}
diff --git a/apps/timo-web/app/layout.tsx b/apps/timo-web/app/layout.tsx
index 75871973..ee168795 100644
--- a/apps/timo-web/app/layout.tsx
+++ b/apps/timo-web/app/layout.tsx
@@ -9,12 +9,10 @@ interface RootLayoutProps {
children: React.ReactNode;
}
-export const RootLayout = ({ children }: Readonly) => {
+export default function RootLayout({ children }: Readonly) {
return (
{children}
);
-};
-
-export default RootLayout;
+}
diff --git a/apps/timo-web/app/page.tsx b/apps/timo-web/app/page.tsx
index 7713123f..35f243c3 100644
--- a/apps/timo-web/app/page.tsx
+++ b/apps/timo-web/app/page.tsx
@@ -1,5 +1,3 @@
-export const Home = () => {
+export default function Home() {
return <>Hi Timo>;
-};
-
-export default Home;
+}
From 1d28219ff2c906e9883510f3957b432f41bc3de1 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 25 Jun 2026 11:03:02 +0900
Subject: [PATCH 082/789] =?UTF-8?q?ci(root):=20label-pr=20=EC=9E=A1=20?=
=?UTF-8?q?=EB=9D=BC=EB=B2=A8=20=EC=A4=91=EB=B3=B5=20=EC=B2=98=EB=A6=AC=20?=
=?UTF-8?q?=EB=B0=A9=EC=A7=80=20=EB=B0=8F=20=EC=88=9C=EC=B0=A8=20=EC=8B=A4?=
=?UTF-8?q?=ED=96=89=20=EC=A0=81=EC=9A=A9=20(#8)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- label-pr 잡이 label-by-files 완료 후 실행되도록 needs 의존성을 추가했습니다
- prefix 라벨이 이미 올바르게 설정된 경우 불필요한 remove → add 사이클을 방지했습니다
- 작성자 라벨이 이미 존재하면 재추가하지 않도록 중복 체크를 추가했습니다
---
.github/workflows/auto-label.yml | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml
index b89e64fb..c0dddd89 100644
--- a/.github/workflows/auto-label.yml
+++ b/.github/workflows/auto-label.yml
@@ -24,6 +24,7 @@ jobs:
label-pr:
if: github.event_name == 'pull_request' && github.event.action != 'synchronize'
+ needs: label-by-files
permissions:
pull-requests: write
runs-on: ubuntu-latest
@@ -56,19 +57,22 @@ jobs:
'yumin-kim2': '♣️ 유민',
};
+ const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: prNumber,
+ });
+ const currentLabelNames = new Set(currentLabels.map(l => l.name));
+
// --- prefix 라벨 ---
// edited 이벤트는 본문 수정만으로도 트리거되므로 제목 변경 여부를 확인
if (action !== 'edited' || context.payload.changes?.title) {
const allPrefixLabels = [...new Set(Object.values(prefixMap))];
const match = Object.entries(prefixMap).find(([prefix]) => pr.title.startsWith(prefix));
+ const desiredLabel = match ? match[1] : null;
- const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({
- owner: context.repo.owner,
- repo: context.repo.repo,
- issue_number: prNumber,
- });
for (const label of currentLabels) {
- if (allPrefixLabels.includes(label.name)) {
+ if (allPrefixLabels.includes(label.name) && label.name !== desiredLabel) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
@@ -77,20 +81,20 @@ jobs:
});
}
}
- if (match) {
+ if (desiredLabel && !currentLabelNames.has(desiredLabel)) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
- labels: [match[1]],
+ labels: [desiredLabel],
});
}
}
- // --- 작성자 라벨 (opened / reopened 시에만) ---
+ // --- 작성자 라벨 (opened / reopened 시에만, 이미 있으면 생략) ---
if (action === 'opened' || action === 'reopened') {
const label = authorMap[pr.user.login];
- if (label) {
+ if (label && !currentLabelNames.has(label)) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
From 222fcfa7411078559a185d92d158da0412700364 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 25 Jun 2026 11:10:31 +0900
Subject: [PATCH 083/789] =?UTF-8?q?ci(root):=20=EC=9D=B4=EC=8A=88=20[REFAC?=
=?UTF-8?q?TOR]=20=EB=9D=BC=EB=B2=A8=20=EB=A7=A4=ED=95=91=EC=9D=84=20PR?=
=?UTF-8?q?=EA=B3=BC=20=ED=86=B5=EC=9D=BC=20(#8)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 이슈의 [REFACTOR] prefix 매핑을 🧹 CHORE에서 ♻ Refactor로 수정했습니다
---
.github/workflows/auto-issue.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/auto-issue.yml b/.github/workflows/auto-issue.yml
index 9ad14dea..4b7b6d25 100644
--- a/.github/workflows/auto-issue.yml
+++ b/.github/workflows/auto-issue.yml
@@ -23,7 +23,7 @@ jobs:
'[DOCS]': '📝 Docs',
'[CI]': '😎 DevOps',
'[TEST]': '🌊 TEST',
- '[REFACTOR]': '🧹 CHORE',
+ '[REFACTOR]': '♻ Refactor',
'[UI]': '⌚ Timo-Design-system',
'[STYLE]': '⌚ Timo-Design-system',
'[PERF]': '✨ Feature',
From 17ade8f3e5141c0360512c6225667f644a7526ab Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 25 Jun 2026 11:35:00 +0900
Subject: [PATCH 084/789] =?UTF-8?q?docs(agents):=20timo-pr=20=EC=8A=A4?=
=?UTF-8?q?=ED=82=AC=20PR=20=EB=B3=B8=EB=AC=B8=20=EA=B5=AC=EC=A1=B0=20?=
=?UTF-8?q?=EA=B0=9C=EC=84=A0=20(#18)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.agents/skills/git/timo-pr/SKILL.md | 56 +++++++++++++++++++----------
1 file changed, 37 insertions(+), 19 deletions(-)
diff --git a/.agents/skills/git/timo-pr/SKILL.md b/.agents/skills/git/timo-pr/SKILL.md
index a1836061..8107ed0f 100644
--- a/.agents/skills/git/timo-pr/SKILL.md
+++ b/.agents/skills/git/timo-pr/SKILL.md
@@ -149,17 +149,19 @@ close #5
이번 PR에서 무엇을 했는지 전체를 한두 문장으로 요약한다.
-#### 2. 배경 — 기존 동작과 문제
+#### 2. 배경
-기존에 어떤 구조였는지, 그 구조에서 어떤 문제가 발생했는지를 먼저 설명한다.
+`## 배경` 헤더를 쓰고, 아래 세 항목을 불릿(`-`)으로 나열한다. 각 항목은 **굵게** 레이블을 붙인다.
-좋은 예:
-```
-기존에는 클라이언트에서 로그인 상태를 확인한 뒤 query가 실행되는 구조라
-첫 진입 시 서버에서 목록 데이터를 준비하기 어려웠습니다.
+```markdown
+## 배경
+
+- **기존 구조**: 클라이언트에서 로그인 상태를 확인한 뒤 query가 실행되는 구조였습니다.
+- **발생 문제**: 첫 진입 시 서버에서 목록 데이터를 준비하기 어려워 초기 렌더링이 빈 상태로 표시됐습니다.
+- **해결 방향**: 인증 흐름을 서버 컴포넌트 단으로 올려 SSR이 가능한 구조로 전환했습니다.
```
-피해야 할 예:
+피해야 할 예 (레이블 없이 완료 항목만 나열):
```
- 탐색 SSR 적용
- query 파일 분리
@@ -169,16 +171,24 @@ close #5
#### 3. 변경 도메인별 섹션
변경된 도메인·컴포넌트·기능 단위로 `## 섹션명` 헤더를 나눠 서술한다.
-각 섹션 안에 **왜 그렇게 했는지 이유**를 자연스럽게 녹인다.
+각 섹션은 아래 네 항목을 불릿(`-`)으로 나열한다. 각 항목은 **굵게** 레이블을 붙인다.
+
+```markdown
+## {도메인명}
-구조 변경이 있으면 "왜"를 반드시 적는다:
-- server/client 런타임 경계를 나눈 이유
-- 모듈 분리 기준 (shared/base/options/server 등)
-- 중복을 허용하거나 공통화를 미룬 이유
+- **변경 요약**: 이 도메인에서 무엇을 바꿨는지 한 줄로 요약합니다.
+- **이유**: 왜 이 변경이 필요했는지 — 기존 구조의 한계나 버그 원인을 구체적으로 설명합니다.
+- **구현 방식**: 어떻게 해결했는지 — 선택한 접근과 고려한 대안을 간략히 설명합니다.
+- **경계 · 제약**: server/client 경계, 모듈 분리 기준, 의도적으로 제외한 범위 등을 적습니다. (없으면 생략)
+```
-#### 4. 구현 선택
+항목별 작성 기준:
+- **변경 요약**: 동사로 시작하는 단문. "~를 추가했습니다", "~를 분리했습니다"
+- **이유**: "기존에는 ~였기 때문에", "~가 발생해서" 형식으로 원인을 명확히
+- **구현 방식**: 선택한 방법 + 대안이 있었다면 왜 택하지 않았는지
+- **경계 · 제약**: 런타임 경계(server/client), 모듈 분리 단위(shared/base/options 등), 중복 허용 이유
-선택한 접근과 고려한 대안을 적는다. interface나 경계를 짧은 코드 블록으로 보여줄 수 있다. 긴 구현 전체를 붙이지 않는다.
+핵심 interface나 패턴이 있으면 짧은 코드 블록으로 보여줄 수 있다. 긴 구현 전체는 붙이지 않는다.
예시:
```markdown
@@ -186,16 +196,24 @@ close #5
로그인 페이지의 반응형 레이아웃을 수정하고, 토큰 갱신 로직에서 발생하던 경쟁 조건을 해결했습니다.
+## 배경
+
+- **기존 구조**: 리프레시 요청이 여러 탭에서 동시에 발생할 수 있는 구조였습니다.
+- **발생 문제**: 중복 요청으로 인해 먼저 완료된 토큰이 덮어씌워지는 경쟁 조건이 간헐적으로 발생했습니다.
+- **해결 방향**: 요청을 큐에 넣어 순차 처리하고, 서버·클라이언트가 동일한 query key를 공유하는 구조로 재편했습니다.
+
## 로그인 페이지
-모바일에서 폼 너비가 뷰포트를 넘어가는 문제가 있어 max-w 기준을 lg로 통일했습니다.
+- **변경 요약**: 모바일 환경에서 폼 컨테이너 최대 너비 기준을 통일했습니다.
+- **이유**: 375px 이하에서 폼 너비가 뷰포트를 초과해 가로 스크롤이 발생했습니다.
+- **구현 방식**: `max-w-sm` / `max-w-md` 혼용을 제거하고 `max-w-lg`로 단일화했습니다. Tailwind 반응형 prefix를 추가하는 방법도 검토했으나, 디자인 토큰 기준과 일치하지 않아 제외했습니다.
## 토큰 갱신
-리프레시 요청이 동시에 여러 번 발생하던 문제를 큐 방식으로 해결했습니다.
-서버와 클라이언트가 같은 query key를 사용하도록 options/server/shared 단위로 분리했습니다.
-이로써 초기 화면은 서버에서 준비한 데이터를 기반으로 렌더링되고,
-클라이언트에서는 추가 요청 없이 같은 cache를 이어받을 수 있습니다.
+- **변경 요약**: 리프레시 요청 중복 실행을 큐 방식으로 직렬화했습니다.
+- **이유**: 동시 요청이 발생하면 먼저 완료된 토큰이 이후 응답으로 덮어씌워져 인증이 끊기는 문제가 있었습니다.
+- **구현 방식**: pending 상태에서 들어오는 요청을 queue에 쌓아 두고, 리프레시 완료 후 일괄 resolve하는 방식을 선택했습니다.
+- **경계 · 제약**: query key를 options / server / shared 세 단위로 분리해 서버 컴포넌트와 클라이언트가 같은 cache를 이어받을 수 있도록 했습니다. 리프레시 실패 시 fallback은 이번 PR 범위 밖이며 후속 작업으로 남깁니다.
```
---
From 60b03c7470a67119042a7c9bb917b54eabe8fbee Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 25 Jun 2026 11:35:09 +0900
Subject: [PATCH 085/789] =?UTF-8?q?docs(github):=20PR=20=ED=85=9C=ED=94=8C?=
=?UTF-8?q?=EB=A6=BF=20To=20Reviewers=20=EC=84=B9=EC=85=98=20=EA=B5=AC?=
=?UTF-8?q?=EB=B6=84=20=EC=A4=84=20=EC=B6=94=EA=B0=80=20(#18)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/PULL_REQUEST_TEPLATE.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/PULL_REQUEST_TEPLATE.md b/.github/PULL_REQUEST_TEPLATE.md
index 9bbbacfd..1d4ced8a 100644
--- a/.github/PULL_REQUEST_TEPLATE.md
+++ b/.github/PULL_REQUEST_TEPLATE.md
@@ -14,6 +14,8 @@
+
+
## Screenshot 📷
From 1eccddecb4dc4b6521951ce1efa4620f231964d6 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 25 Jun 2026 11:46:44 +0900
Subject: [PATCH 086/789] =?UTF-8?q?docs(agents):=20timo-pr=20=EC=8A=A4?=
=?UTF-8?q?=ED=82=AC=20MD031=20lint=20=EC=88=98=EC=A0=95=20(#18)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.agents/skills/git/timo-pr/SKILL.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/.agents/skills/git/timo-pr/SKILL.md b/.agents/skills/git/timo-pr/SKILL.md
index 8107ed0f..fe570067 100644
--- a/.agents/skills/git/timo-pr/SKILL.md
+++ b/.agents/skills/git/timo-pr/SKILL.md
@@ -162,6 +162,7 @@ close #5
```
피해야 할 예 (레이블 없이 완료 항목만 나열):
+
```
- 탐색 SSR 적용
- query 파일 분리
@@ -191,6 +192,7 @@ close #5
핵심 interface나 패턴이 있으면 짧은 코드 블록으로 보여줄 수 있다. 긴 구현 전체는 붙이지 않는다.
예시:
+
```markdown
## What is this PR? 🔍
@@ -230,6 +232,7 @@ reviewer가 중점적으로 봐야 할 지점을 좁혀 준다. 별도 항목
- 임시 fixture, mock, TODO
예시:
+
```markdown
## To Reviewers
From 4b23ce52bef585851da0b1e9b9ff2ec55832a04b Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 25 Jun 2026 11:55:59 +0900
Subject: [PATCH 087/789] =?UTF-8?q?docs(agents):=20timo-pr=20=EC=8A=A4?=
=?UTF-8?q?=ED=82=AC=20=EA=B5=AC=ED=98=84=20=EB=B0=A9=EC=8B=9D=20=EC=9E=91?=
=?UTF-8?q?=EC=84=B1=20=EA=B8=B0=EC=A4=80=20=EA=B0=95=ED=99=94=20(#18)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.agents/skills/git/timo-pr/SKILL.md | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/.agents/skills/git/timo-pr/SKILL.md b/.agents/skills/git/timo-pr/SKILL.md
index fe570067..6afd5720 100644
--- a/.agents/skills/git/timo-pr/SKILL.md
+++ b/.agents/skills/git/timo-pr/SKILL.md
@@ -179,18 +179,16 @@ close #5
- **변경 요약**: 이 도메인에서 무엇을 바꿨는지 한 줄로 요약합니다.
- **이유**: 왜 이 변경이 필요했는지 — 기존 구조의 한계나 버그 원인을 구체적으로 설명합니다.
-- **구현 방식**: 어떻게 해결했는지 — 선택한 접근과 고려한 대안을 간략히 설명합니다.
+- **구현 방식**: 실제로 어떻게 동작하는지 메커니즘을 설명합니다. 핵심 설정값·데이터 흐름·패턴을 구체적으로 적고, 인터페이스가 비자명하면 코드 블록으로 보여줍니다. 대안을 검토했다면 선택하지 않은 이유도 함께 적습니다.
- **경계 · 제약**: server/client 경계, 모듈 분리 기준, 의도적으로 제외한 범위 등을 적습니다. (없으면 생략)
```
항목별 작성 기준:
- **변경 요약**: 동사로 시작하는 단문. "~를 추가했습니다", "~를 분리했습니다"
- **이유**: "기존에는 ~였기 때문에", "~가 발생해서" 형식으로 원인을 명확히
-- **구현 방식**: 선택한 방법 + 대안이 있었다면 왜 택하지 않았는지
+- **구현 방식**: "무엇을 했다"가 아니라 "어떻게 동작하는가"를 중심으로 쓴다. 핵심 설정값·데이터 흐름·동작 순서를 구체적으로 서술하고, 인터페이스나 설정이 비자명하면 짧은 코드 블록으로 보여준다. 대안을 검토했다면 선택하지 않은 이유도 함께 적는다. 긴 구현 전체는 붙이지 않는다.
- **경계 · 제약**: 런타임 경계(server/client), 모듈 분리 단위(shared/base/options 등), 중복 허용 이유
-핵심 interface나 패턴이 있으면 짧은 코드 블록으로 보여줄 수 있다. 긴 구현 전체는 붙이지 않는다.
-
예시:
```markdown
@@ -208,13 +206,13 @@ close #5
- **변경 요약**: 모바일 환경에서 폼 컨테이너 최대 너비 기준을 통일했습니다.
- **이유**: 375px 이하에서 폼 너비가 뷰포트를 초과해 가로 스크롤이 발생했습니다.
-- **구현 방식**: `max-w-sm` / `max-w-md` 혼용을 제거하고 `max-w-lg`로 단일화했습니다. Tailwind 반응형 prefix를 추가하는 방법도 검토했으나, 디자인 토큰 기준과 일치하지 않아 제외했습니다.
+- **구현 방식**: `max-w-sm` / `max-w-md`가 혼용된 컨테이너를 `max-w-lg w-full`로 통일했습니다. `w-full`로 뷰포트보다 좁으면 꽉 채우고, `max-w-lg`로 넓을 때는 상한에서 중앙 정렬되도록 합니다. 브레이크포인트마다 다른 max-w를 주는 방법(`sm:max-w-md lg:max-w-lg`)도 검토했으나, 디자인 토큰 기준과 맞지 않아 제외했습니다.
## 토큰 갱신
- **변경 요약**: 리프레시 요청 중복 실행을 큐 방식으로 직렬화했습니다.
- **이유**: 동시 요청이 발생하면 먼저 완료된 토큰이 이후 응답으로 덮어씌워져 인증이 끊기는 문제가 있었습니다.
-- **구현 방식**: pending 상태에서 들어오는 요청을 queue에 쌓아 두고, 리프레시 완료 후 일괄 resolve하는 방식을 선택했습니다.
+- **구현 방식**: `isRefreshing` 플래그로 리프레시 진행 여부를 추적합니다. 리프레시 중에 들어오는 요청은 Promise 형태로 `failedQueue`에 쌓아 두고, 리프레시 완료 후 성공이면 queue 전체를 resolve, 실패면 reject해 대기 요청을 일괄 처리합니다. interceptor 반환값을 Promise로 감싸야 axios가 해당 요청의 응답을 리프레시 이후로 미룰 수 있습니다.
- **경계 · 제약**: query key를 options / server / shared 세 단위로 분리해 서버 컴포넌트와 클라이언트가 같은 cache를 이어받을 수 있도록 했습니다. 리프레시 실패 시 fallback은 이번 PR 범위 밖이며 후속 작업으로 남깁니다.
```
From cdf21aab2d8ea98dd380d6d3187e3517405b40f7 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 25 Jun 2026 12:02:03 +0900
Subject: [PATCH 088/789] =?UTF-8?q?docs(agents):=20timo-pr=20=EC=8A=A4?=
=?UTF-8?q?=ED=82=AC=20=EB=B0=B0=EA=B2=BD=C2=B7=EB=8F=84=EB=A9=94=EC=9D=B8?=
=?UTF-8?q?=20=ED=97=A4=EB=8D=94=20=EB=A0=88=EB=B2=A8=20###=20=EB=A1=9C=20?=
=?UTF-8?q?=EB=B3=80=EA=B2=BD=20(#18)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.agents/skills/git/timo-pr/SKILL.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/.agents/skills/git/timo-pr/SKILL.md b/.agents/skills/git/timo-pr/SKILL.md
index 6afd5720..eb04189e 100644
--- a/.agents/skills/git/timo-pr/SKILL.md
+++ b/.agents/skills/git/timo-pr/SKILL.md
@@ -151,10 +151,10 @@ close #5
#### 2. 배경
-`## 배경` 헤더를 쓰고, 아래 세 항목을 불릿(`-`)으로 나열한다. 각 항목은 **굵게** 레이블을 붙인다.
+`### 배경` 헤더를 쓰고, 아래 세 항목을 불릿(`-`)으로 나열한다. 각 항목은 **굵게** 레이블을 붙인다.
```markdown
-## 배경
+### 배경
- **기존 구조**: 클라이언트에서 로그인 상태를 확인한 뒤 query가 실행되는 구조였습니다.
- **발생 문제**: 첫 진입 시 서버에서 목록 데이터를 준비하기 어려워 초기 렌더링이 빈 상태로 표시됐습니다.
@@ -171,11 +171,11 @@ close #5
#### 3. 변경 도메인별 섹션
-변경된 도메인·컴포넌트·기능 단위로 `## 섹션명` 헤더를 나눠 서술한다.
+변경된 도메인·컴포넌트·기능 단위로 `### 섹션명` 헤더를 나눠 서술한다.
각 섹션은 아래 네 항목을 불릿(`-`)으로 나열한다. 각 항목은 **굵게** 레이블을 붙인다.
```markdown
-## {도메인명}
+### {도메인명}
- **변경 요약**: 이 도메인에서 무엇을 바꿨는지 한 줄로 요약합니다.
- **이유**: 왜 이 변경이 필요했는지 — 기존 구조의 한계나 버그 원인을 구체적으로 설명합니다.
@@ -196,19 +196,19 @@ close #5
로그인 페이지의 반응형 레이아웃을 수정하고, 토큰 갱신 로직에서 발생하던 경쟁 조건을 해결했습니다.
-## 배경
+### 배경
- **기존 구조**: 리프레시 요청이 여러 탭에서 동시에 발생할 수 있는 구조였습니다.
- **발생 문제**: 중복 요청으로 인해 먼저 완료된 토큰이 덮어씌워지는 경쟁 조건이 간헐적으로 발생했습니다.
- **해결 방향**: 요청을 큐에 넣어 순차 처리하고, 서버·클라이언트가 동일한 query key를 공유하는 구조로 재편했습니다.
-## 로그인 페이지
+### 로그인 페이지
- **변경 요약**: 모바일 환경에서 폼 컨테이너 최대 너비 기준을 통일했습니다.
- **이유**: 375px 이하에서 폼 너비가 뷰포트를 초과해 가로 스크롤이 발생했습니다.
- **구현 방식**: `max-w-sm` / `max-w-md`가 혼용된 컨테이너를 `max-w-lg w-full`로 통일했습니다. `w-full`로 뷰포트보다 좁으면 꽉 채우고, `max-w-lg`로 넓을 때는 상한에서 중앙 정렬되도록 합니다. 브레이크포인트마다 다른 max-w를 주는 방법(`sm:max-w-md lg:max-w-lg`)도 검토했으나, 디자인 토큰 기준과 맞지 않아 제외했습니다.
-## 토큰 갱신
+### 토큰 갱신
- **변경 요약**: 리프레시 요청 중복 실행을 큐 방식으로 직렬화했습니다.
- **이유**: 동시 요청이 발생하면 먼저 완료된 토큰이 이후 응답으로 덮어씌워져 인증이 끊기는 문제가 있었습니다.
From 35d6f910314b531b3c69fe2ab5c00ea4e66f90f8 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Thu, 25 Jun 2026 16:18:54 +0900
Subject: [PATCH 089/789] =?UTF-8?q?chore(web):=20tsconfig=20=EA=B2=BD?=
=?UTF-8?q?=EB=A1=9C=20=EB=B3=84=EC=B9=AD(@/*)=20=EC=B6=94=EA=B0=80=20(#17?=
=?UTF-8?q?)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- baseUrl과 @/* 경로 별칭을 tsconfig에 추가했습니다
---
apps/timo-web/tsconfig.json | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/apps/timo-web/tsconfig.json b/apps/timo-web/tsconfig.json
index c0346be0..89d074f6 100644
--- a/apps/timo-web/tsconfig.json
+++ b/apps/timo-web/tsconfig.json
@@ -6,14 +6,12 @@
"name": "next"
}
],
- "strictNullChecks": true
+ "strictNullChecks": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./*"]
+ }
},
- "include": [
- "**/*.ts",
- "**/*.tsx",
- "next-env.d.ts",
- "next.config.js",
- ".next/types/**/*.ts"
- ],
+ "include": ["**/*.ts", "**/*.tsx", "next-env.d.ts", "next.config.js", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}
From a5349427d10082349c277c0418a855aaa77394d6 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Thu, 25 Jun 2026 16:19:06 +0900
Subject: [PATCH 090/789] =?UTF-8?q?file(web):=20lib=20=ED=8F=B4=EB=8D=94?=
=?UTF-8?q?=EB=A5=BC=20api=C2=B7providers=EB=A1=9C=20=EC=9E=AC=EB=B0=B0?=
=?UTF-8?q?=EC=B9=98=20(#17)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- lib에 있던 axios, query-client, QueryProvider 파일을 api/providers 폴더로 재배치하고 import 경로를 수정했습니다
---
apps/timo-web/{lib => api}/axios.ts | 0
apps/timo-web/api/query-client.ts | 16 ++++++++++++++++
apps/timo-web/app/layout.tsx | 4 ++--
apps/timo-web/lib/query-client.ts | 12 ------------
.../QueryProvider.tsx} | 11 ++++++++---
5 files changed, 26 insertions(+), 17 deletions(-)
rename apps/timo-web/{lib => api}/axios.ts (100%)
create mode 100644 apps/timo-web/api/query-client.ts
delete mode 100644 apps/timo-web/lib/query-client.ts
rename apps/timo-web/{lib/providers.tsx => providers/QueryProvider.tsx} (57%)
diff --git a/apps/timo-web/lib/axios.ts b/apps/timo-web/api/axios.ts
similarity index 100%
rename from apps/timo-web/lib/axios.ts
rename to apps/timo-web/api/axios.ts
diff --git a/apps/timo-web/api/query-client.ts b/apps/timo-web/api/query-client.ts
new file mode 100644
index 00000000..f87e19b4
--- /dev/null
+++ b/apps/timo-web/api/query-client.ts
@@ -0,0 +1,16 @@
+import { QueryClient } from "@tanstack/react-query";
+import { cache } from "react";
+
+export const getQueryClient = cache(
+ () =>
+ new QueryClient({
+ defaultOptions: {
+ queries: {
+ retry: 1,
+ staleTime: 1000 * 60 * 5,
+ gcTime: 1000 * 60 * 10,
+ refetchOnWindowFocus: false,
+ },
+ },
+ }),
+);
diff --git a/apps/timo-web/app/layout.tsx b/apps/timo-web/app/layout.tsx
index d76ee95f..7841364e 100644
--- a/apps/timo-web/app/layout.tsx
+++ b/apps/timo-web/app/layout.tsx
@@ -1,5 +1,5 @@
import type { Metadata } from "next";
-import Providers from "../lib/providers";
+import { QueryProvider } from "@/providers/QueryProvider";
export const metadata: Metadata = {
title: "Timo",
@@ -14,7 +14,7 @@ export default function RootLayout({
return (
- {children}
+ {children}
);
diff --git a/apps/timo-web/lib/query-client.ts b/apps/timo-web/lib/query-client.ts
deleted file mode 100644
index b6ec2fcc..00000000
--- a/apps/timo-web/lib/query-client.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { QueryClient } from "@tanstack/react-query";
-
-export const queryClient = new QueryClient({
- defaultOptions: {
- queries: {
- retry: 1,
- staleTime: 1000 * 60 * 5,
- gcTime: 1000 * 60 * 10,
- refetchOnWindowFocus: false,
- },
- },
-});
diff --git a/apps/timo-web/lib/providers.tsx b/apps/timo-web/providers/QueryProvider.tsx
similarity index 57%
rename from apps/timo-web/lib/providers.tsx
rename to apps/timo-web/providers/QueryProvider.tsx
index 26e59877..f7406b84 100644
--- a/apps/timo-web/lib/providers.tsx
+++ b/apps/timo-web/providers/QueryProvider.tsx
@@ -2,13 +2,18 @@
import { QueryClientProvider } from "@tanstack/react-query";
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
-import { queryClient } from "./query-client";
+import { getQueryClient } from "@/api/query-client";
-export default function Providers({ children }: { children: React.ReactNode }) {
+interface QueryProviderProps {
+ children: React.ReactNode;
+}
+
+export const QueryProvider = ({ children }: QueryProviderProps) => {
+ const queryClient = getQueryClient();
return (
{children}
);
-}
+};
From 917b9b795e23dd5152150a149647d6f7eaee1663 Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Thu, 25 Jun 2026 16:22:10 +0900
Subject: [PATCH 091/789] =?UTF-8?q?ci(root):=20PR=20=EA=B2=80=EC=A6=9D=20?=
=?UTF-8?q?=EC=9B=8C=ED=81=AC=ED=94=8C=EB=A1=9C=EC=9A=B0=20=EC=B6=94?=
=?UTF-8?q?=EA=B0=80=20(lint=C2=B7=ED=83=80=EC=9E=85=EC=B2=B4=ED=81=AC?=
=?UTF-8?q?=C2=B7=EB=B9=8C=EB=93=9C)=20(#22)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- PR이 main/develop을 대상으로 열릴 때 lint, check-types, build를 병렬 잡으로 실행하는 CI 워크플로우를 추가했습니다
---
.github/workflows/ci.yml | 71 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 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 00000000..9910f166
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,71 @@
+name: ✅ CI
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened]
+ branches: [main, develop]
+
+permissions:
+ contents: read
+
+concurrency:
+ group: ci-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ lint:
+ name: Lint
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: pnpm/action-setup@v4
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 24
+ cache: "pnpm"
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
+ - name: Lint
+ run: pnpm lint
+
+ check-types:
+ name: Type Check
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: pnpm/action-setup@v4
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 24
+ cache: "pnpm"
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
+ - name: Check types
+ run: pnpm check-types
+
+ build:
+ name: Build
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: pnpm/action-setup@v4
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 24
+ cache: "pnpm"
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
+ - name: Build
+ run: pnpm build
From ac2dac7699d9308e1c199fe444fe4b8a516bb9c9 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Thu, 25 Jun 2026 16:55:19 +0900
Subject: [PATCH 092/789] =?UTF-8?q?refactor(web):=20QueryClient=20?=
=?UTF-8?q?=EC=8B=B1=EA=B8=80=ED=86=A4=EC=9C=BC=EB=A1=9C=20=EB=B3=80?=
=?UTF-8?q?=EA=B2=BD=20(#17)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- cache()를 제거하고 QueryClient를 싱글톤 인스턴스로 변경했습니다
- ReactQueryDevtools를 개발 환경에서만 렌더링하도록 수정했습니다
---
apps/timo-web/api/query-client.ts | 24 ++++++++++-------------
apps/timo-web/providers/QueryProvider.tsx | 5 ++---
2 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/apps/timo-web/api/query-client.ts b/apps/timo-web/api/query-client.ts
index f87e19b4..b6ec2fcc 100644
--- a/apps/timo-web/api/query-client.ts
+++ b/apps/timo-web/api/query-client.ts
@@ -1,16 +1,12 @@
import { QueryClient } from "@tanstack/react-query";
-import { cache } from "react";
-export const getQueryClient = cache(
- () =>
- new QueryClient({
- defaultOptions: {
- queries: {
- retry: 1,
- staleTime: 1000 * 60 * 5,
- gcTime: 1000 * 60 * 10,
- refetchOnWindowFocus: false,
- },
- },
- }),
-);
+export const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ retry: 1,
+ staleTime: 1000 * 60 * 5,
+ gcTime: 1000 * 60 * 10,
+ refetchOnWindowFocus: false,
+ },
+ },
+});
diff --git a/apps/timo-web/providers/QueryProvider.tsx b/apps/timo-web/providers/QueryProvider.tsx
index f7406b84..0504ba00 100644
--- a/apps/timo-web/providers/QueryProvider.tsx
+++ b/apps/timo-web/providers/QueryProvider.tsx
@@ -2,18 +2,17 @@
import { QueryClientProvider } from "@tanstack/react-query";
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
-import { getQueryClient } from "@/api/query-client";
+import { queryClient } from "@/api/query-client";
interface QueryProviderProps {
children: React.ReactNode;
}
export const QueryProvider = ({ children }: QueryProviderProps) => {
- const queryClient = getQueryClient();
return (
{children}
-
+ {process.env.NODE_ENV === "development" ? : null}
);
};
From 5fbc38d8eb0a6b7165621077b11410743728a11f Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Thu, 25 Jun 2026 16:55:25 +0900
Subject: [PATCH 093/789] =?UTF-8?q?chore(web):=20tsconfig=20ignoreDeprecat?=
=?UTF-8?q?ions=20=EC=98=B5=EC=85=98=20=EC=B6=94=EA=B0=80=20(#17)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- TypeScript 6.0 deprecation 경고를 무시하는 옵션을 추가했습니다
---
apps/timo-web/tsconfig.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/apps/timo-web/tsconfig.json b/apps/timo-web/tsconfig.json
index 89d074f6..12ed721f 100644
--- a/apps/timo-web/tsconfig.json
+++ b/apps/timo-web/tsconfig.json
@@ -1,6 +1,7 @@
{
"extends": "@repo/typescript-config/nextjs.json",
"compilerOptions": {
+ "ignoreDeprecations": "6.0",
"plugins": [
{
"name": "next"
From c58fe350e6adb70ffb6a437bbb8bbfdd7be88c60 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Thu, 25 Jun 2026 16:55:31 +0900
Subject: [PATCH 094/789] =?UTF-8?q?chore(root):=20turbo=20globalEnv?=
=?UTF-8?q?=EC=97=90=20NODE=5FENV=20=EC=B6=94=EA=B0=80=20(#17)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- NODE_ENV를 turbo globalEnv에 등록했습니다
---
turbo.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/turbo.json b/turbo.json
index 6bde2596..89168d98 100644
--- a/turbo.json
+++ b/turbo.json
@@ -1,6 +1,7 @@
{
"$schema": "https://turborepo.dev/schema.json",
"ui": "tui",
+ "globalEnv": ["NODE_ENV"],
"tasks": {
"build": {
"dependsOn": ["^build"],
From 5e21bc25287ca4d3b63f1b6b766ee4b2838c2c0b Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Thu, 25 Jun 2026 20:50:27 +0900
Subject: [PATCH 095/789] =?UTF-8?q?chore(ui):=20Storybook=20=EC=9D=98?=
=?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EB=B0=8F=20=EC=8B=A4=ED=96=89=20=EC=8A=A4?=
=?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/timo-design-system/package.json | 7 +-
pnpm-lock.yaml | 2337 ++++++++++++++++++++--
2 files changed, 2191 insertions(+), 153 deletions(-)
diff --git a/packages/timo-design-system/package.json b/packages/timo-design-system/package.json
index b3e02314..343e7fcf 100644
--- a/packages/timo-design-system/package.json
+++ b/packages/timo-design-system/package.json
@@ -8,15 +8,20 @@
"scripts": {
"lint": "eslint . --max-warnings 0",
"generate:component": "turbo gen react-component",
- "check-types": "tsc --noEmit"
+ "check-types": "tsc --noEmit",
+ "storybook": "storybook dev -p 6006",
+ "build-storybook": "storybook build"
},
"devDependencies": {
"@repo/eslint-config": "workspace:*",
"@repo/typescript-config": "workspace:*",
+ "@storybook/addon-links": "^10.4.6",
+ "@storybook/react-vite": "^10.4.6",
"@types/node": "^22.15.3",
"@types/react": "19.2.2",
"@types/react-dom": "19.2.2",
"eslint": "^9.39.1",
+ "storybook": "^10.4.6",
"typescript": "5.9.2"
},
"dependencies": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b0af7a8a..84699399 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -109,6 +109,12 @@ importers:
'@repo/typescript-config':
specifier: workspace:*
version: link:../typescript-config
+ '@storybook/addon-links':
+ specifier: ^10.4.6
+ version: 10.4.6(@types/react@19.2.2)(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))
+ '@storybook/react-vite':
+ specifier: ^10.4.6
+ version: 10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(esbuild@0.25.12)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12))
'@types/node':
specifier: ^22.15.3
version: 22.15.3
@@ -121,6 +127,9 @@ importers:
eslint:
specifier: ^9.39.1
version: 9.39.1
+ storybook:
+ specifier: ^10.4.6
+ version: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
typescript:
specifier: 5.9.2
version: 5.9.2
@@ -129,9 +138,107 @@ importers:
packages:
+ '@adobe/css-tools@4.5.0':
+ resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==}
+
+ '@babel/code-frame@7.29.7':
+ resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.29.7':
+ resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.29.7':
+ resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.29.7':
+ resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.29.7':
+ resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.29.7':
+ resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.29.7':
+ resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.29.7':
+ resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-string-parser@7.29.7':
+ resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.29.7':
+ resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.29.7':
+ resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.29.7':
+ resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.7':
+ resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/runtime@7.29.7':
+ resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.29.7':
+ resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.29.7':
+ resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.29.7':
+ resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
+ engines: {node: '>=6.9.0'}
+
+ '@emnapi/core@1.11.0':
+ resolution: {integrity: sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==}
+
+ '@emnapi/core@1.11.1':
+ resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
+
+ '@emnapi/core@1.9.2':
+ resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==}
+
+ '@emnapi/runtime@1.11.0':
+ resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==}
+
+ '@emnapi/runtime@1.11.1':
+ resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
+
'@emnapi/runtime@1.7.1':
resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
+ '@emnapi/runtime@1.9.2':
+ resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==}
+
+ '@emnapi/wasi-threads@1.2.1':
+ resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
+
+ '@emnapi/wasi-threads@1.2.2':
+ resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
+
'@esbuild/aix-ppc64@0.25.12':
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
engines: {node: '>=18'}
@@ -613,6 +720,37 @@ packages:
'@types/node':
optional: true
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0':
+ resolution: {integrity: sha512-qvsTEwEFefhdirGOPnu9Wp6ChfIwy2dBCRuETU3uE+4cC+PFoxMSiiEhxk4lOluA34eARHA0OxqsEUYDqRMgeQ==}
+ peerDependencies:
+ typescript: '>= 4.3.x'
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@napi-rs/wasm-runtime@1.1.6':
+ resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==}
+ peerDependencies:
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
+
'@next/env@16.2.0':
resolution: {integrity: sha512-OZIbODWWAi0epQRCRjNe1VO45LOFBzgiyqmTLzIqWq6u1wrxKnAyz1HH6tgY/Mc81YzIjRPoYsPAEr4QV4l9TA==}
@@ -679,197 +817,702 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@swc/helpers@0.5.15':
- resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
+ '@oxc-parser/binding-android-arm-eabi@0.127.0':
+ resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
- '@turbo/darwin-64@2.9.18':
- resolution: {integrity: sha512-9f27peFu16ur8c0v9nUFUEyBnbKuuFsUTjHFWfmwGfzySBXbHwzU44QhZon6Mznz0cHsIr3984NQj/bVrnGSRw==}
- cpu: [x64]
- os: [darwin]
+ '@oxc-parser/binding-android-arm64@0.127.0':
+ resolution: {integrity: sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
- '@turbo/darwin-arm64@2.9.18':
- resolution: {integrity: sha512-9A6TMRq/Ib+QnbhLlgkhOm+624wO4pzSQ/yQviQfWHOlFvaYxdnIAYmu2H6TS6y7kSVL0DvzNe04NbESTOzFVQ==}
+ '@oxc-parser/binding-darwin-arm64@0.127.0':
+ resolution: {integrity: sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@turbo/gen@2.9.18':
- resolution: {integrity: sha512-9Ry3V2eqFANYI7A5dyjehq2EOuLTY30XQSg4aDR7F3cJOuiP/Ad2KXwrxD3AnwNDkuSDVbJjlbES7yfJ0y7dhw==}
- hasBin: true
+ '@oxc-parser/binding-darwin-x64@0.127.0':
+ resolution: {integrity: sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
- '@turbo/linux-64@2.9.18':
- resolution: {integrity: sha512-zCdIDtz69AnbYh913elJRRoF3QY5aa2HNnf+4rAkc7bQ+tWujiDkCNV7stazOUPggaDvhKIf2Z87qHftTeXSkw==}
+ '@oxc-parser/binding-freebsd-x64@0.127.0':
+ resolution: {integrity: sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0':
+ resolution: {integrity: sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
os: [linux]
- '@turbo/linux-arm64@2.9.18':
- resolution: {integrity: sha512-Va1kXI04naMgYwqv/5Dfa36dTDx8015U7oaQAjrXa45ua9OoFjSV4OmvkML4EmXvUclQHCiBRbY8bvd0jV7eAg==}
- cpu: [arm64]
+ '@oxc-parser/binding-linux-arm-musleabihf@0.127.0':
+ resolution: {integrity: sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
os: [linux]
- '@turbo/windows-64@2.9.18':
- resolution: {integrity: sha512-m0kDhZANxSNz9ck1ybogFscHabriAsp4eDFNrN/1H5WrgTF7b3VlcPZnhuO3v2+E2KnCbeAc+UUT10BZZHdDKw==}
- cpu: [x64]
- os: [win32]
+ '@oxc-parser/binding-linux-arm64-gnu@0.127.0':
+ resolution: {integrity: sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
- '@turbo/windows-arm64@2.9.18':
- resolution: {integrity: sha512-nUdR8WqoomUys9iIQmG45TMiizJ+5BV8egSeLLZba/AWblyp3fVBcIH1kSE58OtK4g2YzbMJEth6Ttv9w5rqMA==}
+ '@oxc-parser/binding-linux-arm64-musl@0.127.0':
+ resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
- os: [win32]
+ os: [linux]
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@oxc-parser/binding-linux-ppc64-gnu@0.127.0':
+ resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
- '@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ '@oxc-parser/binding-linux-riscv64-gnu@0.127.0':
+ resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
- '@types/node@22.15.3':
- resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==}
+ '@oxc-parser/binding-linux-riscv64-musl@0.127.0':
+ resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
- '@types/react-dom@19.2.2':
- resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==}
- peerDependencies:
- '@types/react': ^19.2.0
+ '@oxc-parser/binding-linux-s390x-gnu@0.127.0':
+ resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
- '@types/react@19.2.2':
- resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==}
+ '@oxc-parser/binding-linux-x64-gnu@0.127.0':
+ resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
- '@typescript-eslint/eslint-plugin@8.50.0':
- resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- '@typescript-eslint/parser': ^8.50.0
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ '@oxc-parser/binding-linux-x64-musl@0.127.0':
+ resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
- '@typescript-eslint/parser@8.50.0':
- resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ '@oxc-parser/binding-openharmony-arm64@0.127.0':
+ resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
- '@typescript-eslint/project-service@8.50.0':
- resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ '@oxc-parser/binding-wasm32-wasi@0.127.0':
+ resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
- '@typescript-eslint/scope-manager@8.50.0':
- resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@oxc-parser/binding-win32-arm64-msvc@0.127.0':
+ resolution: {integrity: sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
- '@typescript-eslint/tsconfig-utils@8.50.0':
- resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ '@oxc-parser/binding-win32-ia32-msvc@0.127.0':
+ resolution: {integrity: sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
- '@typescript-eslint/type-utils@8.50.0':
- resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ '@oxc-parser/binding-win32-x64-msvc@0.127.0':
+ resolution: {integrity: sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
- '@typescript-eslint/types@8.50.0':
- resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@oxc-project/types@0.127.0':
+ resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==}
- '@typescript-eslint/typescript-estree@8.50.0':
- resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ '@oxc-project/types@0.137.0':
+ resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==}
- '@typescript-eslint/utils@8.50.0':
- resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ '@oxc-resolver/binding-android-arm-eabi@11.21.3':
+ resolution: {integrity: sha512-eNU11A2WNizh04v3uyaJCootrHIaS0B9aHYXvAvVnPNk4xYSjMUjHnhQ6dewPN2MRYDskV85d1N0Aw0WNWhcyg==}
+ cpu: [arm]
+ os: [android]
- '@typescript-eslint/visitor-keys@8.50.0':
- resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@oxc-resolver/binding-android-arm64@11.21.3':
+ resolution: {integrity: sha512-8Q+ZjTLvn2dIcWsrmhdrEihm7q+ag/k+mkry7Z+t0QbbHaVxXQfvH9AewyVMh/WrpEKhQ3DDgx9fYbqeCpeOEw==}
+ cpu: [arm64]
+ os: [android]
- acorn-jsx@5.3.2:
- resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
- peerDependencies:
- acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ '@oxc-resolver/binding-darwin-arm64@11.21.3':
+ resolution: {integrity: sha512-wkh0qKZGHXVUDxFw3oA1TXnU2BDYY/r775oJflGeIr8uDPPoN2pk8gijQIzYRT6hoql/lg3+Tx/SaTn9e2/aGg==}
+ cpu: [arm64]
+ os: [darwin]
- acorn@8.15.0:
- resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
+ '@oxc-resolver/binding-darwin-x64@11.21.3':
+ resolution: {integrity: sha512-HbNc23FAQYbuyDV2vBWMez4u4mrsm5RAkniGZAWqr6lYZ3N4beeqIb776jzwRl8qL2zRhHVXpUj97X0QgogVzg==}
+ cpu: [x64]
+ os: [darwin]
- ajv@6.12.6:
- resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ '@oxc-resolver/binding-freebsd-x64@11.21.3':
+ resolution: {integrity: sha512-K6xNsTUPEUdfrn0+kbMq5nOUB5w1C5pavPQngt4TM2FpN91lP0PBe2srSpamb4d69O7h86oAi/qWX/kZNRSjkw==}
+ cpu: [x64]
+ os: [freebsd]
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
+ '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3':
+ resolution: {integrity: sha512-VcFmOpcpWX1zoEy8M58tR2M9YxM+Z9RuQhqAx5q0CTmrruaP7Gveejg75hzd/5sg5nk9G3aLALEa3hE2FsmmTQ==}
+ cpu: [arm]
+ os: [linux]
- ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
+ '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3':
+ resolution: {integrity: sha512-quVoxFLBy43hWaQbbDtQNRwAX5vX76mv7n64icAtQcJ3eNgVeblqmkupF/hAneNthdqSlnd1sTjb3aQSaDPaCQ==}
+ cpu: [arm]
+ os: [linux]
- argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ '@oxc-resolver/binding-linux-arm64-gnu@11.21.3':
+ resolution: {integrity: sha512-X0AqNZgcD07Q4V3RDK18/vYOj/HQT/FnmEFGYS2jTWqY7JO13ryE3TEs3eAIgUJhBnNkpEaiXqz3VK8M7qQhWQ==}
+ cpu: [arm64]
+ os: [linux]
- array-buffer-byte-length@1.0.2:
- resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
- engines: {node: '>= 0.4'}
+ '@oxc-resolver/binding-linux-arm64-musl@11.21.3':
+ resolution: {integrity: sha512-YkaQnaKYdbuaXvRt5Qd0GpbihzVnyfR6z1SpYfIUC6RTu4NF7lDKPjVkYb+jRI2gedVO2rVpN35Y6akG6ud4Lw==}
+ cpu: [arm64]
+ os: [linux]
- array-includes@3.1.9:
- resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
- engines: {node: '>= 0.4'}
+ '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3':
+ resolution: {integrity: sha512-gB9HwhrPiFqUzDeEq+y/CgAijz1YdI6BnXz5GaH2Pa9cWdutchlkGFAiAuGb/PjVQpiK6NFKzFuztxrweoit7A==}
+ cpu: [ppc64]
+ os: [linux]
- array.prototype.findlast@1.2.5:
- resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
- engines: {node: '>= 0.4'}
+ '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3':
+ resolution: {integrity: sha512-zjDWBlYk8QGv0H8dsPUWqkfjYIIjG2TvspGkzXL0eImbgxtZorA/klKeHyolevoT3Kvbi+1iMr9Lhrh7jf54Og==}
+ cpu: [riscv64]
+ os: [linux]
- array.prototype.flat@1.3.3:
- resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
- engines: {node: '>= 0.4'}
+ '@oxc-resolver/binding-linux-riscv64-musl@11.21.3':
+ resolution: {integrity: sha512-4UfsQvacV388y1zpXL7C1x1FNYaV52JtuNRiuzrfQA2z1z6ElVrsidkGsrvQ5EgeSq1Pj7kaKqrgGkvFuxJ/tw==}
+ cpu: [riscv64]
+ os: [linux]
- array.prototype.flatmap@1.3.3:
- resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
- engines: {node: '>= 0.4'}
+ '@oxc-resolver/binding-linux-s390x-gnu@11.21.3':
+ resolution: {integrity: sha512-b5uH+HKH0MP5mNBYaK75SKsJbw52URqrx2LavYdq6wb0l3ExAG5niYRP9DWUNHdKilpaBVM2bXk9HNWrH3ew7Q==}
+ cpu: [s390x]
+ os: [linux]
- array.prototype.tosorted@1.1.4:
- resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
- engines: {node: '>= 0.4'}
+ '@oxc-resolver/binding-linux-x64-gnu@11.21.3':
+ resolution: {integrity: sha512-PjYlmilBpNRh2ntXNYAK3Am5w/nPfEpnU/96iNx7CI8EzAn12J4JRiec63wHJTH31nLoCNxBg/829pN+3CfG3Q==}
+ cpu: [x64]
+ os: [linux]
- arraybuffer.prototype.slice@1.0.4:
- resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
- engines: {node: '>= 0.4'}
+ '@oxc-resolver/binding-linux-x64-musl@11.21.3':
+ resolution: {integrity: sha512-QTBAb7JuHlZ7JUEyM8UiQi2f7m/L4swBhP2TNpYIDc9Wp/wRw1G/8sl6i13aIzQAXH7LKIm294LeOHd0lQR8zA==}
+ cpu: [x64]
+ os: [linux]
- async-function@1.0.0:
- resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
- engines: {node: '>= 0.4'}
+ '@oxc-resolver/binding-openharmony-arm64@11.21.3':
+ resolution: {integrity: sha512-4j1DFwjwv36ec9kds0jU/ucQ5Ha4ERO/H95BxR5JFf0kqUUAJ1kwII7XhTc1vZrkdJkvLGC9Q2MbpObpum8RBg==}
+ cpu: [arm64]
+ os: [openharmony]
- available-typed-arrays@1.0.7:
- resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
- engines: {node: '>= 0.4'}
+ '@oxc-resolver/binding-wasm32-wasi@11.21.3':
+ resolution: {integrity: sha512-i8oluoel5kru/j1WNrjmQSiA3GQ7wvIYVR1IwIoZtKogAhya2iub+ZKIeSIkcJOrnzQ18Tzl/F+kL3fYOxZLvA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ '@oxc-resolver/binding-win32-arm64-msvc@11.21.3':
+ resolution: {integrity: sha512-M/8dw8dD6aOs+NlPJax401CZB9I7Aut84isQLgALGGwke4Afvw+/7yYhZb94yXf6t2sPLhQLmSmtSV+2FhsOWg==}
+ cpu: [arm64]
+ os: [win32]
- baseline-browser-mapping@2.10.8:
- resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==}
- engines: {node: '>=6.0.0'}
- hasBin: true
+ '@oxc-resolver/binding-win32-x64-msvc@11.21.3':
+ resolution: {integrity: sha512-H7BCt/VnS9hnmMp42eGhZ99izSCRvlnWwy/N71K1/J8QoExwY4262Z8QiEkMDtduRJrztayDxETTckmUuAVL9Q==}
+ cpu: [x64]
+ os: [win32]
- brace-expansion@1.1.12:
- resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+ '@rolldown/binding-android-arm64@1.1.3':
+ resolution: {integrity: sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
- brace-expansion@2.0.2:
- resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ '@rolldown/binding-darwin-arm64@1.1.3':
+ resolution: {integrity: sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.1.3':
+ resolution: {integrity: sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.1.3':
+ resolution: {integrity: sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.3':
+ resolution: {integrity: sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.1.3':
+ resolution: {integrity: sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-musl@1.1.3':
+ resolution: {integrity: sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.1.3':
+ resolution: {integrity: sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rolldown/binding-linux-s390x-gnu@1.1.3':
+ resolution: {integrity: sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rolldown/binding-linux-x64-gnu@1.1.3':
+ resolution: {integrity: sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@rolldown/binding-linux-x64-musl@1.1.3':
+ resolution: {integrity: sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@rolldown/binding-openharmony-arm64@1.1.3':
+ resolution: {integrity: sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.1.3':
+ resolution: {integrity: sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.1.3':
+ resolution: {integrity: sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.1.3':
+ resolution: {integrity: sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.1':
+ resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
+
+ '@rollup/pluginutils@5.4.0':
+ resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@storybook/addon-links@10.4.6':
+ resolution: {integrity: sha512-VGfERTsGRFmfvNP3SKprFWkC6Od5kXzSutT5PSZjQ/O9NnCdHhd/RILxFDN2TzZn9ywDc7t5b4AldKmSYCv3EQ==}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.4.6
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react:
+ optional: true
+
+ '@storybook/builder-vite@10.4.6':
+ resolution: {integrity: sha512-BHBtD81HiXUiDQz/CaFynLtWmm7AFUQn8VnXuHipZ8KlnUANopa4yqdVuy/Gwz8ub254uFI5NMZsW/KlgWNgNg==}
+ peerDependencies:
+ storybook: ^10.4.6
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ '@storybook/csf-plugin@10.4.6':
+ resolution: {integrity: sha512-NILLxDqpA/JR/AazGWpsz+4fadJwRU4uhHephGtYpVOWnQA/DkJfKT6zpcJVq8+QA8A2zKMLX3GVKsXIrxjuDA==}
+ peerDependencies:
+ esbuild: '*'
+ rollup: '*'
+ storybook: ^10.4.6
+ vite: '*'
+ webpack: '*'
+ peerDependenciesMeta:
+ esbuild:
+ optional: true
+ rollup:
+ optional: true
+ vite:
+ optional: true
+ webpack:
+ optional: true
+
+ '@storybook/global@5.0.0':
+ resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
+
+ '@storybook/icons@2.0.2':
+ resolution: {integrity: sha512-KZBCpXsshAIjczYNXR/rlxEtCUX/eAbpFNwKi8bcOomrLA4t/SyPz5RF+lVPO2oZBUE4sAkt43mfJUevQDSEEw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ '@storybook/react-dom-shim@10.4.6':
+ resolution: {integrity: sha512-iGNmKzrq9vgl2PDrYAnZKI+yvac3Ym+lJXXuQaqlFRS23zA5MNm4EBX+rAG7WulqchoK6NaZ0KQOs2mAgEpTMg==}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.4.6
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@storybook/react-vite@10.4.6':
+ resolution: {integrity: sha512-0arEQtybqGYXHbXpTot+Wv9YtG+V5Vp43QayXavPKQ20M8mpEzhyCPKd0EhqMGSC1Z1UEt0hm365WUBhI9LfKA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.4.6
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ '@storybook/react@10.4.6':
+ resolution: {integrity: sha512-9Y7YecrVFe1/01KYjfOLxVqTg2Aq+IO6TEv6sC2U0PfD0AWCSCmQ91QqgBpN/XW4aFFWoiZNinyXMUlU8zxy2w==}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.4.6
+ typescript: '>= 4.9.x'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+ typescript:
+ optional: true
+
+ '@swc/helpers@0.5.15':
+ resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
+
+ '@testing-library/dom@10.4.0':
+ resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
+ engines: {node: '>=18'}
+
+ '@testing-library/jest-dom@6.9.1':
+ resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==}
+ engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
+
+ '@testing-library/user-event@14.6.1':
+ resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==}
+ engines: {node: '>=12', npm: '>=6'}
+ peerDependencies:
+ '@testing-library/dom': '>=7.21.4'
+
+ '@turbo/darwin-64@2.9.18':
+ resolution: {integrity: sha512-9f27peFu16ur8c0v9nUFUEyBnbKuuFsUTjHFWfmwGfzySBXbHwzU44QhZon6Mznz0cHsIr3984NQj/bVrnGSRw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@turbo/darwin-arm64@2.9.18':
+ resolution: {integrity: sha512-9A6TMRq/Ib+QnbhLlgkhOm+624wO4pzSQ/yQviQfWHOlFvaYxdnIAYmu2H6TS6y7kSVL0DvzNe04NbESTOzFVQ==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@turbo/gen@2.9.18':
+ resolution: {integrity: sha512-9Ry3V2eqFANYI7A5dyjehq2EOuLTY30XQSg4aDR7F3cJOuiP/Ad2KXwrxD3AnwNDkuSDVbJjlbES7yfJ0y7dhw==}
+ hasBin: true
+
+ '@turbo/linux-64@2.9.18':
+ resolution: {integrity: sha512-zCdIDtz69AnbYh913elJRRoF3QY5aa2HNnf+4rAkc7bQ+tWujiDkCNV7stazOUPggaDvhKIf2Z87qHftTeXSkw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@turbo/linux-arm64@2.9.18':
+ resolution: {integrity: sha512-Va1kXI04naMgYwqv/5Dfa36dTDx8015U7oaQAjrXa45ua9OoFjSV4OmvkML4EmXvUclQHCiBRbY8bvd0jV7eAg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@turbo/windows-64@2.9.18':
+ resolution: {integrity: sha512-m0kDhZANxSNz9ck1ybogFscHabriAsp4eDFNrN/1H5WrgTF7b3VlcPZnhuO3v2+E2KnCbeAc+UUT10BZZHdDKw==}
+ cpu: [x64]
+ os: [win32]
+
+ '@turbo/windows-arm64@2.9.18':
+ resolution: {integrity: sha512-nUdR8WqoomUys9iIQmG45TMiizJ+5BV8egSeLLZba/AWblyp3fVBcIH1kSE58OtK4g2YzbMJEth6Ttv9w5rqMA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tybys/wasm-util@0.10.3':
+ resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==}
+
+ '@types/aria-query@5.0.4':
+ resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.28.0':
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
+ '@types/doctrine@0.0.9':
+ resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/node@22.15.3':
+ resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==}
+
+ '@types/react-dom@19.2.2':
+ resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
+ '@types/react@19.2.2':
+ resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==}
+
+ '@types/resolve@1.20.6':
+ resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==}
+
+ '@typescript-eslint/eslint-plugin@8.50.0':
+ resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.50.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/parser@8.50.0':
+ resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/project-service@8.50.0':
+ resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/scope-manager@8.50.0':
+ resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/tsconfig-utils@8.50.0':
+ resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/type-utils@8.50.0':
+ resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/types@8.50.0':
+ resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/typescript-estree@8.50.0':
+ resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/utils@8.50.0':
+ resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/visitor-keys@8.50.0':
+ resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@vitest/expect@3.2.4':
+ resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+
+ '@vitest/pretty-format@3.2.4':
+ resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
+
+ '@vitest/spy@3.2.4':
+ resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+
+ '@vitest/utils@3.2.4':
+ resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+
+ '@webcontainer/env@1.1.1':
+ resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ aria-query@5.3.0:
+ resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
+
+ aria-query@5.3.2:
+ resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
+ engines: {node: '>= 0.4'}
+
+ array-buffer-byte-length@1.0.2:
+ resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
+ engines: {node: '>= 0.4'}
+
+ array-includes@3.1.9:
+ resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.findlast@1.2.5:
+ resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flat@1.3.3:
+ resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flatmap@1.3.3:
+ resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.tosorted@1.1.4:
+ resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
+ engines: {node: '>= 0.4'}
+
+ arraybuffer.prototype.slice@1.0.4:
+ resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
+ engines: {node: '>= 0.4'}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ ast-types@0.16.1:
+ resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
+ engines: {node: '>=4'}
+
+ async-function@1.0.0:
+ resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
+ engines: {node: '>= 0.4'}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
+
+ baseline-browser-mapping@2.10.38:
+ resolution: {integrity: sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ baseline-browser-mapping@2.10.8:
+ resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ brace-expansion@5.0.6:
+ resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
+ engines: {node: 18 || 20 || >=22}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ browserslist@4.28.4:
+ resolution: {integrity: sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ bundle-name@4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
+
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -889,6 +1532,13 @@ packages:
caniuse-lite@1.0.30001761:
resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==}
+ caniuse-lite@1.0.30001799:
+ resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==}
+
+ chai@5.3.3:
+ resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
+ engines: {node: '>=18'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -896,6 +1546,10 @@ packages:
chardet@2.1.1:
resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
+ check-error@2.1.3:
+ resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==}
+ engines: {node: '>= 16'}
+
cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
@@ -913,10 +1567,16 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
+ css.escape@1.5.1:
+ resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
+
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
@@ -941,17 +1601,37 @@ packages:
supports-color:
optional: true
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ default-browser-id@5.0.1:
+ resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
+ engines: {node: '>=18'}
+
+ default-browser@5.5.0:
+ resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
+ engines: {node: '>=18'}
+
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
+ define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
@@ -960,6 +1640,16 @@ packages:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
engines: {node: '>=0.10.0'}
+ doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+
+ dom-accessibility-api@0.5.16:
+ resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
+
+ dom-accessibility-api@0.6.3:
+ resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
+
dotenv@16.0.3:
resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
engines: {node: '>=12'}
@@ -968,9 +1658,16 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
+ electron-to-chromium@1.5.378:
+ resolution: {integrity: sha512-VinvOAuuPmdD1guEgGv5f2Qp7/vlfqOrUOMYNnOD4wj3pit8kRsQHzfIf6teyUGWo15Tg5+bOJaRunvyltpVWQ==}
+
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ empathic@2.0.1:
+ resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==}
+ engines: {node: '>=14'}
+
es-abstract@1.24.0:
resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
engines: {node: '>= 0.4'}
@@ -1008,6 +1705,10 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@@ -1066,6 +1767,11 @@ packages:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
@@ -1078,6 +1784,9 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
@@ -1130,6 +1839,11 @@ packages:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
@@ -1140,6 +1854,10 @@ packages:
functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -1160,6 +1878,10 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
+ glob@13.0.6:
+ resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
+ engines: {node: 18 || 20 || >=22}
+
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -1223,6 +1945,10 @@ packages:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
+ indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+
internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
@@ -1259,6 +1985,11 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
+ is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -1279,6 +2010,11 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
+ is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+
is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -1331,6 +2067,10 @@ packages:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
+ is-wsl@3.1.1:
+ resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
+ engines: {node: '>=16'}
+
isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
@@ -1348,6 +2088,11 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
@@ -1357,6 +2102,11 @@ packages:
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
jsx-ast-utils@3.3.5:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'}
@@ -1368,6 +2118,76 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
@@ -1378,6 +2198,23 @@ packages:
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ loupe@3.2.1:
+ resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
+
+ lru-cache@11.5.1:
+ resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==}
+ engines: {node: 20 || >=22}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lz-string@1.5.0:
+ resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
+ hasBin: true
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
@@ -1390,6 +2227,14 @@ packages:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
+ min-indent@1.0.1:
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
+
+ minimatch@10.2.5:
+ resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
+ engines: {node: 18 || 20 || >=22}
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -1397,6 +2242,13 @@ packages:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.3:
+ resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -1409,6 +2261,11 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ nanoid@3.3.15:
+ resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -1433,6 +2290,10 @@ packages:
sass:
optional: true
+ node-releases@2.0.50:
+ resolution: {integrity: sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==}
+ engines: {node: '>=18'}
+
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -1461,6 +2322,10 @@ packages:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
+ open@10.2.0:
+ resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
+ engines: {node: '>=18'}
+
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -1469,6 +2334,13 @@ packages:
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
engines: {node: '>= 0.4'}
+ oxc-parser@0.127.0:
+ resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-resolver@11.21.3:
+ resolution: {integrity: sha512-2Mx3fKQz7+xgrBONjsxOgCGtMHOn38/HxMzW1I5efwXB5a4lRN0Vp40gYUJFBWJslcrvwoofTrqoTnLbwTd3pA==}
+
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
@@ -1492,6 +2364,14 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ path-scurry@2.0.2:
+ resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
+ engines: {node: 18 || 20 || >=22}
+
+ pathval@2.0.1:
+ resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
+ engines: {node: '>= 14.16'}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -1503,6 +2383,10 @@ packages:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
+ engines: {node: '>=12'}
+
possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
@@ -1511,6 +2395,10 @@ packages:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
+ postcss@8.5.15:
+ resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
+ engines: {node: ^10 || ^12 || >=14}
+
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -1519,6 +2407,10 @@ packages:
resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
engines: {node: '>=14'}
+ pretty-format@27.5.1:
+ resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
@@ -1529,6 +2421,15 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ react-docgen-typescript@2.4.0:
+ resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==}
+ peerDependencies:
+ typescript: '>= 4.3.x'
+
+ react-docgen@8.0.3:
+ resolution: {integrity: sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w==}
+ engines: {node: ^20.9.0 || >=22}
+
react-dom@19.2.0:
resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
peerDependencies:
@@ -1537,10 +2438,21 @@ packages:
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ react-is@17.0.2:
+ resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
+
react@19.2.0:
resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
engines: {node: '>=0.10.0'}
+ recast@0.23.11:
+ resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
+ engines: {node: '>= 4'}
+
+ redent@3.0.0:
+ resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+ engines: {node: '>=8'}
+
reflect.getprototypeof@1.0.10:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
@@ -1553,6 +2465,11 @@ packages:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
+ resolve@1.22.12:
+ resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
resolve@2.0.0-next.5:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
@@ -1560,6 +2477,15 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ rolldown@1.1.3:
+ resolution: {integrity: sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ run-applescript@7.1.0:
+ resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
+ engines: {node: '>=18'}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -1636,10 +2562,29 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
stop-iteration-iterator@1.1.0:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
+ storybook@10.4.6:
+ resolution: {integrity: sha512-6wkA6LxfDSSilloITsrFOJfsnw0mDUP2h8Ls+lRt8oRsudtz2RWFhLv+Toiwg6NW7hUpdTDc2hzR7DztJid6+A==}
+ hasBin: true
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ prettier: ^2 || ^3
+ vite-plus: ^0.1.15
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ prettier:
+ optional: true
+ vite-plus:
+ optional: true
+
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -1667,6 +2612,18 @@ packages:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-indent@3.0.0:
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
+
+ strip-indent@4.1.1:
+ resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
+ engines: {node: '>=12'}
+
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -1692,10 +2649,25 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
+ tiny-invariant@1.3.3:
+ resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
+ tinyglobby@0.2.17:
+ resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
+ engines: {node: '>=12.0.0'}
+
+ tinyrainbow@2.0.0:
+ resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@4.0.4:
+ resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
+ engines: {node: '>=14.0.0'}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -1706,6 +2678,14 @@ packages:
peerDependencies:
typescript: '>=4.8.4'
+ ts-dedent@2.3.0:
+ resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==}
+ engines: {node: '>=6.10'}
+
+ tsconfig-paths@4.2.0:
+ resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
+ engines: {node: '>=6'}
+
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -1752,9 +2732,70 @@ packages:
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+ unplugin@2.3.11:
+ resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
+ engines: {node: '>=18.12.0'}
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ use-sync-external-store@1.6.0:
+ resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ vite@8.1.0:
+ resolution: {integrity: sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.3.0
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.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
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
which-boxed-primitive@1.1.1:
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
engines: {node: '>= 0.4'}
@@ -1784,6 +2825,25 @@ packages:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
+ ws@8.21.0:
+ resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ wsl-utils@0.1.0:
+ resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
+ engines: {node: '>=18'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@@ -1794,11 +2854,158 @@ packages:
snapshots:
+ '@adobe/css-tools@4.5.0': {}
+
+ '@babel/code-frame@7.29.7':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.29.7
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.29.7': {}
+
+ '@babel/core@7.29.7':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/generator': 7.29.7
+ '@babel/helper-compilation-targets': 7.29.7
+ '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7)
+ '@babel/helpers': 7.29.7
+ '@babel/parser': 7.29.7
+ '@babel/template': 7.29.7
+ '@babel/traverse': 7.29.7
+ '@babel/types': 7.29.7
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.29.7':
+ dependencies:
+ '@babel/parser': 7.29.7
+ '@babel/types': 7.29.7
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.29.7':
+ dependencies:
+ '@babel/compat-data': 7.29.7
+ '@babel/helper-validator-option': 7.29.7
+ browserslist: 4.28.4
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.29.7': {}
+
+ '@babel/helper-module-imports@7.29.7':
+ dependencies:
+ '@babel/traverse': 7.29.7
+ '@babel/types': 7.29.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)':
+ dependencies:
+ '@babel/core': 7.29.7
+ '@babel/helper-module-imports': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
+ '@babel/traverse': 7.29.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.29.7': {}
+
+ '@babel/helper-validator-identifier@7.29.7': {}
+
+ '@babel/helper-validator-option@7.29.7': {}
+
+ '@babel/helpers@7.29.7':
+ dependencies:
+ '@babel/template': 7.29.7
+ '@babel/types': 7.29.7
+
+ '@babel/parser@7.29.7':
+ dependencies:
+ '@babel/types': 7.29.7
+
+ '@babel/runtime@7.29.7': {}
+
+ '@babel/template@7.29.7':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/parser': 7.29.7
+ '@babel/types': 7.29.7
+
+ '@babel/traverse@7.29.7':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/generator': 7.29.7
+ '@babel/helper-globals': 7.29.7
+ '@babel/parser': 7.29.7
+ '@babel/template': 7.29.7
+ '@babel/types': 7.29.7
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.29.7':
+ dependencies:
+ '@babel/helper-string-parser': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
+
+ '@emnapi/core@1.11.0':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.2
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/core@1.11.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.2
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/core@1.9.2':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.1
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.11.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.11.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/runtime@1.7.1':
dependencies:
tslib: 2.8.1
optional: true
+ '@emnapi/runtime@1.9.2':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.2':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@esbuild/aix-ppc64@0.25.12':
optional: true
@@ -2156,6 +3363,54 @@ snapshots:
optionalDependencies:
'@types/node': 22.15.3
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12))':
+ dependencies:
+ glob: 13.0.6
+ react-docgen-typescript: 2.4.0(typescript@5.9.2)
+ vite: 8.1.0(@types/node@22.15.3)(esbuild@0.25.12)
+ optionalDependencies:
+ typescript: 5.9.2
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)':
+ dependencies:
+ '@emnapi/core': 1.11.0
+ '@emnapi/runtime': 1.11.0
+ '@tybys/wasm-util': 0.10.3
+ optional: true
+
+ '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
+ dependencies:
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@tybys/wasm-util': 0.10.3
+ optional: true
+
+ '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@tybys/wasm-util': 0.10.3
+ optional: true
+
'@next/env@16.2.0': {}
'@next/eslint-plugin-next@16.2.0':
@@ -2177,31 +3432,324 @@ snapshots:
'@next/swc-linux-x64-gnu@16.2.0':
optional: true
- '@next/swc-linux-x64-musl@16.2.0':
+ '@next/swc-linux-x64-musl@16.2.0':
+ optional: true
+
+ '@next/swc-win32-arm64-msvc@16.2.0':
+ optional: true
+
+ '@next/swc-win32-x64-msvc@16.2.0':
+ optional: true
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@oxc-parser/binding-android-arm-eabi@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-android-arm64@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-darwin-arm64@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-darwin-x64@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-freebsd-x64@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-musl@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-gnu@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-musl@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-openharmony-arm64@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-wasm32-wasi@0.127.0':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
+ optional: true
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-x64-msvc@0.127.0':
+ optional: true
+
+ '@oxc-project/types@0.127.0': {}
+
+ '@oxc-project/types@0.137.0': {}
+
+ '@oxc-resolver/binding-android-arm-eabi@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-android-arm64@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-darwin-arm64@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-darwin-x64@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-freebsd-x64@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-linux-arm64-gnu@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-linux-arm64-musl@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-linux-riscv64-musl@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-linux-s390x-gnu@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-linux-x64-gnu@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-linux-x64-musl@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-openharmony-arm64@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-wasm32-wasi@11.21.3':
+ dependencies:
+ '@emnapi/core': 1.11.0
+ '@emnapi/runtime': 1.11.0
+ '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)
+ optional: true
+
+ '@oxc-resolver/binding-win32-arm64-msvc@11.21.3':
+ optional: true
+
+ '@oxc-resolver/binding-win32-x64-msvc@11.21.3':
+ optional: true
+
+ '@rolldown/binding-android-arm64@1.1.3':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.1.3':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.1.3':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.1.3':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.1.3':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.1.3':
+ dependencies:
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.1.3':
optional: true
- '@next/swc-win32-arm64-msvc@16.2.0':
+ '@rolldown/binding-win32-x64-msvc@1.1.3':
optional: true
- '@next/swc-win32-x64-msvc@16.2.0':
- optional: true
+ '@rolldown/pluginutils@1.0.1': {}
- '@nodelib/fs.scandir@2.1.5':
+ '@rollup/pluginutils@5.4.0':
dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
- '@nodelib/fs.stat@2.0.5': {}
+ '@storybook/addon-links@10.4.6(@types/react@19.2.2)(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.2
+ react: 19.2.0
- '@nodelib/fs.walk@1.2.8':
+ '@storybook/builder-vite@10.4.6(esbuild@0.25.12)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12))':
dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.19.1
+ '@storybook/csf-plugin': 10.4.6(esbuild@0.25.12)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12))
+ storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ ts-dedent: 2.3.0
+ vite: 8.1.0(@types/node@22.15.3)(esbuild@0.25.12)
+ transitivePeerDependencies:
+ - esbuild
+ - rollup
+ - webpack
+
+ '@storybook/csf-plugin@10.4.6(esbuild@0.25.12)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12))':
+ dependencies:
+ storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ unplugin: 2.3.11
+ optionalDependencies:
+ esbuild: 0.25.12
+ vite: 8.1.0(@types/node@22.15.3)(esbuild@0.25.12)
+
+ '@storybook/global@5.0.0': {}
+
+ '@storybook/icons@2.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+
+ '@storybook/react-dom-shim@10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))':
+ dependencies:
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
+
+ '@storybook/react-vite@10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(esbuild@0.25.12)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12))':
+ dependencies:
+ '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12))
+ '@rollup/pluginutils': 5.4.0
+ '@storybook/builder-vite': 10.4.6(esbuild@0.25.12)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12))
+ '@storybook/react': 10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.2)
+ empathic: 2.0.1
+ magic-string: 0.30.21
+ react: 19.2.0
+ react-docgen: 8.0.3
+ react-dom: 19.2.0(react@19.2.0)
+ resolve: 1.22.12
+ storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ tsconfig-paths: 4.2.0
+ vite: 8.1.0(@types/node@22.15.3)(esbuild@0.25.12)
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+ - esbuild
+ - rollup
+ - supports-color
+ - typescript
+ - webpack
+
+ '@storybook/react@10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.2)':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@storybook/react-dom-shim': 10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))
+ react: 19.2.0
+ react-docgen: 8.0.3
+ react-docgen-typescript: 2.4.0(typescript@5.9.2)
+ react-dom: 19.2.0(react@19.2.0)
+ storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
+ typescript: 5.9.2
+ transitivePeerDependencies:
+ - supports-color
'@swc/helpers@0.5.15':
dependencies:
tslib: 2.8.1
+ '@testing-library/dom@10.4.0':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/runtime': 7.29.7
+ '@types/aria-query': 5.0.4
+ aria-query: 5.3.0
+ chalk: 4.1.2
+ dom-accessibility-api: 0.5.16
+ lz-string: 1.5.0
+ pretty-format: 27.5.1
+
+ '@testing-library/jest-dom@6.9.1':
+ dependencies:
+ '@adobe/css-tools': 4.5.0
+ aria-query: 5.3.2
+ css.escape: 1.5.1
+ dom-accessibility-api: 0.6.3
+ picocolors: 1.1.1
+ redent: 3.0.0
+
+ '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)':
+ dependencies:
+ '@testing-library/dom': 10.4.0
+
'@turbo/darwin-64@2.9.18':
optional: true
@@ -2227,6 +3775,43 @@ snapshots:
'@turbo/windows-arm64@2.9.18':
optional: true
+ '@tybys/wasm-util@0.10.3':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/aria-query@5.0.4': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.29.7
+ '@babel/types': 7.29.7
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.28.0
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.29.7
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.29.7
+ '@babel/types': 7.29.7
+
+ '@types/babel__traverse@7.28.0':
+ dependencies:
+ '@babel/types': 7.29.7
+
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
+ '@types/deep-eql@4.0.2': {}
+
+ '@types/doctrine@0.0.9': {}
+
'@types/estree@1.0.8': {}
'@types/json-schema@7.0.15': {}
@@ -2243,6 +3828,8 @@ snapshots:
dependencies:
csstype: 3.1.3
+ '@types/resolve@1.20.6': {}
+
'@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2))(eslint@9.39.1)(typescript@5.9.2)':
dependencies:
'@eslint-community/regexpp': 4.12.2
@@ -2334,6 +3921,30 @@ snapshots:
'@typescript-eslint/types': 8.50.0
eslint-visitor-keys: 4.2.1
+ '@vitest/expect@3.2.4':
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
+ chai: 5.3.3
+ tinyrainbow: 2.0.0
+
+ '@vitest/pretty-format@3.2.4':
+ dependencies:
+ tinyrainbow: 2.0.0
+
+ '@vitest/spy@3.2.4':
+ dependencies:
+ tinyspy: 4.0.4
+
+ '@vitest/utils@3.2.4':
+ dependencies:
+ '@vitest/pretty-format': 3.2.4
+ loupe: 3.2.1
+ tinyrainbow: 2.0.0
+
+ '@webcontainer/env@1.1.1': {}
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
@@ -2353,8 +3964,16 @@ snapshots:
dependencies:
color-convert: 2.0.1
+ ansi-styles@5.2.0: {}
+
argparse@2.0.1: {}
+ aria-query@5.3.0:
+ dependencies:
+ dequal: 2.0.3
+
+ aria-query@5.3.2: {}
+
array-buffer-byte-length@1.0.2:
dependencies:
call-bound: 1.0.4
@@ -2412,6 +4031,12 @@ snapshots:
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
+ assertion-error@2.0.1: {}
+
+ ast-types@0.16.1:
+ dependencies:
+ tslib: 2.8.1
+
async-function@1.0.0: {}
available-typed-arrays@1.0.7:
@@ -2420,6 +4045,10 @@ snapshots:
balanced-match@1.0.2: {}
+ balanced-match@4.0.4: {}
+
+ baseline-browser-mapping@2.10.38: {}
+
baseline-browser-mapping@2.10.8: {}
brace-expansion@1.1.12:
@@ -2431,10 +4060,26 @@ snapshots:
dependencies:
balanced-match: 1.0.2
+ brace-expansion@5.0.6:
+ dependencies:
+ balanced-match: 4.0.4
+
braces@3.0.3:
dependencies:
fill-range: 7.1.1
+ browserslist@4.28.4:
+ dependencies:
+ baseline-browser-mapping: 2.10.38
+ caniuse-lite: 1.0.30001799
+ electron-to-chromium: 1.5.378
+ node-releases: 2.0.50
+ update-browserslist-db: 1.2.3(browserslist@4.28.4)
+
+ bundle-name@4.1.0:
+ dependencies:
+ run-applescript: 7.1.0
+
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -2456,6 +4101,16 @@ snapshots:
caniuse-lite@1.0.30001761: {}
+ caniuse-lite@1.0.30001799: {}
+
+ chai@5.3.3:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.3
+ deep-eql: 5.0.2
+ loupe: 3.2.1
+ pathval: 2.0.1
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -2463,6 +4118,8 @@ snapshots:
chardet@2.1.1: {}
+ check-error@2.1.3: {}
+
cli-width@4.1.0: {}
client-only@0.0.1: {}
@@ -2475,12 +4132,16 @@ snapshots:
concat-map@0.0.1: {}
+ convert-source-map@2.0.0: {}
+
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
+ css.escape@1.5.1: {}
+
csstype@3.1.3: {}
data-view-buffer@1.0.2:
@@ -2505,27 +4166,47 @@ snapshots:
dependencies:
ms: 2.1.3
+ deep-eql@5.0.2: {}
+
deep-is@0.1.4: {}
+ default-browser-id@5.0.1: {}
+
+ default-browser@5.5.0:
+ dependencies:
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.1
+
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.1
es-errors: 1.3.0
gopd: 1.2.0
+ define-lazy-prop@3.0.0: {}
+
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
object-keys: 1.1.1
- detect-libc@2.1.2:
- optional: true
+ dequal@2.0.3: {}
+
+ detect-libc@2.1.2: {}
doctrine@2.1.0:
dependencies:
esutils: 2.0.3
+ doctrine@3.0.0:
+ dependencies:
+ esutils: 2.0.3
+
+ dom-accessibility-api@0.5.16: {}
+
+ dom-accessibility-api@0.6.3: {}
+
dotenv@16.0.3: {}
dunder-proto@1.0.1:
@@ -2534,8 +4215,12 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
+ electron-to-chromium@1.5.378: {}
+
emoji-regex@8.0.0: {}
+ empathic@2.0.1: {}
+
es-abstract@1.24.0:
dependencies:
array-buffer-byte-length: 1.0.2
@@ -2666,6 +4351,8 @@ snapshots:
'@esbuild/win32-ia32': 0.25.12
'@esbuild/win32-x64': 0.25.12
+ escalade@3.2.0: {}
+
escape-string-regexp@4.0.0: {}
eslint-config-prettier@10.1.1(eslint@9.39.1):
@@ -2760,6 +4447,8 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.1
+ esprima@4.0.1: {}
+
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
@@ -2770,6 +4459,8 @@ snapshots:
estraverse@5.3.0: {}
+ estree-walker@2.0.2: {}
+
esutils@2.0.3: {}
fast-deep-equal@3.1.3: {}
@@ -2794,6 +4485,10 @@ snapshots:
optionalDependencies:
picomatch: 4.0.3
+ fdir@6.5.0(picomatch@4.0.4):
+ optionalDependencies:
+ picomatch: 4.0.4
+
file-entry-cache@8.0.0:
dependencies:
flat-cache: 4.0.1
@@ -2818,6 +4513,9 @@ snapshots:
dependencies:
is-callable: 1.2.7
+ fsevents@2.3.3:
+ optional: true
+
function-bind@1.1.2: {}
function.prototype.name@1.1.8:
@@ -2831,6 +4529,8 @@ snapshots:
functions-have-names@1.2.3: {}
+ gensync@1.0.0-beta.2: {}
+
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -2863,6 +4563,12 @@ snapshots:
dependencies:
is-glob: 4.0.3
+ glob@13.0.6:
+ dependencies:
+ minimatch: 10.2.5
+ minipass: 7.1.3
+ path-scurry: 2.0.2
+
globals@14.0.0: {}
globals@16.5.0: {}
@@ -2911,6 +4617,8 @@ snapshots:
imurmurhash@0.1.4: {}
+ indent-string@4.0.0: {}
+
internal-slot@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -2957,6 +4665,8 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
+ is-docker@3.0.0: {}
+
is-extglob@2.1.1: {}
is-finalizationregistry@1.1.1:
@@ -2976,6 +4686,10 @@ snapshots:
dependencies:
is-extglob: 2.1.1
+ is-inside-container@1.0.0:
+ dependencies:
+ is-docker: 3.0.0
+
is-map@2.0.3: {}
is-negative-zero@2.0.3: {}
@@ -3026,6 +4740,10 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
+ is-wsl@3.1.1:
+ dependencies:
+ is-inside-container: 1.0.0
+
isarray@2.0.5: {}
isexe@2.0.0: {}
@@ -3045,12 +4763,16 @@ snapshots:
dependencies:
argparse: 2.0.1
+ jsesc@3.1.0: {}
+
json-buffer@3.0.1: {}
json-schema-traverse@0.4.1: {}
json-stable-stringify-without-jsonify@1.0.1: {}
+ json5@2.2.3: {}
+
jsx-ast-utils@3.3.5:
dependencies:
array-includes: 3.1.9
@@ -3067,6 +4789,55 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
@@ -3077,6 +4848,20 @@ snapshots:
dependencies:
js-tokens: 4.0.0
+ loupe@3.2.1: {}
+
+ lru-cache@11.5.1: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lz-string@1.5.0: {}
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
math-intrinsics@1.1.0: {}
merge2@1.4.1: {}
@@ -3086,6 +4871,12 @@ snapshots:
braces: 3.0.3
picomatch: 2.3.1
+ min-indent@1.0.1: {}
+
+ minimatch@10.2.5:
+ dependencies:
+ brace-expansion: 5.0.6
+
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.12
@@ -3094,12 +4885,18 @@ snapshots:
dependencies:
brace-expansion: 2.0.2
+ minimist@1.2.8: {}
+
+ minipass@7.1.3: {}
+
ms@2.1.3: {}
mute-stream@2.0.0: {}
nanoid@3.3.11: {}
+ nanoid@3.3.15: {}
+
natural-compare@1.4.0: {}
next@16.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
@@ -3126,6 +4923,8 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
+ node-releases@2.0.50: {}
+
object-assign@4.1.1: {}
object-inspect@1.13.4: {}
@@ -3162,6 +4961,13 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
+ open@10.2.0:
+ dependencies:
+ default-browser: 5.5.0
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ wsl-utils: 0.1.0
+
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -3177,6 +4983,53 @@ snapshots:
object-keys: 1.1.1
safe-push-apply: 1.0.0
+ oxc-parser@0.127.0:
+ dependencies:
+ '@oxc-project/types': 0.127.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.127.0
+ '@oxc-parser/binding-android-arm64': 0.127.0
+ '@oxc-parser/binding-darwin-arm64': 0.127.0
+ '@oxc-parser/binding-darwin-x64': 0.127.0
+ '@oxc-parser/binding-freebsd-x64': 0.127.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.127.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.127.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.127.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.127.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.127.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.127.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.127.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.127.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.127.0
+ '@oxc-parser/binding-linux-x64-musl': 0.127.0
+ '@oxc-parser/binding-openharmony-arm64': 0.127.0
+ '@oxc-parser/binding-wasm32-wasi': 0.127.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.127.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.127.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.127.0
+
+ oxc-resolver@11.21.3:
+ optionalDependencies:
+ '@oxc-resolver/binding-android-arm-eabi': 11.21.3
+ '@oxc-resolver/binding-android-arm64': 11.21.3
+ '@oxc-resolver/binding-darwin-arm64': 11.21.3
+ '@oxc-resolver/binding-darwin-x64': 11.21.3
+ '@oxc-resolver/binding-freebsd-x64': 11.21.3
+ '@oxc-resolver/binding-linux-arm-gnueabihf': 11.21.3
+ '@oxc-resolver/binding-linux-arm-musleabihf': 11.21.3
+ '@oxc-resolver/binding-linux-arm64-gnu': 11.21.3
+ '@oxc-resolver/binding-linux-arm64-musl': 11.21.3
+ '@oxc-resolver/binding-linux-ppc64-gnu': 11.21.3
+ '@oxc-resolver/binding-linux-riscv64-gnu': 11.21.3
+ '@oxc-resolver/binding-linux-riscv64-musl': 11.21.3
+ '@oxc-resolver/binding-linux-s390x-gnu': 11.21.3
+ '@oxc-resolver/binding-linux-x64-gnu': 11.21.3
+ '@oxc-resolver/binding-linux-x64-musl': 11.21.3
+ '@oxc-resolver/binding-openharmony-arm64': 11.21.3
+ '@oxc-resolver/binding-wasm32-wasi': 11.21.3
+ '@oxc-resolver/binding-win32-arm64-msvc': 11.21.3
+ '@oxc-resolver/binding-win32-x64-msvc': 11.21.3
+
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
@@ -3195,12 +5048,21 @@ snapshots:
path-parse@1.0.7: {}
+ path-scurry@2.0.2:
+ dependencies:
+ lru-cache: 11.5.1
+ minipass: 7.1.3
+
+ pathval@2.0.1: {}
+
picocolors@1.1.1: {}
picomatch@2.3.1: {}
picomatch@4.0.3: {}
+ picomatch@4.0.4: {}
+
possible-typed-array-names@1.1.0: {}
postcss@8.4.31:
@@ -3209,10 +5071,22 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ postcss@8.5.15:
+ dependencies:
+ nanoid: 3.3.15
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
prelude-ls@1.2.1: {}
prettier@3.7.4: {}
+ pretty-format@27.5.1:
+ dependencies:
+ ansi-regex: 5.0.1
+ ansi-styles: 5.2.0
+ react-is: 17.0.2
+
prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
@@ -3223,6 +5097,25 @@ snapshots:
queue-microtask@1.2.3: {}
+ react-docgen-typescript@2.4.0(typescript@5.9.2):
+ dependencies:
+ typescript: 5.9.2
+
+ react-docgen@8.0.3:
+ dependencies:
+ '@babel/core': 7.29.7
+ '@babel/traverse': 7.29.7
+ '@babel/types': 7.29.7
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.28.0
+ '@types/doctrine': 0.0.9
+ '@types/resolve': 1.20.6
+ doctrine: 3.0.0
+ resolve: 1.22.12
+ strip-indent: 4.1.1
+ transitivePeerDependencies:
+ - supports-color
+
react-dom@19.2.0(react@19.2.0):
dependencies:
react: 19.2.0
@@ -3230,8 +5123,23 @@ snapshots:
react-is@16.13.1: {}
+ react-is@17.0.2: {}
+
react@19.2.0: {}
+ recast@0.23.11:
+ dependencies:
+ ast-types: 0.16.1
+ esprima: 4.0.1
+ source-map: 0.6.1
+ tiny-invariant: 1.3.3
+ tslib: 2.8.1
+
+ redent@3.0.0:
+ dependencies:
+ indent-string: 4.0.0
+ strip-indent: 3.0.0
+
reflect.getprototypeof@1.0.10:
dependencies:
call-bind: 1.0.8
@@ -3254,6 +5162,13 @@ snapshots:
resolve-from@4.0.0: {}
+ resolve@1.22.12:
+ dependencies:
+ es-errors: 1.3.0
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
resolve@2.0.0-next.5:
dependencies:
is-core-module: 2.16.1
@@ -3262,6 +5177,29 @@ snapshots:
reusify@1.1.0: {}
+ rolldown@1.1.3:
+ dependencies:
+ '@oxc-project/types': 0.137.0
+ '@rolldown/pluginutils': 1.0.1
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.1.3
+ '@rolldown/binding-darwin-arm64': 1.1.3
+ '@rolldown/binding-darwin-x64': 1.1.3
+ '@rolldown/binding-freebsd-x64': 1.1.3
+ '@rolldown/binding-linux-arm-gnueabihf': 1.1.3
+ '@rolldown/binding-linux-arm64-gnu': 1.1.3
+ '@rolldown/binding-linux-arm64-musl': 1.1.3
+ '@rolldown/binding-linux-ppc64-gnu': 1.1.3
+ '@rolldown/binding-linux-s390x-gnu': 1.1.3
+ '@rolldown/binding-linux-x64-gnu': 1.1.3
+ '@rolldown/binding-linux-x64-musl': 1.1.3
+ '@rolldown/binding-openharmony-arm64': 1.1.3
+ '@rolldown/binding-wasm32-wasi': 1.1.3
+ '@rolldown/binding-win32-arm64-msvc': 1.1.3
+ '@rolldown/binding-win32-x64-msvc': 1.1.3
+
+ run-applescript@7.1.0: {}
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -3385,11 +5323,40 @@ snapshots:
source-map-js@1.2.1: {}
+ source-map@0.6.1: {}
+
stop-iteration-iterator@1.1.0:
dependencies:
es-errors: 1.3.0
internal-slot: 1.1.0
+ storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@storybook/icons': 2.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@testing-library/jest-dom': 6.9.1
+ '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0)
+ '@vitest/expect': 3.2.4
+ '@vitest/spy': 3.2.4
+ '@webcontainer/env': 1.1.1
+ esbuild: 0.25.12
+ open: 10.2.0
+ oxc-parser: 0.127.0
+ oxc-resolver: 11.21.3
+ recast: 0.23.11
+ semver: 7.7.3
+ use-sync-external-store: 1.6.0(react@19.2.0)
+ ws: 8.21.0
+ optionalDependencies:
+ '@types/react': 19.2.2
+ prettier: 3.7.4
+ transitivePeerDependencies:
+ - '@testing-library/dom'
+ - bufferutil
+ - react
+ - react-dom
+ - utf-8-validate
+
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -3444,6 +5411,14 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
+ strip-bom@3.0.0: {}
+
+ strip-indent@3.0.0:
+ dependencies:
+ min-indent: 1.0.1
+
+ strip-indent@4.1.1: {}
+
strip-json-comments@3.1.1: {}
styled-jsx@5.1.6(react@19.2.0):
@@ -3457,11 +5432,22 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
+ tiny-invariant@1.3.3: {}
+
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
+ tinyglobby@0.2.17:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+
+ tinyrainbow@2.0.0: {}
+
+ tinyspy@4.0.4: {}
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -3470,6 +5456,14 @@ snapshots:
dependencies:
typescript: 5.9.2
+ ts-dedent@2.3.0: {}
+
+ tsconfig-paths@4.2.0:
+ dependencies:
+ json5: 2.2.3
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
tslib@2.8.1: {}
turbo@2.9.18:
@@ -3540,10 +5534,41 @@ snapshots:
undici-types@6.21.0: {}
+ unplugin@2.3.11:
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ acorn: 8.15.0
+ picomatch: 4.0.3
+ webpack-virtual-modules: 0.6.2
+
+ update-browserslist-db@1.2.3(browserslist@4.28.4):
+ dependencies:
+ browserslist: 4.28.4
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
+ use-sync-external-store@1.6.0(react@19.2.0):
+ dependencies:
+ react: 19.2.0
+
+ vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12):
+ dependencies:
+ lightningcss: 1.32.0
+ picomatch: 4.0.4
+ postcss: 8.5.15
+ rolldown: 1.1.3
+ tinyglobby: 0.2.17
+ optionalDependencies:
+ '@types/node': 22.15.3
+ esbuild: 0.25.12
+ fsevents: 2.3.3
+
+ webpack-virtual-modules@0.6.2: {}
+
which-boxed-primitive@1.1.1:
dependencies:
is-bigint: 1.1.0
@@ -3597,6 +5622,14 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
+ ws@8.21.0: {}
+
+ wsl-utils@0.1.0:
+ dependencies:
+ is-wsl: 3.1.1
+
+ yallist@3.1.1: {}
+
yocto-queue@0.1.0: {}
yoctocolors-cjs@2.1.3: {}
From 26b440c7dcf5f7d99e05e31d77ba6c4bf6b9228c Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Thu, 25 Jun 2026 20:50:50 +0900
Subject: [PATCH 096/789] =?UTF-8?q?chore(ui):=20Storybook=20=EA=B8=B0?=
=?UTF-8?q?=EB=B3=B8=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../{src => }/.storybook/.gitkeep | 0
.../timo-design-system/.storybook/main.ts | 13 +++++++++
.../timo-design-system/.storybook/preview.ts | 29 +++++++++++++++++++
3 files changed, 42 insertions(+)
rename packages/timo-design-system/{src => }/.storybook/.gitkeep (100%)
create mode 100644 packages/timo-design-system/.storybook/main.ts
create mode 100644 packages/timo-design-system/.storybook/preview.ts
diff --git a/packages/timo-design-system/src/.storybook/.gitkeep b/packages/timo-design-system/.storybook/.gitkeep
similarity index 100%
rename from packages/timo-design-system/src/.storybook/.gitkeep
rename to packages/timo-design-system/.storybook/.gitkeep
diff --git a/packages/timo-design-system/.storybook/main.ts b/packages/timo-design-system/.storybook/main.ts
new file mode 100644
index 00000000..94730b18
--- /dev/null
+++ b/packages/timo-design-system/.storybook/main.ts
@@ -0,0 +1,13 @@
+// 스토리북이 어디서 스토리 파일을 찾을지 정하는 곳
+import type { StorybookConfig } from "@storybook/react-vite";
+
+const config: StorybookConfig = {
+ stories: ["../src/**/*.stories.@(js|jsx|ts|tsx)"],
+ addons: ["@storybook/addon-links"],
+ framework: {
+ name: "@storybook/react-vite",
+ options: {},
+ },
+};
+
+export default config;
diff --git a/packages/timo-design-system/.storybook/preview.ts b/packages/timo-design-system/.storybook/preview.ts
new file mode 100644
index 00000000..71ecede8
--- /dev/null
+++ b/packages/timo-design-system/.storybook/preview.ts
@@ -0,0 +1,29 @@
+import type { Preview } from "@storybook/react-vite";
+
+const preview: Preview = {
+ parameters: {
+ controls: {
+ matchers: {
+ color: /(background|color)$/i,
+ date: /Date$/i,
+ },
+ },
+ viewport: {
+ viewports: {
+ mobile: { name: "Mobile", styles: { width: "375px", height: "812px" } },
+ tablet: {
+ name: "Tablet",
+ styles: { width: "768px", height: "1024px" },
+ },
+ desktop: {
+ name: "Desktop",
+ styles: { width: "1280px", height: "900px" },
+ },
+ },
+ defaultViewport: "desktop",
+ },
+ layout: "centered",
+ },
+};
+
+export default preview;
From 9371293c0e08775f68c2f277a42e2ca4edf8037e Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Thu, 25 Jun 2026 20:52:56 +0900
Subject: [PATCH 097/789] =?UTF-8?q?chore(ui):=20Storybook=20=ED=99=95?=
=?UTF-8?q?=EC=9D=B8=EC=9A=A9=20=EC=8A=A4=ED=86=A0=EB=A6=AC=20=EC=B6=94?=
=?UTF-8?q?=EA=B0=80=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/Introduction.stories.tsx | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
create mode 100644 packages/timo-design-system/src/Introduction.stories.tsx
diff --git a/packages/timo-design-system/src/Introduction.stories.tsx b/packages/timo-design-system/src/Introduction.stories.tsx
new file mode 100644
index 00000000..5ab8eaef
--- /dev/null
+++ b/packages/timo-design-system/src/Introduction.stories.tsx
@@ -0,0 +1,17 @@
+import type { Meta, StoryObj } from "@storybook/react-vite";
+
+const Introduction = () => (
+
+
Timo Design System
+
디자인 시스템 확정 후 공통 컴포넌트와 아이콘을 추가합니다.
+
+);
+
+const meta: Meta = {
+ title: "Introduction",
+ component: Introduction,
+};
+
+export default meta;
+
+export const Default: StoryObj = {};
From a6804c1512fa84032e9020ddbf6b6dca2a63d6dd Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Thu, 25 Jun 2026 20:58:58 +0900
Subject: [PATCH 098/789] =?UTF-8?q?chore(root):=20Storybook=20=EC=8B=A4?=
=?UTF-8?q?=ED=96=89=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EA=B0=84?=
=?UTF-8?q?=EC=86=8C=ED=99=94=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package.json | 2 ++
1 file changed, 2 insertions(+)
diff --git a/package.json b/package.json
index 4e0203fd..10dd62a3 100644
--- a/package.json
+++ b/package.json
@@ -6,6 +6,8 @@
"build:web": "turbo run build --filter=timo-web",
"dev": "turbo run dev",
"dev:web": "turbo run dev --filter=timo-web",
+ "storybook": "pnpm --filter @repo/timo-design-system storybook",
+ "build-storybook": "pnpm --filter @repo/timo-design-system build-storybook",
"lint": "turbo run lint",
"lint:web": "turbo run lint --filter=timo-web",
"format": "prettier --write \"**/*.{ts,tsx,md}\"",
From 9811b764b0751cf3fdda0731bdd23e6a020c24fe Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 25 Jun 2026 23:58:13 +0900
Subject: [PATCH 099/789] =?UTF-8?q?ci(root):=20Debug=20=EC=8A=A4=ED=85=9D?=
=?UTF-8?q?=EC=9D=84=20=EB=B9=8C=EB=93=9C=20=EC=8B=A4=ED=8C=A8=20=EC=8B=9C?=
=?UTF-8?q?=EC=97=90=EB=A7=8C=20=EC=8B=A4=ED=96=89=EB=90=98=EB=8F=84?=
=?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95=20(#15)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Build 스텝에 id: build를 추가했습니다
- Debug 스텝 조건을 if: always()에서 if: steps.build.outcome == 'failure'로 변경하여 빌드 실패 시에만 실행되도록 했습니다
---
.github/workflows/bundle-size.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/bundle-size.yml b/.github/workflows/bundle-size.yml
index 3c0e7c50..7b971078 100644
--- a/.github/workflows/bundle-size.yml
+++ b/.github/workflows/bundle-size.yml
@@ -31,6 +31,7 @@ jobs:
run: pnpm install --frozen-lockfile
- name: Build timo-web
+ id: build
env:
TURBO_UI: false
NO_COLOR: '1'
@@ -38,7 +39,7 @@ jobs:
continue-on-error: true
- name: Debug - 빌드 결과 확인
- if: always()
+ if: steps.build.outcome == 'failure'
run: |
echo "=== .next 디렉토리 ==="
ls apps/timo-web/.next/ 2>/dev/null || echo "(.next 없음)"
From eae60130cec806aba8dde1a8d11634e2b3ed278f Mon Sep 17 00:00:00 2001
From: kimminna
Date: Thu, 25 Jun 2026 23:59:38 +0900
Subject: [PATCH 100/789] =?UTF-8?q?fix(root):=20PR=20=ED=85=9C=ED=94=8C?=
=?UTF-8?q?=EB=A6=BF=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20=EC=98=A4=ED=83=80=20?=
=?UTF-8?q?=EC=88=98=EC=A0=95=20(#15)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/{PULL_REQUEST_TEPLATE.md => PULL_REQUEST_TEMPLATE.md} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename .github/{PULL_REQUEST_TEPLATE.md => PULL_REQUEST_TEMPLATE.md} (100%)
diff --git a/.github/PULL_REQUEST_TEPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
similarity index 100%
rename from .github/PULL_REQUEST_TEPLATE.md
rename to .github/PULL_REQUEST_TEMPLATE.md
From 833dcdd22cb9a78938b7d8695e0f38f041ee413e Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 26 Jun 2026 00:08:06 +0900
Subject: [PATCH 101/789] =?UTF-8?q?fix(root):=20label-by-files=EC=99=80=20?=
=?UTF-8?q?label-pr=20=EA=B0=84=20=EB=9D=BC=EB=B2=A8=20=EC=B6=A9=EB=8F=8C?=
=?UTF-8?q?=20=EC=88=98=EC=A0=95=20(#15)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- PR 변경 파일 목록을 조회해 label-by-files가 추가한 라벨을 보호했습니다
- packages/timo-design-system/** 파일이 변경된 PR에서 ⌚ Timo-Design-system 라벨이 label-pr에 의해 제거되던 버그를 수정했습니다
- apps/timo-web/** 변경 시 ⏰ Timo-web 라벨도 동일하게 보호했습니다
---
.github/workflows/auto-label.yml | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml
index c0dddd89..f3683ce5 100644
--- a/.github/workflows/auto-label.yml
+++ b/.github/workflows/auto-label.yml
@@ -64,6 +64,24 @@ jobs:
});
const currentLabelNames = new Set(currentLabels.map(l => l.name));
+ // labeler.yml이 파일 경로 기준으로 관리하는 라벨은 파일 변경 여부로 보호
+ // label-by-files job이 추가했을 수 있으므로 prefix 기반 제거 대상에서 제외
+ const { data: changedFiles } = await github.rest.pulls.listFiles({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ pull_number: prNumber,
+ per_page: 100,
+ });
+ const fileLabelProtection = new Map([
+ ['⌚ Timo-Design-system', 'packages/timo-design-system/'],
+ ['⏰ Timo-web', 'apps/timo-web/'],
+ ]);
+ const protectedByFiles = new Set(
+ [...fileLabelProtection.entries()]
+ .filter(([, pathPrefix]) => changedFiles.some(f => f.filename.startsWith(pathPrefix)))
+ .map(([label]) => label)
+ );
+
// --- prefix 라벨 ---
// edited 이벤트는 본문 수정만으로도 트리거되므로 제목 변경 여부를 확인
if (action !== 'edited' || context.payload.changes?.title) {
@@ -73,6 +91,8 @@ jobs:
for (const label of currentLabels) {
if (allPrefixLabels.includes(label.name) && label.name !== desiredLabel) {
+ // 파일 변경으로 인해 label-by-files가 추가한 라벨은 제거하지 않음
+ if (protectedByFiles.has(label.name)) continue;
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
From c8708c8efdd89341bd29e01ae7b65b1578dbdf13 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 26 Jun 2026 00:18:21 +0900
Subject: [PATCH 102/789] =?UTF-8?q?fix(root):=20listFiles=20=ED=8E=98?=
=?UTF-8?q?=EC=9D=B4=EC=A7=80=EB=84=A4=EC=9D=B4=EC=85=98=20=EB=88=84?=
=?UTF-8?q?=EB=9D=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EB=9D=BC?=
=?UTF-8?q?=EB=B2=A8=20=EB=B3=B4=ED=98=B8=20=EC=98=A4=EB=A5=98=20=EC=88=98?=
=?UTF-8?q?=EC=A0=95=20(#15)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- pulls.listFiles를 github.paginate로 교체해 100개 초과 PR의 파일 목록을 모두 수집했습니다
- 파일이 100개를 넘는 PR에서 protectedByFiles가 불완전하게 구성되던 문제를 수정했습니다
---
.github/workflows/auto-label.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml
index f3683ce5..d7d37157 100644
--- a/.github/workflows/auto-label.yml
+++ b/.github/workflows/auto-label.yml
@@ -66,7 +66,7 @@ jobs:
// labeler.yml이 파일 경로 기준으로 관리하는 라벨은 파일 변경 여부로 보호
// label-by-files job이 추가했을 수 있으므로 prefix 기반 제거 대상에서 제외
- const { data: changedFiles } = await github.rest.pulls.listFiles({
+ const changedFiles = await github.paginate(github.rest.pulls.listFiles, {
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
From 6bb845bea29f8090ee0790583ad26fb7758e145e Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 26 Jun 2026 00:20:11 +0900
Subject: [PATCH 103/789] =?UTF-8?q?fix(root):=20safeGzipSize=20=EC=98=A4?=
=?UTF-8?q?=EB=A5=98=20=EB=AC=B4=EC=8B=9C=20=EC=A0=9C=EA=B1=B0=EB=A1=9C=20?=
=?UTF-8?q?=EB=B2=88=EB=93=A4=20=EB=B6=84=EC=84=9D=20=EC=8B=A4=ED=8C=A8=20?=
=?UTF-8?q?=EB=AA=85=EC=8B=9C=ED=99=94=20(#15)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 파일 읽기 또는 gzip 압축 실패 시 0을 반환하던 동작을 throw로 변경했습니다
- 잘못된 크기값이 리포트에 포함되는 대신 워크플로우 스텝이 명시적으로 실패합니다
---
.github/scripts/bundle-size-report.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/.github/scripts/bundle-size-report.js b/.github/scripts/bundle-size-report.js
index 3f499976..96da2910 100644
--- a/.github/scripts/bundle-size-report.js
+++ b/.github/scripts/bundle-size-report.js
@@ -18,7 +18,9 @@ const safeGzipSize = (filePath) => {
try {
const content = fs.readFileSync(filePath);
return zlib.gzipSync(content).length;
- } catch { return 0; }
+ } catch (err) {
+ throw new Error(`번들 파일 처리 실패: ${filePath} — ${err.message}`);
+ }
};
const readJson = (filePath) => {
From 0d6ea806f2c0b4cd4f7cb48331b0ea34dca61962 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 00:42:46 +0900
Subject: [PATCH 104/789] =?UTF-8?q?comment(web):=20axios=20=EC=9D=B8?=
=?UTF-8?q?=ED=84=B0=EC=85=89=ED=84=B0=20TODO=20=EC=A3=BC=EC=84=9D=20?=
=?UTF-8?q?=EC=A0=95=EB=A6=AC=20(#17)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- status 변수 선언을 제거하고 에러 핸들링 TODO 주석으로 통합했습니다
---
apps/timo-web/api/axios.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/apps/timo-web/api/axios.ts b/apps/timo-web/api/axios.ts
index c3dc67d2..158e3d79 100644
--- a/apps/timo-web/api/axios.ts
+++ b/apps/timo-web/api/axios.ts
@@ -7,8 +7,7 @@ export const instance = axios.create({
instance.interceptors.response.use(
(response) => response,
(error) => {
- const status = error?.response?.status;
- // 추후 인증 방식 확정 후 에러 핸들링 추가
+ // TODO: 추후 인증 방식 확정 후 error.response.status 기반 에러 핸들링 추가
return Promise.reject(error);
},
);
From bb0ac502c662a8875197cebe5fe413ade519fa72 Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Fri, 26 Jun 2026 02:15:01 +0900
Subject: [PATCH 105/789] =?UTF-8?q?chore(root):=20.prettierignore=EC=97=90?=
=?UTF-8?q?=20.turbo=20=EC=B6=94=EA=B0=80=20(#13)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- turbo 캐시 파일이 prettier 검사 대상에 포함되던 문제를 해결했습니다
---
.prettierignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.prettierignore b/.prettierignore
index 103fb7d5..1267dfe4 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -14,5 +14,6 @@ yarn.lock
# misc
public
.github
+.turbo
turbo/generators/templates/**
From 1c587e8529822ec8cb60818426b64e9bbdf9ce19 Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Fri, 26 Jun 2026 02:15:08 +0900
Subject: [PATCH 106/789] =?UTF-8?q?docs(root):=20code-style=EC=97=90=20App?=
=?UTF-8?q?=20Router=20default=20export=20=EC=98=88=EC=99=B8=20=EB=AA=85?=
=?UTF-8?q?=EC=8B=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 기존 "default export 지양" 규칙이 Next.js App Router 예약 파일과 충돌하던 문제를 예외 항목으로 명시했습니다
---
docs/conventions/code-style.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/docs/conventions/code-style.md b/docs/conventions/code-style.md
index be893f41..56106720 100644
--- a/docs/conventions/code-style.md
+++ b/docs/conventions/code-style.md
@@ -10,6 +10,7 @@
- Arrow function으로 선언: `export const Component = () => {}`
- Named export 사용 (default export 지양)
+ - **예외**: Next.js App Router 예약 파일(`app/**/page.tsx`, `app/**/layout.tsx`, `app/**/loading.tsx` 등)은 프레임워크 요구에 따라 `export default function Page() {}` 형식을 사용한다. → `docs/architecture/scaffolding.md` 참조
- 자식 없으면 self-closing: ``
- 최상단 래퍼는 Fragment: `<>…>`
From e6e07f986f68135766ccf19dd463f956dba3628c Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 08:20:39 +0900
Subject: [PATCH 107/789] =?UTF-8?q?chore(web):=20@sentry/nextjs=20?=
=?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=84=A4=EC=B9=98=20(#24)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- @sentry/nextjs 패키지를 의존성에 추가했습니다
---
apps/timo-web/package.json | 1 +
pnpm-lock.yaml | 1799 +++++++++++++++++++++++++++++++++++-
2 files changed, 1751 insertions(+), 49 deletions(-)
diff --git a/apps/timo-web/package.json b/apps/timo-web/package.json
index 2eb1bd37..7a6bf903 100644
--- a/apps/timo-web/package.json
+++ b/apps/timo-web/package.json
@@ -12,6 +12,7 @@
},
"dependencies": {
"@repo/timo-design-system": "workspace:*",
+ "@sentry/nextjs": "^10.61.0",
"next": "16.2.0",
"react": "^19.2.0",
"react-dom": "^19.2.0"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b0af7a8a..b3b759fd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,9 +26,12 @@ importers:
'@repo/timo-design-system':
specifier: workspace:*
version: link:../../packages/timo-design-system
+ '@sentry/nextjs':
+ specifier: ^10.61.0
+ version: 10.61.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))(next@16.2.0(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.108.0)
next:
specifier: 16.2.0
- version: 16.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ version: 16.2.0(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
react:
specifier: ^19.2.0
version: 19.2.0
@@ -129,6 +132,84 @@ importers:
packages:
+ '@apm-js-collab/code-transformer-bundler-plugins@0.5.0':
+ resolution: {integrity: sha512-YxLBY5nGlurL7QeJLq6e5g0ouBpAp0pwgyA/5rHXEXwhiPLn9ZHbT+Y2LlP90GT872cSocfjWRYu/fnpuBudNQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@apm-js-collab/code-transformer@0.15.0':
+ resolution: {integrity: sha512-XmXYVs8CzJ1Aj79noVbn2weUO/XWtRyURpGqx7aU7DOXlUQhR0WKOQNF0okh7PCeY37vxf7kU3v57OAkEPm3ww==}
+ hasBin: true
+
+ '@apm-js-collab/tracing-hooks@0.10.0':
+ resolution: {integrity: sha512-2/Z3NTewJTruUkmsSnBC5bJlLNUd9keuD1OLlTEpim4FyLhm6m2Rnfv+wrFdUvFfhmH8CRdiDZBqBrn+wyaGuA==}
+
+ '@babel/code-frame@7.29.7':
+ resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.29.7':
+ resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.29.7':
+ resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.29.7':
+ resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.29.7':
+ resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.29.7':
+ resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.29.7':
+ resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.29.7':
+ resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-string-parser@7.29.7':
+ resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.29.7':
+ resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.29.7':
+ resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.29.7':
+ resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.7':
+ resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/template@7.29.7':
+ resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.29.7':
+ resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.29.7':
+ resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
+ engines: {node: '>=6.9.0'}
+
'@emnapi/runtime@1.7.1':
resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
@@ -613,6 +694,25 @@ packages:
'@types/node':
optional: true
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
'@next/env@16.2.0':
resolution: {integrity: sha512-OZIbODWWAi0epQRCRjNe1VO45LOFBzgiyqmTLzIqWq6u1wrxKnAyz1HH6tgY/Mc81YzIjRPoYsPAEr4QV4l9TA==}
@@ -679,6 +779,332 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@opentelemetry/api-logs@0.214.0':
+ resolution: {integrity: sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==}
+ engines: {node: '>=8.0.0'}
+
+ '@opentelemetry/api@1.9.1':
+ resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==}
+ engines: {node: '>=8.0.0'}
+
+ '@opentelemetry/core@2.8.0':
+ resolution: {integrity: sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/instrumentation@0.214.0':
+ resolution: {integrity: sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': ^1.3.0
+
+ '@opentelemetry/resources@2.8.0':
+ resolution: {integrity: sha512-qmXQ27ilDbUK/vGMqwL8D4/rhn76C+sherM4wTbjlfknR8Nvfc/hCxjRJPhkzZzUsPiNg16SA31NxMabwttRjg==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.3.0 <1.10.0'
+
+ '@opentelemetry/sdk-trace-base@2.8.0':
+ resolution: {integrity: sha512-mhU4jp+vW0mGbFRd+GeXHvmfA4aDqWjBjLC3pE5XMpLs0IE2ryYb019Ts2AQrOq67gaTF25D91+fgvEHDZEnuQ==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.3.0 <1.10.0'
+
+ '@opentelemetry/semantic-conventions@1.41.1':
+ resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==}
+ engines: {node: '>=14'}
+
+ '@rollup/plugin-commonjs@28.0.1':
+ resolution: {integrity: sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==}
+ engines: {node: '>=16.0.0 || 14 >= 14.17'}
+ peerDependencies:
+ rollup: ^2.68.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/pluginutils@5.4.0':
+ resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.62.2':
+ resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.62.2':
+ resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.62.2':
+ resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.62.2':
+ resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.62.2':
+ resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.62.2':
+ resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.62.2':
+ resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.62.2':
+ resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.62.2':
+ resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.62.2':
+ resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-gnu@4.62.2':
+ resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.62.2':
+ resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.62.2':
+ resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-musl@4.62.2':
+ resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.62.2':
+ resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.62.2':
+ resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.62.2':
+ resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.62.2':
+ resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.62.2':
+ resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openbsd-x64@4.62.2':
+ resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.62.2':
+ resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.62.2':
+ resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.62.2':
+ resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.62.2':
+ resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.62.2':
+ resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@sentry/babel-plugin-component-annotate@5.3.0':
+ resolution: {integrity: sha512-p4q8gn8wcFqZGP/s2MnJCAAd8fTikaU6A0mM97RDHQgStcrYiaS0Sc5zUNfb1V+UOLPuvdEdL6MwyxfzjYJQTA==}
+ engines: {node: '>= 18'}
+
+ '@sentry/browser-utils@10.61.0':
+ resolution: {integrity: sha512-kj/Qs5hz/VQPOLesgv9wq8O1z3aKSHSkyFiCSzaOthb8ARISchk8Eiukbvw9GxX2gmgsCd0L35gD6gxnhlE9ag==}
+ engines: {node: '>=18'}
+
+ '@sentry/browser@10.61.0':
+ resolution: {integrity: sha512-I02k3/tpCbQ+Dm3d1eA+JHVS452gY4fCTh+fT3FcfZkovB/WaeJcwc+ywQN1jpTYBRKZ1HbXXZQhEhXYvb8MkA==}
+ engines: {node: '>=18'}
+
+ '@sentry/bundler-plugin-core@5.3.0':
+ resolution: {integrity: sha512-L5T60sWdAI3qWwdg3Ptwek/0TY59PERrxyqp4XMUkroayQvGd9r5dIW9Q1kSeXX9iJ442nXbFZKAOyCKV4Z13Q==}
+ engines: {node: '>= 18'}
+
+ '@sentry/cli-darwin@2.58.6':
+ resolution: {integrity: sha512-udAVvcyfNa0R+95GvPz/+43/N3TC0TYKdkQ7D7jhPSzbcMc7l2fxRNN5yB3UpCA5fWFnW4toeaqwDBhb/Wh3LA==}
+ engines: {node: '>=10'}
+ os: [darwin]
+
+ '@sentry/cli-linux-arm64@2.58.6':
+ resolution: {integrity: sha512-q8mEcNNmeXMy5i+jWT30TVpH7LcP4HD21CD5XRSPAd/a912HF6EpK0ybf/1USO14WOhoXbAGi9txwaWabSe33g==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux, freebsd, android]
+
+ '@sentry/cli-linux-arm@2.58.6':
+ resolution: {integrity: sha512-pD0LAt5PcUzAinBwvDqc66x9+2CabHEv486yP0gRjWO7SakbaxmfVq/EXd8VLq/Tzi39LAu422UYK1lpW3MILw==}
+ engines: {node: '>=10'}
+ cpu: [arm]
+ os: [linux, freebsd, android]
+
+ '@sentry/cli-linux-i686@2.58.6':
+ resolution: {integrity: sha512-q8vNJi1eOV/4vxAFWBsEwLHoSYapaZHIf4j76KJGJXFKTkEbsjCOOsKbwUIBTQQhRgV4DFWh3ryfsPS/que4Kg==}
+ engines: {node: '>=10'}
+ cpu: [x86, ia32]
+ os: [linux, freebsd, android]
+
+ '@sentry/cli-linux-x64@2.58.6':
+ resolution: {integrity: sha512-DZu956Mhi3ZRjTBe1WdbGV46ldVbA8d2rgp/fh51GsI25zjBHah4wZnPTSzpc+YqxU6pJpg579B/r3jrIK530Q==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux, freebsd, android]
+
+ '@sentry/cli-win32-arm64@2.58.6':
+ resolution: {integrity: sha512-nj0Ff/kmAB73EPDhR8B4O9r+NUHK5GkPCkGWC+kXVemqAJWL5jcJ5KdxG0l/S0z6RoEoltID8/43/B+TaMlT7A==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@sentry/cli-win32-i686@2.58.6':
+ resolution: {integrity: sha512-WNZiDzPbgsEMQWq4avsQ391v/xWKJDIWWWo9GYl+N/w5qcYKkoDW7wQG7T9FasI6ENn68phChTOAPXXxbfAdOg==}
+ engines: {node: '>=10'}
+ cpu: [x86, ia32]
+ os: [win32]
+
+ '@sentry/cli-win32-x64@2.58.6':
+ resolution: {integrity: sha512-R35WJ17oF4D2eqI1DR2sQQqr0fjRTt5xoP16WrTu91XM2lndRMFsnjh+/GttbxapLCBNlrjzia99MJ0PZHZpgA==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@sentry/cli@2.58.6':
+ resolution: {integrity: sha512-baBcNPLLfUi9WuL+Tpri9BFaAdvugZIKelC5X0tt0Zdy+K0K+PCVSrnNmwMWU/HyaF/SEv6b6UHnXIdqanBlcg==}
+ engines: {node: '>= 10'}
+ hasBin: true
+
+ '@sentry/conventions@0.12.0':
+ resolution: {integrity: sha512-z1JQrl/1SLY+8wpzvork6vl+fpsg/oCCxM7HWWhUnI/R+OGNyoIzieQuggX3uUMY7NBtp8UWCQx6FeFazzOF9g==}
+ engines: {node: '>=14'}
+
+ '@sentry/core@10.61.0':
+ resolution: {integrity: sha512-Edg8t2w45qEKiFnjeA6zRmU47R6la5FEMG+maZEOB2oTyJ+ujmh8LGaZ3G8aC0VdkKn8CXhHtDesze6oDc1oTA==}
+ engines: {node: '>=18'}
+
+ '@sentry/feedback@10.61.0':
+ resolution: {integrity: sha512-DvG5pc2BibQjdvFC75u1S5DzghcFZ/juCDb2UnRKjiWnNhiUUAweAkUv4mMednrbuOeGOgO2R3CaiqIvDrAUAw==}
+ engines: {node: '>=18'}
+
+ '@sentry/nextjs@10.61.0':
+ resolution: {integrity: sha512-B0LEIPGh0jJWYy45jJxO3z3NOlYmVWBeAXkgfwNsNsATz78SOjeg/SnKTIXg8jqPITMbf49Ic9DXppIRp/BVxg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 || ^16.0.0-0
+
+ '@sentry/node-core@10.61.0':
+ resolution: {integrity: sha512-aVSnYqaq5FXv9hX6lVGbg4gB+mVrb6QDoNE/IBq8OBR90TR9I/KU6KlWAcfB9H7I6CHnedldOpljkMAJ5eZ3qA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@opentelemetry/api': ^1.9.0
+ '@opentelemetry/core': ^1.30.1 || ^2.1.0
+ '@opentelemetry/exporter-trace-otlp-http': '>=0.57.0 <1'
+ '@opentelemetry/instrumentation': '>=0.57.1 <1'
+ '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@opentelemetry/core':
+ optional: true
+ '@opentelemetry/exporter-trace-otlp-http':
+ optional: true
+ '@opentelemetry/instrumentation':
+ optional: true
+ '@opentelemetry/sdk-trace-base':
+ optional: true
+
+ '@sentry/node@10.61.0':
+ resolution: {integrity: sha512-nct3VqOIuPBnsvqHHWkPG6Ta7QwJftxWXQzHt0+soNcWBoh5WU8hEzIPVEXzxTThJ9AOkF/df3ApWUX4i6ylqQ==}
+ engines: {node: '>=18'}
+
+ '@sentry/opentelemetry@10.61.0':
+ resolution: {integrity: sha512-wg8bY1sWPyFOVh59ThiFDeuyheD7DdQliqWmrCCa5q+PSRLij+zpmsGqjlzGU74lzj1Kvpkicw5LsO6U49b2xA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@opentelemetry/api': ^1.9.0
+ '@opentelemetry/core': ^1.30.1 || ^2.1.0
+ '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
+
+ '@sentry/react@10.61.0':
+ resolution: {integrity: sha512-p1Ay3ZfDONSxU2rnX5sMxvxJ9TUi9XzczTN87lVQ29V/PColaRzmRoYVRfrBjffG17ksxYoYhbqipurJk+45cg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ react: ^16.14.0 || 17.x || 18.x || 19.x
+
+ '@sentry/replay-canvas@10.61.0':
+ resolution: {integrity: sha512-n6QUN+qylEdKLcijpJsJ58ekY58kg0nG0dKxkD2wecKubl7B1mj/gwP35NmJOZ35vJTk/KbJeWB//finspJqYg==}
+ engines: {node: '>=18'}
+
+ '@sentry/replay@10.61.0':
+ resolution: {integrity: sha512-EkLaPR7A89mRGucZY9WxKLGeiRKMuNeGfIthLrs9cumUP8Smc80qxSAsF3NggRHSQEeYHDAifY/1q1qW16yvJg==}
+ engines: {node: '>=18'}
+
+ '@sentry/server-utils@10.61.0':
+ resolution: {integrity: sha512-IrOyMzlOyBkWtnVYb54sALf2f8WVqyyp7woRfHw8c3IMwUr5AskGOi7k2rjmUXO3Q0UkfHNVarexiEfo8ZqTsg==}
+ engines: {node: '>=18'}
+
+ '@sentry/vercel-edge@10.61.0':
+ resolution: {integrity: sha512-fZwFR2fcySWiMbeu3CTnoNBYMFFbG1USmRF1exhonYhHte20A2WItBxQlo9jDzcwge2UE+HY4YTgbJd6SfZckg==}
+ engines: {node: '>=18'}
+
+ '@sentry/webpack-plugin@5.3.0':
+ resolution: {integrity: sha512-i3OQUrS0FZlXLgq57RIKDp+vHHzuvYKPCKewAPXULWKMsBXFGhP6veGRQ+6To/pmZkkXjEX5ofVNDy9C3jEPKQ==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ webpack: '>=5.0.0'
+
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
@@ -719,6 +1145,9 @@ packages:
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/estree@1.0.9':
+ resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
+
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -792,6 +1221,68 @@ packages:
resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@webassemblyjs/ast@1.14.1':
+ resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2':
+ resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
+
+ '@webassemblyjs/helper-api-error@1.13.2':
+ resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
+
+ '@webassemblyjs/helper-buffer@1.14.1':
+ resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2':
+ resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
+
+ '@webassemblyjs/ieee754@1.13.2':
+ resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
+
+ '@webassemblyjs/leb128@1.13.2':
+ resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
+
+ '@webassemblyjs/utf8@1.13.2':
+ resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
+
+ '@xtuc/ieee754@1.2.0':
+ resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+
+ '@xtuc/long@4.2.2':
+ resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+
+ acorn-import-attributes@1.9.5:
+ resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
+ peerDependencies:
+ acorn: ^8
+
+ acorn-import-phases@1.0.4:
+ resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==}
+ engines: {node: '>=10.13.0'}
+ peerDependencies:
+ acorn: ^8.14.0
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -802,9 +1293,34 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
+ acorn@8.17.0:
+ resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ agent-base@6.0.2:
+ resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
+ engines: {node: '>= 6.0.0'}
+
+ ajv-formats@2.1.1:
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-keywords@5.1.0:
+ resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
+ peerDependencies:
+ ajv: ^8.8.2
+
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ ajv@8.20.0:
+ resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==}
+
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -844,6 +1360,10 @@ packages:
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
engines: {node: '>= 0.4'}
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
@@ -855,6 +1375,15 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
+
+ baseline-browser-mapping@2.10.40:
+ resolution: {integrity: sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
baseline-browser-mapping@2.10.8:
resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==}
engines: {node: '>=6.0.0'}
@@ -866,10 +1395,22 @@ packages:
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ brace-expansion@5.0.6:
+ resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
+ engines: {node: 18 || 20 || >=22}
+
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ browserslist@4.28.4:
+ resolution: {integrity: sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -889,6 +1430,9 @@ packages:
caniuse-lite@1.0.30001761:
resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==}
+ caniuse-lite@1.0.30001799:
+ resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -896,6 +1440,13 @@ packages:
chardet@2.1.1:
resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
+ chrome-trace-event@1.0.4:
+ resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
+ engines: {node: '>=6.0'}
+
+ cjs-module-lexer@2.2.0:
+ resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==}
+
cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
@@ -910,9 +1461,18 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ commondir@1.0.1:
+ resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -964,13 +1524,24 @@ packages:
resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
engines: {node: '>=12'}
+ dotenv@16.6.1:
+ resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
+ engines: {node: '>=12'}
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
+ electron-to-chromium@1.5.378:
+ resolution: {integrity: sha512-VinvOAuuPmdD1guEgGv5f2Qp7/vlfqOrUOMYNnOD4wj3pit8kRsQHzfIf6teyUGWo15Tg5+bOJaRunvyltpVWQ==}
+
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ enhanced-resolve@5.24.1:
+ resolution: {integrity: sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==}
+ engines: {node: '>=10.13.0'}
+
es-abstract@1.24.0:
resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
engines: {node: '>= 0.4'}
@@ -987,6 +1558,9 @@ packages:
resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
engines: {node: '>= 0.4'}
+ es-module-lexer@2.1.0:
+ resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==}
+
es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
@@ -1008,6 +1582,10 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@@ -1040,6 +1618,10 @@ packages:
eslint: '>6.6.0'
turbo: '>2.0.0'
+ eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+
eslint-scope@8.4.0:
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1070,18 +1652,33 @@ packages:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
+ esquery@1.7.0:
+ resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
+ engines: {node: '>=0.10'}
+
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
+ estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
+ events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -1095,6 +1692,9 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ fast-uri@3.1.2:
+ resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==}
+
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
@@ -1130,6 +1730,11 @@ packages:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
@@ -1140,6 +1745,10 @@ packages:
functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -1160,6 +1769,10 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
+ glob@13.0.6:
+ resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
+ engines: {node: 18 || 20 || >=22}
+
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -1176,6 +1789,9 @@ packages:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
has-bigints@1.1.0:
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines: {node: '>= 0.4'}
@@ -1203,6 +1819,10 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ https-proxy-agent@5.0.1:
+ resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
+ engines: {node: '>= 6'}
+
iconv-lite@0.7.2:
resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
engines: {node: '>=0.10.0'}
@@ -1219,6 +1839,10 @@ packages:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
+ import-in-the-middle@3.2.0:
+ resolution: {integrity: sha512-vR2B6HKIhaBjcZr2bLpFiJ1VbzOlRQ7aby4/gw5WPIzToLjqpfWw3VJ4sk1uDchoOODEirvO2jyrSPtUSL5CrQ==}
+ engines: {node: '>=18'}
+
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@@ -1295,6 +1919,9 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
+ is-reference@1.2.1:
+ resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
+
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
@@ -1341,6 +1968,10 @@ packages:
resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines: {node: '>= 0.4'}
+ jest-worker@27.5.1:
+ resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
+ engines: {node: '>= 10.13.0'}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -1348,15 +1979,28 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
jsx-ast-utils@3.3.5:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'}
@@ -1368,6 +2012,10 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ loader-runner@4.3.2:
+ resolution: {integrity: sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==}
+ engines: {node: '>=6.11.5'}
+
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
@@ -1378,18 +2026,43 @@ packages:
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ lru-cache@11.5.1:
+ resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==}
+ engines: {node: 20 || >=22}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
+ meriyah@6.1.4:
+ resolution: {integrity: sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==}
+ engines: {node: '>=18.0.0'}
+
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
+ minimatch@10.2.5:
+ resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
+ engines: {node: 18 || 20 || >=22}
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -1397,6 +2070,56 @@ packages:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
+ minimizer-webpack-plugin@5.6.1:
+ resolution: {integrity: sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@minify-html/node': '*'
+ '@swc/core': '*'
+ '@swc/css': '*'
+ '@swc/html': '*'
+ clean-css: '*'
+ cssnano: '*'
+ csso: '*'
+ esbuild: '*'
+ html-minifier-terser: '*'
+ lightningcss: '*'
+ postcss: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@minify-html/node':
+ optional: true
+ '@swc/core':
+ optional: true
+ '@swc/css':
+ optional: true
+ '@swc/html':
+ optional: true
+ clean-css:
+ optional: true
+ cssnano:
+ optional: true
+ csso:
+ optional: true
+ esbuild:
+ optional: true
+ html-minifier-terser:
+ optional: true
+ lightningcss:
+ optional: true
+ postcss:
+ optional: true
+ uglify-js:
+ optional: true
+
+ minipass@7.1.3:
+ resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ module-details-from-path@1.0.4:
+ resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -1412,6 +2135,9 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
next@16.2.0:
resolution: {integrity: sha512-NLBVrJy1pbV1Yn00L5sU4vFyAHt5XuSjzrNyFnxo6Com0M0KrL6hHM5B99dbqXb2bE9pm4Ow3Zl1xp6HVY9edQ==}
engines: {node: '>=20.9.0'}
@@ -1433,6 +2159,19 @@ packages:
sass:
optional: true
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-releases@2.0.50:
+ resolution: {integrity: sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==}
+ engines: {node: '>=18'}
+
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -1492,6 +2231,10 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ path-scurry@2.0.2:
+ resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
+ engines: {node: 18 || 20 || >=22}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -1519,9 +2262,16 @@ packages:
resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
engines: {node: '>=14'}
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -1549,6 +2299,14 @@ packages:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ require-in-the-middle@8.0.1:
+ resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==}
+ engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'}
+
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -1560,6 +2318,11 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ rollup@4.62.2:
+ resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -1581,6 +2344,13 @@ packages:
scheduler@0.27.0:
resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+ schema-utils@4.3.3:
+ resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
+ engines: {node: '>= 10.13.0'}
+
+ semifies@1.0.0:
+ resolution: {integrity: sha512-xXR3KGeoxTNWPD4aBvL5NUpMTT7WMANr3EWnaS190QVkY52lqqcVRD7Q05UVbBhiWDGWMlJEUam9m7uFFGVScw==}
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
@@ -1636,6 +2406,17 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stacktrace-parser@0.1.11:
+ resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==}
+ engines: {node: '>=6'}
+
stop-iteration-iterator@1.1.0:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
@@ -1688,10 +2469,23 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
+ tapable@2.3.3:
+ resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
+ engines: {node: '>=6'}
+
+ terser@5.48.0:
+ resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
@@ -1700,6 +2494,9 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
engines: {node: '>=18.12'}
@@ -1717,6 +2514,10 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
+ type-fest@0.7.1:
+ resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==}
+ engines: {node: '>=8'}
+
typed-array-buffer@1.0.3:
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
engines: {node: '>= 0.4'}
@@ -1752,9 +2553,39 @@ packages:
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ watchpack@2.5.2:
+ resolution: {integrity: sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==}
+ engines: {node: '>=10.13.0'}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ webpack-sources@3.5.0:
+ resolution: {integrity: sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==}
+ engines: {node: '>=10.13.0'}
+
+ webpack@5.108.0:
+ resolution: {integrity: sha512-Ln1JuYGPRTXcHECapSFSvACtHmWEN5sQqFJeLLGQ0057S7qzT2eXUz0MZUedtmIrNy3nJgnITSubIYKGED9jSQ==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
which-boxed-primitive@1.1.1:
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
engines: {node: '>= 0.4'}
@@ -1784,6 +2615,9 @@ packages:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@@ -1794,6 +2628,130 @@ packages:
snapshots:
+ '@apm-js-collab/code-transformer-bundler-plugins@0.5.0':
+ dependencies:
+ '@apm-js-collab/code-transformer': 0.15.0
+ es-module-lexer: 2.1.0
+ magic-string: 0.30.21
+ module-details-from-path: 1.0.4
+
+ '@apm-js-collab/code-transformer@0.15.0':
+ dependencies:
+ '@types/estree': 1.0.8
+ astring: 1.9.0
+ esquery: 1.7.0
+ meriyah: 6.1.4
+ semifies: 1.0.0
+ source-map: 0.6.1
+
+ '@apm-js-collab/tracing-hooks@0.10.0':
+ dependencies:
+ '@apm-js-collab/code-transformer': 0.15.0
+ debug: 4.4.3
+ module-details-from-path: 1.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/code-frame@7.29.7':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.29.7
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.29.7': {}
+
+ '@babel/core@7.29.7':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/generator': 7.29.7
+ '@babel/helper-compilation-targets': 7.29.7
+ '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7)
+ '@babel/helpers': 7.29.7
+ '@babel/parser': 7.29.7
+ '@babel/template': 7.29.7
+ '@babel/traverse': 7.29.7
+ '@babel/types': 7.29.7
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.29.7':
+ dependencies:
+ '@babel/parser': 7.29.7
+ '@babel/types': 7.29.7
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.29.7':
+ dependencies:
+ '@babel/compat-data': 7.29.7
+ '@babel/helper-validator-option': 7.29.7
+ browserslist: 4.28.4
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.29.7': {}
+
+ '@babel/helper-module-imports@7.29.7':
+ dependencies:
+ '@babel/traverse': 7.29.7
+ '@babel/types': 7.29.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)':
+ dependencies:
+ '@babel/core': 7.29.7
+ '@babel/helper-module-imports': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
+ '@babel/traverse': 7.29.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.29.7': {}
+
+ '@babel/helper-validator-identifier@7.29.7': {}
+
+ '@babel/helper-validator-option@7.29.7': {}
+
+ '@babel/helpers@7.29.7':
+ dependencies:
+ '@babel/template': 7.29.7
+ '@babel/types': 7.29.7
+
+ '@babel/parser@7.29.7':
+ dependencies:
+ '@babel/types': 7.29.7
+
+ '@babel/template@7.29.7':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/parser': 7.29.7
+ '@babel/types': 7.29.7
+
+ '@babel/traverse@7.29.7':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/generator': 7.29.7
+ '@babel/helper-globals': 7.29.7
+ '@babel/parser': 7.29.7
+ '@babel/template': 7.29.7
+ '@babel/types': 7.29.7
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.29.7':
+ dependencies:
+ '@babel/helper-string-parser': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
+
'@emnapi/runtime@1.7.1':
dependencies:
tslib: 2.8.1
@@ -2125,78 +3083,412 @@ snapshots:
optionalDependencies:
'@types/node': 22.15.3
- '@inquirer/rawlist@4.1.11(@types/node@22.15.3)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@22.15.3)
- '@inquirer/type': 3.0.10(@types/node@22.15.3)
- yoctocolors-cjs: 2.1.3
- optionalDependencies:
- '@types/node': 22.15.3
+ '@inquirer/rawlist@4.1.11(@types/node@22.15.3)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.15.3)
+ '@inquirer/type': 3.0.10(@types/node@22.15.3)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.15.3
+
+ '@inquirer/search@3.2.2(@types/node@22.15.3)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.15.3)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.15.3)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.15.3
+
+ '@inquirer/select@4.4.2(@types/node@22.15.3)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@22.15.3)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.15.3)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.15.3
+
+ '@inquirer/type@3.0.10(@types/node@22.15.3)':
+ optionalDependencies:
+ '@types/node': 22.15.3
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/source-map@0.3.11':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@next/env@16.2.0': {}
+
+ '@next/eslint-plugin-next@16.2.0':
+ dependencies:
+ fast-glob: 3.3.1
+
+ '@next/swc-darwin-arm64@16.2.0':
+ optional: true
+
+ '@next/swc-darwin-x64@16.2.0':
+ optional: true
+
+ '@next/swc-linux-arm64-gnu@16.2.0':
+ optional: true
+
+ '@next/swc-linux-arm64-musl@16.2.0':
+ optional: true
+
+ '@next/swc-linux-x64-gnu@16.2.0':
+ optional: true
+
+ '@next/swc-linux-x64-musl@16.2.0':
+ optional: true
+
+ '@next/swc-win32-arm64-msvc@16.2.0':
+ optional: true
+
+ '@next/swc-win32-x64-msvc@16.2.0':
+ optional: true
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@opentelemetry/api-logs@0.214.0':
+ dependencies:
+ '@opentelemetry/api': 1.9.1
+
+ '@opentelemetry/api@1.9.1': {}
+
+ '@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1)':
+ dependencies:
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/semantic-conventions': 1.41.1
+
+ '@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1)':
+ dependencies:
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/api-logs': 0.214.0
+ import-in-the-middle: 3.2.0
+ require-in-the-middle: 8.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@opentelemetry/resources@2.8.0(@opentelemetry/api@1.9.1)':
+ dependencies:
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/semantic-conventions': 1.41.1
+
+ '@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)':
+ dependencies:
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/semantic-conventions': 1.41.1
+
+ '@opentelemetry/semantic-conventions@1.41.1': {}
+
+ '@rollup/plugin-commonjs@28.0.1(rollup@4.62.2)':
+ dependencies:
+ '@rollup/pluginutils': 5.4.0(rollup@4.62.2)
+ commondir: 1.0.1
+ estree-walker: 2.0.2
+ fdir: 6.5.0(picomatch@4.0.3)
+ is-reference: 1.2.1
+ magic-string: 0.30.21
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.62.2
+
+ '@rollup/pluginutils@5.4.0(rollup@4.62.2)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.62.2
+
+ '@rollup/rollup-android-arm-eabi@4.62.2':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.62.2':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.62.2':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.62.2':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.62.2':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.62.2':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.62.2':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.62.2':
+ optional: true
- '@inquirer/search@3.2.2(@types/node@22.15.3)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@22.15.3)
- '@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@22.15.3)
- yoctocolors-cjs: 2.1.3
- optionalDependencies:
- '@types/node': 22.15.3
+ '@rollup/rollup-openharmony-arm64@4.62.2':
+ optional: true
- '@inquirer/select@4.4.2(@types/node@22.15.3)':
- dependencies:
- '@inquirer/ansi': 1.0.2
- '@inquirer/core': 10.3.2(@types/node@22.15.3)
- '@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@22.15.3)
- yoctocolors-cjs: 2.1.3
- optionalDependencies:
- '@types/node': 22.15.3
+ '@rollup/rollup-win32-arm64-msvc@4.62.2':
+ optional: true
- '@inquirer/type@3.0.10(@types/node@22.15.3)':
- optionalDependencies:
- '@types/node': 22.15.3
+ '@rollup/rollup-win32-ia32-msvc@4.62.2':
+ optional: true
- '@next/env@16.2.0': {}
+ '@rollup/rollup-win32-x64-gnu@4.62.2':
+ optional: true
- '@next/eslint-plugin-next@16.2.0':
+ '@rollup/rollup-win32-x64-msvc@4.62.2':
+ optional: true
+
+ '@sentry/babel-plugin-component-annotate@5.3.0': {}
+
+ '@sentry/browser-utils@10.61.0':
dependencies:
- fast-glob: 3.3.1
+ '@sentry/core': 10.61.0
- '@next/swc-darwin-arm64@16.2.0':
+ '@sentry/browser@10.61.0':
+ dependencies:
+ '@sentry/browser-utils': 10.61.0
+ '@sentry/core': 10.61.0
+ '@sentry/feedback': 10.61.0
+ '@sentry/replay': 10.61.0
+ '@sentry/replay-canvas': 10.61.0
+
+ '@sentry/bundler-plugin-core@5.3.0':
+ dependencies:
+ '@babel/core': 7.29.7
+ '@sentry/babel-plugin-component-annotate': 5.3.0
+ '@sentry/cli': 2.58.6
+ dotenv: 16.6.1
+ find-up: 5.0.0
+ glob: 13.0.6
+ magic-string: 0.30.21
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ '@sentry/cli-darwin@2.58.6':
optional: true
- '@next/swc-darwin-x64@16.2.0':
+ '@sentry/cli-linux-arm64@2.58.6':
optional: true
- '@next/swc-linux-arm64-gnu@16.2.0':
+ '@sentry/cli-linux-arm@2.58.6':
optional: true
- '@next/swc-linux-arm64-musl@16.2.0':
+ '@sentry/cli-linux-i686@2.58.6':
optional: true
- '@next/swc-linux-x64-gnu@16.2.0':
+ '@sentry/cli-linux-x64@2.58.6':
optional: true
- '@next/swc-linux-x64-musl@16.2.0':
+ '@sentry/cli-win32-arm64@2.58.6':
optional: true
- '@next/swc-win32-arm64-msvc@16.2.0':
+ '@sentry/cli-win32-i686@2.58.6':
optional: true
- '@next/swc-win32-x64-msvc@16.2.0':
+ '@sentry/cli-win32-x64@2.58.6':
optional: true
- '@nodelib/fs.scandir@2.1.5':
+ '@sentry/cli@2.58.6':
dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
+ https-proxy-agent: 5.0.1
+ node-fetch: 2.7.0
+ progress: 2.0.3
+ proxy-from-env: 1.1.0
+ which: 2.0.2
+ optionalDependencies:
+ '@sentry/cli-darwin': 2.58.6
+ '@sentry/cli-linux-arm': 2.58.6
+ '@sentry/cli-linux-arm64': 2.58.6
+ '@sentry/cli-linux-i686': 2.58.6
+ '@sentry/cli-linux-x64': 2.58.6
+ '@sentry/cli-win32-arm64': 2.58.6
+ '@sentry/cli-win32-i686': 2.58.6
+ '@sentry/cli-win32-x64': 2.58.6
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
- '@nodelib/fs.stat@2.0.5': {}
+ '@sentry/conventions@0.12.0': {}
- '@nodelib/fs.walk@1.2.8':
+ '@sentry/core@10.61.0': {}
+
+ '@sentry/feedback@10.61.0':
dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.19.1
+ '@sentry/core': 10.61.0
+
+ '@sentry/nextjs@10.61.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))(next@16.2.0(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.108.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.1
+ '@rollup/plugin-commonjs': 28.0.1(rollup@4.62.2)
+ '@sentry/browser-utils': 10.61.0
+ '@sentry/bundler-plugin-core': 5.3.0
+ '@sentry/conventions': 0.12.0
+ '@sentry/core': 10.61.0
+ '@sentry/node': 10.61.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))
+ '@sentry/opentelemetry': 10.61.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
+ '@sentry/react': 10.61.0(react@19.2.0)
+ '@sentry/vercel-edge': 10.61.0
+ '@sentry/webpack-plugin': 5.3.0(webpack@5.108.0)
+ next: 16.2.0(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ rollup: 4.62.2
+ stacktrace-parser: 0.1.11
+ transitivePeerDependencies:
+ - '@opentelemetry/core'
+ - '@opentelemetry/exporter-trace-otlp-http'
+ - '@opentelemetry/sdk-trace-base'
+ - encoding
+ - react
+ - supports-color
+ - webpack
+
+ '@sentry/node-core@10.61.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))':
+ dependencies:
+ '@sentry/conventions': 0.12.0
+ '@sentry/core': 10.61.0
+ '@sentry/opentelemetry': 10.61.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
+ import-in-the-middle: 3.2.0
+ optionalDependencies:
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1)
+
+ '@sentry/node@10.61.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))':
+ dependencies:
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/semantic-conventions': 1.41.1
+ '@sentry/core': 10.61.0
+ '@sentry/node-core': 10.61.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
+ '@sentry/opentelemetry': 10.61.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
+ '@sentry/server-utils': 10.61.0
+ import-in-the-middle: 3.2.0
+ transitivePeerDependencies:
+ - '@opentelemetry/core'
+ - '@opentelemetry/exporter-trace-otlp-http'
+ - supports-color
+
+ '@sentry/opentelemetry@10.61.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))':
+ dependencies:
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1)
+ '@sentry/conventions': 0.12.0
+ '@sentry/core': 10.61.0
+
+ '@sentry/react@10.61.0(react@19.2.0)':
+ dependencies:
+ '@sentry/browser': 10.61.0
+ '@sentry/core': 10.61.0
+ react: 19.2.0
+
+ '@sentry/replay-canvas@10.61.0':
+ dependencies:
+ '@sentry/core': 10.61.0
+ '@sentry/replay': 10.61.0
+
+ '@sentry/replay@10.61.0':
+ dependencies:
+ '@sentry/browser-utils': 10.61.0
+ '@sentry/core': 10.61.0
+
+ '@sentry/server-utils@10.61.0':
+ dependencies:
+ '@apm-js-collab/code-transformer': 0.15.0
+ '@apm-js-collab/code-transformer-bundler-plugins': 0.5.0
+ '@apm-js-collab/tracing-hooks': 0.10.0
+ '@sentry/conventions': 0.12.0
+ '@sentry/core': 10.61.0
+ magic-string: 0.30.21
+ transitivePeerDependencies:
+ - supports-color
+
+ '@sentry/vercel-edge@10.61.0':
+ dependencies:
+ '@opentelemetry/api': 1.9.1
+ '@sentry/core': 10.61.0
+
+ '@sentry/webpack-plugin@5.3.0(webpack@5.108.0)':
+ dependencies:
+ '@sentry/bundler-plugin-core': 5.3.0
+ webpack: 5.108.0
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
'@swc/helpers@0.5.15':
dependencies:
@@ -2229,6 +3521,8 @@ snapshots:
'@types/estree@1.0.8': {}
+ '@types/estree@1.0.9': {}
+
'@types/json-schema@7.0.15': {}
'@types/node@22.15.3':
@@ -2334,12 +3628,117 @@ snapshots:
'@typescript-eslint/types': 8.50.0
eslint-visitor-keys: 4.2.1
+ '@webassemblyjs/ast@1.14.1':
+ dependencies:
+ '@webassemblyjs/helper-numbers': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
+
+ '@webassemblyjs/helper-api-error@1.13.2': {}
+
+ '@webassemblyjs/helper-buffer@1.14.1': {}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ dependencies:
+ '@webassemblyjs/floating-point-hex-parser': 1.13.2
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/wasm-gen': 1.14.1
+
+ '@webassemblyjs/ieee754@1.13.2':
+ dependencies:
+ '@xtuc/ieee754': 1.2.0
+
+ '@webassemblyjs/leb128@1.13.2':
+ dependencies:
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/utf8@1.13.2': {}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/helper-wasm-section': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-opt': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ '@webassemblyjs/wast-printer': 1.14.1
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@xtuc/long': 4.2.2
+
+ '@xtuc/ieee754@1.2.0': {}
+
+ '@xtuc/long@4.2.2': {}
+
+ acorn-import-attributes@1.9.5(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
+ acorn-import-phases@1.0.4(acorn@8.17.0):
+ dependencies:
+ acorn: 8.17.0
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
acorn@8.15.0: {}
+ acorn@8.17.0: {}
+
+ agent-base@6.0.2:
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ ajv-formats@2.1.1(ajv@8.20.0):
+ optionalDependencies:
+ ajv: 8.20.0
+
+ ajv-keywords@5.1.0(ajv@8.20.0):
+ dependencies:
+ ajv: 8.20.0
+ fast-deep-equal: 3.1.3
+
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
@@ -2347,6 +3746,13 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+ ajv@8.20.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.2
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
ansi-regex@5.0.1: {}
ansi-styles@4.3.0:
@@ -2412,6 +3818,8 @@ snapshots:
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
+ astring@1.9.0: {}
+
async-function@1.0.0: {}
available-typed-arrays@1.0.7:
@@ -2420,6 +3828,10 @@ snapshots:
balanced-match@1.0.2: {}
+ balanced-match@4.0.4: {}
+
+ baseline-browser-mapping@2.10.40: {}
+
baseline-browser-mapping@2.10.8: {}
brace-expansion@1.1.12:
@@ -2431,10 +3843,24 @@ snapshots:
dependencies:
balanced-match: 1.0.2
+ brace-expansion@5.0.6:
+ dependencies:
+ balanced-match: 4.0.4
+
braces@3.0.3:
dependencies:
fill-range: 7.1.1
+ browserslist@4.28.4:
+ dependencies:
+ baseline-browser-mapping: 2.10.40
+ caniuse-lite: 1.0.30001799
+ electron-to-chromium: 1.5.378
+ node-releases: 2.0.50
+ update-browserslist-db: 1.2.3(browserslist@4.28.4)
+
+ buffer-from@1.1.2: {}
+
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -2456,6 +3882,8 @@ snapshots:
caniuse-lite@1.0.30001761: {}
+ caniuse-lite@1.0.30001799: {}
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -2463,6 +3891,10 @@ snapshots:
chardet@2.1.1: {}
+ chrome-trace-event@1.0.4: {}
+
+ cjs-module-lexer@2.2.0: {}
+
cli-width@4.1.0: {}
client-only@0.0.1: {}
@@ -2473,8 +3905,14 @@ snapshots:
color-name@1.1.4: {}
+ commander@2.20.3: {}
+
+ commondir@1.0.1: {}
+
concat-map@0.0.1: {}
+ convert-source-map@2.0.0: {}
+
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
@@ -2528,14 +3966,23 @@ snapshots:
dotenv@16.0.3: {}
+ dotenv@16.6.1: {}
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0
gopd: 1.2.0
+ electron-to-chromium@1.5.378: {}
+
emoji-regex@8.0.0: {}
+ enhanced-resolve@5.24.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.3
+
es-abstract@1.24.0:
dependencies:
array-buffer-byte-length: 1.0.2
@@ -2616,6 +4063,8 @@ snapshots:
iterator.prototype: 1.1.5
safe-array-concat: 1.1.3
+ es-module-lexer@2.1.0: {}
+
es-object-atoms@1.1.1:
dependencies:
es-errors: 1.3.0
@@ -2666,6 +4115,8 @@ snapshots:
'@esbuild/win32-ia32': 0.25.12
'@esbuild/win32-x64': 0.25.12
+ escalade@3.2.0: {}
+
escape-string-regexp@4.0.0: {}
eslint-config-prettier@10.1.1(eslint@9.39.1):
@@ -2706,6 +4157,11 @@ snapshots:
eslint: 9.39.1
turbo: 2.9.18
+ eslint-scope@5.1.1:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
eslint-scope@8.4.0:
dependencies:
esrecurse: 4.3.0
@@ -2764,14 +4220,24 @@ snapshots:
dependencies:
estraverse: 5.3.0
+ esquery@1.7.0:
+ dependencies:
+ estraverse: 5.3.0
+
esrecurse@4.3.0:
dependencies:
estraverse: 5.3.0
+ estraverse@4.3.0: {}
+
estraverse@5.3.0: {}
+ estree-walker@2.0.2: {}
+
esutils@2.0.3: {}
+ events@3.3.0: {}
+
fast-deep-equal@3.1.3: {}
fast-glob@3.3.1:
@@ -2786,6 +4252,8 @@ snapshots:
fast-levenshtein@2.0.6: {}
+ fast-uri@3.1.2: {}
+
fastq@1.19.1:
dependencies:
reusify: 1.1.0
@@ -2818,6 +4286,9 @@ snapshots:
dependencies:
is-callable: 1.2.7
+ fsevents@2.3.3:
+ optional: true
+
function-bind@1.1.2: {}
function.prototype.name@1.1.8:
@@ -2831,6 +4302,8 @@ snapshots:
functions-have-names@1.2.3: {}
+ gensync@1.0.0-beta.2: {}
+
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -2863,6 +4336,12 @@ snapshots:
dependencies:
is-glob: 4.0.3
+ glob@13.0.6:
+ dependencies:
+ minimatch: 10.2.5
+ minipass: 7.1.3
+ path-scurry: 2.0.2
+
globals@14.0.0: {}
globals@16.5.0: {}
@@ -2874,6 +4353,8 @@ snapshots:
gopd@1.2.0: {}
+ graceful-fs@4.2.11: {}
+
has-bigints@1.1.0: {}
has-flag@4.0.0: {}
@@ -2896,6 +4377,13 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ https-proxy-agent@5.0.1:
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
iconv-lite@0.7.2:
dependencies:
safer-buffer: 2.1.2
@@ -2909,6 +4397,13 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
+ import-in-the-middle@3.2.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-import-attributes: 1.9.5(acorn@8.15.0)
+ cjs-module-lexer: 2.2.0
+ module-details-from-path: 1.0.4
+
imurmurhash@0.1.4: {}
internal-slot@1.1.0:
@@ -2987,6 +4482,10 @@ snapshots:
is-number@7.0.0: {}
+ is-reference@1.2.1:
+ dependencies:
+ '@types/estree': 1.0.8
+
is-regex@1.2.1:
dependencies:
call-bound: 1.0.4
@@ -3039,18 +4538,30 @@ snapshots:
has-symbols: 1.1.0
set-function-name: 2.0.2
+ jest-worker@27.5.1:
+ dependencies:
+ '@types/node': 22.15.3
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
js-tokens@4.0.0: {}
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
+ jsesc@3.1.0: {}
+
json-buffer@3.0.1: {}
json-schema-traverse@0.4.1: {}
+ json-schema-traverse@1.0.0: {}
+
json-stable-stringify-without-jsonify@1.0.1: {}
+ json5@2.2.3: {}
+
jsx-ast-utils@3.3.5:
dependencies:
array-includes: 3.1.9
@@ -3067,6 +4578,8 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ loader-runner@4.3.2: {}
+
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
@@ -3077,15 +4590,35 @@ snapshots:
dependencies:
js-tokens: 4.0.0
+ lru-cache@11.5.1: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
math-intrinsics@1.1.0: {}
+ merge-stream@2.0.0: {}
+
merge2@1.4.1: {}
+ meriyah@6.1.4: {}
+
micromatch@4.0.8:
dependencies:
braces: 3.0.3
picomatch: 2.3.1
+ mime-db@1.54.0: {}
+
+ minimatch@10.2.5:
+ dependencies:
+ brace-expansion: 5.0.6
+
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.12
@@ -3094,6 +4627,18 @@ snapshots:
dependencies:
brace-expansion: 2.0.2
+ minimizer-webpack-plugin@5.6.1(webpack@5.108.0):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ jest-worker: 27.5.1
+ schema-utils: 4.3.3
+ terser: 5.48.0
+ webpack: 5.108.0
+
+ minipass@7.1.3: {}
+
+ module-details-from-path@1.0.4: {}
+
ms@2.1.3: {}
mute-stream@2.0.0: {}
@@ -3102,7 +4647,9 @@ snapshots:
natural-compare@1.4.0: {}
- next@16.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
+ neo-async@2.6.2: {}
+
+ next@16.2.0(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
'@next/env': 16.2.0
'@swc/helpers': 0.5.15
@@ -3111,7 +4658,7 @@ snapshots:
postcss: 8.4.31
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- styled-jsx: 5.1.6(react@19.2.0)
+ styled-jsx: 5.1.6(@babel/core@7.29.7)(react@19.2.0)
optionalDependencies:
'@next/swc-darwin-arm64': 16.2.0
'@next/swc-darwin-x64': 16.2.0
@@ -3121,11 +4668,18 @@ snapshots:
'@next/swc-linux-x64-musl': 16.2.0
'@next/swc-win32-arm64-msvc': 16.2.0
'@next/swc-win32-x64-msvc': 16.2.0
+ '@opentelemetry/api': 1.9.1
sharp: 0.34.5
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-releases@2.0.50: {}
+
object-assign@4.1.1: {}
object-inspect@1.13.4: {}
@@ -3195,6 +4749,11 @@ snapshots:
path-parse@1.0.7: {}
+ path-scurry@2.0.2:
+ dependencies:
+ lru-cache: 11.5.1
+ minipass: 7.1.3
+
picocolors@1.1.1: {}
picomatch@2.3.1: {}
@@ -3213,12 +4772,16 @@ snapshots:
prettier@3.7.4: {}
+ progress@2.0.3: {}
+
prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
object-assign: 4.1.1
react-is: 16.13.1
+ proxy-from-env@1.1.0: {}
+
punycode@2.3.1: {}
queue-microtask@1.2.3: {}
@@ -3252,6 +4815,15 @@ snapshots:
gopd: 1.2.0
set-function-name: 2.0.2
+ require-from-string@2.0.2: {}
+
+ require-in-the-middle@8.0.1:
+ dependencies:
+ debug: 4.4.3
+ module-details-from-path: 1.0.4
+ transitivePeerDependencies:
+ - supports-color
+
resolve-from@4.0.0: {}
resolve@2.0.0-next.5:
@@ -3262,6 +4834,37 @@ snapshots:
reusify@1.1.0: {}
+ rollup@4.62.2:
+ dependencies:
+ '@types/estree': 1.0.9
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.62.2
+ '@rollup/rollup-android-arm64': 4.62.2
+ '@rollup/rollup-darwin-arm64': 4.62.2
+ '@rollup/rollup-darwin-x64': 4.62.2
+ '@rollup/rollup-freebsd-arm64': 4.62.2
+ '@rollup/rollup-freebsd-x64': 4.62.2
+ '@rollup/rollup-linux-arm-gnueabihf': 4.62.2
+ '@rollup/rollup-linux-arm-musleabihf': 4.62.2
+ '@rollup/rollup-linux-arm64-gnu': 4.62.2
+ '@rollup/rollup-linux-arm64-musl': 4.62.2
+ '@rollup/rollup-linux-loong64-gnu': 4.62.2
+ '@rollup/rollup-linux-loong64-musl': 4.62.2
+ '@rollup/rollup-linux-ppc64-gnu': 4.62.2
+ '@rollup/rollup-linux-ppc64-musl': 4.62.2
+ '@rollup/rollup-linux-riscv64-gnu': 4.62.2
+ '@rollup/rollup-linux-riscv64-musl': 4.62.2
+ '@rollup/rollup-linux-s390x-gnu': 4.62.2
+ '@rollup/rollup-linux-x64-gnu': 4.62.2
+ '@rollup/rollup-linux-x64-musl': 4.62.2
+ '@rollup/rollup-openbsd-x64': 4.62.2
+ '@rollup/rollup-openharmony-arm64': 4.62.2
+ '@rollup/rollup-win32-arm64-msvc': 4.62.2
+ '@rollup/rollup-win32-ia32-msvc': 4.62.2
+ '@rollup/rollup-win32-x64-gnu': 4.62.2
+ '@rollup/rollup-win32-x64-msvc': 4.62.2
+ fsevents: 2.3.3
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -3289,6 +4892,15 @@ snapshots:
scheduler@0.27.0: {}
+ schema-utils@4.3.3:
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 8.20.0
+ ajv-formats: 2.1.1(ajv@8.20.0)
+ ajv-keywords: 5.1.0(ajv@8.20.0)
+
+ semifies@1.0.0: {}
+
semver@6.3.1: {}
semver@7.7.3: {}
@@ -3385,6 +4997,17 @@ snapshots:
source-map-js@1.2.1: {}
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stacktrace-parser@0.1.11:
+ dependencies:
+ type-fest: 0.7.1
+
stop-iteration-iterator@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -3446,17 +5069,32 @@ snapshots:
strip-json-comments@3.1.1: {}
- styled-jsx@5.1.6(react@19.2.0):
+ styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.2.0):
dependencies:
client-only: 0.0.1
react: 19.2.0
+ optionalDependencies:
+ '@babel/core': 7.29.7
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
supports-preserve-symlinks-flag@1.0.0: {}
+ tapable@2.3.3: {}
+
+ terser@5.48.0:
+ dependencies:
+ '@jridgewell/source-map': 0.3.11
+ acorn: 8.17.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
@@ -3466,6 +5104,8 @@ snapshots:
dependencies:
is-number: 7.0.0
+ tr46@0.0.3: {}
+
ts-api-utils@2.1.0(typescript@5.9.2):
dependencies:
typescript: 5.9.2
@@ -3485,6 +5125,8 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
+ type-fest@0.7.1: {}
+
typed-array-buffer@1.0.3:
dependencies:
call-bound: 1.0.4
@@ -3540,10 +5182,67 @@ snapshots:
undici-types@6.21.0: {}
+ update-browserslist-db@1.2.3(browserslist@4.28.4):
+ dependencies:
+ browserslist: 4.28.4
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
+ watchpack@2.5.2:
+ dependencies:
+ graceful-fs: 4.2.11
+
+ webidl-conversions@3.0.1: {}
+
+ webpack-sources@3.5.0: {}
+
+ webpack@5.108.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/wasm-edit': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ acorn: 8.17.0
+ acorn-import-phases: 1.0.4(acorn@8.17.0)
+ browserslist: 4.28.4
+ chrome-trace-event: 1.0.4
+ enhanced-resolve: 5.24.1
+ es-module-lexer: 2.1.0
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ graceful-fs: 4.2.11
+ loader-runner: 4.3.2
+ mime-db: 1.54.0
+ minimizer-webpack-plugin: 5.6.1(webpack@5.108.0)
+ neo-async: 2.6.2
+ schema-utils: 4.3.3
+ tapable: 2.3.3
+ watchpack: 2.5.2
+ webpack-sources: 3.5.0
+ transitivePeerDependencies:
+ - '@minify-html/node'
+ - '@swc/core'
+ - '@swc/css'
+ - '@swc/html'
+ - clean-css
+ - cssnano
+ - csso
+ - esbuild
+ - html-minifier-terser
+ - lightningcss
+ - postcss
+ - uglify-js
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
which-boxed-primitive@1.1.1:
dependencies:
is-bigint: 1.1.0
@@ -3597,6 +5296,8 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
+ yallist@3.1.1: {}
+
yocto-queue@0.1.0: {}
yoctocolors-cjs@2.1.3: {}
From 2a6bdd51205fb1f6615c30612252852fd643ce57 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 08:20:45 +0900
Subject: [PATCH 108/789] =?UTF-8?q?init(web):=20Sentry=20=EC=B4=88?=
=?UTF-8?q?=EA=B8=B0=20=EC=84=B8=ED=8C=85=20(#24)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- withSentryConfig 적용, 런타임별 Sentry 초기화 설정 및 글로벌 에러 바운더리를 추가했습니다
---
apps/timo-web/app/global-error.tsx | 25 +++++++++++++++++++++++++
apps/timo-web/instrumentation-client.ts | 12 ++++++++++++
apps/timo-web/instrumentation.ts | 13 +++++++++++++
apps/timo-web/next.config.js | 10 +++++++++-
apps/timo-web/sentry.edge.config.ts | 10 ++++++++++
apps/timo-web/sentry.server.config.ts | 10 ++++++++++
6 files changed, 79 insertions(+), 1 deletion(-)
create mode 100644 apps/timo-web/app/global-error.tsx
create mode 100644 apps/timo-web/instrumentation-client.ts
create mode 100644 apps/timo-web/instrumentation.ts
create mode 100644 apps/timo-web/sentry.edge.config.ts
create mode 100644 apps/timo-web/sentry.server.config.ts
diff --git a/apps/timo-web/app/global-error.tsx b/apps/timo-web/app/global-error.tsx
new file mode 100644
index 00000000..a4c399fe
--- /dev/null
+++ b/apps/timo-web/app/global-error.tsx
@@ -0,0 +1,25 @@
+"use client";
+
+import * as Sentry from "@sentry/nextjs";
+import { useEffect } from "react";
+
+interface GlobalErrorProps {
+ error: Error & { digest?: string };
+ reset: () => void;
+}
+
+export const GlobalError = ({ error, reset }: GlobalErrorProps) => {
+ useEffect(() => {
+ Sentry.captureException(error);
+ }, [error]);
+
+ return (
+
+
+ 다시 시도
+
+
+ );
+};
+
+export default GlobalError;
diff --git a/apps/timo-web/instrumentation-client.ts b/apps/timo-web/instrumentation-client.ts
new file mode 100644
index 00000000..9bebf4b6
--- /dev/null
+++ b/apps/timo-web/instrumentation-client.ts
@@ -0,0 +1,12 @@
+import * as Sentry from "@sentry/nextjs";
+
+const dsn = process.env.NEXT_PUBLIC_SENTRY_DSN;
+
+if (dsn) {
+ Sentry.init({
+ dsn,
+ environment: process.env.NEXT_PUBLIC_SENTRY_ENVIRONMENT ?? "local",
+ });
+}
+
+export const onRouterTransitionStart = Sentry.captureRouterTransitionStart;
diff --git a/apps/timo-web/instrumentation.ts b/apps/timo-web/instrumentation.ts
new file mode 100644
index 00000000..7cbe93c1
--- /dev/null
+++ b/apps/timo-web/instrumentation.ts
@@ -0,0 +1,13 @@
+import * as Sentry from "@sentry/nextjs";
+
+export async function register() {
+ if (process.env.NEXT_RUNTIME === "nodejs") {
+ await import("./sentry.server.config");
+ }
+
+ if (process.env.NEXT_RUNTIME === "edge") {
+ await import("./sentry.edge.config");
+ }
+}
+
+export const onRequestError = Sentry.captureRequestError;
diff --git a/apps/timo-web/next.config.js b/apps/timo-web/next.config.js
index 4fa0b7fc..43b3e328 100644
--- a/apps/timo-web/next.config.js
+++ b/apps/timo-web/next.config.js
@@ -1,6 +1,14 @@
+import { withSentryConfig } from "@sentry/nextjs";
+
/** @type {import('next').NextConfig} */
const nextConfig = {
transpilePackages: ["@repo/timo-design-system"],
};
-export default nextConfig;
+export default withSentryConfig(nextConfig, {
+ org: "timo-client",
+ project: "timo-web",
+ silent: !process.env.CI,
+ widenClientFileUpload: true,
+ disableLogger: true,
+});
diff --git a/apps/timo-web/sentry.edge.config.ts b/apps/timo-web/sentry.edge.config.ts
new file mode 100644
index 00000000..62bf31d1
--- /dev/null
+++ b/apps/timo-web/sentry.edge.config.ts
@@ -0,0 +1,10 @@
+import * as Sentry from "@sentry/nextjs";
+
+const dsn = process.env.NEXT_PUBLIC_SENTRY_DSN;
+
+if (dsn) {
+ Sentry.init({
+ dsn,
+ environment: process.env.NEXT_PUBLIC_SENTRY_ENVIRONMENT ?? "local",
+ });
+}
diff --git a/apps/timo-web/sentry.server.config.ts b/apps/timo-web/sentry.server.config.ts
new file mode 100644
index 00000000..62bf31d1
--- /dev/null
+++ b/apps/timo-web/sentry.server.config.ts
@@ -0,0 +1,10 @@
+import * as Sentry from "@sentry/nextjs";
+
+const dsn = process.env.NEXT_PUBLIC_SENTRY_DSN;
+
+if (dsn) {
+ Sentry.init({
+ dsn,
+ environment: process.env.NEXT_PUBLIC_SENTRY_ENVIRONMENT ?? "local",
+ });
+}
From f6b6edf34d31f794d47f9d03e5635ccdc483a153 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 08:20:50 +0900
Subject: [PATCH 109/789] =?UTF-8?q?chore(root):=20turbo=20globalEnv?=
=?UTF-8?q?=EC=97=90=20Sentry=20=ED=99=98=EA=B2=BD=EB=B3=80=EC=88=98=20?=
=?UTF-8?q?=EC=B6=94=EA=B0=80=20(#24)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- NEXT_PUBLIC_SENTRY_DSN 등 Sentry 관련 환경변수를 globalEnv에 등록했습니다
---
turbo.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/turbo.json b/turbo.json
index 6bde2596..f6a1f92c 100644
--- a/turbo.json
+++ b/turbo.json
@@ -1,6 +1,7 @@
{
"$schema": "https://turborepo.dev/schema.json",
"ui": "tui",
+ "globalEnv": ["NEXT_RUNTIME", "NEXT_PUBLIC_SENTRY_DSN", "NEXT_PUBLIC_SENTRY_ENVIRONMENT", "CI"],
"tasks": {
"build": {
"dependsOn": ["^build"],
From 28d9cb37ac16bd1fc6377c79de5eb68a83ce2e97 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 08:41:40 +0900
Subject: [PATCH 110/789] =?UTF-8?q?fix(web):=20CI=20=ED=83=80=EC=9E=85=20?=
=?UTF-8?q?=EC=B2=B4=ED=81=AC=C2=B7=EB=A6=B0=ED=8A=B8=20=EC=98=A4=EB=A5=98?=
=?UTF-8?q?=20=EC=88=98=EC=A0=95=20(#17)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- TypeScript 5.x에서 유효하지 않은 ignoreDeprecations 옵션을 제거했습니다
- import 그룹 사이 빈 줄을 추가했습니다
---
apps/timo-web/providers/QueryProvider.tsx | 5 ++++-
apps/timo-web/tsconfig.json | 9 +++++++--
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/apps/timo-web/providers/QueryProvider.tsx b/apps/timo-web/providers/QueryProvider.tsx
index 0504ba00..ac8c65fe 100644
--- a/apps/timo-web/providers/QueryProvider.tsx
+++ b/apps/timo-web/providers/QueryProvider.tsx
@@ -2,6 +2,7 @@
import { QueryClientProvider } from "@tanstack/react-query";
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
+
import { queryClient } from "@/api/query-client";
interface QueryProviderProps {
@@ -12,7 +13,9 @@ export const QueryProvider = ({ children }: QueryProviderProps) => {
return (
{children}
- {process.env.NODE_ENV === "development" ? : null}
+ {process.env.NODE_ENV === "development" ? (
+
+ ) : null}
);
};
diff --git a/apps/timo-web/tsconfig.json b/apps/timo-web/tsconfig.json
index 12ed721f..ffa3271c 100644
--- a/apps/timo-web/tsconfig.json
+++ b/apps/timo-web/tsconfig.json
@@ -1,7 +1,6 @@
{
"extends": "@repo/typescript-config/nextjs.json",
"compilerOptions": {
- "ignoreDeprecations": "6.0",
"plugins": [
{
"name": "next"
@@ -13,6 +12,12 @@
"@/*": ["./*"]
}
},
- "include": ["**/*.ts", "**/*.tsx", "next-env.d.ts", "next.config.js", ".next/types/**/*.ts"],
+ "include": [
+ "**/*.ts",
+ "**/*.tsx",
+ "next-env.d.ts",
+ "next.config.js",
+ ".next/types/**/*.ts"
+ ],
"exclude": ["node_modules"]
}
From 01d05c4d088119dfeed0fcf509c4b025cae471ce Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 09:20:19 +0900
Subject: [PATCH 111/789] =?UTF-8?q?fix(web):=20CI=20=EB=A6=B0=ED=8A=B8=20?=
=?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20(#24)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- global-error.tsx html 태그에 lang 속성을 추가했습니다
- next.config.js에 process 전역 변수 선언을 추가했습니다
---
apps/timo-web/app/global-error.tsx | 2 +-
apps/timo-web/next.config.js | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/apps/timo-web/app/global-error.tsx b/apps/timo-web/app/global-error.tsx
index a4c399fe..1608dd69 100644
--- a/apps/timo-web/app/global-error.tsx
+++ b/apps/timo-web/app/global-error.tsx
@@ -14,7 +14,7 @@ export const GlobalError = ({ error, reset }: GlobalErrorProps) => {
}, [error]);
return (
-
+
다시 시도
diff --git a/apps/timo-web/next.config.js b/apps/timo-web/next.config.js
index 43b3e328..b962c4bd 100644
--- a/apps/timo-web/next.config.js
+++ b/apps/timo-web/next.config.js
@@ -1,3 +1,4 @@
+/* global process */
import { withSentryConfig } from "@sentry/nextjs";
/** @type {import('next').NextConfig} */
From d554d499f5b3b0f8c4532b4fd72a7c3a9d6d7a89 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 09:31:44 +0900
Subject: [PATCH 112/789] =?UTF-8?q?chore(web):=20Sentry=20authToken=20?=
=?UTF-8?q?=ED=99=98=EA=B2=BD=EB=B3=80=EC=88=98=20=EC=84=A4=EC=A0=95=20?=
=?UTF-8?q?=EC=B6=94=EA=B0=80=20(#24)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- withSentryConfig에 SENTRY_AUTH_TOKEN 환경변수를 추가했습니다
---
apps/timo-web/next.config.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/apps/timo-web/next.config.js b/apps/timo-web/next.config.js
index b962c4bd..fd9d8640 100644
--- a/apps/timo-web/next.config.js
+++ b/apps/timo-web/next.config.js
@@ -9,6 +9,7 @@ const nextConfig = {
export default withSentryConfig(nextConfig, {
org: "timo-client",
project: "timo-web",
+ authToken: process.env["SENTRY_AUTH_TOKEN"],
silent: !process.env.CI,
widenClientFileUpload: true,
disableLogger: true,
From e1ae8f21dbe1151544df703fbfc5edc32c1af513 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 09:32:07 +0900
Subject: [PATCH 113/789] =?UTF-8?q?chore(root):=20turbo=20build=EC=97=90?=
=?UTF-8?q?=20SENTRY=5FAUTH=5FTOKEN=20passThroughEnv=20=EC=B6=94=EA=B0=80?=
=?UTF-8?q?=20(#24)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- build 태스크에 SENTRY_AUTH_TOKEN을 passThroughEnv로 등록했습니다
---
turbo.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/turbo.json b/turbo.json
index abf50188..9c5bce09 100644
--- a/turbo.json
+++ b/turbo.json
@@ -12,7 +12,8 @@
"build": {
"dependsOn": ["^build"],
"inputs": ["$TURBO_DEFAULT$", ".env*"],
- "outputs": [".next/**", "!.next/cache/**", "!.next/dev/**"]
+ "outputs": [".next/**", "!.next/cache/**", "!.next/dev/**"],
+ "passThroughEnv": ["SENTRY_AUTH_TOKEN"]
},
"lint": {
"dependsOn": ["^lint"]
From 65aa26700cae21c7d33c80b9d8ed140f3dbf41c3 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 10:08:29 +0900
Subject: [PATCH 114/789] =?UTF-8?q?ci(root):=20=EB=94=94=EC=8A=A4=EC=BD=94?=
=?UTF-8?q?=EB=93=9C=20=EC=95=8C=EB=A6=BC=20=EC=A0=9C=EB=AA=A9=20=ED=95=9C?=
=?UTF-8?q?=EA=B5=AD=EC=96=B4=ED=99=94=C2=B7=EC=9D=B4=EB=A6=84=20=EB=A7=A4?=
=?UTF-8?q?=ED=95=91=C2=B7=EB=9D=BC=EB=B2=A8=20=ED=91=9C=EC=8B=9C=C2=B7rev?=
=?UTF-8?q?iew=5Frequested=20=EC=B6=94=EA=B0=80=20(#28)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 이벤트별 알림 제목을 한국어로 변경했습니다
- GitHub 계정명을 팀원 이름으로 매핑하는 resolve_name 함수를 추가했습니다
- PR·이슈 라벨과 리뷰어를 embed fields로 표시했습니다
- review_requested, ready_for_review 이벤트 핸들링을 추가했습니다
---
.github/workflows/discord-notification.yml | 186 ++++++++++++---------
1 file changed, 105 insertions(+), 81 deletions(-)
diff --git a/.github/workflows/discord-notification.yml b/.github/workflows/discord-notification.yml
index 03edf28f..ecd6b9d3 100644
--- a/.github/workflows/discord-notification.yml
+++ b/.github/workflows/discord-notification.yml
@@ -2,7 +2,7 @@ name: Automated Discord Notification
on:
pull_request:
- types: [opened, reopened, closed]
+ types: [opened, reopened, closed, review_requested, ready_for_review]
pull_request_review:
types: [submitted]
pull_request_review_comment:
@@ -12,7 +12,9 @@ on:
jobs:
notify:
- permissions: {}
+ permissions:
+ contents: read
+ pull-requests: read
runs-on: ubuntu-latest
steps:
@@ -29,111 +31,132 @@ jobs:
exit 0
fi
+ # GitHub ID → 한국어 이름 매핑
+ resolve_name() {
+ case "$1" in
+ kimminna) echo "민아" ;;
+ ehye1) echo "혜원" ;;
+ jjangminii) echo "정민" ;;
+ yumin-kim2) echo "유민" ;;
+ *) echo "$1" ;;
+ esac
+ }
+
+ # Discord embed 색상
+ COLOR_GREEN=5763719 # 머지, 승인
+ COLOR_BLUE=16711782 # PR 열림
+ COLOR_YELLOW=16776960 # 리뷰 요청, 리뷰 코멘트
+ COLOR_RED=15548997 # PR 닫힘, 변경 요청
+ COLOR_GRAY=9807270 # PR 코멘트
+ COLOR_PURPLE=7275516 # 이슈
+
+ # 라벨·리뷰어를 받아 fields JSON 배열 반환
+ build_fields() {
+ local labels="$1"
+ local reviewer="$2"
+ local fields='[]'
+
+ if [ -n "$labels" ]; then
+ fields=$(echo "$fields" | jq --arg v "$labels" '. + [{ name: "라벨", value: $v, inline: true }]')
+ fi
+ if [ -n "$reviewer" ]; then
+ fields=$(echo "$fields" | jq --arg v "$reviewer" '. + [{ name: "리뷰어", value: $v, inline: true }]')
+ fi
+
+ echo "$fields"
+ }
+
EVENT_NAME="${{ github.event_name }}"
+ ACTION="${{ github.event.action }}"
if [ "$EVENT_NAME" = "pull_request" ]; then
- TITLE="[PR] $(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")"
+ PR_TITLE="$(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")"
URL="$(jq -r '.pull_request.html_url // ""' "$GITHUB_EVENT_PATH")"
DESC="$(jq -r '.pull_request.body // "내용 없음"' "$GITHUB_EVENT_PATH")"
- AUTHOR="$(jq -r '.pull_request.user.login // ""' "$GITHUB_EVENT_PATH")"
- COLOR=16711782
-
+ RAW_AUTHOR="$(jq -r '.pull_request.user.login // ""' "$GITHUB_EVENT_PATH")"
+ AUTHOR="$(resolve_name "$RAW_AUTHOR")"
+ LABELS="$(jq -r '[.pull_request.labels[].name] | join(", ")' "$GITHUB_EVENT_PATH")"
MERGED="$(jq -r '.pull_request.merged // false' "$GITHUB_EVENT_PATH")"
- if [ "${{ github.event.action }}" = "closed" ] && [ "$MERGED" = "true" ]; then
- COLOR=5763719
- elif [ "${{ github.event.action }}" = "closed" ]; then
- COLOR=15548997
+ REVIEWER=""
+
+ if [ "$ACTION" = "opened" ]; then
+ TITLE="PR이 열렸습니다 — $PR_TITLE"
+ COLOR=$COLOR_BLUE
+ elif [ "$ACTION" = "reopened" ]; then
+ TITLE="PR이 다시 열렸습니다 — $PR_TITLE"
+ COLOR=$COLOR_BLUE
+ elif [ "$ACTION" = "ready_for_review" ]; then
+ TITLE="PR이 리뷰 준비됐습니다 — $PR_TITLE"
+ COLOR=$COLOR_BLUE
+ elif [ "$ACTION" = "review_requested" ]; then
+ TITLE="리뷰 요청이 왔습니다 — $PR_TITLE"
+ RAW_REVIEWER="$(jq -r '.requested_reviewer.login // ""' "$GITHUB_EVENT_PATH")"
+ REVIEWER="$(resolve_name "$RAW_REVIEWER")"
+ COLOR=$COLOR_YELLOW
+ elif [ "$ACTION" = "closed" ] && [ "$MERGED" = "true" ]; then
+ TITLE="PR이 머지됐습니다 — $PR_TITLE"
+ COLOR=$COLOR_GREEN
+ elif [ "$ACTION" = "closed" ]; then
+ TITLE="PR이 닫혔습니다 — $PR_TITLE"
+ COLOR=$COLOR_RED
+ else
+ exit 0
fi
- FIELDS=$(jq -n \
- --arg repo "${{ github.repository }}" \
- --arg event "${{ github.event.action }}" \
- '[
- {
- name: "Repository",
- value: $repo,
- inline: true
- },
- {
- name: "Event",
- value: $event,
- inline: true
- }
- ]')
+ FIELDS="$(build_fields "$LABELS" "$REVIEWER")"
elif [ "$EVENT_NAME" = "pull_request_review" ]; then
- AUTHOR="$(jq -r '.review.user.login // ""' "$GITHUB_EVENT_PATH")"
+ RAW_AUTHOR="$(jq -r '.review.user.login // ""' "$GITHUB_EVENT_PATH")"
- if [ "$AUTHOR" = "coderabbitai" ] || [ "$AUTHOR" = "coderabbitai[bot]" ]; then
+ if [ "$RAW_AUTHOR" = "coderabbitai" ] || [ "$RAW_AUTHOR" = "coderabbitai[bot]" ]; then
exit 0
fi
- TITLE="[PR Review] $(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")"
+ AUTHOR="$(resolve_name "$RAW_AUTHOR")"
+ PR_TITLE="$(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")"
URL="$(jq -r '.pull_request.html_url // ""' "$GITHUB_EVENT_PATH")"
DESC="$(jq -r '.review.body // "내용 없음"' "$GITHUB_EVENT_PATH")"
- AUTHOR="$(jq -r '.review.user.login // ""' "$GITHUB_EVENT_PATH")"
- COLOR=11796224
+ REVIEW_STATE="$(jq -r '.review.state // ""' "$GITHUB_EVENT_PATH")"
+ LABELS="$(jq -r '[.pull_request.labels[].name] | join(", ")' "$GITHUB_EVENT_PATH")"
+
+ if [ "$REVIEW_STATE" = "approved" ]; then
+ TITLE="리뷰가 승인됐습니다 — $PR_TITLE"
+ COLOR=$COLOR_GREEN
+ elif [ "$REVIEW_STATE" = "changes_requested" ]; then
+ TITLE="변경 요청이 왔습니다 — $PR_TITLE"
+ COLOR=$COLOR_RED
+ else
+ TITLE="리뷰 코멘트가 달렸습니다 — $PR_TITLE"
+ COLOR=$COLOR_YELLOW
+ fi
- FIELDS=$(jq -n \
- --arg repo "${{ github.repository }}" \
- --arg reviewState "$(jq -r '.review.state // ""' "$GITHUB_EVENT_PATH" | tr '[:lower:]' '[:upper:]')" \
- '[
- {
- name: "Repository",
- value: $repo,
- inline: true
- },
- {
- name: "Review Status",
- value: $reviewState,
- inline: true
- }
- ]')
+ FIELDS="$(build_fields "$LABELS" "")"
elif [ "$EVENT_NAME" = "pull_request_review_comment" ]; then
- AUTHOR="$(jq -r '.comment.user.login // ""' "$GITHUB_EVENT_PATH")"
+ RAW_AUTHOR="$(jq -r '.comment.user.login // ""' "$GITHUB_EVENT_PATH")"
- if [ "$AUTHOR" = "coderabbitai" ] || [ "$AUTHOR" = "coderabbitai[bot]" ]; then
+ if [ "$RAW_AUTHOR" = "coderabbitai" ] || [ "$RAW_AUTHOR" = "coderabbitai[bot]" ]; then
exit 0
fi
- TITLE="[PR Comment] $(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")"
+ AUTHOR="$(resolve_name "$RAW_AUTHOR")"
+ PR_TITLE="$(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")"
+ TITLE="PR 코멘트가 달렸습니다 — $PR_TITLE"
URL="$(jq -r '.comment.html_url // ""' "$GITHUB_EVENT_PATH")"
DESC="$(jq -r '.comment.body // "내용 없음"' "$GITHUB_EVENT_PATH")"
- COLOR=3447003
-
- FIELDS=$(jq -n \
- --arg repo "${{ github.repository }}" \
- '[
- {
- name: "Repository",
- value: $repo,
- inline: true
- }
- ]')
+ COLOR=$COLOR_GRAY
+ FIELDS='[]'
else
- TITLE="[Issue] $(jq -r '.issue.title // ""' "$GITHUB_EVENT_PATH")"
+ RAW_AUTHOR="$(jq -r '.issue.user.login // ""' "$GITHUB_EVENT_PATH")"
+ AUTHOR="$(resolve_name "$RAW_AUTHOR")"
+ ISSUE_TITLE="$(jq -r '.issue.title // ""' "$GITHUB_EVENT_PATH")"
+ TITLE="이슈가 열렸습니다 — $ISSUE_TITLE"
URL="$(jq -r '.issue.html_url // ""' "$GITHUB_EVENT_PATH")"
DESC="$(jq -r '.issue.body // "내용 없음"' "$GITHUB_EVENT_PATH")"
- AUTHOR="$(jq -r '.issue.user.login // ""' "$GITHUB_EVENT_PATH")"
- COLOR=7275516
-
- FIELDS=$(jq -n \
- --arg repo "${{ github.repository }}" \
- --arg event "${{ github.event.action }}" \
- '[
- {
- name: "Repository",
- value: $repo,
- inline: true
- },
- {
- name: "Event",
- value: $event,
- inline: true
- }
- ]')
+ COLOR=$COLOR_PURPLE
+ LABELS="$(jq -r '[.issue.labels[].name] | join(", ")' "$GITHUB_EVENT_PATH")"
+ FIELDS="$(build_fields "$LABELS" "")"
fi
if [ ${#DESC} -gt 200 ]; then
@@ -147,6 +170,7 @@ jobs:
--arg url "$URL" \
--arg desc "$CLEAN_DESC" \
--arg author "$AUTHOR" \
+ --arg avatar_user "$RAW_AUTHOR" \
--arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--argjson color "$COLOR" \
--argjson fields "$FIELDS" \
@@ -159,11 +183,11 @@ jobs:
color: $color,
author: {
name: $author,
- icon_url: ("https://github.com/" + $author + ".png")
+ icon_url: ("https://github.com/" + $avatar_user + ".png")
},
fields: $fields,
footer: {
- text: "GitHub Actions Automation"
+ text: "GitHub Actions"
},
timestamp: $timestamp
}
@@ -180,4 +204,4 @@ jobs:
-H "Content-Type: application/json" \
-X POST \
-d @payload.json \
- "$DISCORD_WEBHOOK_URL"
\ No newline at end of file
+ "$DISCORD_WEBHOOK_URL"
From 939a30e83609e365b4c8daf26696e6a0e584b713 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 10:18:06 +0900
Subject: [PATCH 115/789] =?UTF-8?q?ci(root):=20=EB=94=94=EC=8A=A4=EC=BD=94?=
=?UTF-8?q?=EB=93=9C=20=EC=95=8C=EB=A6=BC=20=EB=B3=B8=EB=AC=B8=20=ED=8F=AC?=
=?UTF-8?q?=EB=A7=B7=20=EA=B0=9C=EC=84=A0=20(#28)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- PR·이슈 제목을 description 최상단에 굵게 표시하도록 DESC 구조를 변경했습니다
- 본문 보일러플레이트(헤더, close # 등)를 제거하는 clean_body 함수를 추가했습니다
---
.github/workflows/discord-notification.yml | 56 ++++++++++++++--------
1 file changed, 36 insertions(+), 20 deletions(-)
diff --git a/.github/workflows/discord-notification.yml b/.github/workflows/discord-notification.yml
index ecd6b9d3..c69bc9d4 100644
--- a/.github/workflows/discord-notification.yml
+++ b/.github/workflows/discord-notification.yml
@@ -50,6 +50,17 @@ jobs:
COLOR_GRAY=9807270 # PR 코멘트
COLOR_PURPLE=7275516 # 이슈
+ # PR/이슈 본문에서 보일러플레이트 제거 후 첫 150자 반환
+ clean_body() {
+ echo "$1" \
+ | sed 's/
//gi' \
+ | grep -vE '^\s*(#|close[sd]? #[0-9]+|fixes? #[0-9]+|resolves? #[0-9]+)' \
+ | sed '/^\s*$/d' \
+ | tr '\n' ' ' \
+ | sed 's/ */ /g' \
+ | cut -c1-200
+ }
+
# 라벨·리뷰어를 받아 fields JSON 배열 반환
build_fields() {
local labels="$1"
@@ -79,30 +90,34 @@ jobs:
MERGED="$(jq -r '.pull_request.merged // false' "$GITHUB_EVENT_PATH")"
REVIEWER=""
+ RAW_BODY="$(jq -r '.pull_request.body // ""' "$GITHUB_EVENT_PATH")"
+ CLEAN_BODY="$(clean_body "$RAW_BODY")"
+
if [ "$ACTION" = "opened" ]; then
- TITLE="PR이 열렸습니다 — $PR_TITLE"
+ TITLE="PR이 열렸습니다"
COLOR=$COLOR_BLUE
elif [ "$ACTION" = "reopened" ]; then
- TITLE="PR이 다시 열렸습니다 — $PR_TITLE"
+ TITLE="PR이 다시 열렸습니다"
COLOR=$COLOR_BLUE
elif [ "$ACTION" = "ready_for_review" ]; then
- TITLE="PR이 리뷰 준비됐습니다 — $PR_TITLE"
+ TITLE="PR이 리뷰 준비됐습니다"
COLOR=$COLOR_BLUE
elif [ "$ACTION" = "review_requested" ]; then
- TITLE="리뷰 요청이 왔습니다 — $PR_TITLE"
+ TITLE="리뷰 요청이 왔습니다"
RAW_REVIEWER="$(jq -r '.requested_reviewer.login // ""' "$GITHUB_EVENT_PATH")"
REVIEWER="$(resolve_name "$RAW_REVIEWER")"
COLOR=$COLOR_YELLOW
elif [ "$ACTION" = "closed" ] && [ "$MERGED" = "true" ]; then
- TITLE="PR이 머지됐습니다 — $PR_TITLE"
+ TITLE="PR이 머지됐습니다"
COLOR=$COLOR_GREEN
elif [ "$ACTION" = "closed" ]; then
- TITLE="PR이 닫혔습니다 — $PR_TITLE"
+ TITLE="PR이 닫혔습니다"
COLOR=$COLOR_RED
else
exit 0
fi
+ DESC="**$PR_TITLE**\n$CLEAN_BODY"
FIELDS="$(build_fields "$LABELS" "$REVIEWER")"
elif [ "$EVENT_NAME" = "pull_request_review" ]; then
@@ -120,16 +135,19 @@ jobs:
LABELS="$(jq -r '[.pull_request.labels[].name] | join(", ")' "$GITHUB_EVENT_PATH")"
if [ "$REVIEW_STATE" = "approved" ]; then
- TITLE="리뷰가 승인됐습니다 — $PR_TITLE"
+ TITLE="리뷰가 승인됐습니다"
COLOR=$COLOR_GREEN
elif [ "$REVIEW_STATE" = "changes_requested" ]; then
- TITLE="변경 요청이 왔습니다 — $PR_TITLE"
+ TITLE="변경 요청이 왔습니다"
COLOR=$COLOR_RED
else
- TITLE="리뷰 코멘트가 달렸습니다 — $PR_TITLE"
+ TITLE="리뷰 코멘트가 달렸습니다"
COLOR=$COLOR_YELLOW
fi
+ RAW_BODY="$(jq -r '.review.body // ""' "$GITHUB_EVENT_PATH")"
+ CLEAN_BODY="$(clean_body "$RAW_BODY")"
+ DESC="**$PR_TITLE**\n$CLEAN_BODY"
FIELDS="$(build_fields "$LABELS" "")"
elif [ "$EVENT_NAME" = "pull_request_review_comment" ]; then
@@ -141,9 +159,11 @@ jobs:
AUTHOR="$(resolve_name "$RAW_AUTHOR")"
PR_TITLE="$(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")"
- TITLE="PR 코멘트가 달렸습니다 — $PR_TITLE"
+ TITLE="PR 코멘트가 달렸습니다"
URL="$(jq -r '.comment.html_url // ""' "$GITHUB_EVENT_PATH")"
- DESC="$(jq -r '.comment.body // "내용 없음"' "$GITHUB_EVENT_PATH")"
+ RAW_BODY="$(jq -r '.comment.body // ""' "$GITHUB_EVENT_PATH")"
+ CLEAN_BODY="$(clean_body "$RAW_BODY")"
+ DESC="**$PR_TITLE**\n$CLEAN_BODY"
COLOR=$COLOR_GRAY
FIELDS='[]'
@@ -151,24 +171,20 @@ jobs:
RAW_AUTHOR="$(jq -r '.issue.user.login // ""' "$GITHUB_EVENT_PATH")"
AUTHOR="$(resolve_name "$RAW_AUTHOR")"
ISSUE_TITLE="$(jq -r '.issue.title // ""' "$GITHUB_EVENT_PATH")"
- TITLE="이슈가 열렸습니다 — $ISSUE_TITLE"
+ TITLE="이슈가 열렸습니다"
URL="$(jq -r '.issue.html_url // ""' "$GITHUB_EVENT_PATH")"
- DESC="$(jq -r '.issue.body // "내용 없음"' "$GITHUB_EVENT_PATH")"
+ RAW_BODY="$(jq -r '.issue.body // ""' "$GITHUB_EVENT_PATH")"
+ CLEAN_BODY="$(clean_body "$RAW_BODY")"
+ DESC="**$ISSUE_TITLE**\n$CLEAN_BODY"
COLOR=$COLOR_PURPLE
LABELS="$(jq -r '[.issue.labels[].name] | join(", ")' "$GITHUB_EVENT_PATH")"
FIELDS="$(build_fields "$LABELS" "")"
fi
- if [ ${#DESC} -gt 200 ]; then
- CLEAN_DESC="${DESC:0:200}..."
- else
- CLEAN_DESC="$DESC"
- fi
-
jq -n \
--arg title "$TITLE" \
--arg url "$URL" \
- --arg desc "$CLEAN_DESC" \
+ --arg desc "$DESC" \
--arg author "$AUTHOR" \
--arg avatar_user "$RAW_AUTHOR" \
--arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
From 6fe9a0219ff259090706024255163a77c30a3539 Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 10:23:33 +0900
Subject: [PATCH 116/789] =?UTF-8?q?ci(root):=20=EB=94=94=EC=8A=A4=EC=BD=94?=
=?UTF-8?q?=EB=93=9C=20=EC=95=8C=EB=A6=BC=20=EC=9B=8C=ED=81=AC=ED=94=8C?=
=?UTF-8?q?=EB=A1=9C=EC=9A=B0=20=EB=B3=B4=EC=95=88=C2=B7=EA=B0=80=EB=8F=85?=
=?UTF-8?q?=EC=84=B1=20=EA=B0=9C=EC=84=A0=20(#28)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- EVENT_NAME·ACTION을 env로 이동해 스크립트 인젝션 위험을 제거했습니다
- 불필요한 permissions를 제거했습니다
- 색상 변수명을 의미 기반(COLOR_SUCCESS, COLOR_OPEN 등)으로 변경했습니다
---
.github/workflows/discord-notification.yml | 43 ++++++++++------------
1 file changed, 20 insertions(+), 23 deletions(-)
diff --git a/.github/workflows/discord-notification.yml b/.github/workflows/discord-notification.yml
index c69bc9d4..d3acdd7b 100644
--- a/.github/workflows/discord-notification.yml
+++ b/.github/workflows/discord-notification.yml
@@ -12,9 +12,7 @@ on:
jobs:
notify:
- permissions:
- contents: read
- pull-requests: read
+ permissions: {}
runs-on: ubuntu-latest
steps:
@@ -22,6 +20,8 @@ jobs:
shell: bash
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
+ EVENT_NAME: ${{ github.event_name }}
+ ACTION: ${{ github.event.action }}
run: |
set -euo pipefail
@@ -43,12 +43,12 @@ jobs:
}
# Discord embed 색상
- COLOR_GREEN=5763719 # 머지, 승인
- COLOR_BLUE=16711782 # PR 열림
- COLOR_YELLOW=16776960 # 리뷰 요청, 리뷰 코멘트
- COLOR_RED=15548997 # PR 닫힘, 변경 요청
- COLOR_GRAY=9807270 # PR 코멘트
- COLOR_PURPLE=7275516 # 이슈
+ COLOR_SUCCESS=5763719 # 머지, 승인
+ COLOR_OPEN=16711782 # PR 열림
+ COLOR_REVIEW=16776960 # 리뷰 요청, 리뷰 코멘트
+ COLOR_CLOSED=15548997 # PR 닫힘, 변경 요청
+ COLOR_COMMENT=9807270 # PR 코멘트
+ COLOR_ISSUE=7275516 # 이슈
# PR/이슈 본문에서 보일러플레이트 제거 후 첫 150자 반환
clean_body() {
@@ -77,9 +77,6 @@ jobs:
echo "$fields"
}
- EVENT_NAME="${{ github.event_name }}"
- ACTION="${{ github.event.action }}"
-
if [ "$EVENT_NAME" = "pull_request" ]; then
PR_TITLE="$(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")"
URL="$(jq -r '.pull_request.html_url // ""' "$GITHUB_EVENT_PATH")"
@@ -95,24 +92,24 @@ jobs:
if [ "$ACTION" = "opened" ]; then
TITLE="PR이 열렸습니다"
- COLOR=$COLOR_BLUE
+ COLOR=$COLOR_OPEN
elif [ "$ACTION" = "reopened" ]; then
TITLE="PR이 다시 열렸습니다"
- COLOR=$COLOR_BLUE
+ COLOR=$COLOR_OPEN
elif [ "$ACTION" = "ready_for_review" ]; then
TITLE="PR이 리뷰 준비됐습니다"
- COLOR=$COLOR_BLUE
+ COLOR=$COLOR_OPEN
elif [ "$ACTION" = "review_requested" ]; then
TITLE="리뷰 요청이 왔습니다"
RAW_REVIEWER="$(jq -r '.requested_reviewer.login // ""' "$GITHUB_EVENT_PATH")"
REVIEWER="$(resolve_name "$RAW_REVIEWER")"
- COLOR=$COLOR_YELLOW
+ COLOR=$COLOR_REVIEW
elif [ "$ACTION" = "closed" ] && [ "$MERGED" = "true" ]; then
TITLE="PR이 머지됐습니다"
- COLOR=$COLOR_GREEN
+ COLOR=$COLOR_SUCCESS
elif [ "$ACTION" = "closed" ]; then
TITLE="PR이 닫혔습니다"
- COLOR=$COLOR_RED
+ COLOR=$COLOR_CLOSED
else
exit 0
fi
@@ -136,13 +133,13 @@ jobs:
if [ "$REVIEW_STATE" = "approved" ]; then
TITLE="리뷰가 승인됐습니다"
- COLOR=$COLOR_GREEN
+ COLOR=$COLOR_SUCCESS
elif [ "$REVIEW_STATE" = "changes_requested" ]; then
TITLE="변경 요청이 왔습니다"
- COLOR=$COLOR_RED
+ COLOR=$COLOR_CLOSED
else
TITLE="리뷰 코멘트가 달렸습니다"
- COLOR=$COLOR_YELLOW
+ COLOR=$COLOR_REVIEW
fi
RAW_BODY="$(jq -r '.review.body // ""' "$GITHUB_EVENT_PATH")"
@@ -164,7 +161,7 @@ jobs:
RAW_BODY="$(jq -r '.comment.body // ""' "$GITHUB_EVENT_PATH")"
CLEAN_BODY="$(clean_body "$RAW_BODY")"
DESC="**$PR_TITLE**\n$CLEAN_BODY"
- COLOR=$COLOR_GRAY
+ COLOR=$COLOR_COMMENT
FIELDS='[]'
else
@@ -176,7 +173,7 @@ jobs:
RAW_BODY="$(jq -r '.issue.body // ""' "$GITHUB_EVENT_PATH")"
CLEAN_BODY="$(clean_body "$RAW_BODY")"
DESC="**$ISSUE_TITLE**\n$CLEAN_BODY"
- COLOR=$COLOR_PURPLE
+ COLOR=$COLOR_ISSUE
LABELS="$(jq -r '[.issue.labels[].name] | join(", ")' "$GITHUB_EVENT_PATH")"
FIELDS="$(build_fields "$LABELS" "")"
fi
From 6fabd5ecfb41cc4a318ed765cbcb06e46c83aa9f Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 10:28:24 +0900
Subject: [PATCH 117/789] =?UTF-8?q?fix(root):=20=EB=94=94=EC=8A=A4?=
=?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=95=8C=EB=A6=BC=20grep=20=EC=98=A4?=
=?UTF-8?q?=EB=A5=98=20=EB=B0=A9=EC=A7=80=20=EB=B0=8F=20=ED=8C=80=20?=
=?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EC=9A=94=EC=B2=AD=20=EC=B2=98=EB=A6=AC=20?=
=?UTF-8?q?=EC=B6=94=EA=B0=80=20(#28)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- grep이 매칭 없을 때 set -e로 인해 스크립트가 종료되는 문제를 || true로 수정했습니다
- review_requested 시 팀 리뷰 요청(requested_team)도 처리하도록 추가했습니다
---
.github/workflows/discord-notification.yml | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/discord-notification.yml b/.github/workflows/discord-notification.yml
index d3acdd7b..8e1c9077 100644
--- a/.github/workflows/discord-notification.yml
+++ b/.github/workflows/discord-notification.yml
@@ -54,7 +54,7 @@ jobs:
clean_body() {
echo "$1" \
| sed 's/
//gi' \
- | grep -vE '^\s*(#|close[sd]? #[0-9]+|fixes? #[0-9]+|resolves? #[0-9]+)' \
+ | grep -vE '^\s*(#|close[sd]? #[0-9]+|fixes? #[0-9]+|resolves? #[0-9]+)' || true \
| sed '/^\s*$/d' \
| tr '\n' ' ' \
| sed 's/ */ /g' \
@@ -102,7 +102,12 @@ jobs:
elif [ "$ACTION" = "review_requested" ]; then
TITLE="리뷰 요청이 왔습니다"
RAW_REVIEWER="$(jq -r '.requested_reviewer.login // ""' "$GITHUB_EVENT_PATH")"
- REVIEWER="$(resolve_name "$RAW_REVIEWER")"
+ if [ -z "$RAW_REVIEWER" ]; then
+ RAW_REVIEWER="$(jq -r '.requested_team.name // .requested_team.slug // ""' "$GITHUB_EVENT_PATH")"
+ REVIEWER="$RAW_REVIEWER"
+ else
+ REVIEWER="$(resolve_name "$RAW_REVIEWER")"
+ fi
COLOR=$COLOR_REVIEW
elif [ "$ACTION" = "closed" ] && [ "$MERGED" = "true" ]; then
TITLE="PR이 머지됐습니다"
From 71ed0ff153bb968a3f0dea2338f05018a546babb Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Fri, 26 Jun 2026 14:12:46 +0900
Subject: [PATCH 118/789] =?UTF-8?q?refactor(web):=20GlobalError=EB=A5=BC?=
=?UTF-8?q?=20default=20export=20=ED=95=A8=EC=88=98=20=EC=84=A0=EC=96=B8?=
=?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20(#24)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- named export와 별도 default export를 단일 default function 선언으로 통합했습니다
---
apps/timo-web/app/global-error.tsx | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/apps/timo-web/app/global-error.tsx b/apps/timo-web/app/global-error.tsx
index 1608dd69..7e1e1fa8 100644
--- a/apps/timo-web/app/global-error.tsx
+++ b/apps/timo-web/app/global-error.tsx
@@ -8,7 +8,7 @@ interface GlobalErrorProps {
reset: () => void;
}
-export const GlobalError = ({ error, reset }: GlobalErrorProps) => {
+export default function GlobalError({ error, reset }: GlobalErrorProps) {
useEffect(() => {
Sentry.captureException(error);
}, [error]);
@@ -20,6 +20,4 @@ export const GlobalError = ({ error, reset }: GlobalErrorProps) => {
);
-};
-
-export default GlobalError;
+}
From b2c130e731b80882e58c500b387b496d96e04c6b Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 26 Jun 2026 14:44:44 +0900
Subject: [PATCH 119/789] =?UTF-8?q?remove(root):=20bundle-size=20=EA=B0=9C?=
=?UTF-8?q?=EB=B3=84=20=EC=9B=8C=ED=81=AC=ED=94=8C=EB=A1=9C=EC=9A=B0=C2=B7?=
=?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=A0=9C=EA=B1=B0=20(#3?=
=?UTF-8?q?0)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 통합 성능 리포트 워크플로우로 대체되어 기존 개별 파일을 제거했습니다
---
.github/scripts/bundle-size-report.js | 205 --------------------------
.github/workflows/bundle-size.yml | 59 --------
2 files changed, 264 deletions(-)
delete mode 100644 .github/scripts/bundle-size-report.js
delete mode 100644 .github/workflows/bundle-size.yml
diff --git a/.github/scripts/bundle-size-report.js b/.github/scripts/bundle-size-report.js
deleted file mode 100644
index 96da2910..00000000
--- a/.github/scripts/bundle-size-report.js
+++ /dev/null
@@ -1,205 +0,0 @@
-'use strict';
-
-const fs = require('fs');
-const path = require('path');
-const zlib = require('zlib');
-
-const BUILD_DIR = path.join(process.cwd(), 'apps/timo-web/.next');
-
-const formatBytes = (bytes) => {
- if (bytes >= 1024 * 1024) return `${(bytes / 1024 / 1024).toFixed(2)} MB`;
- if (bytes >= 1024) return `${(bytes / 1024).toFixed(2)} kB`;
- return `${bytes} B`;
-};
-
-const toKb = (bytes) => bytes / 1024;
-
-const safeGzipSize = (filePath) => {
- try {
- const content = fs.readFileSync(filePath);
- return zlib.gzipSync(content).length;
- } catch (err) {
- throw new Error(`번들 파일 처리 실패: ${filePath} — ${err.message}`);
- }
-};
-
-const readJson = (filePath) => {
- try { return JSON.parse(fs.readFileSync(filePath, 'utf8')); } catch { return null; }
-};
-
-const sumDirGzipSize = (dirPath) => {
- if (!fs.existsSync(dirPath)) return 0;
- return fs.readdirSync(dirPath).reduce((sum, file) => {
- const full = path.join(dirPath, file);
- const stat = fs.statSync(full);
- return sum + (stat.isFile() ? safeGzipSize(full) : 0);
- }, 0);
-};
-
-const analyzeBuild = (buildDir) => {
- if (!fs.existsSync(buildDir)) return { routes: [], sharedSize: null };
-
- const buildManifest = readJson(path.join(buildDir, 'build-manifest.json'));
- const routesManifest = readJson(path.join(buildDir, 'routes-manifest.json'));
- // webpack 빌드에서만 생성됨
- const appBuildManifest = readJson(path.join(buildDir, 'app-build-manifest.json'));
-
- if (!buildManifest) return { routes: [], sharedSize: null };
-
- // 내부 Next.js 라우트 필터 (사용자 정의 라우트가 아님)
- const INTERNAL_ROUTES = new Set(['/_not-found', '/_global-error']);
-
- // 공유 번들 gzip 크기 (rootMainFiles)
- const rootMainFiles = buildManifest.rootMainFiles ?? [];
- const sharedBytes = rootMainFiles.reduce(
- (sum, chunk) => sum + safeGzipSize(path.join(buildDir, chunk)),
- 0
- );
-
- let routes = [];
-
- if (appBuildManifest) {
- // webpack 모드: app-build-manifest.json으로 라우트별 청크 매핑
- const pages = appBuildManifest.pages ?? {};
- routes = Object.entries(pages)
- .filter(([route]) => !INTERNAL_ROUTES.has(route))
- .map(([route, chunks]) => {
- const pageBytes = chunks.reduce(
- (sum, chunk) => sum + safeGzipSize(path.join(buildDir, chunk)),
- 0
- );
- const firstLoadBytes = pageBytes + sharedBytes;
- return {
- path: route,
- size: formatBytes(pageBytes),
- firstLoad: formatBytes(firstLoadBytes),
- firstLoadKb: toKb(firstLoadBytes),
- };
- });
- } else {
- // Turbopack 모드: routes-manifest.json으로 라우트 목록 구성
- const staticRoutes = [
- ...(routesManifest?.staticRoutes ?? []),
- ...(routesManifest?.dynamicRoutes ?? []),
- ];
-
- const appChunksDir = path.join(buildDir, 'static', 'chunks', 'app');
-
- routes = staticRoutes
- .filter(({ page }) => !INTERNAL_ROUTES.has(page))
- .map(({ page }) => {
- const segment = page === '/' ? '' : page;
- const pageChunkDir = path.join(appChunksDir, segment);
- const pageBytes = sumDirGzipSize(pageChunkDir);
-
- const firstLoadBytes = pageBytes + sharedBytes;
- return {
- path: page,
- size: formatBytes(pageBytes),
- firstLoad: formatBytes(firstLoadBytes),
- firstLoadKb: toKb(firstLoadBytes),
- };
- });
-
- // 라우트가 없으면 공유 번들만이라도 / 라우트로 표시
- if (routes.length === 0 && sharedBytes > 0) {
- routes = [{
- path: '/',
- size: '0 B',
- firstLoad: formatBytes(sharedBytes),
- firstLoadKb: toKb(sharedBytes),
- }];
- }
- }
-
- return { routes, sharedSize: formatBytes(sharedBytes) };
-};
-
-const WARN_THRESHOLD_KB = 200;
-const ERROR_THRESHOLD_KB = 350;
-
-const sizeIcon = (firstLoadKb) => {
- if (firstLoadKb >= ERROR_THRESHOLD_KB) return '🔴';
- if (firstLoadKb >= WARN_THRESHOLD_KB) return '🟡';
- return '🟢';
-};
-
-const formatRouteTable = (appLabel, { routes, sharedSize }) => {
- if (!routes.length) {
- return `### ${appLabel}\n\n> ⚠️ 번들 크기 데이터를 가져오지 못했습니다 (.next 디렉토리를 확인하세요).\n`;
- }
-
- const rows = routes
- .map(
- (r) =>
- `| \`${r.path}\` | ${r.size} | ${r.firstLoad} | ${sizeIcon(r.firstLoadKb)} |`
- )
- .join('\n');
-
- const sharedLine = sharedSize ? `\n> 공유 번들: **${sharedSize}**\n` : '';
-
- return `### ${appLabel}
-
-| 라우트 | 크기 | First Load JS | 상태 |
-|--------|------|---------------|------|
-${rows}
-${sharedLine}`;
-};
-
-module.exports = async ({ github, context, core }) => {
- const prNumber = context.payload.pull_request?.number;
- if (!prNumber) {
- core.warning('PR 컨텍스트를 찾을 수 없습니다.');
- return;
- }
-
- const { owner, repo } = context.repo;
-
- core.info(`번들 분석 경로: ${BUILD_DIR}`);
- const timoWebBuild = analyzeBuild(BUILD_DIR);
-
- if (!timoWebBuild.routes.length) {
- core.warning(`번들 크기 데이터를 파싱하지 못했습니다. ${BUILD_DIR} 를 확인하세요.`);
- return;
- }
-
- const legend = `> 🟢 정상 (<${WARN_THRESHOLD_KB}kB) 🟡 주의 (<${ERROR_THRESHOLD_KB}kB) 🔴 초과 (≥${ERROR_THRESHOLD_KB}kB) — First Load JS 기준 (gzip 크기)`;
-
- const body = `## 📦 번들 사이즈 리포트
-
-${formatRouteTable('🕐 Timo Web', timoWebBuild)}
-
----
-
-${legend}
-
-*빌드 커밋: \`${context.sha.slice(0, 7)}\`*`;
-
- const { data: comments } = await github.rest.issues.listComments({
- owner,
- repo,
- issue_number: prNumber,
- });
-
- const existing = comments.find(
- (c) => c.user?.type === 'Bot' && c.body?.includes('번들 사이즈 리포트')
- );
-
- if (existing) {
- await github.rest.issues.updateComment({
- owner,
- repo,
- comment_id: existing.id,
- body,
- });
- } else {
- await github.rest.issues.createComment({
- owner,
- repo,
- issue_number: prNumber,
- body,
- });
- }
-
- core.info('번들 사이즈 리포트 PR 코멘트 게시 완료');
-};
diff --git a/.github/workflows/bundle-size.yml b/.github/workflows/bundle-size.yml
deleted file mode 100644
index 7b971078..00000000
--- a/.github/workflows/bundle-size.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-name: 📦 번들 사이즈 리포트
-
-on:
- pull_request:
- types: [opened, synchronize, reopened]
- branches: [main, develop]
-
-permissions:
- contents: read
- pull-requests: write
-
-concurrency:
- group: bundle-size-${{ github.ref }}
- cancel-in-progress: true
-
-jobs:
- bundle-size:
- name: Bundle Size Report
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
-
- - uses: pnpm/action-setup@v4
-
- - uses: actions/setup-node@v4
- with:
- node-version: 24
- cache: 'pnpm'
-
- - name: Install dependencies
- run: pnpm install --frozen-lockfile
-
- - name: Build timo-web
- id: build
- env:
- TURBO_UI: false
- NO_COLOR: '1'
- run: pnpm turbo run build --filter=timo-web --output-logs=full 2>&1 | tee /tmp/timo-web-build.txt
- continue-on-error: true
-
- - name: Debug - 빌드 결과 확인
- if: steps.build.outcome == 'failure'
- run: |
- echo "=== .next 디렉토리 ==="
- ls apps/timo-web/.next/ 2>/dev/null || echo "(.next 없음)"
- echo "=== routes-manifest staticRoutes ==="
- node -e "const m=require('./apps/timo-web/.next/routes-manifest.json');console.log(JSON.stringify(m.staticRoutes,null,2))" 2>/dev/null || echo "(없음)"
- echo "=== build-manifest rootMainFiles ==="
- node -e "const m=require('./apps/timo-web/.next/build-manifest.json');console.log(JSON.stringify(m.rootMainFiles,null,2))" 2>/dev/null || echo "(없음)"
- echo "=== static/chunks/app 디렉토리 ==="
- ls apps/timo-web/.next/static/chunks/app/ 2>/dev/null || echo "(없음)"
-
- - name: 번들 사이즈 PR 코멘트 게시
- uses: actions/github-script@v7
- with:
- github-token: ${{ secrets.GITHUB_TOKEN }}
- script: |
- const fn = require('./.github/scripts/bundle-size-report.js')
- await fn({ github, context, core })
From 5dd63739380ee69abbf45432d2c3146be8130831 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 26 Jun 2026 14:44:52 +0900
Subject: [PATCH 120/789] =?UTF-8?q?ci(root):=20Lighthouse=20=EB=8F=84?=
=?UTF-8?q?=EC=9E=85=20=EB=B0=8F=20=EB=B2=88=EB=93=A4=C2=B7=EC=9D=B4?=
=?UTF-8?q?=EB=AF=B8=EC=A7=80=20=ED=86=B5=ED=95=A9=20=EC=84=B1=EB=8A=A5=20?=
=?UTF-8?q?=EB=A6=AC=ED=8F=AC=ED=8A=B8=20=EC=9B=8C=ED=81=AC=ED=94=8C?=
=?UTF-8?q?=EB=A1=9C=EC=9A=B0=20=EC=B6=94=EA=B0=80=20(#30)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- PR마다 번들 사이즈·Lighthouse·이미지 최적화를 단일 코멘트로 보고하는 워크플로우를 추가했습니다
- apps/timo-web/lighthouserc.cjs에 측정 URL·임계값·Chrome 플래그를 설정했습니다
- .gitignore에 .lighthouseci/ 항목을 추가했습니다
---
.github/scripts/performance-report.js | 242 ++++++++++++++++++++++++++
.github/workflows/performance.yml | 64 +++++++
.gitignore | 3 +
apps/timo-web/lighthouserc.cjs | 30 ++++
4 files changed, 339 insertions(+)
create mode 100644 .github/scripts/performance-report.js
create mode 100644 .github/workflows/performance.yml
create mode 100644 apps/timo-web/lighthouserc.cjs
diff --git a/.github/scripts/performance-report.js b/.github/scripts/performance-report.js
new file mode 100644
index 00000000..78a8aee2
--- /dev/null
+++ b/.github/scripts/performance-report.js
@@ -0,0 +1,242 @@
+'use strict';
+
+const fs = require('fs');
+const path = require('path');
+const zlib = require('zlib');
+
+// ─── Utilities ────────────────────────────────────────────────────────────────
+
+const readJson = (filePath) => {
+ if (!filePath || !fs.existsSync(filePath)) return null;
+ try { return JSON.parse(fs.readFileSync(filePath, 'utf8')); }
+ catch { return null; }
+};
+
+const gzipSize = (filePath) => {
+ try { return zlib.gzipSync(fs.readFileSync(filePath)).length; }
+ catch { return 0; }
+};
+
+const formatBytes = (bytes) => {
+ if (bytes >= 1024 * 1024) return `${(bytes / 1024 / 1024).toFixed(2)} MB`;
+ if (bytes >= 1024) return `${(bytes / 1024).toFixed(2)} kB`;
+ return `${bytes} B`;
+};
+
+// ─── Bundle ───────────────────────────────────────────────────────────────────
+
+const BUILD_DIR = path.join(process.cwd(), 'apps/timo-web/.next');
+const INTERNAL_ROUTES = new Set(['/_not-found', '/_global-error']);
+const BUNDLE_WARN_KB = 200;
+const BUNDLE_ERROR_KB = 350;
+
+const sumDirGzipSize = (dir) => {
+ if (!fs.existsSync(dir)) return 0;
+ return fs.readdirSync(dir).reduce((sum, file) => {
+ const full = path.join(dir, file);
+ return sum + (fs.statSync(full).isFile() ? gzipSize(full) : 0);
+ }, 0);
+};
+
+const analyzeBundle = () => {
+ const buildManifest = readJson(path.join(BUILD_DIR, 'build-manifest.json'));
+ if (!buildManifest) return null;
+
+ const routesManifest = readJson(path.join(BUILD_DIR, 'routes-manifest.json'));
+ const appBuildManifest = readJson(path.join(BUILD_DIR, 'app-build-manifest.json'));
+
+ const sharedBytes = (buildManifest.rootMainFiles ?? []).reduce(
+ (sum, chunk) => sum + gzipSize(path.join(BUILD_DIR, chunk)),
+ 0
+ );
+
+ let routes;
+ if (appBuildManifest) {
+ routes = Object.entries(appBuildManifest.pages ?? {})
+ .filter(([route]) => !INTERNAL_ROUTES.has(route))
+ .map(([route, chunks]) => {
+ const pageBytes = chunks.reduce((sum, c) => sum + gzipSize(path.join(BUILD_DIR, c)), 0);
+ const firstLoad = pageBytes + sharedBytes;
+ return { path: route, size: formatBytes(pageBytes), firstLoad: formatBytes(firstLoad), firstLoadKb: firstLoad / 1024 };
+ });
+ } else {
+ const allRoutes = [
+ ...(routesManifest?.staticRoutes ?? []),
+ ...(routesManifest?.dynamicRoutes ?? []),
+ ];
+ const chunksDir = path.join(BUILD_DIR, 'static', 'chunks', 'app');
+ routes = allRoutes
+ .filter(({ page }) => !INTERNAL_ROUTES.has(page))
+ .map(({ page }) => {
+ const pageBytes = sumDirGzipSize(path.join(chunksDir, page === '/' ? '' : page));
+ const firstLoad = pageBytes + sharedBytes;
+ return { path: page, size: formatBytes(pageBytes), firstLoad: formatBytes(firstLoad), firstLoadKb: firstLoad / 1024 };
+ });
+
+ if (routes.length === 0 && sharedBytes > 0) {
+ routes = [{ path: '/', size: '0 B', firstLoad: formatBytes(sharedBytes), firstLoadKb: sharedBytes / 1024 }];
+ }
+ }
+
+ return { routes, sharedSize: formatBytes(sharedBytes) };
+};
+
+const renderBundle = (data) => {
+ const wrap = (content) => `\nBundle Size — timo-web
\n${content}\n `;
+
+ if (!data?.routes?.length) return wrap('\n> ⚠️ 번들 데이터를 가져오지 못했습니다.\n');
+
+ const rows = data.routes.map(({ path: p, size, firstLoad, firstLoadKb }) => {
+ const icon = firstLoadKb >= BUNDLE_ERROR_KB ? '🔴' : firstLoadKb >= BUNDLE_WARN_KB ? '🟡' : '🟢';
+ return `| \`${p}\` | ${size} | ${icon} ${firstLoad} |`;
+ }).join('\n');
+
+ return wrap(`
+| 라우트 | 크기 | First Load JS |
+|--------|-----:|:-------------|
+${rows}
+
+> 공유 번들: **${data.sharedSize}**
+> 🟢 < ${BUNDLE_WARN_KB}kB | 🟡 < ${BUNDLE_ERROR_KB}kB | 🔴 ≥ ${BUNDLE_ERROR_KB}kB (First Load JS · gzip)
+`);
+};
+
+// ─── Lighthouse ───────────────────────────────────────────────────────────────
+
+const LHCI_DIR = path.join(process.cwd(), '.lighthouseci');
+
+const analyzeLighthouse = () => {
+ const manifest = readJson(path.join(LHCI_DIR, 'manifest.json'));
+ if (!manifest) return null;
+
+ return manifest
+ .filter((r) => r.isRepresentativeRun && r.summary)
+ .map(({ url, summary, jsonPath }) => {
+ let pathname;
+ try { pathname = new URL(url).pathname || '/'; }
+ catch { pathname = url; }
+
+ const audits = readJson(jsonPath)?.audits ?? {};
+ return {
+ pathname,
+ perf: summary.performance,
+ a11y: summary.accessibility,
+ lcp: audits['largest-contentful-paint']?.numericValue,
+ cls: audits['cumulative-layout-shift']?.numericValue,
+ tbt: audits['total-blocking-time']?.numericValue,
+ };
+ });
+};
+
+const fmtScore = (v, threshold) => {
+ const icon = v >= threshold + 0.1 ? '🟢' : v >= threshold ? '🟡' : '🔴';
+ return `${icon} ${Math.round(v * 100)}`;
+};
+
+const renderLighthouse = (data) => {
+ const wrap = (content) => `\nLighthouse — timo-web
\n${content}\n `;
+
+ if (!data?.length) return wrap('\n> ⚠️ Lighthouse 결과를 가져오지 못했습니다.\n');
+
+ const rows = data.map(({ pathname, perf, a11y, lcp, cls, tbt }) => {
+ const lcpFmt = lcp != null ? `${lcp < 2500 ? '🟢' : lcp < 4000 ? '🟡' : '🔴'} ${(lcp / 1000).toFixed(1)}s` : '-';
+ const clsFmt = cls != null ? `${cls < 0.1 ? '🟢' : cls < 0.25 ? '🟡' : '🔴'} ${cls.toFixed(3)}` : '-';
+ const tbtFmt = tbt != null ? `${tbt < 200 ? '🟢' : tbt < 600 ? '🟡' : '🔴'} ${Math.round(tbt)}ms` : '-';
+ return `| \`${pathname}\` | ${fmtScore(perf, 0.7)} | ${fmtScore(a11y, 0.85)} | ${lcpFmt} | ${clsFmt} | ${tbtFmt} |`;
+ }).join('\n');
+
+ return wrap(`
+| URL | Perf | A11y | LCP | CLS | TBT |
+|-----|:----:|:----:|----:|----:|----:|
+${rows}
+
+> **Perf** ≥ 70 / **A11y** ≥ 85 목표
+> **LCP** 🟢 < 2.5s 🟡 < 4s 🔴 ≥ 4s | **CLS** 🟢 < 0.1 🟡 < 0.25 🔴 ≥ 0.25 | **TBT** 🟢 < 200ms 🟡 < 600ms 🔴 ≥ 600ms
+`);
+};
+
+// ─── Images ───────────────────────────────────────────────────────────────────
+
+const PUBLIC_DIR = path.join(process.cwd(), 'apps/timo-web/public');
+const IMAGE_EXTS = new Set(['.jpg', '.jpeg', '.png', '.gif', '.webp', '.avif', '.svg', '.bmp', '.tiff']);
+const MODERN_EXTS = new Set(['.webp', '.avif', '.svg']);
+const IMG_WARN = 200 * 1024;
+const IMG_ERROR = 500 * 1024;
+
+const scanImages = (dir, base = dir) => {
+ if (!fs.existsSync(dir)) return [];
+ return fs.readdirSync(dir).flatMap((file) => {
+ const full = path.join(dir, file);
+ if (fs.statSync(full).isDirectory()) return scanImages(full, base);
+ const ext = path.extname(file).toLowerCase();
+ if (!IMAGE_EXTS.has(ext)) return [];
+ return [{ rel: path.relative(base, full), bytes: fs.statSync(full).size, ext }];
+ });
+};
+
+const analyzeImages = () => {
+ const images = scanImages(PUBLIC_DIR);
+ return images.length > 0 ? images : null;
+};
+
+const renderImages = (data) => {
+ const wrap = (content) => `\nImage Optimization — timo-web
\n${content}\n `;
+
+ if (!data) return wrap('\n> public/ 디렉토리에 이미지가 없습니다.\n');
+
+ const rows = data.map(({ rel, bytes, ext }) => {
+ const sizeIcon = bytes >= IMG_ERROR ? '🔴' : bytes >= IMG_WARN ? '🟡' : '🟢';
+ const fmtBadge = MODERN_EXTS.has(ext) ? '✅' : '⚠️';
+ return `| \`${rel}\` | ${formatBytes(bytes)} | ${ext.slice(1).toUpperCase()} ${fmtBadge} | ${sizeIcon} |`;
+ }).join('\n');
+
+ const total = formatBytes(data.reduce((s, i) => s + i.bytes, 0));
+ const nonModern = data.filter((i) => !MODERN_EXTS.has(i.ext)).length;
+ const formatNote = nonModern > 0
+ ? `⚠️ ${nonModern}개 파일 WebP/AVIF 변환 권장`
+ : '✅ 모든 이미지가 최적화된 포맷';
+
+ return wrap(`
+| 파일 | 크기 | 포맷 | 상태 |
+|------|-----:|:----:|:----:|
+${rows}
+
+> 총 ${data.length}개 · ${total} | 🟢 < 200KB | 🟡 < 500KB | 🔴 ≥ 500KB
+> ${formatNote}
+`);
+};
+
+// ─── Main ─────────────────────────────────────────────────────────────────────
+
+const COMMENT_MARKER = '';
+
+module.exports = async ({ github, context, core }) => {
+ const prNumber = context.payload.pull_request?.number;
+ if (!prNumber) { core.warning('PR 컨텍스트를 찾을 수 없습니다.'); return; }
+
+ const { owner, repo } = context.repo;
+
+ const body = [
+ COMMENT_MARKER,
+ '## Timo Performance Report',
+ '',
+ renderBundle(analyzeBundle()),
+ '',
+ renderLighthouse(analyzeLighthouse()),
+ '',
+ renderImages(analyzeImages()),
+ '',
+ `*측정 커밋: \`${context.sha.slice(0, 7)}\`*`,
+ ].join('\n');
+
+ const { data: comments } = await github.rest.issues.listComments({ owner, repo, issue_number: prNumber });
+ const existing = comments.find((c) => c.user?.type === 'Bot' && c.body?.includes(COMMENT_MARKER));
+
+ if (existing) {
+ await github.rest.issues.deleteComment({ owner, repo, comment_id: existing.id });
+ core.info('기존 성능 리포트 삭제 완료');
+ }
+
+ await github.rest.issues.createComment({ owner, repo, issue_number: prNumber, body });
+ core.info('성능 리포트 게시 완료');
+};
diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml
new file mode 100644
index 00000000..83c04210
--- /dev/null
+++ b/.github/workflows/performance.yml
@@ -0,0 +1,64 @@
+name: ⚡ 성능 리포트
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened]
+ branches: [main, develop]
+
+permissions:
+ contents: read
+ pull-requests: write
+
+concurrency:
+ group: performance-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ performance:
+ name: 성능 분석
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: pnpm/action-setup@v4
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 24
+ cache: 'pnpm'
+
+ - name: 의존성 설치
+ run: pnpm install --frozen-lockfile
+
+ - name: timo-web 빌드
+ env:
+ TURBO_UI: false
+ NO_COLOR: '1'
+ run: pnpm turbo run build --filter=timo-web
+
+ - name: Next.js 서버 시작
+ run: pnpm --filter=timo-web start &
+
+ - name: 서버 준비 대기
+ run: npx wait-on@8 http://localhost:3000 --timeout 60000
+
+ - name: Lighthouse CI 실행
+ run: npx @lhci/cli@0.14.x autorun --config=apps/timo-web/lighthouserc.cjs
+ continue-on-error: true
+
+ - name: 성능 리포트 PR 코멘트 게시
+ if: always()
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ const fn = require('./.github/scripts/performance-report.js')
+ await fn({ github, context, core })
+
+ - name: Lighthouse 결과 아티팩트 업로드
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: lighthouse-results
+ path: .lighthouseci/
+ retention-days: 30
diff --git a/.gitignore b/.gitignore
index 96fab4fe..ee778085 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,6 +33,9 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
+# Lighthouse CI
+.lighthouseci/
+
# Misc
.DS_Store
*.pem
diff --git a/apps/timo-web/lighthouserc.cjs b/apps/timo-web/lighthouserc.cjs
new file mode 100644
index 00000000..3a061dd5
--- /dev/null
+++ b/apps/timo-web/lighthouserc.cjs
@@ -0,0 +1,30 @@
+'use strict';
+
+module.exports = {
+ ci: {
+ collect: {
+ url: [
+ 'http://localhost:3000/login',
+ 'http://localhost:3000/signup',
+ ],
+ numberOfRuns: 3,
+ settings: {
+ chromeFlags: '--no-sandbox --disable-setuid-sandbox --disable-dev-shm-usage',
+ },
+ },
+ assert: {
+ preset: 'lighthouse:no-pwa',
+ assertions: {
+ 'categories:performance': ['warn', { minScore: 0.7 }],
+ 'categories:accessibility': ['warn', { minScore: 0.85 }],
+ 'categories:best-practices': ['warn', { minScore: 0.8 }],
+ 'categories:seo': ['warn', { minScore: 0.8 }],
+ },
+ },
+ upload: {
+ target: 'filesystem',
+ outputDir: '.lighthouseci',
+ reportFilenamePattern: '%%PATHNAME%%-%%DATETIME%%-report.%%EXTENSION%%',
+ },
+ },
+};
From 467fd014cb28b715dcb266fb41a945ec31aba410 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 26 Jun 2026 14:51:24 +0900
Subject: [PATCH 121/789] =?UTF-8?q?fix(web):=20lighthouserc.cjs=20ESLint?=
=?UTF-8?q?=20no-undef=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20(#30)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/lighthouserc.cjs | 1 +
1 file changed, 1 insertion(+)
diff --git a/apps/timo-web/lighthouserc.cjs b/apps/timo-web/lighthouserc.cjs
index 3a061dd5..4fcc5fd6 100644
--- a/apps/timo-web/lighthouserc.cjs
+++ b/apps/timo-web/lighthouserc.cjs
@@ -1,3 +1,4 @@
+/* global module */
'use strict';
module.exports = {
From 5d60d15068c8b98bd072eb1b615a789cc0df72c6 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 26 Jun 2026 14:57:50 +0900
Subject: [PATCH 122/789] =?UTF-8?q?fix(web):=20Lighthouse=20URL=20?=
=?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=84=B1=EB=8A=A5=20=EB=A6=AC?=
=?UTF-8?q?=ED=8F=AC=ED=8A=B8=20=EC=BD=94=EB=A9=98=ED=8A=B8=20=EC=97=85?=
=?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=EB=B0=A9=EC=8B=9D=20=EB=B3=80?=
=?UTF-8?q?=EA=B2=BD=20(#30)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- /login, /signup 페이지가 빈 컴포넌트여서 NO_FCP가 발생해 루트(/)로 URL을 수정했습니다
- PR 코멘트를 삭제 후 재게시하는 방식을 기존 코멘트를 수정하는 방식으로 변경했습니다
---
.github/scripts/performance-report.js | 10 +++++-----
apps/timo-web/lighthouserc.cjs | 3 +--
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/.github/scripts/performance-report.js b/.github/scripts/performance-report.js
index 78a8aee2..c663d95f 100644
--- a/.github/scripts/performance-report.js
+++ b/.github/scripts/performance-report.js
@@ -233,10 +233,10 @@ module.exports = async ({ github, context, core }) => {
const existing = comments.find((c) => c.user?.type === 'Bot' && c.body?.includes(COMMENT_MARKER));
if (existing) {
- await github.rest.issues.deleteComment({ owner, repo, comment_id: existing.id });
- core.info('기존 성능 리포트 삭제 완료');
+ await github.rest.issues.updateComment({ owner, repo, comment_id: existing.id, body });
+ core.info('성능 리포트 업데이트 완료');
+ } else {
+ await github.rest.issues.createComment({ owner, repo, issue_number: prNumber, body });
+ core.info('성능 리포트 게시 완료');
}
-
- await github.rest.issues.createComment({ owner, repo, issue_number: prNumber, body });
- core.info('성능 리포트 게시 완료');
};
diff --git a/apps/timo-web/lighthouserc.cjs b/apps/timo-web/lighthouserc.cjs
index 4fcc5fd6..bd0fd5ec 100644
--- a/apps/timo-web/lighthouserc.cjs
+++ b/apps/timo-web/lighthouserc.cjs
@@ -5,8 +5,7 @@ module.exports = {
ci: {
collect: {
url: [
- 'http://localhost:3000/login',
- 'http://localhost:3000/signup',
+ 'http://localhost:3000',
],
numberOfRuns: 3,
settings: {
From 38890c7ab56e624c6251dc1e6e0b6dc34c056185 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 26 Jun 2026 15:03:54 +0900
Subject: [PATCH 123/789] =?UTF-8?q?chore(ci):=20=EC=9B=8C=ED=81=AC?=
=?UTF-8?q?=ED=94=8C=EB=A1=9C=EC=9A=B0=20=EC=9D=B4=EB=A6=84=20=EC=9D=B4?=
=?UTF-8?q?=EB=AA=A8=EC=A7=80=20=EB=B0=8F=20=EC=98=81=EB=AC=B8=20=ED=86=B5?=
=?UTF-8?q?=EC=9D=BC=20(#30)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
GitHub Actions 탭에서 식별하기 쉽도록 워크플로우 name 필드를
이모지와 영문으로 통일했습니다
---
.github/workflows/auto-assign.yml | 2 +-
.github/workflows/auto-issue.yml | 2 +-
.github/workflows/auto-label.yml | 2 +-
.github/workflows/discord-notification.yml | 2 +-
.github/workflows/performance.yml | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/auto-assign.yml b/.github/workflows/auto-assign.yml
index 75617d8c..a1153e67 100644
--- a/.github/workflows/auto-assign.yml
+++ b/.github/workflows/auto-assign.yml
@@ -1,4 +1,4 @@
-name: Auto Assign
+name: 👽 Auto Assign
on:
pull_request:
diff --git a/.github/workflows/auto-issue.yml b/.github/workflows/auto-issue.yml
index 4b7b6d25..79b9e849 100644
--- a/.github/workflows/auto-issue.yml
+++ b/.github/workflows/auto-issue.yml
@@ -1,4 +1,4 @@
-name: Auto Issue
+name: 👽 Auto Issue
on:
issues:
diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml
index d7d37157..e18118b7 100644
--- a/.github/workflows/auto-label.yml
+++ b/.github/workflows/auto-label.yml
@@ -1,4 +1,4 @@
-name: Auto Label
+name: 👽 Auto Label
on:
pull_request:
diff --git a/.github/workflows/discord-notification.yml b/.github/workflows/discord-notification.yml
index 03edf28f..2433b55f 100644
--- a/.github/workflows/discord-notification.yml
+++ b/.github/workflows/discord-notification.yml
@@ -1,4 +1,4 @@
-name: Automated Discord Notification
+name: 🎵 Automated Discord Notification
on:
pull_request:
diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml
index 83c04210..5dfc1b80 100644
--- a/.github/workflows/performance.yml
+++ b/.github/workflows/performance.yml
@@ -1,4 +1,4 @@
-name: ⚡ 성능 리포트
+name: ✨ Performance Report
on:
pull_request:
From f749225408bd78fc534e42cb490721a5cedb5cf5 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Fri, 26 Jun 2026 15:06:33 +0900
Subject: [PATCH 124/789] =?UTF-8?q?chore(ci):=20=EC=84=B1=EB=8A=A5=20?=
=?UTF-8?q?=EB=A6=AC=ED=8F=AC=ED=8A=B8=20=EC=9B=8C=ED=81=AC=ED=94=8C?=
=?UTF-8?q?=EB=A1=9C=EC=9A=B0=20=ED=8A=B8=EB=A6=AC=EA=B1=B0=20=EC=B6=95?=
=?UTF-8?q?=EC=86=8C=20(#30)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
매 커밋 푸시(synchronize)마다 실행되던 방식을 PR 열기·재열기 시에만
실행하도록 변경했습니다. 필요 시 workflow_dispatch로 수동 실행이 가능합니다
---
.github/workflows/performance.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml
index 5dfc1b80..ba8c2cd9 100644
--- a/.github/workflows/performance.yml
+++ b/.github/workflows/performance.yml
@@ -2,8 +2,9 @@ name: ✨ Performance Report
on:
pull_request:
- types: [opened, synchronize, reopened]
+ types: [opened, reopened]
branches: [main, develop]
+ workflow_dispatch:
permissions:
contents: read
From 3691e2bd331c365c1111665541aec938f609e4de Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Fri, 26 Jun 2026 17:39:58 +0900
Subject: [PATCH 125/789] =?UTF-8?q?chore(config):=20Tailwind=20=EA=B3=B5?=
=?UTF-8?q?=EC=9C=A0=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=B6=94=EA=B0=80=20?=
=?UTF-8?q?(#26)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/tailwind-config/package.json | 8 ++++++++
packages/tailwind-config/theme.css | 5 +++++
2 files changed, 13 insertions(+)
create mode 100644 packages/tailwind-config/package.json
create mode 100644 packages/tailwind-config/theme.css
diff --git a/packages/tailwind-config/package.json b/packages/tailwind-config/package.json
new file mode 100644
index 00000000..6770222c
--- /dev/null
+++ b/packages/tailwind-config/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "@repo/tailwind-config",
+ "version": "0.0.0",
+ "private": true,
+ "exports": {
+ "./theme.css": "./theme.css"
+ }
+}
diff --git a/packages/tailwind-config/theme.css b/packages/tailwind-config/theme.css
new file mode 100644
index 00000000..4a2eeeba
--- /dev/null
+++ b/packages/tailwind-config/theme.css
@@ -0,0 +1,5 @@
+@theme {
+ --color-primary: #111111;
+ --color-background: #ffffff;
+ --color-foreground: #171717;
+}
From 1f9afeb42301506e5b3a8af3cab4543edf22af0e Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Fri, 26 Jun 2026 17:40:20 +0900
Subject: [PATCH 126/789] =?UTF-8?q?chore(root):=20Tailwind=20=EC=9D=98?=
=?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EB=B0=8F=20workspace=20=EC=97=B0=EA=B2=B0?=
=?UTF-8?q?=20=EC=B6=94=EA=B0=80=20(#26)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/package.json | 1 +
package.json | 2 +
pnpm-lock.yaml | 486 +++++++++++++++++++++++++++++++++----
3 files changed, 438 insertions(+), 51 deletions(-)
diff --git a/apps/timo-web/package.json b/apps/timo-web/package.json
index 2eb1bd37..7b60115f 100644
--- a/apps/timo-web/package.json
+++ b/apps/timo-web/package.json
@@ -18,6 +18,7 @@
},
"devDependencies": {
"@repo/eslint-config": "workspace:*",
+ "@repo/tailwind-config": "workspace:*",
"@repo/typescript-config": "workspace:*",
"@types/node": "^22.15.3",
"@types/react": "19.2.2",
diff --git a/package.json b/package.json
index 2ddabbba..493e31ce 100644
--- a/package.json
+++ b/package.json
@@ -15,10 +15,12 @@
"prepare": "husky"
},
"devDependencies": {
+ "@tailwindcss/postcss": "^4.3.1",
"@turbo/gen": "^2.9.18",
"husky": "^9.1.7",
"lint-staged": "^17.0.8",
"prettier": "^3.7.4",
+ "tailwindcss": "^4.3.1",
"turbo": "^2.9.18",
"typescript": "5.9.2"
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fd297c5b..c9d43b1b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,9 @@ importers:
.:
devDependencies:
+ '@tailwindcss/postcss':
+ specifier: ^4.3.1
+ version: 4.3.1
'@turbo/gen':
specifier: ^2.9.18
version: 2.9.18(@types/node@22.15.3)
@@ -20,6 +23,9 @@ importers:
prettier:
specifier: ^3.7.4
version: 3.7.4
+ tailwindcss:
+ specifier: ^4.3.1
+ version: 4.3.1
turbo:
specifier: ^2.9.18
version: 2.9.18
@@ -45,6 +51,9 @@ importers:
'@repo/eslint-config':
specifier: workspace:*
version: link:../../packages/eslint-config
+ '@repo/tailwind-config':
+ specifier: workspace:^
+ version: link:../../packages/tailwind-config
'@repo/typescript-config':
specifier: workspace:*
version: link:../../packages/typescript-config
@@ -59,7 +68,7 @@ importers:
version: 19.2.2(@types/react@19.2.2)
eslint:
specifier: ^9.39.1
- version: 9.39.1
+ version: 9.39.1(jiti@2.7.0)
typescript:
specifier: 5.9.2
version: 5.9.2
@@ -74,28 +83,28 @@ importers:
version: 16.2.0
eslint:
specifier: ^9.39.1
- version: 9.39.1
+ version: 9.39.1(jiti@2.7.0)
eslint-config-prettier:
specifier: ^10.1.1
- version: 10.1.1(eslint@9.39.1)
+ version: 10.1.1(eslint@9.39.1(jiti@2.7.0))
eslint-plugin-import:
specifier: ^2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2))(eslint@9.39.1)
+ version: 2.32.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2))(eslint@9.39.1(jiti@2.7.0))
eslint-plugin-jsx-a11y:
specifier: ^6.10.2
- version: 6.10.2(eslint@9.39.1)
+ version: 6.10.2(eslint@9.39.1(jiti@2.7.0))
eslint-plugin-only-warn:
specifier: ^1.1.0
version: 1.1.0
eslint-plugin-react:
specifier: ^7.37.5
- version: 7.37.5(eslint@9.39.1)
+ version: 7.37.5(eslint@9.39.1(jiti@2.7.0))
eslint-plugin-react-hooks:
specifier: ^5.2.0
- version: 5.2.0(eslint@9.39.1)
+ version: 5.2.0(eslint@9.39.1(jiti@2.7.0))
eslint-plugin-turbo:
specifier: ^2.7.1
- version: 2.7.1(eslint@9.39.1)(turbo@2.9.18)
+ version: 2.7.1(eslint@9.39.1(jiti@2.7.0))(turbo@2.9.18)
globals:
specifier: ^16.5.0
version: 16.5.0
@@ -104,7 +113,9 @@ importers:
version: 5.9.2
typescript-eslint:
specifier: ^8.50.0
- version: 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ version: 8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
+
+ packages/tailwind-config: {}
packages/timo-design-system:
dependencies:
@@ -132,7 +143,7 @@ importers:
version: 19.2.2(@types/react@19.2.2)
eslint:
specifier: ^9.39.1
- version: 9.39.1
+ version: 9.39.1(jiti@2.7.0)
typescript:
specifier: 5.9.2
version: 5.9.2
@@ -141,6 +152,10 @@ importers:
packages:
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
'@emnapi/runtime@1.7.1':
resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
@@ -625,6 +640,22 @@ packages:
'@types/node':
optional: true
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
'@next/env@16.2.0':
resolution: {integrity: sha512-OZIbODWWAi0epQRCRjNe1VO45LOFBzgiyqmTLzIqWq6u1wrxKnAyz1HH6tgY/Mc81YzIjRPoYsPAEr4QV4l9TA==}
@@ -697,6 +728,94 @@ packages:
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
+ '@tailwindcss/node@4.3.1':
+ resolution: {integrity: sha512-6NDaqRoAMSXD1mr/RXu0HBvNE9a2n5tHPsxu9XHLws8o4Twes5rBM2205SUUiJ9goAtadrN6xTGX0UDEwp/N4A==}
+
+ '@tailwindcss/oxide-android-arm64@4.3.1':
+ resolution: {integrity: sha512-SVlyf61g374l5cHyg8x9kf5xmLcOaxvOTsbsqDnSsDJaKOEFZ7GCvi84VAVGpxojYOs1+3K6M0UjXfqPU8vmOQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.3.1':
+ resolution: {integrity: sha512-hVnWLwv+e/l7c4WKyVtHVrIPvYdqWHjRB3MDIqARynzFtnQg85kmQEFCbV9Ja0VVx4xXTIiDWY60Y7iz/iNoDA==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.3.1':
+ resolution: {integrity: sha512-Cf7abu0WVgbhU7ANgPUnSAvm7nCvMweusHb8FnaHlLfv/Caq4GYaEZg7ZImzzmjx4lIAfuS8q+eLIS7A7IzxIg==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.3.1':
+ resolution: {integrity: sha512-ZZqzX2Y+GXtXXfqSfpJhDm60OoZfvLHLCgm+J7NVqgHHJjG/m9ugZI77RwTsVd4fnBJuCFP6Ae6kTJb71UdS8g==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.1':
+ resolution: {integrity: sha512-/Ah/xik0LaMYfv9DZ0S/t4pBlBNYOcqtRwusjgovHkvT8ixueWCLyJjsaF5kQIckjb4IT8Q6K6p/iPmZMixYgg==}
+ engines: {node: '>= 20'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.3.1':
+ resolution: {integrity: sha512-gqdFoVJlw444GvpnheZLHmvTzSxI/cOUUh2KSNejQjTcYkW062SVD+En0rUgD+QV91bz1XGIGtt1HJd48xUGbQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.3.1':
+ resolution: {integrity: sha512-Bwv9KwOvE0VKa86xPFif9b9c3Y1NxOV1P0gLti/IYaWEsQYZXDlxfGEtA8mdDZ7SG3wyNXAWYT5SIn3giL57oA==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.3.1':
+ resolution: {integrity: sha512-Ymi8O8T15HYQdOUWUtTI6ldN0neHP85FC+Qz32xTcZ7iJXtem/x8ITev0o1e9e5rkqj4lONZfTRLvkmin1+tKg==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.3.1':
+ resolution: {integrity: sha512-M+P/91qJ6uILLw4k2G93GMDRAXj61SMvFQYt39AqvUqYgExXpLL5aepfns7sj4HiAQeolirQF9E0lzRvdf4zPQ==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.3.1':
+ resolution: {integrity: sha512-zsM8uOeqvVGHsAXsJxsT28ttosFahLJKCLOTUBqRAtKnVgGSRitds9T432QiT8b77Yga7JIBkulIRRlJPtYhRA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.3.1':
+ resolution: {integrity: sha512-aiNvSq9BsVk8V513lDKlrCFAgf8qBMPZTpgEhInL+NwQqs97mYmupVMrPrgBBSL8Pv/0zXu9MrMF9rMun1ZeNg==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.3.1':
+ resolution: {integrity: sha512-xDEyu1rg290472FEGaKHnzyDyh5QH+AlWvsU5hMoMtPpzmKlRI0jaYKCgSHDYtaQWZOYbMaduSyCwFwY4n1HmA==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.3.1':
+ resolution: {integrity: sha512-yVPyo8RNkabVr3O2EhHEE0Rewu7YKzc1DhIqfL46LKveFrmu9XbDazNOJY7/GRuvw1h6u3utWnR29H/p5JPlgA==}
+ engines: {node: '>= 20'}
+
+ '@tailwindcss/postcss@4.3.1':
+ resolution: {integrity: sha512-dNJuNbdEJT/SWRuXTYP1WSamelsz3ztkUsdtWQPjrexysrTpaEPM40P/71knXiXLYEojqPOEGitVLLpPMS5T6A==}
+
'@turbo/darwin-64@2.9.18':
resolution: {integrity: sha512-9f27peFu16ur8c0v9nUFUEyBnbKuuFsUTjHFWfmwGfzySBXbHwzU44QhZon6Mznz0cHsIr3984NQj/bVrnGSRw==}
cpu: [x64]
@@ -1045,6 +1164,10 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ enhanced-resolve@5.21.6:
+ resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==}
+ engines: {node: '>=10.13.0'}
+
environment@1.1.0:
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
engines: {node: '>=18'}
@@ -1301,6 +1424,9 @@ packages:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
has-bigints@1.1.0:
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines: {node: '>= 0.4'}
@@ -1483,6 +1609,10 @@ packages:
resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines: {node: '>= 0.4'}
+ jiti@2.7.0:
+ resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
+ hasBin: true
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -1521,6 +1651,76 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
lint-staged@17.0.8:
resolution: {integrity: sha512-B2P/d+jVW0UXOQ0MVMLrB/9ydA1P+zz6jYfdrbbEd9ur3S2rcbduFWKiUCC02Sm5hbC8nrm7y24WuYMG54HfxA==}
engines: {node: '>=22.22.1'}
@@ -1544,6 +1744,9 @@ packages:
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
@@ -1582,6 +1785,11 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ nanoid@3.3.15:
+ resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -1700,6 +1908,10 @@ packages:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
+ postcss@8.5.15:
+ resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
+ engines: {node: ^10 || ^12 || >=14}
+
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -1925,6 +2137,13 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
+ tailwindcss@4.3.1:
+ resolution: {integrity: sha512-hk+TB1m+K8CYNrP6rjQaq/Y+4Zylwpa87mLYBKCunwnnQ9p+fHb7kmSfGqyEJoxF/O6CDyABWVFEafNSYKll+Q==}
+
+ tapable@2.3.3:
+ resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
+ engines: {node: '>=6'}
+
tinyexec@1.2.4:
resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==}
engines: {node: '>=18'}
@@ -2047,6 +2266,8 @@ packages:
snapshots:
+ '@alloc/quick-lru@5.2.0': {}
+
'@emnapi/runtime@1.7.1':
dependencies:
tslib: 2.8.1
@@ -2130,9 +2351,9 @@ snapshots:
'@esbuild/win32-x64@0.25.12':
optional: true
- '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.7.0))':
dependencies:
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
@@ -2409,6 +2630,25 @@ snapshots:
optionalDependencies:
'@types/node': 22.15.3
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
'@next/env@16.2.0': {}
'@next/eslint-plugin-next@16.2.0':
@@ -2457,6 +2697,75 @@ snapshots:
dependencies:
tslib: 2.8.1
+ '@tailwindcss/node@4.3.1':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.21.6
+ jiti: 2.7.0
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.3.1
+
+ '@tailwindcss/oxide-android-arm64@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.3.1':
+ optional: true
+
+ '@tailwindcss/oxide@4.3.1':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.3.1
+ '@tailwindcss/oxide-darwin-arm64': 4.3.1
+ '@tailwindcss/oxide-darwin-x64': 4.3.1
+ '@tailwindcss/oxide-freebsd-x64': 4.3.1
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.1
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.3.1
+ '@tailwindcss/oxide-linux-arm64-musl': 4.3.1
+ '@tailwindcss/oxide-linux-x64-gnu': 4.3.1
+ '@tailwindcss/oxide-linux-x64-musl': 4.3.1
+ '@tailwindcss/oxide-wasm32-wasi': 4.3.1
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.3.1
+ '@tailwindcss/oxide-win32-x64-msvc': 4.3.1
+
+ '@tailwindcss/postcss@4.3.1':
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ '@tailwindcss/node': 4.3.1
+ '@tailwindcss/oxide': 4.3.1
+ postcss: 8.5.15
+ tailwindcss: 4.3.1
+
'@turbo/darwin-64@2.9.18':
optional: true
@@ -2500,15 +2809,15 @@ snapshots:
dependencies:
csstype: 3.1.3
- '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2))(eslint@9.39.1)(typescript@5.9.2)':
+ '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2))(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
'@typescript-eslint/scope-manager': 8.50.0
- '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
- '@typescript-eslint/utils': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 8.50.0
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.1.0(typescript@5.9.2)
@@ -2516,14 +2825,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2)':
+ '@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.50.0
'@typescript-eslint/types': 8.50.0
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 8.50.0
debug: 4.4.3
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
@@ -2546,13 +2855,13 @@ snapshots:
dependencies:
typescript: 5.9.2
- '@typescript-eslint/type-utils@8.50.0(eslint@9.39.1)(typescript@5.9.2)':
+ '@typescript-eslint/type-utils@8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)':
dependencies:
'@typescript-eslint/types': 8.50.0
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
- '@typescript-eslint/utils': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
debug: 4.4.3
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
ts-api-utils: 2.1.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
@@ -2575,13 +2884,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.50.0(eslint@9.39.1)(typescript@5.9.2)':
+ '@typescript-eslint/utils@8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.7.0))
'@typescript-eslint/scope-manager': 8.50.0
'@typescript-eslint/types': 8.50.0
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
@@ -2817,8 +3126,7 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
- detect-libc@2.1.2:
- optional: true
+ detect-libc@2.1.2: {}
doctrine@2.1.0:
dependencies:
@@ -2838,6 +3146,11 @@ snapshots:
emoji-regex@9.2.2: {}
+ enhanced-resolve@5.21.6:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.3
+
environment@1.1.0: {}
es-abstract@1.24.0:
@@ -2972,9 +3285,9 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-prettier@10.1.1(eslint@9.39.1):
+ eslint-config-prettier@10.1.1(eslint@9.39.1(jiti@2.7.0)):
dependencies:
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
eslint-import-resolver-node@0.3.10:
dependencies:
@@ -2984,17 +3297,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.13.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.10)(eslint@9.39.1):
+ eslint-module-utils@2.13.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-node@0.3.10)(eslint@9.39.1(jiti@2.7.0)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
- eslint: 9.39.1
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
+ eslint: 9.39.1(jiti@2.7.0)
eslint-import-resolver-node: 0.3.10
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2))(eslint@9.39.1):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2))(eslint@9.39.1(jiti@2.7.0)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -3003,9 +3316,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
eslint-import-resolver-node: 0.3.10
- eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.10)(eslint@9.39.1)
+ eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-node@0.3.10)(eslint@9.39.1(jiti@2.7.0))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -3017,13 +3330,13 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.1):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.1(jiti@2.7.0)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.9
@@ -3033,7 +3346,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -3044,11 +3357,11 @@ snapshots:
eslint-plugin-only-warn@1.1.0: {}
- eslint-plugin-react-hooks@5.2.0(eslint@9.39.1):
+ eslint-plugin-react-hooks@5.2.0(eslint@9.39.1(jiti@2.7.0)):
dependencies:
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
- eslint-plugin-react@7.37.5(eslint@9.39.1):
+ eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@2.7.0)):
dependencies:
array-includes: 3.1.9
array.prototype.findlast: 1.2.5
@@ -3056,7 +3369,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.1
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -3070,10 +3383,10 @@ snapshots:
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
- eslint-plugin-turbo@2.7.1(eslint@9.39.1)(turbo@2.9.18):
+ eslint-plugin-turbo@2.7.1(eslint@9.39.1(jiti@2.7.0))(turbo@2.9.18):
dependencies:
dotenv: 16.0.3
- eslint: 9.39.1
+ eslint: 9.39.1(jiti@2.7.0)
turbo: 2.9.18
eslint-scope@8.4.0:
@@ -3085,9 +3398,9 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.39.1:
+ eslint@9.39.1(jiti@2.7.0):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.7.0))
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.1
'@eslint/config-helpers': 0.4.2
@@ -3121,6 +3434,8 @@ snapshots:
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.7.0
transitivePeerDependencies:
- supports-color
@@ -3248,6 +3563,8 @@ snapshots:
gopd@1.2.0: {}
+ graceful-fs@4.2.11: {}
+
has-bigints@1.1.0: {}
has-flag@4.0.0: {}
@@ -3427,6 +3744,8 @@ snapshots:
has-symbols: 1.1.0
set-function-name: 2.0.2
+ jiti@2.7.0: {}
+
js-tokens@4.0.0: {}
js-yaml@4.1.0:
@@ -3465,6 +3784,55 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
lint-staged@17.0.8:
dependencies:
listr2: 10.2.1
@@ -3500,6 +3868,10 @@ snapshots:
dependencies:
js-tokens: 4.0.0
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
math-intrinsics@1.1.0: {}
merge2@1.4.1: {}
@@ -3527,6 +3899,8 @@ snapshots:
nanoid@3.3.11: {}
+ nanoid@3.3.15: {}
+
natural-compare@1.4.0: {}
next@16.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
@@ -3655,6 +4029,12 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ postcss@8.5.15:
+ dependencies:
+ nanoid: 3.3.15
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
prelude-ls@1.2.1: {}
prettier@3.7.4: {}
@@ -3954,6 +4334,10 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
+ tailwindcss@4.3.1: {}
+
+ tapable@2.3.3: {}
+
tinyexec@1.2.4: {}
tinyglobby@0.2.15:
@@ -4024,13 +4408,13 @@ snapshots:
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
- typescript-eslint@8.50.0(eslint@9.39.1)(typescript@5.9.2):
+ typescript-eslint@8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2))(eslint@9.39.1)(typescript@5.9.2)
- '@typescript-eslint/parser': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
+ '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2))(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
- '@typescript-eslint/utils': 8.50.0(eslint@9.39.1)(typescript@5.9.2)
- eslint: 9.39.1
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
+ eslint: 9.39.1(jiti@2.7.0)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
From 0d80e314768fda30f42e0bce05ba4ebae1afb003 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Fri, 26 Jun 2026 17:40:43 +0900
Subject: [PATCH 127/789] =?UTF-8?q?chore(web):=20Tailwind=20=EC=A0=84?=
=?UTF-8?q?=EC=97=AD=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=84=A4=EC=A0=95=20?=
=?UTF-8?q?=EC=B6=94=EA=B0=80=20(#26)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/app/globals.css | 2 ++
apps/timo-web/app/layout.tsx | 1 +
apps/timo-web/postcss.config.mjs | 5 +++++
3 files changed, 8 insertions(+)
create mode 100644 apps/timo-web/postcss.config.mjs
diff --git a/apps/timo-web/app/globals.css b/apps/timo-web/app/globals.css
index e69de29b..296d977e 100644
--- a/apps/timo-web/app/globals.css
+++ b/apps/timo-web/app/globals.css
@@ -0,0 +1,2 @@
+@import "tailwindcss";
+@import "@repo/tailwind-config/theme.css";
diff --git a/apps/timo-web/app/layout.tsx b/apps/timo-web/app/layout.tsx
index ee168795..4de4bec8 100644
--- a/apps/timo-web/app/layout.tsx
+++ b/apps/timo-web/app/layout.tsx
@@ -1,3 +1,4 @@
+import "./globals.css";
import type { Metadata } from "next";
export const metadata: Metadata = {
diff --git a/apps/timo-web/postcss.config.mjs b/apps/timo-web/postcss.config.mjs
new file mode 100644
index 00000000..c2ddf748
--- /dev/null
+++ b/apps/timo-web/postcss.config.mjs
@@ -0,0 +1,5 @@
+export default {
+ plugins: {
+ "@tailwindcss/postcss": {},
+ },
+};
From 631ef1a58dc41dff1fd3da57a991db0daba5032d Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Fri, 26 Jun 2026 17:40:58 +0900
Subject: [PATCH 128/789] =?UTF-8?q?chore(web):=20=EC=A0=88=EB=8C=80=20?=
=?UTF-8?q?=EA=B2=BD=EB=A1=9C=20import=20=EC=84=A4=EC=A0=95=20=EC=B6=94?=
=?UTF-8?q?=EA=B0=80=20(#26)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/tsconfig.json | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/apps/timo-web/tsconfig.json b/apps/timo-web/tsconfig.json
index c0346be0..ffa3271c 100644
--- a/apps/timo-web/tsconfig.json
+++ b/apps/timo-web/tsconfig.json
@@ -6,7 +6,11 @@
"name": "next"
}
],
- "strictNullChecks": true
+ "strictNullChecks": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./*"]
+ }
},
"include": [
"**/*.ts",
From d8196aa887cbda67bc9be39efc0b9cbe71b4d6b2 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Fri, 26 Jun 2026 18:11:37 +0900
Subject: [PATCH 129/789] =?UTF-8?q?chore(ui):=20Storybook=20=EC=84=A4?=
=?UTF-8?q?=EC=A0=95=20=EC=A3=BC=EC=84=9D=20=EC=A0=9C=EA=B1=B0=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/timo-design-system/.storybook/main.ts | 1 -
1 file changed, 1 deletion(-)
diff --git a/packages/timo-design-system/.storybook/main.ts b/packages/timo-design-system/.storybook/main.ts
index 94730b18..7cb69772 100644
--- a/packages/timo-design-system/.storybook/main.ts
+++ b/packages/timo-design-system/.storybook/main.ts
@@ -1,4 +1,3 @@
-// 스토리북이 어디서 스토리 파일을 찾을지 정하는 곳
import type { StorybookConfig } from "@storybook/react-vite";
const config: StorybookConfig = {
From ba3234e92aad961d437682d81f6a9107d64555a3 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Fri, 26 Jun 2026 22:40:27 +0900
Subject: [PATCH 130/789] =?UTF-8?q?chore(ui):=20Storybook=20=EC=A0=91?=
=?UTF-8?q?=EA=B7=BC=EC=84=B1=20addon=20=EC=B6=94=EA=B0=80=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../timo-design-system/.storybook/main.ts | 2 +-
packages/timo-design-system/package.json | 1 +
pnpm-lock.yaml | 20 +++++++++++++++++++
3 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/packages/timo-design-system/.storybook/main.ts b/packages/timo-design-system/.storybook/main.ts
index 7cb69772..19e8dcf7 100644
--- a/packages/timo-design-system/.storybook/main.ts
+++ b/packages/timo-design-system/.storybook/main.ts
@@ -2,7 +2,7 @@ import type { StorybookConfig } from "@storybook/react-vite";
const config: StorybookConfig = {
stories: ["../src/**/*.stories.@(js|jsx|ts|tsx)"],
- addons: ["@storybook/addon-links"],
+ addons: ["@storybook/addon-links", "@storybook/addon-a11y"],
framework: {
name: "@storybook/react-vite",
options: {},
diff --git a/packages/timo-design-system/package.json b/packages/timo-design-system/package.json
index 343e7fcf..43091136 100644
--- a/packages/timo-design-system/package.json
+++ b/packages/timo-design-system/package.json
@@ -15,6 +15,7 @@
"devDependencies": {
"@repo/eslint-config": "workspace:*",
"@repo/typescript-config": "workspace:*",
+ "@storybook/addon-a11y": "^10.4.6",
"@storybook/addon-links": "^10.4.6",
"@storybook/react-vite": "^10.4.6",
"@types/node": "^22.15.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 84699399..4d7b775a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -109,6 +109,9 @@ importers:
'@repo/typescript-config':
specifier: workspace:*
version: link:../typescript-config
+ '@storybook/addon-a11y':
+ specifier: ^10.4.6
+ version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))
'@storybook/addon-links':
specifier: ^10.4.6
version: 10.4.6(@types/react@19.2.2)(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))
@@ -1138,6 +1141,11 @@ packages:
rollup:
optional: true
+ '@storybook/addon-a11y@10.4.6':
+ resolution: {integrity: sha512-XCJy+f0DFOiCgUU9knRDlLDxVFI+AAQ3/wE/NF85zB9iDPPS2DwkSN+mas3zDgHt66zhN8Cq3/UiyCDUweV9Zw==}
+ peerDependencies:
+ storybook: ^10.4.6
+
'@storybook/addon-links@10.4.6':
resolution: {integrity: sha512-VGfERTsGRFmfvNP3SKprFWkC6Od5kXzSutT5PSZjQ/O9NnCdHhd/RILxFDN2TzZn9ywDc7t5b4AldKmSYCv3EQ==}
peerDependencies:
@@ -1473,6 +1481,10 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
+ axe-core@4.12.1:
+ resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==}
+ engines: {node: '>=4'}
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -3639,6 +3651,12 @@ snapshots:
estree-walker: 2.0.2
picomatch: 4.0.3
+ '@storybook/addon-a11y@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ axe-core: 4.12.1
+ storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+
'@storybook/addon-links@10.4.6(@types/react@19.2.2)(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))':
dependencies:
'@storybook/global': 5.0.0
@@ -4043,6 +4061,8 @@ snapshots:
dependencies:
possible-typed-array-names: 1.1.0
+ axe-core@4.12.1: {}
+
balanced-match@1.0.2: {}
balanced-match@4.0.4: {}
From c78d9516b8fb6f499e2cce4531698333e3563efa Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Sat, 27 Jun 2026 00:30:47 +0900
Subject: [PATCH 131/789] =?UTF-8?q?feat(web):=20GlobalError=20=EC=97=90?=
=?UTF-8?q?=EB=9F=AC=20=EC=95=88=EB=82=B4=20=EB=AC=B8=EA=B5=AC=20=EC=B6=94?=
=?UTF-8?q?=EA=B0=80=20(#24)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 에러 발생 시 사용자에게 표시할 제목과 안내 문구를 추가했습니다
---
apps/timo-web/app/global-error.tsx | 2 ++
1 file changed, 2 insertions(+)
diff --git a/apps/timo-web/app/global-error.tsx b/apps/timo-web/app/global-error.tsx
index 7e1e1fa8..42bbee07 100644
--- a/apps/timo-web/app/global-error.tsx
+++ b/apps/timo-web/app/global-error.tsx
@@ -16,6 +16,8 @@ export default function GlobalError({ error, reset }: GlobalErrorProps) {
return (
+ 문제가 발생했어요
+ 잠시 후 다시 시도해주세요.
다시 시도
From af451907c987a0ba6ca7c8ba9cf7996ba8272d2a Mon Sep 17 00:00:00 2001
From: Lee Hye Won
Date: Sat, 27 Jun 2026 01:13:53 +0900
Subject: [PATCH 132/789] =?UTF-8?q?fix(root):=20=EB=94=94=EC=8A=A4?=
=?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=95=8C=EB=A6=BC=20=EB=B3=B8=EB=AC=B8=20?=
=?UTF-8?q?=EA=B8=B8=EC=9D=B4=20=EC=A0=9C=ED=95=9C=20=EB=8B=A8=EC=9D=BC?=
=?UTF-8?q?=ED=99=94=20=EB=B0=8F=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?=
=?UTF-8?q?=20(#33)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
clean_body의 200자 제한 제거 후 DESC 400자 단일 제한으로 통일,
불필요한 DESC 초기 할당 dead code 제거, 주석 수정을 반영했습니다.
Co-Authored-By: Claude Sonnet 4.6
---
.github/workflows/discord-notification.yml | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/.github/workflows/discord-notification.yml b/.github/workflows/discord-notification.yml
index 8e1c9077..88a6d813 100644
--- a/.github/workflows/discord-notification.yml
+++ b/.github/workflows/discord-notification.yml
@@ -50,15 +50,13 @@ jobs:
COLOR_COMMENT=9807270 # PR 코멘트
COLOR_ISSUE=7275516 # 이슈
- # PR/이슈 본문에서 보일러플레이트 제거 후 첫 150자 반환
+ # PR/이슈 본문에서 보일러플레이트 제거 후 반환 (DESC에서 400자로 제한)
clean_body() {
echo "$1" \
| sed 's/
//gi' \
- | grep -vE '^\s*(#|close[sd]? #[0-9]+|fixes? #[0-9]+|resolves? #[0-9]+)' || true \
- | sed '/^\s*$/d' \
+ | { grep -vE '^\s*(#|close[sd]? #[0-9]+|fixes? #[0-9]+|resolves? #[0-9]+)' || true; } \
| tr '\n' ' ' \
- | sed 's/ */ /g' \
- | cut -c1-200
+ | sed 's/ */ /g'
}
# 라벨·리뷰어를 받아 fields JSON 배열 반환
@@ -80,7 +78,6 @@ jobs:
if [ "$EVENT_NAME" = "pull_request" ]; then
PR_TITLE="$(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")"
URL="$(jq -r '.pull_request.html_url // ""' "$GITHUB_EVENT_PATH")"
- DESC="$(jq -r '.pull_request.body // "내용 없음"' "$GITHUB_EVENT_PATH")"
RAW_AUTHOR="$(jq -r '.pull_request.user.login // ""' "$GITHUB_EVENT_PATH")"
AUTHOR="$(resolve_name "$RAW_AUTHOR")"
LABELS="$(jq -r '[.pull_request.labels[].name] | join(", ")' "$GITHUB_EVENT_PATH")"
@@ -119,7 +116,8 @@ jobs:
exit 0
fi
- DESC="**$PR_TITLE**\n$CLEAN_BODY"
+ DESC="**${PR_TITLE}**"$'\n'"${CLEAN_BODY}"
+ DESC="${DESC:0:400}"
FIELDS="$(build_fields "$LABELS" "$REVIEWER")"
elif [ "$EVENT_NAME" = "pull_request_review" ]; then
@@ -132,7 +130,6 @@ jobs:
AUTHOR="$(resolve_name "$RAW_AUTHOR")"
PR_TITLE="$(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")"
URL="$(jq -r '.pull_request.html_url // ""' "$GITHUB_EVENT_PATH")"
- DESC="$(jq -r '.review.body // "내용 없음"' "$GITHUB_EVENT_PATH")"
REVIEW_STATE="$(jq -r '.review.state // ""' "$GITHUB_EVENT_PATH")"
LABELS="$(jq -r '[.pull_request.labels[].name] | join(", ")' "$GITHUB_EVENT_PATH")"
@@ -149,7 +146,8 @@ jobs:
RAW_BODY="$(jq -r '.review.body // ""' "$GITHUB_EVENT_PATH")"
CLEAN_BODY="$(clean_body "$RAW_BODY")"
- DESC="**$PR_TITLE**\n$CLEAN_BODY"
+ DESC="**${PR_TITLE}**"$'\n'"${CLEAN_BODY}"
+ DESC="${DESC:0:400}"
FIELDS="$(build_fields "$LABELS" "")"
elif [ "$EVENT_NAME" = "pull_request_review_comment" ]; then
@@ -165,7 +163,8 @@ jobs:
URL="$(jq -r '.comment.html_url // ""' "$GITHUB_EVENT_PATH")"
RAW_BODY="$(jq -r '.comment.body // ""' "$GITHUB_EVENT_PATH")"
CLEAN_BODY="$(clean_body "$RAW_BODY")"
- DESC="**$PR_TITLE**\n$CLEAN_BODY"
+ DESC="**${PR_TITLE}**"$'\n'"${CLEAN_BODY}"
+ DESC="${DESC:0:400}"
COLOR=$COLOR_COMMENT
FIELDS='[]'
@@ -177,7 +176,8 @@ jobs:
URL="$(jq -r '.issue.html_url // ""' "$GITHUB_EVENT_PATH")"
RAW_BODY="$(jq -r '.issue.body // ""' "$GITHUB_EVENT_PATH")"
CLEAN_BODY="$(clean_body "$RAW_BODY")"
- DESC="**$ISSUE_TITLE**\n$CLEAN_BODY"
+ DESC="**${ISSUE_TITLE}**"$'\n'"${CLEAN_BODY}"
+ DESC="${DESC:0:400}"
COLOR=$COLOR_ISSUE
LABELS="$(jq -r '[.issue.labels[].name] | join(", ")' "$GITHUB_EVENT_PATH")"
FIELDS="$(build_fields "$LABELS" "")"
From 3422ca4a80b26d5823d4c7f547feea5b4f3cc97b Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Sat, 27 Jun 2026 02:04:27 +0900
Subject: [PATCH 133/789] =?UTF-8?q?name(web):=20store=20=ED=8F=B4=EB=8D=94?=
=?UTF-8?q?=EB=AA=85=EC=9D=84=20stores.=EC=9C=BC=EB=A1=9C=20=EB=B3=80?=
=?UTF-8?q?=EA=B2=BD=20(#35)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- store 폴더명을 stores.으로 변경했습니다
---
apps/timo-web/{store => stores.}/.gitkeep | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename apps/timo-web/{store => stores.}/.gitkeep (100%)
diff --git a/apps/timo-web/store/.gitkeep b/apps/timo-web/stores./.gitkeep
similarity index 100%
rename from apps/timo-web/store/.gitkeep
rename to apps/timo-web/stores./.gitkeep
From a2e618577c31b2581dd3235081de863006630efe Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Sat, 27 Jun 2026 02:04:36 +0900
Subject: [PATCH 134/789] =?UTF-8?q?feat(web):=20tsconfig=20baseUrl=20?=
=?UTF-8?q?=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20design-system=20subpath=20expo?=
=?UTF-8?q?rts=20=EC=84=A4=EC=A0=95=20(#35)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- deprecated baseUrl 옵션을 제거했습니다 (moduleResolution Bundler에서 paths만으로 동작)
- timo-design-system에 ./ui, ./icons, ./utils subpath exports를 추가했습니다
- 각 subpath의 빈 index.ts 모듈 stub을 추가했습니다
---
apps/timo-web/tsconfig.json | 1 -
packages/timo-design-system/package.json | 4 +++-
packages/timo-design-system/src/components/index.ts | 1 +
packages/timo-design-system/src/icons/index.ts | 1 +
packages/timo-design-system/src/lib/index.ts | 1 +
5 files changed, 6 insertions(+), 2 deletions(-)
create mode 100644 packages/timo-design-system/src/components/index.ts
create mode 100644 packages/timo-design-system/src/icons/index.ts
create mode 100644 packages/timo-design-system/src/lib/index.ts
diff --git a/apps/timo-web/tsconfig.json b/apps/timo-web/tsconfig.json
index ffa3271c..435e04c2 100644
--- a/apps/timo-web/tsconfig.json
+++ b/apps/timo-web/tsconfig.json
@@ -7,7 +7,6 @@
}
],
"strictNullChecks": true,
- "baseUrl": ".",
"paths": {
"@/*": ["./*"]
}
diff --git a/packages/timo-design-system/package.json b/packages/timo-design-system/package.json
index b3e02314..8e5459b1 100644
--- a/packages/timo-design-system/package.json
+++ b/packages/timo-design-system/package.json
@@ -3,7 +3,9 @@
"version": "0.0.0",
"private": true,
"exports": {
- "./*": "./src/*.tsx"
+ "./ui": "./src/components/index.ts",
+ "./icons": "./src/icons/index.ts",
+ "./utils": "./src/lib/index.ts"
},
"scripts": {
"lint": "eslint . --max-warnings 0",
diff --git a/packages/timo-design-system/src/components/index.ts b/packages/timo-design-system/src/components/index.ts
new file mode 100644
index 00000000..cb0ff5c3
--- /dev/null
+++ b/packages/timo-design-system/src/components/index.ts
@@ -0,0 +1 @@
+export {};
diff --git a/packages/timo-design-system/src/icons/index.ts b/packages/timo-design-system/src/icons/index.ts
new file mode 100644
index 00000000..cb0ff5c3
--- /dev/null
+++ b/packages/timo-design-system/src/icons/index.ts
@@ -0,0 +1 @@
+export {};
diff --git a/packages/timo-design-system/src/lib/index.ts b/packages/timo-design-system/src/lib/index.ts
new file mode 100644
index 00000000..cb0ff5c3
--- /dev/null
+++ b/packages/timo-design-system/src/lib/index.ts
@@ -0,0 +1 @@
+export {};
From 2cf110f4bcb5ff425fd832b67b53bec4819e72d8 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sat, 27 Jun 2026 02:17:42 +0900
Subject: [PATCH 135/789] =?UTF-8?q?chore(config):=20Tailwind=20=EC=9D=98?=
=?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EC=84=A0=EC=96=B8=20=EC=9C=84=EC=B9=98=20?=
=?UTF-8?q?=EC=88=98=EC=A0=95=20(#26)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/package.json | 1 +
package.json | 2 --
packages/tailwind-config/package.json | 3 +++
pnpm-lock.yaml | 15 ++++++++-------
4 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/apps/timo-web/package.json b/apps/timo-web/package.json
index e4d660b4..87a3856a 100644
--- a/apps/timo-web/package.json
+++ b/apps/timo-web/package.json
@@ -23,6 +23,7 @@
"@repo/eslint-config": "workspace:*",
"@repo/tailwind-config": "workspace:*",
"@repo/typescript-config": "workspace:*",
+ "@tailwindcss/postcss": "^4.3.1",
"@types/node": "^22.15.3",
"@types/react": "19.2.2",
"@types/react-dom": "19.2.2",
diff --git a/package.json b/package.json
index 493e31ce..2ddabbba 100644
--- a/package.json
+++ b/package.json
@@ -15,12 +15,10 @@
"prepare": "husky"
},
"devDependencies": {
- "@tailwindcss/postcss": "^4.3.1",
"@turbo/gen": "^2.9.18",
"husky": "^9.1.7",
"lint-staged": "^17.0.8",
"prettier": "^3.7.4",
- "tailwindcss": "^4.3.1",
"turbo": "^2.9.18",
"typescript": "5.9.2"
},
diff --git a/packages/tailwind-config/package.json b/packages/tailwind-config/package.json
index 6770222c..a71201d2 100644
--- a/packages/tailwind-config/package.json
+++ b/packages/tailwind-config/package.json
@@ -4,5 +4,8 @@
"private": true,
"exports": {
"./theme.css": "./theme.css"
+ },
+ "devDependencies": {
+ "tailwindcss": "^4.3.1"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5200f465..6218c684 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,9 +8,6 @@ importers:
.:
devDependencies:
- '@tailwindcss/postcss':
- specifier: ^4.3.1
- version: 4.3.1
'@turbo/gen':
specifier: ^2.9.18
version: 2.9.18(@types/node@22.15.3)
@@ -23,9 +20,6 @@ importers:
prettier:
specifier: ^3.7.4
version: 3.7.4
- tailwindcss:
- specifier: ^4.3.1
- version: 4.3.1
turbo:
specifier: ^2.9.18
version: 2.9.18
@@ -66,6 +60,9 @@ importers:
'@repo/typescript-config':
specifier: workspace:*
version: link:../../packages/typescript-config
+ '@tailwindcss/postcss':
+ specifier: ^4.3.1
+ version: 4.3.1
'@types/node':
specifier: ^22.15.3
version: 22.15.3
@@ -124,7 +121,11 @@ importers:
specifier: ^8.50.0
version: 8.50.0(eslint@9.39.1(jiti@2.7.0))(typescript@5.9.2)
- packages/tailwind-config: {}
+ packages/tailwind-config:
+ devDependencies:
+ tailwindcss:
+ specifier: ^4.3.1
+ version: 4.3.1
packages/timo-design-system:
dependencies:
From fbddd23f9591d8f6f81099bc0efc1c18ac717ba4 Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Sat, 27 Jun 2026 02:18:11 +0900
Subject: [PATCH 136/789] =?UTF-8?q?remove(ui):=20design-system=20=EB=A3=A8?=
=?UTF-8?q?=ED=8A=B8=20index.ts=20=EC=82=AD=EC=A0=9C=20(#35)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- subpath exports(./ui, ./icons, ./utils)로 대체되어 루트 index.ts를 삭제했습니다
---
packages/timo-design-system/src/index.ts | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 packages/timo-design-system/src/index.ts
diff --git a/packages/timo-design-system/src/index.ts b/packages/timo-design-system/src/index.ts
deleted file mode 100644
index cb0ff5c3..00000000
--- a/packages/timo-design-system/src/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export {};
From 40e1db0727edd3b9ec66ef7e06aae03d8ef2959a Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sat, 27 Jun 2026 02:23:06 +0900
Subject: [PATCH 137/789] =?UTF-8?q?chore(web):=20=EB=8F=84=EB=A9=94?=
=?UTF-8?q?=EC=9D=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=ED=8F=B4=EB=8D=94=20?=
=?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EC=8A=A4=EC=BA=90=ED=8F=B4=EB=94=A9=20(#3?=
=?UTF-8?q?7)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/app/focus/_components/.gitkeep | 0
apps/timo-web/app/focus/_containers/.gitkeep | 0
apps/timo-web/app/focus/_queries/.gitkeep | 0
apps/timo-web/app/focus/page.tsx | 3 +++
apps/timo-web/app/home/_components/.gitkeep | 0
apps/timo-web/app/home/_containers/.gitkeep | 0
apps/timo-web/app/home/_queries/.gitkeep | 0
apps/timo-web/app/home/page.tsx | 3 +++
apps/timo-web/app/onboarding/_components/.gitkeep | 0
apps/timo-web/app/onboarding/_containers/.gitkeep | 0
apps/timo-web/app/onboarding/_queries/.gitkeep | 0
apps/timo-web/app/onboarding/page.tsx | 3 +++
apps/timo-web/app/settings/_components/.gitkeep | 0
apps/timo-web/app/settings/_containers/.gitkeep | 0
apps/timo-web/app/settings/_queries/.gitkeep | 0
apps/timo-web/app/settings/account/_components/.gitkeep | 0
apps/timo-web/app/settings/account/_containers/.gitkeep | 0
apps/timo-web/app/settings/account/_queries/.gitkeep | 0
apps/timo-web/app/settings/account/page.tsx | 3 +++
apps/timo-web/app/settings/layout.tsx | 0
apps/timo-web/app/settings/page.tsx | 3 +++
apps/timo-web/app/settings/term/_components/.gitkeep | 0
apps/timo-web/app/settings/term/_containers/.gitkeep | 0
apps/timo-web/app/settings/term/_queries/.gitkeep | 0
apps/timo-web/app/settings/term/page.tsx | 3 +++
apps/timo-web/app/statistics/_components/.gitkeep | 0
apps/timo-web/app/statistics/_containers/.gitkeep | 0
apps/timo-web/app/statistics/_queries/.gitkeep | 0
apps/timo-web/app/statistics/page.tsx | 3 +++
apps/timo-web/app/today/_components/.gitkeep | 0
apps/timo-web/app/today/_containers/.gitkeep | 0
apps/timo-web/app/today/_queries/.gitkeep | 0
apps/timo-web/app/today/page.tsx | 3 +++
33 files changed, 24 insertions(+)
create mode 100644 apps/timo-web/app/focus/_components/.gitkeep
create mode 100644 apps/timo-web/app/focus/_containers/.gitkeep
create mode 100644 apps/timo-web/app/focus/_queries/.gitkeep
create mode 100644 apps/timo-web/app/focus/page.tsx
create mode 100644 apps/timo-web/app/home/_components/.gitkeep
create mode 100644 apps/timo-web/app/home/_containers/.gitkeep
create mode 100644 apps/timo-web/app/home/_queries/.gitkeep
create mode 100644 apps/timo-web/app/home/page.tsx
create mode 100644 apps/timo-web/app/onboarding/_components/.gitkeep
create mode 100644 apps/timo-web/app/onboarding/_containers/.gitkeep
create mode 100644 apps/timo-web/app/onboarding/_queries/.gitkeep
create mode 100644 apps/timo-web/app/onboarding/page.tsx
create mode 100644 apps/timo-web/app/settings/_components/.gitkeep
create mode 100644 apps/timo-web/app/settings/_containers/.gitkeep
create mode 100644 apps/timo-web/app/settings/_queries/.gitkeep
create mode 100644 apps/timo-web/app/settings/account/_components/.gitkeep
create mode 100644 apps/timo-web/app/settings/account/_containers/.gitkeep
create mode 100644 apps/timo-web/app/settings/account/_queries/.gitkeep
create mode 100644 apps/timo-web/app/settings/account/page.tsx
create mode 100644 apps/timo-web/app/settings/layout.tsx
create mode 100644 apps/timo-web/app/settings/page.tsx
create mode 100644 apps/timo-web/app/settings/term/_components/.gitkeep
create mode 100644 apps/timo-web/app/settings/term/_containers/.gitkeep
create mode 100644 apps/timo-web/app/settings/term/_queries/.gitkeep
create mode 100644 apps/timo-web/app/settings/term/page.tsx
create mode 100644 apps/timo-web/app/statistics/_components/.gitkeep
create mode 100644 apps/timo-web/app/statistics/_containers/.gitkeep
create mode 100644 apps/timo-web/app/statistics/_queries/.gitkeep
create mode 100644 apps/timo-web/app/statistics/page.tsx
create mode 100644 apps/timo-web/app/today/_components/.gitkeep
create mode 100644 apps/timo-web/app/today/_containers/.gitkeep
create mode 100644 apps/timo-web/app/today/_queries/.gitkeep
create mode 100644 apps/timo-web/app/today/page.tsx
diff --git a/apps/timo-web/app/focus/_components/.gitkeep b/apps/timo-web/app/focus/_components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/focus/_containers/.gitkeep b/apps/timo-web/app/focus/_containers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/focus/_queries/.gitkeep b/apps/timo-web/app/focus/_queries/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/focus/page.tsx b/apps/timo-web/app/focus/page.tsx
new file mode 100644
index 00000000..e8b0076e
--- /dev/null
+++ b/apps/timo-web/app/focus/page.tsx
@@ -0,0 +1,3 @@
+export default function FocusPage() {
+ return <>>;
+}
diff --git a/apps/timo-web/app/home/_components/.gitkeep b/apps/timo-web/app/home/_components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/home/_containers/.gitkeep b/apps/timo-web/app/home/_containers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/home/_queries/.gitkeep b/apps/timo-web/app/home/_queries/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/home/page.tsx b/apps/timo-web/app/home/page.tsx
new file mode 100644
index 00000000..3d914f1b
--- /dev/null
+++ b/apps/timo-web/app/home/page.tsx
@@ -0,0 +1,3 @@
+export default function HomePage() {
+ return <>>;
+}
diff --git a/apps/timo-web/app/onboarding/_components/.gitkeep b/apps/timo-web/app/onboarding/_components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/onboarding/_containers/.gitkeep b/apps/timo-web/app/onboarding/_containers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/onboarding/_queries/.gitkeep b/apps/timo-web/app/onboarding/_queries/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/onboarding/page.tsx b/apps/timo-web/app/onboarding/page.tsx
new file mode 100644
index 00000000..e82bb921
--- /dev/null
+++ b/apps/timo-web/app/onboarding/page.tsx
@@ -0,0 +1,3 @@
+export default function OnboardingPage() {
+ return <>>;
+}
diff --git a/apps/timo-web/app/settings/_components/.gitkeep b/apps/timo-web/app/settings/_components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/_containers/.gitkeep b/apps/timo-web/app/settings/_containers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/_queries/.gitkeep b/apps/timo-web/app/settings/_queries/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/account/_components/.gitkeep b/apps/timo-web/app/settings/account/_components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/account/_containers/.gitkeep b/apps/timo-web/app/settings/account/_containers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/account/_queries/.gitkeep b/apps/timo-web/app/settings/account/_queries/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/account/page.tsx b/apps/timo-web/app/settings/account/page.tsx
new file mode 100644
index 00000000..3162a766
--- /dev/null
+++ b/apps/timo-web/app/settings/account/page.tsx
@@ -0,0 +1,3 @@
+export default function SettingsAccountPage() {
+ return <>>;
+}
diff --git a/apps/timo-web/app/settings/layout.tsx b/apps/timo-web/app/settings/layout.tsx
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/page.tsx b/apps/timo-web/app/settings/page.tsx
new file mode 100644
index 00000000..fe25cb52
--- /dev/null
+++ b/apps/timo-web/app/settings/page.tsx
@@ -0,0 +1,3 @@
+export default function SettingsPage() {
+ return <>>;
+}
diff --git a/apps/timo-web/app/settings/term/_components/.gitkeep b/apps/timo-web/app/settings/term/_components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/term/_containers/.gitkeep b/apps/timo-web/app/settings/term/_containers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/term/_queries/.gitkeep b/apps/timo-web/app/settings/term/_queries/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/term/page.tsx b/apps/timo-web/app/settings/term/page.tsx
new file mode 100644
index 00000000..1a1049b2
--- /dev/null
+++ b/apps/timo-web/app/settings/term/page.tsx
@@ -0,0 +1,3 @@
+export default function SettingsTermPage() {
+ return <>>;
+}
diff --git a/apps/timo-web/app/statistics/_components/.gitkeep b/apps/timo-web/app/statistics/_components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/statistics/_containers/.gitkeep b/apps/timo-web/app/statistics/_containers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/statistics/_queries/.gitkeep b/apps/timo-web/app/statistics/_queries/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/statistics/page.tsx b/apps/timo-web/app/statistics/page.tsx
new file mode 100644
index 00000000..73073c83
--- /dev/null
+++ b/apps/timo-web/app/statistics/page.tsx
@@ -0,0 +1,3 @@
+export default function StatisticsPage() {
+ return <>>;
+}
diff --git a/apps/timo-web/app/today/_components/.gitkeep b/apps/timo-web/app/today/_components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/today/_containers/.gitkeep b/apps/timo-web/app/today/_containers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/today/_queries/.gitkeep b/apps/timo-web/app/today/_queries/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/today/page.tsx b/apps/timo-web/app/today/page.tsx
new file mode 100644
index 00000000..38a6b1d1
--- /dev/null
+++ b/apps/timo-web/app/today/page.tsx
@@ -0,0 +1,3 @@
+export default function TodayPage() {
+ return <>>;
+}
From f8dc5406ece9ecfb81fb9ac63f876671ceac5a9a Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sat, 27 Jun 2026 02:23:55 +0900
Subject: [PATCH 138/789] =?UTF-8?q?chore(web):=20(auth)=C2=B7(main)=20?=
=?UTF-8?q?=EA=B5=AC=20=EB=9D=BC=EC=9A=B0=ED=8A=B8=20=EC=A0=9C=EA=B1=B0=20?=
=?UTF-8?q?(#37)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/app/(auth)/login/_apis/.gitkeep | 0
apps/timo-web/app/(auth)/login/_components/.gitkeep | 0
apps/timo-web/app/(auth)/login/_containers/.gitkeep | 0
apps/timo-web/app/(auth)/login/_hooks/.gitkeep | 0
apps/timo-web/app/(auth)/login/_utils/.gitkeep | 0
apps/timo-web/app/(auth)/login/page.tsx | 3 ---
apps/timo-web/app/(auth)/signup/_apis/.gitkeep | 0
apps/timo-web/app/(auth)/signup/_components/.gitkeep | 0
apps/timo-web/app/(auth)/signup/_containers/.gitkeep | 0
apps/timo-web/app/(auth)/signup/_hooks/.gitkeep | 0
apps/timo-web/app/(auth)/signup/_utils/.gitkeep | 0
apps/timo-web/app/(auth)/signup/page.tsx | 3 ---
apps/timo-web/app/(main)/.gitkeep | 0
13 files changed, 6 deletions(-)
delete mode 100644 apps/timo-web/app/(auth)/login/_apis/.gitkeep
delete mode 100644 apps/timo-web/app/(auth)/login/_components/.gitkeep
delete mode 100644 apps/timo-web/app/(auth)/login/_containers/.gitkeep
delete mode 100644 apps/timo-web/app/(auth)/login/_hooks/.gitkeep
delete mode 100644 apps/timo-web/app/(auth)/login/_utils/.gitkeep
delete mode 100644 apps/timo-web/app/(auth)/login/page.tsx
delete mode 100644 apps/timo-web/app/(auth)/signup/_apis/.gitkeep
delete mode 100644 apps/timo-web/app/(auth)/signup/_components/.gitkeep
delete mode 100644 apps/timo-web/app/(auth)/signup/_containers/.gitkeep
delete mode 100644 apps/timo-web/app/(auth)/signup/_hooks/.gitkeep
delete mode 100644 apps/timo-web/app/(auth)/signup/_utils/.gitkeep
delete mode 100644 apps/timo-web/app/(auth)/signup/page.tsx
delete mode 100644 apps/timo-web/app/(main)/.gitkeep
diff --git a/apps/timo-web/app/(auth)/login/_apis/.gitkeep b/apps/timo-web/app/(auth)/login/_apis/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/(auth)/login/_components/.gitkeep b/apps/timo-web/app/(auth)/login/_components/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/(auth)/login/_containers/.gitkeep b/apps/timo-web/app/(auth)/login/_containers/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/(auth)/login/_hooks/.gitkeep b/apps/timo-web/app/(auth)/login/_hooks/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/(auth)/login/_utils/.gitkeep b/apps/timo-web/app/(auth)/login/_utils/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/(auth)/login/page.tsx b/apps/timo-web/app/(auth)/login/page.tsx
deleted file mode 100644
index 428f4881..00000000
--- a/apps/timo-web/app/(auth)/login/page.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export default function LoginPage() {
- return <>>;
-}
diff --git a/apps/timo-web/app/(auth)/signup/_apis/.gitkeep b/apps/timo-web/app/(auth)/signup/_apis/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/(auth)/signup/_components/.gitkeep b/apps/timo-web/app/(auth)/signup/_components/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/(auth)/signup/_containers/.gitkeep b/apps/timo-web/app/(auth)/signup/_containers/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/(auth)/signup/_hooks/.gitkeep b/apps/timo-web/app/(auth)/signup/_hooks/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/(auth)/signup/_utils/.gitkeep b/apps/timo-web/app/(auth)/signup/_utils/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/(auth)/signup/page.tsx b/apps/timo-web/app/(auth)/signup/page.tsx
deleted file mode 100644
index cf8714a9..00000000
--- a/apps/timo-web/app/(auth)/signup/page.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export default function SignupPage() {
- return <>>;
-}
diff --git a/apps/timo-web/app/(main)/.gitkeep b/apps/timo-web/app/(main)/.gitkeep
deleted file mode 100644
index e69de29b..00000000
From 7d375f9a9bdb2223f2ec69513f424fdaf6c17917 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sat, 27 Jun 2026 02:24:07 +0900
Subject: [PATCH 139/789] =?UTF-8?q?chore(web):=20Lighthouse=20URL=20?=
=?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EB=B0=8F=20=EC=95=84=ED=82=A4=ED=85=8D?=
=?UTF-8?q?=EC=B2=98=20=EB=AC=B8=EC=84=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4?=
=?UTF-8?q?=ED=8A=B8=20(#37)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/lighthouserc.cjs | 31 ++++++++++++++++++++-----------
docs/architecture/components.md | 4 +---
2 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/apps/timo-web/lighthouserc.cjs b/apps/timo-web/lighthouserc.cjs
index bd0fd5ec..4a5ca851 100644
--- a/apps/timo-web/lighthouserc.cjs
+++ b/apps/timo-web/lighthouserc.cjs
@@ -1,30 +1,39 @@
/* global module */
-'use strict';
+"use strict";
module.exports = {
ci: {
collect: {
url: [
- 'http://localhost:3000',
+ "http://localhost:3000",
+ "http://localhost:3000/home",
+ "http://localhost:3000/today",
+ "http://localhost:3000/focus",
+ "http://localhost:3000/statistics",
+ "http://localhost:3000/onboarding",
+ "http://localhost:3000/settings",
+ "http://localhost:3000/settings/account",
+ "http://localhost:3000/settings/term",
],
numberOfRuns: 3,
settings: {
- chromeFlags: '--no-sandbox --disable-setuid-sandbox --disable-dev-shm-usage',
+ chromeFlags:
+ "--no-sandbox --disable-setuid-sandbox --disable-dev-shm-usage",
},
},
assert: {
- preset: 'lighthouse:no-pwa',
+ preset: "lighthouse:no-pwa",
assertions: {
- 'categories:performance': ['warn', { minScore: 0.7 }],
- 'categories:accessibility': ['warn', { minScore: 0.85 }],
- 'categories:best-practices': ['warn', { minScore: 0.8 }],
- 'categories:seo': ['warn', { minScore: 0.8 }],
+ "categories:performance": ["warn", { minScore: 0.7 }],
+ "categories:accessibility": ["warn", { minScore: 0.85 }],
+ "categories:best-practices": ["warn", { minScore: 0.8 }],
+ "categories:seo": ["warn", { minScore: 0.8 }],
},
},
upload: {
- target: 'filesystem',
- outputDir: '.lighthouseci',
- reportFilenamePattern: '%%PATHNAME%%-%%DATETIME%%-report.%%EXTENSION%%',
+ target: "filesystem",
+ outputDir: ".lighthouseci",
+ reportFilenamePattern: "%%PATHNAME%%-%%DATETIME%%-report.%%EXTENSION%%",
},
},
};
diff --git a/docs/architecture/components.md b/docs/architecture/components.md
index 1e551306..0bf99e54 100644
--- a/docs/architecture/components.md
+++ b/docs/architecture/components.md
@@ -7,7 +7,7 @@ app/(domain)/page.tsx ← 라우팅·레이아웃 조
```
- **pages** (`app/.../page.tsx`): 라우팅 단위. 데이터 페칭(React Query) 및 레이아웃만 담당
-- **도메인 종속** (`_components/`, `_containers/`, `_queries/`, `_hooks/`, `_utils/`): 해당 도메인 라우트 내부에서만 사용. `_` 접두사로 Next.js 라우팅에서 제외됨
+- **도메인 종속** (`_components/`, `_containers/`, `_queries/`): 해당 도메인 라우트 내부에서만 사용. `_` 접두사로 Next.js 라우팅에서 제외됨
- `_components/` — props만 받는 순수 UI. `'use client'` 없이도 동작 가능
- `_containers/` — `'use client'` 필수. useQuery·zustand 등 외부 상태와 결합된 클라이언트 컨테이너
- `_queries/` — 해당 도메인 전용 React Query hooks (useQuery · useMutation · queryKey 정의)
@@ -22,8 +22,6 @@ app/
_components/ # LoginForm, SocialLoginButton 등 순수 UI
_containers/ # LoginFormContainer (useQuery·zustand 결합)
_queries/ # useLoginMutation, useUserProfileQuery 등
- _hooks/ # useLoginForm 등 auth 전용 커스텀 훅
- _utils/ # validatePassword 등 auth 전용 유틸
page.tsx # 레이아웃 조합만 (Server Component)
layout.tsx
```
From 5eca5dd2352c4103915a859b649ace198fa975f0 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sat, 27 Jun 2026 02:27:22 +0900
Subject: [PATCH 140/789] =?UTF-8?q?fix(web):=20settings=20layout=20default?=
=?UTF-8?q?=20export=20=EB=88=84=EB=9D=BD=20=EC=88=98=EC=A0=95=20(#37)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/app/settings/layout.tsx | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/apps/timo-web/app/settings/layout.tsx b/apps/timo-web/app/settings/layout.tsx
index e69de29b..8f656187 100644
--- a/apps/timo-web/app/settings/layout.tsx
+++ b/apps/timo-web/app/settings/layout.tsx
@@ -0,0 +1,7 @@
+export default function SettingsLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return <>{children}>;
+}
From bc663961d799af557968e2492ccc72afa8b96631 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sat, 27 Jun 2026 03:04:10 +0900
Subject: [PATCH 141/789] =?UTF-8?q?docs(web):=20page=C2=B7layout=20?=
=?UTF-8?q?=ED=95=A8=EC=88=98=EB=AA=85=20=EC=BB=A8=EB=B2=A4=EC=85=98=20?=
=?UTF-8?q?=EB=AA=85=EC=8B=9C=20(#37)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- page.tsx: export default function RouteNamePage()
- layout.tsx: export default function RouteNameLayout()
---
docs/architecture/scaffolding.md | 3 ++-
docs/conventions/code-style.md | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/docs/architecture/scaffolding.md b/docs/architecture/scaffolding.md
index bad3d896..99e34d35 100644
--- a/docs/architecture/scaffolding.md
+++ b/docs/architecture/scaffolding.md
@@ -15,4 +15,5 @@ pnpm gen page # apps/timo-web에 App Router 페이지 추가
생성되는 파일 형식은 `docs/conventions/code-style.md` 코드 스타일 규칙을 따른다.
- **컴포넌트**: arrow function, named export (`export const`)
-- **페이지**: `export default function` (Next.js App Router 라우팅 규칙)
+- **페이지**: `export default function RouteNamePage()` — 함수명은 라우트명 PascalCase + `Page` 접미사 (예: `HomePage`, `LoginPage`)
+- **레이아웃**: `export default function RouteNameLayout()` — 함수명은 라우트명 PascalCase + `Layout` 접미사 (예: `HomeLayout`, `LoginLayout`)
diff --git a/docs/conventions/code-style.md b/docs/conventions/code-style.md
index 56106720..123cd037 100644
--- a/docs/conventions/code-style.md
+++ b/docs/conventions/code-style.md
@@ -10,7 +10,7 @@
- Arrow function으로 선언: `export const Component = () => {}`
- Named export 사용 (default export 지양)
- - **예외**: Next.js App Router 예약 파일(`app/**/page.tsx`, `app/**/layout.tsx`, `app/**/loading.tsx` 등)은 프레임워크 요구에 따라 `export default function Page() {}` 형식을 사용한다. → `docs/architecture/scaffolding.md` 참조
+ - **예외**: Next.js App Router 예약 파일(`app/**/page.tsx`, `app/**/layout.tsx`, `app/**/loading.tsx` 등)은 프레임워크 요구에 따라 `export default function` 형식을 사용한다. 함수명은 라우트명 PascalCase + 파일 역할 접미사로 한다 (예: `HomePage`, `LoginPage`, `HomeLayout`). → `docs/architecture/scaffolding.md` 참조
- 자식 없으면 self-closing: ``
- 최상단 래퍼는 Fragment: `<>…>`
From 3237a0e45311cf5b825fcb5724e670bc5f256d6c Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Sat, 27 Jun 2026 03:11:47 +0900
Subject: [PATCH 142/789] =?UTF-8?q?chore(root):=20prettier-plugin-tailwind?=
=?UTF-8?q?css=20=EC=84=A4=EC=B9=98=20=EB=B0=8F=20.prettierrc.json=20?=
=?UTF-8?q?=EB=93=B1=EB=A1=9D=20(#39)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Tailwind 클래스 자동 정렬을 위해 prettier-plugin-tailwindcss를 추가했습니다
---
.prettierrc.json | 3 ++-
package.json | 1 +
pnpm-lock.yaml | 62 ++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 65 insertions(+), 1 deletion(-)
diff --git a/.prettierrc.json b/.prettierrc.json
index fd873cbb..579ac795 100644
--- a/.prettierrc.json
+++ b/.prettierrc.json
@@ -5,5 +5,6 @@
"trailingComma": "all",
"printWidth": 80,
"arrowParens": "always",
- "endOfLine": "lf"
+ "endOfLine": "lf",
+ "plugins": ["prettier-plugin-tailwindcss"]
}
diff --git a/package.json b/package.json
index 2ddabbba..e64d6817 100644
--- a/package.json
+++ b/package.json
@@ -19,6 +19,7 @@
"husky": "^9.1.7",
"lint-staged": "^17.0.8",
"prettier": "^3.7.4",
+ "prettier-plugin-tailwindcss": "^0.8.0",
"turbo": "^2.9.18",
"typescript": "5.9.2"
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 08c49c44..3acf6ab3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -20,6 +20,9 @@ importers:
prettier:
specifier: ^3.7.4
version: 3.7.4
+ prettier-plugin-tailwindcss:
+ specifier: ^0.8.0
+ version: 0.8.0(prettier@3.7.4)
turbo:
specifier: ^2.9.18
version: 2.9.18
@@ -2699,6 +2702,61 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
+ prettier-plugin-tailwindcss@0.8.0:
+ resolution: {integrity: sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g==}
+ engines: {node: '>=20.19'}
+ peerDependencies:
+ '@ianvs/prettier-plugin-sort-imports': '*'
+ '@prettier/plugin-hermes': '*'
+ '@prettier/plugin-oxc': '*'
+ '@prettier/plugin-pug': '*'
+ '@shopify/prettier-plugin-liquid': '*'
+ '@trivago/prettier-plugin-sort-imports': '*'
+ '@zackad/prettier-plugin-twig': '*'
+ prettier: ^3.0
+ prettier-plugin-astro: '*'
+ prettier-plugin-css-order: '*'
+ prettier-plugin-jsdoc: '*'
+ prettier-plugin-marko: '*'
+ prettier-plugin-multiline-arrays: '*'
+ prettier-plugin-organize-attributes: '*'
+ prettier-plugin-organize-imports: '*'
+ prettier-plugin-sort-imports: '*'
+ prettier-plugin-svelte: '*'
+ peerDependenciesMeta:
+ '@ianvs/prettier-plugin-sort-imports':
+ optional: true
+ '@prettier/plugin-hermes':
+ optional: true
+ '@prettier/plugin-oxc':
+ optional: true
+ '@prettier/plugin-pug':
+ optional: true
+ '@shopify/prettier-plugin-liquid':
+ optional: true
+ '@trivago/prettier-plugin-sort-imports':
+ optional: true
+ '@zackad/prettier-plugin-twig':
+ optional: true
+ prettier-plugin-astro:
+ optional: true
+ prettier-plugin-css-order:
+ optional: true
+ prettier-plugin-jsdoc:
+ optional: true
+ prettier-plugin-marko:
+ optional: true
+ prettier-plugin-multiline-arrays:
+ optional: true
+ prettier-plugin-organize-attributes:
+ optional: true
+ prettier-plugin-organize-imports:
+ optional: true
+ prettier-plugin-sort-imports:
+ optional: true
+ prettier-plugin-svelte:
+ optional: true
+
prettier@3.7.4:
resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
engines: {node: '>=14'}
@@ -5660,6 +5718,10 @@ snapshots:
prelude-ls@1.2.1: {}
+ prettier-plugin-tailwindcss@0.8.0(prettier@3.7.4):
+ dependencies:
+ prettier: 3.7.4
+
prettier@3.7.4: {}
progress@2.0.3: {}
From c27b2b95b29e4ec0105adb04d5bc6945b7314571 Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Sat, 27 Jun 2026 03:12:18 +0900
Subject: [PATCH 143/789] =?UTF-8?q?chore(config):=20ESLint=20=EC=A0=88?=
=?UTF-8?q?=EB=8C=80=EA=B2=BD=EB=A1=9C=20import=20=EA=B0=95=EC=A0=9C=20?=
=?UTF-8?q?=EB=A3=B0=20=EC=B6=94=EA=B0=80=20(#39)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Next.js 앱에서 상대경로 부모 디렉토리 import를 금지했습니다 (import/no-relative-parent-imports)
---
packages/eslint-config/next.js | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/packages/eslint-config/next.js b/packages/eslint-config/next.js
index a49d88fd..0a48d289 100644
--- a/packages/eslint-config/next.js
+++ b/packages/eslint-config/next.js
@@ -72,6 +72,11 @@ export const nextJsConfig = [
},
},
pluginJsxA11y.flatConfigs.recommended,
+ {
+ rules: {
+ "import/no-relative-parent-imports": "error",
+ },
+ },
{
files: [APP_ROUTER_SPECIAL_FILES],
rules: {
From fc0a51bfabebd5cbe08ab49346e9b50dd7f6c8df Mon Sep 17 00:00:00 2001
From: jjangminii
Date: Sat, 27 Jun 2026 03:22:19 +0900
Subject: [PATCH 144/789] =?UTF-8?q?feat(ui):=20timo-design-system=EC=97=90?=
=?UTF-8?q?=20cn=20=EC=9C=A0=ED=8B=B8=20=EC=B6=94=EA=B0=80=20(#39)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- clsx와 tailwind-merge를 설치했습니다
- src/lib/cn.ts에 className 병합 유틸(cn)을 추가했습니다
- src/lib/index.ts에서 cn을 re-export했습니다
---
packages/timo-design-system/package.json | 4 +++-
packages/timo-design-system/src/lib/cn.ts | 4 ++++
packages/timo-design-system/src/lib/index.ts | 2 +-
pnpm-lock.yaml | 17 +++++++++++++++++
4 files changed, 25 insertions(+), 2 deletions(-)
create mode 100644 packages/timo-design-system/src/lib/cn.ts
diff --git a/packages/timo-design-system/package.json b/packages/timo-design-system/package.json
index 8e5459b1..c9157d8f 100644
--- a/packages/timo-design-system/package.json
+++ b/packages/timo-design-system/package.json
@@ -22,7 +22,9 @@
"typescript": "5.9.2"
},
"dependencies": {
+ "clsx": "^2.1.1",
"react": "^19.2.0",
- "react-dom": "^19.2.0"
+ "react-dom": "^19.2.0",
+ "tailwind-merge": "^3.6.0"
}
}
diff --git a/packages/timo-design-system/src/lib/cn.ts b/packages/timo-design-system/src/lib/cn.ts
new file mode 100644
index 00000000..e167c34a
--- /dev/null
+++ b/packages/timo-design-system/src/lib/cn.ts
@@ -0,0 +1,4 @@
+import { type ClassValue, clsx } from "clsx";
+import { twMerge } from "tailwind-merge";
+
+export const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));
diff --git a/packages/timo-design-system/src/lib/index.ts b/packages/timo-design-system/src/lib/index.ts
index cb0ff5c3..c25627d5 100644
--- a/packages/timo-design-system/src/lib/index.ts
+++ b/packages/timo-design-system/src/lib/index.ts
@@ -1 +1 @@
-export {};
+export { cn } from "./cn";
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3acf6ab3..e416b64e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -135,12 +135,18 @@ importers:
packages/timo-design-system:
dependencies:
+ clsx:
+ specifier: ^2.1.1
+ version: 2.1.1
react:
specifier: ^19.2.0
version: 19.2.0
react-dom:
specifier: ^19.2.0
version: 19.2.0(react@19.2.0)
+ tailwind-merge:
+ specifier: ^3.6.0
+ version: 3.6.0
devDependencies:
'@repo/eslint-config':
specifier: workspace:*
@@ -1650,6 +1656,10 @@ packages:
client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -3024,6 +3034,9 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
+ tailwind-merge@3.6.0:
+ resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==}
+
tailwindcss@4.3.1:
resolution: {integrity: sha512-hk+TB1m+K8CYNrP6rjQaq/Y+4Zylwpa87mLYBKCunwnnQ9p+fHb7kmSfGqyEJoxF/O6CDyABWVFEafNSYKll+Q==}
@@ -4606,6 +4619,8 @@ snapshots:
client-only@0.0.1: {}
+ clsx@2.1.1: {}
+
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@@ -6091,6 +6106,8 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
+ tailwind-merge@3.6.0: {}
+
tailwindcss@4.3.1: {}
tapable@2.3.3: {}
From 4f9a47995eb288927299d5e9b57e98e0a030c419 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sat, 27 Jun 2026 10:34:59 +0900
Subject: [PATCH 145/789] =?UTF-8?q?chore(ui):=20Storybook=20=EB=AC=B8?=
=?UTF-8?q?=EC=84=9C=ED=99=94=20addon=20=EA=B5=AC=EC=84=B1=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../timo-design-system/.storybook/main.ts | 12 +-
packages/timo-design-system/package.json | 12 +-
.../src/Introduction.stories.tsx | 1 +
pnpm-lock.yaml | 1520 ++++++++---------
4 files changed, 727 insertions(+), 818 deletions(-)
diff --git a/packages/timo-design-system/.storybook/main.ts b/packages/timo-design-system/.storybook/main.ts
index 19e8dcf7..d2f044c6 100644
--- a/packages/timo-design-system/.storybook/main.ts
+++ b/packages/timo-design-system/.storybook/main.ts
@@ -1,12 +1,20 @@
import type { StorybookConfig } from "@storybook/react-vite";
const config: StorybookConfig = {
- stories: ["../src/**/*.stories.@(js|jsx|ts|tsx)"],
- addons: ["@storybook/addon-links", "@storybook/addon-a11y"],
+ stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"],
+ addons: [
+ "@storybook/addon-links",
+ "@storybook/addon-essentials",
+ "@storybook/addon-interactions",
+ "@storybook/addon-a11y",
+ ],
framework: {
name: "@storybook/react-vite",
options: {},
},
+ docs: {
+ autodocs: "tag",
+ },
};
export default config;
diff --git a/packages/timo-design-system/package.json b/packages/timo-design-system/package.json
index 43091136..3223ceaf 100644
--- a/packages/timo-design-system/package.json
+++ b/packages/timo-design-system/package.json
@@ -15,14 +15,18 @@
"devDependencies": {
"@repo/eslint-config": "workspace:*",
"@repo/typescript-config": "workspace:*",
- "@storybook/addon-a11y": "^10.4.6",
- "@storybook/addon-links": "^10.4.6",
- "@storybook/react-vite": "^10.4.6",
+ "@storybook/addon-a11y": "^8.6.14",
+ "@storybook/addon-docs": "8.6.14",
+ "@storybook/addon-essentials": "8.6.14",
+ "@storybook/addon-interactions": "8.6.14",
+ "@storybook/addon-links": "^8.6.14",
+ "@storybook/react": "8.6.14",
+ "@storybook/react-vite": "^8.6.14",
"@types/node": "^22.15.3",
"@types/react": "19.2.2",
"@types/react-dom": "19.2.2",
"eslint": "^9.39.1",
- "storybook": "^10.4.6",
+ "storybook": "^8.6.14",
"typescript": "5.9.2"
},
"dependencies": {
diff --git a/packages/timo-design-system/src/Introduction.stories.tsx b/packages/timo-design-system/src/Introduction.stories.tsx
index 5ab8eaef..0a24043e 100644
--- a/packages/timo-design-system/src/Introduction.stories.tsx
+++ b/packages/timo-design-system/src/Introduction.stories.tsx
@@ -10,6 +10,7 @@ const Introduction = () => (
const meta: Meta = {
title: "Introduction",
component: Introduction,
+ tags: ["autodocs"],
};
export default meta;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 969ad6ce..2ceb3230 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -131,14 +131,26 @@ importers:
specifier: workspace:*
version: link:../typescript-config
'@storybook/addon-a11y':
- specifier: ^10.4.6
- version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))
+ specifier: ^8.6.14
+ version: 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-docs':
+ specifier: 8.6.14
+ version: 8.6.14(@types/react@19.2.2)(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-essentials':
+ specifier: 8.6.14
+ version: 8.6.14(@types/react@19.2.2)(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-interactions':
+ specifier: 8.6.14
+ version: 8.6.14(storybook@8.6.14(prettier@3.7.4))
'@storybook/addon-links':
- specifier: ^10.4.6
- version: 10.4.6(@types/react@19.2.2)(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))
+ specifier: ^8.6.14
+ version: 8.6.14(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/react':
+ specifier: 8.6.14
+ version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))(typescript@5.9.2)
'@storybook/react-vite':
- specifier: ^10.4.6
- version: 10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(esbuild@0.25.12)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))
+ specifier: ^8.6.14
+ version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))
'@types/node':
specifier: ^22.15.3
version: 22.15.3
@@ -152,8 +164,8 @@ importers:
specifier: ^9.39.1
version: 9.39.1
storybook:
- specifier: ^10.4.6
- version: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ specifier: ^8.6.14
+ version: 8.6.14(prettier@3.7.4)
typescript:
specifier: 5.9.2
version: 5.9.2
@@ -236,30 +248,15 @@ packages:
resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
engines: {node: '>=6.9.0'}
- '@emnapi/core@1.11.0':
- resolution: {integrity: sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==}
-
'@emnapi/core@1.11.1':
resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
- '@emnapi/core@1.9.2':
- resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==}
-
- '@emnapi/runtime@1.11.0':
- resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==}
-
'@emnapi/runtime@1.11.1':
resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
'@emnapi/runtime@1.7.1':
resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
- '@emnapi/runtime@1.9.2':
- resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==}
-
- '@emnapi/wasi-threads@1.2.1':
- resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
-
'@emnapi/wasi-threads@1.2.2':
resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
@@ -744,11 +741,15 @@ packages:
'@types/node':
optional: true
- '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0':
- resolution: {integrity: sha512-qvsTEwEFefhdirGOPnu9Wp6ChfIwy2dBCRuETU3uE+4cC+PFoxMSiiEhxk4lOluA34eARHA0OxqsEUYDqRMgeQ==}
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0':
+ resolution: {integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==}
peerDependencies:
typescript: '>= 4.3.x'
- vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
peerDependenciesMeta:
typescript:
optional: true
@@ -769,6 +770,12 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@mdx-js/react@3.1.1':
+ resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
+ peerDependencies:
+ '@types/react': '>=16'
+ react: '>=16'
+
'@napi-rs/wasm-runtime@1.1.6':
resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==}
peerDependencies:
@@ -841,225 +848,12 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@oxc-parser/binding-android-arm-eabi@0.127.0':
- resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [android]
-
- '@oxc-parser/binding-android-arm64@0.127.0':
- resolution: {integrity: sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [android]
-
- '@oxc-parser/binding-darwin-arm64@0.127.0':
- resolution: {integrity: sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [darwin]
-
- '@oxc-parser/binding-darwin-x64@0.127.0':
- resolution: {integrity: sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [darwin]
-
- '@oxc-parser/binding-freebsd-x64@0.127.0':
- resolution: {integrity: sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [freebsd]
-
- '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0':
- resolution: {integrity: sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@oxc-parser/binding-linux-arm-musleabihf@0.127.0':
- resolution: {integrity: sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@oxc-parser/binding-linux-arm64-gnu@0.127.0':
- resolution: {integrity: sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
-
- '@oxc-parser/binding-linux-arm64-musl@0.127.0':
- resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
-
- '@oxc-parser/binding-linux-ppc64-gnu@0.127.0':
- resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ppc64]
- os: [linux]
-
- '@oxc-parser/binding-linux-riscv64-gnu@0.127.0':
- resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [riscv64]
- os: [linux]
-
- '@oxc-parser/binding-linux-riscv64-musl@0.127.0':
- resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [riscv64]
- os: [linux]
-
- '@oxc-parser/binding-linux-s390x-gnu@0.127.0':
- resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [s390x]
- os: [linux]
-
- '@oxc-parser/binding-linux-x64-gnu@0.127.0':
- resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
-
- '@oxc-parser/binding-linux-x64-musl@0.127.0':
- resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
-
- '@oxc-parser/binding-openharmony-arm64@0.127.0':
- resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [openharmony]
-
- '@oxc-parser/binding-wasm32-wasi@0.127.0':
- resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [wasm32]
-
- '@oxc-parser/binding-win32-arm64-msvc@0.127.0':
- resolution: {integrity: sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [win32]
-
- '@oxc-parser/binding-win32-ia32-msvc@0.127.0':
- resolution: {integrity: sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ia32]
- os: [win32]
-
- '@oxc-parser/binding-win32-x64-msvc@0.127.0':
- resolution: {integrity: sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [win32]
-
- '@oxc-project/types@0.127.0':
- resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==}
-
'@oxc-project/types@0.137.0':
resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==}
- '@oxc-resolver/binding-android-arm-eabi@11.21.3':
- resolution: {integrity: sha512-eNU11A2WNizh04v3uyaJCootrHIaS0B9aHYXvAvVnPNk4xYSjMUjHnhQ6dewPN2MRYDskV85d1N0Aw0WNWhcyg==}
- cpu: [arm]
- os: [android]
-
- '@oxc-resolver/binding-android-arm64@11.21.3':
- resolution: {integrity: sha512-8Q+ZjTLvn2dIcWsrmhdrEihm7q+ag/k+mkry7Z+t0QbbHaVxXQfvH9AewyVMh/WrpEKhQ3DDgx9fYbqeCpeOEw==}
- cpu: [arm64]
- os: [android]
-
- '@oxc-resolver/binding-darwin-arm64@11.21.3':
- resolution: {integrity: sha512-wkh0qKZGHXVUDxFw3oA1TXnU2BDYY/r775oJflGeIr8uDPPoN2pk8gijQIzYRT6hoql/lg3+Tx/SaTn9e2/aGg==}
- cpu: [arm64]
- os: [darwin]
-
- '@oxc-resolver/binding-darwin-x64@11.21.3':
- resolution: {integrity: sha512-HbNc23FAQYbuyDV2vBWMez4u4mrsm5RAkniGZAWqr6lYZ3N4beeqIb776jzwRl8qL2zRhHVXpUj97X0QgogVzg==}
- cpu: [x64]
- os: [darwin]
-
- '@oxc-resolver/binding-freebsd-x64@11.21.3':
- resolution: {integrity: sha512-K6xNsTUPEUdfrn0+kbMq5nOUB5w1C5pavPQngt4TM2FpN91lP0PBe2srSpamb4d69O7h86oAi/qWX/kZNRSjkw==}
- cpu: [x64]
- os: [freebsd]
-
- '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3':
- resolution: {integrity: sha512-VcFmOpcpWX1zoEy8M58tR2M9YxM+Z9RuQhqAx5q0CTmrruaP7Gveejg75hzd/5sg5nk9G3aLALEa3hE2FsmmTQ==}
- cpu: [arm]
- os: [linux]
-
- '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3':
- resolution: {integrity: sha512-quVoxFLBy43hWaQbbDtQNRwAX5vX76mv7n64icAtQcJ3eNgVeblqmkupF/hAneNthdqSlnd1sTjb3aQSaDPaCQ==}
- cpu: [arm]
- os: [linux]
-
- '@oxc-resolver/binding-linux-arm64-gnu@11.21.3':
- resolution: {integrity: sha512-X0AqNZgcD07Q4V3RDK18/vYOj/HQT/FnmEFGYS2jTWqY7JO13ryE3TEs3eAIgUJhBnNkpEaiXqz3VK8M7qQhWQ==}
- cpu: [arm64]
- os: [linux]
-
- '@oxc-resolver/binding-linux-arm64-musl@11.21.3':
- resolution: {integrity: sha512-YkaQnaKYdbuaXvRt5Qd0GpbihzVnyfR6z1SpYfIUC6RTu4NF7lDKPjVkYb+jRI2gedVO2rVpN35Y6akG6ud4Lw==}
- cpu: [arm64]
- os: [linux]
-
- '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3':
- resolution: {integrity: sha512-gB9HwhrPiFqUzDeEq+y/CgAijz1YdI6BnXz5GaH2Pa9cWdutchlkGFAiAuGb/PjVQpiK6NFKzFuztxrweoit7A==}
- cpu: [ppc64]
- os: [linux]
-
- '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3':
- resolution: {integrity: sha512-zjDWBlYk8QGv0H8dsPUWqkfjYIIjG2TvspGkzXL0eImbgxtZorA/klKeHyolevoT3Kvbi+1iMr9Lhrh7jf54Og==}
- cpu: [riscv64]
- os: [linux]
-
- '@oxc-resolver/binding-linux-riscv64-musl@11.21.3':
- resolution: {integrity: sha512-4UfsQvacV388y1zpXL7C1x1FNYaV52JtuNRiuzrfQA2z1z6ElVrsidkGsrvQ5EgeSq1Pj7kaKqrgGkvFuxJ/tw==}
- cpu: [riscv64]
- os: [linux]
-
- '@oxc-resolver/binding-linux-s390x-gnu@11.21.3':
- resolution: {integrity: sha512-b5uH+HKH0MP5mNBYaK75SKsJbw52URqrx2LavYdq6wb0l3ExAG5niYRP9DWUNHdKilpaBVM2bXk9HNWrH3ew7Q==}
- cpu: [s390x]
- os: [linux]
-
- '@oxc-resolver/binding-linux-x64-gnu@11.21.3':
- resolution: {integrity: sha512-PjYlmilBpNRh2ntXNYAK3Am5w/nPfEpnU/96iNx7CI8EzAn12J4JRiec63wHJTH31nLoCNxBg/829pN+3CfG3Q==}
- cpu: [x64]
- os: [linux]
-
- '@oxc-resolver/binding-linux-x64-musl@11.21.3':
- resolution: {integrity: sha512-QTBAb7JuHlZ7JUEyM8UiQi2f7m/L4swBhP2TNpYIDc9Wp/wRw1G/8sl6i13aIzQAXH7LKIm294LeOHd0lQR8zA==}
- cpu: [x64]
- os: [linux]
-
- '@oxc-resolver/binding-openharmony-arm64@11.21.3':
- resolution: {integrity: sha512-4j1DFwjwv36ec9kds0jU/ucQ5Ha4ERO/H95BxR5JFf0kqUUAJ1kwII7XhTc1vZrkdJkvLGC9Q2MbpObpum8RBg==}
- cpu: [arm64]
- os: [openharmony]
-
- '@oxc-resolver/binding-wasm32-wasi@11.21.3':
- resolution: {integrity: sha512-i8oluoel5kru/j1WNrjmQSiA3GQ7wvIYVR1IwIoZtKogAhya2iub+ZKIeSIkcJOrnzQ18Tzl/F+kL3fYOxZLvA==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
-
- '@oxc-resolver/binding-win32-arm64-msvc@11.21.3':
- resolution: {integrity: sha512-M/8dw8dD6aOs+NlPJax401CZB9I7Aut84isQLgALGGwke4Afvw+/7yYhZb94yXf6t2sPLhQLmSmtSV+2FhsOWg==}
- cpu: [arm64]
- os: [win32]
-
- '@oxc-resolver/binding-win32-x64-msvc@11.21.3':
- resolution: {integrity: sha512-H7BCt/VnS9hnmMp42eGhZ99izSCRvlnWwy/N71K1/J8QoExwY4262Z8QiEkMDtduRJrztayDxETTckmUuAVL9Q==}
- cpu: [x64]
- os: [win32]
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
'@rolldown/binding-android-arm64@1.1.3':
resolution: {integrity: sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==}
@@ -1165,95 +959,181 @@ packages:
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- '@storybook/addon-a11y@10.4.6':
- resolution: {integrity: sha512-XCJy+f0DFOiCgUU9knRDlLDxVFI+AAQ3/wE/NF85zB9iDPPS2DwkSN+mas3zDgHt66zhN8Cq3/UiyCDUweV9Zw==}
+ '@storybook/addon-a11y@8.6.14':
+ resolution: {integrity: sha512-fozv6enO9IgpWq2U8qqS8MZ21Nt+MVHiRQe3CjnCpBOejTyo/ATm690PeYYRVHVG6M/15TVePb0h3ngKQbrrzQ==}
peerDependencies:
- storybook: ^10.4.6
+ storybook: ^8.6.14
- '@storybook/addon-links@10.4.6':
- resolution: {integrity: sha512-VGfERTsGRFmfvNP3SKprFWkC6Od5kXzSutT5PSZjQ/O9NnCdHhd/RILxFDN2TzZn9ywDc7t5b4AldKmSYCv3EQ==}
+ '@storybook/addon-actions@8.6.14':
+ resolution: {integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==}
peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- storybook: ^10.4.6
+ storybook: ^8.6.14
+
+ '@storybook/addon-backgrounds@8.6.14':
+ resolution: {integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==}
+ peerDependencies:
+ storybook: ^8.6.14
+
+ '@storybook/addon-controls@8.6.14':
+ resolution: {integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==}
+ peerDependencies:
+ storybook: ^8.6.14
+
+ '@storybook/addon-docs@8.6.14':
+ resolution: {integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==}
+ peerDependencies:
+ storybook: ^8.6.14
+
+ '@storybook/addon-essentials@8.6.14':
+ resolution: {integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==}
+ peerDependencies:
+ storybook: ^8.6.14
+
+ '@storybook/addon-highlight@8.6.14':
+ resolution: {integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==}
+ peerDependencies:
+ storybook: ^8.6.14
+
+ '@storybook/addon-interactions@8.6.14':
+ resolution: {integrity: sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==}
+ peerDependencies:
+ storybook: ^8.6.14
+
+ '@storybook/addon-links@8.6.14':
+ resolution: {integrity: sha512-DRlXHIyZzOruAZkxmXfVgTF+4d6K27pFcH4cUsm3KT1AXuZbr23lb5iZHpUZoG6lmU85Sru4xCEgewSTXBIe1w==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.6.14
peerDependenciesMeta:
- '@types/react':
- optional: true
react:
optional: true
- '@storybook/builder-vite@10.4.6':
- resolution: {integrity: sha512-BHBtD81HiXUiDQz/CaFynLtWmm7AFUQn8VnXuHipZ8KlnUANopa4yqdVuy/Gwz8ub254uFI5NMZsW/KlgWNgNg==}
+ '@storybook/addon-measure@8.6.14':
+ resolution: {integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==}
+ peerDependencies:
+ storybook: ^8.6.14
+
+ '@storybook/addon-outline@8.6.14':
+ resolution: {integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==}
+ peerDependencies:
+ storybook: ^8.6.14
+
+ '@storybook/addon-toolbars@8.6.14':
+ resolution: {integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==}
peerDependencies:
- storybook: ^10.4.6
- vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ storybook: ^8.6.14
- '@storybook/csf-plugin@10.4.6':
- resolution: {integrity: sha512-NILLxDqpA/JR/AazGWpsz+4fadJwRU4uhHephGtYpVOWnQA/DkJfKT6zpcJVq8+QA8A2zKMLX3GVKsXIrxjuDA==}
+ '@storybook/addon-viewport@8.6.14':
+ resolution: {integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==}
peerDependencies:
- esbuild: '*'
- rollup: '*'
- storybook: ^10.4.6
- vite: '*'
- webpack: '*'
+ storybook: ^8.6.14
+
+ '@storybook/blocks@8.6.14':
+ resolution: {integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^8.6.14
peerDependenciesMeta:
- esbuild:
- optional: true
- rollup:
+ react:
optional: true
- vite:
+ react-dom:
optional: true
- webpack:
+
+ '@storybook/builder-vite@8.6.14':
+ resolution: {integrity: sha512-ajWYhy32ksBWxwWHrjwZzyC0Ii5ZTeu5lsqA95Q/EQBB0P5qWlHWGM3AVyv82Mz/ND03ebGy123uVwgf6olnYQ==}
+ peerDependencies:
+ storybook: ^8.6.14
+ vite: ^4.0.0 || ^5.0.0 || ^6.0.0
+
+ '@storybook/components@8.6.14':
+ resolution: {integrity: sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw==}
+ peerDependencies:
+ storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
+
+ '@storybook/core@8.6.14':
+ resolution: {integrity: sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==}
+ peerDependencies:
+ prettier: ^2 || ^3
+ peerDependenciesMeta:
+ prettier:
optional: true
+ '@storybook/csf-plugin@8.6.14':
+ resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==}
+ peerDependencies:
+ storybook: ^8.6.14
+
'@storybook/global@5.0.0':
resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
- '@storybook/icons@2.0.2':
- resolution: {integrity: sha512-KZBCpXsshAIjczYNXR/rlxEtCUX/eAbpFNwKi8bcOomrLA4t/SyPz5RF+lVPO2oZBUE4sAkt43mfJUevQDSEEw==}
+ '@storybook/icons@1.6.0':
+ resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==}
+ engines: {node: '>=14.0.0'}
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
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
- '@storybook/react-dom-shim@10.4.6':
- resolution: {integrity: sha512-iGNmKzrq9vgl2PDrYAnZKI+yvac3Ym+lJXXuQaqlFRS23zA5MNm4EBX+rAG7WulqchoK6NaZ0KQOs2mAgEpTMg==}
+ '@storybook/instrumenter@8.6.14':
+ resolution: {integrity: sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==}
peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- storybook: ^10.4.6
- peerDependenciesMeta:
- '@types/react':
- optional: true
- '@types/react-dom':
- optional: true
+ storybook: ^8.6.14
- '@storybook/react-vite@10.4.6':
- resolution: {integrity: sha512-0arEQtybqGYXHbXpTot+Wv9YtG+V5Vp43QayXavPKQ20M8mpEzhyCPKd0EhqMGSC1Z1UEt0hm365WUBhI9LfKA==}
+ '@storybook/manager-api@8.6.14':
+ resolution: {integrity: sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==}
peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- storybook: ^10.4.6
- vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
- '@storybook/react@10.4.6':
- resolution: {integrity: sha512-9Y7YecrVFe1/01KYjfOLxVqTg2Aq+IO6TEv6sC2U0PfD0AWCSCmQ91QqgBpN/XW4aFFWoiZNinyXMUlU8zxy2w==}
+ '@storybook/preview-api@8.6.14':
+ resolution: {integrity: sha512-2GhcCd4dNMrnD7eooEfvbfL4I83qAqEyO0CO7JQAmIO6Rxb9BsOLLI/GD5HkvQB73ArTJ+PT50rfaO820IExOQ==}
peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- storybook: ^10.4.6
- typescript: '>= 4.9.x'
+ storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
+
+ '@storybook/react-dom-shim@8.6.14':
+ resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.6.14
+
+ '@storybook/react-vite@8.6.14':
+ resolution: {integrity: sha512-FZU0xMPxa4/TO87FgcWwappOxLBHZV5HSRK5K+2bJD7rFJAoNorbHvB4Q1zvIAk7eCMjkr2GPCPHx9PRB9vJFg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ '@storybook/test': 8.6.14
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.6.14
+ vite: ^4.0.0 || ^5.0.0 || ^6.0.0
peerDependenciesMeta:
- '@types/react':
+ '@storybook/test':
optional: true
- '@types/react-dom':
+
+ '@storybook/react@8.6.14':
+ resolution: {integrity: sha512-BOepx5bBFwl/CPI+F+LnmMmsG1wQYmrX/UQXgUbHQUU9Tj7E2ndTnNbpIuSLc8IrM03ru+DfwSg1Co3cxWtT+g==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ '@storybook/test': 8.6.14
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.6.14
+ typescript: '>= 4.2.x'
+ peerDependenciesMeta:
+ '@storybook/test':
optional: true
typescript:
optional: true
+ '@storybook/test@8.6.14':
+ resolution: {integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==}
+ peerDependencies:
+ storybook: ^8.6.14
+
+ '@storybook/theming@8.6.14':
+ resolution: {integrity: sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==}
+ peerDependencies:
+ storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
+
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
@@ -1278,12 +1158,12 @@ packages:
resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
engines: {node: '>=18'}
- '@testing-library/jest-dom@6.9.1':
- resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==}
+ '@testing-library/jest-dom@6.5.0':
+ resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==}
engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
- '@testing-library/user-event@14.6.1':
- resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==}
+ '@testing-library/user-event@14.5.2':
+ resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==}
engines: {node: '>=12', npm: '>=6'}
peerDependencies:
'@testing-library/dom': '>=7.21.4'
@@ -1340,12 +1220,6 @@ packages:
'@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
- '@types/chai@5.2.3':
- resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
-
- '@types/deep-eql@4.0.2':
- resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
-
'@types/doctrine@0.0.9':
resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==}
@@ -1358,6 +1232,9 @@ packages:
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ '@types/mdx@2.0.14':
+ resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==}
+
'@types/node@22.15.3':
resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==}
@@ -1372,6 +1249,9 @@ packages:
'@types/resolve@1.20.6':
resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==}
+ '@types/uuid@9.0.8':
+ resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
+
'@typescript-eslint/eslint-plugin@8.50.0':
resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1431,20 +1311,23 @@ packages:
resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@vitest/expect@3.2.4':
- resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+ '@vitest/expect@2.0.5':
+ resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==}
+
+ '@vitest/pretty-format@2.0.5':
+ resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==}
- '@vitest/pretty-format@3.2.4':
- resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
+ '@vitest/pretty-format@2.1.9':
+ resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
- '@vitest/spy@3.2.4':
- resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+ '@vitest/spy@2.0.5':
+ resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==}
- '@vitest/utils@3.2.4':
- resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+ '@vitest/utils@2.0.5':
+ resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==}
- '@webcontainer/env@1.1.1':
- resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==}
+ '@vitest/utils@2.1.9':
+ resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -1565,10 +1448,6 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- balanced-match@4.0.4:
- resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
- engines: {node: 18 || 20 || >=22}
-
baseline-browser-mapping@2.10.38:
resolution: {integrity: sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==}
engines: {node: '>=6.0.0'}
@@ -1579,29 +1458,28 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
+ better-opn@3.0.2:
+ resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==}
+ engines: {node: '>=12.0.0'}
+
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
- brace-expansion@5.0.6:
- resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
- engines: {node: 18 || 20 || >=22}
-
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ browser-assert@1.2.1:
+ resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==}
+
browserslist@4.28.4:
resolution: {integrity: sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- bundle-name@4.1.0:
- resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
- engines: {node: '>=18'}
-
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -1628,6 +1506,10 @@ packages:
resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
engines: {node: '>=18'}
+ chalk@3.0.0:
+ resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+ engines: {node: '>=8'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -1720,21 +1602,13 @@ packages:
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
- default-browser-id@5.0.1:
- resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
- engines: {node: '>=18'}
-
- default-browser@5.5.0:
- resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
- engines: {node: '>=18'}
-
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
- define-lazy-prop@3.0.0:
- resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
- engines: {node: '>=12'}
+ define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
@@ -1774,6 +1648,9 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
electron-to-chromium@1.5.378:
resolution: {integrity: sha512-VinvOAuuPmdD1guEgGv5f2Qp7/vlfqOrUOMYNnOD4wj3pit8kRsQHzfIf6teyUGWo15Tg5+bOJaRunvyltpVWQ==}
@@ -1786,10 +1663,6 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- empathic@2.0.1:
- resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==}
- engines: {node: '>=14'}
-
environment@1.1.0:
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
engines: {node: '>=18'}
@@ -1826,6 +1699,11 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
+ esbuild-register@3.6.0:
+ resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
+ peerDependencies:
+ esbuild: '>=0.12 <1'
+
esbuild@0.25.12:
resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
engines: {node: '>=18'}
@@ -1953,6 +1831,9 @@ packages:
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
@@ -2017,6 +1898,10 @@ packages:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
form-data@4.0.6:
resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==}
engines: {node: '>= 6'}
@@ -2064,9 +1949,10 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
- glob@13.0.6:
- resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
- engines: {node: 18 || 20 || >=22}
+ glob@10.5.0:
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+ hasBin: true
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
@@ -2148,10 +2034,17 @@ packages:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
+ is-arguments@1.2.0:
+ resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
+ engines: {node: '>= 0.4'}
+
is-array-buffer@3.0.5:
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
engines: {node: '>= 0.4'}
@@ -2188,9 +2081,9 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
- is-docker@3.0.0:
- resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
hasBin: true
is-extglob@2.1.1:
@@ -2217,11 +2110,6 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
- is-inside-container@1.0.0:
- resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
- engines: {node: '>=14.16'}
- hasBin: true
-
is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -2274,9 +2162,9 @@ packages:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
- is-wsl@3.1.1:
- resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
- engines: {node: '>=16'}
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
@@ -2288,6 +2176,9 @@ packages:
resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines: {node: '>= 0.4'}
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -2295,6 +2186,10 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
+ jsdoc-type-pratt-parser@4.8.0:
+ resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==}
+ engines: {node: '>=12.0.0'}
+
jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'}
@@ -2422,6 +2317,9 @@ packages:
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ lodash@4.18.1:
+ resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
+
log-update@6.1.0:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
@@ -2432,9 +2330,8 @@ packages:
loupe@3.2.1:
resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
- lru-cache@11.5.1:
- resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==}
- engines: {node: 20 || >=22}
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@@ -2443,13 +2340,23 @@ packages:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
+ magic-string@0.27.0:
+ resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
+ engines: {node: '>=12'}
+
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+ map-or-similar@1.5.0:
+ resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==}
+
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
+ memoizerific@1.11.3:
+ resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==}
+
merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
@@ -2474,10 +2381,6 @@ packages:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'}
- minimatch@10.2.5:
- resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
- engines: {node: 18 || 20 || >=22}
-
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -2577,9 +2480,9 @@ packages:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
- open@10.2.0:
- resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
- engines: {node: '>=18'}
+ open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
@@ -2589,13 +2492,6 @@ packages:
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
engines: {node: '>= 0.4'}
- oxc-parser@0.127.0:
- resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==}
- engines: {node: ^20.19.0 || >=22.12.0}
-
- oxc-resolver@11.21.3:
- resolution: {integrity: sha512-2Mx3fKQz7+xgrBONjsxOgCGtMHOn38/HxMzW1I5efwXB5a4lRN0Vp40gYUJFBWJslcrvwoofTrqoTnLbwTd3pA==}
-
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
@@ -2604,6 +2500,9 @@ packages:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
@@ -2619,9 +2518,9 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- path-scurry@2.0.2:
- resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
- engines: {node: 18 || 20 || >=22}
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
pathval@2.0.1:
resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
@@ -2642,6 +2541,10 @@ packages:
resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
engines: {node: '>=12'}
+ polished@4.3.1:
+ resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==}
+ engines: {node: '>=10'}
+
possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
@@ -2666,6 +2569,10 @@ packages:
resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
@@ -2685,9 +2592,9 @@ packages:
peerDependencies:
typescript: '>= 4.3.x'
- react-docgen@8.0.3:
- resolution: {integrity: sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w==}
- engines: {node: ^20.9.0 || >=22}
+ react-docgen@7.1.1:
+ resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==}
+ engines: {node: '>=16.14.0'}
react-dom@19.2.0:
resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
@@ -2753,10 +2660,6 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
- run-applescript@7.1.0:
- resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
- engines: {node: '>=18'}
-
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -2849,20 +2752,14 @@ packages:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
- storybook@10.4.6:
- resolution: {integrity: sha512-6wkA6LxfDSSilloITsrFOJfsnw0mDUP2h8Ls+lRt8oRsudtz2RWFhLv+Toiwg6NW7hUpdTDc2hzR7DztJid6+A==}
+ storybook@8.6.14:
+ resolution: {integrity: sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==}
hasBin: true
peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
prettier: ^2 || ^3
- vite-plus: ^0.1.15
peerDependenciesMeta:
- '@types/react':
- optional: true
prettier:
optional: true
- vite-plus:
- optional: true
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
@@ -2872,6 +2769,10 @@ packages:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
string-width@7.2.0:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
@@ -2963,12 +2864,12 @@ packages:
resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'}
- tinyrainbow@2.0.0:
- resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+ tinyrainbow@1.2.0:
+ resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
engines: {node: '>=14.0.0'}
- tinyspy@4.0.4:
- resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
+ tinyspy@3.0.2:
+ resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
engines: {node: '>=14.0.0'}
to-regex-range@5.0.1:
@@ -3038,9 +2939,9 @@ packages:
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
- unplugin@2.3.11:
- resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
- engines: {node: '>=18.12.0'}
+ unplugin@1.16.1:
+ resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
+ engines: {node: '>=14.0.0'}
update-browserslist-db@1.2.3:
resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
@@ -3051,10 +2952,13 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
- use-sync-external-store@1.6.0:
- resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).
+ hasBin: true
vite@8.1.0:
resolution: {integrity: sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==}
@@ -3135,6 +3039,14 @@ packages:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
wrap-ansi@9.0.2:
resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
engines: {node: '>=18'}
@@ -3151,10 +3063,6 @@ packages:
utf-8-validate:
optional: true
- wsl-utils@0.1.0:
- resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
- engines: {node: '>=18'}
-
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
@@ -3277,29 +3185,12 @@ snapshots:
'@babel/helper-string-parser': 7.29.7
'@babel/helper-validator-identifier': 7.29.7
- '@emnapi/core@1.11.0':
- dependencies:
- '@emnapi/wasi-threads': 1.2.2
- tslib: 2.8.1
- optional: true
-
'@emnapi/core@1.11.1':
dependencies:
'@emnapi/wasi-threads': 1.2.2
tslib: 2.8.1
optional: true
- '@emnapi/core@1.9.2':
- dependencies:
- '@emnapi/wasi-threads': 1.2.1
- tslib: 2.8.1
- optional: true
-
- '@emnapi/runtime@1.11.0':
- dependencies:
- tslib: 2.8.1
- optional: true
-
'@emnapi/runtime@1.11.1':
dependencies:
tslib: 2.8.1
@@ -3310,16 +3201,6 @@ snapshots:
tslib: 2.8.1
optional: true
- '@emnapi/runtime@1.9.2':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@emnapi/wasi-threads@1.2.1':
- dependencies:
- tslib: 2.8.1
- optional: true
-
'@emnapi/wasi-threads@1.2.2':
dependencies:
tslib: 2.8.1
@@ -3682,223 +3563,101 @@ snapshots:
optionalDependencies:
'@types/node': 22.15.3
- '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))':
- dependencies:
- glob: 13.0.6
- react-docgen-typescript: 2.4.0(typescript@5.9.2)
- vite: 8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0)
- optionalDependencies:
- typescript: 5.9.2
-
- '@jridgewell/gen-mapping@0.3.13':
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/remapping@2.3.5':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/sourcemap-codec@1.5.5': {}
-
- '@jridgewell/trace-mapping@0.3.31':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
-
- '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)':
- dependencies:
- '@emnapi/core': 1.11.0
- '@emnapi/runtime': 1.11.0
- '@tybys/wasm-util': 0.10.3
- optional: true
-
- '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
- dependencies:
- '@emnapi/core': 1.11.1
- '@emnapi/runtime': 1.11.1
- '@tybys/wasm-util': 0.10.3
- optional: true
-
- '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
- dependencies:
- '@emnapi/core': 1.9.2
- '@emnapi/runtime': 1.9.2
- '@tybys/wasm-util': 0.10.3
- optional: true
-
- '@next/env@16.2.0': {}
-
- '@next/eslint-plugin-next@16.2.0':
- dependencies:
- fast-glob: 3.3.1
-
- '@next/swc-darwin-arm64@16.2.0':
- optional: true
-
- '@next/swc-darwin-x64@16.2.0':
- optional: true
-
- '@next/swc-linux-arm64-gnu@16.2.0':
- optional: true
-
- '@next/swc-linux-arm64-musl@16.2.0':
- optional: true
-
- '@next/swc-linux-x64-gnu@16.2.0':
- optional: true
-
- '@next/swc-linux-x64-musl@16.2.0':
- optional: true
-
- '@next/swc-win32-arm64-msvc@16.2.0':
- optional: true
-
- '@next/swc-win32-x64-msvc@16.2.0':
- optional: true
-
- '@nodelib/fs.scandir@2.1.5':
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
-
- '@nodelib/fs.stat@2.0.5': {}
-
- '@nodelib/fs.walk@1.2.8':
+ '@isaacs/cliui@8.0.2':
dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.19.1
-
- '@oxc-parser/binding-android-arm-eabi@0.127.0':
- optional: true
-
- '@oxc-parser/binding-android-arm64@0.127.0':
- optional: true
-
- '@oxc-parser/binding-darwin-arm64@0.127.0':
- optional: true
-
- '@oxc-parser/binding-darwin-x64@0.127.0':
- optional: true
-
- '@oxc-parser/binding-freebsd-x64@0.127.0':
- optional: true
-
- '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0':
- optional: true
-
- '@oxc-parser/binding-linux-arm-musleabihf@0.127.0':
- optional: true
-
- '@oxc-parser/binding-linux-arm64-gnu@0.127.0':
- optional: true
-
- '@oxc-parser/binding-linux-arm64-musl@0.127.0':
- optional: true
-
- '@oxc-parser/binding-linux-ppc64-gnu@0.127.0':
- optional: true
-
- '@oxc-parser/binding-linux-riscv64-gnu@0.127.0':
- optional: true
-
- '@oxc-parser/binding-linux-riscv64-musl@0.127.0':
- optional: true
-
- '@oxc-parser/binding-linux-s390x-gnu@0.127.0':
- optional: true
-
- '@oxc-parser/binding-linux-x64-gnu@0.127.0':
- optional: true
-
- '@oxc-parser/binding-linux-x64-musl@0.127.0':
- optional: true
-
- '@oxc-parser/binding-openharmony-arm64@0.127.0':
- optional: true
-
- '@oxc-parser/binding-wasm32-wasi@0.127.0':
- dependencies:
- '@emnapi/core': 1.9.2
- '@emnapi/runtime': 1.9.2
- '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- optional: true
-
- '@oxc-parser/binding-win32-arm64-msvc@0.127.0':
- optional: true
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.2.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
- '@oxc-parser/binding-win32-ia32-msvc@0.127.0':
- optional: true
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))':
+ dependencies:
+ glob: 10.5.0
+ magic-string: 0.27.0
+ react-docgen-typescript: 2.4.0(typescript@5.9.2)
+ vite: 8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0)
+ optionalDependencies:
+ typescript: 5.9.2
- '@oxc-parser/binding-win32-x64-msvc@0.127.0':
- optional: true
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
- '@oxc-project/types@0.127.0': {}
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
- '@oxc-project/types@0.137.0': {}
+ '@jridgewell/resolve-uri@3.1.2': {}
- '@oxc-resolver/binding-android-arm-eabi@11.21.3':
- optional: true
+ '@jridgewell/sourcemap-codec@1.5.5': {}
- '@oxc-resolver/binding-android-arm64@11.21.3':
- optional: true
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
- '@oxc-resolver/binding-darwin-arm64@11.21.3':
- optional: true
+ '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)':
+ dependencies:
+ '@types/mdx': 2.0.14
+ '@types/react': 19.2.2
+ react: 19.2.0
- '@oxc-resolver/binding-darwin-x64@11.21.3':
+ '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
+ dependencies:
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@tybys/wasm-util': 0.10.3
optional: true
- '@oxc-resolver/binding-freebsd-x64@11.21.3':
- optional: true
+ '@next/env@16.2.0': {}
- '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3':
- optional: true
+ '@next/eslint-plugin-next@16.2.0':
+ dependencies:
+ fast-glob: 3.3.1
- '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3':
+ '@next/swc-darwin-arm64@16.2.0':
optional: true
- '@oxc-resolver/binding-linux-arm64-gnu@11.21.3':
+ '@next/swc-darwin-x64@16.2.0':
optional: true
- '@oxc-resolver/binding-linux-arm64-musl@11.21.3':
+ '@next/swc-linux-arm64-gnu@16.2.0':
optional: true
- '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3':
+ '@next/swc-linux-arm64-musl@16.2.0':
optional: true
- '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3':
+ '@next/swc-linux-x64-gnu@16.2.0':
optional: true
- '@oxc-resolver/binding-linux-riscv64-musl@11.21.3':
+ '@next/swc-linux-x64-musl@16.2.0':
optional: true
- '@oxc-resolver/binding-linux-s390x-gnu@11.21.3':
+ '@next/swc-win32-arm64-msvc@16.2.0':
optional: true
- '@oxc-resolver/binding-linux-x64-gnu@11.21.3':
+ '@next/swc-win32-x64-msvc@16.2.0':
optional: true
- '@oxc-resolver/binding-linux-x64-musl@11.21.3':
- optional: true
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
- '@oxc-resolver/binding-openharmony-arm64@11.21.3':
- optional: true
+ '@nodelib/fs.stat@2.0.5': {}
- '@oxc-resolver/binding-wasm32-wasi@11.21.3':
+ '@nodelib/fs.walk@1.2.8':
dependencies:
- '@emnapi/core': 1.11.0
- '@emnapi/runtime': 1.11.0
- '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)
- optional: true
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
- '@oxc-resolver/binding-win32-arm64-msvc@11.21.3':
- optional: true
+ '@oxc-project/types@0.137.0': {}
- '@oxc-resolver/binding-win32-x64-msvc@11.21.3':
+ '@pkgjs/parseargs@0.11.0':
optional: true
'@rolldown/binding-android-arm64@1.1.3':
@@ -3956,98 +3715,238 @@ snapshots:
dependencies:
'@types/estree': 1.0.8
estree-walker: 2.0.2
- picomatch: 4.0.3
+ picomatch: 4.0.4
'@rtsao/scc@1.1.0': {}
- '@storybook/addon-a11y@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))':
+ '@storybook/addon-a11y@8.6.14(storybook@8.6.14(prettier@3.7.4))':
dependencies:
+ '@storybook/addon-highlight': 8.6.14(storybook@8.6.14(prettier@3.7.4))
'@storybook/global': 5.0.0
+ '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.7.4))
axe-core: 4.12.1
- storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ storybook: 8.6.14(prettier@3.7.4)
+
+ '@storybook/addon-actions@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@types/uuid': 9.0.8
+ dequal: 2.0.3
+ polished: 4.3.1
+ storybook: 8.6.14(prettier@3.7.4)
+ uuid: 9.0.1
+
+ '@storybook/addon-backgrounds@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ memoizerific: 1.11.3
+ storybook: 8.6.14(prettier@3.7.4)
+ ts-dedent: 2.3.0
+
+ '@storybook/addon-controls@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ dequal: 2.0.3
+ storybook: 8.6.14(prettier@3.7.4)
+ ts-dedent: 2.3.0
+
+ '@storybook/addon-docs@8.6.14(@types/react@19.2.2)(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@storybook/blocks': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ storybook: 8.6.14(prettier@3.7.4)
+ ts-dedent: 2.3.0
+ transitivePeerDependencies:
+ - '@types/react'
+
+ '@storybook/addon-essentials@8.6.14(@types/react@19.2.2)(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/addon-actions': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-backgrounds': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-controls': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-docs': 8.6.14(@types/react@19.2.2)(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-highlight': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-measure': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-outline': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-toolbars': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/addon-viewport': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ storybook: 8.6.14(prettier@3.7.4)
+ ts-dedent: 2.3.0
+ transitivePeerDependencies:
+ - '@types/react'
+
+ '@storybook/addon-highlight@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ storybook: 8.6.14(prettier@3.7.4)
+
+ '@storybook/addon-interactions@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@storybook/instrumenter': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ polished: 4.3.1
+ storybook: 8.6.14(prettier@3.7.4)
+ ts-dedent: 2.3.0
- '@storybook/addon-links@10.4.6(@types/react@19.2.2)(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))':
+ '@storybook/addon-links@8.6.14(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ storybook: 8.6.14(prettier@3.7.4)
+ ts-dedent: 2.3.0
optionalDependencies:
- '@types/react': 19.2.2
react: 19.2.0
- '@storybook/builder-vite@10.4.6(esbuild@0.25.12)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))':
+ '@storybook/addon-measure@8.6.14(storybook@8.6.14(prettier@3.7.4))':
dependencies:
- '@storybook/csf-plugin': 10.4.6(esbuild@0.25.12)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))
- storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@storybook/global': 5.0.0
+ storybook: 8.6.14(prettier@3.7.4)
+ tiny-invariant: 1.3.3
+
+ '@storybook/addon-outline@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ storybook: 8.6.14(prettier@3.7.4)
ts-dedent: 2.3.0
- vite: 8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0)
- transitivePeerDependencies:
- - esbuild
- - rollup
- - webpack
- '@storybook/csf-plugin@10.4.6(esbuild@0.25.12)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))':
+ '@storybook/addon-toolbars@8.6.14(storybook@8.6.14(prettier@3.7.4))':
dependencies:
- storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- unplugin: 2.3.11
+ storybook: 8.6.14(prettier@3.7.4)
+
+ '@storybook/addon-viewport@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ memoizerific: 1.11.3
+ storybook: 8.6.14(prettier@3.7.4)
+
+ '@storybook/blocks@8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ storybook: 8.6.14(prettier@3.7.4)
+ ts-dedent: 2.3.0
optionalDependencies:
- esbuild: 0.25.12
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+
+ '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.7.4))(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))':
+ dependencies:
+ '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ browser-assert: 1.2.1
+ storybook: 8.6.14(prettier@3.7.4)
+ ts-dedent: 2.3.0
vite: 8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0)
+ '@storybook/components@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ storybook: 8.6.14(prettier@3.7.4)
+
+ '@storybook/core@8.6.14(prettier@3.7.4)(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ better-opn: 3.0.2
+ browser-assert: 1.2.1
+ esbuild: 0.25.12
+ esbuild-register: 3.6.0(esbuild@0.25.12)
+ jsdoc-type-pratt-parser: 4.8.0
+ process: 0.11.10
+ recast: 0.23.11
+ semver: 7.7.3
+ util: 0.12.5
+ ws: 8.21.0
+ optionalDependencies:
+ prettier: 3.7.4
+ transitivePeerDependencies:
+ - bufferutil
+ - storybook
+ - supports-color
+ - utf-8-validate
+
+ '@storybook/csf-plugin@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ storybook: 8.6.14(prettier@3.7.4)
+ unplugin: 1.16.1
+
'@storybook/global@5.0.0': {}
- '@storybook/icons@2.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ '@storybook/icons@1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- '@storybook/react-dom-shim@10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))':
+ '@storybook/instrumenter@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@vitest/utils': 2.1.9
+ storybook: 8.6.14(prettier@3.7.4)
+
+ '@storybook/manager-api@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ storybook: 8.6.14(prettier@3.7.4)
+
+ '@storybook/preview-api@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ storybook: 8.6.14(prettier@3.7.4)
+
+ '@storybook/react-dom-shim@8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))':
dependencies:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- optionalDependencies:
- '@types/react': 19.2.2
- '@types/react-dom': 19.2.2(@types/react@19.2.2)
+ storybook: 8.6.14(prettier@3.7.4)
- '@storybook/react-vite@10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(esbuild@0.25.12)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))':
+ '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))':
dependencies:
- '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))
+ '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.9.2)(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))
'@rollup/pluginutils': 5.4.0
- '@storybook/builder-vite': 10.4.6(esbuild@0.25.12)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))
- '@storybook/react': 10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.2)
- empathic: 2.0.1
+ '@storybook/builder-vite': 8.6.14(storybook@8.6.14(prettier@3.7.4))(vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0))
+ '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))(typescript@5.9.2)
+ find-up: 5.0.0
magic-string: 0.30.21
react: 19.2.0
- react-docgen: 8.0.3
+ react-docgen: 7.1.1
react-dom: 19.2.0(react@19.2.0)
resolve: 1.22.12
- storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ storybook: 8.6.14(prettier@3.7.4)
tsconfig-paths: 4.2.0
vite: 8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0)
+ optionalDependencies:
+ '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.7.4))
transitivePeerDependencies:
- - '@types/react'
- - '@types/react-dom'
- - esbuild
- rollup
- supports-color
- typescript
- - webpack
- '@storybook/react@10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.2)':
+ '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))(typescript@5.9.2)':
dependencies:
+ '@storybook/components': 8.6.14(storybook@8.6.14(prettier@3.7.4))
'@storybook/global': 5.0.0
- '@storybook/react-dom-shim': 10.4.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))
+ '@storybook/manager-api': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/preview-api': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@8.6.14(prettier@3.7.4))
+ '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.7.4))
react: 19.2.0
- react-docgen: 8.0.3
- react-docgen-typescript: 2.4.0(typescript@5.9.2)
react-dom: 19.2.0(react@19.2.0)
- storybook: 10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ storybook: 8.6.14(prettier@3.7.4)
optionalDependencies:
- '@types/react': 19.2.2
- '@types/react-dom': 19.2.2(@types/react@19.2.2)
+ '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.7.4))
typescript: 5.9.2
- transitivePeerDependencies:
- - supports-color
+
+ '@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@storybook/instrumenter': 8.6.14(storybook@8.6.14(prettier@3.7.4))
+ '@testing-library/dom': 10.4.0
+ '@testing-library/jest-dom': 6.5.0
+ '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0)
+ '@vitest/expect': 2.0.5
+ '@vitest/spy': 2.0.5
+ storybook: 8.6.14(prettier@3.7.4)
+
+ '@storybook/theming@8.6.14(storybook@8.6.14(prettier@3.7.4))':
+ dependencies:
+ storybook: 8.6.14(prettier@3.7.4)
'@swc/helpers@0.5.15':
dependencies:
@@ -4079,16 +3978,17 @@ snapshots:
lz-string: 1.5.0
pretty-format: 27.5.1
- '@testing-library/jest-dom@6.9.1':
+ '@testing-library/jest-dom@6.5.0':
dependencies:
'@adobe/css-tools': 4.5.0
aria-query: 5.3.2
+ chalk: 3.0.0
css.escape: 1.5.1
dom-accessibility-api: 0.6.3
- picocolors: 1.1.1
+ lodash: 4.18.1
redent: 3.0.0
- '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)':
+ '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)':
dependencies:
'@testing-library/dom': 10.4.0
@@ -4145,13 +4045,6 @@ snapshots:
dependencies:
'@babel/types': 7.29.7
- '@types/chai@5.2.3':
- dependencies:
- '@types/deep-eql': 4.0.2
- assertion-error: 2.0.1
-
- '@types/deep-eql@4.0.2': {}
-
'@types/doctrine@0.0.9': {}
'@types/estree@1.0.8': {}
@@ -4160,6 +4053,8 @@ snapshots:
'@types/json5@0.0.29': {}
+ '@types/mdx@2.0.14': {}
+
'@types/node@22.15.3':
dependencies:
undici-types: 6.21.0
@@ -4174,6 +4069,8 @@ snapshots:
'@types/resolve@1.20.6': {}
+ '@types/uuid@9.0.8': {}
+
'@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1)(typescript@5.9.2))(eslint@9.39.1)(typescript@5.9.2)':
dependencies:
'@eslint-community/regexpp': 4.12.2
@@ -4265,29 +4162,37 @@ snapshots:
'@typescript-eslint/types': 8.50.0
eslint-visitor-keys: 4.2.1
- '@vitest/expect@3.2.4':
+ '@vitest/expect@2.0.5':
dependencies:
- '@types/chai': 5.2.3
- '@vitest/spy': 3.2.4
- '@vitest/utils': 3.2.4
+ '@vitest/spy': 2.0.5
+ '@vitest/utils': 2.0.5
chai: 5.3.3
- tinyrainbow: 2.0.0
+ tinyrainbow: 1.2.0
- '@vitest/pretty-format@3.2.4':
+ '@vitest/pretty-format@2.0.5':
dependencies:
- tinyrainbow: 2.0.0
+ tinyrainbow: 1.2.0
- '@vitest/spy@3.2.4':
+ '@vitest/pretty-format@2.1.9':
dependencies:
- tinyspy: 4.0.4
+ tinyrainbow: 1.2.0
- '@vitest/utils@3.2.4':
+ '@vitest/spy@2.0.5':
dependencies:
- '@vitest/pretty-format': 3.2.4
+ tinyspy: 3.0.2
+
+ '@vitest/utils@2.0.5':
+ dependencies:
+ '@vitest/pretty-format': 2.0.5
+ estree-walker: 3.0.3
loupe: 3.2.1
- tinyrainbow: 2.0.0
+ tinyrainbow: 1.2.0
- '@webcontainer/env@1.1.1': {}
+ '@vitest/utils@2.1.9':
+ dependencies:
+ '@vitest/pretty-format': 2.1.9
+ loupe: 3.2.1
+ tinyrainbow: 1.2.0
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
@@ -4431,12 +4336,14 @@ snapshots:
balanced-match@1.0.2: {}
- balanced-match@4.0.4: {}
-
baseline-browser-mapping@2.10.38: {}
baseline-browser-mapping@2.10.8: {}
+ better-opn@3.0.2:
+ dependencies:
+ open: 8.4.2
+
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
@@ -4446,14 +4353,12 @@ snapshots:
dependencies:
balanced-match: 1.0.2
- brace-expansion@5.0.6:
- dependencies:
- balanced-match: 4.0.4
-
braces@3.0.3:
dependencies:
fill-range: 7.1.1
+ browser-assert@1.2.1: {}
+
browserslist@4.28.4:
dependencies:
baseline-browser-mapping: 2.10.38
@@ -4462,10 +4367,6 @@ snapshots:
node-releases: 2.0.50
update-browserslist-db: 1.2.3(browserslist@4.28.4)
- bundle-name@4.1.0:
- dependencies:
- run-applescript: 7.1.0
-
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -4497,6 +4398,11 @@ snapshots:
loupe: 3.2.1
pathval: 2.0.1
+ chalk@3.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -4575,20 +4481,13 @@ snapshots:
deep-is@0.1.4: {}
- default-browser-id@5.0.1: {}
-
- default-browser@5.5.0:
- dependencies:
- bundle-name: 4.1.0
- default-browser-id: 5.0.1
-
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.1
es-errors: 1.3.0
gopd: 1.2.0
- define-lazy-prop@3.0.0: {}
+ define-lazy-prop@2.0.0: {}
define-properties@1.2.1:
dependencies:
@@ -4622,6 +4521,8 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
+ eastasianwidth@0.2.0: {}
+
electron-to-chromium@1.5.378: {}
emoji-regex@10.6.0: {}
@@ -4630,8 +4531,6 @@ snapshots:
emoji-regex@9.2.2: {}
- empathic@2.0.1: {}
-
environment@1.1.0: {}
es-abstract@1.24.0:
@@ -4735,6 +4634,13 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
+ esbuild-register@3.6.0(esbuild@0.25.12):
+ dependencies:
+ debug: 4.4.3
+ esbuild: 0.25.12
+ transitivePeerDependencies:
+ - supports-color
+
esbuild@0.25.12:
optionalDependencies:
'@esbuild/aix-ppc64': 0.25.12
@@ -4940,6 +4846,10 @@ snapshots:
estree-walker@2.0.2: {}
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
esutils@2.0.3: {}
eventemitter3@5.0.4: {}
@@ -4996,6 +4906,11 @@ snapshots:
dependencies:
is-callable: 1.2.7
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
form-data@4.0.6:
dependencies:
asynckit: 0.4.0
@@ -5056,11 +4971,14 @@ snapshots:
dependencies:
is-glob: 4.0.3
- glob@13.0.6:
+ glob@10.5.0:
dependencies:
- minimatch: 10.2.5
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
minipass: 7.1.3
- path-scurry: 2.0.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
globals@14.0.0: {}
@@ -5125,12 +5043,19 @@ snapshots:
indent-string@4.0.0: {}
+ inherits@2.0.4: {}
+
internal-slot@1.1.0:
dependencies:
es-errors: 1.3.0
hasown: 2.0.4
side-channel: 1.1.0
+ is-arguments@1.2.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
is-array-buffer@3.0.5:
dependencies:
call-bind: 1.0.8
@@ -5175,7 +5100,7 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- is-docker@3.0.0: {}
+ is-docker@2.2.1: {}
is-extglob@2.1.1: {}
@@ -5200,10 +5125,6 @@ snapshots:
dependencies:
is-extglob: 2.1.1
- is-inside-container@1.0.0:
- dependencies:
- is-docker: 3.0.0
-
is-map@2.0.3: {}
is-negative-zero@2.0.3: {}
@@ -5254,9 +5175,9 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
- is-wsl@3.1.1:
+ is-wsl@2.2.0:
dependencies:
- is-inside-container: 1.0.0
+ is-docker: 2.2.1
isarray@2.0.5: {}
@@ -5271,12 +5192,20 @@ snapshots:
has-symbols: 1.1.0
set-function-name: 2.0.2
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
js-tokens@4.0.0: {}
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
+ jsdoc-type-pratt-parser@4.8.0: {}
+
jsesc@3.1.0: {}
json-buffer@3.0.1: {}
@@ -5385,6 +5314,8 @@ snapshots:
lodash.merge@4.6.2: {}
+ lodash@4.18.1: {}
+
log-update@6.1.0:
dependencies:
ansi-escapes: 7.3.0
@@ -5399,7 +5330,7 @@ snapshots:
loupe@3.2.1: {}
- lru-cache@11.5.1: {}
+ lru-cache@10.4.3: {}
lru-cache@5.1.1:
dependencies:
@@ -5407,12 +5338,22 @@ snapshots:
lz-string@1.5.0: {}
+ magic-string@0.27.0:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
+ map-or-similar@1.5.0: {}
+
math-intrinsics@1.1.0: {}
+ memoizerific@1.11.3:
+ dependencies:
+ map-or-similar: 1.5.0
+
merge2@1.4.1: {}
micromatch@4.0.8:
@@ -5430,10 +5371,6 @@ snapshots:
min-indent@1.0.1: {}
- minimatch@10.2.5:
- dependencies:
- brace-expansion: 5.0.6
-
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.12
@@ -5535,12 +5472,11 @@ snapshots:
dependencies:
mimic-function: 5.0.1
- open@10.2.0:
+ open@8.4.2:
dependencies:
- default-browser: 5.5.0
- define-lazy-prop: 3.0.0
- is-inside-container: 1.0.0
- wsl-utils: 0.1.0
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
optionator@0.9.4:
dependencies:
@@ -5557,53 +5493,6 @@ snapshots:
object-keys: 1.1.1
safe-push-apply: 1.0.0
- oxc-parser@0.127.0:
- dependencies:
- '@oxc-project/types': 0.127.0
- optionalDependencies:
- '@oxc-parser/binding-android-arm-eabi': 0.127.0
- '@oxc-parser/binding-android-arm64': 0.127.0
- '@oxc-parser/binding-darwin-arm64': 0.127.0
- '@oxc-parser/binding-darwin-x64': 0.127.0
- '@oxc-parser/binding-freebsd-x64': 0.127.0
- '@oxc-parser/binding-linux-arm-gnueabihf': 0.127.0
- '@oxc-parser/binding-linux-arm-musleabihf': 0.127.0
- '@oxc-parser/binding-linux-arm64-gnu': 0.127.0
- '@oxc-parser/binding-linux-arm64-musl': 0.127.0
- '@oxc-parser/binding-linux-ppc64-gnu': 0.127.0
- '@oxc-parser/binding-linux-riscv64-gnu': 0.127.0
- '@oxc-parser/binding-linux-riscv64-musl': 0.127.0
- '@oxc-parser/binding-linux-s390x-gnu': 0.127.0
- '@oxc-parser/binding-linux-x64-gnu': 0.127.0
- '@oxc-parser/binding-linux-x64-musl': 0.127.0
- '@oxc-parser/binding-openharmony-arm64': 0.127.0
- '@oxc-parser/binding-wasm32-wasi': 0.127.0
- '@oxc-parser/binding-win32-arm64-msvc': 0.127.0
- '@oxc-parser/binding-win32-ia32-msvc': 0.127.0
- '@oxc-parser/binding-win32-x64-msvc': 0.127.0
-
- oxc-resolver@11.21.3:
- optionalDependencies:
- '@oxc-resolver/binding-android-arm-eabi': 11.21.3
- '@oxc-resolver/binding-android-arm64': 11.21.3
- '@oxc-resolver/binding-darwin-arm64': 11.21.3
- '@oxc-resolver/binding-darwin-x64': 11.21.3
- '@oxc-resolver/binding-freebsd-x64': 11.21.3
- '@oxc-resolver/binding-linux-arm-gnueabihf': 11.21.3
- '@oxc-resolver/binding-linux-arm-musleabihf': 11.21.3
- '@oxc-resolver/binding-linux-arm64-gnu': 11.21.3
- '@oxc-resolver/binding-linux-arm64-musl': 11.21.3
- '@oxc-resolver/binding-linux-ppc64-gnu': 11.21.3
- '@oxc-resolver/binding-linux-riscv64-gnu': 11.21.3
- '@oxc-resolver/binding-linux-riscv64-musl': 11.21.3
- '@oxc-resolver/binding-linux-s390x-gnu': 11.21.3
- '@oxc-resolver/binding-linux-x64-gnu': 11.21.3
- '@oxc-resolver/binding-linux-x64-musl': 11.21.3
- '@oxc-resolver/binding-openharmony-arm64': 11.21.3
- '@oxc-resolver/binding-wasm32-wasi': 11.21.3
- '@oxc-resolver/binding-win32-arm64-msvc': 11.21.3
- '@oxc-resolver/binding-win32-x64-msvc': 11.21.3
-
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
@@ -5612,6 +5501,8 @@ snapshots:
dependencies:
p-limit: 3.1.0
+ package-json-from-dist@1.0.1: {}
+
parent-module@1.0.1:
dependencies:
callsites: 3.1.0
@@ -5622,9 +5513,9 @@ snapshots:
path-parse@1.0.7: {}
- path-scurry@2.0.2:
+ path-scurry@1.11.1:
dependencies:
- lru-cache: 11.5.1
+ lru-cache: 10.4.3
minipass: 7.1.3
pathval@2.0.1: {}
@@ -5637,6 +5528,10 @@ snapshots:
picomatch@4.0.4: {}
+ polished@4.3.1:
+ dependencies:
+ '@babel/runtime': 7.29.7
+
possible-typed-array-names@1.1.0: {}
postcss@8.4.31:
@@ -5661,6 +5556,8 @@ snapshots:
ansi-styles: 5.2.0
react-is: 17.0.2
+ process@0.11.10: {}
+
prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
@@ -5677,7 +5574,7 @@ snapshots:
dependencies:
typescript: 5.9.2
- react-docgen@8.0.3:
+ react-docgen@7.1.1:
dependencies:
'@babel/core': 7.29.7
'@babel/traverse': 7.29.7
@@ -5741,7 +5638,7 @@ snapshots:
resolve@1.22.12:
dependencies:
es-errors: 1.3.0
- is-core-module: 2.16.1
+ is-core-module: 2.16.2
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
@@ -5790,8 +5687,6 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc': 1.1.3
'@rolldown/binding-win32-x64-msvc': 1.1.3
- run-applescript@7.1.0: {}
-
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -5932,31 +5827,14 @@ snapshots:
es-errors: 1.3.0
internal-slot: 1.1.0
- storybook@10.4.6(@testing-library/dom@10.4.0)(@types/react@19.2.2)(prettier@3.7.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
+ storybook@8.6.14(prettier@3.7.4):
dependencies:
- '@storybook/global': 5.0.0
- '@storybook/icons': 2.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- '@testing-library/jest-dom': 6.9.1
- '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0)
- '@vitest/expect': 3.2.4
- '@vitest/spy': 3.2.4
- '@webcontainer/env': 1.1.1
- esbuild: 0.25.12
- open: 10.2.0
- oxc-parser: 0.127.0
- oxc-resolver: 11.21.3
- recast: 0.23.11
- semver: 7.7.3
- use-sync-external-store: 1.6.0(react@19.2.0)
- ws: 8.21.0
+ '@storybook/core': 8.6.14(prettier@3.7.4)(storybook@8.6.14(prettier@3.7.4))
optionalDependencies:
- '@types/react': 19.2.2
prettier: 3.7.4
transitivePeerDependencies:
- - '@testing-library/dom'
- bufferutil
- - react
- - react-dom
+ - supports-color
- utf-8-validate
string-argv@0.3.2: {}
@@ -5967,6 +5845,12 @@ snapshots:
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.2.0
+
string-width@7.2.0:
dependencies:
emoji-regex: 10.6.0
@@ -6071,9 +5955,9 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.4)
picomatch: 4.0.4
- tinyrainbow@2.0.0: {}
+ tinyrainbow@1.2.0: {}
- tinyspy@4.0.4: {}
+ tinyspy@3.0.2: {}
to-regex-range@5.0.1:
dependencies:
@@ -6168,11 +6052,9 @@ snapshots:
undici-types@6.21.0: {}
- unplugin@2.3.11:
+ unplugin@1.16.1:
dependencies:
- '@jridgewell/remapping': 2.3.5
acorn: 8.15.0
- picomatch: 4.0.3
webpack-virtual-modules: 0.6.2
update-browserslist-db@1.2.3(browserslist@4.28.4):
@@ -6185,9 +6067,15 @@ snapshots:
dependencies:
punycode: 2.3.1
- use-sync-external-store@1.6.0(react@19.2.0):
+ util@0.12.5:
dependencies:
- react: 19.2.0
+ inherits: 2.0.4
+ is-arguments: 1.2.0
+ is-generator-function: 1.1.0
+ is-typed-array: 1.1.15
+ which-typed-array: 1.1.19
+
+ uuid@9.0.1: {}
vite@8.1.0(@types/node@22.15.3)(esbuild@0.25.12)(yaml@2.9.0):
dependencies:
@@ -6263,6 +6151,18 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 5.1.2
+ strip-ansi: 7.2.0
+
wrap-ansi@9.0.2:
dependencies:
ansi-styles: 6.2.3
@@ -6271,10 +6171,6 @@ snapshots:
ws@8.21.0: {}
- wsl-utils@0.1.0:
- dependencies:
- is-wsl: 3.1.1
-
yallist@3.1.1: {}
yaml@2.9.0:
From 143441ff59396500e3952273dc23edc62bd34d80 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sat, 27 Jun 2026 10:35:09 +0900
Subject: [PATCH 146/789] =?UTF-8?q?docs(ui):=20Storybook=20=EC=9E=91?=
=?UTF-8?q?=EC=84=B1=20=EA=B0=80=EC=9D=B4=EB=93=9C=20=EC=B6=94=EA=B0=80=20?=
=?UTF-8?q?(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/guides/StorybookGuide.mdx | 74 +++++++++++++++++++
1 file changed, 74 insertions(+)
create mode 100644 packages/timo-design-system/src/guides/StorybookGuide.mdx
diff --git a/packages/timo-design-system/src/guides/StorybookGuide.mdx b/packages/timo-design-system/src/guides/StorybookGuide.mdx
new file mode 100644
index 00000000..6d8b37ec
--- /dev/null
+++ b/packages/timo-design-system/src/guides/StorybookGuide.mdx
@@ -0,0 +1,74 @@
+import { Meta } from "@storybook/addon-docs/blocks";
+
+
+
+# Storybook Guide
+
+Timo Design System의 공통 UI 컴포넌트는 Storybook을 통해 상태별 예시와 사용 방법을 문서화합니다.
+
+## Story 위치
+
+컴포넌트 story는 컴포넌트와 같은 폴더에 작성합니다.
+
+```txt
+components/
+ Button/
+ Button.tsx
+ Button.stories.tsx
+ index.ts
+```
+
+## 파일 네이밍
+
+Story 파일은 `ComponentName.stories.tsx` 형식을 사용합니다.
+
+```txt
+Button.stories.tsx
+Input.stories.tsx
+```
+
+## 기본 Story 작성 예시
+
+```tsx
+import type { Meta, StoryObj } from "@storybook/react-vite";
+import { Button } from "./Button";
+
+const meta: Meta = {
+ title: "Components/Button",
+ component: Button,
+ tags: ["autodocs"],
+};
+
+export default meta;
+
+type Story = StoryObj;
+
+export const Default: Story = {
+ args: {
+ children: "Button",
+ },
+};
+```
+
+## Autodocs
+
+컴포넌트 문서를 자동 생성하려면 story meta에 `tags: ["autodocs"]`를 추가합니다.
+
+```tsx
+const meta: Meta = {
+ title: "Components/Button",
+ component: Button,
+ tags: ["autodocs"],
+};
+```
+
+## Accessibility
+
+접근성 검사는 Storybook 하단 패널의 `Accessibility` 탭에서 확인합니다.
+
+## Storybook 화면 구성
+
+- Sidebar: 등록된 story 목록을 확인합니다.
+- Canvas: 선택한 story가 렌더링되는 영역입니다.
+- Toolbar: viewport, zoom 등을 조정합니다.
+- Addons panel: Controls, Actions, Accessibility 결과를 확인합니다.
From ad16210c7a819b929b4394f6186a149d40f8f54e Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sat, 27 Jun 2026 10:54:49 +0900
Subject: [PATCH 147/789] =?UTF-8?q?chore(ui):=20Storybook=20preview=20?=
=?UTF-8?q?=EC=98=B5=EC=85=98=20=EB=B3=B4=EA=B0=95=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../timo-design-system/.storybook/preview.ts | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/packages/timo-design-system/.storybook/preview.ts b/packages/timo-design-system/.storybook/preview.ts
index 71ecede8..c30296fe 100644
--- a/packages/timo-design-system/.storybook/preview.ts
+++ b/packages/timo-design-system/.storybook/preview.ts
@@ -6,6 +6,7 @@ const preview: Preview = {
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
+ text: /(title|label|name|placeholder|text)$/i,
},
},
viewport: {
@@ -23,6 +24,22 @@ const preview: Preview = {
defaultViewport: "desktop",
},
layout: "centered",
+ backgrounds: {
+ default: "white",
+ values: [
+ { name: "white", value: "#ffffff" },
+ { name: "gray", value: "#f5f5f5" },
+ { name: "dark", value: "#1f1f1f" },
+ ],
+ },
+ options: {
+ storySort: {
+ order: ["Guides", "Introduction", "Components", "Icons"],
+ },
+ },
+ actions: {
+ argTypesRegex: "^on[A-Z].*",
+ },
},
};
From 8e774214f4d2f7afd55e05aa9d437745cc43d102 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sat, 27 Jun 2026 11:57:11 +0900
Subject: [PATCH 148/789] =?UTF-8?q?ci(ui):=20Chromatic=20=EB=B0=B0?=
=?UTF-8?q?=ED=8F=AC=20=EC=9B=8C=ED=81=AC=ED=94=8C=EB=A1=9C=EC=9A=B0=20?=
=?UTF-8?q?=EC=B6=94=EA=B0=80=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/chromatic.yml | 36 ++++++++++++++++++++++++
package.json | 1 +
packages/timo-design-system/package.json | 4 ++-
pnpm-lock.yaml | 24 ++++++++++++++++
4 files changed, 64 insertions(+), 1 deletion(-)
create mode 100644 .github/workflows/chromatic.yml
diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml
new file mode 100644
index 00000000..767c135f
--- /dev/null
+++ b/.github/workflows/chromatic.yml
@@ -0,0 +1,36 @@
+name: Chromatic
+
+on:
+ pull_request:
+ branches:
+ - develop
+ paths:
+ - "packages/timo-design-system/**"
+ - ".github/workflows/chromatic.yml"
+ - "pnpm-lock.yaml"
+jobs:
+ chromatic:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Setup pnpm
+ uses: pnpm/action-setup@v4
+
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: 22
+ cache: pnpm
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
+ - name: Publish to Chromatic
+ run: pnpm chromatic
+ env:
+ CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
\ No newline at end of file
diff --git a/package.json b/package.json
index 7b471975..03f0d535 100644
--- a/package.json
+++ b/package.json
@@ -8,6 +8,7 @@
"dev:web": "turbo run dev --filter=timo-web",
"storybook": "pnpm --filter @repo/timo-design-system storybook",
"build-storybook": "pnpm --filter @repo/timo-design-system build-storybook",
+ "chromatic": "pnpm --filter @repo/timo-design-system chromatic",
"lint": "turbo run lint",
"lint:web": "turbo run lint --filter=timo-web",
"format": "prettier --write \"**/*.{ts,tsx,md}\"",
diff --git a/packages/timo-design-system/package.json b/packages/timo-design-system/package.json
index 3223ceaf..a3678a45 100644
--- a/packages/timo-design-system/package.json
+++ b/packages/timo-design-system/package.json
@@ -10,7 +10,8 @@
"generate:component": "turbo gen react-component",
"check-types": "tsc --noEmit",
"storybook": "storybook dev -p 6006",
- "build-storybook": "storybook build"
+ "build-storybook": "storybook build",
+ "chromatic": "chromatic --project-token=$CHROMATIC_PROJECT_TOKEN"
},
"devDependencies": {
"@repo/eslint-config": "workspace:*",
@@ -25,6 +26,7 @@
"@types/node": "^22.15.3",
"@types/react": "19.2.2",
"@types/react-dom": "19.2.2",
+ "chromatic": "^17.7.2",
"eslint": "^9.39.1",
"storybook": "^8.6.14",
"typescript": "5.9.2"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2ceb3230..3b62825d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -160,6 +160,9 @@ importers:
'@types/react-dom':
specifier: 19.2.2
version: 19.2.2(@types/react@19.2.2)
+ chromatic:
+ specifier: ^17.7.2
+ version: 17.7.2
eslint:
specifier: ^9.39.1
version: 9.39.1
@@ -1521,6 +1524,22 @@ packages:
resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==}
engines: {node: '>= 16'}
+ chromatic@17.7.2:
+ resolution: {integrity: sha512-/y6LcCiOXG3ecWNLGhXgir29wKhkrmK1RIVAB/5gdDsakWNG/u7mPZFuUlMFkxvA8bMJ0cDHgt1J7K1MWTg3+A==}
+ engines: {node: '>=22.0.0'}
+ hasBin: true
+ peerDependencies:
+ '@chromatic-com/cypress': ^0.*.* || ^1.0.0
+ '@chromatic-com/playwright': ^0.*.* || ^1.0.0
+ '@chromatic-com/vitest': ^0.*.* || ^1.0.0
+ peerDependenciesMeta:
+ '@chromatic-com/cypress':
+ optional: true
+ '@chromatic-com/playwright':
+ optional: true
+ '@chromatic-com/vitest':
+ optional: true
+
cli-cursor@5.0.0:
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines: {node: '>=18'}
@@ -2687,6 +2706,7 @@ packages:
semver@7.7.3:
resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
engines: {node: '>=10'}
+ hasBin: true
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
@@ -4412,6 +4432,10 @@ snapshots:
check-error@2.1.3: {}
+ chromatic@17.7.2:
+ dependencies:
+ semver: 7.7.3
+
cli-cursor@5.0.0:
dependencies:
restore-cursor: 5.1.0
From f83dfadd2ea4c24760777c164b23ed6e69ab44da Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sat, 27 Jun 2026 12:37:42 +0900
Subject: [PATCH 149/789] =?UTF-8?q?feat(ui):=20Storybook=20=EC=98=88?=
=?UTF-8?q?=EC=8B=9C=20Button=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20?=
=?UTF-8?q?=EC=B6=94=EA=B0=80=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/Introduction.stories.tsx | 18 ------------
.../src/components/Button/Button.stories.tsx | 29 +++++++++++++++++++
.../src/components/Button/Button.tsx | 7 +++++
.../src/components/Button/index.ts | 1 +
4 files changed, 37 insertions(+), 18 deletions(-)
delete mode 100644 packages/timo-design-system/src/Introduction.stories.tsx
create mode 100644 packages/timo-design-system/src/components/Button/Button.stories.tsx
create mode 100644 packages/timo-design-system/src/components/Button/Button.tsx
create mode 100644 packages/timo-design-system/src/components/Button/index.ts
diff --git a/packages/timo-design-system/src/Introduction.stories.tsx b/packages/timo-design-system/src/Introduction.stories.tsx
deleted file mode 100644
index 0a24043e..00000000
--- a/packages/timo-design-system/src/Introduction.stories.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import type { Meta, StoryObj } from "@storybook/react-vite";
-
-const Introduction = () => (
-
-
Timo Design System
-
디자인 시스템 확정 후 공통 컴포넌트와 아이콘을 추가합니다.
-
-);
-
-const meta: Meta = {
- title: "Introduction",
- component: Introduction,
- tags: ["autodocs"],
-};
-
-export default meta;
-
-export const Default: StoryObj = {};
diff --git a/packages/timo-design-system/src/components/Button/Button.stories.tsx b/packages/timo-design-system/src/components/Button/Button.stories.tsx
new file mode 100644
index 00000000..47a2c20f
--- /dev/null
+++ b/packages/timo-design-system/src/components/Button/Button.stories.tsx
@@ -0,0 +1,29 @@
+import { Button } from "./Button";
+
+import type { Meta, StoryObj } from "@storybook/react-vite";
+
+
+const meta = {
+ title: "Components/Button",
+ component: Button,
+ tags: ["autodocs"],
+ args: {
+ children: "Button",
+ },
+ argTypes: {
+ onClick: { action: "clicked" },
+ },
+} satisfies Meta;
+
+export default meta;
+
+type Story = StoryObj;
+
+export const Default: Story = {};
+
+export const Disabled: Story = {
+ args: {
+ disabled: true,
+ children: "Disabled",
+ },
+};
diff --git a/packages/timo-design-system/src/components/Button/Button.tsx b/packages/timo-design-system/src/components/Button/Button.tsx
new file mode 100644
index 00000000..c0ca842d
--- /dev/null
+++ b/packages/timo-design-system/src/components/Button/Button.tsx
@@ -0,0 +1,7 @@
+import type { ButtonHTMLAttributes } from "react";
+
+type ButtonProps = ButtonHTMLAttributes;
+
+export const Button = ({ children, ...props }: ButtonProps) => {
+ return {children};
+};
diff --git a/packages/timo-design-system/src/components/Button/index.ts b/packages/timo-design-system/src/components/Button/index.ts
new file mode 100644
index 00000000..0064dee8
--- /dev/null
+++ b/packages/timo-design-system/src/components/Button/index.ts
@@ -0,0 +1 @@
+export { Button } from "./Button";
From fcdaf03dbaadbdb2c982fb58af72bbf2a8c1cd7a Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sat, 27 Jun 2026 12:50:00 +0900
Subject: [PATCH 150/789] =?UTF-8?q?chore(ui):=20Storybook=20=EB=B0=8F=20Ch?=
=?UTF-8?q?romatic=20=EC=84=A4=EC=A0=95=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98?=
=?UTF-8?q?=EC=98=81=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/chromatic.yml | 4 ++++
packages/timo-design-system/.storybook/preview.ts | 3 +--
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml
index 767c135f..62e52104 100644
--- a/.github/workflows/chromatic.yml
+++ b/.github/workflows/chromatic.yml
@@ -10,6 +10,9 @@ on:
- "pnpm-lock.yaml"
jobs:
chromatic:
+ permissions:
+ contents: read
+ pull-requests: read
runs-on: ubuntu-latest
steps:
@@ -17,6 +20,7 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
+ persist-credentials: false
- name: Setup pnpm
uses: pnpm/action-setup@v4
diff --git a/packages/timo-design-system/.storybook/preview.ts b/packages/timo-design-system/.storybook/preview.ts
index c30296fe..00dcc0a7 100644
--- a/packages/timo-design-system/.storybook/preview.ts
+++ b/packages/timo-design-system/.storybook/preview.ts
@@ -6,7 +6,6 @@ const preview: Preview = {
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
- text: /(title|label|name|placeholder|text)$/i,
},
},
viewport: {
@@ -34,7 +33,7 @@ const preview: Preview = {
},
options: {
storySort: {
- order: ["Guides", "Introduction", "Components", "Icons"],
+ order: ["Guides", "Components", "Icons"],
},
},
actions: {
From 111054893a0c3d28cc02435c8777c2c5a90f6805 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sat, 27 Jun 2026 13:00:52 +0900
Subject: [PATCH 151/789] =?UTF-8?q?fix(ui):=20Storybook=20=ED=83=80?=
=?UTF-8?q?=EC=9E=85=20=EB=B0=8F=20Chromatic=20=EB=B3=80=EA=B2=BD=20?=
=?UTF-8?q?=EA=B0=90=EC=A7=80=20=EC=84=A4=EC=A0=95=20=EC=88=98=EC=A0=95=20?=
=?UTF-8?q?(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/timo-design-system/package.json | 2 +-
.../timo-design-system/src/components/Button/Button.stories.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/timo-design-system/package.json b/packages/timo-design-system/package.json
index 5343376c..9e38173a 100644
--- a/packages/timo-design-system/package.json
+++ b/packages/timo-design-system/package.json
@@ -13,7 +13,7 @@
"check-types": "tsc --noEmit",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
- "chromatic": "chromatic --project-token=$CHROMATIC_PROJECT_TOKEN"
+ "chromatic": "chromatic --project-token=$CHROMATIC_PROJECT_TOKEN --exit-zero-on-changes"
},
"devDependencies": {
"@repo/eslint-config": "workspace:*",
diff --git a/packages/timo-design-system/src/components/Button/Button.stories.tsx b/packages/timo-design-system/src/components/Button/Button.stories.tsx
index 47a2c20f..5c80355c 100644
--- a/packages/timo-design-system/src/components/Button/Button.stories.tsx
+++ b/packages/timo-design-system/src/components/Button/Button.stories.tsx
@@ -1,6 +1,6 @@
import { Button } from "./Button";
-import type { Meta, StoryObj } from "@storybook/react-vite";
+import type { Meta, StoryObj } from "@storybook/react";
const meta = {
From a00bff3d818ef90c4807588236c13b83a225385f Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sat, 27 Jun 2026 13:35:53 +0900
Subject: [PATCH 152/789] =?UTF-8?q?chore(root):=20Storybook=20=EB=B9=8C?=
=?UTF-8?q?=EB=93=9C=20=EC=82=B0=EC=B6=9C=EB=AC=BC=20gitignore=20=EC=B6=94?=
=?UTF-8?q?=EA=B0=80=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/.gitignore b/.gitignore
index ee778085..317d6a8a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,7 @@ yarn-error.log*
# Misc
.DS_Store
*.pem
+
+# Storybook build output
+packages/timo-design-system/storybook-static/
+packages/timo-design-system/build-storybook.log
\ No newline at end of file
From e9239e7f93b68baecf835d4ea37d1563808d8e96 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sat, 27 Jun 2026 16:53:37 +0900
Subject: [PATCH 153/789] =?UTF-8?q?chore(ui):=20Chromatic=20=EB=B3=80?=
=?UTF-8?q?=EA=B2=BD=20=EC=8A=A4=ED=86=A0=EB=A6=AC=EB=A7=8C=20=EA=B2=80?=
=?UTF-8?q?=EC=82=AC=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=84=A4=EC=A0=95=20(#1?=
=?UTF-8?q?4)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/timo-design-system/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/timo-design-system/package.json b/packages/timo-design-system/package.json
index 9e38173a..d0ceb869 100644
--- a/packages/timo-design-system/package.json
+++ b/packages/timo-design-system/package.json
@@ -13,7 +13,7 @@
"check-types": "tsc --noEmit",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
- "chromatic": "chromatic --project-token=$CHROMATIC_PROJECT_TOKEN --exit-zero-on-changes"
+ "chromatic": "chromatic --project-token=$CHROMATIC_PROJECT_TOKEN --exit-zero-on-changes --only-changed"
},
"devDependencies": {
"@repo/eslint-config": "workspace:*",
From f09c658be17ebc023906b6442c8c590e23c04769 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sat, 27 Jun 2026 23:06:19 +0900
Subject: [PATCH 154/789] =?UTF-8?q?fix(web):=20stores.=20=E2=86=92=20store?=
=?UTF-8?q?s=20=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=EB=AA=85=20Windows=20?=
=?UTF-8?q?=ED=98=B8=ED=99=98=20=EC=88=98=EC=A0=95=20(#37)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Windows에서 trailing dot(.) 폴더명이 허용되지 않아 checkout이 불가했습니다
- stores. 경로를 stores로 수정해 크로스 플랫폼 호환성을 확보했습니다
---
apps/timo-web/{stores. => stores}/.gitkeep | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename apps/timo-web/{stores. => stores}/.gitkeep (100%)
diff --git a/apps/timo-web/stores./.gitkeep b/apps/timo-web/stores/.gitkeep
similarity index 100%
rename from apps/timo-web/stores./.gitkeep
rename to apps/timo-web/stores/.gitkeep
From bc1e837e5494cc2fe85c60e4b4e4bcb1717992aa Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sat, 27 Jun 2026 23:10:30 +0900
Subject: [PATCH 155/789] =?UTF-8?q?remove(web):=20settings/term=20?=
=?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=8A=A4=EC=BA=90=ED=8F=B4?=
=?UTF-8?q?=EB=94=A9=20=EC=A0=9C=EA=B1=B0=20(#37)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 기존에 추가했던 term 페이지 스캐폴딩을 제거했습니다
---
apps/timo-web/app/settings/term/_components/.gitkeep | 0
apps/timo-web/app/settings/term/_containers/.gitkeep | 0
apps/timo-web/app/settings/term/_queries/.gitkeep | 0
apps/timo-web/app/settings/term/page.tsx | 3 ---
4 files changed, 3 deletions(-)
delete mode 100644 apps/timo-web/app/settings/term/_components/.gitkeep
delete mode 100644 apps/timo-web/app/settings/term/_containers/.gitkeep
delete mode 100644 apps/timo-web/app/settings/term/_queries/.gitkeep
delete mode 100644 apps/timo-web/app/settings/term/page.tsx
diff --git a/apps/timo-web/app/settings/term/_components/.gitkeep b/apps/timo-web/app/settings/term/_components/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/settings/term/_containers/.gitkeep b/apps/timo-web/app/settings/term/_containers/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/settings/term/_queries/.gitkeep b/apps/timo-web/app/settings/term/_queries/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/timo-web/app/settings/term/page.tsx b/apps/timo-web/app/settings/term/page.tsx
deleted file mode 100644
index 1a1049b2..00000000
--- a/apps/timo-web/app/settings/term/page.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export default function SettingsTermPage() {
- return <>>;
-}
From bec6edfdf1b8145c3e07e5a92896f9766389eddb Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sat, 27 Jun 2026 23:10:46 +0900
Subject: [PATCH 156/789] =?UTF-8?q?feat(web):=20login=C2=B7settings/policy?=
=?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=8A=A4=EC=BA=90=ED=8F=B4?=
=?UTF-8?q?=EB=94=A9=20=EC=B6=94=EA=B0=80=20(#37)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- login, settings/policy 페이지 스캐폴딩을 추가했습니다
---
apps/timo-web/app/login/page.tsx | 3 +++
apps/timo-web/app/settings/policy/_components/.gitkeep | 0
apps/timo-web/app/settings/policy/_containers/.gitkeep | 0
apps/timo-web/app/settings/policy/_queries/.gitkeep | 0
apps/timo-web/app/settings/policy/page.tsx | 3 +++
5 files changed, 6 insertions(+)
create mode 100644 apps/timo-web/app/login/page.tsx
create mode 100644 apps/timo-web/app/settings/policy/_components/.gitkeep
create mode 100644 apps/timo-web/app/settings/policy/_containers/.gitkeep
create mode 100644 apps/timo-web/app/settings/policy/_queries/.gitkeep
create mode 100644 apps/timo-web/app/settings/policy/page.tsx
diff --git a/apps/timo-web/app/login/page.tsx b/apps/timo-web/app/login/page.tsx
new file mode 100644
index 00000000..428f4881
--- /dev/null
+++ b/apps/timo-web/app/login/page.tsx
@@ -0,0 +1,3 @@
+export default function LoginPage() {
+ return <>>;
+}
diff --git a/apps/timo-web/app/settings/policy/_components/.gitkeep b/apps/timo-web/app/settings/policy/_components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/policy/_containers/.gitkeep b/apps/timo-web/app/settings/policy/_containers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/policy/_queries/.gitkeep b/apps/timo-web/app/settings/policy/_queries/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/timo-web/app/settings/policy/page.tsx b/apps/timo-web/app/settings/policy/page.tsx
new file mode 100644
index 00000000..b621d253
--- /dev/null
+++ b/apps/timo-web/app/settings/policy/page.tsx
@@ -0,0 +1,3 @@
+export default function SettingsPolicyPage() {
+ return <>>;
+}
From 14d7239e4d85596e4ff045a88b0dda6d073a8435 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 01:36:14 +0900
Subject: [PATCH 157/789] =?UTF-8?q?chore(ui):=20Chromatic=20=EB=A6=AC?=
=?UTF-8?q?=EB=B7=B0=20=EB=B0=98=EC=98=81=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/chromatic.yml | 50 +++++++++++++++++++++++-
packages/timo-design-system/package.json | 2 +-
2 files changed, 50 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml
index 62e52104..a9dd8018 100644
--- a/.github/workflows/chromatic.yml
+++ b/.github/workflows/chromatic.yml
@@ -7,12 +7,14 @@ on:
paths:
- "packages/timo-design-system/**"
- ".github/workflows/chromatic.yml"
+ - "packages/tailwind-config/**"
- "pnpm-lock.yaml"
jobs:
chromatic:
permissions:
contents: read
pull-requests: read
+ issues: write
runs-on: ubuntu-latest
steps:
@@ -35,6 +37,52 @@ jobs:
run: pnpm install --frozen-lockfile
- name: Publish to Chromatic
+ id: chromatic
run: pnpm chromatic
env:
- CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
\ No newline at end of file
+ CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
+
+ - name: Comment Storybook preview link on PR
+ if: success()
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const storybookUrl = '${{ steps.chromatic.outputs.storybookUrl }}';
+ const buildUrl = '${{ steps.chromatic.outputs.buildUrl }}';
+
+ const body = [
+ '## Storybook Preview',
+ '',
+ '| 항목 | 링크 |',
+ '|---|---|',
+ `| Storybook | [열기](${storybookUrl}) |`,
+ `| Chromatic 빌드 | [확인](${buildUrl}) |`,
+ '',
+ `_마지막 업데이트: ${new Date().toISOString().replace('T', ' ').slice(0, 16)} UTC_`,
+ ].join('\n');
+
+ const { data: comments } = await github.rest.issues.listComments({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ });
+
+ const existing = comments.find((comment) =>
+ comment.user.type === 'Bot' && comment.body.includes('## Storybook Preview')
+ );
+
+ if (existing) {
+ await github.rest.issues.updateComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ comment_id: existing.id,
+ body,
+ });
+ } else {
+ await github.rest.issues.createComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ body,
+ });
+ }
\ No newline at end of file
diff --git a/packages/timo-design-system/package.json b/packages/timo-design-system/package.json
index d0ceb869..cf8b49a8 100644
--- a/packages/timo-design-system/package.json
+++ b/packages/timo-design-system/package.json
@@ -13,7 +13,7 @@
"check-types": "tsc --noEmit",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
- "chromatic": "chromatic --project-token=$CHROMATIC_PROJECT_TOKEN --exit-zero-on-changes --only-changed"
+ "chromatic": "chromatic --project-token=$CHROMATIC_PROJECT_TOKEN --only-changed"
},
"devDependencies": {
"@repo/eslint-config": "workspace:*",
From 8adfc303a9f6422507d4812c55d78e6cf6aa2f73 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 14:36:01 +0900
Subject: [PATCH 158/789] =?UTF-8?q?chore(fix):=20pull-requests=20write?=
=?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20(#14)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/chromatic.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml
index a9dd8018..c1e3862f 100644
--- a/.github/workflows/chromatic.yml
+++ b/.github/workflows/chromatic.yml
@@ -13,7 +13,7 @@ jobs:
chromatic:
permissions:
contents: read
- pull-requests: read
+ pull-requests: write
issues: write
runs-on: ubuntu-latest
From 25b84ff141e8c0f2b44d874e09e184d669780782 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sun, 28 Jun 2026 15:48:14 +0900
Subject: [PATCH 159/789] =?UTF-8?q?remove(ui):=20=EC=83=98=ED=94=8C=20Butt?=
=?UTF-8?q?on=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=B0=8F=20?=
=?UTF-8?q?=EC=8A=A4=ED=86=A0=EB=A6=AC=20=EC=A0=9C=EA=B1=B0=20(#42)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 초기 플레이스홀더로 추가된 샘플 Button 컴포넌트를 제거했습니다
---
.../src/components/.gitkeep | 0
.../src/components/Button/Button.stories.tsx | 29 -------------------
.../src/components/Button/Button.tsx | 7 -----
.../src/components/Button/index.ts | 1 -
4 files changed, 37 deletions(-)
delete mode 100644 packages/timo-design-system/src/components/.gitkeep
delete mode 100644 packages/timo-design-system/src/components/Button/Button.stories.tsx
delete mode 100644 packages/timo-design-system/src/components/Button/Button.tsx
delete mode 100644 packages/timo-design-system/src/components/Button/index.ts
diff --git a/packages/timo-design-system/src/components/.gitkeep b/packages/timo-design-system/src/components/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/packages/timo-design-system/src/components/Button/Button.stories.tsx b/packages/timo-design-system/src/components/Button/Button.stories.tsx
deleted file mode 100644
index 5c80355c..00000000
--- a/packages/timo-design-system/src/components/Button/Button.stories.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { Button } from "./Button";
-
-import type { Meta, StoryObj } from "@storybook/react";
-
-
-const meta = {
- title: "Components/Button",
- component: Button,
- tags: ["autodocs"],
- args: {
- children: "Button",
- },
- argTypes: {
- onClick: { action: "clicked" },
- },
-} satisfies Meta;
-
-export default meta;
-
-type Story = StoryObj;
-
-export const Default: Story = {};
-
-export const Disabled: Story = {
- args: {
- disabled: true,
- children: "Disabled",
- },
-};
diff --git a/packages/timo-design-system/src/components/Button/Button.tsx b/packages/timo-design-system/src/components/Button/Button.tsx
deleted file mode 100644
index c0ca842d..00000000
--- a/packages/timo-design-system/src/components/Button/Button.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import type { ButtonHTMLAttributes } from "react";
-
-type ButtonProps = ButtonHTMLAttributes;
-
-export const Button = ({ children, ...props }: ButtonProps) => {
- return {children};
-};
diff --git a/packages/timo-design-system/src/components/Button/index.ts b/packages/timo-design-system/src/components/Button/index.ts
deleted file mode 100644
index 0064dee8..00000000
--- a/packages/timo-design-system/src/components/Button/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Button } from "./Button";
From e01e3aee6e99cd8ace11fd3b491b3887f00d7fb0 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sun, 28 Jun 2026 15:48:23 +0900
Subject: [PATCH 160/789] =?UTF-8?q?chore(root):=20=EC=BB=B4=ED=8F=AC?=
=?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=A0=9C=EB=84=88=EB=A0=88=EC=9D=B4?=
=?UTF-8?q?=ED=84=B0=20=EA=B2=BD=EB=A1=9C=EB=A5=BC=20timo-design-system=20?=
=?UTF-8?q?=EA=B5=AC=EC=A1=B0=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=88=98?=
=?UTF-8?q?=EC=A0=95=20(#42)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 컴포넌트 생성 경로를 packages/ui에서 packages/timo-design-system/src/components로 수정했습니다
- kebab-case 폴더 구조로 컴포넌트가 생성되도록 경로를 변경했습니다
- 컴포넌트 생성 시 index.ts에 export가 자동으로 추가되도록 append 액션을 반영했습니다
---
turbo/generators/config.ts | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/turbo/generators/config.ts b/turbo/generators/config.ts
index 5193dd7a..4f51ea52 100644
--- a/turbo/generators/config.ts
+++ b/turbo/generators/config.ts
@@ -2,7 +2,7 @@ import type { PlopTypes } from "@turbo/gen";
export default function generator(plop: PlopTypes.NodePlopAPI): void {
plop.setGenerator("react-component", {
- description: "packages/ui에 새 React 컴포넌트 추가",
+ description: "packages/timo-design-system에 새 React 컴포넌트 추가",
prompts: [
{
type: "input",
@@ -19,9 +19,14 @@ export default function generator(plop: PlopTypes.NodePlopAPI): void {
actions: [
{
type: "add",
- path: "packages/ui/src/{{pascalCase name}}.tsx",
+ path: "packages/timo-design-system/src/components/{{kebabCase name}}/{{pascalCase name}}.tsx",
templateFile: "templates/component/component.tsx.hbs",
},
+ {
+ type: "append",
+ path: "packages/timo-design-system/src/components/index.ts",
+ template: 'export { {{pascalCase name}} } from "./{{kebabCase name}}/{{pascalCase name}}";',
+ },
],
});
From b4f903a5b7ad929aafde4d03c94d7e4539058eef Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 16:26:18 +0900
Subject: [PATCH 161/789] =?UTF-8?q?chore(config):=20Tailwind=20=ED=86=A0?=
=?UTF-8?q?=ED=81=B0=20=ED=8C=8C=EC=9D=BC=20=EA=B5=AC=EC=A1=B0=20=EB=B6=84?=
=?UTF-8?q?=EB=A6=AC=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/tailwind-config/theme.css | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/packages/tailwind-config/theme.css b/packages/tailwind-config/theme.css
index 4a2eeeba..528ad949 100644
--- a/packages/tailwind-config/theme.css
+++ b/packages/tailwind-config/theme.css
@@ -1,5 +1,3 @@
-@theme {
- --color-primary: #111111;
- --color-background: #ffffff;
- --color-foreground: #171717;
-}
+@import "./tokens/colors.css";
+@import "./tokens/typography.css";
+@import "./tokens/radius.css";
\ No newline at end of file
From f0456a5ea15a6c16a84b1204fb78f37c97fdfc71 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 16:26:32 +0900
Subject: [PATCH 162/789] =?UTF-8?q?chore(config):=20=EB=94=94=EC=9E=90?=
=?UTF-8?q?=EC=9D=B8=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EC=83=89=EC=83=81=20?=
=?UTF-8?q?=ED=86=A0=ED=81=B0=20=EC=B6=94=EA=B0=80=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/tailwind-config/tokens/colors.css | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
create mode 100644 packages/tailwind-config/tokens/colors.css
diff --git a/packages/tailwind-config/tokens/colors.css b/packages/tailwind-config/tokens/colors.css
new file mode 100644
index 00000000..6da4da51
--- /dev/null
+++ b/packages/tailwind-config/tokens/colors.css
@@ -0,0 +1,20 @@
+@theme {
+ --color-timo-blue-50: #F1F6FE;
+ --color-timo-blue-75: #C6D8FC;
+ --color-timo-blue-100: #AEC8FB;
+ --color-timo-blue-200: #8CB0F9;
+ --color-timo-blue-300: #74A0F8;
+
+ --color-timo-gray-300: #F5F5F5;
+ --color-timo-gray-500: #E6E8E8;
+ --color-timo-gray-600: #D8D8D8;
+ --color-timo-gray-700: #9F9F9F;
+ --color-timo-gray-800: #757575;
+ --color-timo-gray-900: #3F3F3F;
+
+ --color-timo-yellow-300: #F2FC9F;
+ --color-timo-black: #121212;
+ --color-timo-red: #FF6650;
+ --color-timo-orange: #FFB157;
+ --color-timo-green: #9FDDA9;
+}
\ No newline at end of file
From 49a4c551f1b91d4bd4781e6ade7037ad12788db1 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 16:26:44 +0900
Subject: [PATCH 163/789] =?UTF-8?q?chore(config):=20=EB=94=94=EC=9E=90?=
=?UTF-8?q?=EC=9D=B8=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20=ED=83=80=EC=9D=B4?=
=?UTF-8?q?=ED=8F=AC=EA=B7=B8=EB=9E=98=ED=94=BC=20=ED=86=A0=ED=81=B0=20?=
=?UTF-8?q?=EC=B6=94=EA=B0=80=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../tailwind-config/tokens/typography.css | 86 +++++++++++++++++++
1 file changed, 86 insertions(+)
create mode 100644 packages/tailwind-config/tokens/typography.css
diff --git a/packages/tailwind-config/tokens/typography.css b/packages/tailwind-config/tokens/typography.css
new file mode 100644
index 00000000..4c4bda69
--- /dev/null
+++ b/packages/tailwind-config/tokens/typography.css
@@ -0,0 +1,86 @@
+@theme {
+ --font-pretendard: Pretendard;
+
+ /* Headline */
+ --text-headline-b-30: 3rem;
+ --text-headline-b-30--line-height: 1.5;
+ --text-headline-b-30--letter-spacing: -0.03em;
+ --text-headline-b-30--font-weight: 700;
+
+ --text-headline-b-24: 2.4rem;
+ --text-headline-b-24--line-height: 1.5;
+ --text-headline-b-24--letter-spacing: -0.03em;
+ --text-headline-b-24--font-weight: 700;
+
+ --text-headline-b-22: 2.2rem;
+ --text-headline-b-22--line-height: 1.5;
+ --text-headline-b-22--letter-spacing: -0.03em;
+ --text-headline-b-22--font-weight: 700;
+
+ --text-headline-b-20: 2rem;
+ --text-headline-b-20--line-height: 1.5;
+ --text-headline-b-20--letter-spacing: -0.03em;
+ --text-headline-b-20--font-weight: 700;
+
+ --text-headline-b-18: 1.8rem;
+ --text-headline-b-18--line-height: 1.5;
+ --text-headline-b-18--letter-spacing: -0.03em;
+ --text-headline-b-18--font-weight: 700;
+
+ --text-headline-b-16: 1.6rem;
+ --text-headline-b-16--line-height: 1.5;
+ --text-headline-b-16--letter-spacing: -0.03em;
+ --text-headline-b-16--font-weight: 700;
+
+ --text-headline-m-16: 1.6rem;
+ --text-headline-m-16--line-height: 1.5;
+ --text-headline-m-16--letter-spacing: -0.03em;
+ --text-headline-m-16--font-weight: 500;
+
+ --text-headline-b-14: 1.4rem;
+ --text-headline-b-14--line-height: 1.5;
+ --text-headline-b-14--letter-spacing: -0.03em;
+ --text-headline-b-14--font-weight: 700;
+
+ --text-headline-m-14: 1.4rem;
+ --text-headline-m-14--line-height: 1.5;
+ --text-headline-m-14--letter-spacing: -0.03em;
+ --text-headline-m-14--font-weight: 500;
+
+ --text-headline-r-14: 1.4rem;
+ --text-headline-r-14--line-height: 1.5;
+ --text-headline-r-14--letter-spacing: -0.03em;
+ --text-headline-r-14--font-weight: 400;
+
+ /* Body */
+ --text-body-b-12: 1.2rem;
+ --text-body-b-12--line-height: 1.5;
+ --text-body-b-12--letter-spacing: -0.03em;
+ --text-body-b-12--font-weight: 700;
+
+ --text-body-sb-12: 1.2rem;
+ --text-body-sb-12--line-height: 1.5;
+ --text-body-sb-12--letter-spacing: -0.03em;
+ --text-body-sb-12--font-weight: 600;
+
+ --text-body-m-12: 1.2rem;
+ --text-body-m-12--line-height: 1.5;
+ --text-body-m-12--letter-spacing: -0.03em;
+ --text-body-m-12--font-weight: 500;
+
+ --text-body-r-12: 1.2rem;
+ --text-body-r-12--line-height: 1.5;
+ --text-body-r-12--letter-spacing: -0.03em;
+ --text-body-r-12--font-weight: 400;
+
+ --text-body-sb-11: 1.1rem;
+ --text-body-sb-11--line-height: 1.5;
+ --text-body-sb-11--letter-spacing: -0.03em;
+ --text-body-sb-11--font-weight: 600;
+
+ /* Caption */
+ --text-caption-r-10: 1rem;
+ --text-caption-r-10--line-height: 1.5;
+ --text-caption-r-10--letter-spacing: -0.03em;
+ --text-caption-r-10--font-weight: 400;
+}
\ No newline at end of file
From 9934de0f5b8e13bbdb97d4933afcd8812693a7d4 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 16:27:01 +0900
Subject: [PATCH 164/789] =?UTF-8?q?chore(config):=20=EB=94=94=EC=9E=90?=
=?UTF-8?q?=EC=9D=B8=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20radius=20=ED=86=A0?=
=?UTF-8?q?=ED=81=B0=20=EC=B6=94=EA=B0=80=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/tailwind-config/tokens/radius.css | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 packages/tailwind-config/tokens/radius.css
diff --git a/packages/tailwind-config/tokens/radius.css b/packages/tailwind-config/tokens/radius.css
new file mode 100644
index 00000000..d4d9e85f
--- /dev/null
+++ b/packages/tailwind-config/tokens/radius.css
@@ -0,0 +1,5 @@
+@theme {
+ --radius-4: 4px;
+ --radius-8: 8px;
+ --radius-12: 12px;
+}
From eb24f4697e055a0bf92da43f1ce84936e804eee0 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 16:27:17 +0900
Subject: [PATCH 165/789] =?UTF-8?q?chore(web):=20rem=20=EA=B8=B0=EC=A4=80?=
=?UTF-8?q?=20=EC=A0=84=EC=97=AD=20=ED=8F=B0=ED=8A=B8=20=ED=81=AC=EA=B8=B0?=
=?UTF-8?q?=20=EC=84=A4=EC=A0=95=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/app/globals.css | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/apps/timo-web/app/globals.css b/apps/timo-web/app/globals.css
index 296d977e..8ceac6a8 100644
--- a/apps/timo-web/app/globals.css
+++ b/apps/timo-web/app/globals.css
@@ -1,2 +1,8 @@
@import "tailwindcss";
@import "@repo/tailwind-config/theme.css";
+
+@layer base {
+ html {
+ font-size: 62.5%;
+ }
+}
\ No newline at end of file
From 0d9990bf262dbb4a6d9141fc45cc1bc00572ceb3 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sun, 28 Jun 2026 16:33:40 +0900
Subject: [PATCH 166/789] =?UTF-8?q?feat(ui):=20=EC=BB=AC=EB=9F=AC=C2=B7?=
=?UTF-8?q?=ED=83=80=EC=9D=B4=ED=8F=AC=EA=B7=B8=EB=9E=98=ED=94=BC=20?=
=?UTF-8?q?=ED=86=A0=ED=81=B0=20=EC=83=81=EC=88=98=20=EB=B0=8F=20=EC=8A=A4?=
=?UTF-8?q?=ED=86=A0=EB=A6=AC=20=EC=B6=94=EA=B0=80=20(#42)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- COLOR_TOKENS, TYPOGRAPHY_TOKENS 상수를 tokens/ 폴더에 정의했습니다
- 토큰 타입을 각 컴포넌트에서 재사용했습니다
- Color, Typography 컴포넌트와 Storybook 스토리를 추가했습니다
---
.../src/components/color/Color.stories.tsx | 29 +++++++++++++
.../src/components/color/Color.tsx | 42 +++++++++++++++++++
.../typography/Typography.stories.tsx | 28 +++++++++++++
.../src/components/typography/Typography.tsx | 36 ++++++++++++++++
.../src/tokens/colort-token.ts | 27 ++++++++++++
.../src/tokens/typography-token.ts | 15 +++++++
6 files changed, 177 insertions(+)
create mode 100644 packages/timo-design-system/src/components/color/Color.stories.tsx
create mode 100644 packages/timo-design-system/src/components/color/Color.tsx
create mode 100644 packages/timo-design-system/src/components/typography/Typography.stories.tsx
create mode 100644 packages/timo-design-system/src/components/typography/Typography.tsx
create mode 100644 packages/timo-design-system/src/tokens/colort-token.ts
create mode 100644 packages/timo-design-system/src/tokens/typography-token.ts
diff --git a/packages/timo-design-system/src/components/color/Color.stories.tsx b/packages/timo-design-system/src/components/color/Color.stories.tsx
new file mode 100644
index 00000000..ef2ac235
--- /dev/null
+++ b/packages/timo-design-system/src/components/color/Color.stories.tsx
@@ -0,0 +1,29 @@
+
+import { Color } from "./Color";
+import { COLOR_TOKENS } from "../../tokens/colort-token";
+
+import type { Meta, StoryObj } from "@storybook/react";
+
+const meta = {
+ title: "Tokens/Color",
+ parameters: {
+ layout: "padded",
+ },
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const All: Story = {
+ name: "All Colors",
+ render: () => (
+
+
+ ⚠️ 피그마 MCP 연동 후 실제 값으로 업데이트 예정입니다.
+
+ {COLOR_TOKENS.map((token) => (
+
+ ))}
+
+ ),
+};
diff --git a/packages/timo-design-system/src/components/color/Color.tsx b/packages/timo-design-system/src/components/color/Color.tsx
new file mode 100644
index 00000000..9f771d92
--- /dev/null
+++ b/packages/timo-design-system/src/components/color/Color.tsx
@@ -0,0 +1,42 @@
+import { ColorToken } from "../../tokens/colort-token";
+
+export const Color = ({ name, cssVar, value, usage }: ColorToken) => {
+ return (
+
+
+
+
{name}
+
+ {cssVar}
+
+
+ {value}
+
+
+ {usage}
+
+
+
+ );
+};
diff --git a/packages/timo-design-system/src/components/typography/Typography.stories.tsx b/packages/timo-design-system/src/components/typography/Typography.stories.tsx
new file mode 100644
index 00000000..87b3d1c2
--- /dev/null
+++ b/packages/timo-design-system/src/components/typography/Typography.stories.tsx
@@ -0,0 +1,28 @@
+
+import { Typography } from "./Typography";
+import { TYPOGRAPHY_TOKENS } from "../../tokens/typography-token";
+
+import type { Meta, StoryObj } from "@storybook/react";
+
+const meta = {
+ title: "Tokens/Typography",
+ parameters: {
+ layout: "padded",
+ },
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const Scale: Story = {
+ render: () => (
+
+
+ ⚠️ 피그마 MCP 연동 후 실제 값으로 업데이트 예정입니다.
+
+ {TYPOGRAPHY_TOKENS.map((row) => (
+
+ ))}
+
+ ),
+};
diff --git a/packages/timo-design-system/src/components/typography/Typography.tsx b/packages/timo-design-system/src/components/typography/Typography.tsx
new file mode 100644
index 00000000..f39ea7ec
--- /dev/null
+++ b/packages/timo-design-system/src/components/typography/Typography.tsx
@@ -0,0 +1,36 @@
+import { TypographyToken } from "../../tokens/typography-token";
+
+export const Typography = ({ token, size, weight, usage }: TypographyToken) => {
+ return (
+
+
+ 가나다라마 Aa
+
+
+
+ {token}
+
+
+ {size} / {weight} — {usage}
+
+
+
+ );
+};
diff --git a/packages/timo-design-system/src/tokens/colort-token.ts b/packages/timo-design-system/src/tokens/colort-token.ts
new file mode 100644
index 00000000..63ff149e
--- /dev/null
+++ b/packages/timo-design-system/src/tokens/colort-token.ts
@@ -0,0 +1,27 @@
+export interface ColorToken {
+ name: string;
+ cssVar: string;
+ value: string;
+ usage: string;
+}
+
+export const COLOR_TOKENS: ColorToken[] = [
+ {
+ name: "primary",
+ cssVar: "--color-primary",
+ value: "#111111",
+ usage: "브랜드 메인 (버튼, 강조)",
+ },
+ {
+ name: "background",
+ cssVar: "--color-background",
+ value: "#ffffff",
+ usage: "페이지 배경",
+ },
+ {
+ name: "foreground",
+ cssVar: "--color-foreground",
+ value: "#171717",
+ usage: "텍스트 기본",
+ },
+];
diff --git a/packages/timo-design-system/src/tokens/typography-token.ts b/packages/timo-design-system/src/tokens/typography-token.ts
new file mode 100644
index 00000000..336371c5
--- /dev/null
+++ b/packages/timo-design-system/src/tokens/typography-token.ts
@@ -0,0 +1,15 @@
+export interface TypographyToken {
+ token: string;
+ size: string;
+ weight: string;
+ usage: string;
+}
+
+export const TYPOGRAPHY_TOKENS: TypographyToken[] = [
+ { token: "text-2xl", size: "24px", weight: "700", usage: "페이지 제목" },
+ { token: "text-xl", size: "20px", weight: "600", usage: "섹션 제목" },
+ { token: "text-lg", size: "18px", weight: "500", usage: "카드 제목" },
+ { token: "text-base", size: "16px", weight: "400", usage: "본문 기본" },
+ { token: "text-sm", size: "14px", weight: "400", usage: "보조 텍스트" },
+ { token: "text-xs", size: "12px", weight: "400", usage: "캡션·레이블" },
+];
From 023cafb6b27bc40aca31956de3fd9ad3175d1d98 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sun, 28 Jun 2026 16:34:03 +0900
Subject: [PATCH 167/789] =?UTF-8?q?chore(ui):=20Storybook=20=EA=B2=BD?=
=?UTF-8?q?=EB=A1=9C=20alias=20=EB=B0=8F=20=EC=8A=A4=ED=86=A0=EB=A6=AC=20?=
=?UTF-8?q?=EC=A0=95=EB=A0=AC=20=EC=88=9C=EC=84=9C=20=EC=84=A4=EC=A0=95=20?=
=?UTF-8?q?(#42)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- viteFinal에 도메인별 Vite alias를 추가했습니다 (@tokens, @components, @icons, @lib)
- storySort에 Tokens 카테고리를 추가했습니다
---
packages/timo-design-system/.storybook/main.ts | 13 +++++++++++++
packages/timo-design-system/.storybook/preview.ts | 2 +-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/packages/timo-design-system/.storybook/main.ts b/packages/timo-design-system/.storybook/main.ts
index d2f044c6..c493e5f0 100644
--- a/packages/timo-design-system/.storybook/main.ts
+++ b/packages/timo-design-system/.storybook/main.ts
@@ -1,3 +1,5 @@
+import path from "path";
+
import type { StorybookConfig } from "@storybook/react-vite";
const config: StorybookConfig = {
@@ -15,6 +17,17 @@ const config: StorybookConfig = {
docs: {
autodocs: "tag",
},
+ viteFinal: async (config) => {
+ config.resolve ??= {};
+ config.resolve.alias = {
+ ...config.resolve.alias,
+ "@tokens": path.resolve(__dirname, "../src/tokens"),
+ "@components": path.resolve(__dirname, "../src/components"),
+ "@icons": path.resolve(__dirname, "../src/icons"),
+ "@lib": path.resolve(__dirname, "../src/lib"),
+ };
+ return config;
+ },
};
export default config;
diff --git a/packages/timo-design-system/.storybook/preview.ts b/packages/timo-design-system/.storybook/preview.ts
index 00dcc0a7..4313c5d2 100644
--- a/packages/timo-design-system/.storybook/preview.ts
+++ b/packages/timo-design-system/.storybook/preview.ts
@@ -33,7 +33,7 @@ const preview: Preview = {
},
options: {
storySort: {
- order: ["Guides", "Components", "Icons"],
+ order: ["Guides", "Tokens", "Components", "Icons"],
},
},
actions: {
From b4ff17952e2dc79e47d82ff83eb4f41c48dccdb7 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sun, 28 Jun 2026 16:42:34 +0900
Subject: [PATCH 168/789] =?UTF-8?q?chore(ui):=20Storybook=20=EA=B2=BD?=
=?UTF-8?q?=EB=A1=9C=20alias=20=EC=84=A4=EC=A0=95=20=EC=A0=9C=EA=B1=B0=20(?=
=?UTF-8?q?#42)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
viteFinal의 @tokens, @components, @icons, @lib alias 설정을 제거했습니다.
import 경로를 상대 경로로 유지합니다.
---
packages/timo-design-system/.storybook/.gitkeep | 0
packages/timo-design-system/.storybook/main.ts | 13 -------------
2 files changed, 13 deletions(-)
delete mode 100644 packages/timo-design-system/.storybook/.gitkeep
diff --git a/packages/timo-design-system/.storybook/.gitkeep b/packages/timo-design-system/.storybook/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/packages/timo-design-system/.storybook/main.ts b/packages/timo-design-system/.storybook/main.ts
index c493e5f0..d2f044c6 100644
--- a/packages/timo-design-system/.storybook/main.ts
+++ b/packages/timo-design-system/.storybook/main.ts
@@ -1,5 +1,3 @@
-import path from "path";
-
import type { StorybookConfig } from "@storybook/react-vite";
const config: StorybookConfig = {
@@ -17,17 +15,6 @@ const config: StorybookConfig = {
docs: {
autodocs: "tag",
},
- viteFinal: async (config) => {
- config.resolve ??= {};
- config.resolve.alias = {
- ...config.resolve.alias,
- "@tokens": path.resolve(__dirname, "../src/tokens"),
- "@components": path.resolve(__dirname, "../src/components"),
- "@icons": path.resolve(__dirname, "../src/icons"),
- "@lib": path.resolve(__dirname, "../src/lib"),
- };
- return config;
- },
};
export default config;
From d7cf0c0419f6f67047137ae45d07f4c3c32d9c6b Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 16:43:08 +0900
Subject: [PATCH 169/789] =?UTF-8?q?fix(ui):=20Storybook=20=EB=B9=8C?=
=?UTF-8?q?=EB=93=9C=20=EC=82=B0=EC=B6=9C=EB=AC=BC=20lint=20=EC=A0=9C?=
=?UTF-8?q?=EC=99=B8=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/timo-design-system/eslint.config.mjs | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/packages/timo-design-system/eslint.config.mjs b/packages/timo-design-system/eslint.config.mjs
index 19170f88..e6b0b4cd 100644
--- a/packages/timo-design-system/eslint.config.mjs
+++ b/packages/timo-design-system/eslint.config.mjs
@@ -1,4 +1,9 @@
import { config } from "@repo/eslint-config/react-internal";
/** @type {import("eslint").Linter.Config} */
-export default config;
+export default [
+ {
+ ignores: ["storybook-static/**"],
+ },
+ ...config,
+];
From a7427fc04c5d52e582fa29694dde930c7ffce5e2 Mon Sep 17 00:00:00 2001
From: kimminna
Date: Sun, 28 Jun 2026 16:50:46 +0900
Subject: [PATCH 170/789] =?UTF-8?q?chore(ui):=20Chromatic=20visual=20chang?=
=?UTF-8?q?es=20=EC=8B=9C=20CI=20=EC=84=B1=EA=B3=B5=ED=95=98=EB=8F=84?=
=?UTF-8?q?=EB=A1=9D=20=EC=84=A4=EC=A0=95=20(#42)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
신규 스토리 추가 시 베이스라인 부재로 발생하는 exit code 1을 방지하기 위해
--exit-zero-on-changes 플래그를 추가했습니다.
---
packages/timo-design-system/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/timo-design-system/package.json b/packages/timo-design-system/package.json
index 95e20a34..95839115 100644
--- a/packages/timo-design-system/package.json
+++ b/packages/timo-design-system/package.json
@@ -13,7 +13,7 @@
"check-types": "tsc --noEmit",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
- "chromatic": "chromatic --project-token=$CHROMATIC_PROJECT_TOKEN --only-changed"
+ "chromatic": "chromatic --project-token=$CHROMATIC_PROJECT_TOKEN --only-changed --exit-zero-on-changes"
},
"devDependencies": {
"@repo/eslint-config": "workspace:*",
From 1cc5238099104362670b19066f665450d1f7ba92 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 16:53:16 +0900
Subject: [PATCH 171/789] =?UTF-8?q?fix(config):=20Pretendard=20=ED=8F=B0?=
=?UTF-8?q?=ED=8A=B8=20fallback=20=EC=B6=94=EA=B0=80=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/tailwind-config/tokens/typography.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/tailwind-config/tokens/typography.css b/packages/tailwind-config/tokens/typography.css
index 4c4bda69..a6b5d30a 100644
--- a/packages/tailwind-config/tokens/typography.css
+++ b/packages/tailwind-config/tokens/typography.css
@@ -1,5 +1,5 @@
@theme {
- --font-pretendard: Pretendard;
+ --font-pretendard: Pretendard, sans-serif;
/* Headline */
--text-headline-b-30: 3rem;
From dba0ef41004890be6a4de929b833e877b9b41382 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 20:26:17 +0900
Subject: [PATCH 172/789] =?UTF-8?q?chore(ui):=20=EC=83=89=EC=83=81=20?=
=?UTF-8?q?=ED=86=A0=ED=81=B0=20Storybook=20=EC=8A=A4=ED=86=A0=EB=A6=AC=20?=
=?UTF-8?q?=EC=B6=94=EA=B0=80=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/components/color/Color.stories.tsx | 28 +++++++++++++
.../src/components/color/Color.tsx | 39 +++++++++++++++++++
.../src/tokens/color-token.ts | 30 ++++++++++++++
3 files changed, 97 insertions(+)
create mode 100644 packages/timo-design-system/src/components/color/Color.stories.tsx
create mode 100644 packages/timo-design-system/src/components/color/Color.tsx
create mode 100644 packages/timo-design-system/src/tokens/color-token.ts
diff --git a/packages/timo-design-system/src/components/color/Color.stories.tsx b/packages/timo-design-system/src/components/color/Color.stories.tsx
new file mode 100644
index 00000000..eecbba37
--- /dev/null
+++ b/packages/timo-design-system/src/components/color/Color.stories.tsx
@@ -0,0 +1,28 @@
+import { Color } from "./Color";
+import { COLOR_TOKENS } from "../../tokens/color-token";
+
+import type { Meta, StoryObj } from "@storybook/react";
+
+const meta = {
+ title: "Tokens/Color",
+ parameters: {
+ layout: "padded",
+ },
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const All: Story = {
+ name: "All Colors",
+ render: () => (
+
+
+ ⚠️ 피그마 MCP 연동 후 실제 값으로 업데이트 예정입니다.
+
+ {COLOR_TOKENS.map((token) => (
+
+ ))}
+
+ ),
+};
diff --git a/packages/timo-design-system/src/components/color/Color.tsx b/packages/timo-design-system/src/components/color/Color.tsx
new file mode 100644
index 00000000..0f00b157
--- /dev/null
+++ b/packages/timo-design-system/src/components/color/Color.tsx
@@ -0,0 +1,39 @@
+import { ColorToken } from "../../tokens/color-token";
+
+export const Color = ({ name, cssVar, value }: ColorToken) => {
+ return (
+
+
+
+
{name}
+
+ {cssVar}
+
+
+ {value}
+
+
+
+ );
+};
diff --git a/packages/timo-design-system/src/tokens/color-token.ts b/packages/timo-design-system/src/tokens/color-token.ts
new file mode 100644
index 00000000..819cde2f
--- /dev/null
+++ b/packages/timo-design-system/src/tokens/color-token.ts
@@ -0,0 +1,30 @@
+export interface ColorToken {
+ name: string;
+ cssVar: string;
+ value: string;
+}
+
+export const COLOR_TOKENS: ColorToken[] = [
+ { name: "timo-blue-50", cssVar: "--color-timo-blue-50", value: "#F1F6FE" },
+ { name: "timo-blue-75", cssVar: "--color-timo-blue-75", value: "#C6D8FC" },
+ { name: "timo-blue-100", cssVar: "--color-timo-blue-100", value: "#AEC8FB" },
+ { name: "timo-blue-200", cssVar: "--color-timo-blue-200", value: "#8CB0F9" },
+ { name: "timo-blue-300", cssVar: "--color-timo-blue-300", value: "#74A0F8" },
+
+ { name: "timo-gray-300", cssVar: "--color-timo-gray-300", value: "#F5F5F5" },
+ { name: "timo-gray-500", cssVar: "--color-timo-gray-500", value: "#E6E8E8" },
+ { name: "timo-gray-600", cssVar: "--color-timo-gray-600", value: "#D8D8D8" },
+ { name: "timo-gray-700", cssVar: "--color-timo-gray-700", value: "#9F9F9F" },
+ { name: "timo-gray-800", cssVar: "--color-timo-gray-800", value: "#757575" },
+ { name: "timo-gray-900", cssVar: "--color-timo-gray-900", value: "#3F3F3F" },
+
+ {
+ name: "timo-yellow-300",
+ cssVar: "--color-timo-yellow-300",
+ value: "#F2FC9F",
+ },
+ { name: "timo-black", cssVar: "--color-timo-black", value: "#121212" },
+ { name: "timo-red", cssVar: "--color-timo-red", value: "#FF6650" },
+ { name: "timo-orange", cssVar: "--color-timo-orange", value: "#FFB157" },
+ { name: "timo-green", cssVar: "--color-timo-green", value: "#9FDDA9" },
+];
From 04e55e3e721a81f239577a9a5b35f8dc32802a07 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 20:26:32 +0900
Subject: [PATCH 173/789] =?UTF-8?q?chore(ui):=20=ED=83=80=EC=9D=B4?=
=?UTF-8?q?=ED=8F=AC=EA=B7=B8=EB=9E=98=ED=94=BC=20=ED=86=A0=ED=81=B0=20Sto?=
=?UTF-8?q?rybook=20=EC=8A=A4=ED=86=A0=EB=A6=AC=20=EC=B6=94=EA=B0=80=20(#4?=
=?UTF-8?q?1)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../typography/Typography.stories.tsx | 27 ++++
.../src/components/typography/Typography.tsx | 44 +++++++
.../src/tokens/typography-token.ts | 122 ++++++++++++++++++
3 files changed, 193 insertions(+)
create mode 100644 packages/timo-design-system/src/components/typography/Typography.stories.tsx
create mode 100644 packages/timo-design-system/src/components/typography/Typography.tsx
create mode 100644 packages/timo-design-system/src/tokens/typography-token.ts
diff --git a/packages/timo-design-system/src/components/typography/Typography.stories.tsx b/packages/timo-design-system/src/components/typography/Typography.stories.tsx
new file mode 100644
index 00000000..4f557685
--- /dev/null
+++ b/packages/timo-design-system/src/components/typography/Typography.stories.tsx
@@ -0,0 +1,27 @@
+import { Typography } from "./Typography";
+import { TYPOGRAPHY_TOKENS } from "../../tokens/typography-token";
+
+import type { Meta, StoryObj } from "@storybook/react";
+
+const meta = {
+ title: "Tokens/Typography",
+ parameters: {
+ layout: "padded",
+ },
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const Scale: Story = {
+ render: () => (
+
+
+ ⚠️ 피그마 MCP 연동 후 실제 값으로 업데이트 예정입니다.
+
+ {TYPOGRAPHY_TOKENS.map((row) => (
+
+ ))}
+
+ ),
+};
diff --git a/packages/timo-design-system/src/components/typography/Typography.tsx b/packages/timo-design-system/src/components/typography/Typography.tsx
new file mode 100644
index 00000000..bf5b9ff3
--- /dev/null
+++ b/packages/timo-design-system/src/components/typography/Typography.tsx
@@ -0,0 +1,44 @@
+import { TypographyToken } from "../../tokens/typography-token";
+
+export const Typography = ({
+ token,
+ size,
+ weight,
+ lineHeight,
+ letterSpacing,
+}: TypographyToken) => {
+ return (
+
+
+ 가나다라마 Aa
+
+
+
+ {token}
+
+
+ {size} / {weight} / {lineHeight} / {letterSpacing}
+
+
+
+ );
+};
diff --git a/packages/timo-design-system/src/tokens/typography-token.ts b/packages/timo-design-system/src/tokens/typography-token.ts
new file mode 100644
index 00000000..a365fa20
--- /dev/null
+++ b/packages/timo-design-system/src/tokens/typography-token.ts
@@ -0,0 +1,122 @@
+export interface TypographyToken {
+ token: string;
+ size: string;
+ weight: string;
+ lineHeight: string;
+ letterSpacing: string;
+}
+
+export const TYPOGRAPHY_TOKENS: TypographyToken[] = [
+ {
+ token: "text-headline-b-30",
+ size: "3rem",
+ weight: "700",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-headline-b-24",
+ size: "2.4rem",
+ weight: "700",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-headline-b-22",
+ size: "2.2rem",
+ weight: "700",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-headline-b-20",
+ size: "2rem",
+ weight: "700",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-headline-b-18",
+ size: "1.8rem",
+ weight: "700",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-headline-b-16",
+ size: "1.6rem",
+ weight: "700",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-headline-m-16",
+ size: "1.6rem",
+ weight: "500",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-headline-b-14",
+ size: "1.4rem",
+ weight: "700",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-headline-m-14",
+ size: "1.4rem",
+ weight: "500",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-headline-r-14",
+ size: "1.4rem",
+ weight: "400",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-body-b-12",
+ size: "1.2rem",
+ weight: "700",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-body-sm-12",
+ size: "1.2rem",
+ weight: "600",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-body-m-12",
+ size: "1.2rem",
+ weight: "500",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-body-r-12",
+ size: "1.2rem",
+ weight: "400",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-body-sm-11",
+ size: "1.1rem",
+ weight: "600",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+ {
+ token: "text-caption-r-10",
+ size: "1rem",
+ weight: "400",
+ lineHeight: "150%",
+ letterSpacing: "-0.03em",
+ },
+];
From af9db141c5e2f6a70ec308373f71ef59ae372940 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Sun, 28 Jun 2026 20:29:13 +0900
Subject: [PATCH 174/789] =?UTF-8?q?fix(config):=20=EB=94=94=EC=9E=90?=
=?UTF-8?q?=EC=9D=B8=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EB=A6=AC=EB=B7=B0=20?=
=?UTF-8?q?=EB=B0=98=EC=98=81=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/app/globals.css | 6 ------
packages/tailwind-config/theme.css | 8 +++++++-
packages/tailwind-config/tokens/colors.css | 3 ++-
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/apps/timo-web/app/globals.css b/apps/timo-web/app/globals.css
index 8ceac6a8..296d977e 100644
--- a/apps/timo-web/app/globals.css
+++ b/apps/timo-web/app/globals.css
@@ -1,8 +1,2 @@
@import "tailwindcss";
@import "@repo/tailwind-config/theme.css";
-
-@layer base {
- html {
- font-size: 62.5%;
- }
-}
\ No newline at end of file
diff --git a/packages/tailwind-config/theme.css b/packages/tailwind-config/theme.css
index 528ad949..10181f0e 100644
--- a/packages/tailwind-config/theme.css
+++ b/packages/tailwind-config/theme.css
@@ -1,3 +1,9 @@
@import "./tokens/colors.css";
@import "./tokens/typography.css";
-@import "./tokens/radius.css";
\ No newline at end of file
+@import "./tokens/radius.css";
+
+@layer base {
+ html {
+ font-size: 62.5%;
+ }
+}
\ No newline at end of file
diff --git a/packages/tailwind-config/tokens/colors.css b/packages/tailwind-config/tokens/colors.css
index 6da4da51..1deec929 100644
--- a/packages/tailwind-config/tokens/colors.css
+++ b/packages/tailwind-config/tokens/colors.css
@@ -4,7 +4,7 @@
--color-timo-blue-100: #AEC8FB;
--color-timo-blue-200: #8CB0F9;
--color-timo-blue-300: #74A0F8;
-
+
--color-timo-gray-300: #F5F5F5;
--color-timo-gray-500: #E6E8E8;
--color-timo-gray-600: #D8D8D8;
@@ -13,6 +13,7 @@
--color-timo-gray-900: #3F3F3F;
--color-timo-yellow-300: #F2FC9F;
+
--color-timo-black: #121212;
--color-timo-red: #FF6650;
--color-timo-orange: #FFB157;
From 2eecf01b9e5d8550d902d7408dc04fe35dcd1f85 Mon Sep 17 00:00:00 2001
From: yumin-kim4757
Date: Mon, 29 Jun 2026 00:09:29 +0900
Subject: [PATCH 175/789] =?UTF-8?q?chore(web):=20Pretendard=20=EB=A1=9C?=
=?UTF-8?q?=EC=BB=AC=20=ED=8F=B0=ED=8A=B8=20=EC=A0=81=EC=9A=A9=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/timo-web/app/fonts.ts | 8 ++++++++
.../app/fonts/PretendardVariable.woff2 | Bin 0 -> 2057688 bytes
apps/timo-web/app/layout.tsx | 4 +++-
.../tailwind-config/tokens/typography.css | 2 +-
4 files changed, 12 insertions(+), 2 deletions(-)
create mode 100644 apps/timo-web/app/fonts.ts
create mode 100644 apps/timo-web/app/fonts/PretendardVariable.woff2
diff --git a/apps/timo-web/app/fonts.ts b/apps/timo-web/app/fonts.ts
new file mode 100644
index 00000000..c2688188
--- /dev/null
+++ b/apps/timo-web/app/fonts.ts
@@ -0,0 +1,8 @@
+import localFont from "next/font/local";
+
+export const pretendard = localFont({
+ src: "./fonts/PretendardVariable.woff2",
+ variable: "--font-family-pretendard",
+ weight: "45 920",
+ display: "swap",
+});
diff --git a/apps/timo-web/app/fonts/PretendardVariable.woff2 b/apps/timo-web/app/fonts/PretendardVariable.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..49c54b5152a184a243e85f7281ed338b6569987e
GIT binary patch
literal 2057688
zcmZsC1z1#3*DfhT2}4LDGXm1x9YaW`goJd1bVxJcfOI#4fOHB72q+*O(hU-VbVd;c5N3SKdb)U5ECaUEQNa52tTEPh
zQ@XBbU?~rUeIq}}^0XDZB;C*7!|-G4R$AO%VT|mN(;c~%Ua$tc6LL}F7c!vduaUM>
z%qztlQq!gAD!h(YM88>|%GDqmJ?{C}vKESTOMh*fcGn^QKc>!z^j%&Qxw!8S*dP6y
zEMS);lZXuophJ}bKM{x7~g}HuvH7?V2+3{E$=Iw$UODDF+G+%AyH$7
z6ubV!co6DH5t{d+IeiSi)ARoC(QsecYFNHEb_Ovpg-6m44zRM6YmIg8P#R{za$Z02
zXyfB5&<8halCb7ZsM5otPBX0qM_Qt)9d8>7NPGy2?&`}#UfL%c?ZNdHm2Kjw3#G3kQj
zw3OwSKQgAs?d2viS9SFrYB>mYvAX<=F#Lbusz^rFgs4{S(Z+HMya88JVfm$*p`V-@
zch6F$cveZ9lh;l=5(Q0qJJ*MWP}D`xH|jfNgK%Of1hR(-X4
zOv@Ctv-Bl0OzB*ohscd>sqtbVJ5Bq
z-a6S=*ts$xCF7g5Gbw#8%l<)_y950vnhIwL47>379KxYAVVN{&0>#D&_W*{j2fN;2
zTvFGRLf;ss6S?F$POQZ-eNU*+vAv@IR~P
zPWXo3OV6*2=+o#gPv5Sp+9xiF^;;vmA-EG8R^Q#+kI#hD`1~UJRp)CaxCQBqVem{^DB3!_|0El9OlOC*UXN#v*)JxEU^>c
zyx;abB)TLFT4y}B%p`TrY0tOoOaGcBF&VOp^MZKtr7fYG`8()YI8GBmdH0a$wOZj)
zbFQpr1!w%(t2fvkWhXb;oT9M{WD}S4TGsl9x3TW@=SP&ApFtcgJ&PrlQ`eN8>8X
z0lV;J7VX_WnM2H>=d>=opZa5@j03-M;J@gCrGMd=kr{Y{+*gmwOjv(YLzNy_vJf4*
zMvzFn0Wr={KCr#o`wFF;iRM0(DJh6zEQ#-zl-9~D(d**o{ABT|d=z0YUTAx`Rw~Dc
zA^pewBR-rDCr!MvgUd3XmeiJ|e_`wF1Dk~ey);kvq4O0l50!KNj56ZsR`?a}1#`yN
z5ijnh)C-rRoo#bI@Z$~~GF8;7i$Bq2TIsU_`@btK`ywMSF__uB%DW>l8jW>REb8p_&
z<9x(X!hGKVPGH|jczMZj+Ef?c#VAK+Gu=&X=hGcEG|Z|{{7B$U&{lxS@k-skjaEin
zQ3p!kSgIF36qTkL00
zu8MPeMgI2l!K(I#nHNDxwQlHH;2C*5QifTD6znV}8lCEHw@8Mo<^_9u$kF~q+Pgzl
zvu@!nBjKx61s|*3KxO(G#rZXB6MmN%?VZQ61l9MGV%E52Wo90{04jD9^BrK7c33aPh}pj
zR*Y+fC28nrtBzixVJ7f;gh2O~Ae?bE*~sTj-<0b5P1TImT6Z8av~AnR*e+;|+v{eV
zpCUwif68cI3^HDqKK6AMC;x*>Tb0yo;`D)x-KvT#yX0=}$r1$XVm{Qt6{Ac4dq4q6
zldi)7Ca666o!n5z^cucd+1Oi0@Nn_m2MmcR+kqE&6wZ2eRgJBxe=uAwT_yf_vZ#L%
zR(P|M%vbeys)L<{Z|JYbPG?&&v^bhtgIJ;vSG{N_XN&Dbj=ALFOjfBXnC)4s8vQPOt5K2g-ozPx1$iZ<=p{pR$hVn8@k(1`xb
z!-9_{ifE7wi(~H&_M2m~hk+h{Vpu>7_iq5DMbGS_a?x+}h~qhDZ2tj=9VyjB9W`Pa
zp)LN2j9z?fQ9XTj;pfI9*qp+L&DL1q!)e*x3GOa;*{4A%&lg?F60@FWk3e2s?zLJx
zZ;H*YH<-rPcX-`vJ+gGC?yvA(=T2fXdx^#3J2zs4_#^%rRlwG**v9(aI}ZH_&~4Xb
z-w&d2R&(m;Ko=R(ClV%3(~P8!A_bi9iNdChXc84n6NpZT*zb!U;oO)}WqFjLJxykv
zapd3Gt0<1}V2ON9o?=&iV^8%#n~5g3X4veVgG>A_P1BJ`S-|Rf%FCM+hIky^qI@o^
zve1mOsItU(kJS$I^TYZQ)&gl`Gd#XnD)S5agfy7UCidFW&v+gZhnH}Jm(OV^J&E|{
zIAn*LoUXW);gP>w#oaWa8xGX$ET3sAYaJuUZFPJW;FP->nxQQ<(&6cx`(mfx-m&ag
zaX31{vZ+}D>+4?Rm#NFto0fkQD{ZuYNy(hEo!!tGEt&!qn3EXi`~7q3$eb@x?{L>k
z%c4?5L;5+{kQjp;>D1zmb_&JX2@BM#sNC%h#nyFHCqtRl7mwO9ysME}9x79Q4Qwa5
zzCxbx&wOlrWUhBYt2#BGW=%pH(k+yo%Co52?8dv5+$$RJYR!3CJ-B=l;?H%{4@yY&|)143W5kyDrIs8Q%Cb4AbZ3`+_YN42z>Zik&=%
zrCTv+${@YsGriAGmt%X7Nz=U>Y4mrMI()f|W%e7iUc$G}7tdcKoxIDFgt;S1$mvSD
zx-%nFW>J;D8Ob|Y4^rXe&oMiRyd43R`G_*(>pV`62cJ?(!
zF^@=utBOt-Wpw(Bx>znp71Aj_ql^%CW=A_2ORv}s{~=7BkDUddQt1j_(Wkwrswnu{
zm}^OurSXcN@3ooes9Kcq=X!C(=h~+<)QJX9WMgAp(JIwPjdD%n)AUF$-+ZY4QLOw&
zZD(bXMc`1;U47@B$dbYtiFlGf_9JR^!|u+`XisjQroC@fvrMexLAj<2$oVZiUOeG%
zTzHCjW4vjo$2hVv>IKpM=L*rCKH-{TY&%!AIKJuXP+wS(0(BWVPt|xahLC82cUN?(xpA-9IYq?gMH=Io*3X8wz9Jx8L0AHD)+i|yPIwkK*2%@o=52z&YgR|uwv!hI&db(
zd0mCPzjxMaD3>#Cwlx;AnVe)UD1bs4=om5xe7>z81ApLgiSH7(gW^9S7h6Bdgzid9
z&`Xo9KW9ql{3N%Ws>c@f@I_19nB@+AmLI&NY`%K`p{(e9XFzNVS>bUq+`+5T>|@CS
zNsF(|M@97w9$n~wES1ow^3_id=D>S6^>$xxDA_F@ld^Evf6m=HnL^^NELf}nrB_XmT4c&cfd-yKAAVZ9w3b256{YOfdLa3<+28Xx#nf@s&iSy7=94DMu;=8#~5
z!u(yX5ac+w^~Z5bbZacXY8W{YC*I+C9&kuyp3iGs5v5O0ALj!_D!zafYZnw_=(&5n
z1sCsx^wtxheiInd3PK^&8N3!OZ+UAylXtx0j(rrcLd>LmIa!&lfTj;YVGl8P1bt|x
zv9>FDoFqP7lAO65^&8o7?vdH14nZ#?8Wce1AQQ}IgkcD~?gbq@{<^yMs)co=KS;HB
zLhxm<)Q6vnF?>H|E5zTXD@1Ikk{3Kjc>fvwg{>uMM=xf%UEE)0XTCX&^uF5PM@w2r
z9J+#QWtwQTQ-;_-F>@tvz==t2qrYCoeSX)HAz1%nVHrY#Q#1w&Cu0gpRE)l9&i55}
z$TOCa^yMA+C58T1X*)~q(EoBJliWfjiQK|y#xrKOrOIKkdpNU#`(R`9%Ad#|s-*;y
ziy~qE{YEJJ=4P%qSxbqzC|L^zqlXj9=%-p4q%r^}gkW$29TZ9g`)9h;8e9I)kF|sN
z)}Qzr<`OaHFdkv4|01~kPAt^W#P}w3C6x2cj2VN!Utq`9g}W42W)yj5{!-4e^HMV2
z-0K>Q_hX6d(5LrMk-2+Cowj47cAXJ(IE1(P`VRB9~~vTZmDNDt8Unkb)iHm;gNp45T9%tLv0HC{7RWJaE8WgF2R
zsH#mOr%4iy_#ac`{Tt55`QwP<8FKJu0E{d6BcO-^F702K}u26hb_T3uebPwjiQ?gw4C
zm{gBm`BkCb3!XjAG_7azoOWgY7@eJ+o6RE+V!2-U|I7#tQow)#ehn!pDGV*}K?o*>1mw^`P}6O=bTGFq7P777x{Ph%*IQC*>*bzXGMRgS8(rNx%*QWgi>bo6Q+23b3$B})484$t
z)5>IR!zLot8a1Y@QsT(Pb-qMb?9f&oSTG8uXC^3kJ<6`uQC`ds66~!d_MXoQ!O(ou
zqJt(DSkc{akh5nReA~#Tzzi|f!ITH9y9#F4PzmBbLV0w#@^Z9|<>iIa^U>el9lt{WAxFSLz%HUh5mvZCHas*GZART|rXLY7=r;6W
zB1%IFl&_MC-SemiQY{WCb>5O7adOh}Y{tn@7x>m%8Kmfdu%xyxw#9B4OJ&Zti6wQ5
ziphx=L7ddVadC%E0|@`q9=D
z?_a(@HS=UV=xH%$7bO7>&fkWJRmJXKIKPrX4QlZX6(l$Y!@&G5_spM)rD-wz+j{{9
zxxMlah>%7M!e3Xgu;?CXc6O0@eTn97Jl4$JJ<(5PsVmE||KvBBuT!35-(cv;GsYs8
z)~n^8Fz8*Hw~{gFnuGgP(A9bR%x`HoXzK2*B=^yY?$_b;B!N~uOJiB5eyyO!yj
ze&<7w!iBmg7jFz-7C;&m?z&P9HZzJsi-{A~X(w$GH!rY!;yZj9Gpj@&E86FF@Vym3
z_%1jK8!L9lck{1Ru{!^|fJ8dFXAL)w4LR1$C8-MdiqXdP?&9XbT}H&f;5-CE5e8F)
zbu&Vt0=0986#>Ys0Lcy^7y*gUH`F5r>yHf-lK-+e6cw?*P==igu@=PB(>rA-e6gy3QG!calu0=VR{W9d
z(p;tiZZ;WCh$y}=Li@DoN%d{9bezv5T@4+o>H%c|A`^dqwW28b@CBaRtFICRn=+im
zeLh9vyKeOw$Gb=u?Rx#nWuY1kTJ@!Bw-M;l2{C@EmGK))IXVr4c)T$ZRn^l3$Xbg@
zb<^&C3lv_`0
z$&NHirZW0QF_PS(hiA;tg1KlzW;^8sln>VkRRmbcAQu=V(D!xnPFFf;L4huP51CC2
zg4H*2_^$!4{V7j{@phxcu5x7q>q;I+Yw^>n1Y}}Acu`vi~~0I<77sJ;93mH{?Oj>)&mS&-Fd3=^
zi$W-Z|5*Z5t`LC%oZeyGv8}|e|FQakz&NHq>!uN-0#suusRIKkD^waLL&yrjsC_tz
zmmcS8;6Y$yL?Il1MBNPD!$N22z84e8#Pb0!Jjzl!_a^Ji#cz(Mg!U9Hxj_fABq$Q~
zLq7;FpM1^l$w6&*x<6IAT%#f@B
zbRNS(2Go=O8W4fx7SUhY+ckA`r)=Tvgx8cY?Swt1ra*YWGU;V@TWuYCH;xWA2InL9
zOh90iw%IzqKK*`?wRZaVIbCBohXD_J1jpOMU&xz=J-%>V51oP0qnpEbU&PX|4%GBx
z-N3owgJ@->ep9Kvq8G61+fNQF?WEv@w5LEcufQp$VBI_2siy1lG8QPbpscK_tgMW+
zY-d0cxwtMAyACw&Uke|06}8ib4wVh&m87gMVHH5Y&3{BScpdouMIt3_+K+pvyce$`
z?3TZNWj=v&asu9<&@vXm>H-#)YCxJl_XKeYd4P#!G@9*2es_mlfqPcTf(|<~=^>04K7)=qb+DmEXnW3rB
z^1gQsA0h=jTXLLYL*QKLgwep^wF=jFatq1{KGkQy$^g_=u3YuY>SKG7xY3Ve_HBlh
zFKs<3D_@pxonCK$Hd*Hl4DgcynMD)!kV{&G0-yiqgmAMm&g?)C-n_zv*R|*ZlI_C<
zJco`E7d*85q0Rrc%wq7v+Iv0`fXuTrNMwJd2DS*{euPKPwTklYqa>tf%DUy9!QE7a
zOgm?BmA0{QKvy^Ux2O^6j@y^ixXAALYf|DMww+RKvwAox%D;{5(i?vX#L
zc~J2F5@FNiU7=Q$VSS9o-rm*9HFDq4^G10%D6`l)uw!B0W`BKGP7wj?mY0!%(bGdC
z5RlF*E>PB9v0nNyt<1Syym3gtt9Lg^wY5-_B@Q;6)!n5|~CX{-gODwTaLknQdFjn&os
zVxNbDHfR6|mH=TfQLu!;fM;XagYJ5;D4*4ECIlI6Z-ybQ@90oUX$B2zNBw4*uKQhJ
zkVEClMN_*w{?FF!AR^0X?m;GtWUX#`fMKG!;pDPksAo?7+Dxi#RO(60(W14Y9$-~Q
zA{c>?0v!vOEC?c^S3IOE4O~Jggg$AP6Ts
zNq}o?lpodozfzpn%$Sr*eG5DaGCrU;2X2?;0;ZV{p`YhD@Nt+?kv{Z*hT)ZvEL=ISH
z9-l=FX)5EUdv|xY9QW}a`jz2Y+W^5f^gu!DqIh5
z0YQMygL}xI!END$suLut0OCAs^?&$xQkek5)-xkqaJs?OlVT>*1!!7w#
zKL)Ai%_9#D8yX&bHnbVDq$usXl}|Z0i7F{*&WljS$bbA;{^>aYVCk=AK;PlOoqnBC
zsemB+Y7qc1baKHV7{sC6j2Hms6abiD2IrO`2Ydr?@qicrT+B{(lzhG}(eUt45!&3}
z-TL!J#lyo(%~?&&`TqLF-FyKPPJVSYC;ZrGc~@-my4Q2hSD={UYm;4O5BbDHi#s1k
z9zY%X7m3*he>3ibnj6)eiW-foJ}>NhwN7O4X7JjK!1VMK6!h5qZqC`?12jYYFVHev
zjOhR>_G|=_$;5z76Zd$8`or3~93^a*e@2ZBfb(As~b3ZR+9ot|H+aMR<
zpZFivKak$P;RSXNqW}!_!{spTO5J?}B`{}nN3!2;R=90OpGQ|67(n1ZCr&4LJIU9N
zpU7$QJvb-M{K*G_?{UKO`|o8$L@!RCx&=XQZo;|nRBba0m;o-q`A4wN{=>3_4*|1|
zs}5}2J+}4WH>{NZI3}*HuD(8H@7Vyb!1|cq=fJ?8(f{2j;N2QB|4{{j*Ai)~JVqQ{
zMS#4(W`F|=^ZP&c0(b(LIly4Z1D)ZL2j$N_OTF({_o3-^rIyoF1590=L|4-jFkNGD
zQ%TdHmF6xW3_vjI*pxxap!{TI<|4S35^>tYk%;4gCOhl?J3G4of|LiQ4iF&7-xz?9
z9=dZWO?ZFi{8!=w{x-o?3!kS^FKIW6F5^U)AiBZXU65Lgg=p-$4|Ux7F#rax;s78t
z&n+%~y^YUGN}~F2kby{tKA;}Sk5W%>q?`WZt~cZn`4pLEw*O(`sA3>`53B|t7de~4*|}%1O9C2ChnaaD(gptx3b-HcY*zB1t9QtqqolDw0f8<
zqO~5n>`Dy;v-emiR`_D@-*7MklqCI-Px{Y{kq$*XNcVsDg67EOZ6llBinisP`-o-G
z#PvpvP|Ibgcrc0#(8_s_F1OtXhz#Tg+(ctPxW@h`5(mwnSg3rVT5=JBFCOCdU|2k<
z|L+n2?$FJJ09L{OLGeITaDEK)L~MQRp>@A$yqp5KR~Mu(1i*!8}Dwa!l@iUj}2AksJq5
zL>%%M3j!DV&j|c$QCVK@%;+UW^@F$u8d#KE=YeGCc5@fJVJ$L}xzHP6csNnIF#VSh
zp@M7~PP9#$Ax5Q;?ZUwb!##IJTKwNbn5-lMsYQRKtmOM
zcRIHmbwep7e@_UN!Xzbi7DM(1hGj``ln<>UpT#_DQ8gJgt7f~!x(uH~)^Sp$wZ{Qp
z*J;NvR)X-qv80Uyqlx6Xk0kKAkNi;@Irb6j>C1MH3bsB!OjHpW#Q17<
z^xk1}2q(d>>dMezxOo#V!N^_Qbhp7|_lz>vt$vFepwLdC0JTrajk{W@Cr*dz#$UnA
zzv~gpR?IBDG*yJ=U+`B2ioqb%PA*ht!?HfDSl({FV(u6NCH8A^j>+@$FLd2P=rzMK
z+)>QhTU<6(LV9=~zljj%Bp@^osn;uHVe~^iJxVZ3LfQ{WmlAyLD#a~+e{|ZudmAN%b&iSzH$U)
zXGW9F>D7ox`Dlb<(>#d`#~fS(f0ig3Rg+tbH2xzMy&}phEL?pSYFMiA6!I>d|p0&c4+3CM^&&GO->5V>q?Ix?0PPzqa&4T$`0)YNOFcB
zph^V!dP~K_(-x&n=xCgj)CRYFAwp4;Sr>Lx{bQ@LVOm1MbSk$&0(o@Xy1f-291?Hj
z%#qgh+b;$Lf&!0KT7XK`M($!;{j6-X;^LvjbPdeQ}`L6SM&&
z;0|ZsbIaqI!lKE+ym6Cwk%*%aUIGjfFqjZk&R=5n#YRFV8J&b?h4rxT)=U4$Y
zmysz$2PGg)Ivv~5u*4+WbjnBf+t
z6qez?MyMQ1ZJRd=lm?P9Y!#ktSBSM5sEUe1Cuz+*Maa4IcYZM7V;WhJzoIwX*UI
z2i9-yJm&T{>!ZBpDsH9^ygrF3Q4}mX{=WLhB%RezG-%)R5B_KXfT5jq-~^e-Ah^w8
zmtB-I+g_Xsc9|cOH{H_5fvHewcvt$;A)tMJT2{GIt{jA#jeDn)hRQckP{x^mh!IYZ
z^L-3XqeYE%DRxKJO9O6(!Ln^&i(qNOLTSQ;h%%Pqvdl93!fHEeZzJh$hp1`SGc7rS
zwhEw}vO6Tg%YQmGbQ@S7xZCnL+RGl*hHD=4qjy>MP{g05Ju+y+v=&TB76vB-)IbDb
zUsU$7O&s
z+{N98_gsqfZ_aLpgzM2Tt{?R>ZdKnfT*wnCSI2LjcyGJ9Um1uTpfKPFx3L9MkJ2yl
zg@6b7!jhg$8>8*zTs>R{Ap=Un5*;%WbkQ*H(RQ=2HndG?G8CR@mgJR
zf!!|fNJ8TWVcnBCrJD=5hc`j6F>jkLQ5Lq0O=zDKlYlG+$;LfSNk-6+YCXb-d)f+^
z*57at2r?*?C901QNDWQTb4P#>eT22sY!UJI#kJE~`N?jn`qE-*8sIpG&@W4WsMkV9
zR$WI{hb{2__@*{yTq)bVW$$N>;?fVT2f6r=OHT}?dvIn_^eFu-FTZ_f
z!8LNawzqt4l-xGD2X44G_0-k#G@kJkFO#40G;EVC>#L-K=2{h#NYH99~UQN#afxnty^dbyTy
z$9eL-%ZUTN5y8w~4dU#t5po1br2JnGW3_Vwuw3(=zEr!J3nar7(M%ixynmCx%2`@CDi|Q0H^w
zG#m^Zl>LgEPuBXzbC2Y7KVO=>NsPsb{ZfJ3nGb$skucGD+w_|&$Tpyq*pNADUDI5E
zWtV9wg{Ad~w#1QVp%`ZoL)$C?^e$y_CYfqVjxe;79P`+8Fn#%Lq0`!;Fb;(KFYcwTEMA
z@?28a^Y?Q&vDAb&qp9I~s@6O9T~J_@J)wX8-eWxx)nw(IME1c%tD%|}mG)bIWa&K8
zquO0VDx}W+0u@xs^kX~J(i2BZ;)A=SHeqtU$3fenX7aq+fuP_;K;q(xOJ2k7QTF^N
z9HwkEsb3^gp_p2XxCQvxP=*qz7fk+TQc+N5B{W3@%d8r7P|bX>PPJdMRG*Haj*dY`
z)5~(8zoE3y#e4B?S$XSDqSkRRmN;llZQbf@pu{vzc3JGoW%8;UcDW(03T)
zzf!VNv9gEHc`F%om~}7n)O&|0W}&roYol;EZ<=eCO$S#o7;3~iE&cQp
ztPc_Ur${UNJ7g|mh@PM?8AHiSS1EOXdC*Hb*%-gB?B<>ktCc^+;Y-qjcV^l3@=ZiX
z7!4|H1C@xv7lkn)q!2@%v6Mv0@HO2FO!ODRgeY2lmRdOlO#GE~yIOU>6OFz2`Df!8
z2ymlSUg#(_GH5im+IhY;NL(m?Cpy%@@#5S~mq7V9hj*(@o9pf6&ghM=-K9S=
zZ}c$hnse&j{1ZQjEkOI%pMCqlBrPhOVC?Ckwt5x^BuNJ`HKll{8(Np9T71YWZ+uy{
z6T#zcWXI%f;6;B0%N`5KcZ^bn1oLu;rW2W>Cza*R`Rx-N4FZssc;a4$ZId{$_~E$&
z?P!j}p}W_#gn>b1Qlt!|9_2}W6rDb%R`?K_{s3CP`^fV1jFgOE+;BAfP#xgIl!VFD
zbc$D6B&}F%QUw@wrgW_f#g-Re7#6_o;-i9cr2$hr&IFacF3^{=8zsQ>=>WZO1M7n}$4|ApOr_5s%Vq|R
zofmYAPBH`Y0#Hze-X(uSf5Awg7>QOyf;oWgLpMmr^rHY2TE{k5$JSq`qNz5My4I&u
zje@0x7m|uktN0jGI1)C;{Hm%S!P>9Ba|_lCZ#Ftkjnq#6oG|9dIePD9=Ft-^|c>zlfvcD$Cy+6!rr
zW-Lf>tn(KJHb0t~k*pT?v2)7%>hyFZQlL_6it8P(X7nEKi}9rL@<=>y=xdWq??4*mCwqVJ%j&k%bXnvZ=U%UZ8v`Y9+CRWF`>1-ePl;Q#>R%~V%)
zWeMX+TaR2HHRPZzAesZ;&ppzn49E98NKB
zu#Ufx-A_`Ooxm-j9naL460W5g4@96nWxDlH{-tFb8~qq24u6#CM+LV#7a)ZKAMz#oP@^Wh%+MV%
z|JphQXfyRvLBhpjbs2}bhg^qTgf=g31k0~=CU{v`yreUF=phDYY|lc`mDB8ls@yB;Y&)Y=RD*#jLpY8cI&!l5uH$@vXGfiG!#%|F
zE5WZE?D)SBi6HZFJj6zNO}OsUNS()f7U!mQW~fIf707^$>xSV9G*EnUNPE$ITw2fN
zEIQpn^U`ICYx$g2P8z4n@3$Gc;cVn(II);NLz7X5OCa{iS0>ghtmQcPB+QRc8>8_f
zc_3gdtgP$Q;u!w-`;H6qQx)g+v%_9XN25UohR(d>;~(NbwU%k@{}h5Q^nIpk<-m$|
zrRVNhs6ZmchszK`Hs6Ny2~(J5bz)_=A}}@-yWjV*!RVz}hzd7#%&BqM!$PT<7aW~z
zK)wU+3I~&{FGPpkGEaDO4P#uBx1zI6&usbYP3&ryC~a>3!R~$a;>wM-0O7rVf6M!K8&n
zCx@O4QwS#Umzvw!6S^S;p%H=-*pwRG`;_K>yS3~pv9z98ZKb>r=6&zh{@Qz*Ty3Ry
z{p@gHbs)hw=cB^X-bH}e^7=~N-LY?w#36vP$gjwt()p$UGK}ql3COmv$R&lNx=+n>
zDak#Cg?CBg=1F94f05FCC_^a)DcXOCN{$MqC&MW`)1aFRN3$cQm($Mobo7jyPenF~
zmdU<+S8=LAR|%zSk(RlZRi^pP#azv}d-2BxNj+1qkDPLoF|3%b*B^EkKSFMNIybG7
zVoc)q7%hILR5-bAnQ=yk_DRc+@U8#vGux)sby#*o6AE^Ru<8uv=Yw^9g8S``Y$
z)DnD+PKU3{quFBdWBjQZvpKjLiPSAUljJ`I`J`ioS_a3E6fy-^YZ(w=B&SFZUdK&<
z;-q91u@wzE`t4h9a{@nE)$U(<#yQZ^#_mSE{w5|B`UDjx8incSFlzXaba6&=>yoY5
zB061UaB`wzDGRf%0<-QJy&@+S&TE0ELpx%p-nabM`<7)D@>dJ~XA3i*KjwE(I222k
zn>}{8MD7j06DGf3RUlQPW-XhGW65IY&_2+>d|uR+Pg(m`S#f{WLHYWmEPt0L#0h5k
zhCwmDIY(ktFlObj8NFQ|H-W2C_guR->3=@&Wj{N349SA
zINzl^kD1$uJCG|GKbJ3<#iz>}UdqYA6?k6JuQw$olJpL2AgmcNVe9F&1cn8mXke6B;T#RIbkz|9nyX}eE7D|pnZ9~DdmVT
zjJp%a>H~FOB92aYyg|E??>$h(HzLG>%f)Qfl@d}uzhW>Wbd1U^?{C7%G?&B(Vqo+1E
zp6Em+p;8m`df^*OqqEhAX=quZY7_0FTY|69m@}AJc#7PFD1_U0CEc#SCgoS_jtY&x
z8b{FGa`J2O=%1+Pwtd+H5w|F(c^ABMY#EnBS9t-U(FR75JN9oT+#Xh6(X2D_9
zAG3D<4H}w5Hp?g8ZQq=V9`4;w6MYZv360`2BYz#7KcaY%7kGH@!1D43ZCm515Aw|a
zY)}f51>>3Yka*=IZu8KP8ZwP)$+^+P!|$-x7L(SludZ9oD|wjqP7Q%z8H9h5EIjyc
z=Y+?hK*@##n0e`>I8@vHX&+vF_L|S{Z;3UmNB+^{rX+l%ZhzUyH1NYoMQr|)oxGOe~*3c~}w
zOh;Fk+S1VUH|JJ{~Q-{#pr1aRpKY{`*KuT%kQAs-{0Uqd!GW-&KpjA_iqGP
z=spl(@>{ceJ`(VLr&8{=nt{JWd>~P{JWNAqsqpO_&rP|TMed8FUru1Ok2q)AA*+%4
znoN?DBSvR&g@&2+?$E)`^4;NX#VG%)r2dUt;A<>N!IlP9BxLE|KkTBVZb0YER#r!+
z4r{6pms$^Js+l7Re?D$utot1`V*4`#{`Ceae1*iz&O9-+_$POnJ1NID|<@njy
z`aFV~_0>yF{T=jB>*~R`0X97!dhmJ_1W#ty2e^6KC*@0oubq&G)TTeScB|=0Rb*UP
z5NNo>dykE7tlBCMMRtOAgIIB}$@?KYixhqNOE^&?>qzA26>?-aV9Ijw7->iO|PPnD~C476WUkhf5WpO$3@M
zpYj)2C)zSzzEM7(nAat8f^&Z)Y~GDyI-HlL;2mEp(Pyj0?~MMd*g7n@XYwoz%WvrOED5Ur4R0wV>bx(qopy~KIEz^Hh#;t39`bxTF4e7PNaepcTF}--Q*hHHL@5&rJDTP8HQcOL%!{ZZ4
zY}kkQmkxoFSYgZ4Jm>7Dr{^85Oz(-9b-NY8veATzim~m-z=)R%V(_B7zrVR%S$Xog
zN`9|K>4s4_tQv(fp)%mk9BP4*qx}}p-edEWNiUBgCP}YY=6@1{1XfXU}mc9{G
zyM6JjX5z7($wG%?;Nk5yn*${s_6rapmrs(@+{dksE##PESp>e7LKqsV&!@cj?uA*!0{ren3eyzfUwOzJ;cIe~oV?AHfEOqb4
zju*S-;^mWjPJ=9P(wBa1hZpr*L1dxUd_4wRr(X{PMx#$Ouqox}V<}+;suSZ=Qw&G`
z_Y##YKcmWfj)x9z+#QgDs1zhB^Rw1mBHxv^H0@e6!whSV4$H5vLr`>V
zG$PUM`kBL2Q?1Iy{Xw(W)oHcOD6RP2;X_e#kQfybj}n3bf}qXsBX5-7UVA#~Oy%T{
zPh2kFzLG}`*NBxZNv>X><>^Z`mzoFVzgr`vV@u*-jyNu&mfGR7~oxFW3zd!w>I@0)jTawYeuQRBy50rHa=hW8^4U
z;a-k1ivrv@J#+%PA*mzC`@r*{rqHwbV;{-U)1b|&C;5c&%m`+ubEY#7k(BEJMtTU6
zQw;_(L(y=={xQJ?h7TbspoBlpxbc1F`%iiD5MB~EtcqQsqV0|H73HZ2l1lb^A
zC*Qtp;%9M-)*F%Kawbh^8;PXPTnyRWe(xld&%lkEoHy>Mq@2?!ulD}-ky+Cn|Hw$F
z9*OmL=h)cvjXxxim$#G>j?_tAhC$yiQhyoF2~iLu(qD`Grk#rQ((lTI9&ae|W@
zRDl#`KZ!wR{CH;)3tuEuO&oPjN{XN4XDwQ6zmy7f$scrH<=0y{i?`C>JmO_?h=R*7
z-;_Tkl)^FB2o++Me)N|v=`UUD9-W{`d>TEI3@yC{R*GvFWlNZ$U#MS1s5QN`@-u0N
z^A7|zKl3EXJ1L{(G1h0pu(Q9@AG|K>eBCnsy7qO=K<(?conYaP=|@qIa%feoYvw}C
zAcPnwW>t8V0(dYDx&s2m6A-NB!>HxA84|Ma
zpWC*wHXjLcl({@O?-psx2oXf2wne(s#(zOVLTg7y7$i#6?siyRBY3e1kE^ut561Cn
zdGJl#@Rm`q4t=pqb=822BO|ag4Q0XhJB3h8
zgnq0Im$!KzH<(Hu$1cpWP-N?*3Vy>5cFQBCuL;8)GQ&Q2gBAoul=NV857YfGy1p?;
zlcnpnZQHhO+qOMzyQgj2wr$(yv~6qJxP8w1A>!V+70<7Vs;rF6%3aT1YweXv8RA9F
zK{yLsLUUw}8k9mx(2DAr92IZ{l(DB0VL7hx##{n2F>-RanHspMZ952e?Z_nOG$apH
z5?=UVu_~PAx_HjE^pBNDVt=3#&jTq%P32tb^29VYvD~{!x>Pf}7RB6Ky-Y;4_YPbq
zQm+D*aTzwK{c-MhwtrqZvV%@MJV-pgU^B9yR$K_6Xv%a#Oi24gBnI=I23GJz!x-fN(*rjYcEREs;})sbAIfBM9j@#Smu(6
zI(!$2v`B0UDq;#=xX=dZajh(Gv5Gh1b#6ZYGcY5fnevwM6#5GB@OTD)!MyxjLk-qb
zkXy>nQXd7k5|;&w^pDsKxDvJR=@e926D3NSLcUOL^=TricW*(js`DDu8FiT=MD<*V
zKM#njAK;=DHBysslu;J~<{VRy=fw3K>(LBP)Mtcl^5p{9VBAFc6I6Qz{(C=&>)2u8Q6MyO7y<+`G$M37RDTep
zh01uM!3A+tWFK=Ny$F#AnH0q6FEbPpG?K)T6H^dI;c-w&5X#*Mf*}McISsAgP?RWu
zBbh2tHMS&{CSZ^hXvJJn&m&+20MGFRROR{wiU{%h1XJn!Kj_%2kzzS%F1JgP>#LQW329L`Cy9
zCp`0YQ3o{yHm9`8MT0Q}CxpRIn?*aR>Zssgo0534?A7X^@KDX#?gg)v0YwQ1>|NML
zngR4Zc(R0o7unMV@bmfDf>EThno$9a3r_0WA&3Qs8yrcJZ4`MT&-DhzQ}{`su`>U-
zOkKPca|sU18f)N>4xb%~QCGZf{;~Msl3VthOo`C`Vv^-2(PoE$abT7p6h~Ga9s#ku
zT0*WhFN0P{TCLje(29l|DxpC@-pgS4%tupdRENR`0>wZ`vc`!*O{7!}&tM2OBZO!O
zA*xZJfEDeN?-K(IfS5WYyhSTXP*KZ3KvN|u2WPnh7}v*{4U?ic5=ZPNlVs)!Y4K!+
z6u6iw(Gth!F#G11k(yAL7?$Hkl9cl_At3=ytR*@0zZ$?$S*)d}`7IHwDSSwsjyUh`
zlcET5kjOSx3Q;b)w+X!~o`N-4DbCECq{&&oRJ|aydvK=5mrIeT&&dC@4H#JmBZQ_z
zm!^_vd3gsbkB=}=)(=+fcZ87?ln>q^Siik`_vynSDLKjGody3h1`B=ODegHztBrRaCf4X)l_C=YmIbjQ@va{HeaF
zyga+IQcXNPvG+rs%@=?^6N{|^>2rFEWh!^Gcw(YTL;*<=LSN7}|41P&`kYilF(&A&
z-QIm9*$+aponbME!obm@X*XS(f`SYT9e_zNd~FG>fVqW+fG!hBXz)wFK(A7yxR63X
zfWg9}EC@oeIRNz-5#A&ZkqiZ3Bcvh@UtEchy#vE%fse|@o{YnG2~Q@_`HTh-963M*
z_@z(9SqEw8OEJ_C4H{gAGA%Q7SbV-oJIE3zn<2O$k4>hhNJbJUJeB2}M
z!vZqiPy!nyjI9(nBc<0%ggPkVNP)#C6yyFrx^^;iQCz
zgfvOBYp9n@
z>zQNB9s6NNKMi|sP+q3xAG*J8e#+DbX^y+n7c;AxrbjJ#HV)KUN541kech}VEn9)9
zc)33>a7VMB^R4uv4l_dO+D{)qXn=a0HJSr`?xz6VvhSxbt7BdYrlD?3Zw1L>P3u^i
z-B2}+%lUa-hJfispDew+Z32&GUgjXbmydn7*N}`d*<0MNU)MkOqIHvBS(m~O@>Z}9
z?wh@iJ1*9BRlI?8^VDS@Gf!eTDki_J!!H6HPpt1U51w8uY~2q@4@#x8b*Q*5BhY~H
zDw^lq^xg)6Z_s~fqu9f!bW7Ld!iLVK
zMPYlJ2bNvQ%Z#+EATUs)A>*EwQjwF^X&w*4@YKA#e0&TG^Q<;bnh}jLSQ%1bhDIWu
zQkpWlO$^7J=-{O}Mz#=-7p~Dr(xD;<%#sqi1tCqJp%M32P7}fy2_$gMnKo4G+c6~I
z3yagjB1Hq>Kds4A;3z|xqiSwLun2>6VyuSIx?sXybflWaS_&O@B=T;WT9Clt_6tb~
zPTwMQyP~T}Lp~iulC74bsxq2WED>r{eUlOE5K@GUGfIm>*>Isr)8WLdJuMyU
z2%#QWBUeh0*}+-SXDAq_}Z=r~r?mJwxH^F(@#)~%U0
z&7|3tVYrF?!*^9E7SkLezSOmlN@Qe|vt6ew$g`d1XNp|Oo}F#wPqf3fHNUPJu+Y8Z
z2hhvASA)=@3pxX?3(lE!{$f^07h=I$;?yzMW-q%p?07V6Xz8k41z7&Fshxfz0$9Er
zKF~NS6QiX0ot{Q^+MF>YWQb$pQBdT5yrCM9_B)v`B_1l3iY^#5^$#8p99J*|43;&B
zXTe(5nqwsrn=V$!*0MrS!sqMbD4Plk8zj0K>t7QRwOU3I;?GfiF2
zXW+dAGFVWU*#H0lfy_uqPi3{UmlgPLe_g>n`Kv7UI`N{h+#PUknoVf<2m^r;;GfoN
zePjb$+Xn*U-3GvaAOHbMgu)mIl9>py0YEGW(H#o%?arybo$#rIn3h+iWIL{w42Zvv
zzH5I%fA)OEeD!~sCTpatY9v=!E^~^5Bl-a#7y$bNg8?Z3K~O;0fak$-N^PXXq8mXd
zA6dOFXfv!5>`uQU^ZT1S#KG)(LW#eG;rUl{>*quD)Ye{m;~u_q<-tq<054AEP+4`O
zv*th;zwt-3yZv5C__N7ZpO#MgZtn6$xS&q@dRupOvScvefn=}PiM?HpaK5qQgLJS&
zir$)j6654iX`fu^5V(P!c^h+*vm2E%Q2n9Xpac+9c9m1Z+zxzn&leLv>&q$h%J?2x)fT#
zL_N@LTx;_EF4*qu9{uIM^vkn$_I{0T^!>Mg?2EZIfGYdNgG)7T7fdOck$co9Xc}Cw
zy~OgcZV#wm*s`x`ZamOF9LG^K02Cw=sbmU~YDUKgP#8mg6m)r0Jsd!e-gXD!<@?QS
z)OX@LS=UaCA}*k-uJifARR~`9*qg#5Hba=@SREou;pqrNl(CWF!R~%03Ca3$R7grp
zj(>c3dU7;wU;p^<^dR&;urNqofY1N~Vp~~STabk$r3I!Yrw22{j|rUnw!|@oV#O5C
z1Fd~x=hgw=YI`KE7hD#{!)AP6Wk6n@_lZcCsA{2DHP>IPTUI1?3iHI2m!SBrr?HZYfC
ztA1;E4Z%A(+fXaW224YV(s2}$4M|ed+nH-x`8)4l1|P3M72Uj;zo49DjFB
zvUL>fyo+ppWHd^qHbQ^-N~IYkL5Z2c(ebv96q+hcwAgJtL2;ppu7Mh4F0#4F3grK_
zw+}z;n3pU9|*O
z1#U{OAfkmzQERTVky;;5g$#eXHzwz-o|_{A!!S`nEB)k;hI{HA
zoMqGkFOO#dl(@IXHtvi%<4fCte~9Oy+KcW-bKU|TLRD#MUrpz*1O4$`9m=Qk{EjvH
z^4%=u6UTVK9IS($0p~{~MKL(oB~vx2yI5}tQYtI6_-80h=-5?B8#@$xdP2$rTEt)Q
zJjO0q*GnCVRDNu#B8xD-Z}_ChCOe5Uu)|URS^3hPD^(owXyFAUNMwkF{~+RA5)J3x
z)3+c=lv7ATM5s3EpBNFG9G!iTT)N=iPgy$~*+c)<+(XZX!_k(dvs~C8XZWyg&DMHB
zOqiLhFhJIG_)Mqj-0#;v@+-pdOyfy}{Qwb#@wdXA7!1(gG#xXMrA(Beq`3qJLHs=DVwJOsD+di?}K$q;&Qfj6j3@pUK(eb8@VIVQg$j8&~s^D7`A?AS;ki9XT_
zcV0r;qrbOU1-U?>_E5D4SUqK}SoT+=Ox<)3-Nk509QrK0<)8y
zHEL%XYg0vnh5Pd+4}gpW5^I$i+q6!v>=Hv0k{>NkfF{EuZoGX0G9PIY=8&FA9tHw&
z4eb6|#aDBJL|yq|^p~K2u~FNaehCspE%%0DSn%BqPlxDrxkD$6R^4xt*ppwK5{YxO
ziqUU-Vx(TQJ6J;!$V~d>;ah?c7u=v?#q|>aNpyx>hui=`T&W|Mbr9*w=2xeiFWcMKDrliI=Nu^4rT^E`ouvNI)xy=SER6P<
z1=8Jf`f9jfIh>Q>cyaRk9NfHE96XOtGNHBRQYhi~&9`Glr1m>d@7a!5^Ye>*y^E8#
z_qD({Iv(qDOmn_QZpR=@0o
zs_JL+i|HOc!*LG>9__IY!QS8EGUfAH*N@$4nND|52XZFdy07{YSotV`-RjM=_a4i8
z%sk-k9jIxZVi2nPa3-%wE!hg)xqN8$qc$hgjyc`K~b)AzVjBEI*;t+
z@7@A8Ycd7$;lx&P=3k#bD2Q0mm*pTb3VU;zk{*p-J>J*Pn!{Ye|Im}z^k(FxeB6sf
zPLePCKls%0%wMp;rlsqfn(M$Zq^IipB=mTdZ$3UBX6jHF>+-wRAe}g#jf-B;TQQ
z1Z~Y}wF&0Ce!2fr!4-r1W9$t0!j@OH<+JTfcBpo?;zxq_A~E#weL^|=5+wgRwVPF`
zvk1?z5X*TKy?>#XQP-RrC{*I&`acSQ8BwE?sCs+4V|ce-7@
zuy1`M<+9D%RsDuj>!0hk&aDSMPz9Zp#Qx8t0_BUnf^_GMPbPNs=f^tZf>mkcoI
z>fZeHY9&e=tiPFZfo2LTRhy0hAqL~YeyE9lIpYFGP_!9xy37=eiE1>H%gSjFo%ySx
zakGi*Yzm`d84ck?H1{A1u&KZ6hmgkA1>!SNC?`eB<+n0K7mX;GWElCDqZF)@EJrBV
zBE0+370?5RLqQG#e)38+kNcQ{cy42oF``^@a6tUu}vm2ud