From c067df35523653607a052284420b8fa9a63136ef Mon Sep 17 00:00:00 2001 From: Vitor George Date: Fri, 4 Jul 2025 12:38:27 +0100 Subject: [PATCH 01/26] feat: add CLI generator for project scaffolding --- cli/.gitignore | 4 + cli/README.md | 78 ++ cli/generated/.gitignore | 3 + cli/package.json | 36 + cli/pnpm-lock.yaml | 2654 ++++++++++++++++++++++++++++++++++++++ cli/src/generator.ts | 123 ++ cli/src/index.ts | 23 + cli/src/types.ts | 7 + cli/tsconfig.json | 22 + cli/tsup.config.ts | 16 + 10 files changed, 2966 insertions(+) create mode 100644 cli/.gitignore create mode 100644 cli/README.md create mode 100644 cli/generated/.gitignore create mode 100644 cli/package.json create mode 100644 cli/pnpm-lock.yaml create mode 100644 cli/src/generator.ts create mode 100644 cli/src/index.ts create mode 100644 cli/src/types.ts create mode 100644 cli/tsconfig.json create mode 100644 cli/tsup.config.ts diff --git a/cli/.gitignore b/cli/.gitignore new file mode 100644 index 0000000..aa0926a --- /dev/null +++ b/cli/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +dist/ +.env +*.log diff --git a/cli/README.md b/cli/README.md new file mode 100644 index 0000000..3e231db --- /dev/null +++ b/cli/README.md @@ -0,0 +1,78 @@ +# project-seed CLI + +Command line interface for generating new SPA projects based on the project-seed template. + +## Installation + +The CLI is part of the project-seed repository and can be used locally during development. + +## Usage + +```bash +# Generate a new project +node cli/dist/index.js my-project-name + +# Show help +node cli/dist/index.js --help + +# Show version +node cli/dist/index.js --version +``` + +## Development + +### Setup + +```bash +cd cli +pnpm install +``` + +### Build + +```bash +pnpm build +``` + +The CLI is built using [tsup](https://github.com/egoist/tsup) and outputs to `dist/index.js`. + +### Development Mode + +```bash +pnpm dev +``` + +Runs tsup in watch mode, automatically rebuilding on file changes. + +### Testing + +```bash +pnpm test +``` + +### Linting + +```bash +pnpm lint +``` + +## Generated Projects + +Projects are generated in `cli/generated/` directory. This directory is gitignored to prevent generated projects from being committed. + +### What Gets Generated + +- Complete copy of the project-seed template +- Project name replaced in `package.json` +- Template placeholders replaced in `README.md` +- `.env` file with default Vite environment variables +- All development dependencies and configuration files + +### Template Processing + +The generator: + +1. Copies all files from the root template (excluding CLI and generated directories) +2. Replaces project name in `package.json` +3. Processes `_README.md` template and renames it to `README.md` +4. Creates `.env` file with default environment variables diff --git a/cli/generated/.gitignore b/cli/generated/.gitignore new file mode 100644 index 0000000..9e28915 --- /dev/null +++ b/cli/generated/.gitignore @@ -0,0 +1,3 @@ +# Ignore all generated projects +* +!.gitignore diff --git a/cli/package.json b/cli/package.json new file mode 100644 index 0000000..9c791cd --- /dev/null +++ b/cli/package.json @@ -0,0 +1,36 @@ +{ + "name": "project-seed", + "description": "Command line interface for project-seed", + "version": "9.0.0", + "type": "commonjs", + "bin": { + "project-seed": "./dist/index.js" + }, + "files": [ + "dist" + ], + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "test": "vitest", + "lint": "eslint src/", + "type-check": "tsc --noEmit" + }, + "dependencies": { + "commander": "^12.0.0", + "fs-extra": "^11.2.0", + "inquirer": "^9.2.15" + }, + "devDependencies": { + "@types/fs-extra": "^11.0.4", + "@types/inquirer": "^9.0.7", + "@types/node": "^22.10.7", + "eslint": "^9.21.0", + "tsup": "^8.0.2", + "typescript": "~5.7.2", + "vitest": "^2.1.8" + }, + "engines": { + "node": ">=18.0.0" + } +} diff --git a/cli/pnpm-lock.yaml b/cli/pnpm-lock.yaml new file mode 100644 index 0000000..84a783a --- /dev/null +++ b/cli/pnpm-lock.yaml @@ -0,0 +1,2654 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + commander: + specifier: ^12.0.0 + version: 12.1.0 + fs-extra: + specifier: ^11.2.0 + version: 11.3.0 + inquirer: + specifier: ^9.2.15 + version: 9.3.7 + devDependencies: + '@types/fs-extra': + specifier: ^11.0.4 + version: 11.0.4 + '@types/inquirer': + specifier: ^9.0.7 + version: 9.0.8 + '@types/node': + specifier: ^22.10.7 + version: 22.16.0 + eslint: + specifier: ^9.21.0 + version: 9.30.1 + tsup: + specifier: ^8.0.2 + version: 8.5.0(postcss@8.5.6)(typescript@5.7.3) + typescript: + specifier: ~5.7.2 + version: 5.7.3 + vitest: + specifier: ^2.1.8 + version: 2.1.9(@types/node@22.16.0) + +packages: + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.25.5': + resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.25.5': + resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.25.5': + resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.25.5': + resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.25.5': + resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.5': + resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.25.5': + resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.5': + resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.25.5': + resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.25.5': + resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.25.5': + resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.25.5': + resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.25.5': + resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.25.5': + resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.5': + resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.25.5': + resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.25.5': + resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.5': + resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.5': + resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.5': + resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.5': + resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.5': + resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.25.5': + resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.25.5': + resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.5': + resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.3.0': + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.14.0': + resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.15.1': + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.30.1': + resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.3.3': + resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@inquirer/figures@1.0.12': + resolution: {integrity: sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==} + engines: {node: '>=18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/rollup-android-arm-eabi@4.44.1': + resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.44.1': + resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.44.1': + resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.44.1': + resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.44.1': + resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.44.1': + resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': + resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.44.1': + resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.44.1': + resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.44.1': + resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': + resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': + resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.44.1': + resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.44.1': + resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.44.1': + resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.44.1': + resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.44.1': + resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.44.1': + resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.44.1': + resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.44.1': + resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==} + cpu: [x64] + os: [win32] + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/fs-extra@11.0.4': + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + + '@types/inquirer@9.0.8': + resolution: {integrity: sha512-CgPD5kFGWsb8HJ5K7rfWlifao87m4ph8uioU7OTncJevmE/VLIqAAjfQtko578JZg7/f69K4FgqYym3gNr7DeA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + + '@types/node@22.16.0': + resolution: {integrity: sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ==} + + '@types/through@0.0.33': + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + + '@vitest/expect@2.1.9': + resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} + + '@vitest/mocker@2.1.9': + resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + + '@vitest/runner@2.1.9': + resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} + + '@vitest/snapshot@2.1.9': + resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} + + '@vitest/spy@2.1.9': + resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} + + '@vitest/utils@2.1.9': + resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.30.1: + resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + expect-type@1.2.1: + resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + engines: {node: '>=12.0.0'} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + fix-dts-default-cjs-exports@1.0.1: + resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@9.3.7: + resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==} + engines: {node: '>=18'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@3.1.4: + resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + rollup@4.44.1: + resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsup@8.5.0: + resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vite-node@2.1.9: + resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite@5.4.19: + resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@2.1.9: + resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.9 + '@vitest/ui': 2.1.9 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + +snapshots: + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.25.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.25.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.25.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.25.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.25.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.25.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.25.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.25.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.25.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.25.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.25.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.25.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.25.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.25.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.25.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.25.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.25.5': + optional: true + + '@esbuild/netbsd-arm64@0.25.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.25.5': + optional: true + + '@esbuild/openbsd-arm64@0.25.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.25.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.25.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.25.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.25.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.25.5': + optional: true + + '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1)': + dependencies: + eslint: 9.30.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.21.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.1 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.3.0': {} + + '@eslint/core@0.14.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/core@0.15.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.1 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.30.1': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.3.3': + dependencies: + '@eslint/core': 0.15.1 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@inquirer/figures@1.0.12': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.12': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.4': {} + + '@jridgewell/trace-mapping@0.3.29': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.4 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/rollup-android-arm-eabi@4.44.1': + optional: true + + '@rollup/rollup-android-arm64@4.44.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.44.1': + optional: true + + '@rollup/rollup-darwin-x64@4.44.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.44.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.44.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.44.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.44.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.44.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.44.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.44.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.44.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.44.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.44.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.44.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.44.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.44.1': + optional: true + + '@types/estree@1.0.8': {} + + '@types/fs-extra@11.0.4': + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 22.16.0 + + '@types/inquirer@9.0.8': + dependencies: + '@types/through': 0.0.33 + rxjs: 7.8.2 + + '@types/json-schema@7.0.15': {} + + '@types/jsonfile@6.1.4': + dependencies: + '@types/node': 22.16.0 + + '@types/node@22.16.0': + dependencies: + undici-types: 6.21.0 + + '@types/through@0.0.33': + dependencies: + '@types/node': 22.16.0 + + '@vitest/expect@2.1.9': + dependencies: + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 + chai: 5.2.0 + tinyrainbow: 1.2.0 + + '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@22.16.0))': + dependencies: + '@vitest/spy': 2.1.9 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 5.4.19(@types/node@22.16.0) + + '@vitest/pretty-format@2.1.9': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/runner@2.1.9': + dependencies: + '@vitest/utils': 2.1.9 + pathe: 1.1.2 + + '@vitest/snapshot@2.1.9': + dependencies: + '@vitest/pretty-format': 2.1.9 + magic-string: 0.30.17 + pathe: 1.1.2 + + '@vitest/spy@2.1.9': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@2.1.9': + dependencies: + '@vitest/pretty-format': 2.1.9 + loupe: 3.1.4 + tinyrainbow: 1.2.0 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + argparse@2.0.1: {} + + assertion-error@2.0.1: {} + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-require@5.1.0(esbuild@0.25.5): + dependencies: + esbuild: 0.25.5 + load-tsconfig: 0.2.5 + + cac@6.7.14: {} + + callsites@3.1.0: {} + + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.4 + pathval: 2.0.1 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chardet@0.7.0: {} + + check-error@2.1.1: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-width@4.1.0: {} + + clone@1.0.4: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@12.1.0: {} + + commander@4.1.1: {} + + concat-map@0.0.1: {} + + confbox@0.1.8: {} + + consola@3.4.2: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.4.1: + dependencies: + ms: 2.1.3 + + deep-eql@5.0.2: {} + + deep-is@0.1.4: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + es-module-lexer@1.7.0: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.25.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.5 + '@esbuild/android-arm': 0.25.5 + '@esbuild/android-arm64': 0.25.5 + '@esbuild/android-x64': 0.25.5 + '@esbuild/darwin-arm64': 0.25.5 + '@esbuild/darwin-x64': 0.25.5 + '@esbuild/freebsd-arm64': 0.25.5 + '@esbuild/freebsd-x64': 0.25.5 + '@esbuild/linux-arm': 0.25.5 + '@esbuild/linux-arm64': 0.25.5 + '@esbuild/linux-ia32': 0.25.5 + '@esbuild/linux-loong64': 0.25.5 + '@esbuild/linux-mips64el': 0.25.5 + '@esbuild/linux-ppc64': 0.25.5 + '@esbuild/linux-riscv64': 0.25.5 + '@esbuild/linux-s390x': 0.25.5 + '@esbuild/linux-x64': 0.25.5 + '@esbuild/netbsd-arm64': 0.25.5 + '@esbuild/netbsd-x64': 0.25.5 + '@esbuild/openbsd-arm64': 0.25.5 + '@esbuild/openbsd-x64': 0.25.5 + '@esbuild/sunos-x64': 0.25.5 + '@esbuild/win32-arm64': 0.25.5 + '@esbuild/win32-ia32': 0.25.5 + '@esbuild/win32-x64': 0.25.5 + + escape-string-regexp@4.0.0: {} + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.30.1: + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 + '@eslint/core': 0.14.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.30.1 + '@eslint/plugin-kit': 0.3.3 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + expect-type@1.2.1: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fdir@6.4.6(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + fix-dts-default-cjs-exports@1.0.1: + dependencies: + magic-string: 0.30.17 + mlly: 1.7.4 + rollup: 4.44.1 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + globals@14.0.0: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inherits@2.0.4: {} + + inquirer@9.3.7: + dependencies: + '@inquirer/figures': 1.0.12 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + external-editor: 3.1.0 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-interactive@1.0.0: {} + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + joycon@3.1.1: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + load-tsconfig@0.2.5: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lodash.sortby@4.7.0: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@3.1.4: {} + + lru-cache@10.4.3: {} + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + + mimic-fn@2.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minipass@7.1.2: {} + + mlly@1.7.4: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + ms@2.1.3: {} + + mute-stream@1.0.0: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + object-assign@4.1.1: {} + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-tmpdir@1.0.2: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + pathe@1.1.2: {} + + pathe@2.0.3: {} + + pathval@2.0.1: {} + + picocolors@1.1.1: {} + + picomatch@4.0.2: {} + + pirates@4.0.7: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + postcss-load-config@6.0.1(postcss@8.5.6): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + postcss: 8.5.6 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + punycode@2.3.1: {} + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@4.1.2: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + rollup@4.44.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.44.1 + '@rollup/rollup-android-arm64': 4.44.1 + '@rollup/rollup-darwin-arm64': 4.44.1 + '@rollup/rollup-darwin-x64': 4.44.1 + '@rollup/rollup-freebsd-arm64': 4.44.1 + '@rollup/rollup-freebsd-x64': 4.44.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.1 + '@rollup/rollup-linux-arm-musleabihf': 4.44.1 + '@rollup/rollup-linux-arm64-gnu': 4.44.1 + '@rollup/rollup-linux-arm64-musl': 4.44.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-musl': 4.44.1 + '@rollup/rollup-linux-s390x-gnu': 4.44.1 + '@rollup/rollup-linux-x64-gnu': 4.44.1 + '@rollup/rollup-linux-x64-musl': 4.44.1 + '@rollup/rollup-win32-arm64-msvc': 4.44.1 + '@rollup/rollup-win32-ia32-msvc': 4.44.1 + '@rollup/rollup-win32-x64-msvc': 4.44.1 + fsevents: 2.3.3 + + run-async@3.0.0: {} + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + siginfo@2.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + source-map-js@1.2.1: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + stackback@0.0.2: {} + + std-env@3.9.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-json-comments@3.1.1: {} + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.12 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + ts-interface-checker: 0.1.13 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 + + tinypool@1.1.1: {} + + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + tree-kill@1.2.2: {} + + ts-interface-checker@0.1.13: {} + + tslib@2.8.1: {} + + tsup@8.5.0(postcss@8.5.6)(typescript@5.7.3): + dependencies: + bundle-require: 5.1.0(esbuild@0.25.5) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.1 + esbuild: 0.25.5 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(postcss@8.5.6) + resolve-from: 5.0.0 + rollup: 4.44.1 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.5.6 + typescript: 5.7.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.21.3: {} + + typescript@5.7.3: {} + + ufo@1.6.1: {} + + undici-types@6.21.0: {} + + universalify@2.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + vite-node@2.1.9(@types/node@22.16.0): + dependencies: + cac: 6.7.14 + debug: 4.4.1 + es-module-lexer: 1.7.0 + pathe: 1.1.2 + vite: 5.4.19(@types/node@22.16.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.19(@types/node@22.16.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.6 + rollup: 4.44.1 + optionalDependencies: + '@types/node': 22.16.0 + fsevents: 2.3.3 + + vitest@2.1.9(@types/node@22.16.0): + dependencies: + '@vitest/expect': 2.1.9 + '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@22.16.0)) + '@vitest/pretty-format': 2.1.9 + '@vitest/runner': 2.1.9 + '@vitest/snapshot': 2.1.9 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 + chai: 5.2.0 + debug: 4.4.1 + expect-type: 1.2.1 + magic-string: 0.30.17 + pathe: 1.1.2 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.1.1 + tinyrainbow: 1.2.0 + vite: 5.4.19(@types/node@22.16.0) + vite-node: 2.1.9(@types/node@22.16.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.16.0 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + webidl-conversions@4.0.2: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + word-wrap@1.2.5: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + yocto-queue@0.1.0: {} + + yoctocolors-cjs@2.1.2: {} diff --git a/cli/src/generator.ts b/cli/src/generator.ts new file mode 100644 index 0000000..f4e78ea --- /dev/null +++ b/cli/src/generator.ts @@ -0,0 +1,123 @@ +import fs from 'fs-extra'; +import path from 'path'; + +const EXCLUDE = [ + 'cli', + 'cli/generated', + 'node_modules', + 'dist', + '.git', + 'pnpm-lock.yaml', + 'package-lock.json', + 'yarn.lock', + '.DS_Store' +]; + +async function copyProjectFiles(src: string, dest: string): Promise { + await fs.ensureDir(dest); + + const items = await fs.readdir(src); + + for (const item of items) { + if (EXCLUDE.includes(item)) continue; + + const srcPath = path.join(src, item); + const destPath = path.join(dest, item); + const stat = await fs.stat(srcPath); + + if (stat.isDirectory()) { + await fs.copy(srcPath, destPath); + } else { + await fs.copy(srcPath, destPath); + } + } +} + +async function replaceInFile( + filePath: string, + replacements: Record +): Promise { + let content = await fs.readFile(filePath, 'utf8'); + + for (const [search, replace] of Object.entries(replacements)) { + content = content.replace(new RegExp(search, 'g'), replace); + } + + await fs.writeFile(filePath, content); +} + +async function createEnvFile( + targetDir: string, + projectName: string +): Promise { + const envContent = `# Vite environment variables +# For local development, these can be left as defaults +# For production deployment, update these values + +VITE_BASE_URL= +VITE_APP_TITLE=${projectName} +VITE_APP_DESCRIPTION=A web application built with Vite and React +`; + await fs.writeFile(path.join(targetDir, '.env'), envContent); +} + +async function processReadme( + targetDir: string, + projectName: string +): Promise { + const readmePath = path.join(targetDir, '_README.md'); + + if (await fs.pathExists(readmePath)) { + const projectTitle = projectName.replace(/(^|[-_])([a-z])/g, (s) => + s.toUpperCase() + ); + + await replaceInFile(readmePath, { + '{{Project name}}': projectTitle, + '{{Description}}': `A web application built with Vite and React for ${projectTitle}` + }); + + const finalReadme = path.join(targetDir, 'README.md'); + await fs.move(readmePath, finalReadme, { overwrite: true }); + } +} + +async function updatePackageJson( + targetDir: string, + projectName: string +): Promise { + const pkgPath = path.join(targetDir, 'package.json'); + + if (await fs.pathExists(pkgPath)) { + await replaceInFile(pkgPath, { + '"name": *"[^"]+"': `"name": "${projectName}"` + }); + } +} + +export async function generateProject(projectName?: string): Promise { + if (!projectName) { + throw new Error('Project name is required'); + } + + const targetDir = path.resolve('cli/generated', projectName); + + if (await fs.pathExists(targetDir)) { + throw new Error(`Target directory ${targetDir} already exists.`); + } + + try { + await copyProjectFiles(path.resolve('.'), targetDir); + await updatePackageJson(targetDir, projectName); + await processReadme(targetDir, projectName); + await createEnvFile(targetDir, projectName); + + // eslint-disable-next-line no-console + console.log(`Project generated at ${targetDir}`); + } catch (error) { + if (await fs.pathExists(targetDir)) { + await fs.remove(targetDir); + } + throw error; + } +} diff --git a/cli/src/index.ts b/cli/src/index.ts new file mode 100644 index 0000000..9b4f693 --- /dev/null +++ b/cli/src/index.ts @@ -0,0 +1,23 @@ +#!/usr/bin/env node + +import { Command } from 'commander'; +import { generateProject } from './generator.ts'; +import pkg from '../package.json'; + +const program = new Command(); + +program.name(pkg.name).description(pkg.description).version(pkg.version); + +program + .argument('[project-name]', 'Name of the project to create') + .action(async (projectName: string | undefined) => { + try { + await generateProject(projectName); + } catch (error) { + // eslint-disable-next-line no-console + console.error('Error generating project:', error); + process.exit(1); + } + }); + +program.parse(); diff --git a/cli/src/types.ts b/cli/src/types.ts new file mode 100644 index 0000000..c033dba --- /dev/null +++ b/cli/src/types.ts @@ -0,0 +1,7 @@ +export interface GeneratorOptions { + projectName?: string; +} + +export interface ProjectConfig { + name: string; +} diff --git a/cli/tsconfig.json b/cli/tsconfig.json new file mode 100644 index 0000000..5e802c2 --- /dev/null +++ b/cli/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/cli/tsup.config.ts b/cli/tsup.config.ts new file mode 100644 index 0000000..bba372b --- /dev/null +++ b/cli/tsup.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['cjs'], + platform: 'node', + target: 'node18', + outDir: 'dist', + clean: true, + outExtension() { + return { + js: '.js' + }; + }, + external: ['inquirer'] +}); From 7a87a827775d08da49b27067d4ae7832abfe14b0 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Fri, 4 Jul 2025 17:04:02 +0100 Subject: [PATCH 02/26] feat: refactor CLI to use base template folder instead of copying from root --- cli/src/generator.ts | 22 +- cli/templates/base/.babelrc | 9 + cli/templates/base/.editorconfig | 24 ++ cli/templates/base/.gitignore | 72 ++++++ cli/templates/base/.nvmrc | 1 + cli/templates/base/.prettierrc | 7 + cli/templates/base/.stylelintrc.json | 19 ++ cli/templates/base/LICENSE | 21 ++ cli/templates/base/_README.md | 70 ++++++ cli/templates/base/app/main.tsx | 26 +++ .../base/app/media/layout/ds-logo-pos.svg | 1 + .../base/app/styles/color-palette.ts | 110 +++++++++ cli/templates/base/app/styles/theme.ts | 21 ++ cli/templates/base/app/vite-env.d.ts | 1 + cli/templates/base/eslint.config.mjs | 60 +++++ cli/templates/base/index.html | 96 ++++++++ cli/templates/base/jest.config.js | 211 ++++++++++++++++++ cli/templates/base/jest.setup.ts | 28 +++ cli/templates/base/package.json | 81 +++++++ .../base/public/meta/android-chrome.png | Bin 0 -> 2081 bytes .../base/public/meta/apple-touch-icon.png | Bin 0 -> 1980 bytes cli/templates/base/public/meta/favicon.png | Bin 0 -> 1500 bytes cli/templates/base/public/meta/meta-image.png | Bin 0 -> 8517 bytes cli/templates/base/test/example.test.ts | 5 + cli/templates/base/tsconfig.app.json | 34 +++ cli/templates/base/tsconfig.json | 7 + cli/templates/base/tsconfig.node.json | 24 ++ .../base/vite-plugin-port-scanner.ts | 28 +++ cli/templates/base/vite.config.mts | 25 +++ 29 files changed, 986 insertions(+), 17 deletions(-) create mode 100644 cli/templates/base/.babelrc create mode 100644 cli/templates/base/.editorconfig create mode 100644 cli/templates/base/.gitignore create mode 100644 cli/templates/base/.nvmrc create mode 100644 cli/templates/base/.prettierrc create mode 100644 cli/templates/base/.stylelintrc.json create mode 100644 cli/templates/base/LICENSE create mode 100644 cli/templates/base/_README.md create mode 100644 cli/templates/base/app/main.tsx create mode 100644 cli/templates/base/app/media/layout/ds-logo-pos.svg create mode 100644 cli/templates/base/app/styles/color-palette.ts create mode 100644 cli/templates/base/app/styles/theme.ts create mode 100644 cli/templates/base/app/vite-env.d.ts create mode 100644 cli/templates/base/eslint.config.mjs create mode 100644 cli/templates/base/index.html create mode 100644 cli/templates/base/jest.config.js create mode 100644 cli/templates/base/jest.setup.ts create mode 100644 cli/templates/base/package.json create mode 100755 cli/templates/base/public/meta/android-chrome.png create mode 100755 cli/templates/base/public/meta/apple-touch-icon.png create mode 100755 cli/templates/base/public/meta/favicon.png create mode 100755 cli/templates/base/public/meta/meta-image.png create mode 100644 cli/templates/base/test/example.test.ts create mode 100644 cli/templates/base/tsconfig.app.json create mode 100644 cli/templates/base/tsconfig.json create mode 100644 cli/templates/base/tsconfig.node.json create mode 100644 cli/templates/base/vite-plugin-port-scanner.ts create mode 100644 cli/templates/base/vite.config.mts diff --git a/cli/src/generator.ts b/cli/src/generator.ts index f4e78ea..4091a57 100644 --- a/cli/src/generator.ts +++ b/cli/src/generator.ts @@ -1,26 +1,12 @@ import fs from 'fs-extra'; import path from 'path'; -const EXCLUDE = [ - 'cli', - 'cli/generated', - 'node_modules', - 'dist', - '.git', - 'pnpm-lock.yaml', - 'package-lock.json', - 'yarn.lock', - '.DS_Store' -]; - -async function copyProjectFiles(src: string, dest: string): Promise { +async function copyBaseTemplateFiles(src: string, dest: string): Promise { await fs.ensureDir(dest); const items = await fs.readdir(src); for (const item of items) { - if (EXCLUDE.includes(item)) continue; - const srcPath = path.join(src, item); const destPath = path.join(dest, item); const stat = await fs.stat(srcPath); @@ -100,14 +86,16 @@ export async function generateProject(projectName?: string): Promise { throw new Error('Project name is required'); } - const targetDir = path.resolve('cli/generated', projectName); + const targetDir = path.resolve(__dirname, '../generated', projectName); + const baseTemplateDir = path.resolve(__dirname, '../templates/base'); if (await fs.pathExists(targetDir)) { throw new Error(`Target directory ${targetDir} already exists.`); } try { - await copyProjectFiles(path.resolve('.'), targetDir); + // Copy base template files only + await copyBaseTemplateFiles(baseTemplateDir, targetDir); await updatePackageJson(targetDir, projectName); await processReadme(targetDir, projectName); await createEnvFile(targetDir, projectName); diff --git a/cli/templates/base/.babelrc b/cli/templates/base/.babelrc new file mode 100644 index 0000000..8bcf18e --- /dev/null +++ b/cli/templates/base/.babelrc @@ -0,0 +1,9 @@ +{ + "env": { + "test": { + "presets": ["@babel/preset-react", "@babel/preset-typescript"], + "plugins": ["@babel/plugin-transform-modules-commonjs"] + } + }, + "plugins": ["babel-plugin-styled-components"] +} diff --git a/cli/templates/base/.editorconfig b/cli/templates/base/.editorconfig new file mode 100644 index 0000000..df78c75 --- /dev/null +++ b/cli/templates/base/.editorconfig @@ -0,0 +1,24 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true + +# Matches multiple files with brace expansion notation +# Set default charset +[*.{js}] +charset = utf-8 + +# Indentation override for all JS under lib directory +[lib/**.js] +indent_style = space +indent_size = 2 + +# Matches the exact files either package.json or .travis.yml +[{package.json,.travis.yml}] +indent_style = space +indent_size = 2 diff --git a/cli/templates/base/.gitignore b/cli/templates/base/.gitignore new file mode 100644 index 0000000..62e94e0 --- /dev/null +++ b/cli/templates/base/.gitignore @@ -0,0 +1,72 @@ +################################################ +############### .gitignore ################## +################################################ +# +# This file is only relevant if you are using git. +# +# Files which match the splat patterns below will +# be ignored by git. This keeps random crap and +# and sensitive credentials from being uploaded to +# your repository. It allows you to configure your +# app for your machine without accidentally +# committing settings which will smash the local +# settings of other developers on your team. +# +# Some reasonable defaults are included below, +# but, of course, you should modify/extend/prune +# to fit your needs! +################################################ + +app/scripts/time.json + +node_modules +bower_components +.sass-cache +test/bower_components + + +################################################ +# Node.js / NPM +# +# Common files generated by Node, NPM, and the +# related ecosystem. +################################################ + +lib-cov +*.seed +*.log +*.out +*.pid +npm-debug.log +yarn-error.log +.parcel-cache + + +################################################ +# Apidocs +# +# Common files generated by apidocs and other docs +################################################ + + +################################################ +# Miscellaneous +# +# Common files generated by text editors, +# operating systems, file systems, etc. +################################################ + +*~ +*# +.DS_STORE +.DS_Store +.netbeans +nbproject +.idea +.resources +.node_history +temp +tmp +.tmp +dist +parcel-bundle-reports \ No newline at end of file diff --git a/cli/templates/base/.nvmrc b/cli/templates/base/.nvmrc new file mode 100644 index 0000000..8fdd954 --- /dev/null +++ b/cli/templates/base/.nvmrc @@ -0,0 +1 @@ +22 \ No newline at end of file diff --git a/cli/templates/base/.prettierrc b/cli/templates/base/.prettierrc new file mode 100644 index 0000000..36a9c9b --- /dev/null +++ b/cli/templates/base/.prettierrc @@ -0,0 +1,7 @@ +{ + "semi": true, + "trailingComma": "none", + "singleQuote": true, + "jsxSingleQuote": true, + "printWidth": 80 +} \ No newline at end of file diff --git a/cli/templates/base/.stylelintrc.json b/cli/templates/base/.stylelintrc.json new file mode 100644 index 0000000..aba928a --- /dev/null +++ b/cli/templates/base/.stylelintrc.json @@ -0,0 +1,19 @@ +{ + "extends": [ + "stylelint-config-standard", + "stylelint-config-styled-components" + ], + "customSyntax": "postcss-styled-syntax", + "rules": { + "font-family-no-missing-generic-family-keyword": null, + "no-descending-specificity": [ + true, + { + "severity": "warning" + } + ] + }, + "ignoreFiles": [ + "**/*.d.ts" + ] +} \ No newline at end of file diff --git a/cli/templates/base/LICENSE b/cli/templates/base/LICENSE new file mode 100644 index 0000000..46fe441 --- /dev/null +++ b/cli/templates/base/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Development Seed + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/cli/templates/base/_README.md b/cli/templates/base/_README.md new file mode 100644 index 0000000..35e0246 --- /dev/null +++ b/cli/templates/base/_README.md @@ -0,0 +1,70 @@ +# {{Project name}} + +{{Description}} + +## Installation and Usage + +The steps below will walk you through setting up your own instance of the project. + +### Install Project Dependencies + +To set up the development environment for this website, you'll need to install the following on your system: + +- [Node](http://nodejs.org/) (see version in [.nvmrc](.nvmrc)) (To manage multiple node versions we recommend [nvm](https://github.com/creationix/nvm)) +- [pnpm](https://pnpm.io/) Install using corepack (`corepack enable pnpm`) + +### Install Application Dependencies + +If you use [`nvm`](https://github.com/creationix/nvm), activate the desired Node version: + +```sh +nvm install +``` + +Install Node modules: + +```sh +pnpm install +``` + +## Usage + +### Config files + +Configuration is done using [dot.env](https://vite.dev/guide/env-and-mode#env-files) files. + +These files are used to simplify the configuration of the app and should not contain sensitive information. + +Run the project locally by copying the `.env` to `.env.local` and setting the following environment variables: + +| --- | --- | +| `{{VARIABLE}}` | {{description}} | + +### Starting the app + +```sh +pnpm serve +``` + +Compiles the sass files, javascript, and launches the server making the site available at `http://localhost:9000/` +The system will watch files and execute tasks whenever one of them changes. +The site will automatically refresh since it is bundled with livereload. + +## Deployment + +To prepare the app for deployment run: + +```sh +pnpm build +``` + +or + +```sh +pnpm stage +``` + +This will package the app and place all the contents in the `dist` directory. +The app can then be run by any web server. + +**When building the site for deployment provide the base url trough the `VITE_BASE_URL` environment variable. Omit the leading slash. (E.g. )** diff --git a/cli/templates/base/app/main.tsx b/cli/templates/base/app/main.tsx new file mode 100644 index 0000000..2c24f15 --- /dev/null +++ b/cli/templates/base/app/main.tsx @@ -0,0 +1,26 @@ +import { ChakraProvider } from '@chakra-ui/react'; +// @ts-expect-error React is imported for JSX but not directly used +import React, { useEffect } from 'react'; +import { createRoot } from 'react-dom/client'; + +import system from './styles/theme'; + +// Root component. +function Root() { + useEffect(() => { + // Hide the welcome banner. + const banner = document.querySelector('#welcome-banner')!; + banner.classList.add('dismissed'); + setTimeout(() => banner.remove(), 500); + }, []); + + return ( + +

Hello World

+
+ ); +} + +const rootNode = document.querySelector('#app-container')!; +const root = createRoot(rootNode); +root.render(); diff --git a/cli/templates/base/app/media/layout/ds-logo-pos.svg b/cli/templates/base/app/media/layout/ds-logo-pos.svg new file mode 100644 index 0000000..f3c056b --- /dev/null +++ b/cli/templates/base/app/media/layout/ds-logo-pos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cli/templates/base/app/styles/color-palette.ts b/cli/templates/base/app/styles/color-palette.ts new file mode 100644 index 0000000..5b9a91d --- /dev/null +++ b/cli/templates/base/app/styles/color-palette.ts @@ -0,0 +1,110 @@ +import { rgba, tint, shade } from 'polished'; + +/** + * Curry the polished rgba function to allow switching the parameters. + */ +const _rgba = (alpha: number) => (color: string) => rgba(color, alpha); + +const colorPaletteSettings = [ + { + code: '50', + colorFn: tint(0.96) + }, + { + code: '50a', + colorFn: _rgba(0.04) + }, + { + code: '100', + colorFn: tint(0.92) + }, + { + code: '100a', + colorFn: _rgba(0.08) + }, + { + code: '200', + colorFn: tint(0.84) + }, + { + code: '200a', + colorFn: _rgba(0.16) + }, + { + code: '300', + colorFn: tint(0.68) + }, + { + code: '300a', + colorFn: _rgba(0.32) + }, + { + code: '400', + colorFn: tint(0.36) + }, + { + code: '400a', + colorFn: _rgba(0.64) + }, + { + code: '500', + colorFn: (v: string) => v + }, + { + code: '600', + colorFn: shade(0.16) + }, + { + code: '700', + colorFn: shade(0.32) + }, + { + code: '800', + colorFn: shade(0.48) + }, + { + code: '900', + colorFn: shade(0.64) + } +]; + +/** + * Creates a color palette base off of the provided base color including + * lightened/darkened/transparent versions of that color. + * + * Uses a scale from 50 - 900 to indicate the color value. Values lower than 500 + * are lightened, above 500 are darkened and values ending with `a` have a alpha + * channel. + * + * List of returned colors: + * name.50 Lightened 96% + * name.50a Opacity 4% + * name.100 Lightened 92% + * name.100a Opacity 8% + * name.200 Lightened 84% + * name.200a Opacity 16% + * name.300 Lightened 68% + * name.300a Opacity 32% + * name.400 Lightened 36% + * name.400a Opacity 64% + * name.500 Same as base color + * name.600 Darkened 16% + * name.700 Darkened 32% + * name.800 Darkened 48% + * name.900 Darkened 64% + * + * @param {string} name Name of the color variable + * @param {string} baseColor Base color for the palette. Used as middle color + * with value 500. + * + * @returns object + */ +export function createColorPalette(baseColor: string) { + return colorPaletteSettings.reduce( + (acc, c) => ({ + ...acc, + [c.code]: { value: c.colorFn(baseColor) } + }), + {} + ); +} diff --git a/cli/templates/base/app/styles/theme.ts b/cli/templates/base/app/styles/theme.ts new file mode 100644 index 0000000..6512bfe --- /dev/null +++ b/cli/templates/base/app/styles/theme.ts @@ -0,0 +1,21 @@ +import { createSystem, defaultConfig, defineConfig } from '@chakra-ui/react'; +import { createColorPalette } from './color-palette'; + +const config = defineConfig({ + theme: { + tokens: { + colors: { + primary: createColorPalette('#1E7BC6'), + secondary: createColorPalette('#5FAD56'), + base: createColorPalette('#2B2D42'), + danger: createColorPalette('#D65108'), + warning: createColorPalette('#EFA00B'), + success: createColorPalette('#5FAD56'), + info: createColorPalette('#1E7BC6'), + surface: createColorPalette('#FFF') + } + } + } +}); + +export default createSystem(defaultConfig, config); diff --git a/cli/templates/base/app/vite-env.d.ts b/cli/templates/base/app/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/cli/templates/base/app/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/cli/templates/base/eslint.config.mjs b/cli/templates/base/eslint.config.mjs new file mode 100644 index 0000000..e60f045 --- /dev/null +++ b/cli/templates/base/eslint.config.mjs @@ -0,0 +1,60 @@ +import globals from 'globals'; +import pluginJs from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import pluginReact from 'eslint-plugin-react'; +import reactHooks from 'eslint-plugin-react-hooks'; +import reactRefresh from 'eslint-plugin-react-refresh'; +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + { + files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'], + settings: { react: { version: 'detect' } }, + languageOptions: { ecmaVersion: 2020, globals: globals.browser }, + plugins: { 'react-hooks': reactHooks, 'react-refresh': reactRefresh } + }, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + pluginReact.configs.flat.recommended, + eslintPluginPrettierRecommended, + { + name: 'Custom Rules ', + rules: { + 'no-console': 2, + 'prefer-promise-reject-errors': 0, + // 'import/order': 2, + 'react/button-has-type': 2, + 'react/jsx-closing-bracket-location': 2, + 'react/jsx-closing-tag-location': 2, + 'react/jsx-curly-spacing': 2, + 'react/jsx-curly-newline': 2, + 'react/jsx-equals-spacing': 2, + 'react/jsx-max-props-per-line': [2, { maximum: 1, when: 'multiline' }], + 'react/jsx-first-prop-new-line': 2, + 'react/jsx-curly-brace-presence': [ + 2, + { props: 'never', children: 'never' } + ], + 'react/jsx-pascal-case': 2, + 'react/jsx-props-no-multi-spaces': 2, + 'react/jsx-tag-spacing': [2, { beforeClosing: 'never' }], + 'react/jsx-wrap-multilines': 2, + 'react/no-array-index-key': 2, + 'react/no-typos': 2, + 'react/no-unused-prop-types': 2, + 'react/no-unused-state': 2, + 'react/self-closing-comp': 2, + 'react/style-prop-object': 2, + 'react/void-dom-elements-no-children': 2, + 'react/function-component-definition': [ + 2, + { namedComponents: ['function-declaration', 'arrow-function'] } + ], + 'react-hooks/rules-of-hooks': 2, // Checks rules of Hooks + // 'react-hooks/exhaustive-deps': 1, // Checks effect dependencies + // 'fp/no-mutating-methods': 1, + '@typescript-eslint/no-explicit-any': 'warn' + } + } +]; diff --git a/cli/templates/base/index.html b/cli/templates/base/index.html new file mode 100644 index 0000000..86d7f50 --- /dev/null +++ b/cli/templates/base/index.html @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + %VITE_APP_TITLE% + + + + + + + + +
+
+ +

Development Seed logotype

+

In the beginning the Universe was created. +

+

This has made a lot of people very angry and been widely regarded as a bad move.

+
+
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/cli/templates/base/jest.config.js b/cli/templates/base/jest.config.js new file mode 100644 index 0000000..c19647d --- /dev/null +++ b/cli/templates/base/jest.config.js @@ -0,0 +1,211 @@ +const pkg = require('./package.json'); + +/* + * For a detailed explanation regarding each configuration property, visit: + * https://jestjs.io/docs/configuration + */ + +module.exports = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/private/var/folders/bz/vry80ww15sg533jytwfj7fdc0000gn/T/jest_dx", + + // Automatically clear mock calls, instances and results before every test + // clearMocks: false, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + // collectCoverageFrom: undefined, + + // The directory where Jest should output its coverage files + // coverageDirectory: undefined, + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // "/node_modules/" + // ], + + // Indicates which provider should be used to instrument code for coverage + // coverageProvider: "babel", + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: undefined, + + // A path to a custom dependency extractor + // dependencyExtractor: undefined, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: undefined, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: undefined, + + // A set of global variables that need to be available in all test environments + globals: { + NODE_ENV: 'test' + }, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + moduleDirectories: ['node_modules'], + + // An array of file extensions your modules use + moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json', 'node', 'css'], + + // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module + // This has to be kept in sync with the alias field of package.json + moduleNameMapper: { + // To simplify keeping the alias in sync the code below converts the aliases + // defined in the package.json to module mappings: + // From: + // "$styles": "~/app/scripts/styles" + // To: + // '^\\$styles(.*)$': '/app/scripts/styles$1' + ...Object.entries(pkg.alias ?? {}).reduce((acc, [key, value]) => { + return value.startsWith('~/') + ? { + ...acc, + [`^\\${key}(.*)$`]: `${value.substring(1)}$1` + } + : acc; + }, {}), + '.+\\.(css|styl|less|sass|scss)$': + '/node_modules/jest-css-modules-transform' + }, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + preset: 'ts-jest', + + // Run tests from one or more projects + // projects: undefined, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state before every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: undefined, + + // Automatically restore mock state and implementation before every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: undefined, + + // A list of paths to directories that Jest should use to search for files in + // roots: [ + // "" + // ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // The number of seconds after which a test is considered as slow and reported as such in the results. + // slowTestThreshold: 5, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + testEnvironment: 'jsdom', + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + // testMatch: [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[tj]s?(x)" + // ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "/node_modules/" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: undefined, + + // This option allows use of a custom test runner + // testRunner: "jest-circus/runner", + + // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href + // testURL: "http://localhost", + + // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" + // timers: "real", + + // A map from regular expressions to paths to transformers + transform: { + '^.+\\.(js|jsx)$': 'babel-jest', + '^.+\\.(ts|tsx)?$': ['ts-jest', { tsconfig: 'tsconfig.app.json' }] + }, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "/node_modules/", + // "\\.pnp\\.[^\\/]+$" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + verbose: true, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, + setupFilesAfterEnv: ['/jest.setup.ts'] +}; diff --git a/cli/templates/base/jest.setup.ts b/cli/templates/base/jest.setup.ts new file mode 100644 index 0000000..82bd177 --- /dev/null +++ b/cli/templates/base/jest.setup.ts @@ -0,0 +1,28 @@ +// jest.setup.ts +import '@testing-library/jest-dom'; + +// implementation of structuredClone polyfill + +if (typeof global.structuredClone !== 'function') { + global.structuredClone = function structuredClone(value) { + if (value === null || value === undefined) { + return value; + } + + try { + // For objects and arrays, use JSON methods + if (typeof value === 'object') { + return JSON.parse(JSON.stringify(value)); + } + + // For primitive values, return directly + return value; + } catch (error) { + // eslint-disable-next-line no-console + console.warn('structuredClone polyfill failed:', error); + + // Returns a shallow copy as fallback + return Array.isArray(value) ? [...value] : { ...value }; + } + }; +} diff --git a/cli/templates/base/package.json b/cli/templates/base/package.json new file mode 100644 index 0000000..6fefba8 --- /dev/null +++ b/cli/templates/base/package.json @@ -0,0 +1,81 @@ +{ + "name": "project-seed", + "description": "Starter application by Development Seed", + "version": "8.0.1", + "repository": { + "type": "git", + "url": "https://github.com/developmentseed/project-seed.git" + }, + "author": { + "name": "Development Seed", + "url": "https://developmentseed.org" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/developmentseed/project-seed/issues" + }, + "homepage": "https://github.com/developmentseed/project-seed", + "scripts": { + "serve": "pnpm clean && NODE_ENV=development vite", + "build": "pnpm clean && NODE_ENV=production tsc -b && vite build", + "stage": "pnpm clean && NODE_ENV=staging tsc -b && vite build", + "clean": "rm -rf dist node_modules/.vite", + "lint": "pnpm lint:scripts", + "lint:scripts": "eslint app/", + "ts-check": "npx tsc --noEmit --skipLibCheck", + "test": "jest" + }, + "engines": { + "node": "22.x" + }, + "browserslist": "> 0.5%, last 2 versions, not dead", + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/babel__core": "^7", + "@types/jest": "^29.5.14", + "@types/node": "^22.10.7", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "babel-jest": "^29.7.0", + "eslint": "^9.21.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.2.2", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "portscanner": "^2.2.0", + "prettier": "^3.4.2", + "ts-jest": "^29.2.5", + "ts-node": "^10.9.2", + "typescript": "~5.7.2", + "typescript-eslint": "^8.24.1", + "vite": "^6.2.0" + }, + "dependencies": { + "@chakra-ui/react": "^3.8.1", + "@emotion/react": "^11.14.0", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.2.0", + "@testing-library/user-event": "^14.6.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.4", + "next-themes": "^0.4.4", + "polished": "^4.3.1", + "react": "^18.0.0", + "react-dom": "^18.0.0", + "react-icons": "^5.5.0" + }, + "alias": { + "$components": "~/app/components", + "$styles": "~/app/styles", + "$utils": "~/app/utils", + "$hooks": "~/app/hooks", + "$pages": "~/app/pages", + "$test": "~/test" + }, + "packageManager": "pnpm@10.6.4+sha512.da3d715bfd22a9a105e6e8088cfc7826699332ded60c423b14ec613a185f1602206702ff0fe4c438cb15c979081ce4cb02568e364b15174503a63c7a8e2a5f6c" +} diff --git a/cli/templates/base/public/meta/android-chrome.png b/cli/templates/base/public/meta/android-chrome.png new file mode 100755 index 0000000000000000000000000000000000000000..e92407961012c07bdfc9180d2f0962f2594ad0cc GIT binary patch literal 2081 zcmV++2;TRJP)Px#Cs0gOMbJV3|NsBgQyA*2j@e}}`s?NW_w@JP(&C9= z-FQm#&AjHBcJ92T9$uz5000M=Nkl zYT2=0UOdtYV2|OV^t1BA4{)K^M+2x^FVDo+yU@@agb_ec5>M^;(AEr42AEibI{S7X zpr#qX1!!4CnDdChN_V3A$Vc{gLOvG(bjKJ+8K&GvYXs2M4X^|_uzFsXx=VW!p;`v$ zSXB}P^bvj5ZB+oTTY^6Imi8>gWC7^$$5Wa^$X(i70^rmPQTi9qC+%f`46S-%4bYR{ z#sJ6q0cO}Qi#82`{yHPcU$;gmdvFLyur*r*(6nweNfiL&4BeFm-CZC&foMZNKo386 z5rPo`=vpR98CGTJuL*#GzF)@KUw|ozal-%ruCI0l+GGPQ0|10WX$qO(I?5IBJp-s4 z0I>1GPZ>bl0061r_Lu@3m;gXz1fEX;_Dle*L0ZiOz(4`GX#yZp08Wg|2nxWlX@F_o z#Xk7zdcNkCyP?@1zPe6e3%kngk3)EMT|?lOxnnxKk=WtJA}W9?eeF~T-$?pzCg#2y z3V_;@zfC9L#Jn0NDRbv~fI`Z6yctL_8Xt~}3V_n{|4Q4q>XLinPAV$^@-GUhd2f9t zw{V)!*TSTzh*Bq1)tiebctN5mZveQB^a3XANS~Z01UxtKwP#&S!}E=Rurk;O9CuJ znYiP6+G0cb(`9?P*yuP1JgvAs8hB}kHdFyX&J}MWTt@!*Da27LHNjt zYhQ;a*!^rW=@3|)eUV3T?OR|K?ToWAo`a_)oP7)6ls1cL-yK#DM_Gj=Dcn<%ESz2NK^7TI0CPm2Y`mzi#R)sr8Fh(de_f; zutPK7SE!pH^36Sn3A60gOcw1*;nL(o?JWPBkacWwT}b5^$<0{#!;EbrXYr2oR_?Pk zXRPYcU9qaI?civs4t_-;>?+#M6bkD3L_x@+oy~bRtA&bIamA-)ViL(=x0E0_!trZ; zr;jqsL*DjJM2x2z0OU#66>s}f5#zZIfT|LN0YlnJOq=;nWLXdvtf-e-Pnd7ZAdHw} z)>;oAOEL&_Lmq$X;1Y?w`N;&65itsusD4N?HpN=_nr z?mhnEk7u|5d|=}vS42bX{eC$w5uFpNf2WJH^3&Kk#RV?q;70CVKoH=QIbQcnWxQz* z3yEd^7ey4oyI0}KXj8_k?cgULXlTbA0j)*DK&AYC8LOh1P-3|e8qd)mA4z51LT$fg z>rq4uL8J>|XzvbU3Re?VpT|$oD3Lxx->SO08c2%xC#jq+t|3#1fIX3!>O z@Uad6`&U(3m)W$lKhoFC?6;I-M&hGR1p5n3l8*76q<-w9#u5%9T^=GV7fOvt#Lxov z23l{1xW1U6h`P9hTB!HZKtZ11;NAQ}03K=tupWp^#p&}I+??sYI}`Cy1D9|MmxAVd z8xCR5hxB$=6OL!v?+jGAk5K-2Fb(xzU;3KOA4CSPLghuEE+_dkkLYRb+Q8MBLn?!a zs_sVy?uFPW_wmsdF5>?3SU&)v(mp*Fyy*1}0N^T~(0rPg0}}v6lBihW1#Z^_0Dg1Y zB?F<6=cl7!pU}q85I~6pp(kEeJ9FI#_-;22g+*fU-RA}})x)*ySPMkg+KMsn3bovZ|%!D^p`-S>^D)B}?MB~#aNg`pVVGzzdbbeUD@ z{6@=w=%STrfGg7gebX_Ro6e%ZC_rc$z&8y5hGSrZ;T<^tH-NtZYG9MBHO=_o00000 LNkvXXu0mjfJ%-(H literal 0 HcmV?d00001 diff --git a/cli/templates/base/public/meta/apple-touch-icon.png b/cli/templates/base/public/meta/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..7c0e21fb5d55d1d2d831dfe33ea6976780a9d08b GIT binary patch literal 1980 zcmV;t2SfOYP)Px#Cs0gOMbJV3|NsBgQWy5z(DKZ>`t0S|W-;A&Nd5Ts z>Z*+9ns@HIqvDBShe&$u000LwNklfH&e1iDt!-^!wzjpcZ4IsBYz(^a(dLeQf3Y#>Wpm{N^G_=1 z9Gn@Cb?0}oGu$FtJSl+bIGD((D7YDT}5X_}BC>dgZ_$2b9n= z%!=-Q7*VKGLXQz|iRtVH(3h0ZI{+=?FlZ%(0GTqaS@u~*uF773NN^g%;5peE^9%rK zk1Zi!5gbevfDtLt1c37jj7&rZQbI$>UI8Xp&&=n23^Tt3IH0U%;VE(lBQJx6ec=W0BAJC~}ndv@v)*H64MEsQ( zfXDE~%AYi7oxg5QIKPNPc7s76VxEH5#N?eAmGP@A?AmCRW`wDe=I_OD$!`NmE76Yc zz6$zL9JiNSsvpf)7)+Ro?dS1G@JwP^PGsf~rU?D$Dqi;#K0XGx8`Y}ZlyL7}$4u#_ zco8}FQbJ3uP>wqt+!ASbD{}0ygqB)i8J8r@K6gnlT3Auu4XrKzu@|=_FGSj1=t;7( z23?NdObQ-%NkvyPyAoP_wzRcSn2&ELXKDi>nHHLO=hhPb&<3%$-o4o<8Hnj`McF)C z=iLLrmP(I2sok_Jr`*Xw{?!~!yhorkCV?&hZM6&(IG0FzQ z|E?(QsA#4x-gEcn-L?~_Y&cDIC4jjCU6uv^x4np$e_{Ft&*-gk!9LfQRpE|!3pMN* zXQ4)DuXfcv9%>#=zZ!39LLJ7E+m}@6MH#`4kMCp9EvE@O|W+P8d2s9qa)`61?`9J6L6!FWLu9ak{o+8X$d_>qsin^LCg~XnP^Tg9jaHu}-RTW)LWFSXtvIyzS!Y`6=@V&*9fpa1_+|$(LlvU|6=~xpE0_SBRdtD8>kC|Bj zJL#H|)t~jYC_rBc)jZ>|i{#UK$XRC|Z`wnDl5t7rk|*@`utLoPchSsVtQ*8 z?XDojQ)yLbCl6#OK1``_GEwoDa_X+@=PDJnBHNL8U6&uu(?Mr6XV16{F}=0X zG*uv_A9^B+sh5;v& z=Da7I9hT#uLbv`DVs8+Zqi8INdsBX}wwRo=aBokg_Gi7bVyOWuQ( z9@S>9Y4Mav?5op;{#1E`@z9QoAvOc7{ME7?r-ZY+|Y19z%OK_1-;#z2IHDHiYJo zhG0sb@-}lsFk)cEJR=~OJA4or@f>*pttAj$4|y13pY!(jJ{(NRet>-{g%VcHa~w00 z4bQI-W>e9PFrl05=gb8Sw2^m(y!LQ@sdou~kiHYn(=7cg*zZ!_4tdJ8G;)l$=TqLZ zU@L|?XWyWWICRiV<5+y)=uJuQ_^={hgfw=#B)y2kTyY*cyEE*OLgRUxp^Bg9CIjz&%orWRM{}xZN_2Y47u)M=b0j+5MnfU6ZHw$Z+jp?}#n> ziF2f5xV34gTN_YAS8%$s+#g^A_nO^i01aJxKo32(nHD*qM-I|&;ium?y~f$6(==1e ze_6jiCBI-MGP^xXH^sc(PV5=+ZBI=!xWxA+)pSFD15w3sQ&D8J+t?8FkoXd_W{2e0 z1f}f&>}?1-x2cL@(5D-M-X*`wr~7)cx#Zgv^mud7vo{iYx;bb+2K2v9)^nqjUJEV& O00002P)Px#R8UM*MMrQ<(nA2zLjcf20NG9e(Lw;xL;%r30MSAK z)k*-+LID5&|I<(t`|ao2YdHAg+1Fks=9_u``}*mqiuKsa?YExt%)8-*TI7;!{q^$Q zcS!KUtt2rg-T(jq3UpFVQvia;zXp~*^WGS~<3hIp00j_9L_t(&-nCk3W1}DtP1__* zWjF*;(EtBGmqT$(H_2cuUz%iBo^!o<9H&zm=j-L`_T9WWzHeWb>-qG1{9N9i8=+i& z?xsI~95{V~_}EzS^Vu9eK9LdETk{9wb}jG!C-Vn{*@p9H^GD+|$Kj*-v+Q!?6ahx5 zf=Ylm?;w~_X?_NW1H>p>V4X?x`{rEaZ?~rxdsprK)=2Yj(~C_q0m4Us+l&l ziAs4JM?x)}rLAD^a2LgMRU}Sg8~4+1f7P?V}F& z7yy!di=nn_S@|tngPu)!IRCSbrczP{$EuCXF`2eAZM(-3;91K|8a+lh6oXcGgbhnw zKujeLyLxgaHwmItuG^4l{9UIP8Fw~)Gb8ZD>0(2sCan^JEA4Jok$v7xh21nJQ=VcZ znTOo~klBZq#FU6klR16=e6jXQ7ma$`0W2cZg*fyDZu|nAng;s12$n=W_5S1?HzS(kO^(}`$|jV2>ITv zCWtv@1#zMC7(l_VdW$B&99Totz)vi&c71qUO_2EyC$7|>CMShoM*33!H5Z9)tyvWfnlu}Z-EC=g z(bLf$&Z7k$jss{^G9oS$VwcgJ3EH-A#cqpPvL@|%c|qHit=Z0TIyd6fC^=Afiz@bu zMxQI!BvZIL93XK~o0kNA(>BKg#4_`FIWo~7s@hUB$%JuLLLiO>2!+g(z%~$lwq#B#!)WJT->15B%r5P{PkLY-jVf;RL!w!}^r8K8 z?>Ui*zUaqXi?~odxfe9?nCse9nqVgS#&tZXJ6E2yOKxASIdF{6r&=GiaYaZr;6gs` zU28$px0Um8Z|#9~Pdo#R<73Z}yV-8aJ{$9qd*!78$EfY>_Ot8S1M!>}Uwf##xM7Hj z<@0Cf)su+?aCh~j=JHHO0Qh}*rsDdKd=7Ab{pTP5RC-OKdKgUr0000?I!aX#0!ooyR5~P}AVpAm6M`T}H5BPW0s^lB zQl!^N2dUEgclhqQ|HNH4`C(?4XYXh4bIzPunM4^G+@+ynrviaMG}`xWKLCL!Fdz_2 z0R{y$>}QjnzyNd9(ANNgD&nb6ZOH%`?DOF6El~L{&J{qQH_|h?({~GWad9!9u5 zxbdyvaCS^=Q{(~!;sI&j)-drKUz?~f2sdIRCsElSn2fEErsZFZupWHeypR}&6!87$ z>65TIp@cvE!TqZ~)m@1xj#b0HvmE z{@1s4_rM9oe2+9`pYC0)NQCgeh<$TIN_|{ll#V7UmE_5Wc(^x0?(2<7+8=>@X-24} zx8}YQ9H#9rG|UNCzcN%taQRiS%0e+_^s|g0DiK~XBi_Ko$7mH+=)3&y@qSS7;r&>n z4lm&?eEYE5LHzl#E<;i!7nMr(lW!fJ|IU?K!yc?w5atxkTIO#DEPJSEU(s2aYmU(W zJ~Am(vi-y0jgcQbJ7BceW6LC%?Uq!J32ADk*WY+oZP;1^?4lpOH6`jd9Lct{QW1j) z9c@gV?(h;rv<010r&H?yby7A`?ubgULOq1s#L33~qa%hJysC=sPA?CtRmhd9M)Pq(IrWaPt7 zDIUsZ%+Z|Tw#o6x-^hZBES1_I8dV<)Lc=L8L;l~S$xVbRCb>?Rb;f-*U4+;p*V1hZ z{<|8nFsSosuK*+yNmlx|AiH@wHrmFNEG-zomFwQhQLWbH-uZT&upY5QQQFlRxSYu8 zSKbCO8=+-+tyihM;SOz@+Xljf@wyd9%GVw(C~=|PZ@zHS2{OZ!9~~^1Wxk>H&p*fJ*EKL1rTNRdNHSU_r%PcuynOV# zV+A>vY!^WtY^4yhkk{38;L|4tg$jJua;S)4s=125-cV6O2fyb#Hg#nW=+me|Ad+xb zGuw4ylOK|kQ`xqDol;6LlKD>(2yx}~KkL$yt7A1l0J7CKC{=J>+&uZwf-K4i#!^mG z@A<(A|K__I5{G!q+9g7{<#{D4m{Xmt7%x?$@wO}i?7&T71XGr#IZI)O)N)+qGzt^6 znvx@`?4VjEJHbi0ar54F0~`qK*c-AW;%%iTH%EV5`Cp0gnsognZFDIgK|MFhyNB^rk;8old7K{^Za5T( zNJqAtIpJ6(tnM~^8!i_js1qAJxr!Rc%C7v7bY#QWnf#G@y^*mn%E^2wjpCJ?{aYTo zB4er$>QWh=Vf792Ke@oaLVxgX9B~ zt+awSmg0Uab23N1$Ap>uVcc=N;RZ(;DR8(~{aeDl><4Z7I{5|ZyJP*0o=5MjL^M5 zF45N9-FBvKkWMT%3>tKeKwy~-dnlGkg#r`_&xv9_ni%Ytk5n%o2|%0vM1jdFh+agX zI2$>_m+i(igqW=Hof1}n)yl4n9^vlu1eZO^&Ewo8fIlGfg?9Z1_@x9Cd2;$Ve!^0O~TkJYsF;YEs{35GT(#Lt_eqEf!fqwxpjmf+HXyzHdk%Z`}(Q!!#g`l#L>~-IbAL)8mO<&XpVQ8D$z;#heF*Pv5v0oK_7@E{gkngsNv+mX_W13^% z65$purC;J;-)%+_7u6*ioG!)Th#d5JAE8jIywtrz#jM2>BhDp@iXCmNf#qCfLBF_D z7*4*Si}!Sk%M9_avXm#hjOr@JZhnvXwyh5jvAID27*LjE(COVc62PsxTsN(Etvf}& zNha+My2~7`7TZJDmT}nJa24WYEko^Xb6xVfMOBhIX^!f^*B&0?uZNKnHQ@qM4liw7 zy&txo0N$@RcLW>W4_lzr7bohHk4o(PvLgkikj#sY^@WM6x)qEz)T$m=$nBgJ(_cP< zTcZea9!8MaEENWoGT2BLSzTs;Ae&zTeO5-4nw|)871Z^&EBg*Vk5seXh}mz0>qLhN z&Yb0t!aaP{js>ORv6`J4XS&Zlje_^_dcxId6+$8gFy32C%GE03yexKk_zl8 z5pT40W&8J%=$lM1kGn)rJhWa6GW}<-e28b#V0m#(w0i8l$|(2o(-OsMp<}}gWDYNi zCz(`M%&m4d4Qfnz+o!H0UfU_Zx!bos(%NLsm!86l!il9QSM&_e#8&8G+`6=!c*@?F zxTJo|seHswFsL;{s8m_Ie*C+3mNX7344oKc(FFBcgmumhF1at_bzybS#yY@nnnrKW zl=H9eG&4HD>N4dc_m<+~8GFC~_st|%(U3g!E;cy8znK*0OyJ{F5NTbi-^L0NuE23dJO zRTE_|rW^!!7QTNqH>?29#LS*Asd=z>^&;^-jZuFkYxL**_v{$lc7E~iRYBLrvw|%` z@k>y{?r7?7>Ax)+KrKJ?>m(B02V7#Yo2@Z{WmdzoDVZE3!6o{4*~YYf?i3Y-Mg1o) ze4vx|R=j;n`o7?qxc5(z<=%c$?!hw!dg_bxN~Vo&U!V1#O6m6X$~xTwah#1s-BhTC z4bCzzl%~p#rh{u%AB8%l6CfJ}A8G~+m#w3u=cXJCPW1b$5g4q-yupCsQ>I-wc>m{$ z^qdS*5i&EnzF6eP(-d;u&jI7Ij&5`WAzrl&J5@^?$S%k6ebc#ME|O83Z{8t0ERXe@ zvikL4s|ln$WswO+(TU>udR#g#6@f!GinJKTRuF7%_~3b}_*;XsEYL_p?#oUpdOC6Z zc0)=9W2sUP{(Zz;U^@%a5{I4OwYP(4w=k|P!bXeCO1!_UftnR1d!DQWEsE(WNVzxZ0?MISkY!KKaypiL;Dt{ryI@NX?bdy# z7DKx#btuj4jFJ9xlfbID4_DBV7q55dQ8co2&-6NVaW#?d1r(#g5o26|IIyDc$sq01 z!GBpG%OhGm43R%EQt?JOp1%mvq)Yp~^X^!j<}3AX4UvSOeA*5Hn85YF2I)k|E0SB` zeqSQgbzVb$#0c_ZLslyOQ;<1+QMOG@6~Rr7w==-}#X#ZP^$?e0O^LP4{hPbcUY{}4HUBt- z#K^nF#}`nzO|N=2&)E)BW`ye{OB3Mdk+5jx>VC2k;MDH0T)R8cDZjnfdKHO|W!NZR zl~a8#BSi>4_T||31U>tTpZhqlw(wbq+(JQ215C~ze9T1kbx|+ZPI5v1!-+W+3iX=l z7ma^=dTSK8W@THhkQJ0}=-c>V(K_xKcq5_x0|X)bDyGgi{h6$4brajMz|^-*VFH2w z4`T4KQ|#iN@L4`cs8?i&5v`tQ*h2ove7DbC2lICxR{Mm38P}gryJ;4ElDqIN>HVym zF}U16T^Ki)Xl(HHV`O;&tWHvzBSiikf{GrlmfJ@7y3~JZ z-KSE=U&eNbAQ6cdOo8Io1_z=08xCD=9Plo>vRFroSj%k=!; zH?P5QR7o)BZM71`igBN~pk^&5V4DjYozKxw^NxU-c(t!|3aj;@OepGlXB0WcS|O{i z9xRi4vFakWLXH{KI7r#zVz>u30TH#S8y)W>a}V18D-21^I=Tz4b}ibFo3;GeunOv& zlqBn9W;W_cO(DINjTNvK3lu(U9TiA%D8OT=3Z4gWm+1=K97NLno z!)+|W@}9qA6t(Go7ierNA-h4z7=KmnHv8CHtOaV2euHLPen^w#q+(j(}%7} z$BVqC@wEka)dlTZwOcaFN;)hLfaN(voX|ySkHglr6z&xxwv4Ve6oiql9-Y#QseF*^ zd7#D;YT86G>i!vrZFfDFe#^tjUtbKG*v0L>r(&95{6{pJi`IMq?$gn1VL<(r@HM=O8?BVdUkrKDzj1>ygJV#CP9iRLKGiNFst0 zM6EwO*N0&W1rQb2v~cor2JeGsucBSDKY=C&6Om?hDpxU|d%xnX{l-W}USAruKge?5 zP|>Ee5_QP#-0U)Bf#+E)4R}ON9bO!E--O_kdSQL=)WH`_BezbzYgA2mzJXcwJk1uA zZk-@Mi3ZU|fhhivy#dJ%G~O4oyz0)ZRk8m`I#~Jm8 ze}Um&{f7BfT4_DTxb?Wa0*mF2b&MB>&fj_HEJH~%`O2BY<&-bnz3k=j-#oBb-gt+S zINY=FoEj`9Ck#=sMk!Cd-^K+y!3lQd4e*T@qAq=gjt~nG5&9q_t#fHYtQUxe(naC5(Oq~Pw@fc<+H-^$<3v?{h>6)25QA1{%c$K*? z;)`pT9N2-D+Ud5JRHp&cVT|FPN;FKCel-LA#mRlF4f5!|O26mB{g=_8%Yb%&Gth;j zA7=0K77_5+alZ>_`Ghk`1IH?T5a{3KWPMLz zn8E-M@V-1z^V~N77Tfvv1M11-5jmoo4Uh68G+JD11a=Y>JmrFjs;=F?p|wCrRYarY zPs9Ca!BI!S>p(f4sRDjgN5%)*B~D?D-RI8@fk(;_elGO1L3+Gvq_I&iYR#XSwQhvI zX{=~iL+A!kLgo#V6Bc{o_n522MUAcf@05N)=YoC zpEB1Y<}r71WaJymXRS0vSN0z;tR?=H7Dx4cq)B17<(qOH`9xk(dg|^8y5SW5NlSrJ z-!mura~=Tr>*FRaSjUoqPR*EGZZ{8y*8Ota)vGE-Pj^hIwH*&OJY*B^GfGPhmi!*u8`Dr8pLKiSu%ea1izCAZ0`2#bKEBg4l7SVAe zgPaovZ)poT3iN;rzd{oS7vi?*f|r*FO*?s(0+-=Xm}Dw@ARHj3;x-qU;Lbdld7%fzJK)h7O3YO?7}xM?n3-_n6r)W{dIVHbf(DCJ41G5vVm6;m|n$j>fLnqzdZ3WEFfQ@Z^}7O z(>3q>z)FJJDE284cdByI5QQ9M3f^yED!0QNlfM|2|8}o_$W(;GM&8?U-5KRKc9#ex zNJo&#dRkS&A_wKGnIPQ&7o9NQX!heHyAhw&4GJj_h8p4>JisU)?p1SHGC^Sfj;DtckQ-Za6-Yq2@TkN-t|VY3h=I#xu4 z99zA}VFscpWDS)P{W_g|?v}7aEDhM#Oq^xCEH(+Aa0&1NQ30qzQ}P;Uql_K(!#Q;aRC| zgIec-nLn@{8kYH7Q&B*nodZS!Z3(F4c(~MGSO87rWg@BC2=%4iR~@+-b@VK43Z)CQ zo%qao`G>~95#Qx@%VOyMeNDp$=d%o8wQW;~C@Z7f?$g16-s#F)fGc0s`>(x`K@&aD zZcbS|l8>9rFk5MLhGpd*aDAR~G>JYvRiNF%ez{_yP3N-gm3}r6hygm`*C&4{Fax{r z^9Y<;OtA{6IBJX4sy-rn>11W@Ch&49;fU^KJT}2l z0IRP?x9`W^cCup`LSVBBX*+s($&Mi?gcb#0C~p--AfrHmfR}CBz*(Q#c4W4O6UmE{ zy3Io33MtMJi>097p_LuIjS1{fz);LmwOQDnJI1Msk=`SY!t*a`eGeMmPZ+VP%X}Q{ zRT!K8xv_7C-zd9wM)~99rY?z1JC7TQFZ$l7P*`bS$Ge3+NMIaNh2!PKgzxMH@m-fu zHXp|0gr|PL&99z$qH{T4Ino-y_tpR&T_=FLdtSw&EvypJE1w{r!*&)l*zk^CCp*lB zJM?oUc;8e;*q5qV%`NO^PL@P!6*xRW7H}MY>@{WaDk7nfWX}*ZPF7b*Npr`L*qcF` zm^E!MA5hOV-uehPIN_)wZ@g!eaUi7c*+T8<p|KzC z3tfY%blWHxt83;q^!)R_Nv5E`n#8TJFlL(O+zusNB;zb#~to5>ZLhWvSTlJ!E&sON;@P zRB9RV{MbIt&?gO(`*hDc&lj;Z5@vwjo;0eaV7yZG7 z0mZmkt?*OoJg95CUJk6eUEF?Knf#D>s>-;JjxhT=Uy4v$d_1#WOO1tmjqmvwh-vBO zmaqy@fD6~coAtl;*#8|mRDUISD9(b`wV=y`pZ`a8==_}LHbc-avcsNb^*4ftK1?NM z8k(|uP0^+$I9?})(;8Yl75mQ-!xD?HRP3!Q1u`7K7$#4Q(Zy%YViX3dqrW2YK7Dkp zD1*AcAY}>~YzFDCAc32l{F+k-+l{f?VSdG4OrpSu>FCN$WM+jla4-1jKSEPFJ!&6- zXsZ7fNqPK#h1&;toGmoSTbk-;b0rSIC_5)&c0q}k!lF7%OQ)rflulOdt7Wztw`1aq zfv4GNqo0d&4)dm=C-|in4DxK!k;2QZye&ZL8r_ff7fN*IEmT`$7Yxk zhcKWiUAN?UDN&vnYs{Zi%B?Xc;1q)bcIYh2lVn@BxF#FG0eO#R)uw$V1wYgu7BgI@>od&*!!8 L7~C$ug%0~4vM>Qv literal 0 HcmV?d00001 diff --git a/cli/templates/base/test/example.test.ts b/cli/templates/base/test/example.test.ts new file mode 100644 index 0000000..c5be721 --- /dev/null +++ b/cli/templates/base/test/example.test.ts @@ -0,0 +1,5 @@ +describe('Main test suite', () => { + it('should pass this demo test', () => { + expect(true).toBe(true); + }); +}); \ No newline at end of file diff --git a/cli/templates/base/tsconfig.app.json b/cli/templates/base/tsconfig.app.json new file mode 100644 index 0000000..e66c3f8 --- /dev/null +++ b/cli/templates/base/tsconfig.app.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "paths": { + /* Specify a set of entries that re-map imports to additional lookup locations. */ + "$components/*": ["./app/components/*"], + "$utils/*": ["./app/utils/*"], + "$styles/*": ["./app/styles/*"], + "$hooks/*": ["./app/hooks/*"], + "$pages/*": ["./app/pages/*"] + }, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["app"] +} diff --git a/cli/templates/base/tsconfig.json b/cli/templates/base/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/cli/templates/base/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/cli/templates/base/tsconfig.node.json b/cli/templates/base/tsconfig.node.json new file mode 100644 index 0000000..dc608fc --- /dev/null +++ b/cli/templates/base/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.mts"] +} diff --git a/cli/templates/base/vite-plugin-port-scanner.ts b/cli/templates/base/vite-plugin-port-scanner.ts new file mode 100644 index 0000000..97c08fe --- /dev/null +++ b/cli/templates/base/vite-plugin-port-scanner.ts @@ -0,0 +1,28 @@ +// @ts-expect-error No types +import portscanner from 'portscanner'; +import { PluginOption } from 'vite'; + +export default function vitePortScanner() { + return { + name: 'vite-port-scanner-plugin', + + // Vite config hooks + async config(config, { command }) { + if (command === 'serve') { + const startPort = config.server?.port || 9000; + const port = await portscanner.findAPortNotInUse( + startPort, + startPort + 100, + 'localhost' + ); + if (port !== startPort) { + // eslint-disable-next-line no-console + console.warn( + ` Port ${startPort} is busy. Using port ${port} instead.` + ); + } + config.server = { ...(config.server || {}), port }; + } + } + } as PluginOption; +} diff --git a/cli/templates/base/vite.config.mts b/cli/templates/base/vite.config.mts new file mode 100644 index 0000000..bd8e982 --- /dev/null +++ b/cli/templates/base/vite.config.mts @@ -0,0 +1,25 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import path from 'path'; + +import vitePortScanner from './vite-plugin-port-scanner'; +import pkg from './package.json'; + +const alias = Object.entries(pkg.alias).reduce((acc, [key, value]) => { + return { + ...acc, + [key]: path.resolve(__dirname, value.replace('~/', './')) + }; +}, {}); + + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react(), vitePortScanner()], + define: { + APP_VERSION: JSON.stringify(pkg.version) + }, + resolve: { + alias + } +}); From 911dfc8a91d3c0c011ef221d7d9ca0b7c78dfe5e Mon Sep 17 00:00:00 2001 From: Vitor George Date: Fri, 4 Jul 2025 18:24:45 +0100 Subject: [PATCH 03/26] feat: enable component library variants --- cli/README.md | 72 ++++++++++++++++--- cli/src/generator.ts | 62 +++++++++++++++- cli/src/index.ts | 67 ++++++++++++++--- cli/templates/base/app/main.tsx | 8 +-- cli/templates/base/package.json | 14 ++-- .../component-library/chakra/main.tsx | 25 +++++++ .../component-library/chakra/package.json | 8 +++ .../chakra}/styles/color-palette.ts | 0 .../chakra}/styles/theme.ts | 0 cli/templates/component-library/none/main.tsx | 22 ++++++ .../component-library/none/package.json | 3 + .../component-library/uswds/main.tsx | 51 +++++++++++++ .../component-library/uswds/package.json | 6 ++ 13 files changed, 304 insertions(+), 34 deletions(-) create mode 100644 cli/templates/component-library/chakra/main.tsx create mode 100644 cli/templates/component-library/chakra/package.json rename cli/templates/{base/app => component-library/chakra}/styles/color-palette.ts (100%) rename cli/templates/{base/app => component-library/chakra}/styles/theme.ts (100%) create mode 100644 cli/templates/component-library/none/main.tsx create mode 100644 cli/templates/component-library/none/package.json create mode 100644 cli/templates/component-library/uswds/main.tsx create mode 100644 cli/templates/component-library/uswds/package.json diff --git a/cli/README.md b/cli/README.md index 3e231db..1846732 100644 --- a/cli/README.md +++ b/cli/README.md @@ -1,6 +1,6 @@ # project-seed CLI -Command line interface for generating new SPA projects based on the project-seed template. +Command line interface for scaffolding web map applications. ## Installation @@ -9,8 +9,11 @@ The CLI is part of the project-seed repository and can be used locally during de ## Usage ```bash -# Generate a new project -node cli/dist/index.js my-project-name +# Generate a new project (interactive prompts) +node cli/dist/index.js + +# Generate with specific project name and component library +node cli/dist/index.js my-project-name --component-library chakra # Show help node cli/dist/index.js --help @@ -19,6 +22,21 @@ node cli/dist/index.js --help node cli/dist/index.js --version ``` +### Component Library Options + +The CLI supports three component library variants: + +- **`none`** - Plain React with minimal dependencies +- **`chakra`** - Chakra UI with theme and provider (default) +- **`uswds`** - USWDS design system with government styling + +### Interactive Mode + +When run without arguments, the CLI will prompt for: + +1. Project name (with validation) +2. Component library selection + ## Development ### Setup @@ -62,17 +80,55 @@ Projects are generated in `cli/generated/` directory. This directory is gitignor ### What Gets Generated -- Complete copy of the project-seed template +- Complete copy of the base template +- Component library specific files and dependencies - Project name replaced in `package.json` - Template placeholders replaced in `README.md` - `.env` file with default Vite environment variables - All development dependencies and configuration files +### Template Structure + +The CLI uses a modular template system: + +``` +cli/templates/ +├── base/ # Base template (core project files) +│ ├── app/ +│ ├── public/ +│ ├── package.json # Core dependencies only +│ └── ... +└── component-library/ # Component library variants + ├── none/ + │ ├── main.tsx # Plain React + │ └── package.json # Empty dependencies + ├── chakra/ + │ ├── main.tsx # Chakra UI provider + │ ├── styles/ # Theme files + │ └── package.json # Chakra UI dependencies + └── uswds/ + ├── main.tsx # USWDS components + └── package.json # USWDS dependencies +``` + ### Template Processing The generator: -1. Copies all files from the root template (excluding CLI and generated directories) -2. Replaces project name in `package.json` -3. Processes `_README.md` template and renames it to `README.md` -4. Creates `.env` file with default environment variables +1. Copies all files from the base template +2. Applies component library variant (main.tsx + package.json mixin) +3. Replaces project name in `package.json` +4. Processes `_README.md` template and renames it to `README.md` +5. Creates `.env` file with default environment variables + +### Adding New Component Libraries + +To add a new component library variant: + +1. Create a new folder in `cli/templates/component-library/` +2. Add `main.tsx` with the component library setup +3. Add `package.json` with component library dependencies +4. Update the CLI choices in `cli/src/index.ts` +5. Test the new variant + +This modular approach makes it easy to maintain and extend the CLI with new component libraries. diff --git a/cli/src/generator.ts b/cli/src/generator.ts index 4091a57..0a94542 100644 --- a/cli/src/generator.ts +++ b/cli/src/generator.ts @@ -81,7 +81,61 @@ async function updatePackageJson( } } -export async function generateProject(projectName?: string): Promise { +async function applyComponentLibrary( + targetDir: string, + componentLibrary: string +): Promise { + const componentLibDir = path.resolve( + __dirname, + '../templates/component-library', + componentLibrary + ); + + if (!(await fs.pathExists(componentLibDir))) { + throw new Error( + `Component library template not found: ${componentLibrary}` + ); + } + + // Copy all files from component library variant (except package.json) + const items = await fs.readdir(componentLibDir); + + for (const item of items) { + if (item === 'package.json') continue; // Handle package.json separately + + const srcPath = path.join(componentLibDir, item); + const destPath = path.join(targetDir, 'app', item); + const stat = await fs.stat(srcPath); + + if (stat.isDirectory()) { + await fs.copy(srcPath, destPath); + } else { + await fs.copy(srcPath, destPath); + } + } + + // Merge package.json dependencies + const packageJsonPath = path.join(targetDir, 'package.json'); + const variantPackagePath = path.join(componentLibDir, 'package.json'); + + if (await fs.pathExists(variantPackagePath)) { + const basePackage = await fs.readJson(packageJsonPath); + const variantPackage = await fs.readJson(variantPackagePath); + + // Merge dependencies + basePackage.dependencies = { + ...basePackage.dependencies, + ...variantPackage.dependencies + }; + + await fs.writeJson(packageJsonPath, basePackage, { spaces: 2 }); + } +} + +export async function generateProject( + projectName?: string, + componentLibrary: string = 'chakra' +): Promise { if (!projectName) { throw new Error('Project name is required'); } @@ -94,8 +148,12 @@ export async function generateProject(projectName?: string): Promise { } try { - // Copy base template files only + // Copy base template files await copyBaseTemplateFiles(baseTemplateDir, targetDir); + + // Apply component library specific modifications + await applyComponentLibrary(targetDir, componentLibrary); + await updatePackageJson(targetDir, projectName); await processReadme(targetDir, projectName); await createEnvFile(targetDir, projectName); diff --git a/cli/src/index.ts b/cli/src/index.ts index 9b4f693..095b912 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -1,6 +1,7 @@ #!/usr/bin/env node import { Command } from 'commander'; +import inquirer from 'inquirer'; import { generateProject } from './generator.ts'; import pkg from '../package.json'; @@ -10,14 +11,64 @@ program.name(pkg.name).description(pkg.description).version(pkg.version); program .argument('[project-name]', 'Name of the project to create') - .action(async (projectName: string | undefined) => { - try { - await generateProject(projectName); - } catch (error) { - // eslint-disable-next-line no-console - console.error('Error generating project:', error); - process.exit(1); + .option( + '-c, --component-library ', + 'Component library to use (none, chakra, uswds)' + ) + .action( + async ( + projectName: string | undefined, + options: { componentLibrary?: string } + ) => { + try { + let finalProjectName = projectName; + let componentLibrary = options.componentLibrary; + + // If project name is not provided, prompt for it + if (!finalProjectName) { + const { name } = await inquirer.prompt([ + { + type: 'input', + name: 'name', + message: 'What is the name of your project?', + validate: (input: string) => { + if (!input.trim()) { + return 'Project name is required'; + } + if (!/^[a-z0-9-]+$/.test(input)) { + return 'Project name must contain only lowercase letters, numbers, and hyphens'; + } + return true; + } + } + ]); + finalProjectName = name; + } + + // If component library is not provided, prompt for it + if (!componentLibrary) { + const { library } = await inquirer.prompt([ + { + type: 'list', + name: 'library', + message: 'Which component library would you like to use?', + choices: [ + { name: 'No component library (plain React)', value: 'none' }, + { name: 'Chakra UI', value: 'chakra' }, + { name: 'React USWDS', value: 'uswds' } + ] + } + ]); + componentLibrary = library; + } + + await generateProject(finalProjectName, componentLibrary); + } catch (error) { + // eslint-disable-next-line no-console + console.error('Error generating project:', error); + process.exit(1); + } } - }); + ); program.parse(); diff --git a/cli/templates/base/app/main.tsx b/cli/templates/base/app/main.tsx index 2c24f15..ef5d4dd 100644 --- a/cli/templates/base/app/main.tsx +++ b/cli/templates/base/app/main.tsx @@ -1,10 +1,6 @@ -import { ChakraProvider } from '@chakra-ui/react'; -// @ts-expect-error React is imported for JSX but not directly used import React, { useEffect } from 'react'; import { createRoot } from 'react-dom/client'; -import system from './styles/theme'; - // Root component. function Root() { useEffect(() => { @@ -15,9 +11,9 @@ function Root() { }, []); return ( - +

Hello World

- +
); } diff --git a/cli/templates/base/package.json b/cli/templates/base/package.json index 6fefba8..1fab39f 100644 --- a/cli/templates/base/package.json +++ b/cli/templates/base/package.json @@ -34,8 +34,8 @@ "@types/babel__core": "^7", "@types/jest": "^29.5.14", "@types/node": "^22.10.7", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", "@vitejs/plugin-react": "^4.3.4", "babel-jest": "^29.7.0", "eslint": "^9.21.0", @@ -56,17 +56,11 @@ "vite": "^6.2.0" }, "dependencies": { - "@chakra-ui/react": "^3.8.1", - "@emotion/react": "^11.14.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.2.0", "@testing-library/user-event": "^14.6.0", - "@types/react": "^19.0.0", - "@types/react-dom": "^19.0.4", - "next-themes": "^0.4.4", - "polished": "^4.3.1", - "react": "^18.0.0", - "react-dom": "^18.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-icons": "^5.5.0" }, "alias": { diff --git a/cli/templates/component-library/chakra/main.tsx b/cli/templates/component-library/chakra/main.tsx new file mode 100644 index 0000000..329cbd1 --- /dev/null +++ b/cli/templates/component-library/chakra/main.tsx @@ -0,0 +1,25 @@ +import { ChakraProvider } from '@chakra-ui/react'; +import React, { useEffect } from 'react'; +import { createRoot } from 'react-dom/client'; + +import system from './styles/theme'; + +// Root component. +function Root() { + useEffect(() => { + // Hide the welcome banner. + const banner = document.querySelector('#welcome-banner')!; + banner.classList.add('dismissed'); + setTimeout(() => banner.remove(), 500); + }, []); + + return ( + +

Hello World

+
+ ); +} + +const rootNode = document.querySelector('#app-container')!; +const root = createRoot(rootNode); +root.render(); diff --git a/cli/templates/component-library/chakra/package.json b/cli/templates/component-library/chakra/package.json new file mode 100644 index 0000000..8e5162c --- /dev/null +++ b/cli/templates/component-library/chakra/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "@chakra-ui/react": "^3.8.1", + "@emotion/react": "^11.14.0", + "next-themes": "^0.4.4", + "polished": "^4.3.1" + } +} diff --git a/cli/templates/base/app/styles/color-palette.ts b/cli/templates/component-library/chakra/styles/color-palette.ts similarity index 100% rename from cli/templates/base/app/styles/color-palette.ts rename to cli/templates/component-library/chakra/styles/color-palette.ts diff --git a/cli/templates/base/app/styles/theme.ts b/cli/templates/component-library/chakra/styles/theme.ts similarity index 100% rename from cli/templates/base/app/styles/theme.ts rename to cli/templates/component-library/chakra/styles/theme.ts diff --git a/cli/templates/component-library/none/main.tsx b/cli/templates/component-library/none/main.tsx new file mode 100644 index 0000000..ef5d4dd --- /dev/null +++ b/cli/templates/component-library/none/main.tsx @@ -0,0 +1,22 @@ +import React, { useEffect } from 'react'; +import { createRoot } from 'react-dom/client'; + +// Root component. +function Root() { + useEffect(() => { + // Hide the welcome banner. + const banner = document.querySelector('#welcome-banner')!; + banner.classList.add('dismissed'); + setTimeout(() => banner.remove(), 500); + }, []); + + return ( +
+

Hello World

+
+ ); +} + +const rootNode = document.querySelector('#app-container')!; +const root = createRoot(rootNode); +root.render(); diff --git a/cli/templates/component-library/none/package.json b/cli/templates/component-library/none/package.json new file mode 100644 index 0000000..18a1e41 --- /dev/null +++ b/cli/templates/component-library/none/package.json @@ -0,0 +1,3 @@ +{ + "dependencies": {} +} diff --git a/cli/templates/component-library/uswds/main.tsx b/cli/templates/component-library/uswds/main.tsx new file mode 100644 index 0000000..417bfa2 --- /dev/null +++ b/cli/templates/component-library/uswds/main.tsx @@ -0,0 +1,51 @@ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +// @ts-expect-error React import needed for JSX +import React, { useEffect } from 'react'; +import { createRoot } from 'react-dom/client'; +import { Header, Grid, GridContainer, Title } from '@trussworks/react-uswds'; +import '@trussworks/react-uswds/lib/uswds.css'; +import '@trussworks/react-uswds/lib/index.css'; + +// Root component. +function Root() { + useEffect(() => { + // Hide the welcome banner. + const banner = document.querySelector('#welcome-banner')!; + banner.classList.add('dismissed'); + setTimeout(() => banner.remove(), 500); + }, []); + + return ( + <> +
+
+
+
+ + + My App + + +
+
+
+
+
+ + + + Hello World +

+ Welcome to your React USWDS-powered application! +

+
+
+
+
+ + ); +} + +const rootNode = document.querySelector('#app-container')!; +const root = createRoot(rootNode); +root.render(); diff --git a/cli/templates/component-library/uswds/package.json b/cli/templates/component-library/uswds/package.json new file mode 100644 index 0000000..b55aaa8 --- /dev/null +++ b/cli/templates/component-library/uswds/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "@trussworks/react-uswds": "^10.0.2", + "@uswds/uswds": "^3.7.1" + } +} From 995ed99aa54f03d08dfcc94f2a957c4be5b3ec0e Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 09:54:20 +0100 Subject: [PATCH 04/26] chore: update CLI Readme --- cli/README.md | 54 +++++++++++++++++++++++++++++++++++----------- cli/package.json | 2 ++ cli/pnpm-lock.yaml | 36 +++++++++++++++++++++++++++---- 3 files changed, 75 insertions(+), 17 deletions(-) diff --git a/cli/README.md b/cli/README.md index 1846732..275651b 100644 --- a/cli/README.md +++ b/cli/README.md @@ -8,18 +8,48 @@ The CLI is part of the project-seed repository and can be used locally during de ## Usage +### Option 1: Run Directly from Source (Development) + +For development and testing, you can run the CLI directly from the TypeScript source: + ```bash -# Generate a new project (interactive prompts) -node cli/dist/index.js +# Install dependencies first +cd cli +pnpm install + +# Run using the convenience script +pnpm start # Generate with specific project name and component library -node cli/dist/index.js my-project-name --component-library chakra +pnpm start my-project-name --component-library chakra # Show help -node cli/dist/index.js --help +pnpm start --help # Show version -node cli/dist/index.js --version +pnpm start --version +``` + +### Option 2: Build and Run (Production) + +For production use or when you want to run the compiled version: + +```bash +# Build the CLI +cd cli +pnpm build + +# Run the built version +node ./dist/index.js + +# Generate with specific project name and component library +node ./dist/index.js my-project-name --component-library chakra + +# Show help +node ./dist/index.js --help + +# Show version +node ./dist/index.js --version ``` ### Component Library Options @@ -46,14 +76,6 @@ cd cli pnpm install ``` -### Build - -```bash -pnpm build -``` - -The CLI is built using [tsup](https://github.com/egoist/tsup) and outputs to `dist/index.js`. - ### Development Mode ```bash @@ -74,6 +96,12 @@ pnpm test pnpm lint ``` +### Type Checking + +```bash +pnpm type-check +``` + ## Generated Projects Projects are generated in `cli/generated/` directory. This directory is gitignored to prevent generated projects from being committed. diff --git a/cli/package.json b/cli/package.json index 9c791cd..2fe1855 100644 --- a/cli/package.json +++ b/cli/package.json @@ -12,6 +12,7 @@ "scripts": { "build": "tsup", "dev": "tsup --watch", + "start": "tsx src/index.ts", "test": "vitest", "lint": "eslint src/", "type-check": "tsc --noEmit" @@ -27,6 +28,7 @@ "@types/node": "^22.10.7", "eslint": "^9.21.0", "tsup": "^8.0.2", + "tsx": "^4.19.2", "typescript": "~5.7.2", "vitest": "^2.1.8" }, diff --git a/cli/pnpm-lock.yaml b/cli/pnpm-lock.yaml index 84a783a..b095b3d 100644 --- a/cli/pnpm-lock.yaml +++ b/cli/pnpm-lock.yaml @@ -32,7 +32,10 @@ importers: version: 9.30.1 tsup: specifier: ^8.0.2 - version: 8.5.0(postcss@8.5.6)(typescript@5.7.3) + version: 8.5.0(postcss@8.5.6)(tsx@4.20.3)(typescript@5.7.3) + tsx: + specifier: ^4.19.2 + version: 4.20.3 typescript: specifier: ~5.7.2 version: 5.7.3 @@ -852,6 +855,9 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -1137,6 +1143,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -1288,6 +1297,11 @@ packages: typescript: optional: true + tsx@4.20.3: + resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} + engines: {node: '>=18.0.0'} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -2102,6 +2116,10 @@ snapshots: fsevents@2.3.3: optional: true + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 @@ -2330,11 +2348,12 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - postcss-load-config@6.0.1(postcss@8.5.6): + postcss-load-config@6.0.1(postcss@8.5.6)(tsx@4.20.3): dependencies: lilconfig: 3.1.3 optionalDependencies: postcss: 8.5.6 + tsx: 4.20.3 postcss@8.5.6: dependencies: @@ -2358,6 +2377,8 @@ snapshots: resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -2498,7 +2519,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(postcss@8.5.6)(typescript@5.7.3): + tsup@8.5.0(postcss@8.5.6)(tsx@4.20.3)(typescript@5.7.3): dependencies: bundle-require: 5.1.0(esbuild@0.25.5) cac: 6.7.14 @@ -2509,7 +2530,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(postcss@8.5.6) + postcss-load-config: 6.0.1(postcss@8.5.6)(tsx@4.20.3) resolve-from: 5.0.0 rollup: 4.44.1 source-map: 0.8.0-beta.0 @@ -2526,6 +2547,13 @@ snapshots: - tsx - yaml + tsx@4.20.3: + dependencies: + esbuild: 0.25.5 + get-tsconfig: 4.10.1 + optionalDependencies: + fsevents: 2.3.3 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 From c06c45ebdfe048d0eb1ccc2c5d2ae53b58a0bfbb Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 09:59:09 +0100 Subject: [PATCH 05/26] chore: update deps --- cli/package.json | 7 +- cli/pnpm-lock.yaml | 718 ++++++++++++++++++++++++++++----------------- 2 files changed, 458 insertions(+), 267 deletions(-) diff --git a/cli/package.json b/cli/package.json index 2fe1855..ff3677d 100644 --- a/cli/package.json +++ b/cli/package.json @@ -18,9 +18,9 @@ "type-check": "tsc --noEmit" }, "dependencies": { - "commander": "^12.0.0", + "commander": "^14.0.0", "fs-extra": "^11.2.0", - "inquirer": "^9.2.15" + "inquirer": "^12.7.0" }, "devDependencies": { "@types/fs-extra": "^11.0.4", @@ -29,8 +29,7 @@ "eslint": "^9.21.0", "tsup": "^8.0.2", "tsx": "^4.19.2", - "typescript": "~5.7.2", - "vitest": "^2.1.8" + "typescript": "~5.8.3" }, "engines": { "node": ">=18.0.0" diff --git a/cli/pnpm-lock.yaml b/cli/pnpm-lock.yaml index b095b3d..58fa144 100644 --- a/cli/pnpm-lock.yaml +++ b/cli/pnpm-lock.yaml @@ -9,14 +9,14 @@ importers: .: dependencies: commander: - specifier: ^12.0.0 - version: 12.1.0 + specifier: ^14.0.0 + version: 14.0.0 fs-extra: specifier: ^11.2.0 version: 11.3.0 inquirer: - specifier: ^9.2.15 - version: 9.3.7 + specifier: ^12.7.0 + version: 12.7.0(@types/node@22.16.0) devDependencies: '@types/fs-extra': specifier: ^11.0.4 @@ -32,16 +32,16 @@ importers: version: 9.30.1 tsup: specifier: ^8.0.2 - version: 8.5.0(postcss@8.5.6)(tsx@4.20.3)(typescript@5.7.3) + version: 8.5.0(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3) tsx: specifier: ^4.19.2 version: 4.20.3 typescript: - specifier: ~5.7.2 - version: 5.7.3 + specifier: ~5.8.3 + version: 5.8.3 vitest: - specifier: ^2.1.8 - version: 2.1.9(@types/node@22.16.0) + specifier: ^3.2.4 + version: 3.2.4(@types/node@22.16.0) packages: @@ -395,10 +395,127 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@inquirer/checkbox@4.1.9': + resolution: {integrity: sha512-DBJBkzI5Wx4jFaYm221LHvAhpKYkhVS0k9plqHwaHhofGNxvYB7J3Bz8w+bFJ05zaMb0sZNHo4KdmENQFlNTuQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.13': + resolution: {integrity: sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.1.14': + resolution: {integrity: sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.14': + resolution: {integrity: sha512-yd2qtLl4QIIax9DTMZ1ZN2pFrrj+yL3kgIWxm34SS6uwCr0sIhsNyudUjAo5q3TqI03xx4SEBkUJqZuAInp9uA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.16': + resolution: {integrity: sha512-oiDqafWzMtofeJyyGkb1CTPaxUkjIcSxePHHQCfif8t3HV9pHcw1Kgdw3/uGpDvaFfeTluwQtWiqzPVjAqS3zA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/figures@1.0.12': resolution: {integrity: sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==} engines: {node: '>=18'} + '@inquirer/input@4.2.0': + resolution: {integrity: sha512-opqpHPB1NjAmDISi3uvZOTrjEEU5CWVu/HBkDby8t93+6UxYX0Z7Ps0Ltjm5sZiEbWenjubwUkivAEYQmy9xHw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.16': + resolution: {integrity: sha512-kMrXAaKGavBEoBYUCgualbwA9jWUx2TjMA46ek+pEKy38+LFpL9QHlTd8PO2kWPUgI/KB+qi02o4y2rwXbzr3Q==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.16': + resolution: {integrity: sha512-g8BVNBj5Zeb5/Y3cSN+hDUL7CsIFDIuVxb9EPty3lkxBaYpjL5BNRKSYOF9yOLe+JOcKFd+TSVeADQ4iSY7rbg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.6.0': + resolution: {integrity: sha512-jAhL7tyMxB3Gfwn4HIJ0yuJ5pvcB5maYUcouGcgd/ub79f9MqZ+aVnBtuFf+VC2GTkCBF+R+eo7Vi63w5VZlzw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.1.4': + resolution: {integrity: sha512-5GGvxVpXXMmfZNtvWw4IsHpR7RzqAR624xtkPd1NxxlV5M+pShMqzL4oRddRkg8rVEOK9fKdJp1jjVML2Lr7TQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.0.16': + resolution: {integrity: sha512-POCmXo+j97kTGU6aeRjsPyuCpQQfKcMXdeTMw708ZMtWrj5aykZvlUxH4Qgz3+Y1L/cAVZsSpA+UgZCu2GMOMg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.2.4': + resolution: {integrity: sha512-unTppUcTjmnbl/q+h8XeQDhAqIOmwWYWNyiiP2e3orXrg6tOaa5DHXja9PChCSbChOsktyKgOieRZFnajzxoBg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.7': + resolution: {integrity: sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -416,6 +533,46 @@ packages: '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@oxlint/darwin-arm64@1.6.0': + resolution: {integrity: sha512-m3wyqBh1TOHjpr/dXeIZY7OoX+MQazb+bMHQdDtwUvefrafUx+5YHRvulYh1sZSQ449nQ3nk3qj5qj535vZRjg==} + cpu: [arm64] + os: [darwin] + + '@oxlint/darwin-x64@1.6.0': + resolution: {integrity: sha512-75fJfF/9xNypr7cnOYoZBhfmG1yP7ex3pUOeYGakmtZRffO9z1i1quLYhjZsmaDXsAIZ3drMhenYHMmFKS3SRg==} + cpu: [x64] + os: [darwin] + + '@oxlint/linux-arm64-gnu@1.6.0': + resolution: {integrity: sha512-YhXGf0FXa72bEt4F7eTVKx5X3zWpbAOPnaA/dZ6/g8tGhw1m9IFjrabVHFjzcx3dQny4MgA59EhyElkDvpUe8A==} + cpu: [arm64] + os: [linux] + + '@oxlint/linux-arm64-musl@1.6.0': + resolution: {integrity: sha512-T3JDhx8mjGjvh5INsPZJrlKHmZsecgDYvtvussKRdkc1Nnn7WC+jH9sh5qlmYvwzvmetlPVNezAoNvmGO9vtMg==} + cpu: [arm64] + os: [linux] + + '@oxlint/linux-x64-gnu@1.6.0': + resolution: {integrity: sha512-Dx7ghtAl8aXBdqofJpi338At6lkeCtTfoinTYQXd9/TEJx+f+zCGNlQO6nJz3ydJBX48FDuOFKkNC+lUlWrd8w==} + cpu: [x64] + os: [linux] + + '@oxlint/linux-x64-musl@1.6.0': + resolution: {integrity: sha512-7KvMGdWmAZtAtg6IjoEJHKxTXdAcrHnUnqfgs0JpXst7trquV2mxBeRZusQXwxpu4HCSomKMvJfsp1qKaqSFDg==} + cpu: [x64] + os: [linux] + + '@oxlint/win32-arm64@1.6.0': + resolution: {integrity: sha512-iSGC9RwX+dl7o5KFr5aH7Gq3nFbkq/3Gda6mxNPMvNkWrgXdIyiINxpyD8hJu566M+QSv1wEAu934BZotFDyoQ==} + cpu: [arm64] + os: [win32] + + '@oxlint/win32-x64@1.6.0': + resolution: {integrity: sha512-jOj3L/gfLc0IwgOTkZMiZ5c673i/hbAmidlaylT0gE6H18hln9HxPgp5GCf4E4y6mwEJlW8QC5hQi221+9otdA==} + cpu: [x64] + os: [win32] + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -520,6 +677,12 @@ packages: cpu: [x64] os: [win32] + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -541,34 +704,34 @@ packages: '@types/through@0.0.33': resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} - '@vitest/expect@2.1.9': - resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/mocker@2.1.9': - resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/runner@2.1.9': - resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/snapshot@2.1.9': - resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/spy@2.1.9': - resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -616,21 +779,12 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - bundle-require@5.1.0: resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -664,22 +818,10 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -687,9 +829,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} @@ -725,9 +867,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -881,9 +1020,6 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -896,12 +1032,14 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - inquirer@9.3.7: - resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==} + inquirer@12.7.0: + resolution: {integrity: sha512-KKFRc++IONSyE2UYw9CJ1V0IWx5yQKomwB+pp3cWomWs+v2+ZsG11G2OVfAjFS6WWCppKw+RfKmpqGfSzD5QBQ==} engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -915,14 +1053,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -933,6 +1063,9 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -977,10 +1110,6 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - loupe@3.1.4: resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} @@ -990,10 +1119,6 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1011,9 +1136,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -1030,22 +1155,19 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} + oxlint@1.6.0: + resolution: {integrity: sha512-jtaD65PqzIa1udvSxxscTKBxYKuZoFXyKGLiU1Qjo1ulq3uv/fQDtoV1yey1FrQZrQjACGPi1Widsy1TucC7Jg==} + engines: {node: '>=8.*'} + hasBin: true + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -1073,9 +1195,6 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -1123,14 +1242,15 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -1146,25 +1266,18 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - rollup@4.44.1: resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + run-async@4.0.4: + resolution: {integrity: sha512-2cgeRHnV11lSXBEhq7sN7a5UVjTKm9JTb9x8ApIT//16D7QL96AgnNeWSGoB4gIHc0iYw/Ha0Z+waBaCYZVNhg==} engines: {node: '>=0.12.0'} rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -1179,9 +1292,6 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -1208,9 +1318,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1223,6 +1330,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -1253,12 +1363,12 @@ packages: resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} tmp@0.0.33: @@ -1310,8 +1420,8 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true @@ -1328,12 +1438,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - vite-node@2.1.9: - resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} - engines: {node: ^18.0.0 || >=20.0.0} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true vite@5.4.19: @@ -1367,20 +1474,23 @@ packages: terser: optional: true - vitest@2.1.9: - resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} - engines: {node: ^18.0.0 || >=20.0.0} + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.9 - '@vitest/ui': 2.1.9 + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@types/debug': + optional: true '@types/node': optional: true '@vitest/browser': @@ -1392,9 +1502,6 @@ packages: jsdom: optional: true - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -1642,8 +1749,122 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@inquirer/checkbox@4.1.9(@types/node@22.16.0)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/figures': 1.0.12 + '@inquirer/type': 3.0.7(@types/node@22.16.0) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/confirm@5.1.13(@types/node@22.16.0)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/type': 3.0.7(@types/node@22.16.0) + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/core@10.1.14(@types/node@22.16.0)': + dependencies: + '@inquirer/figures': 1.0.12 + '@inquirer/type': 3.0.7(@types/node@22.16.0) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/editor@4.2.14(@types/node@22.16.0)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/type': 3.0.7(@types/node@22.16.0) + external-editor: 3.1.0 + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/expand@4.0.16(@types/node@22.16.0)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/type': 3.0.7(@types/node@22.16.0) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.16.0 + '@inquirer/figures@1.0.12': {} + '@inquirer/input@4.2.0(@types/node@22.16.0)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/type': 3.0.7(@types/node@22.16.0) + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/number@3.0.16(@types/node@22.16.0)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/type': 3.0.7(@types/node@22.16.0) + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/password@4.0.16(@types/node@22.16.0)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/type': 3.0.7(@types/node@22.16.0) + ansi-escapes: 4.3.2 + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/prompts@7.6.0(@types/node@22.16.0)': + dependencies: + '@inquirer/checkbox': 4.1.9(@types/node@22.16.0) + '@inquirer/confirm': 5.1.13(@types/node@22.16.0) + '@inquirer/editor': 4.2.14(@types/node@22.16.0) + '@inquirer/expand': 4.0.16(@types/node@22.16.0) + '@inquirer/input': 4.2.0(@types/node@22.16.0) + '@inquirer/number': 3.0.16(@types/node@22.16.0) + '@inquirer/password': 4.0.16(@types/node@22.16.0) + '@inquirer/rawlist': 4.1.4(@types/node@22.16.0) + '@inquirer/search': 3.0.16(@types/node@22.16.0) + '@inquirer/select': 4.2.4(@types/node@22.16.0) + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/rawlist@4.1.4(@types/node@22.16.0)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/type': 3.0.7(@types/node@22.16.0) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/search@3.0.16(@types/node@22.16.0)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/figures': 1.0.12 + '@inquirer/type': 3.0.7(@types/node@22.16.0) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/select@4.2.4(@types/node@22.16.0)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/figures': 1.0.12 + '@inquirer/type': 3.0.7(@types/node@22.16.0) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.16.0 + + '@inquirer/type@3.0.7(@types/node@22.16.0)': + optionalDependencies: + '@types/node': 22.16.0 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -1667,6 +1888,30 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.4 + '@oxlint/darwin-arm64@1.6.0': + optional: true + + '@oxlint/darwin-x64@1.6.0': + optional: true + + '@oxlint/linux-arm64-gnu@1.6.0': + optional: true + + '@oxlint/linux-arm64-musl@1.6.0': + optional: true + + '@oxlint/linux-x64-gnu@1.6.0': + optional: true + + '@oxlint/linux-x64-musl@1.6.0': + optional: true + + '@oxlint/win32-arm64@1.6.0': + optional: true + + '@oxlint/win32-x64@1.6.0': + optional: true + '@pkgjs/parseargs@0.11.0': optional: true @@ -1730,6 +1975,12 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.44.1': optional: true + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 + + '@types/deep-eql@4.0.2': {} + '@types/estree@1.0.8': {} '@types/fs-extra@11.0.4': @@ -1756,45 +2007,47 @@ snapshots: dependencies: '@types/node': 22.16.0 - '@vitest/expect@2.1.9': + '@vitest/expect@3.2.4': dependencies: - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@22.16.0))': + '@vitest/mocker@3.2.4(vite@5.4.19(@types/node@22.16.0))': dependencies: - '@vitest/spy': 2.1.9 + '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: vite: 5.4.19(@types/node@22.16.0) - '@vitest/pretty-format@2.1.9': + '@vitest/pretty-format@3.2.4': dependencies: - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/runner@2.1.9': + '@vitest/runner@3.2.4': dependencies: - '@vitest/utils': 2.1.9 - pathe: 1.1.2 + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.0.0 - '@vitest/snapshot@2.1.9': + '@vitest/snapshot@3.2.4': dependencies: - '@vitest/pretty-format': 2.1.9 + '@vitest/pretty-format': 3.2.4 magic-string: 0.30.17 - pathe: 1.1.2 + pathe: 2.0.3 - '@vitest/spy@2.1.9': + '@vitest/spy@3.2.4': dependencies: - tinyspy: 3.0.2 + tinyspy: 4.0.3 - '@vitest/utils@2.1.9': + '@vitest/utils@3.2.4': dependencies: - '@vitest/pretty-format': 2.1.9 + '@vitest/pretty-format': 3.2.4 loupe: 3.1.4 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 acorn-jsx@5.3.2(acorn@8.15.0): dependencies: @@ -1831,14 +2084,6 @@ snapshots: balanced-match@1.0.2: {} - base64-js@1.5.1: {} - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -1848,11 +2093,6 @@ snapshots: dependencies: balanced-match: 1.0.2 - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - bundle-require@5.1.0(esbuild@0.25.5): dependencies: esbuild: 0.25.5 @@ -1883,23 +2123,15 @@ snapshots: dependencies: readdirp: 4.1.2 - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - cli-width@4.1.0: {} - clone@1.0.4: {} - color-convert@2.0.1: dependencies: color-name: 1.1.4 color-name@1.1.4: {} - commander@12.1.0: {} + commander@14.0.0: {} commander@4.1.1: {} @@ -1923,10 +2155,6 @@ snapshots: deep-is@0.1.4: {} - defaults@1.0.4: - dependencies: - clone: 1.0.4 - eastasianwidth@0.2.0: {} emoji-regex@8.0.0: {} @@ -2143,8 +2371,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - ieee754@1.2.1: {} - ignore@5.3.2: {} import-fresh@3.3.1: @@ -2154,22 +2380,17 @@ snapshots: imurmurhash@0.1.4: {} - inherits@2.0.4: {} - - inquirer@9.3.7: + inquirer@12.7.0(@types/node@22.16.0): dependencies: - '@inquirer/figures': 1.0.12 + '@inquirer/core': 10.1.14(@types/node@22.16.0) + '@inquirer/prompts': 7.6.0(@types/node@22.16.0) + '@inquirer/type': 3.0.7(@types/node@22.16.0) ansi-escapes: 4.3.2 - cli-width: 4.1.0 - external-editor: 3.1.0 - mute-stream: 1.0.0 - ora: 5.4.1 - run-async: 3.0.0 + mute-stream: 2.0.0 + run-async: 4.0.4 rxjs: 7.8.2 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.16.0 is-extglob@2.1.1: {} @@ -2179,10 +2400,6 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-interactive@1.0.0: {} - - is-unicode-supported@0.1.0: {} - isexe@2.0.0: {} jackspeak@3.4.3: @@ -2193,6 +2410,8 @@ snapshots: joycon@3.1.1: {} + js-tokens@9.0.1: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -2232,11 +2451,6 @@ snapshots: lodash.sortby@4.7.0: {} - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - loupe@3.1.4: {} lru-cache@10.4.3: {} @@ -2245,8 +2459,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.4 - mimic-fn@2.1.0: {} - minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -2266,7 +2478,7 @@ snapshots: ms@2.1.3: {} - mute-stream@1.0.0: {} + mute-stream@2.0.0: {} mz@2.7.0: dependencies: @@ -2280,10 +2492,6 @@ snapshots: object-assign@4.1.1: {} - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -2293,20 +2501,19 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - os-tmpdir@1.0.2: {} + oxlint@1.6.0: + optionalDependencies: + '@oxlint/darwin-arm64': 1.6.0 + '@oxlint/darwin-x64': 1.6.0 + '@oxlint/linux-arm64-gnu': 1.6.0 + '@oxlint/linux-arm64-musl': 1.6.0 + '@oxlint/linux-x64-gnu': 1.6.0 + '@oxlint/linux-x64-musl': 1.6.0 + '@oxlint/win32-arm64': 1.6.0 + '@oxlint/win32-x64': 1.6.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -2330,8 +2537,6 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - pathe@1.1.2: {} - pathe@2.0.3: {} pathval@2.0.1: {} @@ -2363,13 +2568,9 @@ snapshots: prelude-ls@1.2.1: {} - punycode@2.3.1: {} + prettier@3.6.2: {} - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 + punycode@2.3.1: {} readdirp@4.1.2: {} @@ -2379,11 +2580,6 @@ snapshots: resolve-pkg-maps@1.0.0: {} - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - rollup@4.44.1: dependencies: '@types/estree': 1.0.8 @@ -2410,14 +2606,15 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.44.1 fsevents: 2.3.3 - run-async@3.0.0: {} + run-async@4.0.4: + dependencies: + oxlint: 1.6.0 + prettier: 3.6.2 rxjs@7.8.2: dependencies: tslib: 2.8.1 - safe-buffer@5.2.1: {} - safer-buffer@2.1.2: {} shebang-command@2.0.0: @@ -2428,8 +2625,6 @@ snapshots: siginfo@2.0.0: {} - signal-exit@3.0.7: {} - signal-exit@4.1.0: {} source-map-js@1.2.1: {} @@ -2454,10 +2649,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -2468,6 +2659,10 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.12 @@ -2501,9 +2696,9 @@ snapshots: tinypool@1.1.1: {} - tinyrainbow@1.2.0: {} + tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} + tinyspy@4.0.3: {} tmp@0.0.33: dependencies: @@ -2519,7 +2714,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(postcss@8.5.6)(tsx@4.20.3)(typescript@5.7.3): + tsup@8.5.0(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3): dependencies: bundle-require: 5.1.0(esbuild@0.25.5) cac: 6.7.14 @@ -2540,7 +2735,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: postcss: 8.5.6 - typescript: 5.7.3 + typescript: 5.8.3 transitivePeerDependencies: - jiti - supports-color @@ -2560,7 +2755,7 @@ snapshots: type-fest@0.21.3: {} - typescript@5.7.3: {} + typescript@5.8.3: {} ufo@1.6.1: {} @@ -2572,14 +2767,12 @@ snapshots: dependencies: punycode: 2.3.1 - util-deprecate@1.0.2: {} - - vite-node@2.1.9(@types/node@22.16.0): + vite-node@3.2.4(@types/node@22.16.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 - pathe: 1.1.2 + pathe: 2.0.3 vite: 5.4.19(@types/node@22.16.0) transitivePeerDependencies: - '@types/node' @@ -2601,27 +2794,30 @@ snapshots: '@types/node': 22.16.0 fsevents: 2.3.3 - vitest@2.1.9(@types/node@22.16.0): + vitest@3.2.4(@types/node@22.16.0): dependencies: - '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@22.16.0)) - '@vitest/pretty-format': 2.1.9 - '@vitest/runner': 2.1.9 - '@vitest/snapshot': 2.1.9 - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@5.4.19(@types/node@22.16.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 debug: 4.4.1 expect-type: 1.2.1 magic-string: 0.30.17 - pathe: 1.1.2 + pathe: 2.0.3 + picomatch: 4.0.2 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 + tinyglobby: 0.2.14 tinypool: 1.1.1 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 vite: 5.4.19(@types/node@22.16.0) - vite-node: 2.1.9(@types/node@22.16.0) + vite-node: 3.2.4(@types/node@22.16.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.16.0 @@ -2636,10 +2832,6 @@ snapshots: - supports-color - terser - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - webidl-conversions@4.0.2: {} whatwg-url@7.1.0: From 99fce1c6854d0b8dce914c28270a98ea68742be9 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 09:59:29 +0100 Subject: [PATCH 06/26] fix: remove deprecated task --- cli/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/cli/package.json b/cli/package.json index ff3677d..25be65d 100644 --- a/cli/package.json +++ b/cli/package.json @@ -13,7 +13,6 @@ "build": "tsup", "dev": "tsup --watch", "start": "tsx src/index.ts", - "test": "vitest", "lint": "eslint src/", "type-check": "tsc --noEmit" }, From 0b4fcba08168f4228d0676fd85c03d717eb9f1ef Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 11:10:51 +0100 Subject: [PATCH 07/26] feat: add --force option to overwrite output folder --- cli/src/generator.ts | 19 +++++++++++-------- cli/src/index.ts | 44 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 10 deletions(-) diff --git a/cli/src/generator.ts b/cli/src/generator.ts index 0a94542..dedf3b2 100644 --- a/cli/src/generator.ts +++ b/cli/src/generator.ts @@ -133,18 +133,21 @@ async function applyComponentLibrary( } export async function generateProject( - projectName?: string, - componentLibrary: string = 'chakra' + projectName: string, + componentLibrary: string, + force: boolean, + targetDir: string ): Promise { - if (!projectName) { - throw new Error('Project name is required'); - } - - const targetDir = path.resolve(__dirname, '../generated', projectName); const baseTemplateDir = path.resolve(__dirname, '../templates/base'); if (await fs.pathExists(targetDir)) { - throw new Error(`Target directory ${targetDir} already exists.`); + if (!force) { + throw new Error( + `Target directory ${targetDir} already exists. Use --force to overwrite.` + ); + } + // Remove existing directory if force is enabled + await fs.remove(targetDir); } try { diff --git a/cli/src/index.ts b/cli/src/index.ts index 095b912..f4b3686 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -15,10 +15,11 @@ program '-c, --component-library ', 'Component library to use (none, chakra, uswds)' ) + .option('-f, --force', 'Overwrite existing directory if it exists') .action( async ( projectName: string | undefined, - options: { componentLibrary?: string } + options: { componentLibrary?: string; force?: boolean } ) => { try { let finalProjectName = projectName; @@ -62,7 +63,46 @@ program componentLibrary = library; } - await generateProject(finalProjectName, componentLibrary); + // Check if directory exists and handle interactive confirmation + const fs = await import('fs-extra'); + const path = await import('path'); + const targetDir = path.default.resolve( + __dirname, + '../generated', + finalProjectName! + ); + + if (await fs.default.pathExists(targetDir)) { + if (options.force) { + // Force is set, proceed with overwrite + } else { + // Force is not set, ask user for confirmation + const { overwrite } = await inquirer.prompt([ + { + type: 'confirm', + name: 'overwrite', + message: `Directory '${finalProjectName}' already exists. Do you want to overwrite it?`, + default: false + } + ]); + + if (!overwrite) { + // eslint-disable-next-line no-console + console.log('Project generation cancelled.'); + return; + } + + // Set force to true if user confirms overwrite + options.force = true; + } + } + + await generateProject( + finalProjectName, + componentLibrary, + options.force, + targetDir + ); } catch (error) { // eslint-disable-next-line no-console console.error('Error generating project:', error); From 726ca1aa0f9c1d0c767fcdfaee23a6aa38357d64 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 12:16:48 +0100 Subject: [PATCH 08/26] feat: add script to generate all variants --- cli/package.json | 1 + cli/scripts/generate-all.sh | 38 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100755 cli/scripts/generate-all.sh diff --git a/cli/package.json b/cli/package.json index 25be65d..57bc2a7 100644 --- a/cli/package.json +++ b/cli/package.json @@ -13,6 +13,7 @@ "build": "tsup", "dev": "tsup --watch", "start": "tsx src/index.ts", + "generate-all": "./scripts/generate-all.sh", "lint": "eslint src/", "type-check": "tsc --noEmit" }, diff --git a/cli/scripts/generate-all.sh b/cli/scripts/generate-all.sh new file mode 100755 index 0000000..cb45299 --- /dev/null +++ b/cli/scripts/generate-all.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Script to generate all component library variants for easy inspection + +set -e # Exit on any error + +# Load nvm and use the correct Node version +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion + +# Use the Node version specified in .nvmrc if it exists +if [ -f ".nvmrc" ]; then + nvm use +fi + +echo "Generating all component library variants..." +echo "" + +# Define the variants +variants=("none" "chakra" "uswds") + +# Generate each variant +for variant in "${variants[@]}"; do + echo "Generating $variant variant..." + pnpm start "project-seed-$variant" --component-library "$variant" --force + echo "✅ Generated $variant variant" + echo "" +done + +echo "🎉 All variants generated successfully!" +echo "" +echo "Generated projects:" +for variant in "${variants[@]}"; do + echo " - project-seed-$variant ($variant variant)" +done +echo "" +echo "All projects are located in: generated/" From 34d2678725a8e881bb7991a395153c3c85a403db Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 12:38:02 +0100 Subject: [PATCH 09/26] refactor: split generator tasks in separated files for readability and maintainability --- cli/src/generator.ts | 172 ------------------ cli/src/generator/apply-component-library.ts | 51 ++++++ cli/src/generator/copy-base-template-files.ts | 27 +++ cli/src/generator/create-env-file.ts | 25 +++ cli/src/generator/index.ts | 57 ++++++ cli/src/generator/process-readme.ts | 29 +++ cli/src/generator/replace-in-file.ts | 20 ++ cli/src/generator/update-package-json.ts | 23 +++ cli/src/index.ts | 16 +- cli/templates/base/app/main.tsx | 23 +-- 10 files changed, 246 insertions(+), 197 deletions(-) delete mode 100644 cli/src/generator.ts create mode 100644 cli/src/generator/apply-component-library.ts create mode 100644 cli/src/generator/copy-base-template-files.ts create mode 100644 cli/src/generator/create-env-file.ts create mode 100644 cli/src/generator/index.ts create mode 100644 cli/src/generator/process-readme.ts create mode 100644 cli/src/generator/replace-in-file.ts create mode 100644 cli/src/generator/update-package-json.ts diff --git a/cli/src/generator.ts b/cli/src/generator.ts deleted file mode 100644 index dedf3b2..0000000 --- a/cli/src/generator.ts +++ /dev/null @@ -1,172 +0,0 @@ -import fs from 'fs-extra'; -import path from 'path'; - -async function copyBaseTemplateFiles(src: string, dest: string): Promise { - await fs.ensureDir(dest); - - const items = await fs.readdir(src); - - for (const item of items) { - const srcPath = path.join(src, item); - const destPath = path.join(dest, item); - const stat = await fs.stat(srcPath); - - if (stat.isDirectory()) { - await fs.copy(srcPath, destPath); - } else { - await fs.copy(srcPath, destPath); - } - } -} - -async function replaceInFile( - filePath: string, - replacements: Record -): Promise { - let content = await fs.readFile(filePath, 'utf8'); - - for (const [search, replace] of Object.entries(replacements)) { - content = content.replace(new RegExp(search, 'g'), replace); - } - - await fs.writeFile(filePath, content); -} - -async function createEnvFile( - targetDir: string, - projectName: string -): Promise { - const envContent = `# Vite environment variables -# For local development, these can be left as defaults -# For production deployment, update these values - -VITE_BASE_URL= -VITE_APP_TITLE=${projectName} -VITE_APP_DESCRIPTION=A web application built with Vite and React -`; - await fs.writeFile(path.join(targetDir, '.env'), envContent); -} - -async function processReadme( - targetDir: string, - projectName: string -): Promise { - const readmePath = path.join(targetDir, '_README.md'); - - if (await fs.pathExists(readmePath)) { - const projectTitle = projectName.replace(/(^|[-_])([a-z])/g, (s) => - s.toUpperCase() - ); - - await replaceInFile(readmePath, { - '{{Project name}}': projectTitle, - '{{Description}}': `A web application built with Vite and React for ${projectTitle}` - }); - - const finalReadme = path.join(targetDir, 'README.md'); - await fs.move(readmePath, finalReadme, { overwrite: true }); - } -} - -async function updatePackageJson( - targetDir: string, - projectName: string -): Promise { - const pkgPath = path.join(targetDir, 'package.json'); - - if (await fs.pathExists(pkgPath)) { - await replaceInFile(pkgPath, { - '"name": *"[^"]+"': `"name": "${projectName}"` - }); - } -} - -async function applyComponentLibrary( - targetDir: string, - componentLibrary: string -): Promise { - const componentLibDir = path.resolve( - __dirname, - '../templates/component-library', - componentLibrary - ); - - if (!(await fs.pathExists(componentLibDir))) { - throw new Error( - `Component library template not found: ${componentLibrary}` - ); - } - - // Copy all files from component library variant (except package.json) - const items = await fs.readdir(componentLibDir); - - for (const item of items) { - if (item === 'package.json') continue; // Handle package.json separately - - const srcPath = path.join(componentLibDir, item); - const destPath = path.join(targetDir, 'app', item); - const stat = await fs.stat(srcPath); - - if (stat.isDirectory()) { - await fs.copy(srcPath, destPath); - } else { - await fs.copy(srcPath, destPath); - } - } - - // Merge package.json dependencies - const packageJsonPath = path.join(targetDir, 'package.json'); - const variantPackagePath = path.join(componentLibDir, 'package.json'); - - if (await fs.pathExists(variantPackagePath)) { - const basePackage = await fs.readJson(packageJsonPath); - const variantPackage = await fs.readJson(variantPackagePath); - - // Merge dependencies - basePackage.dependencies = { - ...basePackage.dependencies, - ...variantPackage.dependencies - }; - - await fs.writeJson(packageJsonPath, basePackage, { spaces: 2 }); - } -} - -export async function generateProject( - projectName: string, - componentLibrary: string, - force: boolean, - targetDir: string -): Promise { - const baseTemplateDir = path.resolve(__dirname, '../templates/base'); - - if (await fs.pathExists(targetDir)) { - if (!force) { - throw new Error( - `Target directory ${targetDir} already exists. Use --force to overwrite.` - ); - } - // Remove existing directory if force is enabled - await fs.remove(targetDir); - } - - try { - // Copy base template files - await copyBaseTemplateFiles(baseTemplateDir, targetDir); - - // Apply component library specific modifications - await applyComponentLibrary(targetDir, componentLibrary); - - await updatePackageJson(targetDir, projectName); - await processReadme(targetDir, projectName); - await createEnvFile(targetDir, projectName); - - // eslint-disable-next-line no-console - console.log(`Project generated at ${targetDir}`); - } catch (error) { - if (await fs.pathExists(targetDir)) { - await fs.remove(targetDir); - } - throw error; - } -} diff --git a/cli/src/generator/apply-component-library.ts b/cli/src/generator/apply-component-library.ts new file mode 100644 index 0000000..694ee94 --- /dev/null +++ b/cli/src/generator/apply-component-library.ts @@ -0,0 +1,51 @@ +import fs from 'fs-extra'; +import path from 'path'; + +/** + * Applies the selected component library template to the generated project. + * Copies files from the component library template directory and merges dependencies + * from the template's package.json into the main project's package.json. + * Skips copying the template's package.json file to avoid conflicts. + * + * @param targetDir - Target directory where the project is being generated + * @param componentLibrary - Name of the component library template to apply + * @throws {Error} When the component library template directory is not found + */ +export async function applyComponentLibrary( + targetDir: string, + componentLibrary: string +): Promise { + const componentLibDir = path.resolve( + __dirname, + '../../templates/component-library', + componentLibrary + ); + if (!(await fs.pathExists(componentLibDir))) { + throw new Error( + `Component library template not found: ${componentLibrary}` + ); + } + const items = await fs.readdir(componentLibDir); + for (const item of items) { + if (item === 'package.json') continue; + const srcPath = path.join(componentLibDir, item); + const destPath = path.join(targetDir, 'app', item); + const stat = await fs.stat(srcPath); + if (stat.isDirectory()) { + await fs.copy(srcPath, destPath); + } else { + await fs.copy(srcPath, destPath); + } + } + const packageJsonPath = path.join(targetDir, 'package.json'); + const variantPackagePath = path.join(componentLibDir, 'package.json'); + if (await fs.pathExists(variantPackagePath)) { + const basePackage = await fs.readJson(packageJsonPath); + const variantPackage = await fs.readJson(variantPackagePath); + basePackage.dependencies = { + ...basePackage.dependencies, + ...variantPackage.dependencies + }; + await fs.writeJson(packageJsonPath, basePackage, { spaces: 2 }); + } +} diff --git a/cli/src/generator/copy-base-template-files.ts b/cli/src/generator/copy-base-template-files.ts new file mode 100644 index 0000000..08c267e --- /dev/null +++ b/cli/src/generator/copy-base-template-files.ts @@ -0,0 +1,27 @@ +import fs from 'fs-extra'; +import path from 'path'; + +/** + * Copies all files and directories from the base template source to the destination directory. + * Ensures the destination exists and recursively copies all contents. + * + * @param src - Source directory path containing the base template files + * @param dest - Destination directory path where files will be copied + */ +export async function copyBaseTemplateFiles( + src: string, + dest: string +): Promise { + await fs.ensureDir(dest); + const items = await fs.readdir(src); + for (const item of items) { + const srcPath = path.join(src, item); + const destPath = path.join(dest, item); + const stat = await fs.stat(srcPath); + if (stat.isDirectory()) { + await fs.copy(srcPath, destPath); + } else { + await fs.copy(srcPath, destPath); + } + } +} diff --git a/cli/src/generator/create-env-file.ts b/cli/src/generator/create-env-file.ts new file mode 100644 index 0000000..bd366f2 --- /dev/null +++ b/cli/src/generator/create-env-file.ts @@ -0,0 +1,25 @@ +import fs from 'fs-extra'; +import path from 'path'; + +/** + * Creates a .env file in the target directory with default Vite environment variables. + * Sets the app title and description based on the project name. + * Includes comments explaining the purpose of each variable for development guidance. + * + * @param targetDir - Directory where the .env file will be created + * @param projectName - Project name to use for the app title and description + */ +export async function createEnvFile( + targetDir: string, + projectName: string +): Promise { + const envContent = `# Vite environment variables +# For local development, these can be left as defaults +# For production deployment, update these values + +VITE_BASE_URL= +VITE_APP_TITLE=${projectName} +VITE_APP_DESCRIPTION=A web application built with Vite and React +`; + await fs.writeFile(path.join(targetDir, '.env'), envContent); +} diff --git a/cli/src/generator/index.ts b/cli/src/generator/index.ts new file mode 100644 index 0000000..f051039 --- /dev/null +++ b/cli/src/generator/index.ts @@ -0,0 +1,57 @@ +import fs from 'fs-extra'; +import path from 'path'; +import { copyBaseTemplateFiles } from './copy-base-template-files'; +import { createEnvFile } from './create-env-file'; +import { processReadme } from './process-readme'; +import { updatePackageJson } from './update-package-json'; +import { applyComponentLibrary } from './apply-component-library'; + +/** + * Main project generation function that orchestrates the entire project creation process. + * Copies base template files, applies component library modifications, updates configuration + * files, and handles error cleanup if the generation fails. + * + * @param projectName - Name of the project to generate + * @param componentLibrary - Component library template to apply (e.g., 'chakra', 'uswds', 'none') + * @param force - Whether to overwrite existing directory if it exists + * @param targetDir - Target directory where the project will be generated + * @throws {Error} When target directory exists and force is false, or when generation fails + */ +export async function generateProject( + projectName: string, + componentLibrary: string, + force: boolean, + targetDir: string +): Promise { + const baseTemplateDir = path.resolve(__dirname, '../../templates/base'); + + if (await fs.pathExists(targetDir)) { + if (!force) { + throw new Error( + `Target directory ${targetDir} already exists. Use --force to overwrite.` + ); + } + // Remove existing directory if force is enabled + await fs.remove(targetDir); + } + + try { + // Copy base template files + await copyBaseTemplateFiles(baseTemplateDir, targetDir); + + // Apply component library specific modifications + await applyComponentLibrary(targetDir, componentLibrary); + + await updatePackageJson(targetDir, projectName); + await processReadme(targetDir, projectName); + await createEnvFile(targetDir, projectName); + + // eslint-disable-next-line no-console + console.log(`Project generated at ${targetDir}`); + } catch (error) { + if (await fs.pathExists(targetDir)) { + await fs.remove(targetDir); + } + throw error; + } +} diff --git a/cli/src/generator/process-readme.ts b/cli/src/generator/process-readme.ts new file mode 100644 index 0000000..c9e5885 --- /dev/null +++ b/cli/src/generator/process-readme.ts @@ -0,0 +1,29 @@ +import fs from 'fs-extra'; +import path from 'path'; +import { replaceInFile } from './replace-in-file'; + +/** + * Processes the _README.md template file by replacing placeholders and renaming it to README.md. + * Converts the project name to a title case format and creates a descriptive summary. + * Uses regex replacement to update template placeholders with actual project information. + * + * @param targetDir - Directory containing the _README.md template file + * @param projectName - Project name to use for title and description replacements + */ +export async function processReadme( + targetDir: string, + projectName: string +): Promise { + const readmePath = path.join(targetDir, '_README.md'); + if (await fs.pathExists(readmePath)) { + const projectTitle = projectName.replace(/(^|[-_])([a-z])/g, (s) => + s.toUpperCase() + ); + await replaceInFile(readmePath, { + '{{Project name}}': projectTitle, + '{{Description}}': `A web application built with Vite and React for ${projectTitle}` + }); + const finalReadme = path.join(targetDir, 'README.md'); + await fs.move(readmePath, finalReadme, { overwrite: true }); + } +} diff --git a/cli/src/generator/replace-in-file.ts b/cli/src/generator/replace-in-file.ts new file mode 100644 index 0000000..8990e9e --- /dev/null +++ b/cli/src/generator/replace-in-file.ts @@ -0,0 +1,20 @@ +import fs from 'fs-extra'; + +/** + * Replaces all occurrences of given patterns in a file with provided replacements. + * Reads the file content, applies regex-based replacements, and writes the result back. + * Uses global regex matching to replace all instances of each pattern. + * + * @param filePath - Path to the file to be processed + * @param replacements - Object mapping search patterns to replacement strings + */ +export async function replaceInFile( + filePath: string, + replacements: Record +): Promise { + let content = await fs.readFile(filePath, 'utf8'); + for (const [search, replace] of Object.entries(replacements)) { + content = content.replace(new RegExp(search, 'g'), replace); + } + await fs.writeFile(filePath, content); +} diff --git a/cli/src/generator/update-package-json.ts b/cli/src/generator/update-package-json.ts new file mode 100644 index 0000000..35998dd --- /dev/null +++ b/cli/src/generator/update-package-json.ts @@ -0,0 +1,23 @@ +import fs from 'fs-extra'; +import path from 'path'; +import { replaceInFile } from './replace-in-file'; + +/** + * Updates the package.json file in the target directory to set the project name. + * Uses regex replacement to update the "name" field while preserving the JSON structure. + * Only processes the file if it exists in the target directory. + * + * @param targetDir - Directory containing the package.json file to update + * @param projectName - New project name to set in the package.json + */ +export async function updatePackageJson( + targetDir: string, + projectName: string +): Promise { + const pkgPath = path.join(targetDir, 'package.json'); + if (await fs.pathExists(pkgPath)) { + await replaceInFile(pkgPath, { + '"name": *"[^"]+"': `"name": "${projectName}"` + }); + } +} diff --git a/cli/src/index.ts b/cli/src/index.ts index f4b3686..b8520f5 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -2,7 +2,7 @@ import { Command } from 'commander'; import inquirer from 'inquirer'; -import { generateProject } from './generator.ts'; +import { generateProject } from './generator/index.ts'; import pkg from '../package.json'; const program = new Command(); @@ -46,6 +46,11 @@ program finalProjectName = name; } + // Ensure we have a valid project name + if (!finalProjectName || !finalProjectName.trim()) { + throw new Error('Project name is required'); + } + // If component library is not provided, prompt for it if (!componentLibrary) { const { library } = await inquirer.prompt([ @@ -63,6 +68,11 @@ program componentLibrary = library; } + // Ensure we have a valid component library + if (!componentLibrary) { + throw new Error('Component library is required'); + } + // Check if directory exists and handle interactive confirmation const fs = await import('fs-extra'); const path = await import('path'); @@ -98,9 +108,9 @@ program } await generateProject( - finalProjectName, + finalProjectName!, componentLibrary, - options.force, + options.force || false, targetDir ); } catch (error) { diff --git a/cli/templates/base/app/main.tsx b/cli/templates/base/app/main.tsx index ef5d4dd..89df05b 100644 --- a/cli/templates/base/app/main.tsx +++ b/cli/templates/base/app/main.tsx @@ -1,22 +1 @@ -import React, { useEffect } from 'react'; -import { createRoot } from 'react-dom/client'; - -// Root component. -function Root() { - useEffect(() => { - // Hide the welcome banner. - const banner = document.querySelector('#welcome-banner')!; - banner.classList.add('dismissed'); - setTimeout(() => banner.remove(), 500); - }, []); - - return ( -
-

Hello World

-
- ); -} - -const rootNode = document.querySelector('#app-container')!; -const root = createRoot(rootNode); -root.render(); +// This entry point serves as a placeholder and will be substituted with the component library's variant entry points. From 7d790924a2d911685dd0f8052e88bd4d32d91f67 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 12:46:35 +0100 Subject: [PATCH 10/26] feat: add context to app.tsx for map components and app features --- cli/templates/base/app/app.tsx | 12 ++++++ cli/templates/base/app/main.tsx | 3 +- .../component-library/chakra/main.tsx | 3 +- cli/templates/component-library/none/main.tsx | 7 +--- cli/templates/component-library/uswds/app.tsx | 37 +++++++++++++++++++ .../component-library/uswds/main.tsx | 33 +---------------- 6 files changed, 57 insertions(+), 38 deletions(-) create mode 100644 cli/templates/base/app/app.tsx create mode 100644 cli/templates/component-library/uswds/app.tsx diff --git a/cli/templates/base/app/app.tsx b/cli/templates/base/app/app.tsx new file mode 100644 index 0000000..efb35eb --- /dev/null +++ b/cli/templates/base/app/app.tsx @@ -0,0 +1,12 @@ +// This is the main application component where you add your app-specific features +// that are independent of the component library choice. This includes: +// +// - Map components (Mapbox, MapLibre, etc.) +// - Custom widgets and components +// - Application-specific layouts +// - Business logic components +// - Data visualization components +// - Any other features not tied to the UI component library +// +// The component library setup (Chakra UI, USWDS, etc.) is handled in main.tsx, +// while this file focuses on your application's core functionality. diff --git a/cli/templates/base/app/main.tsx b/cli/templates/base/app/main.tsx index 89df05b..b1463c5 100644 --- a/cli/templates/base/app/main.tsx +++ b/cli/templates/base/app/main.tsx @@ -1 +1,2 @@ -// This entry point serves as a placeholder and will be substituted with the component library's variant entry points. +// This entry point serves as a placeholder and will be substituted with the +// component library's variant entry points. diff --git a/cli/templates/component-library/chakra/main.tsx b/cli/templates/component-library/chakra/main.tsx index 329cbd1..352f445 100644 --- a/cli/templates/component-library/chakra/main.tsx +++ b/cli/templates/component-library/chakra/main.tsx @@ -1,6 +1,7 @@ import { ChakraProvider } from '@chakra-ui/react'; import React, { useEffect } from 'react'; import { createRoot } from 'react-dom/client'; +import App from './app'; import system from './styles/theme'; @@ -15,7 +16,7 @@ function Root() { return ( -

Hello World

+
); } diff --git a/cli/templates/component-library/none/main.tsx b/cli/templates/component-library/none/main.tsx index ef5d4dd..f8a3bcc 100644 --- a/cli/templates/component-library/none/main.tsx +++ b/cli/templates/component-library/none/main.tsx @@ -1,5 +1,6 @@ import React, { useEffect } from 'react'; import { createRoot } from 'react-dom/client'; +import App from './app'; // Root component. function Root() { @@ -10,11 +11,7 @@ function Root() { setTimeout(() => banner.remove(), 500); }, []); - return ( -
-

Hello World

-
- ); + return ; } const rootNode = document.querySelector('#app-container')!; diff --git a/cli/templates/component-library/uswds/app.tsx b/cli/templates/component-library/uswds/app.tsx new file mode 100644 index 0000000..7c556c0 --- /dev/null +++ b/cli/templates/component-library/uswds/app.tsx @@ -0,0 +1,37 @@ +import React from 'react'; + +import { Header, Grid, GridContainer, Title } from '@trussworks/react-uswds'; + +function App() { + return ( + <> +
+
+
+
+ + + My App + + +
+
+
+
+
+ + + + Hello World +

+ Welcome to your React USWDS-powered application! +

+
+
+
+
+ + ); +} + +export default App; diff --git a/cli/templates/component-library/uswds/main.tsx b/cli/templates/component-library/uswds/main.tsx index 417bfa2..16ba48f 100644 --- a/cli/templates/component-library/uswds/main.tsx +++ b/cli/templates/component-library/uswds/main.tsx @@ -1,10 +1,9 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars -// @ts-expect-error React import needed for JSX import React, { useEffect } from 'react'; import { createRoot } from 'react-dom/client'; -import { Header, Grid, GridContainer, Title } from '@trussworks/react-uswds'; import '@trussworks/react-uswds/lib/uswds.css'; import '@trussworks/react-uswds/lib/index.css'; +import App from './app'; // Root component. function Root() { @@ -15,35 +14,7 @@ function Root() { setTimeout(() => banner.remove(), 500); }, []); - return ( - <> -
-
-
-
- - - My App - - -
-
-
-
-
- - - - Hello World -

- Welcome to your React USWDS-powered application! -

-
-
-
-
- - ); + return ; } const rootNode = document.querySelector('#app-container')!; From d2909f677fb0a7a3582250c570242c44a71f2a02 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 13:49:16 +0100 Subject: [PATCH 11/26] feat: enable map variants --- cli/scripts/generate-all.sh | 60 +++++++++++----- cli/src/generator/apply-map-library.ts | 52 ++++++++++++++ cli/src/generator/create-env-file.ts | 31 ++++++++- cli/src/generator/index.ts | 12 +++- cli/src/index.ts | 32 ++++++++- cli/src/types.ts | 3 + cli/templates/base/app/app.tsx | 19 ++---- cli/templates/base/app/vite-env.d.ts | 8 +++ cli/templates/map/mapbox-gl/app.tsx | 79 ++++++++++++++++++++++ cli/templates/map/mapbox-gl/package.json | 7 ++ cli/templates/map/maplibre-gl/app.tsx | 45 ++++++++++++ cli/templates/map/maplibre-gl/package.json | 6 ++ 12 files changed, 321 insertions(+), 33 deletions(-) create mode 100644 cli/src/generator/apply-map-library.ts create mode 100644 cli/templates/map/mapbox-gl/app.tsx create mode 100644 cli/templates/map/mapbox-gl/package.json create mode 100644 cli/templates/map/maplibre-gl/app.tsx create mode 100644 cli/templates/map/maplibre-gl/package.json diff --git a/cli/scripts/generate-all.sh b/cli/scripts/generate-all.sh index cb45299..c126493 100755 --- a/cli/scripts/generate-all.sh +++ b/cli/scripts/generate-all.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Script to generate all component library variants for easy inspection +# Script to generate all component library and map library combinations for easy inspection set -e # Exit on any error @@ -14,25 +14,53 @@ if [ -f ".nvmrc" ]; then nvm use fi -echo "Generating all component library variants..." +echo "Generating all component library and map library combinations..." echo "" # Define the variants -variants=("none" "chakra" "uswds") - -# Generate each variant -for variant in "${variants[@]}"; do - echo "Generating $variant variant..." - pnpm start "project-seed-$variant" --component-library "$variant" --force - echo "✅ Generated $variant variant" - echo "" +component_libraries=("none" "chakra" "uswds") +map_libraries=("none" "mapbox-gl" "maplibre-gl") + +# Counter for total projects +total_projects=0 + +# Generate each combination +for component_lib in "${component_libraries[@]}"; do + for map_lib in "${map_libraries[@]}"; do + # Create a descriptive project name + if [ "$map_lib" = "none" ]; then + project_name="project-seed-${component_lib}" + else + project_name="project-seed-${component_lib}-${map_lib}" + fi + + echo "Generating $component_lib + $map_lib variant..." + echo "Project name: $project_name" + + # Generate the project with both component library and map library + pnpm start "$project_name" --component-library "$component_lib" --map-library "$map_lib" --force + + echo "✅ Generated $component_lib + $map_lib variant" + echo "" + + ((total_projects++)) + done done -echo "🎉 All variants generated successfully!" +echo "🎉 All combinations generated successfully!" echo "" -echo "Generated projects:" -for variant in "${variants[@]}"; do - echo " - project-seed-$variant ($variant variant)" -done +echo "Generated projects ($total_projects total):" echo "" -echo "All projects are located in: generated/" + +# List all generated projects +for component_lib in "${component_libraries[@]}"; do + for map_lib in "${map_libraries[@]}"; do + if [ "$map_lib" = "none" ]; then + project_name="project-seed-${component_lib}" + echo " - $project_name ($component_lib component library, no map)" + else + project_name="project-seed-${component_lib}-${map_lib}" + echo " - $project_name ($component_lib component library + $map_lib map)" + fi + done +done diff --git a/cli/src/generator/apply-map-library.ts b/cli/src/generator/apply-map-library.ts new file mode 100644 index 0000000..a18a5c8 --- /dev/null +++ b/cli/src/generator/apply-map-library.ts @@ -0,0 +1,52 @@ +import fs from 'fs-extra'; +import path from 'path'; + +export async function applyMapLibrary( + targetDir: string, + mapLibrary: string +): Promise { + // If no map library is selected, skip map library application + if (mapLibrary === 'none') { + return; + } + + const mapLibDir = path.resolve(__dirname, '../../templates/map', mapLibrary); + + if (!(await fs.pathExists(mapLibDir))) { + throw new Error(`Map library template not found: ${mapLibrary}`); + } + + // Copy map components and other files (except main.tsx and package.json) + const items = await fs.readdir(mapLibDir); + + for (const item of items) { + if (item === 'package.json' || item === 'main.tsx') continue; // Handle these separately + + const srcPath = path.join(mapLibDir, item); + const destPath = path.join(targetDir, 'app', item); + const stat = await fs.stat(srcPath); + + if (stat.isDirectory()) { + await fs.copy(srcPath, destPath); + } else { + await fs.copy(srcPath, destPath); + } + } + + // Merge package.json dependencies + const packageJsonPath = path.join(targetDir, 'package.json'); + const variantPackagePath = path.join(mapLibDir, 'package.json'); + + if (await fs.pathExists(variantPackagePath)) { + const basePackage = await fs.readJson(packageJsonPath); + const variantPackage = await fs.readJson(variantPackagePath); + + // Merge dependencies + basePackage.dependencies = { + ...basePackage.dependencies, + ...variantPackage.dependencies + }; + + await fs.writeJson(packageJsonPath, basePackage, { spaces: 2 }); + } +} diff --git a/cli/src/generator/create-env-file.ts b/cli/src/generator/create-env-file.ts index bd366f2..906a44d 100644 --- a/cli/src/generator/create-env-file.ts +++ b/cli/src/generator/create-env-file.ts @@ -5,14 +5,27 @@ import path from 'path'; * Creates a .env file in the target directory with default Vite environment variables. * Sets the app title and description based on the project name. * Includes comments explaining the purpose of each variable for development guidance. + * Shows warning for Mapbox token when mapbox-gl is selected. * * @param targetDir - Directory where the .env file will be created * @param projectName - Project name to use for the app title and description + * @param mapLibrary - Map library being used (e.g., 'mapbox-gl', 'maplibre', 'none') */ export async function createEnvFile( targetDir: string, - projectName: string + projectName: string, + mapLibrary: string ): Promise { + // Show warning for Mapbox token if mapbox-gl is selected + if (mapLibrary === 'mapbox-gl') { + // eslint-disable-next-line no-console + console.log('⚠️ Note: Mapbox GL requires an access token.'); + // eslint-disable-next-line no-console + console.log( + ' Please set VITE_MAPBOX_ACCESS_TOKEN in your .env file after generation.' + ); + } + const envContent = `# Vite environment variables # For local development, these can be left as defaults # For production deployment, update these values @@ -21,5 +34,21 @@ VITE_BASE_URL= VITE_APP_TITLE=${projectName} VITE_APP_DESCRIPTION=A web application built with Vite and React `; + await fs.writeFile(path.join(targetDir, '.env'), envContent); + + // Create .env.example file with placeholder for Mapbox token + let exampleContent = `# Vite environment variables +# For local development, these can be left as defaults +# For production deployment, update these values + +VITE_BASE_URL= +VITE_APP_TITLE=${projectName} +VITE_APP_DESCRIPTION=A web application built with Vite and React +`; + + // Always add Mapbox token placeholder to .env.example + exampleContent += `\n# Mapbox API Token (required for Mapbox maps)\nVITE_MAPBOX_ACCESS_TOKEN=your_mapbox_token_here\n`; + + await fs.writeFile(path.join(targetDir, '.env.example'), exampleContent); } diff --git a/cli/src/generator/index.ts b/cli/src/generator/index.ts index f051039..39faa18 100644 --- a/cli/src/generator/index.ts +++ b/cli/src/generator/index.ts @@ -5,14 +5,16 @@ import { createEnvFile } from './create-env-file'; import { processReadme } from './process-readme'; import { updatePackageJson } from './update-package-json'; import { applyComponentLibrary } from './apply-component-library'; +import { applyMapLibrary } from './apply-map-library'; /** * Main project generation function that orchestrates the entire project creation process. - * Copies base template files, applies component library modifications, updates configuration - * files, and handles error cleanup if the generation fails. + * Copies base template files, applies component library modifications, applies map library + * modifications, updates configuration files, and handles error cleanup if the generation fails. * * @param projectName - Name of the project to generate * @param componentLibrary - Component library template to apply (e.g., 'chakra', 'uswds', 'none') + * @param mapLibrary - Map library template to apply (e.g., 'mapbox-gl', 'maplibre', 'none') * @param force - Whether to overwrite existing directory if it exists * @param targetDir - Target directory where the project will be generated * @throws {Error} When target directory exists and force is false, or when generation fails @@ -20,6 +22,7 @@ import { applyComponentLibrary } from './apply-component-library'; export async function generateProject( projectName: string, componentLibrary: string, + mapLibrary: string, force: boolean, targetDir: string ): Promise { @@ -42,9 +45,12 @@ export async function generateProject( // Apply component library specific modifications await applyComponentLibrary(targetDir, componentLibrary); + // Apply map library specific modifications + await applyMapLibrary(targetDir, mapLibrary); + await updatePackageJson(targetDir, projectName); await processReadme(targetDir, projectName); - await createEnvFile(targetDir, projectName); + await createEnvFile(targetDir, projectName, mapLibrary); // eslint-disable-next-line no-console console.log(`Project generated at ${targetDir}`); diff --git a/cli/src/index.ts b/cli/src/index.ts index b8520f5..86c97fe 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -15,15 +15,26 @@ program '-c, --component-library ', 'Component library to use (none, chakra, uswds)' ) + .option('-m, --map', 'Include map functionality') + .option( + '-l, --map-library ', + 'Map library to use (mapbox-gl, maplibre)' + ) .option('-f, --force', 'Overwrite existing directory if it exists') .action( async ( projectName: string | undefined, - options: { componentLibrary?: string; force?: boolean } + options: { + componentLibrary?: string; + map?: boolean; + mapLibrary?: string; + force?: boolean; + } ) => { try { let finalProjectName = projectName; let componentLibrary = options.componentLibrary; + let mapLibrary = options.mapLibrary; // If project name is not provided, prompt for it if (!finalProjectName) { @@ -73,6 +84,24 @@ program throw new Error('Component library is required'); } + // If map library is not provided, prompt for it + if (!mapLibrary) { + const { mapChoice } = await inquirer.prompt([ + { + type: 'list', + name: 'mapChoice', + message: 'Would you like to add a map to your project?', + choices: [ + { name: 'No map', value: 'none' }, + { name: 'Mapbox GL', value: 'mapbox-gl' }, + { name: 'MapLibre (open source)', value: 'maplibre' } + ], + default: 'none' + } + ]); + mapLibrary = mapChoice; + } + // Check if directory exists and handle interactive confirmation const fs = await import('fs-extra'); const path = await import('path'); @@ -110,6 +139,7 @@ program await generateProject( finalProjectName!, componentLibrary, + mapLibrary || 'none', options.force || false, targetDir ); diff --git a/cli/src/types.ts b/cli/src/types.ts index c033dba..d08c4e5 100644 --- a/cli/src/types.ts +++ b/cli/src/types.ts @@ -1,5 +1,8 @@ export interface GeneratorOptions { projectName?: string; + componentLibrary?: 'none' | 'chakra' | 'uswds'; + includeMap?: boolean; + mapLibrary?: 'mapbox-gl' | 'maplibre'; } export interface ProjectConfig { diff --git a/cli/templates/base/app/app.tsx b/cli/templates/base/app/app.tsx index efb35eb..b33c5ca 100644 --- a/cli/templates/base/app/app.tsx +++ b/cli/templates/base/app/app.tsx @@ -1,12 +1,7 @@ -// This is the main application component where you add your app-specific features -// that are independent of the component library choice. This includes: -// -// - Map components (Mapbox, MapLibre, etc.) -// - Custom widgets and components -// - Application-specific layouts -// - Business logic components -// - Data visualization components -// - Any other features not tied to the UI component library -// -// The component library setup (Chakra UI, USWDS, etc.) is handled in main.tsx, -// while this file focuses on your application's core functionality. +import React from 'react'; + +function App() { + return
Hello World
; +} + +export default App; diff --git a/cli/templates/base/app/vite-env.d.ts b/cli/templates/base/app/vite-env.d.ts index 11f02fe..2e96efc 100644 --- a/cli/templates/base/app/vite-env.d.ts +++ b/cli/templates/base/app/vite-env.d.ts @@ -1 +1,9 @@ /// + +interface ImportMetaEnv { + readonly VITE_MAPBOX_ACCESS_TOKEN?: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/cli/templates/map/mapbox-gl/app.tsx b/cli/templates/map/mapbox-gl/app.tsx new file mode 100644 index 0000000..fc42fec --- /dev/null +++ b/cli/templates/map/mapbox-gl/app.tsx @@ -0,0 +1,79 @@ +import React, { useState } from 'react'; +import Map, { Marker, NavigationControl } from 'react-map-gl/mapbox'; +import 'mapbox-gl/dist/mapbox-gl.css'; + +const MAPBOX_TOKEN = import.meta.env.VITE_MAPBOX_ACCESS_TOKEN; + +export default function MapComponent() { + const [viewState, setViewState] = useState({ + latitude: 0, + longitude: 0, + zoom: 1 + }); + + const sampleData = [ + { id: 1, latitude: 0, longitude: 0, title: 'Null Island' } + ]; + + if (!MAPBOX_TOKEN) { + return ( +
+
+

Please set VITE_MAPBOX_ACCESS_TOKEN in your .env file

+

+ Get your token at{' '} + + Mapbox + +

+
+
+ ); + } + + return ( +
+ setViewState(event.viewState)} + mapStyle='mapbox://styles/mapbox/streets-v9' + mapboxAccessToken={MAPBOX_TOKEN} + style={{ width: '100%', height: '100%' }} + > + + + {sampleData.map((point) => ( + +
+ + ))} + +
+ ); +} diff --git a/cli/templates/map/mapbox-gl/package.json b/cli/templates/map/mapbox-gl/package.json new file mode 100644 index 0000000..1546e06 --- /dev/null +++ b/cli/templates/map/mapbox-gl/package.json @@ -0,0 +1,7 @@ +{ + "dependencies": { + "react-map-gl": "^8.0.4", + "mapbox-gl": "^3.13.0", + "@types/mapbox-gl": "^3.4.1" + } +} diff --git a/cli/templates/map/maplibre-gl/app.tsx b/cli/templates/map/maplibre-gl/app.tsx new file mode 100644 index 0000000..0311d46 --- /dev/null +++ b/cli/templates/map/maplibre-gl/app.tsx @@ -0,0 +1,45 @@ +import React, { useState } from 'react'; +import Map, { Marker, NavigationControl } from 'react-map-gl/maplibre'; +import 'maplibre-gl/dist/maplibre-gl.css'; + +export default function MapComponent() { + const [viewState, setViewState] = useState({ + latitude: 0, + longitude: 0, + zoom: 1 + }); + + const sampleData = [ + { id: 1, latitude: 0, longitude: 0, title: 'Null Island' } + ]; + + return ( +
+ setViewState(event.viewState)} + mapStyle='https://demotiles.maplibre.org/style.json' + style={{ width: '100%', height: '100%' }} + > + + + {sampleData.map((point) => ( + +
+ + ))} + +
+ ); +} diff --git a/cli/templates/map/maplibre-gl/package.json b/cli/templates/map/maplibre-gl/package.json new file mode 100644 index 0000000..efbb3cb --- /dev/null +++ b/cli/templates/map/maplibre-gl/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "react-map-gl": "^8.0.4", + "maplibre-gl": "^5.6.1" + } +} From d69762e330f5c38ce2713973c03b3d968517dccf Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 13:51:00 +0100 Subject: [PATCH 12/26] fix: update license year --- cli/templates/base/LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/templates/base/LICENSE b/cli/templates/base/LICENSE index 46fe441..1ed54bb 100644 --- a/cli/templates/base/LICENSE +++ b/cli/templates/base/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Development Seed +Copyright (c) 2025 Development Seed Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From b3e2d963e906b2641ff2b35ed2b77697e9b2e2c0 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 13:53:54 +0100 Subject: [PATCH 13/26] fix: mapbox map should use the full height --- cli/templates/map/mapbox-gl/app.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/templates/map/mapbox-gl/app.tsx b/cli/templates/map/mapbox-gl/app.tsx index fc42fec..36a1052 100644 --- a/cli/templates/map/mapbox-gl/app.tsx +++ b/cli/templates/map/mapbox-gl/app.tsx @@ -20,7 +20,7 @@ export default function MapComponent() {
+
setViewState(event.viewState)} From 350973b9c2f0427ed7f1887f348a10aa9d22795e Mon Sep 17 00:00:00 2001 From: Vitor George Date: Tue, 8 Jul 2025 14:03:01 +0100 Subject: [PATCH 14/26] chore: update readme --- cli/README.md | 69 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 17 deletions(-) diff --git a/cli/README.md b/cli/README.md index 275651b..cf4b44e 100644 --- a/cli/README.md +++ b/cli/README.md @@ -23,6 +23,9 @@ pnpm start # Generate with specific project name and component library pnpm start my-project-name --component-library chakra +# Generate with specific project name, component library, and map library +pnpm start my-project-name --component-library chakra --map-library mapbox-gl + # Show help pnpm start --help @@ -45,6 +48,9 @@ node ./dist/index.js # Generate with specific project name and component library node ./dist/index.js my-project-name --component-library chakra +# Generate with specific project name, component library, and map library +node ./dist/index.js my-project-name --component-library chakra --map-library mapbox-gl + # Show help node ./dist/index.js --help @@ -60,12 +66,21 @@ The CLI supports three component library variants: - **`chakra`** - Chakra UI with theme and provider (default) - **`uswds`** - USWDS design system with government styling +### Map Library Options + +The CLI supports three map library variants: + +- **`none`** - No map functionality (default) +- **`mapbox-gl`** - Mapbox GL JS for interactive maps +- **`maplibre-gl`** - MapLibre GL JS (open source alternative) + ### Interactive Mode When run without arguments, the CLI will prompt for: 1. Project name (with validation) 2. Component library selection +3. Map library selection ## Development @@ -84,12 +99,16 @@ pnpm dev Runs tsup in watch mode, automatically rebuilding on file changes. -### Testing +### Generate All Combinations + +For testing and development purposes, you can generate all possible combinations of component libraries and map libraries: ```bash -pnpm test +pnpm generate-all ``` +This generates all the projects in the `cli/generated/` directory with descriptive names like `project-seed-chakra-mapbox-gl`. Useful for testing template combinations and QA. + ### Linting ```bash @@ -126,17 +145,24 @@ cli/templates/ │ ├── public/ │ ├── package.json # Core dependencies only │ └── ... -└── component-library/ # Component library variants - ├── none/ - │ ├── main.tsx # Plain React - │ └── package.json # Empty dependencies - ├── chakra/ - │ ├── main.tsx # Chakra UI provider - │ ├── styles/ # Theme files - │ └── package.json # Chakra UI dependencies - └── uswds/ - ├── main.tsx # USWDS components - └── package.json # USWDS dependencies +├── component-library/ # Component library variants +│ ├── none/ +│ │ ├── main.tsx # Plain React +│ │ └── package.json # Empty dependencies +│ ├── chakra/ +│ │ ├── main.tsx # Chakra UI provider +│ │ ├── styles/ # Theme files +│ │ └── package.json # Chakra UI dependencies +│ └── uswds/ +│ ├── main.tsx # USWDS components +│ └── package.json # USWDS dependencies +└── map/ # Map library variants + ├── mapbox-gl/ + │ ├── app.tsx # Mapbox GL map component + │ └── package.json # Mapbox GL dependencies + └── maplibre-gl/ + ├── app.tsx # MapLibre GL map component + └── package.json # MapLibre GL dependencies ``` ### Template Processing @@ -145,9 +171,10 @@ The generator: 1. Copies all files from the base template 2. Applies component library variant (main.tsx + package.json mixin) -3. Replaces project name in `package.json` -4. Processes `_README.md` template and renames it to `README.md` -5. Creates `.env` file with default environment variables +3. Applies map library variant (app.tsx + package.json mixin) +4. Replaces project name in `package.json` +5. Processes `_README.md` template and renames it to `README.md` +6. Creates `.env` file with default environment variables ### Adding New Component Libraries @@ -159,4 +186,12 @@ To add a new component library variant: 4. Update the CLI choices in `cli/src/index.ts` 5. Test the new variant -This modular approach makes it easy to maintain and extend the CLI with new component libraries. +### Adding New Map Libraries + +To add a new map library variant: + +1. Create a new folder in `cli/templates/map/` +2. Add `app.tsx` with the map library setup +3. Add `package.json` with map library dependencies +4. Update the CLI choices in `cli/src/index.ts` +5. Test the new variant From 27b5a1d77562b4c6c33458838dfdc0358f6fda13 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Wed, 30 Jul 2025 11:34:36 +0100 Subject: [PATCH 15/26] chore: update lockfile --- cli/pnpm-lock.yaml | 579 +-------------------------------------------- 1 file changed, 5 insertions(+), 574 deletions(-) diff --git a/cli/pnpm-lock.yaml b/cli/pnpm-lock.yaml index 58fa144..7bff885 100644 --- a/cli/pnpm-lock.yaml +++ b/cli/pnpm-lock.yaml @@ -39,210 +39,105 @@ importers: typescript: specifier: ~5.8.3 version: 5.8.3 - vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/node@22.16.0) packages: - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.5': resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.5': resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.5': resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.5': resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.5': resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.5': resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.5': resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.5': resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.5': resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.5': resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.5': resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.5': resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.5': resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.5': resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.5': resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.5': resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} engines: {node: '>=18'} @@ -255,12 +150,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} engines: {node: '>=18'} @@ -273,60 +162,30 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.5': resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.5': resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.5': resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.5': resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} engines: {node: '>=18'} @@ -677,12 +536,6 @@ packages: cpu: [x64] os: [win32] - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} - - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -704,35 +557,6 @@ packages: '@types/through@0.0.33': resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -772,10 +596,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -799,10 +619,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -810,10 +626,6 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -860,10 +672,6 @@ packages: supports-color: optional: true - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -876,14 +684,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.25.5: resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} @@ -931,17 +731,10 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - expect-type@1.2.1: - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} - engines: {node: '>=12.0.0'} - external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -1063,9 +856,6 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1110,9 +900,6 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - loupe@3.1.4: - resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -1198,10 +985,6 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1289,9 +1072,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -1304,12 +1084,6 @@ packages: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -1330,9 +1104,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -1349,9 +1120,6 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} @@ -1359,18 +1127,6 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} - engines: {node: '>=14.0.0'} - tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -1438,70 +1194,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - - vite@5.4.19: - resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -1513,11 +1205,6 @@ packages: engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -1544,147 +1231,78 @@ packages: snapshots: - '@esbuild/aix-ppc64@0.21.5': - optional: true - '@esbuild/aix-ppc64@0.25.5': optional: true - '@esbuild/android-arm64@0.21.5': - optional: true - '@esbuild/android-arm64@0.25.5': optional: true - '@esbuild/android-arm@0.21.5': - optional: true - '@esbuild/android-arm@0.25.5': optional: true - '@esbuild/android-x64@0.21.5': - optional: true - '@esbuild/android-x64@0.25.5': optional: true - '@esbuild/darwin-arm64@0.21.5': - optional: true - '@esbuild/darwin-arm64@0.25.5': optional: true - '@esbuild/darwin-x64@0.21.5': - optional: true - '@esbuild/darwin-x64@0.25.5': optional: true - '@esbuild/freebsd-arm64@0.21.5': - optional: true - '@esbuild/freebsd-arm64@0.25.5': optional: true - '@esbuild/freebsd-x64@0.21.5': - optional: true - '@esbuild/freebsd-x64@0.25.5': optional: true - '@esbuild/linux-arm64@0.21.5': - optional: true - '@esbuild/linux-arm64@0.25.5': optional: true - '@esbuild/linux-arm@0.21.5': - optional: true - '@esbuild/linux-arm@0.25.5': optional: true - '@esbuild/linux-ia32@0.21.5': - optional: true - '@esbuild/linux-ia32@0.25.5': optional: true - '@esbuild/linux-loong64@0.21.5': - optional: true - '@esbuild/linux-loong64@0.25.5': optional: true - '@esbuild/linux-mips64el@0.21.5': - optional: true - '@esbuild/linux-mips64el@0.25.5': optional: true - '@esbuild/linux-ppc64@0.21.5': - optional: true - '@esbuild/linux-ppc64@0.25.5': optional: true - '@esbuild/linux-riscv64@0.21.5': - optional: true - '@esbuild/linux-riscv64@0.25.5': optional: true - '@esbuild/linux-s390x@0.21.5': - optional: true - '@esbuild/linux-s390x@0.25.5': optional: true - '@esbuild/linux-x64@0.21.5': - optional: true - '@esbuild/linux-x64@0.25.5': optional: true '@esbuild/netbsd-arm64@0.25.5': optional: true - '@esbuild/netbsd-x64@0.21.5': - optional: true - '@esbuild/netbsd-x64@0.25.5': optional: true '@esbuild/openbsd-arm64@0.25.5': optional: true - '@esbuild/openbsd-x64@0.21.5': - optional: true - '@esbuild/openbsd-x64@0.25.5': optional: true - '@esbuild/sunos-x64@0.21.5': - optional: true - '@esbuild/sunos-x64@0.25.5': optional: true - '@esbuild/win32-arm64@0.21.5': - optional: true - '@esbuild/win32-arm64@0.25.5': optional: true - '@esbuild/win32-ia32@0.21.5': - optional: true - '@esbuild/win32-ia32@0.25.5': optional: true - '@esbuild/win32-x64@0.21.5': - optional: true - '@esbuild/win32-x64@0.25.5': optional: true @@ -1975,12 +1593,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.44.1': optional: true - '@types/chai@5.2.2': - dependencies: - '@types/deep-eql': 4.0.2 - - '@types/deep-eql@4.0.2': {} - '@types/estree@1.0.8': {} '@types/fs-extra@11.0.4': @@ -2007,48 +1619,6 @@ snapshots: dependencies: '@types/node': 22.16.0 - '@vitest/expect@3.2.4': - dependencies: - '@types/chai': 5.2.2 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.0 - tinyrainbow: 2.0.0 - - '@vitest/mocker@3.2.4(vite@5.4.19(@types/node@22.16.0))': - dependencies: - '@vitest/spy': 3.2.4 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 5.4.19(@types/node@22.16.0) - - '@vitest/pretty-format@3.2.4': - dependencies: - tinyrainbow: 2.0.0 - - '@vitest/runner@3.2.4': - dependencies: - '@vitest/utils': 3.2.4 - pathe: 2.0.3 - strip-literal: 3.0.0 - - '@vitest/snapshot@3.2.4': - dependencies: - '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.17 - pathe: 2.0.3 - - '@vitest/spy@3.2.4': - dependencies: - tinyspy: 4.0.3 - - '@vitest/utils@3.2.4': - dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.1.4 - tinyrainbow: 2.0.0 - acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -2080,8 +1650,6 @@ snapshots: argparse@2.0.1: {} - assertion-error@2.0.1: {} - balanced-match@1.0.2: {} brace-expansion@1.1.12: @@ -2102,14 +1670,6 @@ snapshots: callsites@3.1.0: {} - chai@5.2.0: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.4 - pathval: 2.0.1 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -2117,8 +1677,6 @@ snapshots: chardet@0.7.0: {} - check-error@2.1.1: {} - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -2151,8 +1709,6 @@ snapshots: dependencies: ms: 2.1.3 - deep-eql@5.0.2: {} - deep-is@0.1.4: {} eastasianwidth@0.2.0: {} @@ -2161,34 +1717,6 @@ snapshots: emoji-regex@9.2.2: {} - es-module-lexer@1.7.0: {} - - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - esbuild@0.25.5: optionalDependencies: '@esbuild/aix-ppc64': 0.25.5 @@ -2284,14 +1812,8 @@ snapshots: estraverse@5.3.0: {} - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.8 - esutils@2.0.3: {} - expect-type@1.2.1: {} - external-editor@3.1.0: dependencies: chardet: 0.7.0 @@ -2410,8 +1932,6 @@ snapshots: joycon@3.1.1: {} - js-tokens@9.0.1: {} - js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -2451,8 +1971,6 @@ snapshots: lodash.sortby@4.7.0: {} - loupe@3.1.4: {} - lru-cache@10.4.3: {} magic-string@0.30.17: @@ -2486,7 +2004,8 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.11: {} + nanoid@3.3.11: + optional: true natural-compare@1.4.0: {} @@ -2539,8 +2058,6 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.1: {} - picocolors@1.1.1: {} picomatch@4.0.2: {} @@ -2565,6 +2082,7 @@ snapshots: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 + optional: true prelude-ls@1.2.1: {} @@ -2623,20 +2141,15 @@ snapshots: shebang-regex@3.0.0: {} - siginfo@2.0.0: {} - signal-exit@4.1.0: {} - source-map-js@1.2.1: {} + source-map-js@1.2.1: + optional: true source-map@0.8.0-beta.0: dependencies: whatwg-url: 7.1.0 - stackback@0.0.2: {} - - std-env@3.9.0: {} - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -2659,10 +2172,6 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@3.0.0: - dependencies: - js-tokens: 9.0.1 - sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.12 @@ -2685,8 +2194,6 @@ snapshots: dependencies: any-promise: 1.3.0 - tinybench@2.9.0: {} - tinyexec@0.3.2: {} tinyglobby@0.2.14: @@ -2694,12 +2201,6 @@ snapshots: fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@1.1.1: {} - - tinyrainbow@2.0.0: {} - - tinyspy@4.0.3: {} - tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -2767,71 +2268,6 @@ snapshots: dependencies: punycode: 2.3.1 - vite-node@3.2.4(@types/node@22.16.0): - dependencies: - cac: 6.7.14 - debug: 4.4.1 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 5.4.19(@types/node@22.16.0) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite@5.4.19(@types/node@22.16.0): - dependencies: - esbuild: 0.21.5 - postcss: 8.5.6 - rollup: 4.44.1 - optionalDependencies: - '@types/node': 22.16.0 - fsevents: 2.3.3 - - vitest@3.2.4(@types/node@22.16.0): - dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@5.4.19(@types/node@22.16.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.0 - debug: 4.4.1 - expect-type: 1.2.1 - magic-string: 0.30.17 - pathe: 2.0.3 - picomatch: 4.0.2 - std-env: 3.9.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 5.4.19(@types/node@22.16.0) - vite-node: 3.2.4(@types/node@22.16.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 22.16.0 - transitivePeerDependencies: - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - webidl-conversions@4.0.2: {} whatwg-url@7.1.0: @@ -2844,11 +2280,6 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - word-wrap@1.2.5: {} wrap-ansi@6.2.0: From 3360728582b81a95c45d564e9ded230f2ac89c98 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Wed, 30 Jul 2025 11:43:54 +0100 Subject: [PATCH 16/26] refactor: remove unnecessary helper function file --- cli/src/generator/copy-base-template-files.ts | 27 ------------------- cli/src/generator/index.ts | 3 +-- 2 files changed, 1 insertion(+), 29 deletions(-) delete mode 100644 cli/src/generator/copy-base-template-files.ts diff --git a/cli/src/generator/copy-base-template-files.ts b/cli/src/generator/copy-base-template-files.ts deleted file mode 100644 index 08c267e..0000000 --- a/cli/src/generator/copy-base-template-files.ts +++ /dev/null @@ -1,27 +0,0 @@ -import fs from 'fs-extra'; -import path from 'path'; - -/** - * Copies all files and directories from the base template source to the destination directory. - * Ensures the destination exists and recursively copies all contents. - * - * @param src - Source directory path containing the base template files - * @param dest - Destination directory path where files will be copied - */ -export async function copyBaseTemplateFiles( - src: string, - dest: string -): Promise { - await fs.ensureDir(dest); - const items = await fs.readdir(src); - for (const item of items) { - const srcPath = path.join(src, item); - const destPath = path.join(dest, item); - const stat = await fs.stat(srcPath); - if (stat.isDirectory()) { - await fs.copy(srcPath, destPath); - } else { - await fs.copy(srcPath, destPath); - } - } -} diff --git a/cli/src/generator/index.ts b/cli/src/generator/index.ts index 39faa18..f7fc7cb 100644 --- a/cli/src/generator/index.ts +++ b/cli/src/generator/index.ts @@ -1,6 +1,5 @@ import fs from 'fs-extra'; import path from 'path'; -import { copyBaseTemplateFiles } from './copy-base-template-files'; import { createEnvFile } from './create-env-file'; import { processReadme } from './process-readme'; import { updatePackageJson } from './update-package-json'; @@ -40,7 +39,7 @@ export async function generateProject( try { // Copy base template files - await copyBaseTemplateFiles(baseTemplateDir, targetDir); + await fs.copy(baseTemplateDir, targetDir); // Apply component library specific modifications await applyComponentLibrary(targetDir, componentLibrary); From a595bd6b5dcdd3c06cecf4f0319f6bbdc507f47e Mon Sep 17 00:00:00 2001 From: Vitor George Date: Wed, 30 Jul 2025 11:50:06 +0100 Subject: [PATCH 17/26] refactor: remove unnecessary helper function file --- cli/src/generator/index.ts | 13 +++++++++++-- cli/src/generator/update-package-json.ts | 23 ----------------------- 2 files changed, 11 insertions(+), 25 deletions(-) delete mode 100644 cli/src/generator/update-package-json.ts diff --git a/cli/src/generator/index.ts b/cli/src/generator/index.ts index f7fc7cb..2e25e55 100644 --- a/cli/src/generator/index.ts +++ b/cli/src/generator/index.ts @@ -2,7 +2,6 @@ import fs from 'fs-extra'; import path from 'path'; import { createEnvFile } from './create-env-file'; import { processReadme } from './process-readme'; -import { updatePackageJson } from './update-package-json'; import { applyComponentLibrary } from './apply-component-library'; import { applyMapLibrary } from './apply-map-library'; @@ -47,7 +46,17 @@ export async function generateProject( // Apply map library specific modifications await applyMapLibrary(targetDir, mapLibrary); - await updatePackageJson(targetDir, projectName); + // Update package.json with project name + const pkgPath = path.join(targetDir, 'package.json'); + if (await fs.pathExists(pkgPath)) { + const pkg = await fs.readJson(pkgPath); + await fs.writeJson(pkgPath, { ...pkg, name: projectName }, { spaces: 2 }); + } else { + throw new Error( + 'Template package.json not found. Please check the template directory.' + ); + } + await processReadme(targetDir, projectName); await createEnvFile(targetDir, projectName, mapLibrary); diff --git a/cli/src/generator/update-package-json.ts b/cli/src/generator/update-package-json.ts deleted file mode 100644 index 35998dd..0000000 --- a/cli/src/generator/update-package-json.ts +++ /dev/null @@ -1,23 +0,0 @@ -import fs from 'fs-extra'; -import path from 'path'; -import { replaceInFile } from './replace-in-file'; - -/** - * Updates the package.json file in the target directory to set the project name. - * Uses regex replacement to update the "name" field while preserving the JSON structure. - * Only processes the file if it exists in the target directory. - * - * @param targetDir - Directory containing the package.json file to update - * @param projectName - New project name to set in the package.json - */ -export async function updatePackageJson( - targetDir: string, - projectName: string -): Promise { - const pkgPath = path.join(targetDir, 'package.json'); - if (await fs.pathExists(pkgPath)) { - await replaceInFile(pkgPath, { - '"name": *"[^"]+"': `"name": "${projectName}"` - }); - } -} From d276e0dd7fc3af7573e055ef95cf1f440ed7a11a Mon Sep 17 00:00:00 2001 From: Vitor George Date: Wed, 30 Jul 2025 11:51:39 +0100 Subject: [PATCH 18/26] refactor: clear duplicated code --- cli/src/generator/apply-component-library.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/cli/src/generator/apply-component-library.ts b/cli/src/generator/apply-component-library.ts index 694ee94..ef8b10c 100644 --- a/cli/src/generator/apply-component-library.ts +++ b/cli/src/generator/apply-component-library.ts @@ -30,12 +30,7 @@ export async function applyComponentLibrary( if (item === 'package.json') continue; const srcPath = path.join(componentLibDir, item); const destPath = path.join(targetDir, 'app', item); - const stat = await fs.stat(srcPath); - if (stat.isDirectory()) { - await fs.copy(srcPath, destPath); - } else { - await fs.copy(srcPath, destPath); - } + await fs.copy(srcPath, destPath); } const packageJsonPath = path.join(targetDir, 'package.json'); const variantPackagePath = path.join(componentLibDir, 'package.json'); From 037882947e695fd78ddb4e06501ab2c82b0d2428 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Wed, 30 Jul 2025 11:57:45 +0100 Subject: [PATCH 19/26] fix: remove wrong dependencies from chakra template --- cli/templates/component-library/chakra/package.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cli/templates/component-library/chakra/package.json b/cli/templates/component-library/chakra/package.json index 8e5162c..58d0d8f 100644 --- a/cli/templates/component-library/chakra/package.json +++ b/cli/templates/component-library/chakra/package.json @@ -1,8 +1,6 @@ { "dependencies": { - "@chakra-ui/react": "^3.8.1", - "@emotion/react": "^11.14.0", - "next-themes": "^0.4.4", - "polished": "^4.3.1" + "@chakra-ui/react": "^3.23.0", + "@emotion/react": "^11.14.0" } } From 2246abbdda9c0e13ab7a549bd451384b6d520540 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Wed, 30 Jul 2025 12:01:19 +0100 Subject: [PATCH 20/26] fix: remove duplicated code --- cli/src/generator/apply-component-library.ts | 1 - cli/src/generator/apply-map-library.ts | 23 ++++++++++---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/cli/src/generator/apply-component-library.ts b/cli/src/generator/apply-component-library.ts index ef8b10c..c4bf927 100644 --- a/cli/src/generator/apply-component-library.ts +++ b/cli/src/generator/apply-component-library.ts @@ -5,7 +5,6 @@ import path from 'path'; * Applies the selected component library template to the generated project. * Copies files from the component library template directory and merges dependencies * from the template's package.json into the main project's package.json. - * Skips copying the template's package.json file to avoid conflicts. * * @param targetDir - Target directory where the project is being generated * @param componentLibrary - Name of the component library template to apply diff --git a/cli/src/generator/apply-map-library.ts b/cli/src/generator/apply-map-library.ts index a18a5c8..fd45129 100644 --- a/cli/src/generator/apply-map-library.ts +++ b/cli/src/generator/apply-map-library.ts @@ -1,11 +1,19 @@ import fs from 'fs-extra'; import path from 'path'; +/** + * Applies the selected map library template to the generated project. + * Copies files from the map library template directory and merges dependencies + * from the template's package.json into the main project's package.json. + * + * @param targetDir - Target directory where the project is being generated + * @param mapLibrary - Name of the map library template to apply + * @throws {Error} When the map library template directory is not found + */ export async function applyMapLibrary( targetDir: string, mapLibrary: string ): Promise { - // If no map library is selected, skip map library application if (mapLibrary === 'none') { return; } @@ -16,24 +24,16 @@ export async function applyMapLibrary( throw new Error(`Map library template not found: ${mapLibrary}`); } - // Copy map components and other files (except main.tsx and package.json) const items = await fs.readdir(mapLibDir); for (const item of items) { - if (item === 'package.json' || item === 'main.tsx') continue; // Handle these separately + if (item === 'package.json' || item === 'main.tsx') continue; const srcPath = path.join(mapLibDir, item); const destPath = path.join(targetDir, 'app', item); - const stat = await fs.stat(srcPath); - - if (stat.isDirectory()) { - await fs.copy(srcPath, destPath); - } else { - await fs.copy(srcPath, destPath); - } + await fs.copy(srcPath, destPath); } - // Merge package.json dependencies const packageJsonPath = path.join(targetDir, 'package.json'); const variantPackagePath = path.join(mapLibDir, 'package.json'); @@ -41,7 +41,6 @@ export async function applyMapLibrary( const basePackage = await fs.readJson(packageJsonPath); const variantPackage = await fs.readJson(variantPackagePath); - // Merge dependencies basePackage.dependencies = { ...basePackage.dependencies, ...variantPackage.dependencies From f562c23ff80edb6aabc087b6f22948a11934400e Mon Sep 17 00:00:00 2001 From: Vitor George Date: Wed, 30 Jul 2025 12:04:55 +0100 Subject: [PATCH 21/26] refactor: move logic to helper function --- cli/src/generator/apply-component-library.ts | 12 ++------ cli/src/generator/apply-map-library.ts | 15 ++-------- .../generator/merge-package-dependencies.ts | 28 +++++++++++++++++++ 3 files changed, 32 insertions(+), 23 deletions(-) create mode 100644 cli/src/generator/merge-package-dependencies.ts diff --git a/cli/src/generator/apply-component-library.ts b/cli/src/generator/apply-component-library.ts index c4bf927..bc6a894 100644 --- a/cli/src/generator/apply-component-library.ts +++ b/cli/src/generator/apply-component-library.ts @@ -1,5 +1,6 @@ import fs from 'fs-extra'; import path from 'path'; +import { mergePackageDependencies } from './merge-package-dependencies'; /** * Applies the selected component library template to the generated project. @@ -31,15 +32,6 @@ export async function applyComponentLibrary( const destPath = path.join(targetDir, 'app', item); await fs.copy(srcPath, destPath); } - const packageJsonPath = path.join(targetDir, 'package.json'); const variantPackagePath = path.join(componentLibDir, 'package.json'); - if (await fs.pathExists(variantPackagePath)) { - const basePackage = await fs.readJson(packageJsonPath); - const variantPackage = await fs.readJson(variantPackagePath); - basePackage.dependencies = { - ...basePackage.dependencies, - ...variantPackage.dependencies - }; - await fs.writeJson(packageJsonPath, basePackage, { spaces: 2 }); - } + await mergePackageDependencies(targetDir, variantPackagePath); } diff --git a/cli/src/generator/apply-map-library.ts b/cli/src/generator/apply-map-library.ts index fd45129..e67fbc8 100644 --- a/cli/src/generator/apply-map-library.ts +++ b/cli/src/generator/apply-map-library.ts @@ -1,5 +1,6 @@ import fs from 'fs-extra'; import path from 'path'; +import { mergePackageDependencies } from './merge-package-dependencies'; /** * Applies the selected map library template to the generated project. @@ -34,18 +35,6 @@ export async function applyMapLibrary( await fs.copy(srcPath, destPath); } - const packageJsonPath = path.join(targetDir, 'package.json'); const variantPackagePath = path.join(mapLibDir, 'package.json'); - - if (await fs.pathExists(variantPackagePath)) { - const basePackage = await fs.readJson(packageJsonPath); - const variantPackage = await fs.readJson(variantPackagePath); - - basePackage.dependencies = { - ...basePackage.dependencies, - ...variantPackage.dependencies - }; - - await fs.writeJson(packageJsonPath, basePackage, { spaces: 2 }); - } + await mergePackageDependencies(targetDir, variantPackagePath); } diff --git a/cli/src/generator/merge-package-dependencies.ts b/cli/src/generator/merge-package-dependencies.ts new file mode 100644 index 0000000..c167f2b --- /dev/null +++ b/cli/src/generator/merge-package-dependencies.ts @@ -0,0 +1,28 @@ +import fs from 'fs-extra'; +import path from 'path'; + +/** + * Merges dependencies from a variant package.json into the main project's package.json. + * This function reads the variant package.json file and merges its dependencies + * into the target project's package.json file. + * + * @param targetDir - Target directory where the project is being generated + * @param variantPackagePath - Path to the variant package.json file to merge + */ +export async function mergePackageDependencies( + targetDir: string, + variantPackagePath: string +): Promise { + if (await fs.pathExists(variantPackagePath)) { + const packageJsonPath = path.join(targetDir, 'package.json'); + const basePackage = await fs.readJson(packageJsonPath); + const variantPackage = await fs.readJson(variantPackagePath); + + basePackage.dependencies = { + ...basePackage.dependencies, + ...variantPackage.dependencies + }; + + await fs.writeJson(packageJsonPath, basePackage, { spaces: 2 }); + } +} From 0cf96164a77eaa2b4cd6edd272cbbf50167f6ec1 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Thu, 31 Jul 2025 09:48:49 +0100 Subject: [PATCH 22/26] fix: clear root folder contents, keep a few files --- .babelrc | 9 - .github/PULL_REQUEST_TEMPLATE.md | 6 - .github/PULL_REQUEST_TEMPLATE/default.md | 6 - .../PULL_REQUEST_TEMPLATE/version_release.md | 16 - .github/_workflow-samples/README.md | 35 - .github/_workflow-samples/deploy-gh.yml | 76 - .github/_workflow-samples/deploy-s3.yml | 82 - .github/workflows/checks.yml | 110 - .stylelintrc.json | 19 - LICENSE | 2 +- README.md | 93 - _README.md | 63 - app/main.tsx | 34 - app/media/layout/ds-logo-pos.svg | 1 - app/styles/color-palette.ts | 110 - app/styles/theme.ts | 21 - app/vite-env.d.ts | 1 - eslint.config.mjs | 60 - index.html | 96 - jest.config.js | 211 - jest.setup.ts | 28 - package.json | 81 - pnpm-lock.yaml | 6945 ----------------- public/meta/android-chrome.png | Bin 2081 -> 0 bytes public/meta/apple-touch-icon.png | Bin 1980 -> 0 bytes public/meta/favicon.png | Bin 1500 -> 0 bytes public/meta/meta-image.png | Bin 8517 -> 0 bytes test/example.test.ts | 5 - tsconfig.app.json | 34 - tsconfig.json | 7 - tsconfig.node.json | 24 - vite-plugin-port-scanner.ts | 28 - vite.config.mts | 25 - 33 files changed, 1 insertion(+), 8227 deletions(-) delete mode 100644 .babelrc delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/PULL_REQUEST_TEMPLATE/default.md delete mode 100644 .github/PULL_REQUEST_TEMPLATE/version_release.md delete mode 100644 .github/_workflow-samples/README.md delete mode 100644 .github/_workflow-samples/deploy-gh.yml delete mode 100644 .github/_workflow-samples/deploy-s3.yml delete mode 100644 .github/workflows/checks.yml delete mode 100644 .stylelintrc.json delete mode 100644 README.md delete mode 100644 _README.md delete mode 100644 app/main.tsx delete mode 100644 app/media/layout/ds-logo-pos.svg delete mode 100644 app/styles/color-palette.ts delete mode 100644 app/styles/theme.ts delete mode 100644 app/vite-env.d.ts delete mode 100644 eslint.config.mjs delete mode 100644 index.html delete mode 100644 jest.config.js delete mode 100644 jest.setup.ts delete mode 100644 package.json delete mode 100644 pnpm-lock.yaml delete mode 100755 public/meta/android-chrome.png delete mode 100755 public/meta/apple-touch-icon.png delete mode 100755 public/meta/favicon.png delete mode 100755 public/meta/meta-image.png delete mode 100644 test/example.test.ts delete mode 100644 tsconfig.app.json delete mode 100644 tsconfig.json delete mode 100644 tsconfig.node.json delete mode 100644 vite-plugin-port-scanner.ts delete mode 100644 vite.config.mts diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 8bcf18e..0000000 --- a/.babelrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "env": { - "test": { - "presets": ["@babel/preset-react", "@babel/preset-typescript"], - "plugins": ["@babel/plugin-transform-modules-commonjs"] - } - }, - "plugins": ["babel-plugin-styled-components"] -} diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 10777b8..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,6 +0,0 @@ - - -## Why are you creating this Pull Request? - -- [Version Release](?title=Deploy%20vX.X.X&expand=1&template=version_release.md) -- [Other](?expand=1&template=default.md) \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE/default.md b/.github/PULL_REQUEST_TEMPLATE/default.md deleted file mode 100644 index 01725ca..0000000 --- a/.github/PULL_REQUEST_TEMPLATE/default.md +++ /dev/null @@ -1,6 +0,0 @@ -## What am I changing and why - -_Replace with brief description of the update and why it is needed. Link to relevant issues._ - -## How to test -_Replace with instructions on how this change be tested/verified._ diff --git a/.github/PULL_REQUEST_TEMPLATE/version_release.md b/.github/PULL_REQUEST_TEMPLATE/version_release.md deleted file mode 100644 index 5b26731..0000000 --- a/.github/PULL_REQUEST_TEMPLATE/version_release.md +++ /dev/null @@ -1,16 +0,0 @@ -_The PR name should be the version to be deployed (ex: v1.0.1)_ - -- [ ] Bump the version in the package.json or equivalent. - ---- - -# Changelog vX.X.X - -## 🎉 Features -- - -## 🚀 Improvements -- - -## 🐛 Fixes -- diff --git a/.github/_workflow-samples/README.md b/.github/_workflow-samples/README.md deleted file mode 100644 index bf2d1c1..0000000 --- a/.github/_workflow-samples/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# `deploy-s3-yml` -A workflow that builds the site and deploys it to S3. - -This workflow gets triggered with every push to the main branch, and doesn't verify if the checks were successful. It relies on branch protection to do so. - -## First-time setup -- create a bucket on S3 and enable 'Static website hosting' with both the Index and Error document set to `index.html`. To do this programmatically: - ``` - aws s3 mb [BUCKET NAME] - aws s3 website [BUCKET NAME] --index-document index.html --error-document index.html - aws s3api put-bucket-tagging --bucket [BUCKET NAME] --tagging 'TagSet=[{Key=Project,Value=[PROJECT TAG]}]' - ``` -- create an IAM with a policy that provides it with programmatic access to the bucket -- add the AWS Access Key and Secret from the IAM [as encrypted secrets to the project repository](https://docs.github.com/en/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository). Use `AWS_ACCESS_KEY_ID` & `AWS_SECRET_ACCESS_KEY` -- add the bucket name as an environment variable (`DEPLOY_BUCKET`) to the deploy workflow. Omit `s3://` from the bucket name. - -## Serving site from sub-path -This workflow assumes that the site is served from the root of the URL (eg. devseed.com). To support a URL served from a sub-path (eg. devseed.com/explorer), add the following step: - -``` - - name: Serve site from subpath - run: | - cd dist - mkdir - mv assets /assets - cp index.html -``` - -# `deploy-gh-yml` -A workflow that builds the site and deploys it to Github pages. - -This workflow gets triggered with every push to the main branch, and doesn't verify if the checks were successful. It relies on branch protection to do so. - -# S3 previews -Check the [Implementing S3 deploy previews](https://github.com/developmentseed/how/issues/423) guide to set up S3 previews for feature branches. diff --git a/.github/_workflow-samples/deploy-gh.yml b/.github/_workflow-samples/deploy-gh.yml deleted file mode 100644 index b02d77e..0000000 --- a/.github/_workflow-samples/deploy-gh.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Deploy Github Pages - -on: - push: - branches: - - 'main' - -env: - VITE_BASE_URL: ${{ vars.VITE_BASE_URL }} - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: write - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install pnpm - uses: pnpm/action-setup@v4 - - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: 'pnpm' - - - name: Cache node_modules - uses: actions/cache@v4 - id: cache-node-modules - with: - path: node_modules - key: ${{ runner.os }}-build-${{ hashFiles('**/package.json') }} - - - name: Cache dist - uses: actions/cache@v4 - id: cache-dist - with: - path: dist - key: ${{ runner.os }}-build-${{ github.sha }} - - - name: Install - run: pnpm install - - - name: Build - run: pnpm build - - deploy: - runs-on: ubuntu-latest - needs: build - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Restore dist cache - uses: actions/cache@v4 - id: cache-dist - with: - path: dist - key: ${{ runner.os }}-build-${{ github.sha }} - - - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4 - with: - branch: gh-pages - clean: true - single-commit: true - folder: dist \ No newline at end of file diff --git a/.github/_workflow-samples/deploy-s3.yml b/.github/_workflow-samples/deploy-s3.yml deleted file mode 100644 index 7f8164e..0000000 --- a/.github/_workflow-samples/deploy-s3.yml +++ /dev/null @@ -1,82 +0,0 @@ - -# Deploy the site to AWS S3 on a push to the 'main' branch - -name: Deploy S3 - -on: - push: - branches: - - 'main' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - runs-on: ubuntu-latest - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install pnpm - uses: pnpm/action-setup@v4 - - - name: Use Node.js ${{ env.NODE }} - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: 'pnpm' - - - name: Cache node_modules - uses: actions/cache@v4 - id: cache-node-modules - with: - path: node_modules - key: ${{ runner.os }}-build-${{ hashFiles('**/package.json') }} - - - name: Cache dist - uses: actions/cache@v4 - id: cache-dist - with: - path: dist - key: ${{ runner.os }}-build-${{ github.sha }} - - - name: Install - run: pnpm install - - - name: Build - run: pnpm build - - deploy: - runs-on: ubuntu-latest - needs: build - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Restore dist cache - uses: actions/cache@v4 - id: cache-dist - with: - path: dist - key: ${{ runner.os }}-build-${{ github.sha }} - - # Action: https://github.com/marketplace/actions/s3-deploy - - name: Deploy to S3 - uses: reggionick/s3-deploy@v4 - with: - folder: dist - bucket: ${{ secrets.S3_BUCKET }} - bucket-region: ${{ secrets.S3_BUCKET_REGION }} - dist-id: ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} - invalidation: / - delete-removed: true - no-cache: true - private: true - files-to-include: '{.*/**,**}' diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml deleted file mode 100644 index 4252779..0000000 --- a/.github/workflows/checks.yml +++ /dev/null @@ -1,110 +0,0 @@ -# This workflow performs basic checks: -# -# 1. run a preparation step to install and cache node modules -# 2. once prep succeeds, lint and test run in parallel -# -# The checks only run on non-draft Pull Requests. They don't run on the main -# branch prior to deploy. It's recommended to use branch protection to avoid -# pushes straight to 'main'. - -name: Checks - -on: - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - prep: - if: github.event.pull_request.draft == false - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install pnpm - uses: pnpm/action-setup@v4 - - - name: Use Node.js ${{ env.NODE }} - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: 'pnpm' - - - name: Cache node_modules - uses: actions/cache@v4 - id: cache-node-modules - with: - path: node_modules - key: ${{ runner.os }}-build-${{ hashFiles('**/package.json') }} - - - name: Install - run: pnpm install - - lint: - needs: prep - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install pnpm - uses: pnpm/action-setup@v4 - - - name: Use Node.js ${{ env.NODE }} - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: 'pnpm' - - - name: Cache node_modules - uses: actions/cache@v4 - id: cache-node-modules - with: - path: node_modules - key: ${{ runner.os }}-build-${{ hashFiles('**/package.json') }} - - - name: Install - run: pnpm install - - - name: Lint - run: pnpm lint - - test: - needs: prep - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install pnpm - uses: pnpm/action-setup@v4 - - - name: Use Node.js ${{ env.NODE }} - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: 'pnpm' - - - name: Cache node_modules - uses: actions/cache@v4 - id: cache-node-modules - with: - path: node_modules - key: ${{ runner.os }}-build-${{ hashFiles('**/package.json') }} - - - name: Install - run: pnpm install - - - name: Test - run: pnpm test \ No newline at end of file diff --git a/.stylelintrc.json b/.stylelintrc.json deleted file mode 100644 index aba928a..0000000 --- a/.stylelintrc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": [ - "stylelint-config-standard", - "stylelint-config-styled-components" - ], - "customSyntax": "postcss-styled-syntax", - "rules": { - "font-family-no-missing-generic-family-keyword": null, - "no-descending-specificity": [ - true, - { - "severity": "warning" - } - ] - }, - "ignoreFiles": [ - "**/*.d.ts" - ] -} \ No newline at end of file diff --git a/LICENSE b/LICENSE index 46fe441..1ed54bb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Development Seed +Copyright (c) 2025 Development Seed Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md deleted file mode 100644 index 4c940fb..0000000 --- a/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# project-seed v8 - -A basic starting point for web projects that uses vite as a Build System. - -Uses typescript and jest for testing - -## Overview - -Steps to follow as soon as you download this structure to start a project: -- [ ] Update `package.js` with data about the project (name, repo, license...) -- [ ] If the license is known update `LICENSE` -- [ ] Check `index.html` for bootstrap information that can be changed or removed. -- [ ] Update the application title and description in `.env` -- [ ] Remove unneeded images from the `static/meta` folder and replace the favicon with a project related one. -- [ ] Update the modules to the most recent version. -- [ ] **Delete this `README.md` and rename `_README.md`. Fill in the needed data. This is the most important task.** Others need to be able to know what the project is about and how to work with it. This can't be stressed enough. - -It's better to do this straight away so no traces of project-seed are ever pushed to github and just looks more professional. -The values that are not immediately know should be left blank and filled ASAP. - -## Vite for building - -[Vite](https://vite.dev/) is used to bundle all the needed assets for the application. -There are two commands, both run via `pnpm` - -- `pnpm build` - clean & build everything and put it into dist folder -- `pnpm serve` - serve the pages and utilize live reload on changes to fonts, images, scripts and HTML. - -## Chakra UI for styling - -Project Seed uses [Chakra UI](https://chakra-ui.com/) for styling as a UI framework. It is a component library that provides a set of accessible and reusable components facilitating the development of web applications. - -If you don't want it, you just need to remove the `@chakra-ui/react` dependency from the `package.json` and remove the import from the `main.tsx` file. - -### Configurations and environment variables - -At times, it may be necessary to include options/variables specific to `production`, `staging` or `local` in the code. To handle this, there you can use `.env` files. -See Vite's documentation on [env variables](https://vite.dev/guide/env-and-mode.html#env-variables-and-modes). - -## Github Actions for CI -Testing and deployment is taken care of by Github Actions. It is set up to: - -1. run checks (test & lint) on every non-draft Pull Request -2. build and deploy the application on pushes to the `main` branch - -To make sure that the site deploys with passing checks, branch protection should be set up for the `main` branch (`Require status checks to pass before merging`). - -Deploy is not set up by default, but the project contains [sample workflows](.github/_workflow-samples/README.md) that can be used to set it up. - -## Linting - -Our [ESLint rules](.eslintrc) are based on `eslint:recommended` rules, with some custom options. To check linting errors run: - - npm run lint - -## Tests - -Tests are setup using [Jest](https://jestjs.io/), and can be run with - -``` -npm run test -``` - -## Coding style - -File [.editorconfig](.editorconfig) defines basic code styling rules, like indent sizes. - -[Prettier](https://prettier.io) is the recommended code formatter. Atom and VSCode have extensions supporting Prettier-ESLint integration, which will help maintain style consistency while following linting rules. - -## Path alias - -Path alias allow you to define aliases for commonly used folders and avoid having very long file paths like `../../../component`. This also allows you to more easily move files around without worrying the imports will break. - -Paths are defined in the [package.json](./package.json) under `alias`. They start with a `$` and point to a folder. - -The following paths are predefined, but feel free to change them to whatever is convenient to your project needs. - -```json -"alias": { - "$components": "~/app/scripts/components", - "$styles": "~/app/scripts/styles", - "$utils": "~/app/scripts/utils", - "$test": "~/test" - } -``` - -For example, to import a component from a file called `page-header` in the `"~/app/scripts/components"` folder, you'd just need to do `import Component from '$components/page-header'`. - -## Pull Request templates - -Project seed comes with pull request templates to simplify and standardize the pull requests in the project. This [issue on the how repo](https://github.com/developmentseed/how/issues/360#issuecomment-1041292591) provides some context to how this works. - -To add more templates create them in the `.github/PULL_REQUEST_TEMPLATE` folder and link them in the [PULL_REQUEST_TEMPLATE.md](./.github/PULL_REQUEST_TEMPLATE.md) file. diff --git a/_README.md b/_README.md deleted file mode 100644 index f1404ea..0000000 --- a/_README.md +++ /dev/null @@ -1,63 +0,0 @@ -# {{Project name}} - -{{Description}} - -## Installation and Usage -The steps below will walk you through setting up your own instance of the project. - -### Install Project Dependencies -To set up the development environment for this website, you'll need to install the following on your system: - -- [Node](http://nodejs.org/) v22 (To manage multiple node versions we recommend [nvm](https://github.com/creationix/nvm)) -- [pnpm](https://pnpm.io/) Install using corepack (`corepack enable pnpm`) - -### Install Application Dependencies - -If you use [`nvm`](https://github.com/creationix/nvm), activate the desired Node version: - -``` -nvm install -``` - -Install Node modules: - -``` -pnpm install -``` - -## Usage - -### Config files -Configuration is done using [dot.env](https://vite.dev/guide/env-and-mode#env-files) files. - -These files are used to simplify the configuration of the app and should not contain sensitive information. - -Run the project locally by copying the `.env` to `.env.local` and setting the following environment variables: - - -| --- | --- | -| `{{VARIABLE}}` | {{description}} | - -### Starting the app - -``` -pnpm serve -``` -Compiles the sass files, javascript, and launches the server making the site available at `http://localhost:9000/` -The system will watch files and execute tasks whenever one of them changes. -The site will automatically refresh since it is bundled with livereload. - -# Deployment -To prepare the app for deployment run: - -``` -pnpm build -``` -or -``` -pnpm stage -``` -This will package the app and place all the contents in the `dist` directory. -The app can then be run by any web server. - -**When building the site for deployment provide the base url trough the `VITE_BASE_URL` environment variable. Omit the leading slash. (E.g. https://example.com)** diff --git a/app/main.tsx b/app/main.tsx deleted file mode 100644 index 0299816..0000000 --- a/app/main.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { ChakraProvider } from '@chakra-ui/react'; -import React, { useEffect } from 'react'; -import { createRoot } from 'react-dom/client'; - -import system from './styles/theme'; - -// If using a router add the public url to the base path. -const publicUrl = import.meta.env.VITE_BASE_URL || ''; -// The ds.io prefix is used just to get the base path when no public url is set. -const baseName = new URL( - publicUrl.startsWith('http') - ? publicUrl - : `https://ds.io/${publicUrl.replace(/^\//, '')}` - ).pathname; - -// Root component. -function Root() { - useEffect(() => { - // Hide the welcome banner. - const banner = document.querySelector('#welcome-banner')!; - banner.classList.add('dismissed'); - setTimeout(() => banner.remove(), 500); - }, []); - - return ( - -

Hello World

-
- ); -} - -const rootNode = document.querySelector('#app-container')!; -const root = createRoot(rootNode); -root.render(); diff --git a/app/media/layout/ds-logo-pos.svg b/app/media/layout/ds-logo-pos.svg deleted file mode 100644 index f3c056b..0000000 --- a/app/media/layout/ds-logo-pos.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/styles/color-palette.ts b/app/styles/color-palette.ts deleted file mode 100644 index 5b9a91d..0000000 --- a/app/styles/color-palette.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { rgba, tint, shade } from 'polished'; - -/** - * Curry the polished rgba function to allow switching the parameters. - */ -const _rgba = (alpha: number) => (color: string) => rgba(color, alpha); - -const colorPaletteSettings = [ - { - code: '50', - colorFn: tint(0.96) - }, - { - code: '50a', - colorFn: _rgba(0.04) - }, - { - code: '100', - colorFn: tint(0.92) - }, - { - code: '100a', - colorFn: _rgba(0.08) - }, - { - code: '200', - colorFn: tint(0.84) - }, - { - code: '200a', - colorFn: _rgba(0.16) - }, - { - code: '300', - colorFn: tint(0.68) - }, - { - code: '300a', - colorFn: _rgba(0.32) - }, - { - code: '400', - colorFn: tint(0.36) - }, - { - code: '400a', - colorFn: _rgba(0.64) - }, - { - code: '500', - colorFn: (v: string) => v - }, - { - code: '600', - colorFn: shade(0.16) - }, - { - code: '700', - colorFn: shade(0.32) - }, - { - code: '800', - colorFn: shade(0.48) - }, - { - code: '900', - colorFn: shade(0.64) - } -]; - -/** - * Creates a color palette base off of the provided base color including - * lightened/darkened/transparent versions of that color. - * - * Uses a scale from 50 - 900 to indicate the color value. Values lower than 500 - * are lightened, above 500 are darkened and values ending with `a` have a alpha - * channel. - * - * List of returned colors: - * name.50 Lightened 96% - * name.50a Opacity 4% - * name.100 Lightened 92% - * name.100a Opacity 8% - * name.200 Lightened 84% - * name.200a Opacity 16% - * name.300 Lightened 68% - * name.300a Opacity 32% - * name.400 Lightened 36% - * name.400a Opacity 64% - * name.500 Same as base color - * name.600 Darkened 16% - * name.700 Darkened 32% - * name.800 Darkened 48% - * name.900 Darkened 64% - * - * @param {string} name Name of the color variable - * @param {string} baseColor Base color for the palette. Used as middle color - * with value 500. - * - * @returns object - */ -export function createColorPalette(baseColor: string) { - return colorPaletteSettings.reduce( - (acc, c) => ({ - ...acc, - [c.code]: { value: c.colorFn(baseColor) } - }), - {} - ); -} diff --git a/app/styles/theme.ts b/app/styles/theme.ts deleted file mode 100644 index 6512bfe..0000000 --- a/app/styles/theme.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { createSystem, defaultConfig, defineConfig } from '@chakra-ui/react'; -import { createColorPalette } from './color-palette'; - -const config = defineConfig({ - theme: { - tokens: { - colors: { - primary: createColorPalette('#1E7BC6'), - secondary: createColorPalette('#5FAD56'), - base: createColorPalette('#2B2D42'), - danger: createColorPalette('#D65108'), - warning: createColorPalette('#EFA00B'), - success: createColorPalette('#5FAD56'), - info: createColorPalette('#1E7BC6'), - surface: createColorPalette('#FFF') - } - } - } -}); - -export default createSystem(defaultConfig, config); diff --git a/app/vite-env.d.ts b/app/vite-env.d.ts deleted file mode 100644 index 11f02fe..0000000 --- a/app/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index e60f045..0000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,60 +0,0 @@ -import globals from 'globals'; -import pluginJs from '@eslint/js'; -import tseslint from 'typescript-eslint'; -import pluginReact from 'eslint-plugin-react'; -import reactHooks from 'eslint-plugin-react-hooks'; -import reactRefresh from 'eslint-plugin-react-refresh'; -import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; - -/** @type {import('eslint').Linter.Config[]} */ -export default [ - { - files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'], - settings: { react: { version: 'detect' } }, - languageOptions: { ecmaVersion: 2020, globals: globals.browser }, - plugins: { 'react-hooks': reactHooks, 'react-refresh': reactRefresh } - }, - pluginJs.configs.recommended, - ...tseslint.configs.recommended, - pluginReact.configs.flat.recommended, - eslintPluginPrettierRecommended, - { - name: 'Custom Rules ', - rules: { - 'no-console': 2, - 'prefer-promise-reject-errors': 0, - // 'import/order': 2, - 'react/button-has-type': 2, - 'react/jsx-closing-bracket-location': 2, - 'react/jsx-closing-tag-location': 2, - 'react/jsx-curly-spacing': 2, - 'react/jsx-curly-newline': 2, - 'react/jsx-equals-spacing': 2, - 'react/jsx-max-props-per-line': [2, { maximum: 1, when: 'multiline' }], - 'react/jsx-first-prop-new-line': 2, - 'react/jsx-curly-brace-presence': [ - 2, - { props: 'never', children: 'never' } - ], - 'react/jsx-pascal-case': 2, - 'react/jsx-props-no-multi-spaces': 2, - 'react/jsx-tag-spacing': [2, { beforeClosing: 'never' }], - 'react/jsx-wrap-multilines': 2, - 'react/no-array-index-key': 2, - 'react/no-typos': 2, - 'react/no-unused-prop-types': 2, - 'react/no-unused-state': 2, - 'react/self-closing-comp': 2, - 'react/style-prop-object': 2, - 'react/void-dom-elements-no-children': 2, - 'react/function-component-definition': [ - 2, - { namedComponents: ['function-declaration', 'arrow-function'] } - ], - 'react-hooks/rules-of-hooks': 2, // Checks rules of Hooks - // 'react-hooks/exhaustive-deps': 1, // Checks effect dependencies - // 'fp/no-mutating-methods': 1, - '@typescript-eslint/no-explicit-any': 'warn' - } - } -]; diff --git a/index.html b/index.html deleted file mode 100644 index 86d7f50..0000000 --- a/index.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - %VITE_APP_TITLE% - - - - - - - - -
-
- -

Development Seed logotype

-

In the beginning the Universe was created. -

-

This has made a lot of people very angry and been widely regarded as a bad move.

-
-
-
- -
- -
- - - - - - - \ No newline at end of file diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index c19647d..0000000 --- a/jest.config.js +++ /dev/null @@ -1,211 +0,0 @@ -const pkg = require('./package.json'); - -/* - * For a detailed explanation regarding each configuration property, visit: - * https://jestjs.io/docs/configuration - */ - -module.exports = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/private/var/folders/bz/vry80ww15sg533jytwfj7fdc0000gn/T/jest_dx", - - // Automatically clear mock calls, instances and results before every test - // clearMocks: false, - - // Indicates whether the coverage information should be collected while executing the test - // collectCoverage: false, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: undefined, - - // The directory where Jest should output its coverage files - // coverageDirectory: undefined, - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "/node_modules/" - // ], - - // Indicates which provider should be used to instrument code for coverage - // coverageProvider: "babel", - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: undefined, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // A set of global variables that need to be available in all test environments - globals: { - NODE_ENV: 'test' - }, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - moduleDirectories: ['node_modules'], - - // An array of file extensions your modules use - moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json', 'node', 'css'], - - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // This has to be kept in sync with the alias field of package.json - moduleNameMapper: { - // To simplify keeping the alias in sync the code below converts the aliases - // defined in the package.json to module mappings: - // From: - // "$styles": "~/app/scripts/styles" - // To: - // '^\\$styles(.*)$': '/app/scripts/styles$1' - ...Object.entries(pkg.alias ?? {}).reduce((acc, [key, value]) => { - return value.startsWith('~/') - ? { - ...acc, - [`^\\${key}(.*)$`]: `${value.substring(1)}$1` - } - : acc; - }, {}), - '.+\\.(css|styl|less|sass|scss)$': - '/node_modules/jest-css-modules-transform' - }, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - preset: 'ts-jest', - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state before every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: undefined, - - // Automatically restore mock state and implementation before every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: undefined, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: 'jsdom', - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jest-circus/runner", - - // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href - // testURL: "http://localhost", - - // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" - // timers: "real", - - // A map from regular expressions to paths to transformers - transform: { - '^.+\\.(js|jsx)$': 'babel-jest', - '^.+\\.(ts|tsx)?$': ['ts-jest', { tsconfig: 'tsconfig.app.json' }] - }, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "/node_modules/", - // "\\.pnp\\.[^\\/]+$" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - verbose: true, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, - setupFilesAfterEnv: ['/jest.setup.ts'] -}; diff --git a/jest.setup.ts b/jest.setup.ts deleted file mode 100644 index 82bd177..0000000 --- a/jest.setup.ts +++ /dev/null @@ -1,28 +0,0 @@ -// jest.setup.ts -import '@testing-library/jest-dom'; - -// implementation of structuredClone polyfill - -if (typeof global.structuredClone !== 'function') { - global.structuredClone = function structuredClone(value) { - if (value === null || value === undefined) { - return value; - } - - try { - // For objects and arrays, use JSON methods - if (typeof value === 'object') { - return JSON.parse(JSON.stringify(value)); - } - - // For primitive values, return directly - return value; - } catch (error) { - // eslint-disable-next-line no-console - console.warn('structuredClone polyfill failed:', error); - - // Returns a shallow copy as fallback - return Array.isArray(value) ? [...value] : { ...value }; - } - }; -} diff --git a/package.json b/package.json deleted file mode 100644 index 6fefba8..0000000 --- a/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "project-seed", - "description": "Starter application by Development Seed", - "version": "8.0.1", - "repository": { - "type": "git", - "url": "https://github.com/developmentseed/project-seed.git" - }, - "author": { - "name": "Development Seed", - "url": "https://developmentseed.org" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/developmentseed/project-seed/issues" - }, - "homepage": "https://github.com/developmentseed/project-seed", - "scripts": { - "serve": "pnpm clean && NODE_ENV=development vite", - "build": "pnpm clean && NODE_ENV=production tsc -b && vite build", - "stage": "pnpm clean && NODE_ENV=staging tsc -b && vite build", - "clean": "rm -rf dist node_modules/.vite", - "lint": "pnpm lint:scripts", - "lint:scripts": "eslint app/", - "ts-check": "npx tsc --noEmit --skipLibCheck", - "test": "jest" - }, - "engines": { - "node": "22.x" - }, - "browserslist": "> 0.5%, last 2 versions, not dead", - "devDependencies": { - "@eslint/js": "^9.21.0", - "@types/babel__core": "^7", - "@types/jest": "^29.5.14", - "@types/node": "^22.10.7", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", - "@vitejs/plugin-react": "^4.3.4", - "babel-jest": "^29.7.0", - "eslint": "^9.21.0", - "eslint-config-prettier": "^10.0.1", - "eslint-plugin-prettier": "^5.2.2", - "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-hooks": "^5.1.0", - "eslint-plugin-react-refresh": "^0.4.19", - "globals": "^15.15.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "portscanner": "^2.2.0", - "prettier": "^3.4.2", - "ts-jest": "^29.2.5", - "ts-node": "^10.9.2", - "typescript": "~5.7.2", - "typescript-eslint": "^8.24.1", - "vite": "^6.2.0" - }, - "dependencies": { - "@chakra-ui/react": "^3.8.1", - "@emotion/react": "^11.14.0", - "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.2.0", - "@testing-library/user-event": "^14.6.0", - "@types/react": "^19.0.0", - "@types/react-dom": "^19.0.4", - "next-themes": "^0.4.4", - "polished": "^4.3.1", - "react": "^18.0.0", - "react-dom": "^18.0.0", - "react-icons": "^5.5.0" - }, - "alias": { - "$components": "~/app/components", - "$styles": "~/app/styles", - "$utils": "~/app/utils", - "$hooks": "~/app/hooks", - "$pages": "~/app/pages", - "$test": "~/test" - }, - "packageManager": "pnpm@10.6.4+sha512.da3d715bfd22a9a105e6e8088cfc7826699332ded60c423b14ec613a185f1602206702ff0fe4c438cb15c979081ce4cb02568e364b15174503a63c7a8e2a5f6c" -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index f425a11..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,6945 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@chakra-ui/react': - specifier: ^3.8.1 - version: 3.13.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@emotion/react': - specifier: ^11.14.0 - version: 11.14.0(@types/react@19.0.11)(react@18.3.1) - '@testing-library/jest-dom': - specifier: ^6.6.3 - version: 6.6.3 - '@testing-library/react': - specifier: ^16.2.0 - version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.4(@types/react@19.0.11))(@types/react@19.0.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@testing-library/user-event': - specifier: ^14.6.0 - version: 14.6.1(@testing-library/dom@10.4.0) - '@types/react': - specifier: ^19.0.0 - version: 19.0.11 - '@types/react-dom': - specifier: ^19.0.4 - version: 19.0.4(@types/react@19.0.11) - next-themes: - specifier: ^0.4.4 - version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - polished: - specifier: ^4.3.1 - version: 4.3.1 - react: - specifier: ^18.0.0 - version: 18.3.1 - react-dom: - specifier: ^18.0.0 - version: 18.3.1(react@18.3.1) - react-icons: - specifier: ^5.5.0 - version: 5.5.0(react@18.3.1) - devDependencies: - '@eslint/js': - specifier: ^9.21.0 - version: 9.22.0 - '@types/babel__core': - specifier: ^7 - version: 7.20.5 - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^22.10.7 - version: 22.13.10 - '@vitejs/plugin-react': - specifier: ^4.3.4 - version: 4.3.4(vite@6.2.2(@types/node@22.13.10)) - babel-jest: - specifier: ^29.7.0 - version: 29.7.0(@babel/core@7.26.10) - eslint: - specifier: ^9.21.0 - version: 9.22.0 - eslint-config-prettier: - specifier: ^10.0.1 - version: 10.1.1(eslint@9.22.0) - eslint-plugin-prettier: - specifier: ^5.2.2 - version: 5.2.3(eslint-config-prettier@10.1.1(eslint@9.22.0))(eslint@9.22.0)(prettier@3.5.3) - eslint-plugin-react: - specifier: ^7.37.4 - version: 7.37.4(eslint@9.22.0) - eslint-plugin-react-hooks: - specifier: ^5.1.0 - version: 5.2.0(eslint@9.22.0) - eslint-plugin-react-refresh: - specifier: ^0.4.19 - version: 0.4.19(eslint@9.22.0) - globals: - specifier: ^15.15.0 - version: 15.15.0 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) - jest-environment-jsdom: - specifier: ^29.7.0 - version: 29.7.0 - portscanner: - specifier: ^2.2.0 - version: 2.2.0 - prettier: - specifier: ^3.4.2 - version: 3.5.3 - ts-jest: - specifier: ^29.2.5 - version: 29.2.6(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(jest@29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)))(typescript@5.7.3) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@22.13.10)(typescript@5.7.3) - typescript: - specifier: ~5.7.2 - version: 5.7.3 - typescript-eslint: - specifier: ^8.24.1 - version: 8.26.1(eslint@9.22.0)(typescript@5.7.3) - vite: - specifier: ^6.2.0 - version: 6.2.2(@types/node@22.13.10) - -packages: - - '@adobe/css-tools@4.4.2': - resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==} - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@ark-ui/react@4.9.2': - resolution: {integrity: sha512-LJnz8nwXgGRszlkU2AiH3yLsAeXiXeQl4JBjMA7d8klZJBiBUp7URwLhBSWmoAIWRH7bW6fSPjhRAEkJLmD8gA==} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.26.10': - resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.26.10': - resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.26.5': - resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.26.10': - resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.26.10': - resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.26.0': - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.25.9': - resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-self@7.25.9': - resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.25.9': - resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.26.10': - resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.26.9': - resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.26.10': - resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.10': - resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - '@chakra-ui/react@3.13.0': - resolution: {integrity: sha512-HqFXuVhiQCftQT5+/9F6w0aZufHgvaSr7jJoMP+BUxihF6uaSSW2YHy2eKK4a5SWNLMOnZHYQbUUrC3WSGcYxg==} - peerDependencies: - '@emotion/react': '>=11' - react: '>=18' - react-dom: '>=18' - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@emotion/babel-plugin@11.13.5': - resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} - - '@emotion/cache@11.14.0': - resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} - - '@emotion/hash@0.9.2': - resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - - '@emotion/is-prop-valid@1.3.1': - resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} - - '@emotion/memoize@0.9.0': - resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - - '@emotion/react@11.14.0': - resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/serialize@1.3.3': - resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} - - '@emotion/sheet@1.4.0': - resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - - '@emotion/unitless@0.10.0': - resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0': - resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} - peerDependencies: - react: '>=16.8.0' - - '@emotion/utils@1.4.2': - resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - - '@emotion/weak-memoize@0.4.0': - resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - - '@esbuild/aix-ppc64@0.25.1': - resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.1': - resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.1': - resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.1': - resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.1': - resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.1': - resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.1': - resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.1': - resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.1': - resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.1': - resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.1': - resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.1': - resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.1': - resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.1': - resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.1': - resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.1': - resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.1': - resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.1': - resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.1': - resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.1': - resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.1': - resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.25.1': - resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.1': - resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.1': - resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.1': - resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.5.1': - resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.19.2': - resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.1.0': - resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.12.0': - resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.0': - resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.22.0': - resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.2.7': - resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@floating-ui/core@1.6.9': - resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - - '@floating-ui/dom@1.6.13': - resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} - - '@floating-ui/utils@0.2.9': - resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.2': - resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} - engines: {node: '>=18.18'} - - '@internationalized/date@3.7.0': - resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==} - - '@internationalized/number@3.6.0': - resolution: {integrity: sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==} - - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@pandacss/is-valid-prop@0.41.0': - resolution: {integrity: sha512-BE6h6CsJk14ugIRrsazJtN3fcg+KDFRat1Bs93YFKH6jd4DOb1yUyVvC70jKqPVvg70zEcV8acZ7VdcU5TLu+w==} - - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@rollup/rollup-android-arm-eabi@4.36.0': - resolution: {integrity: sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.36.0': - resolution: {integrity: sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.36.0': - resolution: {integrity: sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.36.0': - resolution: {integrity: sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.36.0': - resolution: {integrity: sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.36.0': - resolution: {integrity: sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.36.0': - resolution: {integrity: sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.36.0': - resolution: {integrity: sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.36.0': - resolution: {integrity: sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.36.0': - resolution: {integrity: sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loongarch64-gnu@4.36.0': - resolution: {integrity: sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.36.0': - resolution: {integrity: sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.36.0': - resolution: {integrity: sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.36.0': - resolution: {integrity: sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.36.0': - resolution: {integrity: sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.36.0': - resolution: {integrity: sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.36.0': - resolution: {integrity: sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.36.0': - resolution: {integrity: sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.36.0': - resolution: {integrity: sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==} - cpu: [x64] - os: [win32] - - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - - '@testing-library/dom@10.4.0': - resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} - engines: {node: '>=18'} - - '@testing-library/jest-dom@6.6.3': - resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - - '@testing-library/react@16.2.0': - resolution: {integrity: sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==} - engines: {node: '>=18'} - peerDependencies: - '@testing-library/dom': ^10.0.0 - '@types/react': ^18.0.0 || ^19.0.0 - '@types/react-dom': ^18.0.0 || ^19.0.0 - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@testing-library/user-event@14.6.1': - resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@types/aria-query@5.0.4': - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jest@29.5.14': - resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} - - '@types/jsdom@20.0.1': - resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/node@22.13.10': - resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@types/react-dom@19.0.4': - resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} - peerDependencies: - '@types/react': ^19.0.0 - - '@types/react@19.0.11': - resolution: {integrity: sha512-vrdxRZfo9ALXth6yPfV16PYTLZwsUWhVjjC+DkfE5t1suNSbBrWC9YqSuuxJZ8Ps6z1o2ycRpIqzZJIgklq4Tw==} - - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - - '@typescript-eslint/eslint-plugin@8.26.1': - resolution: {integrity: sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/parser@8.26.1': - resolution: {integrity: sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/scope-manager@8.26.1': - resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/type-utils@8.26.1': - resolution: {integrity: sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/types@8.26.1': - resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.26.1': - resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.26.1': - resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/visitor-keys@8.26.1': - resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@vitejs/plugin-react@4.3.4': - resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - - '@zag-js/accordion@0.82.2': - resolution: {integrity: sha512-w8+oFbSEbW0otT6LG1boO5Iy9UP5K+NalLhoD5XxP/FHS6Rp4R4zk3iolOxxtOh6JXHnghXzG7VZbDQN9R8OWw==} - - '@zag-js/anatomy@0.82.2': - resolution: {integrity: sha512-WHGKs5O443T2RSQQvUzYhEV5SNJxO5ysAnHxHdFLWBrMdLjLwLDnvyY7w30kzxeXR9/Z+2yxkgDipxRsC+qC8w==} - - '@zag-js/aria-hidden@0.82.2': - resolution: {integrity: sha512-V+PjbCABKM4yxFnq9M/t3W1hvwLMVe/0Sj9VyOiAAJDICfSDudGzO+5EfJBTJt59z2Gr4r55X+wtH1uBOtTF7w==} - - '@zag-js/auto-resize@0.82.2': - resolution: {integrity: sha512-93HhdycOkQMzn4g5MRWRgb5QKk03KwIiTkaU1jhx5eAatT/yYFDvrzNbAXQvr0WePcDNPnPrFS5lAY/85p0eew==} - - '@zag-js/avatar@0.82.2': - resolution: {integrity: sha512-rGlZno6S9lm/wWLC12sLj7nyFjUXZ/76hOvpcg5d+e2bmysu+chKz1Z08ecLBVVLWkk4JRq9M3v9Jgji0EgaDQ==} - - '@zag-js/carousel@0.82.2': - resolution: {integrity: sha512-GMbGnoDFwWS8hDUk2unlg3Selmo6JvnTaI5DKEVmwIgp0MGT8zqUk4eAClsLNiS/JunEeK6tyER7K3b4dhYz8Q==} - - '@zag-js/checkbox@0.82.2': - resolution: {integrity: sha512-9gE4P21YsrY+sFJaJOGG84jW64aAxl7M9S+wsmRruKmzNAwri30bOviMV11qZH2isJ44HxPuJ3iezXsLMN+Thg==} - - '@zag-js/clipboard@0.82.2': - resolution: {integrity: sha512-FU2SEHP0KthhtYJNtKU98Aw21ugHyX3CT3a75C9wJKGp5gSUDQ6FMIUT3K7GSFR8JGBQ7f/VI8AgE9gNiRpmdg==} - - '@zag-js/collapsible@0.82.2': - resolution: {integrity: sha512-SWOy9ANjO8vbkYwX8AvEOntkPOAXiT9b4Cg3YT5QALPEB2UMUk0CzxJXw+ilbDoRMWWus2nqgx2g6D+IAabjLQ==} - - '@zag-js/collection@0.82.2': - resolution: {integrity: sha512-moWCnb2F8nfnzYpyLPnCNd10pFSIqrBJrnB4ME0C3QydYIxxwmZsnVLPzTPtnDKGT3uVfL4QX2+nsBoeu1LXrw==} - - '@zag-js/color-picker@0.82.2': - resolution: {integrity: sha512-BRxnToGNyg1HzkWfQquQM8/xg7Jd8HpJeXWQMT9hIh/XqLiz9HRsGN90I6Avv9vYXYJChw1VdSExdfR2HjlqlA==} - - '@zag-js/color-utils@0.82.2': - resolution: {integrity: sha512-tBVocNpmWWBPOla0NPj5yMKefg36X176BsvhItlls3/4TB4We8Cad5Wi9G4SGm0ClYaUGPtQUK/E7UEUhfUjxA==} - - '@zag-js/combobox@0.82.2': - resolution: {integrity: sha512-SVLcfJNqY17MqDL4i3QbxyjEDD/t0xUB37QjgsrKzvnq6IviM6FDh6UfsTX6/NHqy28HL0Aty6NIn2NNM7WyjQ==} - - '@zag-js/core@0.82.2': - resolution: {integrity: sha512-yj4trnU4RzO4duiZJ7uvxECg+6MPVkEbTvTwf2TynotXBYX65LGMTqvMzZP062wvdu0jvTgZ/IbCpN1gc3hmsQ==} - - '@zag-js/date-picker@0.82.2': - resolution: {integrity: sha512-6thJ3ou3u49k4mnnYMecbw0JHvHiaF2nPyToaq/Hsf5grqSijgyZtfkHoDSNFiNN4DKcv1GXErM0N0MiY0dc4A==} - peerDependencies: - '@internationalized/date': '>=3.0.0' - - '@zag-js/date-utils@0.82.2': - resolution: {integrity: sha512-e2jZ6AFMzwJBNgoOdmATKRH5/Mgr6EqlZmmhI061JzB3uteVOv4x2k5je+g8kWS1IADC5D2OMFQHI/bXSJ5ZFQ==} - peerDependencies: - '@internationalized/date': '>=3.0.0' - - '@zag-js/dialog@0.82.2': - resolution: {integrity: sha512-p0E6m28HXQMFj+l0MHJcoh326+p/iMocDFOSL1JT3h/U7JLDeW3kNJvpVGK+6vCLngJ/jnAszgQQYhlaz5smJg==} - - '@zag-js/dismissable@0.82.2': - resolution: {integrity: sha512-oi2wLiWEll9vhgFgE4FIH9aWPwId8QExO6kcnfeZPSkytnTRetKlyhj5xsOCygElZK994JRkFP3lpGrGCET+kg==} - - '@zag-js/dom-query@0.82.2': - resolution: {integrity: sha512-4gI1A7Rh9/vZhOuuWzUldP3+2PIiOyR91TBDA0an1VICzHRKBelntlkBR6cZMtjH9gGxhSVxeKN2b060kJ8VQw==} - - '@zag-js/editable@0.82.2': - resolution: {integrity: sha512-BHheMo+gRo72GCqc8rowtg8yGg7fg39AdiwIrXUQ4PU2oI+jKkxAKamLXFgu19Ne+1keLcGjNAtVWRZkqszjzw==} - - '@zag-js/element-rect@0.82.2': - resolution: {integrity: sha512-VdHlu9fLWhKxHFL5vCQXgzqEmxhSBgzTOU0SidR3hsGLcO6dgioz86bJ7i8uPFU+uZDHhyv9Q7lBQQoO76Cr7g==} - - '@zag-js/element-size@0.82.2': - resolution: {integrity: sha512-33sCUNJITNAqlNOP+KdMRh8R10s8MPwH+XrxucUBi2R55vWRVs9G3gcA/2uSf1mo/2us74Z4U+/KLnI5FkZycg==} - - '@zag-js/file-upload@0.82.2': - resolution: {integrity: sha512-r1618x7BkYLh3qaKQOabD838lwM1ARP4aVbzBb5om1cNUjWgy9wCBU1PCNjsqyFzm/bTmHTXgiWdTz06NFpbTg==} - - '@zag-js/file-utils@0.82.2': - resolution: {integrity: sha512-cjmG+HUBXS+hYsgOfdpNOe/xIYPAQ6CyFDGvuqr4wBnhOd9YyCtn7/M+O4VfodVA9rnVQ67RQsbI/eBBZTQ+/A==} - - '@zag-js/focus-trap@0.82.2': - resolution: {integrity: sha512-TZNSAqqoml6avv6puO8afMJ0ttfYQC4BvIuA/Z8yjMVPvXHcUUeVyP5mgwp2tadMWY2TJ4Bv0/xxJJvvbwNNXQ==} - - '@zag-js/focus-visible@0.82.2': - resolution: {integrity: sha512-fwmNDVHulJ+L6sOFavDhAMYOIZYwo/ivhkPkko2pah6pYYQDwyp4bjsmpofW/VkCgdXgClpcElCC8aoQ83A6Jg==} - - '@zag-js/highlight-word@0.82.2': - resolution: {integrity: sha512-9sN//8j+TZFTrYIhuSSIJ0rMREVAV8xkJ8250zH///cYfVDuFLCbJp69E613ZfevipemlTQJWP1vTJ1HZGZ5vg==} - - '@zag-js/hover-card@0.82.2': - resolution: {integrity: sha512-11xb3BzVxMvhSGEx9k/umq4/gt7wbjKB/TVEn2dYTdZ2NTyAa+PLXkZ60VBPnprEZ3Or3AzuWJw68uaSdqxh0A==} - - '@zag-js/i18n-utils@0.82.2': - resolution: {integrity: sha512-ANmNMA7f5Hrhd0ZXVASTV62HRIJut/ioQ6lm/L6PL1+QW+o60j5wJv4HSslQuWWsdyzEpq05u2Sy9ndbcSQ5RA==} - - '@zag-js/interact-outside@0.82.2': - resolution: {integrity: sha512-9AB7S6NpOr49oSh+nIl+X8wEiKj2YfXtW2Qk/GOTQ0eP9boXK45Y1pqjWvBpDF0rQYofnWPgoldw9B+rZa+lZQ==} - - '@zag-js/live-region@0.82.2': - resolution: {integrity: sha512-q6j4qggfyUFgpAWBe48cRiaByrJVrOf3x6gHWhK7EsLu45D/0HPkvZjmDgwoRoIISoJVLeT9YquaNsh7rFKFrQ==} - - '@zag-js/menu@0.82.2': - resolution: {integrity: sha512-vPRLdv9ZcQYgzgtZimXY0LKj7Rs+3EPowc2GEWcMe5ergzhKRlmG/2eRn/mSgESnLmMNx6CaYAYQdNcndd+ksA==} - - '@zag-js/number-input@0.82.2': - resolution: {integrity: sha512-gVJZny2MS3ptOpP5W+DGnY7igOCyO9I+Z+dDWlKiLNvHM8v6GlMtxtiPuV8kL1u7TqL8HEGQENA1NZYSr+rcKQ==} - - '@zag-js/pagination@0.82.2': - resolution: {integrity: sha512-xPMhYQOb/QoVwQm8TTchameMsrKR6VhZmcCMzjR0KlBIf7WG4Z5H3Rfzw3HXoQaNTipY2k56YH5p4PEirGYvzA==} - - '@zag-js/pin-input@0.82.2': - resolution: {integrity: sha512-8omi7JeA2UXMOeuMdcE2qNk86AfnA19CpY7pQ0GVKuqsxF4zSniC+4SC7uAOUymNtkdv6xVheJF696bRIoChRw==} - - '@zag-js/popover@0.82.2': - resolution: {integrity: sha512-OD0hBCasb8gJU97uWE3m8bAL8XqPrIDkQF4mJ0clAC9puusDdKgRS9W5kCQzgzei3JYdZbK81Bnx5X0gOGWKwQ==} - - '@zag-js/popper@0.82.2': - resolution: {integrity: sha512-hrc9WtFge+m8zVgrxFxOPpBRvqf4YhWoJSnhPfjruBSJDrvrgBkozjCsazM3618b7bB+jpw4Pzj0H+lSsv4Ygw==} - - '@zag-js/presence@0.82.2': - resolution: {integrity: sha512-N818BC/PBkdh/yQBECrBONoN9DcYT/PNIblgHic3mG8IIfI49jnAC103gDFbROVJoI/38bk4gwMMOWesZtX/IA==} - - '@zag-js/progress@0.82.2': - resolution: {integrity: sha512-YxQXBHLUXF8BOG68sZCXkthKrZPebt02cSinafpjYXIOwauSBeMdmd8rAjsrAIFWhonaXcqxCs+jqlZRn18tEA==} - - '@zag-js/qr-code@0.82.2': - resolution: {integrity: sha512-dotI3wXTGArwxKnqaLWrgNfXZGq2oe0Ur3KT8JPxHy9Kv6JWYGkge5AmtiGkwXFQR/ZxnRYE1vF1RNjFG50OKQ==} - - '@zag-js/radio-group@0.82.2': - resolution: {integrity: sha512-Peh3zLq8BEmoC9zHrd1n08gLlrlb5VXUpofOdEj9GqtEphLNCf/S3O5jeM6MlYZ9gHe+CkXIpXH16GDBoZVWjw==} - - '@zag-js/rating-group@0.82.2': - resolution: {integrity: sha512-J2JX9leShV3HbiFqPoKCITaSshpjjt2U9mNakGU09YUlYEtjKwlNPFpYLSkKw2ItA/T9QbYJC58kbF+bAnTL5w==} - - '@zag-js/react@0.82.2': - resolution: {integrity: sha512-lDul3lRZae2ptkOQSfobl5ZQfX6rhcoN5ILLVbGzBJ9hRtNfMTVfKKxXdF2/pg53sMgggK4hZNR3W2P21uC+Wg==} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@zag-js/rect-utils@0.82.2': - resolution: {integrity: sha512-cmjxI+90La4Kz4CeGAN7EJ6wFbPEjZArnvU7TeUA+FrgRQvotjFrzI4zZ20BTgnlgMH7ahVNFO2qsVp+kcc2LQ==} - - '@zag-js/remove-scroll@0.82.2': - resolution: {integrity: sha512-v6ELaC9+sC+YoAkFjOBabjsXAoQgQA5secFDWWjzSVROWynH1mKNbBxakGCqEKtF67ZGbkAy+ysAZJoOkDsW4g==} - - '@zag-js/scroll-snap@0.82.2': - resolution: {integrity: sha512-Fl+utIAJr6nwNDnIML2jGIDRiFrDsQS77soGt8rT9Bj5swqdHpzwdTW3yu/VYlnPbvfrsB7SmMt1HzldukdOHQ==} - - '@zag-js/select@0.82.2': - resolution: {integrity: sha512-2aiXx/3PKc6vexloHj6GYndAbnPoe5W5mH2VSHM25Obu0XYkn28OLKTDIyHlqcycypVci2j5MnhCEkqQK/JKuw==} - - '@zag-js/signature-pad@0.82.2': - resolution: {integrity: sha512-o44M7B+cKmmiKmNFEIVTufr59jqvFShLri/EmkS1fY3KMSrnMHWNoa6xbJlVpz4DJMwI8PxapoN+lYxMTYUUEQ==} - - '@zag-js/slider@0.82.2': - resolution: {integrity: sha512-ef059F+zWcYVjX3lxTDgb2KEcYNrLMrvJEFyaVg11wRLtwjRqVrjFxn9W/ZpR6pWnJol2D+BV8b478NmTpRwog==} - - '@zag-js/splitter@0.82.2': - resolution: {integrity: sha512-36KJkdjtogjG0MTXbcf5b8Ienl02KFoKPPx96uOwlWdvbuypwww6z9kAsWQ+CGkpaKXqxZIweO7BCO4seVCwuQ==} - - '@zag-js/steps@0.82.2': - resolution: {integrity: sha512-otREJYUKLY+Dku89fCJ5TzkMHxe1Nk4Y5jffyWWOHkf+xy50Ist6jWjGxdIcU2cUwomAJZvPIuz0bq6WjBZ+zg==} - - '@zag-js/store@0.82.2': - resolution: {integrity: sha512-tjG99kSFfnUHWMTe3y+CAqCrH/RGCB2V5y0BoasITYAqTpqbCfPJH0R2+UYsY3kLqPnE+JDkkh1TnwcqKLc0/w==} - - '@zag-js/switch@0.82.2': - resolution: {integrity: sha512-sUZTcHN1+UxtU7cv+kRaz31OVrNdBqR3BC4bqWkjz/ihshAdzHquwKDkOtYiKjIGV9h8CwcuuCksrbwqCJ3apw==} - - '@zag-js/tabs@0.82.2': - resolution: {integrity: sha512-8y4eYpu4oZlANehMavGqu4bG5fepgjGuPDZNeNHzwWnbCh1TjoKJ20HvluRRzOgKoErQqD9+WT3V4Khw8Sd62Q==} - - '@zag-js/tags-input@0.82.2': - resolution: {integrity: sha512-L9bXHImBs+F0nlWbM6TeUZFN3ur/vwGGbT0sFw9FtsL/+5XmTQfZ5wert3l/qeUE1RJrohFBxsVvq4hz6UYUCw==} - - '@zag-js/time-picker@0.82.2': - resolution: {integrity: sha512-NIJUrZMrLH6ciphwsmVsqMGyNEw6qtYlI3F6tlPLhVvnXJDcvc0PaGMe5OBM3yKFluQaVWUIVAR84urdhCBbpg==} - peerDependencies: - '@internationalized/date': '>=3.0.0' - - '@zag-js/timer@0.82.2': - resolution: {integrity: sha512-lpCgHcSL4FNRb+UwlLu/J70iEr0vb2Dybwu39NkzxRi8LuBJGxrXGlTG8Apn2nldf7HHsSLT6cF7Nr0NohQa+Q==} - - '@zag-js/toast@0.82.2': - resolution: {integrity: sha512-jAPzB4hxq90DmsvcuHepqzl/YMTnQQivkA7WG03hq/C5bAoPhpIvLauCTKiVW9SjgGfaTM6wuOQmMQEYiIe/rQ==} - - '@zag-js/toggle-group@0.82.2': - resolution: {integrity: sha512-aJKP96iwDw/2Z98VWT40ii6CHTSrrvfsGJ03+dE8Mio6a43wiFKhatGLFIMTcu1EExiBmTAec4uUm4A1Xzbu1w==} - - '@zag-js/tooltip@0.82.2': - resolution: {integrity: sha512-s7kXaBR3Ehu7kPzr9xX7FoWlqQ76eEViqGS1RPDtdDVgD1Hg7bfjZ1nCWDKgIuZF7gP/Iq4iC1i5iTOBIdeIOQ==} - - '@zag-js/tour@0.82.2': - resolution: {integrity: sha512-oQyVXSJIw7PeXRnHypI+zKp0mHm8oNiVzgcYBIASk/E9JU0U+DGXh8vRdvzsrQlZD+AKT2rjv1v8xvbVUEngSw==} - - '@zag-js/tree-view@0.82.2': - resolution: {integrity: sha512-7+05aXig4mlISMZ+eKJpi3p+9r9u+h0S5Mvsw2o5Dz7XX/BfPTK8GEEDFWwuJKm03wNBuKCQ8+X1pxUisZqXVQ==} - - '@zag-js/types@0.82.2': - resolution: {integrity: sha512-OUN4QropdK3XZcjtm4n5JVMhbgp78F3pavLDvWCcwW0QwtckJljX6E17N9ViajVti8itKKXCuNRHCMhqLT8jwQ==} - - '@zag-js/utils@0.82.2': - resolution: {integrity: sha512-tN87VEEoo240O2CzQdHvtBVPF8hHqLdpNzDT+obNIQrRj4wbNQ5Ze3Zwrd6/SoBe7ImKgkwbAlgu4k5+v9sDcA==} - - abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead - - acorn-globals@7.0.1: - resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - async@2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - - babel-preset-current-node-syntax@1.1.0: - resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - caniuse-lite@1.0.30001706: - resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==} - - chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - - cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - - cssom@0.5.0: - resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} - - cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - data-urls@3.0.2: - resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} - engines: {node: '>=12'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decimal.js@10.5.0: - resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} - - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - - dom-accessibility-api@0.6.3: - resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - - domexception@4.0.0: - resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} - engines: {node: '>=12'} - deprecated: Use your platform's native DOMException instead - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-to-chromium@1.5.120: - resolution: {integrity: sha512-oTUp3gfX1gZI+xfD2djr2rzQdHCwHzPQrrK0CD7WpTdF0nPdQ/INcRVjWgLdCT4a9W3jFObR9DAfsuyFQnI8CQ==} - - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - esbuild@0.25.1: - resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - - eslint-config-prettier@10.1.1: - resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-plugin-prettier@5.2.3: - resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react-refresh@0.4.19: - resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==} - peerDependencies: - eslint: '>=8.40' - - eslint-plugin-react@7.37.4: - resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.22.0: - resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - - html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} - engines: {node: '>=8'} - hasBin: true - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-number-like@1.0.8: - resolution: {integrity: sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} - - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - - jake@10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} - engines: {node: '>=10'} - hasBin: true - - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-jsdom@29.7.0: - resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsdom@20.0.3: - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} - engines: {node: '>=14'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.isfinite@3.3.2: - resolution: {integrity: sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - next-themes@0.4.6: - resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} - peerDependencies: - react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - nwsapi@2.2.19: - resolution: {integrity: sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - perfect-freehand@1.2.2: - resolution: {integrity: sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - - polished@4.3.1: - resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} - engines: {node: '>=10'} - - portscanner@2.2.0: - resolution: {integrity: sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==} - engines: {node: '>=0.4', npm: '>=1.0.0'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} - engines: {node: '>=14'} - hasBin: true - - pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - proxy-compare@3.0.1: - resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==} - - proxy-memoize@3.0.1: - resolution: {integrity: sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==} - - psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 - - react-icons@5.5.0: - resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} - peerDependencies: - react: '*' - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} - engines: {node: '>=0.10.0'} - - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve.exports@2.0.3: - resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} - engines: {node: '>=10'} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rollup@4.36.0: - resolution: {integrity: sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - - synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} - engines: {node: ^14.18.0 || >=16.0.0} - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} - - tr46@3.0.0: - resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} - engines: {node: '>=12'} - - ts-api-utils@2.0.1: - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-jest@29.2.6: - resolution: {integrity: sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript-eslint@8.26.1: - resolution: {integrity: sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uqr@0.1.2: - resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} - - vite@6.2.2: - resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - - whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} - - whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} - - whatwg-url@11.0.0: - resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} - engines: {node: '>=12'} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - ws@8.18.1: - resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xml-name-validator@4.0.0: - resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} - engines: {node: '>=12'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - '@adobe/css-tools@4.4.2': {} - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@ark-ui/react@4.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@internationalized/date': 3.7.0 - '@zag-js/accordion': 0.82.2 - '@zag-js/anatomy': 0.82.2 - '@zag-js/auto-resize': 0.82.2 - '@zag-js/avatar': 0.82.2 - '@zag-js/carousel': 0.82.2 - '@zag-js/checkbox': 0.82.2 - '@zag-js/clipboard': 0.82.2 - '@zag-js/collapsible': 0.82.2 - '@zag-js/collection': 0.82.2 - '@zag-js/color-picker': 0.82.2 - '@zag-js/color-utils': 0.82.2 - '@zag-js/combobox': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/date-picker': 0.82.2(@internationalized/date@3.7.0) - '@zag-js/date-utils': 0.82.2(@internationalized/date@3.7.0) - '@zag-js/dialog': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/editable': 0.82.2 - '@zag-js/file-upload': 0.82.2 - '@zag-js/file-utils': 0.82.2 - '@zag-js/focus-trap': 0.82.2 - '@zag-js/highlight-word': 0.82.2 - '@zag-js/hover-card': 0.82.2 - '@zag-js/i18n-utils': 0.82.2 - '@zag-js/menu': 0.82.2 - '@zag-js/number-input': 0.82.2 - '@zag-js/pagination': 0.82.2 - '@zag-js/pin-input': 0.82.2 - '@zag-js/popover': 0.82.2 - '@zag-js/presence': 0.82.2 - '@zag-js/progress': 0.82.2 - '@zag-js/qr-code': 0.82.2 - '@zag-js/radio-group': 0.82.2 - '@zag-js/rating-group': 0.82.2 - '@zag-js/react': 0.82.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@zag-js/select': 0.82.2 - '@zag-js/signature-pad': 0.82.2 - '@zag-js/slider': 0.82.2 - '@zag-js/splitter': 0.82.2 - '@zag-js/steps': 0.82.2 - '@zag-js/switch': 0.82.2 - '@zag-js/tabs': 0.82.2 - '@zag-js/tags-input': 0.82.2 - '@zag-js/time-picker': 0.82.2(@internationalized/date@3.7.0) - '@zag-js/timer': 0.82.2 - '@zag-js/toast': 0.82.2 - '@zag-js/toggle-group': 0.82.2 - '@zag-js/tooltip': 0.82.2 - '@zag-js/tour': 0.82.2 - '@zag-js/tree-view': 0.82.2 - '@zag-js/types': 0.82.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.26.8': {} - - '@babel/core@7.26.10': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.10 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helpers': 7.26.10 - '@babel/parser': 7.26.10 - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 - convert-source-map: 2.0.0 - debug: 4.4.0 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.26.10': - dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.26.5': - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.10 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.26.5': {} - - '@babel/helper-string-parser@7.25.9': {} - - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/helper-validator-option@7.25.9': {} - - '@babel/helpers@7.26.10': - dependencies: - '@babel/template': 7.26.9 - '@babel/types': 7.26.10 - - '@babel/parser@7.26.10': - dependencies: - '@babel/types': 7.26.10 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/runtime@7.26.10': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/template@7.26.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 - - '@babel/traverse@7.26.10': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.10 - '@babel/parser': 7.26.10 - '@babel/template': 7.26.9 - '@babel/types': 7.26.10 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.26.10': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@bcoe/v8-coverage@0.2.3': {} - - '@chakra-ui/react@3.13.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@ark-ui/react': 4.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.0.11)(react@18.3.1) - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) - '@emotion/utils': 1.4.2 - '@pandacss/is-valid-prop': 0.41.0 - csstype: 3.1.3 - fast-safe-stringify: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@emotion/babel-plugin@11.13.5': - dependencies: - '@babel/helper-module-imports': 7.25.9 - '@babel/runtime': 7.26.10 - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.3 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - transitivePeerDependencies: - - supports-color - - '@emotion/cache@11.14.0': - dependencies: - '@emotion/memoize': 0.9.0 - '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - stylis: 4.2.0 - - '@emotion/hash@0.9.2': {} - - '@emotion/is-prop-valid@1.3.1': - dependencies: - '@emotion/memoize': 0.9.0 - - '@emotion/memoize@0.9.0': {} - - '@emotion/react@11.14.0(@types/react@19.0.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.26.10 - '@emotion/babel-plugin': 11.13.5 - '@emotion/cache': 11.14.0 - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - hoist-non-react-statics: 3.3.2 - react: 18.3.1 - optionalDependencies: - '@types/react': 19.0.11 - transitivePeerDependencies: - - supports-color - - '@emotion/serialize@1.3.3': - dependencies: - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/unitless': 0.10.0 - '@emotion/utils': 1.4.2 - csstype: 3.1.3 - - '@emotion/sheet@1.4.0': {} - - '@emotion/unitless@0.10.0': {} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@emotion/utils@1.4.2': {} - - '@emotion/weak-memoize@0.4.0': {} - - '@esbuild/aix-ppc64@0.25.1': - optional: true - - '@esbuild/android-arm64@0.25.1': - optional: true - - '@esbuild/android-arm@0.25.1': - optional: true - - '@esbuild/android-x64@0.25.1': - optional: true - - '@esbuild/darwin-arm64@0.25.1': - optional: true - - '@esbuild/darwin-x64@0.25.1': - optional: true - - '@esbuild/freebsd-arm64@0.25.1': - optional: true - - '@esbuild/freebsd-x64@0.25.1': - optional: true - - '@esbuild/linux-arm64@0.25.1': - optional: true - - '@esbuild/linux-arm@0.25.1': - optional: true - - '@esbuild/linux-ia32@0.25.1': - optional: true - - '@esbuild/linux-loong64@0.25.1': - optional: true - - '@esbuild/linux-mips64el@0.25.1': - optional: true - - '@esbuild/linux-ppc64@0.25.1': - optional: true - - '@esbuild/linux-riscv64@0.25.1': - optional: true - - '@esbuild/linux-s390x@0.25.1': - optional: true - - '@esbuild/linux-x64@0.25.1': - optional: true - - '@esbuild/netbsd-arm64@0.25.1': - optional: true - - '@esbuild/netbsd-x64@0.25.1': - optional: true - - '@esbuild/openbsd-arm64@0.25.1': - optional: true - - '@esbuild/openbsd-x64@0.25.1': - optional: true - - '@esbuild/sunos-x64@0.25.1': - optional: true - - '@esbuild/win32-arm64@0.25.1': - optional: true - - '@esbuild/win32-ia32@0.25.1': - optional: true - - '@esbuild/win32-x64@0.25.1': - optional: true - - '@eslint-community/eslint-utils@4.5.1(eslint@9.22.0)': - dependencies: - eslint: 9.22.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/config-array@0.19.2': - dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.0 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.1.0': {} - - '@eslint/core@0.12.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.0': - dependencies: - ajv: 6.12.6 - debug: 4.4.0 - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.22.0': {} - - '@eslint/object-schema@2.1.6': {} - - '@eslint/plugin-kit@0.2.7': - dependencies: - '@eslint/core': 0.12.0 - levn: 0.4.1 - - '@floating-ui/core@1.6.9': - dependencies: - '@floating-ui/utils': 0.2.9 - - '@floating-ui/dom@1.6.13': - dependencies: - '@floating-ui/core': 1.6.9 - '@floating-ui/utils': 0.2.9 - - '@floating-ui/utils@0.2.9': {} - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.2': {} - - '@internationalized/date@3.7.0': - dependencies: - '@swc/helpers': 0.5.15 - - '@internationalized/number@3.6.0': - dependencies: - '@swc/helpers': 0.5.15 - - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.3': {} - - '@jest/console@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.13.10 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.10 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.10 - jest-mock: 29.7.0 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - - '@jest/expect@29.7.0': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.13.10 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/globals@29.7.0': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/reporters@29.7.0': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.13.10 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.3.0 - transitivePeerDependencies: - - supports-color - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@jest/source-map@29.6.3': - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - - '@jest/test-sequencer@29.7.0': - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.26.10 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 22.13.10 - '@types/yargs': 17.0.33 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 - - '@pandacss/is-valid-prop@0.41.0': {} - - '@pkgr/core@0.1.1': {} - - '@rollup/rollup-android-arm-eabi@4.36.0': - optional: true - - '@rollup/rollup-android-arm64@4.36.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.36.0': - optional: true - - '@rollup/rollup-darwin-x64@4.36.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.36.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.36.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.36.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.36.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.36.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.36.0': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.36.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.36.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.36.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.36.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.36.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.36.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.36.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.36.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.36.0': - optional: true - - '@sinclair/typebox@0.27.8': {} - - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - - '@swc/helpers@0.5.15': - dependencies: - tslib: 2.8.1 - - '@testing-library/dom@10.4.0': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.26.10 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - - '@testing-library/jest-dom@6.6.3': - dependencies: - '@adobe/css-tools': 4.4.2 - aria-query: 5.3.2 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - lodash: 4.17.21 - redent: 3.0.0 - - '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.4(@types/react@19.0.11))(@types/react@19.0.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.26.10 - '@testing-library/dom': 10.4.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 19.0.11 - '@types/react-dom': 19.0.4(@types/react@19.0.11) - - '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': - dependencies: - '@testing-library/dom': 10.4.0 - - '@tootallnate/once@2.0.0': {} - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@types/aria-query@5.0.4': {} - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 - - '@types/babel__generator@7.6.8': - dependencies: - '@babel/types': 7.26.10 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 - - '@types/babel__traverse@7.20.6': - dependencies: - '@babel/types': 7.26.10 - - '@types/estree@1.0.6': {} - - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 22.13.10 - - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jest@29.5.14': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - - '@types/jsdom@20.0.1': - dependencies: - '@types/node': 22.13.10 - '@types/tough-cookie': 4.0.5 - parse5: 7.2.1 - - '@types/json-schema@7.0.15': {} - - '@types/node@22.13.10': - dependencies: - undici-types: 6.20.0 - - '@types/parse-json@4.0.2': {} - - '@types/react-dom@19.0.4(@types/react@19.0.11)': - dependencies: - '@types/react': 19.0.11 - - '@types/react@19.0.11': - dependencies: - csstype: 3.1.3 - - '@types/stack-utils@2.0.3': {} - - '@types/tough-cookie@4.0.5': {} - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.33': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.7.3))(eslint@9.22.0)(typescript@5.7.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0)(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0)(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0)(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.26.1 - eslint: 9.22.0 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.7.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.26.1 - debug: 4.4.0 - eslint: 9.22.0 - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.26.1': - dependencies: - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/visitor-keys': 8.26.1 - - '@typescript-eslint/type-utils@8.26.1(eslint@9.22.0)(typescript@5.7.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0)(typescript@5.7.3) - debug: 4.4.0 - eslint: 9.22.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.26.1': {} - - '@typescript-eslint/typescript-estree@8.26.1(typescript@5.7.3)': - dependencies: - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/visitor-keys': 8.26.1 - debug: 4.4.0 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.26.1(eslint@9.22.0)(typescript@5.7.3)': - dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0) - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - eslint: 9.22.0 - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.26.1': - dependencies: - '@typescript-eslint/types': 8.26.1 - eslint-visitor-keys: 4.2.0 - - '@vitejs/plugin-react@4.3.4(vite@6.2.2(@types/node@22.13.10))': - dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 - vite: 6.2.2(@types/node@22.13.10) - transitivePeerDependencies: - - supports-color - - '@zag-js/accordion@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/anatomy@0.82.2': {} - - '@zag-js/aria-hidden@0.82.2': {} - - '@zag-js/auto-resize@0.82.2': - dependencies: - '@zag-js/dom-query': 0.82.2 - - '@zag-js/avatar@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/carousel@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/scroll-snap': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/checkbox@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/focus-visible': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/clipboard@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/collapsible@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/collection@0.82.2': - dependencies: - '@zag-js/utils': 0.82.2 - - '@zag-js/color-picker@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/color-utils': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/popper': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/color-utils@0.82.2': - dependencies: - '@zag-js/utils': 0.82.2 - - '@zag-js/combobox@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/aria-hidden': 0.82.2 - '@zag-js/collection': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/popper': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/core@0.82.2': - dependencies: - '@zag-js/store': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/date-picker@0.82.2(@internationalized/date@3.7.0)': - dependencies: - '@internationalized/date': 3.7.0 - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/date-utils': 0.82.2(@internationalized/date@3.7.0) - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/live-region': 0.82.2 - '@zag-js/popper': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/date-utils@0.82.2(@internationalized/date@3.7.0)': - dependencies: - '@internationalized/date': 3.7.0 - - '@zag-js/dialog@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/aria-hidden': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/focus-trap': 0.82.2 - '@zag-js/remove-scroll': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/dismissable@0.82.2': - dependencies: - '@zag-js/dom-query': 0.82.2 - '@zag-js/interact-outside': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/dom-query@0.82.2': - dependencies: - '@zag-js/types': 0.82.2 - - '@zag-js/editable@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/interact-outside': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/element-rect@0.82.2': {} - - '@zag-js/element-size@0.82.2': {} - - '@zag-js/file-upload@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/file-utils': 0.82.2 - '@zag-js/i18n-utils': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/file-utils@0.82.2': - dependencies: - '@zag-js/i18n-utils': 0.82.2 - - '@zag-js/focus-trap@0.82.2': - dependencies: - '@zag-js/dom-query': 0.82.2 - - '@zag-js/focus-visible@0.82.2': - dependencies: - '@zag-js/dom-query': 0.82.2 - - '@zag-js/highlight-word@0.82.2': {} - - '@zag-js/hover-card@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/popper': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/i18n-utils@0.82.2': - dependencies: - '@zag-js/dom-query': 0.82.2 - - '@zag-js/interact-outside@0.82.2': - dependencies: - '@zag-js/dom-query': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/live-region@0.82.2': {} - - '@zag-js/menu@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/popper': 0.82.2 - '@zag-js/rect-utils': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/number-input@0.82.2': - dependencies: - '@internationalized/number': 3.6.0 - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/pagination@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/pin-input@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/popover@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/aria-hidden': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/focus-trap': 0.82.2 - '@zag-js/popper': 0.82.2 - '@zag-js/remove-scroll': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/popper@0.82.2': - dependencies: - '@floating-ui/dom': 1.6.13 - '@zag-js/dom-query': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/presence@0.82.2': - dependencies: - '@zag-js/core': 0.82.2 - '@zag-js/types': 0.82.2 - - '@zag-js/progress@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/qr-code@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - proxy-memoize: 3.0.1 - uqr: 0.1.2 - - '@zag-js/radio-group@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/element-rect': 0.82.2 - '@zag-js/focus-visible': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/rating-group@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/react@0.82.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@zag-js/core': 0.82.2 - '@zag-js/store': 0.82.2 - '@zag-js/types': 0.82.2 - proxy-compare: 3.0.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@zag-js/rect-utils@0.82.2': {} - - '@zag-js/remove-scroll@0.82.2': - dependencies: - '@zag-js/dom-query': 0.82.2 - - '@zag-js/scroll-snap@0.82.2': - dependencies: - '@zag-js/dom-query': 0.82.2 - - '@zag-js/select@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/collection': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/popper': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/signature-pad@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - perfect-freehand: 1.2.2 - - '@zag-js/slider@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/element-size': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/splitter@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/steps@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/store@0.82.2': - dependencies: - proxy-compare: 3.0.1 - - '@zag-js/switch@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/focus-visible': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/tabs@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/element-rect': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/tags-input@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/auto-resize': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/interact-outside': 0.82.2 - '@zag-js/live-region': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/time-picker@0.82.2(@internationalized/date@3.7.0)': - dependencies: - '@internationalized/date': 3.7.0 - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/popper': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/timer@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/toast@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/toggle-group@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/tooltip@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/focus-visible': 0.82.2 - '@zag-js/popper': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/tour@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dismissable': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/focus-trap': 0.82.2 - '@zag-js/interact-outside': 0.82.2 - '@zag-js/popper': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/tree-view@0.82.2': - dependencies: - '@zag-js/anatomy': 0.82.2 - '@zag-js/collection': 0.82.2 - '@zag-js/core': 0.82.2 - '@zag-js/dom-query': 0.82.2 - '@zag-js/types': 0.82.2 - '@zag-js/utils': 0.82.2 - - '@zag-js/types@0.82.2': - dependencies: - csstype: 3.1.3 - - '@zag-js/utils@0.82.2': {} - - abab@2.0.6: {} - - acorn-globals@7.0.1: - dependencies: - acorn: 8.14.1 - acorn-walk: 8.3.4 - - acorn-jsx@5.3.2(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - - acorn-walk@8.3.4: - dependencies: - acorn: 8.14.1 - - acorn@8.14.1: {} - - agent-base@6.0.2: - dependencies: - debug: 4.4.0 - transitivePeerDependencies: - - supports-color - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@4.1.3: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - argparse@2.0.1: {} - - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 - - aria-query@5.3.2: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - async-function@1.0.0: {} - - async@2.6.4: - dependencies: - lodash: 4.17.21 - - async@3.2.6: {} - - asynckit@0.4.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - babel-jest@29.7.0(@babel/core@7.26.10): - dependencies: - '@babel/core': 7.26.10 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.26.10) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.26.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.26.9 - '@babel/types': 7.26.10 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 - - babel-plugin-macros@3.1.0: - dependencies: - '@babel/runtime': 7.26.10 - cosmiconfig: 7.1.0 - resolve: 1.22.10 - - babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.10): - dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.10) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.10) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10) - - babel-preset-jest@29.6.3(@babel/core@7.26.10): - dependencies: - '@babel/core': 7.26.10 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) - - balanced-match@1.0.2: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.24.4: - dependencies: - caniuse-lite: 1.0.30001706 - electron-to-chromium: 1.5.120 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) - - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - - buffer-from@1.1.2: {} - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - - caniuse-lite@1.0.30001706: {} - - chalk@3.0.0: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - char-regex@1.0.2: {} - - ci-info@3.9.0: {} - - cjs-module-lexer@1.4.3: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - co@4.6.0: {} - - collect-v8-coverage@1.0.2: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - concat-map@0.0.1: {} - - convert-source-map@1.9.0: {} - - convert-source-map@2.0.0: {} - - cosmiconfig@7.1.0: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - - create-jest@29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - create-require@1.1.1: {} - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - css.escape@1.5.1: {} - - cssom@0.3.8: {} - - cssom@0.5.0: {} - - cssstyle@2.3.0: - dependencies: - cssom: 0.3.8 - - csstype@3.1.3: {} - - data-urls@3.0.2: - dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@4.4.0: - dependencies: - ms: 2.1.3 - - decimal.js@10.5.0: {} - - dedent@1.5.3(babel-plugin-macros@3.1.0): - optionalDependencies: - babel-plugin-macros: 3.1.0 - - deep-is@0.1.4: {} - - deepmerge@4.3.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - delayed-stream@1.0.0: {} - - dequal@2.0.3: {} - - detect-newline@3.1.0: {} - - diff-sequences@29.6.3: {} - - diff@4.0.2: {} - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - dom-accessibility-api@0.5.16: {} - - dom-accessibility-api@0.6.3: {} - - domexception@4.0.0: - dependencies: - webidl-conversions: 7.0.0 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - ejs@3.1.10: - dependencies: - jake: 10.9.2 - - electron-to-chromium@1.5.120: {} - - emittery@0.13.1: {} - - emoji-regex@8.0.0: {} - - entities@4.5.0: {} - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - es-abstract@1.23.9: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - esbuild@0.25.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.1 - '@esbuild/android-arm': 0.25.1 - '@esbuild/android-arm64': 0.25.1 - '@esbuild/android-x64': 0.25.1 - '@esbuild/darwin-arm64': 0.25.1 - '@esbuild/darwin-x64': 0.25.1 - '@esbuild/freebsd-arm64': 0.25.1 - '@esbuild/freebsd-x64': 0.25.1 - '@esbuild/linux-arm': 0.25.1 - '@esbuild/linux-arm64': 0.25.1 - '@esbuild/linux-ia32': 0.25.1 - '@esbuild/linux-loong64': 0.25.1 - '@esbuild/linux-mips64el': 0.25.1 - '@esbuild/linux-ppc64': 0.25.1 - '@esbuild/linux-riscv64': 0.25.1 - '@esbuild/linux-s390x': 0.25.1 - '@esbuild/linux-x64': 0.25.1 - '@esbuild/netbsd-arm64': 0.25.1 - '@esbuild/netbsd-x64': 0.25.1 - '@esbuild/openbsd-arm64': 0.25.1 - '@esbuild/openbsd-x64': 0.25.1 - '@esbuild/sunos-x64': 0.25.1 - '@esbuild/win32-arm64': 0.25.1 - '@esbuild/win32-ia32': 0.25.1 - '@esbuild/win32-x64': 0.25.1 - - escalade@3.2.0: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@4.0.0: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - eslint-config-prettier@10.1.1(eslint@9.22.0): - dependencies: - eslint: 9.22.0 - - eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.1.1(eslint@9.22.0))(eslint@9.22.0)(prettier@3.5.3): - dependencies: - eslint: 9.22.0 - prettier: 3.5.3 - prettier-linter-helpers: 1.0.0 - synckit: 0.9.2 - optionalDependencies: - eslint-config-prettier: 10.1.1(eslint@9.22.0) - - eslint-plugin-react-hooks@5.2.0(eslint@9.22.0): - dependencies: - eslint: 9.22.0 - - eslint-plugin-react-refresh@0.4.19(eslint@9.22.0): - dependencies: - eslint: 9.22.0 - - eslint-plugin-react@7.37.4(eslint@9.22.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 9.22.0 - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-scope@8.3.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.0: {} - - eslint@9.22.0: - dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.2 - '@eslint/config-helpers': 0.1.0 - '@eslint/core': 0.12.0 - '@eslint/eslintrc': 3.3.0 - '@eslint/js': 9.22.0 - '@eslint/plugin-kit': 0.2.7 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0 - escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - transitivePeerDependencies: - - supports-color - - espree@10.3.0: - dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 - - esprima@4.0.1: {} - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - exit@0.1.2: {} - - expect@29.7.0: - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fast-safe-stringify@2.1.1: {} - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-root@1.1.0: {} - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - - flatted@3.3.3: {} - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - form-data@4.0.2: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - mime-types: 2.1.35 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-package-type@0.1.0: {} - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@6.0.1: {} - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@11.12.0: {} - - globals@14.0.0: {} - - globals@15.15.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - graphemer@1.4.0: {} - - has-bigints@1.1.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - - html-encoding-sniffer@3.0.0: - dependencies: - whatwg-encoding: 2.0.0 - - html-escaper@2.0.2: {} - - http-proxy-agent@5.0.0: - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.4.0 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.0 - transitivePeerDependencies: - - supports-color - - human-signals@2.1.0: {} - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - ignore@5.3.2: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - import-local@3.2.0: - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - - imurmurhash@0.1.4: {} - - indent-string@4.0.0: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-fullwidth-code-point@3.0.0: {} - - is-generator-fn@2.1.0: {} - - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-map@2.0.3: {} - - is-number-like@1.0.8: - dependencies: - lodash.isfinite: 3.3.2 - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-potential-custom-element-name@1.0.1: {} - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-stream@2.0.1: {} - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.26.10 - '@babel/parser': 7.26.10 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-instrument@6.0.3: - dependencies: - '@babel/core': 7.26.10 - '@babel/parser': 7.26.10 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.7.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@4.0.1: - dependencies: - debug: 4.4.0 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.7: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - - jake@10.9.2: - dependencies: - async: 3.2.6 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - jest-changed-files@29.7.0: - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - - jest-circus@29.7.0(babel-plugin-macros@3.1.0): - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.10 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.5.3(babel-plugin-macros@3.1.0) - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.1.0 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-config@29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)): - dependencies: - '@babel/core': 7.26.10 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.10) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0(babel-plugin-macros@3.1.0) - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.13.10 - ts-node: 10.9.2(@types/node@22.13.10)(typescript@5.7.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-docblock@29.7.0: - dependencies: - detect-newline: 3.1.0 - - jest-each@29.7.0: - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - - jest-environment-jsdom@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/jsdom': 20.0.1 - '@types/node': 22.13.10 - jest-mock: 29.7.0 - jest-util: 29.7.0 - jsdom: 20.0.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.10 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - jest-get-type@29.6.3: {} - - jest-haste-map@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 22.13.10 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-leak-detector@29.7.0: - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.26.2 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.13.10 - jest-util: 29.7.0 - - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: - jest-resolve: 29.7.0 - - jest-regex-util@29.6.3: {} - - jest-resolve-dependencies@29.7.0: - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - jest-resolve@29.7.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.10 - resolve.exports: 2.0.3 - slash: 3.0.0 - - jest-runner@29.7.0: - dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.10 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - - jest-runtime@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.10 - chalk: 4.1.2 - cjs-module-lexer: 1.4.3 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - - jest-snapshot@29.7.0: - dependencies: - '@babel/core': 7.26.10 - '@babel/generator': 7.26.10 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) - '@babel/types': 7.26.10 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.7.1 - transitivePeerDependencies: - - supports-color - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.13.10 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-watcher@29.7.0: - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.10 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - - jest-worker@29.7.0: - dependencies: - '@types/node': 22.13.10 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - js-tokens@4.0.0: {} - - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsdom@20.0.3: - dependencies: - abab: 2.0.6 - acorn: 8.14.1 - acorn-globals: 7.0.1 - cssom: 0.5.0 - cssstyle: 2.3.0 - data-urls: 3.0.2 - decimal.js: 10.5.0 - domexception: 4.0.0 - escodegen: 2.1.0 - form-data: 4.0.2 - html-encoding-sniffer: 3.0.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.19 - parse5: 7.2.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 4.1.4 - w3c-xmlserializer: 4.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - ws: 8.18.1 - xml-name-validator: 4.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - jsesc@3.1.0: {} - - json-buffer@3.0.1: {} - - json-parse-even-better-errors@2.3.1: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@2.2.3: {} - - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - kleur@3.0.3: {} - - leven@3.1.0: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - lines-and-columns@1.2.4: {} - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.isfinite@3.3.2: {} - - lodash.memoize@4.1.2: {} - - lodash.merge@4.6.2: {} - - lodash@4.17.21: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lz-string@1.5.0: {} - - make-dir@4.0.0: - dependencies: - semver: 7.7.1 - - make-error@1.3.6: {} - - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - - math-intrinsics@1.1.0: {} - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mimic-fn@2.1.0: {} - - min-indent@1.0.1: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - - ms@2.1.3: {} - - nanoid@3.3.11: {} - - natural-compare@1.4.0: {} - - next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - node-int64@0.4.0: {} - - node-releases@2.0.19: {} - - normalize-path@3.0.0: {} - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - nwsapi@2.2.19: {} - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-try@2.2.0: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.26.2 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse5@7.2.1: - dependencies: - entities: 4.5.0 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-type@4.0.0: {} - - perfect-freehand@1.2.2: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - pirates@4.0.6: {} - - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - - polished@4.3.1: - dependencies: - '@babel/runtime': 7.26.10 - - portscanner@2.2.0: - dependencies: - async: 2.6.4 - is-number-like: 1.0.8 - - possible-typed-array-names@1.1.0: {} - - postcss@8.5.3: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - - prettier@3.5.3: {} - - pretty-format@27.5.1: - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - proxy-compare@3.0.1: {} - - proxy-memoize@3.0.1: - dependencies: - proxy-compare: 3.0.1 - - psl@1.15.0: - dependencies: - punycode: 2.3.1 - - punycode@2.3.1: {} - - pure-rand@6.1.0: {} - - querystringify@2.2.0: {} - - queue-microtask@1.2.3: {} - - react-dom@18.3.1(react@18.3.1): - dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 - - react-icons@5.5.0(react@18.3.1): - dependencies: - react: 18.3.1 - - react-is@16.13.1: {} - - react-is@17.0.2: {} - - react-is@18.3.1: {} - - react-refresh@0.14.2: {} - - react@18.3.1: - dependencies: - loose-envify: 1.4.0 - - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regenerator-runtime@0.14.1: {} - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - require-directory@2.1.1: {} - - requires-port@1.0.0: {} - - resolve-cwd@3.0.0: - dependencies: - resolve-from: 5.0.0 - - resolve-from@4.0.0: {} - - resolve-from@5.0.0: {} - - resolve.exports@2.0.3: {} - - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.1.0: {} - - rollup@4.36.0: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.36.0 - '@rollup/rollup-android-arm64': 4.36.0 - '@rollup/rollup-darwin-arm64': 4.36.0 - '@rollup/rollup-darwin-x64': 4.36.0 - '@rollup/rollup-freebsd-arm64': 4.36.0 - '@rollup/rollup-freebsd-x64': 4.36.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.36.0 - '@rollup/rollup-linux-arm-musleabihf': 4.36.0 - '@rollup/rollup-linux-arm64-gnu': 4.36.0 - '@rollup/rollup-linux-arm64-musl': 4.36.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.36.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.36.0 - '@rollup/rollup-linux-riscv64-gnu': 4.36.0 - '@rollup/rollup-linux-s390x-gnu': 4.36.0 - '@rollup/rollup-linux-x64-gnu': 4.36.0 - '@rollup/rollup-linux-x64-musl': 4.36.0 - '@rollup/rollup-win32-arm64-msvc': 4.36.0 - '@rollup/rollup-win32-ia32-msvc': 4.36.0 - '@rollup/rollup-win32-x64-msvc': 4.36.0 - fsevents: 2.3.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safer-buffer@2.1.2: {} - - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - - semver@6.3.1: {} - - semver@7.7.1: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - signal-exit@3.0.7: {} - - sisteransi@1.0.5: {} - - slash@3.0.0: {} - - source-map-js@1.2.1: {} - - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.5.7: {} - - source-map@0.6.1: {} - - sprintf-js@1.0.3: {} - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.9 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@4.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - - strip-json-comments@3.1.1: {} - - stylis@4.2.0: {} - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - symbol-tree@3.2.4: {} - - synckit@0.9.2: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.8.1 - - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - - tmpl@1.0.5: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - tough-cookie@4.1.4: - dependencies: - psl: 1.15.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - - tr46@3.0.0: - dependencies: - punycode: 2.3.1 - - ts-api-utils@2.0.1(typescript@5.7.3): - dependencies: - typescript: 5.7.3 - - ts-jest@29.2.6(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(jest@29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)))(typescript@5.7.3): - dependencies: - bs-logger: 0.2.6 - ejs: 3.1.10 - fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.13.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.1 - typescript: 5.7.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.26.10 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.10) - - ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 22.13.10 - acorn: 8.14.1 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.7.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - - tslib@2.8.1: {} - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-detect@4.0.8: {} - - type-fest@0.21.3: {} - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript-eslint@8.26.1(eslint@9.22.0)(typescript@5.7.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.7.3))(eslint@9.22.0)(typescript@5.7.3) - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0)(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0)(typescript@5.7.3) - eslint: 9.22.0 - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - typescript@5.7.3: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - undici-types@6.20.0: {} - - universalify@0.2.0: {} - - update-browserslist-db@1.1.3(browserslist@4.24.4): - dependencies: - browserslist: 4.24.4 - escalade: 3.2.0 - picocolors: 1.1.1 - - uqr@0.1.2: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - - v8-compile-cache-lib@3.0.1: {} - - v8-to-istanbul@9.3.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - - vite@6.2.2(@types/node@22.13.10): - dependencies: - esbuild: 0.25.1 - postcss: 8.5.3 - rollup: 4.36.0 - optionalDependencies: - '@types/node': 22.13.10 - fsevents: 2.3.3 - - w3c-xmlserializer@4.0.0: - dependencies: - xml-name-validator: 4.0.0 - - walker@1.0.8: - dependencies: - makeerror: 1.0.12 - - webidl-conversions@7.0.0: {} - - whatwg-encoding@2.0.0: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@3.0.0: {} - - whatwg-url@11.0.0: - dependencies: - tr46: 3.0.0 - webidl-conversions: 7.0.0 - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - word-wrap@1.2.5: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrappy@1.0.2: {} - - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - - ws@8.18.1: {} - - xml-name-validator@4.0.0: {} - - xmlchars@2.2.0: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yaml@1.10.2: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yn@3.1.1: {} - - yocto-queue@0.1.0: {} diff --git a/public/meta/android-chrome.png b/public/meta/android-chrome.png deleted file mode 100755 index e92407961012c07bdfc9180d2f0962f2594ad0cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2081 zcmV++2;TRJP)Px#Cs0gOMbJV3|NsBgQyA*2j@e}}`s?NW_w@JP(&C9= z-FQm#&AjHBcJ92T9$uz5000M=Nkl zYT2=0UOdtYV2|OV^t1BA4{)K^M+2x^FVDo+yU@@agb_ec5>M^;(AEr42AEibI{S7X zpr#qX1!!4CnDdChN_V3A$Vc{gLOvG(bjKJ+8K&GvYXs2M4X^|_uzFsXx=VW!p;`v$ zSXB}P^bvj5ZB+oTTY^6Imi8>gWC7^$$5Wa^$X(i70^rmPQTi9qC+%f`46S-%4bYR{ z#sJ6q0cO}Qi#82`{yHPcU$;gmdvFLyur*r*(6nweNfiL&4BeFm-CZC&foMZNKo386 z5rPo`=vpR98CGTJuL*#GzF)@KUw|ozal-%ruCI0l+GGPQ0|10WX$qO(I?5IBJp-s4 z0I>1GPZ>bl0061r_Lu@3m;gXz1fEX;_Dle*L0ZiOz(4`GX#yZp08Wg|2nxWlX@F_o z#Xk7zdcNkCyP?@1zPe6e3%kngk3)EMT|?lOxnnxKk=WtJA}W9?eeF~T-$?pzCg#2y z3V_;@zfC9L#Jn0NDRbv~fI`Z6yctL_8Xt~}3V_n{|4Q4q>XLinPAV$^@-GUhd2f9t zw{V)!*TSTzh*Bq1)tiebctN5mZveQB^a3XANS~Z01UxtKwP#&S!}E=Rurk;O9CuJ znYiP6+G0cb(`9?P*yuP1JgvAs8hB}kHdFyX&J}MWTt@!*Da27LHNjt zYhQ;a*!^rW=@3|)eUV3T?OR|K?ToWAo`a_)oP7)6ls1cL-yK#DM_Gj=Dcn<%ESz2NK^7TI0CPm2Y`mzi#R)sr8Fh(de_f; zutPK7SE!pH^36Sn3A60gOcw1*;nL(o?JWPBkacWwT}b5^$<0{#!;EbrXYr2oR_?Pk zXRPYcU9qaI?civs4t_-;>?+#M6bkD3L_x@+oy~bRtA&bIamA-)ViL(=x0E0_!trZ; zr;jqsL*DjJM2x2z0OU#66>s}f5#zZIfT|LN0YlnJOq=;nWLXdvtf-e-Pnd7ZAdHw} z)>;oAOEL&_Lmq$X;1Y?w`N;&65itsusD4N?HpN=_nr z?mhnEk7u|5d|=}vS42bX{eC$w5uFpNf2WJH^3&Kk#RV?q;70CVKoH=QIbQcnWxQz* z3yEd^7ey4oyI0}KXj8_k?cgULXlTbA0j)*DK&AYC8LOh1P-3|e8qd)mA4z51LT$fg z>rq4uL8J>|XzvbU3Re?VpT|$oD3Lxx->SO08c2%xC#jq+t|3#1fIX3!>O z@Uad6`&U(3m)W$lKhoFC?6;I-M&hGR1p5n3l8*76q<-w9#u5%9T^=GV7fOvt#Lxov z23l{1xW1U6h`P9hTB!HZKtZ11;NAQ}03K=tupWp^#p&}I+??sYI}`Cy1D9|MmxAVd z8xCR5hxB$=6OL!v?+jGAk5K-2Fb(xzU;3KOA4CSPLghuEE+_dkkLYRb+Q8MBLn?!a zs_sVy?uFPW_wmsdF5>?3SU&)v(mp*Fyy*1}0N^T~(0rPg0}}v6lBihW1#Z^_0Dg1Y zB?F<6=cl7!pU}q85I~6pp(kEeJ9FI#_-;22g+*fU-RA}})x)*ySPMkg+KMsn3bovZ|%!D^p`-S>^D)B}?MB~#aNg`pVVGzzdbbeUD@ z{6@=w=%STrfGg7gebX_Ro6e%ZC_rc$z&8y5hGSrZ;T<^tH-NtZYG9MBHO=_o00000 LNkvXXu0mjfJ%-(H diff --git a/public/meta/apple-touch-icon.png b/public/meta/apple-touch-icon.png deleted file mode 100755 index 7c0e21fb5d55d1d2d831dfe33ea6976780a9d08b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1980 zcmV;t2SfOYP)Px#Cs0gOMbJV3|NsBgQWy5z(DKZ>`t0S|W-;A&Nd5Ts z>Z*+9ns@HIqvDBShe&$u000LwNklfH&e1iDt!-^!wzjpcZ4IsBYz(^a(dLeQf3Y#>Wpm{N^G_=1 z9Gn@Cb?0}oGu$FtJSl+bIGD((D7YDT}5X_}BC>dgZ_$2b9n= z%!=-Q7*VKGLXQz|iRtVH(3h0ZI{+=?FlZ%(0GTqaS@u~*uF773NN^g%;5peE^9%rK zk1Zi!5gbevfDtLt1c37jj7&rZQbI$>UI8Xp&&=n23^Tt3IH0U%;VE(lBQJx6ec=W0BAJC~}ndv@v)*H64MEsQ( zfXDE~%AYi7oxg5QIKPNPc7s76VxEH5#N?eAmGP@A?AmCRW`wDe=I_OD$!`NmE76Yc zz6$zL9JiNSsvpf)7)+Ro?dS1G@JwP^PGsf~rU?D$Dqi;#K0XGx8`Y}ZlyL7}$4u#_ zco8}FQbJ3uP>wqt+!ASbD{}0ygqB)i8J8r@K6gnlT3Auu4XrKzu@|=_FGSj1=t;7( z23?NdObQ-%NkvyPyAoP_wzRcSn2&ELXKDi>nHHLO=hhPb&<3%$-o4o<8Hnj`McF)C z=iLLrmP(I2sok_Jr`*Xw{?!~!yhorkCV?&hZM6&(IG0FzQ z|E?(QsA#4x-gEcn-L?~_Y&cDIC4jjCU6uv^x4np$e_{Ft&*-gk!9LfQRpE|!3pMN* zXQ4)DuXfcv9%>#=zZ!39LLJ7E+m}@6MH#`4kMCp9EvE@O|W+P8d2s9qa)`61?`9J6L6!FWLu9ak{o+8X$d_>qsin^LCg~XnP^Tg9jaHu}-RTW)LWFSXtvIyzS!Y`6=@V&*9fpa1_+|$(LlvU|6=~xpE0_SBRdtD8>kC|Bj zJL#H|)t~jYC_rBc)jZ>|i{#UK$XRC|Z`wnDl5t7rk|*@`utLoPchSsVtQ*8 z?XDojQ)yLbCl6#OK1``_GEwoDa_X+@=PDJnBHNL8U6&uu(?Mr6XV16{F}=0X zG*uv_A9^B+sh5;v& z=Da7I9hT#uLbv`DVs8+Zqi8INdsBX}wwRo=aBokg_Gi7bVyOWuQ( z9@S>9Y4Mav?5op;{#1E`@z9QoAvOc7{ME7?r-ZY+|Y19z%OK_1-;#z2IHDHiYJo zhG0sb@-}lsFk)cEJR=~OJA4or@f>*pttAj$4|y13pY!(jJ{(NRet>-{g%VcHa~w00 z4bQI-W>e9PFrl05=gb8Sw2^m(y!LQ@sdou~kiHYn(=7cg*zZ!_4tdJ8G;)l$=TqLZ zU@L|?XWyWWICRiV<5+y)=uJuQ_^={hgfw=#B)y2kTyY*cyEE*OLgRUxp^Bg9CIjz&%orWRM{}xZN_2Y47u)M=b0j+5MnfU6ZHw$Z+jp?}#n> ziF2f5xV34gTN_YAS8%$s+#g^A_nO^i01aJxKo32(nHD*qM-I|&;ium?y~f$6(==1e ze_6jiCBI-MGP^xXH^sc(PV5=+ZBI=!xWxA+)pSFD15w3sQ&D8J+t?8FkoXd_W{2e0 z1f}f&>}?1-x2cL@(5D-M-X*`wr~7)cx#Zgv^mud7vo{iYx;bb+2K2v9)^nqjUJEV& O00002P)Px#R8UM*MMrQ<(nA2zLjcf20NG9e(Lw;xL;%r30MSAK z)k*-+LID5&|I<(t`|ao2YdHAg+1Fks=9_u``}*mqiuKsa?YExt%)8-*TI7;!{q^$Q zcS!KUtt2rg-T(jq3UpFVQvia;zXp~*^WGS~<3hIp00j_9L_t(&-nCk3W1}DtP1__* zWjF*;(EtBGmqT$(H_2cuUz%iBo^!o<9H&zm=j-L`_T9WWzHeWb>-qG1{9N9i8=+i& z?xsI~95{V~_}EzS^Vu9eK9LdETk{9wb}jG!C-Vn{*@p9H^GD+|$Kj*-v+Q!?6ahx5 zf=Ylm?;w~_X?_NW1H>p>V4X?x`{rEaZ?~rxdsprK)=2Yj(~C_q0m4Us+l&l ziAs4JM?x)}rLAD^a2LgMRU}Sg8~4+1f7P?V}F& z7yy!di=nn_S@|tngPu)!IRCSbrczP{$EuCXF`2eAZM(-3;91K|8a+lh6oXcGgbhnw zKujeLyLxgaHwmItuG^4l{9UIP8Fw~)Gb8ZD>0(2sCan^JEA4Jok$v7xh21nJQ=VcZ znTOo~klBZq#FU6klR16=e6jXQ7ma$`0W2cZg*fyDZu|nAng;s12$n=W_5S1?HzS(kO^(}`$|jV2>ITv zCWtv@1#zMC7(l_VdW$B&99Totz)vi&c71qUO_2EyC$7|>CMShoM*33!H5Z9)tyvWfnlu}Z-EC=g z(bLf$&Z7k$jss{^G9oS$VwcgJ3EH-A#cqpPvL@|%c|qHit=Z0TIyd6fC^=Afiz@bu zMxQI!BvZIL93XK~o0kNA(>BKg#4_`FIWo~7s@hUB$%JuLLLiO>2!+g(z%~$lwq#B#!)WJT->15B%r5P{PkLY-jVf;RL!w!}^r8K8 z?>Ui*zUaqXi?~odxfe9?nCse9nqVgS#&tZXJ6E2yOKxASIdF{6r&=GiaYaZr;6gs` zU28$px0Um8Z|#9~Pdo#R<73Z}yV-8aJ{$9qd*!78$EfY>_Ot8S1M!>}Uwf##xM7Hj z<@0Cf)su+?aCh~j=JHHO0Qh}*rsDdKd=7Ab{pTP5RC-OKdKgUr0000?I!aX#0!ooyR5~P}AVpAm6M`T}H5BPW0s^lB zQl!^N2dUEgclhqQ|HNH4`C(?4XYXh4bIzPunM4^G+@+ynrviaMG}`xWKLCL!Fdz_2 z0R{y$>}QjnzyNd9(ANNgD&nb6ZOH%`?DOF6El~L{&J{qQH_|h?({~GWad9!9u5 zxbdyvaCS^=Q{(~!;sI&j)-drKUz?~f2sdIRCsElSn2fEErsZFZupWHeypR}&6!87$ z>65TIp@cvE!TqZ~)m@1xj#b0HvmE z{@1s4_rM9oe2+9`pYC0)NQCgeh<$TIN_|{ll#V7UmE_5Wc(^x0?(2<7+8=>@X-24} zx8}YQ9H#9rG|UNCzcN%taQRiS%0e+_^s|g0DiK~XBi_Ko$7mH+=)3&y@qSS7;r&>n z4lm&?eEYE5LHzl#E<;i!7nMr(lW!fJ|IU?K!yc?w5atxkTIO#DEPJSEU(s2aYmU(W zJ~Am(vi-y0jgcQbJ7BceW6LC%?Uq!J32ADk*WY+oZP;1^?4lpOH6`jd9Lct{QW1j) z9c@gV?(h;rv<010r&H?yby7A`?ubgULOq1s#L33~qa%hJysC=sPA?CtRmhd9M)Pq(IrWaPt7 zDIUsZ%+Z|Tw#o6x-^hZBES1_I8dV<)Lc=L8L;l~S$xVbRCb>?Rb;f-*U4+;p*V1hZ z{<|8nFsSosuK*+yNmlx|AiH@wHrmFNEG-zomFwQhQLWbH-uZT&upY5QQQFlRxSYu8 zSKbCO8=+-+tyihM;SOz@+Xljf@wyd9%GVw(C~=|PZ@zHS2{OZ!9~~^1Wxk>H&p*fJ*EKL1rTNRdNHSU_r%PcuynOV# zV+A>vY!^WtY^4yhkk{38;L|4tg$jJua;S)4s=125-cV6O2fyb#Hg#nW=+me|Ad+xb zGuw4ylOK|kQ`xqDol;6LlKD>(2yx}~KkL$yt7A1l0J7CKC{=J>+&uZwf-K4i#!^mG z@A<(A|K__I5{G!q+9g7{<#{D4m{Xmt7%x?$@wO}i?7&T71XGr#IZI)O)N)+qGzt^6 znvx@`?4VjEJHbi0ar54F0~`qK*c-AW;%%iTH%EV5`Cp0gnsognZFDIgK|MFhyNB^rk;8old7K{^Za5T( zNJqAtIpJ6(tnM~^8!i_js1qAJxr!Rc%C7v7bY#QWnf#G@y^*mn%E^2wjpCJ?{aYTo zB4er$>QWh=Vf792Ke@oaLVxgX9B~ zt+awSmg0Uab23N1$Ap>uVcc=N;RZ(;DR8(~{aeDl><4Z7I{5|ZyJP*0o=5MjL^M5 zF45N9-FBvKkWMT%3>tKeKwy~-dnlGkg#r`_&xv9_ni%Ytk5n%o2|%0vM1jdFh+agX zI2$>_m+i(igqW=Hof1}n)yl4n9^vlu1eZO^&Ewo8fIlGfg?9Z1_@x9Cd2;$Ve!^0O~TkJYsF;YEs{35GT(#Lt_eqEf!fqwxpjmf+HXyzHdk%Z`}(Q!!#g`l#L>~-IbAL)8mO<&XpVQ8D$z;#heF*Pv5v0oK_7@E{gkngsNv+mX_W13^% z65$purC;J;-)%+_7u6*ioG!)Th#d5JAE8jIywtrz#jM2>BhDp@iXCmNf#qCfLBF_D z7*4*Si}!Sk%M9_avXm#hjOr@JZhnvXwyh5jvAID27*LjE(COVc62PsxTsN(Etvf}& zNha+My2~7`7TZJDmT}nJa24WYEko^Xb6xVfMOBhIX^!f^*B&0?uZNKnHQ@qM4liw7 zy&txo0N$@RcLW>W4_lzr7bohHk4o(PvLgkikj#sY^@WM6x)qEz)T$m=$nBgJ(_cP< zTcZea9!8MaEENWoGT2BLSzTs;Ae&zTeO5-4nw|)871Z^&EBg*Vk5seXh}mz0>qLhN z&Yb0t!aaP{js>ORv6`J4XS&Zlje_^_dcxId6+$8gFy32C%GE03yexKk_zl8 z5pT40W&8J%=$lM1kGn)rJhWa6GW}<-e28b#V0m#(w0i8l$|(2o(-OsMp<}}gWDYNi zCz(`M%&m4d4Qfnz+o!H0UfU_Zx!bos(%NLsm!86l!il9QSM&_e#8&8G+`6=!c*@?F zxTJo|seHswFsL;{s8m_Ie*C+3mNX7344oKc(FFBcgmumhF1at_bzybS#yY@nnnrKW zl=H9eG&4HD>N4dc_m<+~8GFC~_st|%(U3g!E;cy8znK*0OyJ{F5NTbi-^L0NuE23dJO zRTE_|rW^!!7QTNqH>?29#LS*Asd=z>^&;^-jZuFkYxL**_v{$lc7E~iRYBLrvw|%` z@k>y{?r7?7>Ax)+KrKJ?>m(B02V7#Yo2@Z{WmdzoDVZE3!6o{4*~YYf?i3Y-Mg1o) ze4vx|R=j;n`o7?qxc5(z<=%c$?!hw!dg_bxN~Vo&U!V1#O6m6X$~xTwah#1s-BhTC z4bCzzl%~p#rh{u%AB8%l6CfJ}A8G~+m#w3u=cXJCPW1b$5g4q-yupCsQ>I-wc>m{$ z^qdS*5i&EnzF6eP(-d;u&jI7Ij&5`WAzrl&J5@^?$S%k6ebc#ME|O83Z{8t0ERXe@ zvikL4s|ln$WswO+(TU>udR#g#6@f!GinJKTRuF7%_~3b}_*;XsEYL_p?#oUpdOC6Z zc0)=9W2sUP{(Zz;U^@%a5{I4OwYP(4w=k|P!bXeCO1!_UftnR1d!DQWEsE(WNVzxZ0?MISkY!KKaypiL;Dt{ryI@NX?bdy# z7DKx#btuj4jFJ9xlfbID4_DBV7q55dQ8co2&-6NVaW#?d1r(#g5o26|IIyDc$sq01 z!GBpG%OhGm43R%EQt?JOp1%mvq)Yp~^X^!j<}3AX4UvSOeA*5Hn85YF2I)k|E0SB` zeqSQgbzVb$#0c_ZLslyOQ;<1+QMOG@6~Rr7w==-}#X#ZP^$?e0O^LP4{hPbcUY{}4HUBt- z#K^nF#}`nzO|N=2&)E)BW`ye{OB3Mdk+5jx>VC2k;MDH0T)R8cDZjnfdKHO|W!NZR zl~a8#BSi>4_T||31U>tTpZhqlw(wbq+(JQ215C~ze9T1kbx|+ZPI5v1!-+W+3iX=l z7ma^=dTSK8W@THhkQJ0}=-c>V(K_xKcq5_x0|X)bDyGgi{h6$4brajMz|^-*VFH2w z4`T4KQ|#iN@L4`cs8?i&5v`tQ*h2ove7DbC2lICxR{Mm38P}gryJ;4ElDqIN>HVym zF}U16T^Ki)Xl(HHV`O;&tWHvzBSiikf{GrlmfJ@7y3~JZ z-KSE=U&eNbAQ6cdOo8Io1_z=08xCD=9Plo>vRFroSj%k=!; zH?P5QR7o)BZM71`igBN~pk^&5V4DjYozKxw^NxU-c(t!|3aj;@OepGlXB0WcS|O{i z9xRi4vFakWLXH{KI7r#zVz>u30TH#S8y)W>a}V18D-21^I=Tz4b}ibFo3;GeunOv& zlqBn9W;W_cO(DINjTNvK3lu(U9TiA%D8OT=3Z4gWm+1=K97NLno z!)+|W@}9qA6t(Go7ierNA-h4z7=KmnHv8CHtOaV2euHLPen^w#q+(j(}%7} z$BVqC@wEka)dlTZwOcaFN;)hLfaN(voX|ySkHglr6z&xxwv4Ve6oiql9-Y#QseF*^ zd7#D;YT86G>i!vrZFfDFe#^tjUtbKG*v0L>r(&95{6{pJi`IMq?$gn1VL<(r@HM=O8?BVdUkrKDzj1>ygJV#CP9iRLKGiNFst0 zM6EwO*N0&W1rQb2v~cor2JeGsucBSDKY=C&6Om?hDpxU|d%xnX{l-W}USAruKge?5 zP|>Ee5_QP#-0U)Bf#+E)4R}ON9bO!E--O_kdSQL=)WH`_BezbzYgA2mzJXcwJk1uA zZk-@Mi3ZU|fhhivy#dJ%G~O4oyz0)ZRk8m`I#~Jm8 ze}Um&{f7BfT4_DTxb?Wa0*mF2b&MB>&fj_HEJH~%`O2BY<&-bnz3k=j-#oBb-gt+S zINY=FoEj`9Ck#=sMk!Cd-^K+y!3lQd4e*T@qAq=gjt~nG5&9q_t#fHYtQUxe(naC5(Oq~Pw@fc<+H-^$<3v?{h>6)25QA1{%c$K*? z;)`pT9N2-D+Ud5JRHp&cVT|FPN;FKCel-LA#mRlF4f5!|O26mB{g=_8%Yb%&Gth;j zA7=0K77_5+alZ>_`Ghk`1IH?T5a{3KWPMLz zn8E-M@V-1z^V~N77Tfvv1M11-5jmoo4Uh68G+JD11a=Y>JmrFjs;=F?p|wCrRYarY zPs9Ca!BI!S>p(f4sRDjgN5%)*B~D?D-RI8@fk(;_elGO1L3+Gvq_I&iYR#XSwQhvI zX{=~iL+A!kLgo#V6Bc{o_n522MUAcf@05N)=YoC zpEB1Y<}r71WaJymXRS0vSN0z;tR?=H7Dx4cq)B17<(qOH`9xk(dg|^8y5SW5NlSrJ z-!mura~=Tr>*FRaSjUoqPR*EGZZ{8y*8Ota)vGE-Pj^hIwH*&OJY*B^GfGPhmi!*u8`Dr8pLKiSu%ea1izCAZ0`2#bKEBg4l7SVAe zgPaovZ)poT3iN;rzd{oS7vi?*f|r*FO*?s(0+-=Xm}Dw@ARHj3;x-qU;Lbdld7%fzJK)h7O3YO?7}xM?n3-_n6r)W{dIVHbf(DCJ41G5vVm6;m|n$j>fLnqzdZ3WEFfQ@Z^}7O z(>3q>z)FJJDE284cdByI5QQ9M3f^yED!0QNlfM|2|8}o_$W(;GM&8?U-5KRKc9#ex zNJo&#dRkS&A_wKGnIPQ&7o9NQX!heHyAhw&4GJj_h8p4>JisU)?p1SHGC^Sfj;DtckQ-Za6-Yq2@TkN-t|VY3h=I#xu4 z99zA}VFscpWDS)P{W_g|?v}7aEDhM#Oq^xCEH(+Aa0&1NQ30qzQ}P;Uql_K(!#Q;aRC| zgIec-nLn@{8kYH7Q&B*nodZS!Z3(F4c(~MGSO87rWg@BC2=%4iR~@+-b@VK43Z)CQ zo%qao`G>~95#Qx@%VOyMeNDp$=d%o8wQW;~C@Z7f?$g16-s#F)fGc0s`>(x`K@&aD zZcbS|l8>9rFk5MLhGpd*aDAR~G>JYvRiNF%ez{_yP3N-gm3}r6hygm`*C&4{Fax{r z^9Y<;OtA{6IBJX4sy-rn>11W@Ch&49;fU^KJT}2l z0IRP?x9`W^cCup`LSVBBX*+s($&Mi?gcb#0C~p--AfrHmfR}CBz*(Q#c4W4O6UmE{ zy3Io33MtMJi>097p_LuIjS1{fz);LmwOQDnJI1Msk=`SY!t*a`eGeMmPZ+VP%X}Q{ zRT!K8xv_7C-zd9wM)~99rY?z1JC7TQFZ$l7P*`bS$Ge3+NMIaNh2!PKgzxMH@m-fu zHXp|0gr|PL&99z$qH{T4Ino-y_tpR&T_=FLdtSw&EvypJE1w{r!*&)l*zk^CCp*lB zJM?oUc;8e;*q5qV%`NO^PL@P!6*xRW7H}MY>@{WaDk7nfWX}*ZPF7b*Npr`L*qcF` zm^E!MA5hOV-uehPIN_)wZ@g!eaUi7c*+T8<p|KzC z3tfY%blWHxt83;q^!)R_Nv5E`n#8TJFlL(O+zusNB;zb#~to5>ZLhWvSTlJ!E&sON;@P zRB9RV{MbIt&?gO(`*hDc&lj;Z5@vwjo;0eaV7yZG7 z0mZmkt?*OoJg95CUJk6eUEF?Knf#D>s>-;JjxhT=Uy4v$d_1#WOO1tmjqmvwh-vBO zmaqy@fD6~coAtl;*#8|mRDUISD9(b`wV=y`pZ`a8==_}LHbc-avcsNb^*4ftK1?NM z8k(|uP0^+$I9?})(;8Yl75mQ-!xD?HRP3!Q1u`7K7$#4Q(Zy%YViX3dqrW2YK7Dkp zD1*AcAY}>~YzFDCAc32l{F+k-+l{f?VSdG4OrpSu>FCN$WM+jla4-1jKSEPFJ!&6- zXsZ7fNqPK#h1&;toGmoSTbk-;b0rSIC_5)&c0q}k!lF7%OQ)rflulOdt7Wztw`1aq zfv4GNqo0d&4)dm=C-|in4DxK!k;2QZye&ZL8r_ff7fN*IEmT`$7Yxk zhcKWiUAN?UDN&vnYs{Zi%B?Xc;1q)bcIYh2lVn@BxF#FG0eO#R)uw$V1wYgu7BgI@>od&*!!8 L7~C$ug%0~4vM>Qv diff --git a/test/example.test.ts b/test/example.test.ts deleted file mode 100644 index c5be721..0000000 --- a/test/example.test.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe('Main test suite', () => { - it('should pass this demo test', () => { - expect(true).toBe(true); - }); -}); \ No newline at end of file diff --git a/tsconfig.app.json b/tsconfig.app.json deleted file mode 100644 index e66c3f8..0000000 --- a/tsconfig.app.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "react-jsx", - "paths": { - /* Specify a set of entries that re-map imports to additional lookup locations. */ - "$components/*": ["./app/components/*"], - "$utils/*": ["./app/utils/*"], - "$styles/*": ["./app/styles/*"], - "$hooks/*": ["./app/hooks/*"], - "$pages/*": ["./app/pages/*"] - }, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true - }, - "include": ["app"] -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 1ffef60..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "files": [], - "references": [ - { "path": "./tsconfig.app.json" }, - { "path": "./tsconfig.node.json" } - ] -} diff --git a/tsconfig.node.json b/tsconfig.node.json deleted file mode 100644 index dc608fc..0000000 --- a/tsconfig.node.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", - "target": "ES2022", - "lib": ["ES2023"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true - }, - "include": ["vite.config.mts"] -} diff --git a/vite-plugin-port-scanner.ts b/vite-plugin-port-scanner.ts deleted file mode 100644 index 97c08fe..0000000 --- a/vite-plugin-port-scanner.ts +++ /dev/null @@ -1,28 +0,0 @@ -// @ts-expect-error No types -import portscanner from 'portscanner'; -import { PluginOption } from 'vite'; - -export default function vitePortScanner() { - return { - name: 'vite-port-scanner-plugin', - - // Vite config hooks - async config(config, { command }) { - if (command === 'serve') { - const startPort = config.server?.port || 9000; - const port = await portscanner.findAPortNotInUse( - startPort, - startPort + 100, - 'localhost' - ); - if (port !== startPort) { - // eslint-disable-next-line no-console - console.warn( - ` Port ${startPort} is busy. Using port ${port} instead.` - ); - } - config.server = { ...(config.server || {}), port }; - } - } - } as PluginOption; -} diff --git a/vite.config.mts b/vite.config.mts deleted file mode 100644 index bd8e982..0000000 --- a/vite.config.mts +++ /dev/null @@ -1,25 +0,0 @@ -import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react'; -import path from 'path'; - -import vitePortScanner from './vite-plugin-port-scanner'; -import pkg from './package.json'; - -const alias = Object.entries(pkg.alias).reduce((acc, [key, value]) => { - return { - ...acc, - [key]: path.resolve(__dirname, value.replace('~/', './')) - }; -}, {}); - - -// https://vite.dev/config/ -export default defineConfig({ - plugins: [react(), vitePortScanner()], - define: { - APP_VERSION: JSON.stringify(pkg.version) - }, - resolve: { - alias - } -}); From 59d513d5b7a1bda3bd048c06868c027542d04977 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Thu, 31 Jul 2025 09:52:35 +0100 Subject: [PATCH 23/26] refactor: move CLI files to root directory --- .gitignore | 74 +----------------- cli/README.md => README.md | 0 cli/.gitignore | 4 - {cli/generated => generated}/.gitignore | 0 cli/package.json => package.json | 0 cli/pnpm-lock.yaml => pnpm-lock.yaml | 0 {cli/scripts => scripts}/generate-all.sh | 0 .../generator/apply-component-library.ts | 0 .../generator/apply-map-library.ts | 0 {cli/src => src}/generator/create-env-file.ts | 0 {cli/src => src}/generator/index.ts | 0 .../generator/merge-package-dependencies.ts | 0 {cli/src => src}/generator/process-readme.ts | 0 {cli/src => src}/generator/replace-in-file.ts | 0 {cli/src => src}/index.ts | 0 {cli/src => src}/types.ts | 0 {cli/templates => templates}/base/.babelrc | 0 .../base/.editorconfig | 0 {cli/templates => templates}/base/.gitignore | 0 {cli/templates => templates}/base/.nvmrc | 0 {cli/templates => templates}/base/.prettierrc | 0 .../base/.stylelintrc.json | 0 {cli/templates => templates}/base/LICENSE | 0 {cli/templates => templates}/base/_README.md | 0 {cli/templates => templates}/base/app/app.tsx | 0 .../templates => templates}/base/app/main.tsx | 0 .../base/app/media/layout/ds-logo-pos.svg | 0 .../base/app/vite-env.d.ts | 0 .../base/eslint.config.mjs | 0 {cli/templates => templates}/base/index.html | 0 .../base/jest.config.js | 0 .../base/jest.setup.ts | 0 .../templates => templates}/base/package.json | 0 .../base/public/meta/android-chrome.png | Bin .../base/public/meta/apple-touch-icon.png | Bin .../base/public/meta/favicon.png | Bin .../base/public/meta/meta-image.png | Bin .../base/test/example.test.ts | 0 .../base/tsconfig.app.json | 0 .../base/tsconfig.json | 0 .../base/tsconfig.node.json | 0 .../base/vite-plugin-port-scanner.ts | 0 .../base/vite.config.mts | 0 .../component-library/chakra/main.tsx | 0 .../component-library/chakra/package.json | 0 .../chakra/styles/color-palette.ts | 0 .../component-library/chakra/styles/theme.ts | 0 .../component-library/none/main.tsx | 0 .../component-library/none/package.json | 0 .../component-library/uswds/app.tsx | 0 .../component-library/uswds/main.tsx | 0 .../component-library/uswds/package.json | 0 .../map/mapbox-gl/app.tsx | 0 .../map/mapbox-gl/package.json | 0 .../map/maplibre-gl/app.tsx | 0 .../map/maplibre-gl/package.json | 0 cli/tsconfig.json => tsconfig.json | 0 cli/tsup.config.ts => tsup.config.ts | 0 58 files changed, 3 insertions(+), 75 deletions(-) rename cli/README.md => README.md (100%) delete mode 100644 cli/.gitignore rename {cli/generated => generated}/.gitignore (100%) rename cli/package.json => package.json (100%) rename cli/pnpm-lock.yaml => pnpm-lock.yaml (100%) rename {cli/scripts => scripts}/generate-all.sh (100%) rename {cli/src => src}/generator/apply-component-library.ts (100%) rename {cli/src => src}/generator/apply-map-library.ts (100%) rename {cli/src => src}/generator/create-env-file.ts (100%) rename {cli/src => src}/generator/index.ts (100%) rename {cli/src => src}/generator/merge-package-dependencies.ts (100%) rename {cli/src => src}/generator/process-readme.ts (100%) rename {cli/src => src}/generator/replace-in-file.ts (100%) rename {cli/src => src}/index.ts (100%) rename {cli/src => src}/types.ts (100%) rename {cli/templates => templates}/base/.babelrc (100%) rename {cli/templates => templates}/base/.editorconfig (100%) rename {cli/templates => templates}/base/.gitignore (100%) rename {cli/templates => templates}/base/.nvmrc (100%) rename {cli/templates => templates}/base/.prettierrc (100%) rename {cli/templates => templates}/base/.stylelintrc.json (100%) rename {cli/templates => templates}/base/LICENSE (100%) rename {cli/templates => templates}/base/_README.md (100%) rename {cli/templates => templates}/base/app/app.tsx (100%) rename {cli/templates => templates}/base/app/main.tsx (100%) rename {cli/templates => templates}/base/app/media/layout/ds-logo-pos.svg (100%) rename {cli/templates => templates}/base/app/vite-env.d.ts (100%) rename {cli/templates => templates}/base/eslint.config.mjs (100%) rename {cli/templates => templates}/base/index.html (100%) rename {cli/templates => templates}/base/jest.config.js (100%) rename {cli/templates => templates}/base/jest.setup.ts (100%) rename {cli/templates => templates}/base/package.json (100%) rename {cli/templates => templates}/base/public/meta/android-chrome.png (100%) rename {cli/templates => templates}/base/public/meta/apple-touch-icon.png (100%) rename {cli/templates => templates}/base/public/meta/favicon.png (100%) rename {cli/templates => templates}/base/public/meta/meta-image.png (100%) rename {cli/templates => templates}/base/test/example.test.ts (100%) rename {cli/templates => templates}/base/tsconfig.app.json (100%) rename {cli/templates => templates}/base/tsconfig.json (100%) rename {cli/templates => templates}/base/tsconfig.node.json (100%) rename {cli/templates => templates}/base/vite-plugin-port-scanner.ts (100%) rename {cli/templates => templates}/base/vite.config.mts (100%) rename {cli/templates => templates}/component-library/chakra/main.tsx (100%) rename {cli/templates => templates}/component-library/chakra/package.json (100%) rename {cli/templates => templates}/component-library/chakra/styles/color-palette.ts (100%) rename {cli/templates => templates}/component-library/chakra/styles/theme.ts (100%) rename {cli/templates => templates}/component-library/none/main.tsx (100%) rename {cli/templates => templates}/component-library/none/package.json (100%) rename {cli/templates => templates}/component-library/uswds/app.tsx (100%) rename {cli/templates => templates}/component-library/uswds/main.tsx (100%) rename {cli/templates => templates}/component-library/uswds/package.json (100%) rename {cli/templates => templates}/map/mapbox-gl/app.tsx (100%) rename {cli/templates => templates}/map/mapbox-gl/package.json (100%) rename {cli/templates => templates}/map/maplibre-gl/app.tsx (100%) rename {cli/templates => templates}/map/maplibre-gl/package.json (100%) rename cli/tsconfig.json => tsconfig.json (100%) rename cli/tsup.config.ts => tsup.config.ts (100%) diff --git a/.gitignore b/.gitignore index 62e94e0..aa0926a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,72 +1,4 @@ -################################################ -############### .gitignore ################## -################################################ -# -# This file is only relevant if you are using git. -# -# Files which match the splat patterns below will -# be ignored by git. This keeps random crap and -# and sensitive credentials from being uploaded to -# your repository. It allows you to configure your -# app for your machine without accidentally -# committing settings which will smash the local -# settings of other developers on your team. -# -# Some reasonable defaults are included below, -# but, of course, you should modify/extend/prune -# to fit your needs! -################################################ - -app/scripts/time.json - -node_modules -bower_components -.sass-cache -test/bower_components - - -################################################ -# Node.js / NPM -# -# Common files generated by Node, NPM, and the -# related ecosystem. -################################################ - -lib-cov -*.seed +node_modules/ +dist/ +.env *.log -*.out -*.pid -npm-debug.log -yarn-error.log -.parcel-cache - - -################################################ -# Apidocs -# -# Common files generated by apidocs and other docs -################################################ - - -################################################ -# Miscellaneous -# -# Common files generated by text editors, -# operating systems, file systems, etc. -################################################ - -*~ -*# -.DS_STORE -.DS_Store -.netbeans -nbproject -.idea -.resources -.node_history -temp -tmp -.tmp -dist -parcel-bundle-reports \ No newline at end of file diff --git a/cli/README.md b/README.md similarity index 100% rename from cli/README.md rename to README.md diff --git a/cli/.gitignore b/cli/.gitignore deleted file mode 100644 index aa0926a..0000000 --- a/cli/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -dist/ -.env -*.log diff --git a/cli/generated/.gitignore b/generated/.gitignore similarity index 100% rename from cli/generated/.gitignore rename to generated/.gitignore diff --git a/cli/package.json b/package.json similarity index 100% rename from cli/package.json rename to package.json diff --git a/cli/pnpm-lock.yaml b/pnpm-lock.yaml similarity index 100% rename from cli/pnpm-lock.yaml rename to pnpm-lock.yaml diff --git a/cli/scripts/generate-all.sh b/scripts/generate-all.sh similarity index 100% rename from cli/scripts/generate-all.sh rename to scripts/generate-all.sh diff --git a/cli/src/generator/apply-component-library.ts b/src/generator/apply-component-library.ts similarity index 100% rename from cli/src/generator/apply-component-library.ts rename to src/generator/apply-component-library.ts diff --git a/cli/src/generator/apply-map-library.ts b/src/generator/apply-map-library.ts similarity index 100% rename from cli/src/generator/apply-map-library.ts rename to src/generator/apply-map-library.ts diff --git a/cli/src/generator/create-env-file.ts b/src/generator/create-env-file.ts similarity index 100% rename from cli/src/generator/create-env-file.ts rename to src/generator/create-env-file.ts diff --git a/cli/src/generator/index.ts b/src/generator/index.ts similarity index 100% rename from cli/src/generator/index.ts rename to src/generator/index.ts diff --git a/cli/src/generator/merge-package-dependencies.ts b/src/generator/merge-package-dependencies.ts similarity index 100% rename from cli/src/generator/merge-package-dependencies.ts rename to src/generator/merge-package-dependencies.ts diff --git a/cli/src/generator/process-readme.ts b/src/generator/process-readme.ts similarity index 100% rename from cli/src/generator/process-readme.ts rename to src/generator/process-readme.ts diff --git a/cli/src/generator/replace-in-file.ts b/src/generator/replace-in-file.ts similarity index 100% rename from cli/src/generator/replace-in-file.ts rename to src/generator/replace-in-file.ts diff --git a/cli/src/index.ts b/src/index.ts similarity index 100% rename from cli/src/index.ts rename to src/index.ts diff --git a/cli/src/types.ts b/src/types.ts similarity index 100% rename from cli/src/types.ts rename to src/types.ts diff --git a/cli/templates/base/.babelrc b/templates/base/.babelrc similarity index 100% rename from cli/templates/base/.babelrc rename to templates/base/.babelrc diff --git a/cli/templates/base/.editorconfig b/templates/base/.editorconfig similarity index 100% rename from cli/templates/base/.editorconfig rename to templates/base/.editorconfig diff --git a/cli/templates/base/.gitignore b/templates/base/.gitignore similarity index 100% rename from cli/templates/base/.gitignore rename to templates/base/.gitignore diff --git a/cli/templates/base/.nvmrc b/templates/base/.nvmrc similarity index 100% rename from cli/templates/base/.nvmrc rename to templates/base/.nvmrc diff --git a/cli/templates/base/.prettierrc b/templates/base/.prettierrc similarity index 100% rename from cli/templates/base/.prettierrc rename to templates/base/.prettierrc diff --git a/cli/templates/base/.stylelintrc.json b/templates/base/.stylelintrc.json similarity index 100% rename from cli/templates/base/.stylelintrc.json rename to templates/base/.stylelintrc.json diff --git a/cli/templates/base/LICENSE b/templates/base/LICENSE similarity index 100% rename from cli/templates/base/LICENSE rename to templates/base/LICENSE diff --git a/cli/templates/base/_README.md b/templates/base/_README.md similarity index 100% rename from cli/templates/base/_README.md rename to templates/base/_README.md diff --git a/cli/templates/base/app/app.tsx b/templates/base/app/app.tsx similarity index 100% rename from cli/templates/base/app/app.tsx rename to templates/base/app/app.tsx diff --git a/cli/templates/base/app/main.tsx b/templates/base/app/main.tsx similarity index 100% rename from cli/templates/base/app/main.tsx rename to templates/base/app/main.tsx diff --git a/cli/templates/base/app/media/layout/ds-logo-pos.svg b/templates/base/app/media/layout/ds-logo-pos.svg similarity index 100% rename from cli/templates/base/app/media/layout/ds-logo-pos.svg rename to templates/base/app/media/layout/ds-logo-pos.svg diff --git a/cli/templates/base/app/vite-env.d.ts b/templates/base/app/vite-env.d.ts similarity index 100% rename from cli/templates/base/app/vite-env.d.ts rename to templates/base/app/vite-env.d.ts diff --git a/cli/templates/base/eslint.config.mjs b/templates/base/eslint.config.mjs similarity index 100% rename from cli/templates/base/eslint.config.mjs rename to templates/base/eslint.config.mjs diff --git a/cli/templates/base/index.html b/templates/base/index.html similarity index 100% rename from cli/templates/base/index.html rename to templates/base/index.html diff --git a/cli/templates/base/jest.config.js b/templates/base/jest.config.js similarity index 100% rename from cli/templates/base/jest.config.js rename to templates/base/jest.config.js diff --git a/cli/templates/base/jest.setup.ts b/templates/base/jest.setup.ts similarity index 100% rename from cli/templates/base/jest.setup.ts rename to templates/base/jest.setup.ts diff --git a/cli/templates/base/package.json b/templates/base/package.json similarity index 100% rename from cli/templates/base/package.json rename to templates/base/package.json diff --git a/cli/templates/base/public/meta/android-chrome.png b/templates/base/public/meta/android-chrome.png similarity index 100% rename from cli/templates/base/public/meta/android-chrome.png rename to templates/base/public/meta/android-chrome.png diff --git a/cli/templates/base/public/meta/apple-touch-icon.png b/templates/base/public/meta/apple-touch-icon.png similarity index 100% rename from cli/templates/base/public/meta/apple-touch-icon.png rename to templates/base/public/meta/apple-touch-icon.png diff --git a/cli/templates/base/public/meta/favicon.png b/templates/base/public/meta/favicon.png similarity index 100% rename from cli/templates/base/public/meta/favicon.png rename to templates/base/public/meta/favicon.png diff --git a/cli/templates/base/public/meta/meta-image.png b/templates/base/public/meta/meta-image.png similarity index 100% rename from cli/templates/base/public/meta/meta-image.png rename to templates/base/public/meta/meta-image.png diff --git a/cli/templates/base/test/example.test.ts b/templates/base/test/example.test.ts similarity index 100% rename from cli/templates/base/test/example.test.ts rename to templates/base/test/example.test.ts diff --git a/cli/templates/base/tsconfig.app.json b/templates/base/tsconfig.app.json similarity index 100% rename from cli/templates/base/tsconfig.app.json rename to templates/base/tsconfig.app.json diff --git a/cli/templates/base/tsconfig.json b/templates/base/tsconfig.json similarity index 100% rename from cli/templates/base/tsconfig.json rename to templates/base/tsconfig.json diff --git a/cli/templates/base/tsconfig.node.json b/templates/base/tsconfig.node.json similarity index 100% rename from cli/templates/base/tsconfig.node.json rename to templates/base/tsconfig.node.json diff --git a/cli/templates/base/vite-plugin-port-scanner.ts b/templates/base/vite-plugin-port-scanner.ts similarity index 100% rename from cli/templates/base/vite-plugin-port-scanner.ts rename to templates/base/vite-plugin-port-scanner.ts diff --git a/cli/templates/base/vite.config.mts b/templates/base/vite.config.mts similarity index 100% rename from cli/templates/base/vite.config.mts rename to templates/base/vite.config.mts diff --git a/cli/templates/component-library/chakra/main.tsx b/templates/component-library/chakra/main.tsx similarity index 100% rename from cli/templates/component-library/chakra/main.tsx rename to templates/component-library/chakra/main.tsx diff --git a/cli/templates/component-library/chakra/package.json b/templates/component-library/chakra/package.json similarity index 100% rename from cli/templates/component-library/chakra/package.json rename to templates/component-library/chakra/package.json diff --git a/cli/templates/component-library/chakra/styles/color-palette.ts b/templates/component-library/chakra/styles/color-palette.ts similarity index 100% rename from cli/templates/component-library/chakra/styles/color-palette.ts rename to templates/component-library/chakra/styles/color-palette.ts diff --git a/cli/templates/component-library/chakra/styles/theme.ts b/templates/component-library/chakra/styles/theme.ts similarity index 100% rename from cli/templates/component-library/chakra/styles/theme.ts rename to templates/component-library/chakra/styles/theme.ts diff --git a/cli/templates/component-library/none/main.tsx b/templates/component-library/none/main.tsx similarity index 100% rename from cli/templates/component-library/none/main.tsx rename to templates/component-library/none/main.tsx diff --git a/cli/templates/component-library/none/package.json b/templates/component-library/none/package.json similarity index 100% rename from cli/templates/component-library/none/package.json rename to templates/component-library/none/package.json diff --git a/cli/templates/component-library/uswds/app.tsx b/templates/component-library/uswds/app.tsx similarity index 100% rename from cli/templates/component-library/uswds/app.tsx rename to templates/component-library/uswds/app.tsx diff --git a/cli/templates/component-library/uswds/main.tsx b/templates/component-library/uswds/main.tsx similarity index 100% rename from cli/templates/component-library/uswds/main.tsx rename to templates/component-library/uswds/main.tsx diff --git a/cli/templates/component-library/uswds/package.json b/templates/component-library/uswds/package.json similarity index 100% rename from cli/templates/component-library/uswds/package.json rename to templates/component-library/uswds/package.json diff --git a/cli/templates/map/mapbox-gl/app.tsx b/templates/map/mapbox-gl/app.tsx similarity index 100% rename from cli/templates/map/mapbox-gl/app.tsx rename to templates/map/mapbox-gl/app.tsx diff --git a/cli/templates/map/mapbox-gl/package.json b/templates/map/mapbox-gl/package.json similarity index 100% rename from cli/templates/map/mapbox-gl/package.json rename to templates/map/mapbox-gl/package.json diff --git a/cli/templates/map/maplibre-gl/app.tsx b/templates/map/maplibre-gl/app.tsx similarity index 100% rename from cli/templates/map/maplibre-gl/app.tsx rename to templates/map/maplibre-gl/app.tsx diff --git a/cli/templates/map/maplibre-gl/package.json b/templates/map/maplibre-gl/package.json similarity index 100% rename from cli/templates/map/maplibre-gl/package.json rename to templates/map/maplibre-gl/package.json diff --git a/cli/tsconfig.json b/tsconfig.json similarity index 100% rename from cli/tsconfig.json rename to tsconfig.json diff --git a/cli/tsup.config.ts b/tsup.config.ts similarity index 100% rename from cli/tsup.config.ts rename to tsup.config.ts From 05b8bf99a58e7ec0b323ef6b51a4ac7e8b05ffdc Mon Sep 17 00:00:00 2001 From: Vitor George Date: Thu, 31 Jul 2025 11:28:14 +0100 Subject: [PATCH 24/26] fix: remove custom rules --- templates/base/eslint.config.mjs | 42 +------------------------------- 1 file changed, 1 insertion(+), 41 deletions(-) diff --git a/templates/base/eslint.config.mjs b/templates/base/eslint.config.mjs index abd8d51..c2932c3 100644 --- a/templates/base/eslint.config.mjs +++ b/templates/base/eslint.config.mjs @@ -17,45 +17,5 @@ export default [ pluginJs.configs.recommended, ...tseslint.configs.recommended, pluginReact.configs.flat.recommended, - eslintPluginPrettierRecommended, - { - name: 'Custom Rules ', - rules: { - 'no-console': 2, - 'prefer-promise-reject-errors': 0, - // 'import/order': 2, - 'react/button-has-type': 2, - 'react/react-in-jsx-scope': 0, - 'react/jsx-closing-bracket-location': 2, - 'react/jsx-closing-tag-location': 2, - 'react/jsx-curly-spacing': 2, - 'react/jsx-curly-newline': 2, - 'react/jsx-equals-spacing': 2, - 'react/jsx-max-props-per-line': [2, { maximum: 1, when: 'multiline' }], - 'react/jsx-first-prop-new-line': 2, - 'react/jsx-curly-brace-presence': [ - 2, - { props: 'never', children: 'never' } - ], - 'react/jsx-pascal-case': 2, - 'react/jsx-props-no-multi-spaces': 2, - 'react/jsx-tag-spacing': [2, { beforeClosing: 'never' }], - 'react/jsx-wrap-multilines': 2, - 'react/no-array-index-key': 2, - 'react/no-typos': 2, - 'react/no-unused-prop-types': 2, - 'react/no-unused-state': 2, - 'react/self-closing-comp': 2, - 'react/style-prop-object': 2, - 'react/void-dom-elements-no-children': 2, - 'react/function-component-definition': [ - 2, - { namedComponents: ['function-declaration', 'arrow-function'] } - ], - 'react-hooks/rules-of-hooks': 2, // Checks rules of Hooks - // 'react-hooks/exhaustive-deps': 1, // Checks effect dependencies - // 'fp/no-mutating-methods': 1, - '@typescript-eslint/no-explicit-any': 'warn' - } - } + eslintPluginPrettierRecommended, ]; From 214c501b1dc02dc330916da62d0d31b175dc0653 Mon Sep 17 00:00:00 2001 From: Vitor George Date: Thu, 31 Jul 2025 11:31:54 +0100 Subject: [PATCH 25/26] fix: Add missing dependency on chakra template --- templates/component-library/chakra/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/component-library/chakra/package.json b/templates/component-library/chakra/package.json index 58d0d8f..4b3c9cd 100644 --- a/templates/component-library/chakra/package.json +++ b/templates/component-library/chakra/package.json @@ -1,6 +1,7 @@ { "dependencies": { "@chakra-ui/react": "^3.23.0", - "@emotion/react": "^11.14.0" + "@emotion/react": "^11.14.0", + "polished": "^4.3.1" } } From 8c442439abc42a53690bda8b1db1e2c711894bf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alice=20R=C3=BChl?= Date: Thu, 31 Jul 2025 12:44:43 +0200 Subject: [PATCH 26/26] fix: Use different template path for dev vs. prod mode - Add getTemplatePath utility function to handle path differences between development (src/generator) and production (dist/) environments - Replace hardcoded path.resolve calls with centralized function across all generator modules (index.ts, apply-component-library.ts, apply-map-library.ts) - Fix template path resolution issues that caused ENOENT errors when running CLI in different modes - Ensure consistent behavior between `pnpm start` (dev) and `node dist/index.js` (prod) --- src/generator/apply-component-library.ts | 6 ++--- src/generator/apply-map-library.ts | 3 ++- src/generator/index.ts | 3 ++- src/generator/template-paths.ts | 29 ++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 src/generator/template-paths.ts diff --git a/src/generator/apply-component-library.ts b/src/generator/apply-component-library.ts index bc6a894..6b2c207 100644 --- a/src/generator/apply-component-library.ts +++ b/src/generator/apply-component-library.ts @@ -1,6 +1,7 @@ import fs from 'fs-extra'; import path from 'path'; import { mergePackageDependencies } from './merge-package-dependencies'; +import { getTemplatePath } from './template-paths'; /** * Applies the selected component library template to the generated project. @@ -15,9 +16,8 @@ export async function applyComponentLibrary( targetDir: string, componentLibrary: string ): Promise { - const componentLibDir = path.resolve( - __dirname, - '../../templates/component-library', + const componentLibDir = getTemplatePath( + 'component-library', componentLibrary ); if (!(await fs.pathExists(componentLibDir))) { diff --git a/src/generator/apply-map-library.ts b/src/generator/apply-map-library.ts index e67fbc8..f0dc1dc 100644 --- a/src/generator/apply-map-library.ts +++ b/src/generator/apply-map-library.ts @@ -1,6 +1,7 @@ import fs from 'fs-extra'; import path from 'path'; import { mergePackageDependencies } from './merge-package-dependencies'; +import { getTemplatePath } from './template-paths'; /** * Applies the selected map library template to the generated project. @@ -19,7 +20,7 @@ export async function applyMapLibrary( return; } - const mapLibDir = path.resolve(__dirname, '../../templates/map', mapLibrary); + const mapLibDir = getTemplatePath('map', mapLibrary); if (!(await fs.pathExists(mapLibDir))) { throw new Error(`Map library template not found: ${mapLibrary}`); diff --git a/src/generator/index.ts b/src/generator/index.ts index 2e25e55..7350514 100644 --- a/src/generator/index.ts +++ b/src/generator/index.ts @@ -4,6 +4,7 @@ import { createEnvFile } from './create-env-file'; import { processReadme } from './process-readme'; import { applyComponentLibrary } from './apply-component-library'; import { applyMapLibrary } from './apply-map-library'; +import { getTemplatePath } from './template-paths'; /** * Main project generation function that orchestrates the entire project creation process. @@ -24,7 +25,7 @@ export async function generateProject( force: boolean, targetDir: string ): Promise { - const baseTemplateDir = path.resolve(__dirname, '../../templates/base'); + const baseTemplateDir = getTemplatePath('base'); if (await fs.pathExists(targetDir)) { if (!force) { diff --git a/src/generator/template-paths.ts b/src/generator/template-paths.ts new file mode 100644 index 0000000..6e33706 --- /dev/null +++ b/src/generator/template-paths.ts @@ -0,0 +1,29 @@ +import path from 'path'; + +/** + * Gets the absolute path to the templates directory. + * Handles both development mode (running from TypeScript source) and + * production mode (running from compiled JavaScript). + * + * @returns The absolute path to the templates directory + */ +function getTemplatesDir(): string { + // Check if we're running from source (development) or compiled (production) + const isDev = __dirname.includes('/src/'); + const relativePath = isDev ? '../../templates' : '../templates'; + return path.resolve(__dirname, relativePath); +} + +/** + * Gets the absolute path to a specific template subdirectory. + * + * @param subdir - The subdirectory within templates (e.g., 'base', 'component-library', 'map') + * @param name - Optional specific template name within the subdirectory + * @returns The absolute path to the template directory + */ +export function getTemplatePath(subdir: string, name?: string): string { + const templatesDir = getTemplatesDir(); + return name + ? path.join(templatesDir, subdir, name) + : path.join(templatesDir, subdir); +}