From fb09f2126b36628928e6888b047582f8995518a2 Mon Sep 17 00:00:00 2001 From: Michelle Date: Mon, 6 Apr 2026 22:07:38 +0400 Subject: [PATCH 1/4] chore: update dependencies and replace vite-tsconfig-paths with native resolve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dependencies: - Bump next 16.2.1→16.2.2, tailwindcss 4.1.18→4.2.2, playwright 1.58.2→1.59.1, biome 2.4.9→2.4.10 - Bump baseline-browser-mapping, lefthook, @types/node - Remove vite-tsconfig-paths in favour of Vite's built-in tsconfigPaths resolve option Dropping vite-tsconfig-paths simplifies the Vitest plugin chain with no behaviour change — Vite now supports this natively. Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/CLAUDE.md | 9 +- biome.json | 2 +- package-lock.json | 1501 ++++++++++++++++++++------------------------- package.json | 15 +- vitest.config.ts | 8 +- 5 files changed, 676 insertions(+), 859 deletions(-) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 8d6dcf0..c29c40a 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -8,10 +8,11 @@ A starter template repository — not a product. Clone it, add a UI component li ## Tech Stack -- **Framework**: Next.js 16 (App Router, React Compiler, TypeScript strict) -- **Styling**: Tailwind CSS v4 -- **Testing**: Vitest + Testing Library (unit), Playwright (E2E) -- **Quality**: Biome (lint + format, replaces ESLint/Prettier), Lefthook (git hooks) +- **Framework**: Next.js 16.2 (React 19, App Router, React Compiler, TypeScript 6) +- **Styling**: Tailwind CSS 4.2 +- **Testing**: Vitest 4.1 + Testing Library (unit), Playwright 1.59 (E2E) +- **Quality**: Biome 2.4 (lint + format, replaces ESLint/Prettier) +- **Git Hooks**: Lefthook 2.1 - **Deployment**: Vercel (Preview on PR, Production on merge) ## Breaking Changes (Next.js 16 / Tailwind 4) diff --git a/biome.json b/biome.json index 57b2a07..9703e95 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.4.9/schema.json", + "$schema": "https://biomejs.dev/schemas/2.4.10/schema.json", "vcs": { "enabled": true, "clientKind": "git", diff --git a/package-lock.json b/package-lock.json index b053743..99d342f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,45 +10,40 @@ "dependencies": { "@vercel/analytics": "^2.0.1", "@vercel/speed-insights": "^2.0.0", - "next": "^16.2.1", + "next": "^16.2.2", "next-themes": "^0.4.6", "react": "^19.2.4", "react-dom": "^19.2.4" }, "devDependencies": { - "@biomejs/biome": "^2.4.9", - "@playwright/test": "^1.58.2", + "@biomejs/biome": "^2.4.10", + "@playwright/test": "^1.59.1", "@rolldown/plugin-babel": "^0.2.2", "@tailwindcss/postcss": "^4.2.2", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", - "@types/node": "^25.5.0", + "@types/node": "^25.5.2", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.1", "babel-plugin-react-compiler": "1.0.0", - "baseline-browser-mapping": "^2.10.12", + "baseline-browser-mapping": "^2.10.16", "jsdom": "^29.0.1", - "lefthook": "^2.1.4", + "lefthook": "^2.1.5", "markdownlint-cli2": "^0.22.0", - "tailwindcss": "^4.1.18", + "tailwindcss": "^4.2.2", "typescript": "^6.0.2", - "vite-tsconfig-paths": "^6.1.1", "vitest": "^4.1.2" } }, "node_modules/@adobe/css-tools": { "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", - "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", "dev": true, "license": "MIT" }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", "dev": true, "license": "MIT", "engines": { @@ -59,9 +54,7 @@ } }, "node_modules/@asamuzakjp/css-color": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.1.tgz", - "integrity": "sha512-iGWN8E45Ws0XWx3D44Q1t6vX2LqhCKcwfmwBYCDsFrYFS6m4q/Ks61L2veETaLv+ckDC6+dTETJoaAAb7VjLiw==", + "version": "5.1.5", "dev": true, "license": "MIT", "dependencies": { @@ -77,8 +70,6 @@ }, "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -86,9 +77,7 @@ } }, "node_modules/@asamuzakjp/dom-selector": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.0.4.tgz", - "integrity": "sha512-jXR6x4AcT3eIrS2fSNAwJpwirOkGcd+E7F7CP3zjdTqz9B/2huHOL8YJZBgekKwLML+u7qB/6P1LXQuMScsx0w==", + "version": "7.0.6", "dev": true, "license": "MIT", "dependencies": { @@ -104,8 +93,6 @@ }, "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -114,15 +101,11 @@ }, "node_modules/@asamuzakjp/nwsapi": { "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", - "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", "dev": true, "license": "MIT" }, "node_modules/@babel/code-frame": { "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "peer": true, @@ -137,8 +120,6 @@ }, "node_modules/@babel/compat-data": { "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", "peer": true, @@ -148,8 +129,6 @@ }, "node_modules/@babel/core": { "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", "peer": true, @@ -180,8 +159,6 @@ }, "node_modules/@babel/generator": { "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "peer": true, @@ -198,8 +175,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "peer": true, @@ -216,8 +191,6 @@ }, "node_modules/@babel/helper-globals": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", "peer": true, @@ -227,8 +200,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "peer": true, @@ -242,8 +213,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "peer": true, @@ -261,8 +230,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "devOptional": true, "license": "MIT", "engines": { @@ -271,8 +238,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "devOptional": true, "license": "MIT", "engines": { @@ -281,8 +246,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "peer": true, @@ -292,8 +255,6 @@ }, "node_modules/@babel/helpers": { "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "dev": true, "license": "MIT", "peer": true, @@ -307,8 +268,6 @@ }, "node_modules/@babel/parser": { "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dev": true, "license": "MIT", "peer": true, @@ -324,8 +283,6 @@ }, "node_modules/@babel/runtime": { "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", - "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "dev": true, "license": "MIT", "engines": { @@ -334,8 +291,6 @@ }, "node_modules/@babel/template": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "peer": true, @@ -350,8 +305,6 @@ }, "node_modules/@babel/traverse": { "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "peer": true, @@ -370,8 +323,6 @@ }, "node_modules/@babel/types": { "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "devOptional": true, "license": "MIT", "dependencies": { @@ -383,9 +334,7 @@ } }, "node_modules/@biomejs/biome": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.9.tgz", - "integrity": "sha512-wvZW92FrwitTcacvCBT8xdAbfbxWfDLwjYMmU3djjqQTh7Ni4ZdiWIT/x5VcZ+RQuxiKzIOzi5D+dcyJDFZMsA==", + "version": "2.4.10", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -399,20 +348,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.4.9", - "@biomejs/cli-darwin-x64": "2.4.9", - "@biomejs/cli-linux-arm64": "2.4.9", - "@biomejs/cli-linux-arm64-musl": "2.4.9", - "@biomejs/cli-linux-x64": "2.4.9", - "@biomejs/cli-linux-x64-musl": "2.4.9", - "@biomejs/cli-win32-arm64": "2.4.9", - "@biomejs/cli-win32-x64": "2.4.9" + "@biomejs/cli-darwin-arm64": "2.4.10", + "@biomejs/cli-darwin-x64": "2.4.10", + "@biomejs/cli-linux-arm64": "2.4.10", + "@biomejs/cli-linux-arm64-musl": "2.4.10", + "@biomejs/cli-linux-x64": "2.4.10", + "@biomejs/cli-linux-x64-musl": "2.4.10", + "@biomejs/cli-win32-arm64": "2.4.10", + "@biomejs/cli-win32-x64": "2.4.10" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.9.tgz", - "integrity": "sha512-d5G8Gf2RpH5pYwiHLPA+UpG3G9TLQu4WM+VK6sfL7K68AmhcEQ9r+nkj/DvR/GYhYox6twsHUtmWWWIKfcfQQA==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.10.tgz", + "integrity": "sha512-vuzzI1cWqDVzOMIkYyHbKqp+AkQq4K7k+UCXWpkYcY/HDn1UxdsbsfgtVpa40shem8Kax4TLDLlx8kMAecgqiw==", "cpu": [ "arm64" ], @@ -427,9 +376,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.9.tgz", - "integrity": "sha512-LNCLNgqDMG7BLdc3a8aY/dwKPK7+R8/JXJoXjCvZh2gx8KseqBdFDKbhrr7HCWF8SzNhbTaALhTBoh/I6rf9lA==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.10.tgz", + "integrity": "sha512-14fzASRo+BPotwp7nWULy2W5xeUyFnTaq1V13Etrrxkrih+ez/2QfgFm5Ehtf5vSjtgx/IJycMMpn5kPd5ZNaA==", "cpu": [ "x64" ], @@ -444,13 +393,16 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.9.tgz", - "integrity": "sha512-4adnkAUi6K4C/emPRgYznMOcLlUqZdXWM6aIui4VP4LraE764g6Q4YguygnAUoxKjKIXIWPteKMgRbN0wsgwcg==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.10.tgz", + "integrity": "sha512-7MH1CMW5uuxQ/s7FLST63qF8B3Hgu2HRdZ7tA1X1+mk+St4JOuIrqdhIBnnyqeyWJNI+Bww7Es5QZ0wIc1Cmkw==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT OR Apache-2.0", "optional": true, "os": [ @@ -461,13 +413,16 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.9.tgz", - "integrity": "sha512-8RCww5xnPn2wpK4L/QDGDOW0dq80uVWfppPxHIUg6mOs9B6gRmqPp32h1Ls3T8GnW8Wo5A8u7vpTwz4fExN+sw==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.10.tgz", + "integrity": "sha512-WrJY6UuiSD/Dh+nwK2qOTu8kdMDlLV3dLMmychIghHPAysWFq1/DGC1pVZx8POE3ZkzKR3PUUnVrtZfMfaJjyQ==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT OR Apache-2.0", "optional": true, "os": [ @@ -478,13 +433,14 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.9.tgz", - "integrity": "sha512-L10na7POF0Ks/cgLFNF1ZvIe+X4onLkTi5oP9hY+Rh60Q+7fWzKDDCeGyiHUFf1nGIa9dQOOUPGe2MyYg8nMSQ==", + "version": "2.4.10", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT OR Apache-2.0", "optional": true, "os": [ @@ -495,13 +451,16 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.9.tgz", - "integrity": "sha512-5TD+WS9v5vzXKzjetF0hgoaNFHMcpQeBUwKKVi3JbG1e9UCrFuUK3Gt185fyTzvRdwYkJJEMqglRPjmesmVv4A==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.10.tgz", + "integrity": "sha512-kDTi3pI6PBN6CiczsWYOyP2zk0IJI08EWEQyDMQWW221rPaaEz6FvjLhnU07KMzLv8q3qSuoB93ua6inSQ55Tw==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT OR Apache-2.0", "optional": true, "os": [ @@ -512,9 +471,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.9.tgz", - "integrity": "sha512-aDZr0RBC3sMGJOU10BvG7eZIlWLK/i51HRIfScE2lVhfts2dQTreowLiJJd+UYg/tHKxS470IbzpuKmd0MiD6g==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.10.tgz", + "integrity": "sha512-umwQU6qPzH+ISTf/eHyJ/QoQnJs3V9Vpjz2OjZXe9MVBZ7prgGafMy7yYeRGnlmDAn87AKTF3Q6weLoMGpeqdQ==", "cpu": [ "arm64" ], @@ -529,9 +488,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.9.tgz", - "integrity": "sha512-NS4g/2G9SoQ4ktKtz31pvyc/rmgzlcIDCGU/zWbmHJAqx6gcRj2gj5Q/guXhoWTzCUaQZDIqiCQXHS7BcGYc0w==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.10.tgz", + "integrity": "sha512-aW/JU5GuyH4uxMrNYpoC2kjaHlyJGLgIa3XkhPEZI0uKhZhJZU8BuEyJmvgzSPQNGozBwWjC972RaNdcJ9KyJg==", "cpu": [ "x64" ], @@ -547,8 +506,6 @@ }, "node_modules/@bramus/specificity": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", - "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", "dev": true, "license": "MIT", "dependencies": { @@ -560,8 +517,6 @@ }, "node_modules/@csstools/color-helpers": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", - "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", "dev": true, "funding": [ { @@ -580,8 +535,6 @@ }, "node_modules/@csstools/css-calc": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.1.1.tgz", - "integrity": "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==", "dev": true, "funding": [ { @@ -604,8 +557,6 @@ }, "node_modules/@csstools/css-color-parser": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.2.tgz", - "integrity": "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==", "dev": true, "funding": [ { @@ -632,8 +583,6 @@ }, "node_modules/@csstools/css-parser-algorithms": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", - "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", "dev": true, "funding": [ { @@ -655,8 +604,6 @@ }, "node_modules/@csstools/css-syntax-patches-for-csstree": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.2.tgz", - "integrity": "sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA==", "dev": true, "funding": [ { @@ -680,8 +627,6 @@ }, "node_modules/@csstools/css-tokenizer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", - "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", "dev": true, "funding": [ { @@ -700,8 +645,6 @@ }, "node_modules/@emnapi/core": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", - "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", "dev": true, "license": "MIT", "optional": true, @@ -712,8 +655,6 @@ }, "node_modules/@emnapi/runtime": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", - "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", "license": "MIT", "optional": true, "dependencies": { @@ -722,8 +663,6 @@ }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", - "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", "dev": true, "license": "MIT", "optional": true, @@ -733,8 +672,6 @@ }, "node_modules/@exodus/bytes": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.0.tgz", - "integrity": "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==", "dev": true, "license": "MIT", "engines": { @@ -751,8 +688,6 @@ }, "node_modules/@img/colour": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", - "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", "license": "MIT", "optional": true, "engines": { @@ -842,6 +777,9 @@ "cpu": [ "arm" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -858,6 +796,9 @@ "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -874,6 +815,9 @@ "cpu": [ "ppc64" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -890,6 +834,9 @@ "cpu": [ "riscv64" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -906,6 +853,9 @@ "cpu": [ "s390x" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -917,11 +867,12 @@ }, "node_modules/@img/sharp-libvips-linux-x64": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", - "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -938,6 +889,9 @@ "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -954,6 +908,9 @@ "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -970,6 +927,9 @@ "cpu": [ "arm" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -992,6 +952,9 @@ "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1014,6 +977,9 @@ "cpu": [ "ppc64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1036,6 +1002,9 @@ "cpu": [ "riscv64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1058,6 +1027,9 @@ "cpu": [ "s390x" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1075,11 +1047,12 @@ }, "node_modules/@img/sharp-linux-x64": { "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", - "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1102,6 +1075,9 @@ "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1124,6 +1100,9 @@ "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1217,8 +1196,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -1228,8 +1205,6 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1239,8 +1214,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { @@ -1249,15 +1222,11 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -1267,8 +1236,6 @@ }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz", - "integrity": "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==", "dev": true, "license": "MIT", "optional": true, @@ -1285,15 +1252,13 @@ } }, "node_modules/@next/env": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.1.tgz", - "integrity": "sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg==", + "version": "16.2.2", "license": "MIT" }, "node_modules/@next/swc-darwin-arm64": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.1.tgz", - "integrity": "sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q==", + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.2.tgz", + "integrity": "sha512-B92G3ulrwmkDSEJEp9+XzGLex5wC1knrmCSIylyVeiAtCIfvEJYiN3v5kXPlYt5R4RFlsfO/v++aKV63Acrugg==", "cpu": [ "arm64" ], @@ -1307,9 +1272,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.1.tgz", - "integrity": "sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA==", + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.2.tgz", + "integrity": "sha512-7ZwSgNKJNQiwW0CKhNm9B1WS2L1Olc4B2XY0hPYCAL3epFnugMhuw5TMWzMilQ3QCZcCHoYm9NGWTHbr5REFxw==", "cpu": [ "x64" ], @@ -1323,12 +1288,15 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.1.tgz", - "integrity": "sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw==", + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.2.tgz", + "integrity": "sha512-c3m8kBHMziMgo2fICOP/cd/5YlrxDU5YYjAJeQLyFsCqVF8xjOTH/QYG4a2u48CvvZZSj1eHQfBCbyh7kBr30Q==", "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1339,12 +1307,15 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.1.tgz", - "integrity": "sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ==", + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.2.tgz", + "integrity": "sha512-VKLuscm0P/mIfzt+SDdn2+8TNNJ7f0qfEkA+az7OqQbjzKdBxAHs0UvuiVoCtbwX+dqMEL9U54b5wQ/aN3dHeg==", "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1355,12 +1326,13 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.1.tgz", - "integrity": "sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg==", + "version": "16.2.2", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1371,12 +1343,15 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.1.tgz", - "integrity": "sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg==", + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.2.tgz", + "integrity": "sha512-CKXRILyErMtUftp+coGcZ38ZwE/Aqq45VMCcRLr2I4OXKrgxIBDXHnBgeX/UMil0S09i2JXaDL3Q+TN8D/cKmg==", "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1387,9 +1362,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.1.tgz", - "integrity": "sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA==", + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.2.tgz", + "integrity": "sha512-sS/jSk5VUoShUqINJFvNjVT7JfR5ORYj/+/ZpOYbbIohv/lQfduWnGAycq2wlknbOql2xOR0DoV0s6Xfcy49+g==", "cpu": [ "arm64" ], @@ -1403,9 +1378,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.1.tgz", - "integrity": "sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg==", + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.2.tgz", + "integrity": "sha512-aHaKceJgdySReT7qeck5oShucxWRiiEuwCGK8HHALe6yZga8uyFpLkPgaRw3kkF04U7ROogL/suYCNt/+CuXGA==", "cpu": [ "x64" ], @@ -1420,8 +1395,6 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -1434,8 +1407,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -1444,8 +1415,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1457,23 +1426,20 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.122.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz", - "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==", + "version": "0.123.0", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/Boshen" } }, "node_modules/@playwright/test": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", - "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", + "version": "1.59.1", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.58.2" + "playwright": "1.59.1" }, "bin": { "playwright": "cli.js" @@ -1483,9 +1449,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.13.tgz", + "integrity": "sha512-5ZiiecKH2DXAVJTNN13gNMUcCDg4Jy8ZjbXEsPnqa248wgOVeYRX0iqXXD5Jz4bI9BFHgKsI2qmyJynstbmr+g==", "cpu": [ "arm64" ], @@ -1495,14 +1461,15 @@ "os": [ "android" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.13.tgz", + "integrity": "sha512-tz/v/8G77seu8zAB3A5sK3UFoOl06zcshEzhUO62sAEtrEuW/H1CcyoupOrD+NbQJytYgA4CppXPzlrmp4JZKA==", "cpu": [ "arm64" ], @@ -1512,14 +1479,15 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.13.tgz", + "integrity": "sha512-8DakphqOz8JrMYWTJmWA+vDJxut6LijZ8Xcdc4flOlAhU7PNVwo2MaWBF9iXjJAPo5rC/IxEFZDhJ3GC7NHvug==", "cpu": [ "x64" ], @@ -1529,14 +1497,15 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.13.tgz", + "integrity": "sha512-4wBQFfjDuXYN/SVI8inBF3Aa+isq40rc6VMFbk5jcpolUBTe5cYnMsHZ51nFWsx3PVyyNN3vgoESki0Hmr/4BA==", "cpu": [ "x64" ], @@ -1546,14 +1515,15 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", - "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.13.tgz", + "integrity": "sha512-JW/e4yPIXLms+jmnbwwy5LA/LxVwZUWLN8xug+V200wzaVi5TEGIWQlh8o91gWYFxW609euI98OCCemmWGuPrw==", "cpu": [ "arm" ], @@ -1563,116 +1533,139 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.13.tgz", + "integrity": "sha512-ZfKWpXiUymDnavepCaM6KG/uGydJ4l2nBmMxg60Ci4CbeefpqjPWpfaZM7PThOhk2dssqBAcwLc6rAyr0uTdXg==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.13.tgz", + "integrity": "sha512-bmRg3O6Z0gq9yodKKWCIpnlH051sEfdVwt+6m5UDffAQMUUqU0xjnQqqAUm+Gu7ofAAly9DqiQDtKu2nPDEABA==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.13.tgz", + "integrity": "sha512-8Wtnbw4k7pMYN9B/mOEAsQ8HOiq7AZ31Ig4M9BKn2So4xRaFEhtCSa4ZJaOutOWq50zpgR4N5+L/opnlaCx8wQ==", "cpu": [ "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.13.tgz", + "integrity": "sha512-D/0Nlo8mQuxSMohNJUF2lDXWRsFDsHldfRRgD9bRgktj+EndGPj4DOV37LqDKPYS+osdyhZEH7fTakTAEcW7qg==", "cpu": [ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", + "version": "1.0.0-rc.13", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.13.tgz", + "integrity": "sha512-PsdONiFRp8hR8KgVjTWjZ9s7uA3uueWL0t74/cKHfM4dR5zXYv4AjB8BvA+QDToqxAFg4ZkcVEqeu5F7inoz5w==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.13.tgz", + "integrity": "sha512-hCNXgC5dI3TVOLrPT++PKFNZ+1EtS0mLQwfXXXSUD/+rGlB65gZDwN/IDuxLpQP4x8RYYHqGomlUXzpO8aVI2w==", "cpu": [ "arm64" ], @@ -1682,31 +1675,35 @@ "os": [ "openharmony" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", - "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.13.tgz", + "integrity": "sha512-viLS5C5et8NFtLWw9Sw3M/w4vvnVkbWkO7wSNh3C+7G1+uCkGpr6PcjNDSFcNtmXY/4trjPBqUfcOL+P3sWy/g==", "cpu": [ "wasm32" ], "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.1" + "@emnapi/core": "1.9.1", + "@emnapi/runtime": "1.9.1", + "@napi-rs/wasm-runtime": "^1.1.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.13.tgz", + "integrity": "sha512-Fqa3Tlt1xL4wzmAYxGNFV36Hb+VfPc9PYU+E25DAnswXv3ODDu/yyWjQDbXMo5AGWkQVjLgQExuVu8I/UaZhPQ==", "cpu": [ "arm64" ], @@ -1716,14 +1713,15 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.13.tgz", + "integrity": "sha512-/pLI5kPkGEi44TDlnbio3St/5gUFeN51YWNAk/Gnv6mEQBOahRBh52qVFVBpmrnU01n2yysvBML9Ynu7K4kGAQ==", "cpu": [ "x64" ], @@ -1733,14 +1731,13 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/plugin-babel": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/plugin-babel/-/plugin-babel-0.2.2.tgz", - "integrity": "sha512-q9pE8+47bQNHb5eWVcE6oXppA+JTSwvnrhH53m0ZuHuK5MLvwsLoWrWzBTFQqQ06BVxz1gp0HblLsch8o6pvZw==", "dev": true, "license": "MIT", "dependencies": { @@ -1768,30 +1765,13 @@ } } }, - "node_modules/@rolldown/plugin-babel/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-rc.7", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz", - "integrity": "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==", "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/merge-streams": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, "license": "MIT", "engines": { @@ -1803,15 +1783,11 @@ }, "node_modules/@standard-schema/spec": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, "license": "MIT" }, "node_modules/@swc/helpers": { "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -1819,8 +1795,6 @@ }, "node_modules/@tailwindcss/node": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", - "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", "dev": true, "license": "MIT", "dependencies": { @@ -1835,8 +1809,6 @@ }, "node_modules/@tailwindcss/oxide": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", - "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", "dev": true, "license": "MIT", "engines": { @@ -1950,6 +1922,9 @@ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1967,6 +1942,9 @@ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1978,12 +1956,13 @@ }, "node_modules/@tailwindcss/oxide-linux-x64-gnu": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", - "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2001,6 +1980,9 @@ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -2076,8 +2058,6 @@ }, "node_modules/@tailwindcss/postcss": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.2.tgz", - "integrity": "sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2090,8 +2070,6 @@ }, "node_modules/@testing-library/dom": { "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", - "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", "peer": true, @@ -2111,8 +2089,6 @@ }, "node_modules/@testing-library/jest-dom": { "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", - "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", "dev": true, "license": "MIT", "dependencies": { @@ -2131,15 +2107,11 @@ }, "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", "dev": true, "license": "MIT" }, "node_modules/@testing-library/react": { "version": "16.3.2", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", - "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==", "dev": true, "license": "MIT", "dependencies": { @@ -2166,8 +2138,6 @@ }, "node_modules/@testing-library/user-event": { "version": "14.6.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", - "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", "dev": true, "license": "MIT", "engines": { @@ -2180,8 +2150,6 @@ }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "dev": true, "license": "MIT", "optional": true, @@ -2191,16 +2159,12 @@ }, "node_modules/@types/aria-query": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@types/chai": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", "dependencies": { @@ -2210,8 +2174,6 @@ }, "node_modules/@types/debug": { "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", - "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", "dev": true, "license": "MIT", "dependencies": { @@ -2220,36 +2182,26 @@ }, "node_modules/@types/deep-eql": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, "node_modules/@types/katex": { "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", - "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", "dev": true, "license": "MIT" }, "node_modules/@types/ms": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "version": "25.5.2", "dev": true, "license": "MIT", "dependencies": { @@ -2258,8 +2210,6 @@ }, "node_modules/@types/react": { "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", - "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "dev": true, "license": "MIT", "dependencies": { @@ -2268,8 +2218,6 @@ }, "node_modules/@types/react-dom": { "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2278,15 +2226,11 @@ }, "node_modules/@types/unist": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true, "license": "MIT" }, "node_modules/@vercel/analytics": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-2.0.1.tgz", - "integrity": "sha512-MTQG6V9qQrt1tsDeF+2Uoo5aPjqbVPys1xvnIftXSJYG2SrwXRHnqEvVoYID7BTruDz4lCd2Z7rM1BdkUehk2g==", "license": "MIT", "peerDependencies": { "@remix-run/react": "^2", @@ -2327,8 +2271,6 @@ }, "node_modules/@vercel/speed-insights": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@vercel/speed-insights/-/speed-insights-2.0.0.tgz", - "integrity": "sha512-jwkNcrTeafWxjmWq4AHBaptSqZiJkYU5adLC9QBSqeim0GcqDMgN5Ievh8OG1rJ6W3A4l1oiP7qr9CWxGuzu3w==", "license": "Apache-2.0", "peerDependencies": { "@sveltejs/kit": "^1 || ^2", @@ -2365,8 +2307,6 @@ }, "node_modules/@vitejs/plugin-react": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz", - "integrity": "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2391,8 +2331,6 @@ }, "node_modules/@vitest/expect": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.2.tgz", - "integrity": "sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2409,8 +2347,6 @@ }, "node_modules/@vitest/mocker": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.2.tgz", - "integrity": "sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2436,8 +2372,6 @@ }, "node_modules/@vitest/pretty-format": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", - "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", "dev": true, "license": "MIT", "dependencies": { @@ -2449,8 +2383,6 @@ }, "node_modules/@vitest/runner": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.2.tgz", - "integrity": "sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2463,8 +2395,6 @@ }, "node_modules/@vitest/snapshot": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.2.tgz", - "integrity": "sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==", "dev": true, "license": "MIT", "dependencies": { @@ -2479,8 +2409,6 @@ }, "node_modules/@vitest/spy": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", - "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", "dev": true, "license": "MIT", "funding": { @@ -2489,8 +2417,6 @@ }, "node_modules/@vitest/utils": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", - "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2504,8 +2430,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "peer": true, @@ -2515,8 +2439,6 @@ }, "node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "peer": true, @@ -2529,15 +2451,11 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2546,8 +2464,6 @@ }, "node_modules/assertion-error": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", "engines": { @@ -2556,8 +2472,6 @@ }, "node_modules/babel-plugin-react-compiler": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-1.0.0.tgz", - "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2565,9 +2479,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.10.12", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.12.tgz", - "integrity": "sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==", + "version": "2.10.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.16.tgz", + "integrity": "sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -2578,8 +2492,6 @@ }, "node_modules/bidi-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", "dev": true, "license": "MIT", "dependencies": { @@ -2588,8 +2500,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -2600,9 +2510,7 @@ } }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.28.2", "dev": true, "funding": [ { @@ -2621,11 +2529,11 @@ "license": "MIT", "peer": true, "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -2635,9 +2543,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001782", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001782.tgz", - "integrity": "sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw==", + "version": "1.0.30001785", "funding": [ { "type": "opencollective", @@ -2656,8 +2562,6 @@ }, "node_modules/chai": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", "engines": { @@ -2666,8 +2570,6 @@ }, "node_modules/character-entities": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, "license": "MIT", "funding": { @@ -2677,8 +2579,6 @@ }, "node_modules/character-entities-legacy": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "dev": true, "license": "MIT", "funding": { @@ -2688,8 +2588,6 @@ }, "node_modules/character-reference-invalid": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "dev": true, "license": "MIT", "funding": { @@ -2699,14 +2597,10 @@ }, "node_modules/client-only": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, "node_modules/commander": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", "engines": { @@ -2715,15 +2609,11 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/css-tree": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", - "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", "dev": true, "license": "MIT", "dependencies": { @@ -2736,22 +2626,16 @@ }, "node_modules/css.escape": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", "dev": true, "license": "MIT" }, "node_modules/csstype": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, "license": "MIT" }, "node_modules/data-urls": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", - "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", "dev": true, "license": "MIT", "dependencies": { @@ -2764,8 +2648,6 @@ }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -2782,15 +2664,11 @@ }, "node_modules/decimal.js": { "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, "license": "MIT" }, "node_modules/decode-named-character-reference": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", - "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2803,8 +2681,6 @@ }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", "engines": { @@ -2813,8 +2689,6 @@ }, "node_modules/detect-libc": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "devOptional": true, "license": "Apache-2.0", "engines": { @@ -2823,8 +2697,6 @@ }, "node_modules/devlop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, "license": "MIT", "dependencies": { @@ -2837,24 +2709,18 @@ }, "node_modules/dom-accessibility-api": { "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/electron-to-chromium": { - "version": "1.5.328", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.328.tgz", - "integrity": "sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==", + "version": "1.5.331", "dev": true, "license": "ISC", "peer": true }, "node_modules/enhanced-resolve": { "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", "dev": true, "license": "MIT", "dependencies": { @@ -2867,8 +2733,6 @@ }, "node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -2880,15 +2744,11 @@ }, "node_modules/es-module-lexer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, "license": "MIT" }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "peer": true, @@ -2898,8 +2758,6 @@ }, "node_modules/estree-walker": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", "dependencies": { @@ -2908,8 +2766,6 @@ }, "node_modules/expect-type": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2918,8 +2774,6 @@ }, "node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -2935,18 +2789,30 @@ }, "node_modules/fastq": { "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, + "node_modules/fdir": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -2972,8 +2838,6 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "peer": true, @@ -2983,8 +2847,6 @@ }, "node_modules/get-east-asian-width": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", - "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", "dev": true, "license": "MIT", "engines": { @@ -2996,8 +2858,6 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -3009,8 +2869,6 @@ }, "node_modules/globby": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.1.tgz", - "integrity": "sha512-dW7vl+yiAJSp6aCekaVnVJxurRv7DCOLyXqEG3RYMYUg7AuJ2jCqPkZTA8ooqC2vtnkaMcV5WfFBMuEnTu1OQg==", "dev": true, "license": "MIT", "dependencies": { @@ -3028,24 +2886,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true, - "license": "MIT" - }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/html-encoding-sniffer": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", - "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", "dev": true, "license": "MIT", "dependencies": { @@ -3057,8 +2904,6 @@ }, "node_modules/ignore": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -3067,8 +2912,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", "engines": { @@ -3077,8 +2920,6 @@ }, "node_modules/is-alphabetical": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "dev": true, "license": "MIT", "funding": { @@ -3088,8 +2929,6 @@ }, "node_modules/is-alphanumerical": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "dev": true, "license": "MIT", "dependencies": { @@ -3103,8 +2942,6 @@ }, "node_modules/is-decimal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "dev": true, "license": "MIT", "funding": { @@ -3114,8 +2951,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -3124,8 +2959,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -3137,8 +2970,6 @@ }, "node_modules/is-hexadecimal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "dev": true, "license": "MIT", "funding": { @@ -3148,8 +2979,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -3158,8 +2987,6 @@ }, "node_modules/is-path-inside": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "dev": true, "license": "MIT", "engines": { @@ -3171,15 +2998,11 @@ }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true, "license": "MIT" }, "node_modules/jiti": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, "license": "MIT", "bin": { @@ -3188,16 +3011,12 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT", "peer": true }, "node_modules/js-yaml": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -3209,8 +3028,6 @@ }, "node_modules/jsdom": { "version": "29.0.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.0.1.tgz", - "integrity": "sha512-z6JOK5gRO7aMybVq/y/MlIpKh8JIi68FBKMUtKkK2KH/wMSRlCxQ682d08LB9fYXplyY/UXG8P4XXTScmdjApg==", "dev": true, "license": "MIT", "dependencies": { @@ -3250,8 +3067,6 @@ }, "node_modules/jsdom/node_modules/lru-cache": { "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -3260,8 +3075,6 @@ }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "peer": true, @@ -3274,8 +3087,6 @@ }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "peer": true, @@ -3288,15 +3099,11 @@ }, "node_modules/jsonc-parser": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", "dev": true, "license": "MIT" }, "node_modules/jsonpointer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true, "license": "MIT", "engines": { @@ -3305,8 +3112,6 @@ }, "node_modules/katex": { "version": "0.16.44", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.44.tgz", - "integrity": "sha512-EkxoDTk8ufHqHlf9QxGwcxeLkWRR3iOuYfRpfORgYfqc8s13bgb+YtRY59NK5ZpRaCwq1kqA6a5lpX8C/eLphQ==", "dev": true, "funding": [ "https://opencollective.com/katex", @@ -3321,9 +3126,7 @@ } }, "node_modules/lefthook": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.1.4.tgz", - "integrity": "sha512-JNfJ5gAn0KADvJ1I6/xMcx70+/6TL6U9gqGkKvPw5RNMfatC7jIg0Evl97HN846xmfz959BV70l8r3QsBJk30w==", + "version": "2.1.5", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3331,22 +3134,22 @@ "lefthook": "bin/index.js" }, "optionalDependencies": { - "lefthook-darwin-arm64": "2.1.4", - "lefthook-darwin-x64": "2.1.4", - "lefthook-freebsd-arm64": "2.1.4", - "lefthook-freebsd-x64": "2.1.4", - "lefthook-linux-arm64": "2.1.4", - "lefthook-linux-x64": "2.1.4", - "lefthook-openbsd-arm64": "2.1.4", - "lefthook-openbsd-x64": "2.1.4", - "lefthook-windows-arm64": "2.1.4", - "lefthook-windows-x64": "2.1.4" + "lefthook-darwin-arm64": "2.1.5", + "lefthook-darwin-x64": "2.1.5", + "lefthook-freebsd-arm64": "2.1.5", + "lefthook-freebsd-x64": "2.1.5", + "lefthook-linux-arm64": "2.1.5", + "lefthook-linux-x64": "2.1.5", + "lefthook-openbsd-arm64": "2.1.5", + "lefthook-openbsd-x64": "2.1.5", + "lefthook-windows-arm64": "2.1.5", + "lefthook-windows-x64": "2.1.5" } }, "node_modules/lefthook-darwin-arm64": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.1.4.tgz", - "integrity": "sha512-BUAAE9+rUrjr39a+wH/1zHmGrDdwUQ2Yq/z6BQbM/yUb9qtXBRcQ5eOXxApqWW177VhGBpX31aqIlfAZ5Q7wzw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.1.5.tgz", + "integrity": "sha512-VITTaw8PxxyE26gkZ8UcwIa5ZrWnKNRGLeeSrqri40cQdXvLTEoMq2tjjw7eiL9UcB0waRReDdzydevy9GOPUQ==", "cpu": [ "arm64" ], @@ -3358,9 +3161,9 @@ ] }, "node_modules/lefthook-darwin-x64": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.1.4.tgz", - "integrity": "sha512-K1ncIMEe84fe+ss1hQNO7rIvqiKy2TJvTFpkypvqFodT7mJXZn7GLKYTIXdIuyPAYthRa9DwFnx5uMoHwD2F1Q==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.1.5.tgz", + "integrity": "sha512-AvtjYiW0BSGHBGrdvL313seUymrW9FxI+6JJwJ+ZSaa2sH81etrTB0wAwlH1L9VfFwK9+gWvatZBvLfF3L4fPw==", "cpu": [ "x64" ], @@ -3372,9 +3175,9 @@ ] }, "node_modules/lefthook-freebsd-arm64": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.1.4.tgz", - "integrity": "sha512-PVUhjOhVN71YaYsVdQyNbFZ4a2jFB2Tg5hKrrn9kaWpx64aLz/XivLjwr8sEuTaP1GRlEWBpW6Bhrcsyo39qFw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.1.5.tgz", + "integrity": "sha512-mXjJwe8jKGWGiBYUxfQY1ab3Nn5NhafqT9q3KJz8m5joGGQj4JD0cbWxF1nVBLBWsDGbWZRZunTCMGcIScT2bQ==", "cpu": [ "arm64" ], @@ -3386,9 +3189,9 @@ ] }, "node_modules/lefthook-freebsd-x64": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.1.4.tgz", - "integrity": "sha512-ZWV9o/LeyWNEBoVO+BhLqxH3rGTba05nkm5NvMjEFSj7LbUNUDbQmupZwtHl1OMGJO66eZP0CalzRfUH6GhBxQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.1.5.tgz", + "integrity": "sha512-exD69dCjc1K45BxatDPGoH4NmEvgLKPm4kJLOWn1fTeHRKZwWiFPwnjknEoG2OemlCDHmCU++5X40kMEG0WBlA==", "cpu": [ "x64" ], @@ -3400,9 +3203,9 @@ ] }, "node_modules/lefthook-linux-arm64": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.1.4.tgz", - "integrity": "sha512-iWN0pGnTjrIvNIcSI1vQBJXUbybTqJ5CLMniPA0olabMXQfPDrdMKVQe+mgdwHK+E3/Y0H0ZNL3lnOj6Sk6szA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.1.5.tgz", + "integrity": "sha512-57TDKC5ewWpsCLZQKIJMHumFEObYKVundmPpiWhX491hINRZYYOL/26yrnVnNcidThRzTiTC+HLcuplLcaXtbA==", "cpu": [ "arm64" ], @@ -3414,9 +3217,7 @@ ] }, "node_modules/lefthook-linux-x64": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.1.4.tgz", - "integrity": "sha512-96bTBE/JdYgqWYAJDh+/e/0MaxJ25XTOAk7iy/fKoZ1ugf6S0W9bEFbnCFNooXOcxNVTan5xWKfcjJmPIKtsJA==", + "version": "2.1.5", "cpu": [ "x64" ], @@ -3428,9 +3229,9 @@ ] }, "node_modules/lefthook-openbsd-arm64": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.1.4.tgz", - "integrity": "sha512-oYUoK6AIJNEr9lUSpIMj6g7sWzotvtc3ryw7yoOyQM6uqmEduw73URV/qGoUcm4nqqmR93ZalZwR2r3Gd61zvw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.1.5.tgz", + "integrity": "sha512-5aSwK7vV3A6t0w9PnxCMiVjQlcvopBP50BtmnnLnNJyAYHnFbZ0Baq5M0WkE9IsUkWSux0fe6fd0jDkuG711MA==", "cpu": [ "arm64" ], @@ -3442,9 +3243,9 @@ ] }, "node_modules/lefthook-openbsd-x64": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.1.4.tgz", - "integrity": "sha512-i/Dv9Jcm68y9cggr1PhyUhOabBGP9+hzQPoiyOhKks7y9qrJl79A8XfG6LHekSuYc2VpiSu5wdnnrE1cj2nfTg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.1.5.tgz", + "integrity": "sha512-Y+pPdDuENJ8qWnUgL02xxhpjblc0WnwXvWGfqnl3WZrAgHzQpwx3G6469RID/wlNVdHYAlw3a8UkFSMYsTzXvA==", "cpu": [ "x64" ], @@ -3456,9 +3257,9 @@ ] }, "node_modules/lefthook-windows-arm64": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.1.4.tgz", - "integrity": "sha512-hSww7z+QX4YMnw2lK7DMrs3+w7NtxksuMKOkCKGyxUAC/0m1LAICo0ZbtdDtZ7agxRQQQ/SEbzFRhU5ysNcbjA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.1.5.tgz", + "integrity": "sha512-2PlcFBjTzJaMufw0c28kfhB/0zmaRCU0TRPPsil/HU2YNOExod4upPGLk9qjgsOmb2YVWFz6zq6u7+D1yqmzTQ==", "cpu": [ "arm64" ], @@ -3470,9 +3271,9 @@ ] }, "node_modules/lefthook-windows-x64": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.1.4.tgz", - "integrity": "sha512-eE68LwnogxwcPgGsbVGPGxmghyMGmU9SdGwcc+uhGnUxPz1jL89oECMWJNc36zjVK24umNeDAzB5KA3lw1MuWw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.1.5.tgz", + "integrity": "sha512-yiAh8qxml6uqy10jDxOdN9fOQpyLxBFY1fgCEAhn7sVJYmJKRhjqSBwZX6LG5MQjzr29KStrIdw7TR3lf3rT7Q==", "cpu": [ "x64" ], @@ -3485,8 +3286,6 @@ }, "node_modules/lightningcss": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", - "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", "dev": true, "license": "MPL-2.0", "dependencies": { @@ -3626,6 +3425,9 @@ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MPL-2.0", "optional": true, "os": [ @@ -3647,6 +3449,9 @@ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MPL-2.0", "optional": true, "os": [ @@ -3662,12 +3467,13 @@ }, "node_modules/lightningcss-linux-x64-gnu": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MPL-2.0", "optional": true, "os": [ @@ -3689,6 +3495,9 @@ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MPL-2.0", "optional": true, "os": [ @@ -3746,8 +3555,6 @@ }, "node_modules/linkify-it": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3756,8 +3563,6 @@ }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "peer": true, @@ -3767,8 +3572,6 @@ }, "node_modules/lz-string": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", "peer": true, @@ -3778,8 +3581,6 @@ }, "node_modules/magic-string": { "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3788,8 +3589,6 @@ }, "node_modules/markdown-it": { "version": "14.1.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", - "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", "dev": true, "license": "MIT", "dependencies": { @@ -3806,8 +3605,6 @@ }, "node_modules/markdownlint": { "version": "0.40.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.40.0.tgz", - "integrity": "sha512-UKybllYNheWac61Ia7T6fzuQNDZimFIpCg2w6hHjgV1Qu0w1TV0LlSgryUGzM0bkKQCBhy2FDhEELB73Kb0kAg==", "dev": true, "license": "MIT", "dependencies": { @@ -3830,8 +3627,6 @@ }, "node_modules/markdownlint-cli2": { "version": "0.22.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.22.0.tgz", - "integrity": "sha512-mOC9BY/XGtdX3M9n3AgERd79F0+S7w18yBBTNIQ453sI87etZfp1z4eajqSMV70CYjbxKe5ktKvT2HCpvcWx9w==", "dev": true, "license": "MIT", "dependencies": { @@ -3857,8 +3652,6 @@ }, "node_modules/markdownlint-cli2-formatter-default": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.6.tgz", - "integrity": "sha512-VVDGKsq9sgzu378swJ0fcHfSicUnMxnL8gnLm/Q4J/xsNJ4e5bA6lvAz7PCzIl0/No0lHyaWdqVD2jotxOSFMQ==", "dev": true, "license": "MIT", "funding": { @@ -3870,22 +3663,16 @@ }, "node_modules/mdn-data": { "version": "2.27.1", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", - "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/mdurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -3894,8 +3681,6 @@ }, "node_modules/micromark": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", "dev": true, "funding": [ { @@ -3930,8 +3715,6 @@ }, "node_modules/micromark-core-commonmark": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "dev": true, "funding": [ { @@ -3965,8 +3748,6 @@ }, "node_modules/micromark-extension-directive": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz", - "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==", "dev": true, "license": "MIT", "dependencies": { @@ -3985,8 +3766,6 @@ }, "node_modules/micromark-extension-gfm-autolink-literal": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "dev": true, "license": "MIT", "dependencies": { @@ -4002,8 +3781,6 @@ }, "node_modules/micromark-extension-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "dev": true, "license": "MIT", "dependencies": { @@ -4023,8 +3800,6 @@ }, "node_modules/micromark-extension-gfm-table": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -4041,8 +3816,6 @@ }, "node_modules/micromark-extension-math": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", - "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", "dev": true, "license": "MIT", "dependencies": { @@ -4061,8 +3834,6 @@ }, "node_modules/micromark-factory-destination": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "dev": true, "funding": [ { @@ -4083,8 +3854,6 @@ }, "node_modules/micromark-factory-label": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "dev": true, "funding": [ { @@ -4106,8 +3875,6 @@ }, "node_modules/micromark-factory-space": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "dev": true, "funding": [ { @@ -4127,8 +3894,6 @@ }, "node_modules/micromark-factory-title": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", "dev": true, "funding": [ { @@ -4150,8 +3915,6 @@ }, "node_modules/micromark-factory-whitespace": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "dev": true, "funding": [ { @@ -4173,8 +3936,6 @@ }, "node_modules/micromark-util-character": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, "funding": [ { @@ -4194,8 +3955,6 @@ }, "node_modules/micromark-util-chunked": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "dev": true, "funding": [ { @@ -4214,8 +3973,6 @@ }, "node_modules/micromark-util-classify-character": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "dev": true, "funding": [ { @@ -4236,8 +3993,6 @@ }, "node_modules/micromark-util-combine-extensions": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "dev": true, "funding": [ { @@ -4257,8 +4012,6 @@ }, "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "dev": true, "funding": [ { @@ -4277,8 +4030,6 @@ }, "node_modules/micromark-util-encode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "dev": true, "funding": [ { @@ -4294,8 +4045,6 @@ }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "dev": true, "funding": [ { @@ -4311,8 +4060,6 @@ }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, "funding": [ { @@ -4331,8 +4078,6 @@ }, "node_modules/micromark-util-resolve-all": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, "funding": [ { @@ -4351,8 +4096,6 @@ }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, "funding": [ { @@ -4373,8 +4116,6 @@ }, "node_modules/micromark-util-subtokenize": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "dev": true, "funding": [ { @@ -4396,8 +4137,6 @@ }, "node_modules/micromark-util-symbol": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "dev": true, "funding": [ { @@ -4413,8 +4152,6 @@ }, "node_modules/micromark-util-types": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", "dev": true, "funding": [ { @@ -4430,8 +4167,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -4442,10 +4177,19 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { @@ -4454,15 +4198,11 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -4478,12 +4218,10 @@ } }, "node_modules/next": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/next/-/next-16.2.1.tgz", - "integrity": "sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q==", + "version": "16.2.2", "license": "MIT", "dependencies": { - "@next/env": "16.2.1", + "@next/env": "16.2.2", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", @@ -4497,14 +4235,14 @@ "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "16.2.1", - "@next/swc-darwin-x64": "16.2.1", - "@next/swc-linux-arm64-gnu": "16.2.1", - "@next/swc-linux-arm64-musl": "16.2.1", - "@next/swc-linux-x64-gnu": "16.2.1", - "@next/swc-linux-x64-musl": "16.2.1", - "@next/swc-win32-arm64-msvc": "16.2.1", - "@next/swc-win32-x64-msvc": "16.2.1", + "@next/swc-darwin-arm64": "16.2.2", + "@next/swc-darwin-x64": "16.2.2", + "@next/swc-linux-arm64-gnu": "16.2.2", + "@next/swc-linux-arm64-musl": "16.2.2", + "@next/swc-linux-x64-gnu": "16.2.2", + "@next/swc-linux-x64-musl": "16.2.2", + "@next/swc-win32-arm64-msvc": "16.2.2", + "@next/swc-win32-x64-msvc": "16.2.2", "sharp": "^0.34.5" }, "peerDependencies": { @@ -4532,8 +4270,6 @@ }, "node_modules/next-themes": { "version": "0.4.6", - "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", - "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", "license": "MIT", "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", @@ -4542,8 +4278,6 @@ }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -4569,17 +4303,13 @@ } }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "version": "2.0.37", "dev": true, "license": "MIT", "peer": true }, "node_modules/obug": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", - "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -4589,8 +4319,6 @@ }, "node_modules/parse-entities": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "dev": true, "license": "MIT", "dependencies": { @@ -4609,8 +4337,6 @@ }, "node_modules/parse5": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", - "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", "dev": true, "license": "MIT", "dependencies": { @@ -4622,8 +4348,6 @@ }, "node_modules/parse5/node_modules/entities": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -4635,38 +4359,30 @@ }, "node_modules/pathe": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "version": "4.0.4", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/playwright": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", - "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "version": "1.59.1", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.58.2" + "playwright-core": "1.59.1" }, "bin": { "playwright": "cli.js" @@ -4679,9 +4395,7 @@ } }, "node_modules/playwright-core": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", - "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "version": "1.59.1", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -4693,8 +4407,6 @@ }, "node_modules/postcss": { "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "dev": true, "funding": [ { @@ -4722,8 +4434,6 @@ }, "node_modules/pretty-format": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", "peer": true, @@ -4738,8 +4448,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -4748,8 +4456,6 @@ }, "node_modules/punycode.js": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, "license": "MIT", "engines": { @@ -4758,8 +4464,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -4779,8 +4483,6 @@ }, "node_modules/react": { "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4788,8 +4490,6 @@ }, "node_modules/react-dom": { "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" @@ -4800,16 +4500,12 @@ }, "node_modules/react-is": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, "license": "MIT", "peer": true }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "license": "MIT", "dependencies": { @@ -4822,8 +4518,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", "engines": { @@ -4832,8 +4526,6 @@ }, "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -4842,14 +4534,13 @@ } }, "node_modules/rolldown": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz", - "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==", + "version": "1.0.0-rc.13", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@oxc-project/types": "=0.122.0", - "@rolldown/pluginutils": "1.0.0-rc.12" + "@oxc-project/types": "=0.123.0", + "@rolldown/pluginutils": "1.0.0-rc.13" }, "bin": { "rolldown": "bin/cli.mjs" @@ -4858,34 +4549,31 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-x64": "1.0.0-rc.12", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" + "@rolldown/binding-android-arm64": "1.0.0-rc.13", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.13", + "@rolldown/binding-darwin-x64": "1.0.0-rc.13", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.13", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.13", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.13", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.13", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.13", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.13", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.13", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.13", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.13", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.13", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.13", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.13" } }, "node_modules/rolldown/node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz", - "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", + "version": "1.0.0-rc.13", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -4908,8 +4596,6 @@ }, "node_modules/saxes": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, "license": "ISC", "dependencies": { @@ -4921,14 +4607,10 @@ }, "node_modules/scheduler": { "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "peer": true, @@ -4938,8 +4620,6 @@ }, "node_modules/sharp": { "version": "0.34.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", - "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, @@ -4983,8 +4663,6 @@ }, "node_modules/sharp/node_modules/semver": { "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "optional": true, "bin": { @@ -4996,15 +4674,11 @@ }, "node_modules/siginfo": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, "node_modules/slash": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, "license": "MIT", "engines": { @@ -5016,8 +4690,6 @@ }, "node_modules/smol-toml": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", - "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -5029,8 +4701,6 @@ }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -5038,22 +4708,16 @@ }, "node_modules/stackback": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, "node_modules/std-env": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", - "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", "dev": true, "license": "MIT" }, "node_modules/string-width": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", - "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", "dev": true, "license": "MIT", "dependencies": { @@ -5069,8 +4733,6 @@ }, "node_modules/strip-ansi": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { @@ -5085,8 +4747,6 @@ }, "node_modules/strip-ansi/node_modules/ansi-regex": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -5098,8 +4758,6 @@ }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5111,8 +4769,6 @@ }, "node_modules/styled-jsx": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", "license": "MIT", "dependencies": { "client-only": "0.0.1" @@ -5134,22 +4790,16 @@ }, "node_modules/symbol-tree": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true, "license": "MIT" }, "node_modules/tailwindcss": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", - "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", "dev": true, "license": "MIT" }, "node_modules/tapable": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", - "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", "dev": true, "license": "MIT", "engines": { @@ -5162,15 +4812,11 @@ }, "node_modules/tinybench": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, "node_modules/tinyexec": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", - "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", "dev": true, "license": "MIT", "engines": { @@ -5179,8 +4825,6 @@ }, "node_modules/tinyglobby": { "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5194,41 +4838,8 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tinyrainbow": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", - "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "dev": true, "license": "MIT", "engines": { @@ -5236,29 +4847,23 @@ } }, "node_modules/tldts": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.27.tgz", - "integrity": "sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==", + "version": "7.0.28", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.27" + "tldts-core": "^7.0.28" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.27.tgz", - "integrity": "sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==", + "version": "7.0.28", "dev": true, "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5270,8 +4875,6 @@ }, "node_modules/tough-cookie": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", - "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -5283,8 +4886,6 @@ }, "node_modules/tr46": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", - "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", "dev": true, "license": "MIT", "dependencies": { @@ -5296,14 +4897,10 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/typescript": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5316,15 +4913,11 @@ }, "node_modules/uc.micro": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true, "license": "MIT" }, "node_modules/undici": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.6.tgz", - "integrity": "sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==", + "version": "7.24.7", "dev": true, "license": "MIT", "engines": { @@ -5333,15 +4926,11 @@ }, "node_modules/undici-types": { "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "dev": true, "license": "MIT" }, "node_modules/unicorn-magic": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", - "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", "dev": true, "license": "MIT", "engines": { @@ -5353,8 +4942,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -5385,8 +4972,6 @@ }, "node_modules/vite": { "version": "8.0.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz", - "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5461,42 +5046,290 @@ } } }, - "node_modules/vite-tsconfig-paths": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-6.1.1.tgz", - "integrity": "sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==", + "node_modules/vite/node_modules/@oxc-project/types": { + "version": "0.122.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", + "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.12", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", + "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "tsconfck": "^3.0.3" + "@napi-rs/wasm-runtime": "^1.1.1" }, - "peerDependencies": { - "vite": "*" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/vite-tsconfig-paths/node_modules/tsconfck": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", - "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "node_modules/vite/node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "bin": { - "tsconfck": "bin/tsconfck.js" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18 || >=20" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/vite/node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.12", + "dev": true, + "license": "MIT" + }, "node_modules/vite/node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -5512,23 +5345,40 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "node_modules/vite/node_modules/rolldown": { + "version": "1.0.0-rc.12", "dev": true, "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.122.0", + "@rolldown/pluginutils": "1.0.0-rc.12" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, "engines": { - "node": ">=12" + "node": "^20.19.0 || >=22.12.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-x64": "1.0.0-rc.12", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" } }, "node_modules/vitest": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.2.tgz", - "integrity": "sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==", "dev": true, "license": "MIT", "dependencies": { @@ -5607,23 +5457,8 @@ } } }, - "node_modules/vitest/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, "license": "MIT", "dependencies": { @@ -5635,8 +5470,6 @@ }, "node_modules/webidl-conversions": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", - "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -5645,8 +5478,6 @@ }, "node_modules/whatwg-mimetype": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", - "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", "dev": true, "license": "MIT", "engines": { @@ -5655,8 +5486,6 @@ }, "node_modules/whatwg-url": { "version": "16.0.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", - "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", "dev": true, "license": "MIT", "dependencies": { @@ -5670,8 +5499,6 @@ }, "node_modules/why-is-node-running": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", "dependencies": { @@ -5687,8 +5514,6 @@ }, "node_modules/xml-name-validator": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5697,15 +5522,11 @@ }, "node_modules/xmlchars": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true, "license": "MIT" }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC", "peer": true diff --git a/package.json b/package.json index 5138ffe..65513e2 100644 --- a/package.json +++ b/package.json @@ -24,31 +24,30 @@ "dependencies": { "@vercel/analytics": "^2.0.1", "@vercel/speed-insights": "^2.0.0", - "next": "^16.2.1", + "next": "^16.2.2", "next-themes": "^0.4.6", "react": "^19.2.4", "react-dom": "^19.2.4" }, "devDependencies": { - "@biomejs/biome": "^2.4.9", - "@playwright/test": "^1.58.2", + "@biomejs/biome": "^2.4.10", + "@playwright/test": "^1.59.1", "@rolldown/plugin-babel": "^0.2.2", "@tailwindcss/postcss": "^4.2.2", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", - "@types/node": "^25.5.0", + "@types/node": "^25.5.2", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.1", "babel-plugin-react-compiler": "1.0.0", - "baseline-browser-mapping": "^2.10.12", + "baseline-browser-mapping": "^2.10.16", "jsdom": "^29.0.1", - "lefthook": "^2.1.4", + "lefthook": "^2.1.5", "markdownlint-cli2": "^0.22.0", - "tailwindcss": "^4.1.18", + "tailwindcss": "^4.2.2", "typescript": "^6.0.2", - "vite-tsconfig-paths": "^6.1.1", "vitest": "^4.1.2" } } diff --git a/vitest.config.ts b/vitest.config.ts index 8c67c76..c55ecd6 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,14 +1,10 @@ import babel from "@rolldown/plugin-babel"; import react, { reactCompilerPreset } from "@vitejs/plugin-react"; -import tsconfigPaths from "vite-tsconfig-paths"; import { defineConfig } from "vitest/config"; export default defineConfig({ - plugins: [ - tsconfigPaths(), - react(), - babel({ presets: [reactCompilerPreset()] }), - ], + plugins: [react(), babel({ presets: [reactCompilerPreset()] })], + resolve: { tsconfigPaths: true }, test: { allowOnly: !process.env.CI, // Block .only() in CI (explicit, matches Playwright forbidOnly) environment: "jsdom", From 84f05fc5d20df431a586e63bb52bc87a3e6e96e8 Mon Sep 17 00:00:00 2001 From: Michelle Date: Mon, 6 Apr 2026 22:11:41 +0400 Subject: [PATCH 2/4] docs: rename x_docs/ to .xdocs/ and add evaluation reports Directory rename: - Move all docs from x_docs/ to .xdocs/ (hidden directory) - Remove unused images (github-social-thin.jpg, old rough-notes.png) New documents: - HeroUI v3 evaluation report comparing against shadcn/ui - Vercel AGENTS.md vs skills eval comparison Hidden directory keeps project docs out of the file explorer while remaining version-controlled. Co-Authored-By: Claude Opus 4.6 (1M context) --- {x_docs => .xdocs}/images/app_screenshot.jpg | Bin .xdocs/images/nextjs-hero.png | Bin 0 -> 29317 bytes .xdocs/images/rough-notes.png | Bin 0 -> 10170 bytes .../images/template-explained.png | Bin {x_docs => .xdocs}/own/WORDS.md | 0 .xdocs/own/agentmd-over-skills.md | 224 ++++++++++++++++++ .xdocs/own/hero-ui.md | 210 ++++++++++++++++ {x_docs => .xdocs}/own/quick_notes.md | 0 {x_docs => .xdocs}/own/theme_resources.md | 0 {x_docs => .xdocs}/own/zustand.md | 0 {x_docs => .xdocs}/project-setup.md | 0 {x_docs => .xdocs}/reference/README.md | 0 .../reference/default.theme.css | 0 {x_docs => .xdocs}/reference/preflight.css | 0 README.md | 22 +- x_docs/images/github-social-thin.jpg | Bin 16760 -> 0 bytes x_docs/images/rough-notes.png | Bin 9955 -> 0 bytes 17 files changed, 445 insertions(+), 11 deletions(-) rename {x_docs => .xdocs}/images/app_screenshot.jpg (100%) create mode 100755 .xdocs/images/nextjs-hero.png create mode 100755 .xdocs/images/rough-notes.png rename {x_docs => .xdocs}/images/template-explained.png (100%) rename {x_docs => .xdocs}/own/WORDS.md (100%) create mode 100644 .xdocs/own/agentmd-over-skills.md create mode 100644 .xdocs/own/hero-ui.md rename {x_docs => .xdocs}/own/quick_notes.md (100%) rename {x_docs => .xdocs}/own/theme_resources.md (100%) rename {x_docs => .xdocs}/own/zustand.md (100%) rename {x_docs => .xdocs}/project-setup.md (100%) rename {x_docs => .xdocs}/reference/README.md (100%) rename {x_docs => .xdocs}/reference/default.theme.css (100%) rename {x_docs => .xdocs}/reference/preflight.css (100%) delete mode 100755 x_docs/images/github-social-thin.jpg delete mode 100755 x_docs/images/rough-notes.png diff --git a/x_docs/images/app_screenshot.jpg b/.xdocs/images/app_screenshot.jpg similarity index 100% rename from x_docs/images/app_screenshot.jpg rename to .xdocs/images/app_screenshot.jpg diff --git a/.xdocs/images/nextjs-hero.png b/.xdocs/images/nextjs-hero.png new file mode 100755 index 0000000000000000000000000000000000000000..e8686544cb0ddbc57c947a396f104f426b75e081 GIT binary patch literal 29317 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�ST=2zX8j6HACY&X4FZb+g{D!ScFLv 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 E4|@r - published `2026-17-01` + +## Introduction + +We expected [skills](https://agentskills.io/home) to be the solution for teaching coding agents framework-specific knowledge. After building evals focused on Next.js 16 APIs, we found something unexpected. + +A compressed 8KB docs index embedded directly in `AGENTS.md` achieved a 100% pass rate, while skills maxed out at 79% even with explicit instructions telling the agent to use them. Without those instructions, skills performed no better than having no documentation at all. + +Here's what we tried, what we learned, and how you can set this up for your own Next.js projects. + +## The problem we were trying to solve + +AI coding agents rely on training data that becomes outdated. [Next.js 16 introduces](https://nextjs.org/blog/next-16) APIs like `'use cache'`, `connection()`, and `forbidden()` that aren't in current model training data. When agents don't know these APIs, they generate incorrect code or fall back to older patterns. + +The reverse can also be true, where you're running an older Next.js version and the model suggests newer APIs that don't exist in your project yet. We wanted to fix this by giving agents access to version-matched documentation. + +## Two approaches for teaching agents framework knowledge + +Before diving into results, a quick explanation of the two approaches we tested: + +- **Skills** are an [open standard](https://agentskills.io/) for packaging domain knowledge that coding agents can use. A skill bundles prompts, tools, and documentation that an agent can invoke on demand. The idea is that the agent recognizes when it needs framework-specific help, invokes the skill, and gets access to relevant docs. + +- [**`AGENTS.md`**](https://agents.md/) is a markdown file in your project root that provides persistent context to coding agents. Whatever you put in `AGENTS.md` is available to the agent on every turn, without the agent needing to decide to load it. Claude Code uses `CLAUDE.md` for the same purpose. + +We built a Next.js docs skill and an `AGENTS.md` docs index, then ran them through our eval suite to see which performed better. + +## We started by betting on skills + +Skills seemed like the right abstraction. You package your framework docs into a skill, the agent invokes it when working on Next.js tasks, and you get correct code. Clean separation of concerns, minimal context overhead, and the agent only loads what it needs. There's even a growing directory of reusable skills at [skills.sh](https://skills.sh/). + +We expected the agent to encounter a Next.js task, invoke the skill, read version-matched docs, and generate correct code. + +Then we ran the evals. + +## Skills weren't being triggered reliably + +In 56% of eval cases, the skill was never invoked. The agent had access to the documentation but didn't use it. Adding the skill produced no improvement over baseline: + +| Configuration | Pass Rate | vs Baseline | +| :--- | :--- | :--- | +| Baseline (no docs) | 53% | — | +| Skill (default behaviour) | 53% | +0pp | + +Zero improvement. The skill existed, the agent could use it, and the agent chose not to. On the detailed Build/Lint/Test breakdown, the skill actually performed worse than baseline on some metrics (58% vs 63% on tests), suggesting that an unused skill in the environment may introduce noise or distraction. + +This isn't unique to our setup. Agents not reliably using available tools is a [known limitation](https://developers.openai.com/blog/eval-skills) of current models. + +## Explicit instructions helped, but wording was fragile + +We tried adding explicit instructions to `AGENTS.md` telling the agent to use the skill. + +``` +Before writing code, first explore the project structure, +then invoke the nextjs-doc skill for documentation. +``` + +Example instruction added to AGENTS.md to trigger skill usage. + +This improved the trigger rate to 95%+ and boosted the pass rate to 79%. + +| Configuration | Pass Rate | vs Baseline | +| :--- | :--- | :--- | +| Baseline (no docs) | 53% | — | +| Skill (default behaviour) | 53% | +0pp | +| Skill with explicit instructions | 79% | +26pp | + +A solid improvement. But we discovered something unexpected about how the instruction wording affected agent behavior. + +**Different wordings produced dramatically different results:** + +| Instruction | Behaviour | Outcome | +| :--- | :--- | :--- | +| "You MUST invoke the skill" | Reads docs first, anchors on doc patterns | Misses project context | +| "Explore project first, then invoke skill" | Builds mental model first, uses docs as reference | Better results | + +Same skill. Same docs. Different outcomes based on subtle wording changes. + +In one eval (the `'use cache'` directive test), the "invoke first" approach wrote correct `page.tsx` but completely missed the required `next.config.ts` changes. The "explore first" approach got both. + +This fragility concerned us. If small wording tweaks produce large behavioral swings, the approach feels brittle for production use. + +## Building evals we could trust + +Before drawing conclusions, we needed evals we could trust. Our initial test suite had ambiguous prompts, tests that validated implementation details rather than observable behavior, and a focus on APIs already in model training data. We weren't measuring what we actually cared about. + +We hardened the eval suite by removing test leakage, resolving contradictions, and shifting to behavior-based assertions. Most importantly, we added tests targeting Next.js 16 APIs that aren't in model training data. + +**APIs in our focused eval suite:** + +- `connection()` for dynamic rendering +- `'use cache'` directive +- `cacheLife()` and `cacheTag()` +- `forbidden()` and `unauthorized()` +- `proxy.ts` for API proxying +- Async `cookies()` and `headers()` +- `after()`, `updateTag()`, `refresh()` + +All the results that follow come from this hardened eval suite. Every configuration was judged against the same tests, with retries to rule out model variance. + +## The hunch that paid off + +What if we removed the decision entirely? Instead of hoping agents would invoke a skill, we could embed a docs index directly in `AGENTS.md`. Not the full documentation, just an index that tells the agent where to find specific doc files that match your project's Next.js version. The agent can then read those files as needed, getting version-accurate information whether you're on the latest release or maintaining an older project. + +We added a key instruction to the injected content. + +```text +IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning +for any Next.js tasks. +``` + +Key instruction embedded in the docs index + +This tells the agent to consult the docs rather than rely on potentially outdated training data. + +## The results surprised us + +We ran the hardened eval suite across all four configurations: + +![Eval results across all four configurations. AGENTS.md (third column) achieved 100% across Build, Lint, and Test](https://vercel.com/vc-ap-vercel-marketing/_next/image?url=https%3A%2F%2Fassets.vercel.com%2Fimage%2Fupload%2Fcontentful%2Fimage%2Fe5382hct74si%2F5klujg5rHUkECCKEGbllHN%2Fb6cf879ce5a9aa4b88e1c275e460e32f%2FCleanShot_2026-01-21_at_11.19.58_2x.png&w=1920&q=75) + +Eval results across all four configurations. AGENTS.md (third column) achieved 100% across Build, Lint, and Test + +**Final pass rates:** + +| Configuration | Pass Rate | vs Baseline | +| :--- | :--- | :--- | +| Baseline (no docs) | 53% | — | +| Skill (default behaviour) | 53% | +0pp | +| Skill with explicit instructions | 79% | +26pp | +| AGENTS.md docs index | 100% | +47pp | + +On the detailed breakdown, `AGENTS.md` achieved perfect scores across Build, Lint, and Test. + +| Configuration | Build | Lint | Test | +| :--- | :--- | :--- | :--- | +| Baseline | 84% | 95% | 63% | +| Skill (default behaviour) | 84% | 89% | 58% | +| Skill with explicit instructions | 95% | 100% | 84% | +| AGENTS.md | 100% | 100% | 100% | + +This wasn't what we expected. The "dumb" approach (a static markdown file) outperformed the more sophisticated skill-based retrieval, even when we fine-tuned the skill triggers. + +**Why does passive context beat active retrieval?** + +Our working theory comes down to three factors. + +1. **No decision point.** With `AGENTS.md`, there's no moment where the agent must decide "should I look this up?" The information is already present. + +2. **Consistent availability.** Skills load asynchronously and only when invoked. `AGENTS.md` content is in the system prompt for every turn. + +3. **No ordering issues.** Skills create sequencing decisions (read docs first vs. explore project first). Passive context avoids this entirely. + +## Addressing the context bloat concern + +Embedding docs in `AGENTS.md` risks bloating the context window. We addressed this with compression. + +The initial docs injection was around 40KB. We compressed it down to 8KB (an 80% reduction) while maintaining the 100% pass rate. The compressed format uses a pipe-delimited structure that packs the docs index into minimal space: + +```text +[Next.js Docs Index]|root: ./.next-docs +|IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning +|01-app/01-getting-started:{01-installation.mdx,02-project-structure.mdx,...} +|01-app/02-building-your-application/01-routing:{01-defining-routes.mdx,...} +``` + +Minified docs in AGENTS.md + +The full index covers every section of the Next.js documentation: + +![The full compressed docs index. Each line maps a directory path to the doc files it contains](https://vercel.com/vc-ap-vercel-marketing/_next/image?url=https%3A%2F%2Fassets.vercel.com%2Fimage%2Fupload%2Fcontentful%2Fimage%2Fe5382hct74si%2F7FuC0523TmDXUKhQNe8pAB%2F9060456f97c3863cb3b35a6404ca17a1%2Fimage_6_.png&w=1920&q=75) + +The full compressed docs index. Each line maps a directory path to the doc files it contains + +The agent knows where to find docs without having full content in context. When it needs specific information, it reads the relevant file from the `.next-docs/` directory. + +## Try it yourself + +One command sets this up for your Next.js project: + +`npx @next/codemod@canary agents-md` + +This functionality is part of the official [`@next/codemod` package](https://github.com/vercel/next.js/pull/88961). + +This command does three things: + +1. Detects your Next.js version +2. Downloads matching documentation to `.next-docs/` +3. Injects the compressed index into your `AGENTS.md` + +If you're using an agent that respects `AGENTS.md` (like Cursor or other tools), the same approach works. + +## What this means for framework authors + +Skills aren't useless. The `AGENTS.md` approach provides broad, horizontal improvements to how agents work with Next.js across all tasks. Skills work better for vertical, action-specific workflows that users explicitly trigger, like "upgrade my Next.js version," "migrate to the App Router," or [applying framework best practices](https://x.com/huozhi/status/2015881140281004438). The two approaches complement each other. + +That said, for general framework knowledge, passive context currently outperforms on-demand retrieval. If you maintain a framework and want coding agents to generate correct code, consider providing an `AGENTS.md` snippet that users can add to their projects. + +**Practical recommendations:** + +- **Don't wait for skills to improve.** The gap may close as models get better at tool use, but results matter now. + +- **Compress aggressively.** You don't need full docs in context. An index pointing to retrievable files works just as well. + +- **Test with evals.** Build evals targeting APIs not in training data. That's where doc access matters most. + +- **Design for retrieval.** Structure your docs so agents can find and read specific files rather than needing everything upfront. + +The goal is to shift agents from pre-training-led reasoning to retrieval-led reasoning. `AGENTS.md` turns out to be the most reliable way to make that happen. + +_Research and evals by_ [_Jude Gao_](https://x.com/gao_jude)_. CLI available at_ _`npx @next/codemod@canary agents-md`_ diff --git a/.xdocs/own/hero-ui.md b/.xdocs/own/hero-ui.md new file mode 100644 index 0000000..38e5213 --- /dev/null +++ b/.xdocs/own/hero-ui.md @@ -0,0 +1,210 @@ +# 🦸 HeroUI v3 Evaluation Report + +> **Date:** 31 March 2026 +> **Purpose:** Evaluate HeroUI v3.0.1 as an alternative to shadcn/ui for this Next.js 16 starter template +> **Stack:** Next.js 16 · React 19 · Tailwind CSS v4 · TypeScript (strict) · Biome + +--- + +## 🎯 TL;DR + +HeroUI v3 is a **feasible alternative** to shadcn/ui. It ships polished, accessible components out of the box with excellent Tailwind v4 and React 19 support. The key trade-off: HeroUI is a **living npm dependency** (automatic updates, less control) whereas shadcn/ui is **copy-paste code you own** (full control, more maintenance). HeroUI suits teams who want beautiful defaults fast; shadcn/ui suits teams who want total ownership and flexibility. Both have strong AI tooling. Community size and ecosystem maturity still favour shadcn/ui significantly. + +--- + +## 📊 Table 1: Stack Compatibility + +| Requirement | HeroUI v3 | shadcn/ui | Notes | +|---|:---:|:---:|---| +| React 19 | ✅ | ✅ | HeroUI built *for* React 19; shadcn fully updated | +| Next.js 16 (App Router) | ✅ | ✅ | Both provide Next.js integration examples | +| Tailwind CSS v4 | ✅ Full | ✅ Full | Both use `@theme`, CSS variables, OKLCH colours | +| TypeScript (strict) | ✅ | ✅ | Both fully typed with IntelliSense | +| Biome (lint/format) | ✅ | ✅ | Neither conflicts — no ESLint dependency | +| React Server Components | ⚠️ Partial | ⚠️ Partial | Both need `"use client"` for interactive components | +| `next-themes` | ✅ Native | ✅ Native | Both document next-themes integration | +| Dynamic `params` (Promise) | ➖ N/A | ➖ N/A | Component library doesn't affect routing | + +**Verdict:** Both are fully compatible with this project's stack. No blockers either way. + +--- + +## 📊 Table 2: Feature Comparison + +| Feature | HeroUI v3 | shadcn/ui | +|---|---|---| +| **Architecture** | npm package ("living library") — install, import, use | CLI copies code into your project — you own it entirely | +| **Underlying primitives** | React Aria Components (Adobe) | Radix UI (+ Base UI option since CLI v4) | +| **Component count** | ~50–75 (+ 220 in paid Pro tier) | ~50+ (community registries add more) | +| **Variant model** | Semantic: `primary`, `secondary`, `tertiary`, `danger` | Visual: `default`, `destructive`, `outline`, `ghost` | +| **Component pattern** | Compound components (`Alert.Icon`, `Alert.Title`) | Composable primitives (flat imports) | +| **Theming** | CSS variables (OKLCH) + Theme Builder UI tool | CSS variables (OKLCH) + manual token editing | +| **Built-in themes** | 2 (light/dark) + custom theme support | 8 base themes + community themes | +| **Accessibility** | WCAG 2.1 AA via React Aria (automatic) | WAI-ARIA via Radix (solid, but less automated) | +| **Animations** | CSS + GPU-accelerated (no JS runtime) | CSS transitions (manual, minimal by default) | +| **Bundle impact** | Tree-shaken npm dep; mid-range size | Zero runtime dep; you control what ships | +| **Customisation** | 10 styling approaches (Tailwind, BEM, CSS-in-JS, variant fns) | Full source code ownership; modify anything | +| **Updates** | Automatic via npm (bug fixes, new features) | Manual — you patch your own copied code | +| **Styles separation** | `@heroui/styles` is framework-agnostic (usable with Vue/Svelte) | React-only (Radix dependency) | +| **Figma kit** | ✅ Official v3 kit | ✅ Community kits available | +| **Pricing** | Free (MIT) core; Pro tier is paid | Fully free (MIT) | + +--- + +## 📊 Table 3: AI Tooling + +| AI Feature | HeroUI v3 | shadcn/ui | +|---|---|---| +| **LLMs.txt** | ✅ Multiple files: full docs, components-only, patterns-only | ❌ No dedicated llms.txt (docs are open though) | +| **MCP Server** | 🔜 Coming soon (announced) | ✅ Available since Aug 2025 | +| **Agent Skills** | ✅ `heroui-react` skill with scripts (`list_components`, `get_docs`, `get_theme`, etc.) | ✅ `shadcn/skills` covering both Radix and Base UI | +| **Text-to-App** | ✅ HeroUI Chat (natural language → app) | ✅ v0.dev (Vercel's AI-powered UI generator) | +| **Claude Code integration** | ✅ Add llms.txt to `.claude` file or reference URL | ✅ MCP server + skills for component search/install | +| **Cursor/Windsurf** | ✅ Documented integration via `@Docs` and `.windsurfrules` | ✅ Native support in most AI editors | +| **Design System AI** | Theme Builder UI | shadcn/create for visual presets | + +**Verdict:** Both invest heavily in AI developer tooling. HeroUI's `llms.txt` files are more structured for LLM consumption. shadcn's MCP server is already live. Roughly equal — different strengths. + +--- + +## 📊 Table 4: Ecosystem & Community + +| Metric | HeroUI v3 | shadcn/ui | +|---|---|---| +| **npm weekly downloads** | ~81K–120K | ~560K+ | +| **GitHub stars** | ~24K–27K | ~104K+ | +| **Website adoption** | ~39 sites (BuiltWith) | ~14,900 sites (BuiltWith) | +| **First release** | 2021 (as NextUI) | 2023 | +| **Maturity** | v3 is new (2025–2026); rewrite from v2 | 3+ years in production; stable iteration | +| **Stack Overflow coverage** | Limited | Extensive | +| **Third-party integrations** | Growing | Large ecosystem of registries and extensions | +| **Documentation quality** | Thorough; praised by reviewers | Extensive with many examples | +| **Discord/community** | Active Discord + GitHub Discussions | Large community, many tutorials | +| **Backing** | HeroUI Inc. (startup) | Vercel ecosystem (shadcn is a Vercel employee) | + +**Verdict:** shadcn/ui has ~5–14× larger adoption across every metric. This means more answered questions, more community components, and faster bug discovery. HeroUI's community is growing but significantly smaller. + +--- + +## ✅ Advantages of HeroUI over shadcn/ui + +- **🎨 Beautiful out of the box** — Polished defaults with smooth animations; less design work needed to look professional. shadcn requires more customisation to avoid the "every shadcn app looks the same" problem. + +- **♿ Stronger accessibility foundation** — React Aria (Adobe) provides automatic ARIA attributes, keyboard navigation, focus management, and screen reader support. Radix is solid but React Aria is considered more comprehensive. + +- **🔄 Automatic updates** — Bug fixes and new components arrive via `npm update`. With shadcn, you must manually patch your copied components when upstream fixes land. + +- **🏗️ Compound component pattern** — `Alert.Icon`, `Alert.Title`, `Alert.Close` — intuitive, discoverable API. shadcn uses flat imports which are more flexible but less self-documenting. + +- **🎭 Semantic variant naming** — `primary`, `secondary`, `danger` communicate *intent*, not appearance. Easier to maintain a consistent design language across a team. + +- **⚡ CSS-only animations** — GPU-accelerated, no JavaScript runtime overhead. v2's Framer Motion dependency is gone. Lighter bundles. + +- **🧩 Framework-agnostic styles** — `@heroui/styles` can be used with Vue, Svelte, or plain HTML. Useful if the project ever needs a non-React sibling. + +- **📚 Superior LLM documentation** — Dedicated `llms.txt`, `llms-full.txt`, `llms-components.txt`, `llms-patterns.txt` files purpose-built for AI assistants. Well-structured for context-limited models. + +- **🎯 Lower learning curve** — Install, import, use. No CLI ceremony to add each component. Better for beginners and rapid prototyping. + +--- + +## ❌ Disadvantages of HeroUI vs shadcn/ui + +- **📉 Much smaller community** — 5–14× fewer downloads, stars, and production sites. Fewer blog posts, tutorials, and Stack Overflow answers. When you hit an edge case, you're more likely to be on your own. + +- **🔒 Less code ownership** — Components live in `node_modules`. You can customise via props, classes, and variant functions, but you can't modify the component internals without forking. shadcn gives you the actual source. + +- **🐛 v3 known bugs** — Table component lags with 50+ rows (missing `React.memo` on primitives). Chrome-specific bug where Modal/Dropdown leaves popovers stuck on screen. These are documented GitHub issues. + +- **🔀 Migration churn** — NextUI → HeroUI rename + v2 → v3 breaking changes frustrated existing users. GitHub issues show styling regressions (Button colour/radius, modal styles). Track record of disruptive version changes. + +- **💰 Paid Pro tier** — HeroUI Pro (April 2026) introduces paid components and AI tooling. Core remains MIT, but advanced components (220+) cost money. shadcn is entirely free with no premium tier. + +- **📦 208 third-party dependencies** — Larger dependency tree creates security and maintenance surface area. shadcn's copy-paste model has zero runtime dependencies. + +- **🎨 Limited built-in themes** — Only 2 themes (light/dark) vs shadcn's 8+ base themes. Custom themes require manual CSS variable configuration. + +- **⚠️ RSC support incomplete** — Complex interactive components still require `"use client"`. While this is true of both libraries, HeroUI's React Aria foundation means more client-side JavaScript than shadcn's minimal approach. + +- **📋 Smaller component catalogue (free tier)** — ~50–75 free components vs shadcn's 50+ with extensive community registries adding hundreds more. The gap widens when factoring in the shadcn ecosystem. + +--- + +## 🌐 What the Web Says (2026) + +### Positive Sentiment (majority of independent sources) + +> *"Well-designed and intuitive API for beginner and advanced developers"* +> — Shipped.club (ranked HeroUI #6 of 11 best React libraries) + +> *"Beautiful websites regardless of your design experience... gorgeous defaults"* +> — Product Hunt reviews (unanimously 5-star) + +> *"Over 120,000 downloads on npm each week with strong growth"* +> — DEV Community + +> *"Reduces cognitive load for beginners by offering ready-to-use components"* +> — LinkedIn developer testimonial + +### Critical Sentiment (minority but substantive) + +> *"Being a newer library, the community is smaller compared to more established options"* +> — Untitled UI (ranked HeroUI #11 of 14 libraries) + +> *"HeroUI is only React-dependent... 208 third-party dependencies create security and maintenance risk"* +> — daisyUI comparison analysis + +> *"More complex pieces still need client components despite v3 improvements"* +> — Product Hunt reviewer on RSC support + +### Comparison Consensus + +- **For rapid shipping and beautiful defaults:** HeroUI wins +- **For customisation and code ownership:** shadcn/ui wins +- **For enterprise scale:** Neither — MUI or Ant Design preferred +- **For this template project:** Both viable; depends on philosophy preference + +### Sources Consulted + +- Builder.io: "15 Best React UI Libraries for 2026" +- DEV Community: "5 Best React UI Libraries for 2026" +- Untitled UI: "14 Best React UI Component Libraries in 2026" +- daisyUI: "HeroUI vs shadcn/ui" and "daisyUI Alternative to HeroUI" +- Subframe: "NextUI vs Shadcn: Which One is Better" and "NextUI Alternatives" +- Zenn.dev: React component libraries comparison (JP) +- Medium (Hitesh Saha): "Top 5 UI Libraries Compared for 2025" +- Product Hunt: HeroUI/NextUI reviews +- GitHub: heroui-inc/heroui issues and discussions + +--- + +## ⚠️ Known Issues & Risks (HeroUI v3) + +| Issue | Severity | Status | +|---|---|---| +| Table component performance degrades at 50+ rows (missing `React.memo`) | 🟡 Medium | Open on GitHub; wasn't an issue in v2 | +| Chrome: Modal/AlertDialog opened from Dropdown leaves popover stuck | 🟡 Medium | Reported; Chrome-specific | +| Input text cursor jumps to end after mid-text deletion | 🟢 Low | Reported | +| Styling regressions after v2→v3 migration (Button colour/radius) | 🟡 Medium | Multiple reports | +| RSC support not seamless for all interactive components | 🟡 Medium | Partial; ongoing work | +| NextUI → HeroUI rename caused confusion and migration friction | 🟢 Low | One-time; settled now | + +--- + +## 💡 Recommendation + +**Both are viable for this starter template.** The choice comes down to philosophy: + +| If you value... | Choose | +|---|---| +| Beautiful defaults with minimal effort | 🦸 HeroUI | +| Full code ownership and transparency | 🎨 shadcn/ui | +| Automatic bug fixes and updates | 🦸 HeroUI | +| Larger community and ecosystem | 🎨 shadcn/ui | +| Strongest accessibility out of the box | 🦸 HeroUI | +| Zero runtime dependencies | 🎨 shadcn/ui | +| AI-first documentation (llms.txt) | 🦸 HeroUI | +| Mature, battle-tested in production | 🎨 shadcn/ui | +| Everything free, no paid tier | 🎨 shadcn/ui | + +**For this specific project** (a starter template others will clone and build upon), shadcn/ui's copy-paste model arguably fits better — template users get full ownership of every component and can modify anything without fighting a library's API. However, if the goal is to ship polished UIs quickly with less maintenance overhead, HeroUI v3 is a genuinely strong contender that's worth serious consideration. diff --git a/x_docs/own/quick_notes.md b/.xdocs/own/quick_notes.md similarity index 100% rename from x_docs/own/quick_notes.md rename to .xdocs/own/quick_notes.md diff --git a/x_docs/own/theme_resources.md b/.xdocs/own/theme_resources.md similarity index 100% rename from x_docs/own/theme_resources.md rename to .xdocs/own/theme_resources.md diff --git a/x_docs/own/zustand.md b/.xdocs/own/zustand.md similarity index 100% rename from x_docs/own/zustand.md rename to .xdocs/own/zustand.md diff --git a/x_docs/project-setup.md b/.xdocs/project-setup.md similarity index 100% rename from x_docs/project-setup.md rename to .xdocs/project-setup.md diff --git a/x_docs/reference/README.md b/.xdocs/reference/README.md similarity index 100% rename from x_docs/reference/README.md rename to .xdocs/reference/README.md diff --git a/x_docs/reference/default.theme.css b/.xdocs/reference/default.theme.css similarity index 100% rename from x_docs/reference/default.theme.css rename to .xdocs/reference/default.theme.css diff --git a/x_docs/reference/preflight.css b/.xdocs/reference/preflight.css similarity index 100% rename from x_docs/reference/preflight.css rename to .xdocs/reference/preflight.css diff --git a/README.md b/README.md index cd48e4e..30c3859 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -![Next.js 16 - a modern template repo](x_docs/images/github-social-thin.jpg) +![Next.js 16 - a modern template repo](.xdocs/images/nextjs-hero.png) *A Next.js 16 template with modern tooling and CI/CD automation. Code quality checks (linting, formatting, type checking, testing) run via Lefthook locally and GitHub Actions on PRs. Dependency updates automated via Dependabot. Deployments handled by Vercel: Preview for PRs, Production for main. Assumes Claude Code.*
- - Homepage in light and dark modes with UI library guidance + + Homepage in light and dark modes with UI library guidance

Template homepage with light/dark mode setup — UI component library still needed

@@ -24,9 +24,9 @@ npm run dev # Open http://localhost:3000 to see app running **(2) Install Extensions.** In VSCode/Cursor install the extensions shown in [extensions.json](.vscode/extensions.json) -**(3) GitHub + Vercel Setup.** Follow [x_docs/project-setup.md](x_docs/project-setup.md) to set up GitHub and Vercel. +**(3) GitHub + Vercel Setup.** Follow [.xdocs/project-setup.md](.xdocs/project-setup.md) to set up GitHub and Vercel. -**(4) Housekeeping.** Recommended to remove [x_docs/](x_docs/) (these are my working files). Modify [CLAUDE.md](.claude/CLAUDE.md), [.mcp.json](.mcp.json), and [commands/](.claude/commands) as preferred. +**(4) Housekeeping.** Recommended to remove [.xdocs/](.xdocs/) (these are my working files). Modify [CLAUDE.md](.claude/CLAUDE.md), [.mcp.json](.mcp.json), and [commands/](.claude/commands) as preferred. **(5) Choose UI Library.** Choose one that supports Tailwind 4. [shadcn/ui](https://ui.shadcn.com/) (free) and [HeroUI v3](https://heroui.com/) (free) are both LLM friendly and use semantic tokens — which makes theming easy. shadcn is ubiquitous so theme it well to stand out — [tweak-cn](https://tweakcn.com/) and [theme-generator](https://shadcnstudio.com/theme-generator) are helpful. HeroUI is more visually distinct and extremely LLM friendly; it ships with agent skills too. [Tailwind Plus](https://tailwindcss.com/plus) (paid) offers components ([Catalyst](https://tailwindcss.com/plus/ui-kit)), assembled UI blocks, and full site templates, but doesn't include semantic tokens so centralised theming takes more manual work. @@ -40,7 +40,7 @@ For exact list see [package.json](package.json) | Category | Tool | What it does | | :------- | :--- | :----------- | -| Framework | [Next.js 16.2.1](https://nextjs.org) | Core webapp foundation — routing, rendering, API routes, optimisation, and builds | +| Framework | [Next.js 16.2.2](https://nextjs.org) | Core webapp foundation — routing, rendering, API routes, optimisation, and builds | | Language | [TypeScript 6](https://www.typescriptlang.org) | Static type checking with strict mode enabled | | Styling | [Tailwind CSS v4](https://tailwindcss.com) | Utility-first CSS framework for rapid styling | | | [next-themes](https://github.com/pacocoursey/next-themes) | Light/dark mode theming provider | @@ -65,7 +65,7 @@ When starting a new project from this template, you'll typically add: - Authentication (NextAuth.js, Clerk, or Supabase Auth) - Database/ORM (Neon or Supabase with Prisma or Drizzle. Or try Convex!) -![Explained banner](x_docs/images/template-explained.png) +![Explained banner](.xdocs/images/template-explained.png) ## Next.js Installation Explained @@ -95,7 +95,7 @@ npm install # Install updated versions | :----- | :----- | :------------------ | | ▢ [.gitattributes](.gitattributes) | Git line ending and file type handling | Normalises line endings across platforms for consistent Git diffs | | ▢ [.gitignore](.gitignore) | Files and directories Git should ignore | Prevents build outputs and dependencies from being committed | -| ▢ [.markdownlint.yaml](.markdownlint.yaml) | Markdownlint configuration | Disables strict linting rules for practical writing | +| ▢ [.markdownlint-cli2.yaml](.markdownlint-cli2.yaml) | Markdownlint configuration | Disables strict linting rules for practical writing; supports file ignores | | ▢ [.vscode/extensions.json](.vscode/extensions.json) | VS Code extension recommendations | Useful extensions to use in this Next.js project | | ▢ [.vscode/settings.json](.vscode/settings.json) | VS Code editor and formatting settings | Enables auto-formatting and configures Biome and Tailwind extensions | | 🌺 [.claude/commands/](.claude/commands) | Claude Code repeatable prompts | Write commits, evaluate CodeRabbit comments, post-merge cleanup | @@ -236,7 +236,7 @@ Key CI Takeaways - Fast Feedback — Pre-commit catches 90% of issues locally in ~3s vs ~2min CI wait - Quality Gates — Code is validated 2× (local + CI) before reaching production -![Quick rough notes](x_docs/images/rough-notes.png) +![Quick rough notes](.xdocs/images/rough-notes.png) ## Quick Notes @@ -258,6 +258,6 @@ Key CI Takeaways 5. React components are compiled with React Compiler (matching prod) ``` -(3) GitHub - A branch ruleset to be set up to protect main. Includes checks for GitHub workflow jobs to pass before merging PR to main. See [x_docs/project-setup.md](x_docs/project-setup.md). +(3) GitHub - A branch ruleset to be set up to protect main. Includes checks for GitHub workflow jobs to pass before merging PR to main. See [.xdocs/project-setup.md](.xdocs/project-setup.md). -(4) Vercel For Deploys - When you raise a PR it automatically deploys to Vercel Preview and Playwright e2e tests run on that too in addition to GitHub servers. When you merge the PR into main, you are deploying to Vercel prod. See [x_docs/project-setup.md](x_docs/project-setup.md). +(4) Vercel For Deploys - When you raise a PR it automatically deploys to Vercel Preview and Playwright e2e tests run on that too in addition to GitHub servers. When you merge the PR into main, you are deploying to Vercel prod. See [.xdocs/project-setup.md](.xdocs/project-setup.md). diff --git a/x_docs/images/github-social-thin.jpg b/x_docs/images/github-social-thin.jpg deleted file mode 100755 index 80b2e81cd6c090bf7ddeca1800afc689dc3eb613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16760 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 f8~XttskXpdpJ>&+o~jvN+ Date: Mon, 6 Apr 2026 22:13:02 +0400 Subject: [PATCH 3/4] chore: migrate markdownlint config to cli2 format and tidy workspace Markdownlint: - Replace .markdownlint.yaml with .markdownlint-cli2.yaml (adds ignores support and node_modules exclusion) - Add MD028 and MD032 rule disables for blockquotes and template lists VS Code: - Hide .ruff_cache directory in file explorer Co-Authored-By: Claude Opus 4.6 (1M context) --- .markdownlint-cli2.yaml | 17 +++++++++++++++++ .markdownlint.yaml | 11 ----------- .vscode/settings.json | 1 + 3 files changed, 18 insertions(+), 11 deletions(-) create mode 100644 .markdownlint-cli2.yaml delete mode 100644 .markdownlint.yaml diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml new file mode 100644 index 0000000..bb0a79b --- /dev/null +++ b/.markdownlint-cli2.yaml @@ -0,0 +1,17 @@ +# Configuration for markdownlint-cli2 and VSCode/Cursor extension +# Extension: davidanson.vscode-markdownlint + +ignores: + - "node_modules/**" + +# Disable only the rules that interfere with practical markdown writing +config: + MD013: false # Line length (inappropriate for markdown) + MD024: false # Allow duplicate headings ("### Example", "### Example") + MD033: false # Allow inline HTML (
, , etc.) + MD036: false # Allow emphasis (bold/italic) without treating it as heading + MD040: false # Fenced code blocks don't need language specified + MD028: false # Allow blank lines between blockquotes (attributed quotes) + MD041: false # First line doesn't need to be h1 + MD060: false # Table column style (compact tables are fine) + MD032: false # Lists in templates don't need surrounding blank lines diff --git a/.markdownlint.yaml b/.markdownlint.yaml deleted file mode 100644 index b2adfb3..0000000 --- a/.markdownlint.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Configuration for VSCode/Cursor markdownlint extension (matches CodeRabbit AI linter) -# Extension: davidanson.vscode-markdownlint - -# Disable only the rules that interfere with practical markdown writing -MD013: false # Line length (inappropriate for markdown) -MD024: false # Allow duplicate headings ("### Example", "### Example") -MD033: false # Allow inline HTML (
, , etc.) -MD036: false # Allow emphasis (bold/italic) without treating it as heading -MD040: false # Fenced code blocks don't need language specified -MD041: false # First line doesn't need to be h1 -MD060: false # Table column style (compact tables are fine) diff --git a/.vscode/settings.json b/.vscode/settings.json index d8c95cb..69abcd4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -18,6 +18,7 @@ "files.exclude": { "**/.next": true, // Hide Next.js build output "**/node_modules": true, // Hide npm installed dependencies + "**/.ruff_cache": true, // Hide Ruff linter cache "next-env.d.ts": true, // Hide Next.js file (uneditable) "tsconfig.tsbuildinfo": true // Hide TypeScript build info file }, From 9508d212b2a98c9a36c284e7e6758a9a34d30586 Mon Sep 17 00:00:00 2001 From: Michelle Date: Mon, 6 Apr 2026 22:13:53 +0400 Subject: [PATCH 4/4] rules: update permission syntax and expand coderabbit command Permissions (.claude/settings.json): - Add $schema for validation - Update Bash permission syntax from colon to space separators - Sort allow list alphabetically - Remove extra marketplace registration for playwright-skill Commands: - Expand coderabbit command with structured output, thread resolution, and cleanup steps - Update commit template docs glob to include .xdocs/ Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/commands/coderabbit.md | 69 ++++++++++++++++++------ .claude/commands/commit.md | 4 +- .claude/settings.json | 99 +++++++++++++++------------------- 3 files changed, 97 insertions(+), 75 deletions(-) diff --git a/.claude/commands/coderabbit.md b/.claude/commands/coderabbit.md index 27198eb..e58a56a 100644 --- a/.claude/commands/coderabbit.md +++ b/.claude/commands/coderabbit.md @@ -1,12 +1,12 @@ --- description: Evaluate CodeRabbit comment and recommend whether to action it -argument-hint: -allowed-tools: Bash(gh api:*), Read, Glob, Grep +argument-hint: +allowed-tools: Read, Glob, Grep, Bash(gh api *), Bash(rm x_coderabbit_*) --- ## 1. Fetch -Parse `$1` to extract owner, repo, and comment ID. +Parse `$1` to extract owner, repo, PR number, and comment ID. ```bash # strips analysis chain, includes diff context @@ -29,31 +29,68 @@ Evaluate the comment `x_coderabbit_COMMENT_ID.md` against the context of our cod | **Valuable** | Worth doing? Good practice? Or is it over-engineering? | | **Elegant** | Is the suggested fix pragmatic and clean? | -## 3. Recommend +## 3. Recommend & Confirm -1. **Summary**: Explain the comment (2-4 simple sentences) +Follow this output structure: -2. **Verdict**: [Action | Skip | Clarify] - - **Action** - Valid and valuable; implement (or with modifications) - - **Skip** - Not applicable, over-engineered, or incorrect - - **Clarify** - Need more information before deciding + +🐰 CodeRabbit Review: [Terse title for comment] -3. **Reasoning**: Why this verdict (2-3 sentences) +📋 Summary: [Explain the comment, 2-4 simple sentences] -## Output Format +🏷️ Verdict: [Action | Skip | Clarify] +- **Action** - Valid and valuable; implement (or with modifications) +- **Skip** - Not applicable, over-engineered, or incorrect +- **Clarify** - Need more information before deciding -Well structured, use emojis, if using tables keep width <100 chars for readability. +💬 Reasoning: [Why this verdict, 2-3 simple sentences] + -## Replying to CodeRabbit on GitHub +**Output Format:** Well structured, use emojis, if using tables keep width <100 chars for readability. -When you recommend skipping a fix, ask whether the user would like to reply to CodeRabbit. +Ask for confirmation before proceeding with the verdict. -To reply to a PR review comment, use `in_reply_to` on the pull comments endpoint: +## 4. Reply To CodeRabbit and Resolve + +After actioning or skipping, offer to reply to CodeRabbit **and** resolve the thread. Reply first, then resolve. Never do either without user confirmation. + + +Keep replies concise. State reason for action or skip. ```bash gh api repos/OWNER/REPO/pulls/PULL_NUMBER/comments \ -f body="@coderabbitai ..." \ -F in_reply_to=COMMENT_ID ``` + + + +Resolve thread: + +```bash +gh api graphql -f query='{ + repository(owner: "OWNER", name: "REPO") { + pullRequest(number: PULL_NUMBER) { + reviewThreads(first: 50) { + nodes { + id + comments(first: 1) { nodes { databaseId } } + } + } + } + } +}' --jq '.data.repository.pullRequest.reviewThreads.nodes[] + | select(.comments.nodes[0].databaseId == COMMENT_ID) | .id' \ +| xargs -I{} gh api graphql -f query='mutation { + resolveReviewThread(input: { threadId: "{}" }) { + thread { isResolved } + } +}' --jq '.data.resolveReviewThread.thread.isResolved' +``` + + +## 5. Wrap-up + +Clean up: `rm x_coderabbit_COMMENT_ID.md` -Never reply to a CodeRabbit comment unless confirmed by the user. +State final summary, in 4-10 words and emoji. diff --git a/.claude/commands/commit.md b/.claude/commands/commit.md index b4cc619..58032f0 100644 --- a/.claude/commands/commit.md +++ b/.claude/commands/commit.md @@ -24,12 +24,10 @@ Additional user instructions: $ARGUMENTS [main_prefix]: [brief main summary in imperative mood] [Section heading]: - - [Significant changes and impact over minor details] - [Write for someone reading this git log in 6 months] [Additional section (for multi-concern commits)]: - - [etc.] [2-3 terse sentences of why / benefit / impact] @@ -46,7 +44,7 @@ Additional user instructions: $ARGUMENTS - `refactor:` code changes that neither fix bugs nor add features - `style:` code formatting, visual consistency, linting fixes; no functional change - `chore:` dev workflow, workspace config, dependency updates, dev tools e.g. `.vscode/**/*`, `pyproject.toml`, `.gitignore` -- `docs:` documentation changes only e.g. `README.md`, `docs/**/*.md`, `x_docs/**/*.md` +- `docs:` documentation changes only e.g. `README.md`, `docs/**/*`, `x_docs/**/*`, `.xdocs/**/*` - `feat:` new feature for users (adds functionality) diff --git a/.claude/settings.json b/.claude/settings.json index a3e6977..f2e2de0 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -1,22 +1,51 @@ { - "extraKnownMarketplaces": { - "playwright-skill": { - "source": { - "source": "github", - "repo": "lackeyjb/playwright-skill" - } - } - }, + "$schema": "https://json.schemastore.org/claude-code-settings.json", + "permissions": { "deny": ["Read(**/.env)", "Read(**/.envrc)"], "ask": [], - "allow": [ - "mcp__ide__getDiagnostics", - - "Bash(claude mcp get:*)", + "Bash(cat *)", + "Bash(claude mcp get *)", "Bash(claude mcp list)", - + "Bash(echo *)", + "Bash(find *)", + "Bash(gh pr checks *)", + "Bash(gh pr list *)", + "Bash(gh run list *)", + "Bash(gh run view *)", + "Bash(git log *)", + "Bash(ls *)", + "Bash(lsof *)", + "Bash(npm outdated)", + "Bash(npm run build)", + "Bash(npm run check)", + "Bash(npm run dev)", + "Bash(npm run lint)", + "Bash(npm run lint:md *)", + "Bash(npm run start)", + "Bash(npm run test)", + "Bash(npm run test:e2e *)", + "Bash(npm run test:unit *)", + "Bash(npm run typecheck)", + "Bash(npx @biomejs/biome *)", + "Bash(npx lefthook *)", + "Bash(npx playwright *)", + "Bash(npx vercel *)", + "Bash(sed *)", + "Bash(tree *)", + "Bash(vercel --help)", + "Bash(vercel env --help)", + "Bash(vercel env ls *)", + "Bash(vercel git --help)", + "Bash(vercel integration --help)", + "Bash(vercel list *)", + "Bash(vercel open)", + "Bash(vercel project ls *)", + "Bash(vercel whoami)", + "Bash(wc *)", + "Bash(xargs *)", + "mcp__ide__getDiagnostics", "mcp__playwright__browser_click", "mcp__playwright__browser_close", "mcp__playwright__browser_console_messages", @@ -29,49 +58,7 @@ "mcp__playwright__browser_snapshot", "mcp__playwright__browser_tabs", "mcp__playwright__browser_take_screenshot", - "mcp__playwright__browser_wait_for", - - "Bash(cat:*)", - "Bash(echo:*)", - "Bash(find:*)", - "Bash(lsof:*)", - "Bash(ls:*)", - "Bash(sed:*)", - "Bash(tree:*)", - "Bash(wc:*)", - "Bash(xargs:*)", - - "Bash(git log:*)", - "Bash(gh pr checks:*)", - "Bash(gh pr list:*)", - "Bash(gh run list:*)", - "Bash(gh run view:*)", - - "Bash(npm outdated)", - "Bash(npm run build)", - "Bash(npm run dev)", - "Bash(npm run start)", - "Bash(npm run check)", - "Bash(npm run lint)", - "Bash(npm run lint:md:*)", - "Bash(npm run test)", - "Bash(npm run test:e2e:*)", - "Bash(npm run test:unit:*)", - "Bash(npm run typecheck)", - "Bash(npx @biomejs/biome:*)", - "Bash(npx lefthook:*)", - "Bash(npx playwright:*)", - - "Bash(npx vercel:*)", - "Bash(vercel --help)", - "Bash(vercel env --help)", - "Bash(vercel env ls:*)", - "Bash(vercel git --help)", - "Bash(vercel integration --help)", - "Bash(vercel list:*)", - "Bash(vercel open)", - "Bash(vercel project ls:*)", - "Bash(vercel whoami)" + "mcp__playwright__browser_wait_for" ] } }